From 5243c4bd33b873ead272b37ce992c9b4fb1252e7 Mon Sep 17 00:00:00 2001 From: dkxce Date: Tue, 21 Dec 2021 17:54:00 +0300 Subject: [PATCH] dkxce.Route.Server/21.12.21.23-V4-win32 --- SOLVER/BUILD.cmd | 41 + SOLVER/CLEAR_UNUSED.cmd | 11 + SOLVER/RGSolver/Program.cs | 577 ++ SOLVER/RGSolver/Properties/AssemblyInfo.cs | 33 + SOLVER/RGSolver/RouteGraphSolver.csproj | 89 + SOLVER/RGSolver/TulaKalugaSmolensk.cs | 491 ++ SOLVER/RGSolver/obj/Debug/RMXSolver.exe | Bin 0 -> 196608 bytes SOLVER/RGSolver/obj/Debug/RMXSolver.pdb | Bin 0 -> 36352 bytes .../obj/Debug/ResolveAssemblyReference.cache | Bin 0 -> 21452 bytes SOLVER/RGSolver/obj/Release/RMXSolver.exe | Bin 0 -> 196608 bytes SOLVER/RGSolver/obj/Release/RMXSolver.pdb | Bin 0 -> 36352 bytes .../Release/ResolveAssemblyReference.cache | Bin 0 -> 20790 bytes .../obj/RouteGraphSolver.csproj.FileList.txt | 23 + ...uteGraphSolver.csproj.FileListAbsolute.txt | 85 + SOLVER/RGSolver/testB.ico | Bin 0 -> 161862 bytes SOLVER/RGWay2RTE/Program.cs | 321 ++ SOLVER/RGWay2RTE/Properties/AssemblyInfo.cs | 33 + SOLVER/RGWay2RTE/RGWay2RTE.csproj | 51 + SOLVER/RGWay2RTE/RGWay2RTE.csproj.user | 5 + SOLVER/RGWay2RTE/Transmit.ico | Bin 0 -> 86358 bytes SOLVER/RGWay2RTE/obj/Debug/RGWay2RTE.exe | Bin 0 -> 110592 bytes SOLVER/RGWay2RTE/obj/Debug/RGWay2RTE.pdb | Bin 0 -> 19968 bytes .../obj/RGWay2RTE.csproj.FileListAbsolute.txt | 24 + SOLVER/RGWay2RTE/obj/Release/RGWay2RTE.exe | Bin 0 -> 110592 bytes SOLVER/RGWay2RTE/obj/Release/RGWay2RTE.pdb | Bin 0 -> 17920 bytes SOLVER/RouteGraphBatcher/InputBox.cs | 2898 ++++++++++ SOLVER/RouteGraphBatcher/Program.cs | 20 + .../Properties/AssemblyInfo.cs | 33 + .../Properties/Resources.Designer.cs | 63 + .../Properties/Resources.resx | 117 + .../Properties/Settings.Designer.cs | 26 + .../Properties/Settings.settings | 7 + SOLVER/RouteGraphBatcher/RGBForm.Designer.cs | 530 ++ SOLVER/RouteGraphBatcher/RGBForm.cs | 991 ++++ SOLVER/RouteGraphBatcher/RGBForm.resx | 1672 ++++++ .../RouteGraphBatcher.csproj | 99 + SOLVER/RouteGraphBatcher/WaitingForm.cs | 309 ++ SOLVER/RouteGraphBatcher/create.ico | Bin 0 -> 92582 bytes ...raphBatcher.Properties.Resources.resources | Bin 0 -> 180 bytes .../RouteGraphBatcher.RGBCForm.resources | Bin 0 -> 93148 bytes ...GraphBatcher.csproj.GenerateResource.Cache | Bin 0 -> 844 bytes .../obj/Debug/RouteGraphBatcher.exe | Bin 0 -> 274432 bytes .../obj/Debug/RouteGraphBatcher.pdb | Bin 0 -> 153088 bytes .../Properties.Resources.Designer.cs.dll | Bin 0 -> 4608 bytes .../Release/ResolveAssemblyReference.cache | Bin 0 -> 7867 bytes ...raphBatcher.Properties.Resources.resources | Bin 0 -> 180 bytes .../RouteGraphBatcher.RGBCForm.resources | Bin 0 -> 180 bytes ...GraphBatcher.csproj.GenerateResource.Cache | Bin 0 -> 844 bytes .../obj/Release/RouteGraphBatcher.exe | Bin 0 -> 159744 bytes .../obj/Release/RouteGraphBatcher.pdb | Bin 0 -> 114176 bytes .../obj/RouteGraphBatcher.csproj.FileList.txt | 8 + ...teGraphBatcher.csproj.FileListAbsolute.txt | 42 + SOLVER/RouteGraphCalcMatrix/Program.cs | 257 + .../Properties/AssemblyInfo.cs | 33 + .../RouteGraphCalcMatrix.csproj | 67 + .../RouteGraphCalcMatrix.csproj.user | 5 + SOLVER/RouteGraphCalcMatrix/console.ico | Bin 0 -> 86358 bytes .../obj/Debug/RouteGraphCalcMatrix.exe | Bin 0 -> 110592 bytes .../obj/Debug/RouteGraphCalcMatrix.pdb | Bin 0 -> 19968 bytes .../Release/ResolveAssemblyReference.cache | Bin 0 -> 8973 bytes .../obj/Release/RouteGraphCalcMatrix.exe | Bin 0 -> 110592 bytes .../obj/Release/RouteGraphCalcMatrix.pdb | Bin 0 -> 17920 bytes .../RouteGraphCalcMatrix.csproj.FileList.txt | 5 + ...raphCalcMatrix.csproj.FileListAbsolute.txt | 27 + SOLVER/RouteGraphCalcRG/Program.cs | 33 + .../Properties/AssemblyInfo.cs | 33 + .../RouteGraphCalcRG/RouteGraphCalcRG.csproj | 63 + .../RouteGraphCalcRG.csproj.user | 5 + SOLVER/RouteGraphCalcRG/console.ico | Bin 0 -> 86358 bytes .../obj/Debug/RouteGraphCalcRG.exe | Bin 0 -> 102400 bytes .../obj/Debug/RouteGraphCalcRG.pdb | Bin 0 -> 13824 bytes .../Release/ResolveAssemblyReference.cache | Bin 0 -> 11470 bytes .../obj/Release/RouteGraphCalcRG.exe | Bin 0 -> 102400 bytes .../obj/Release/RouteGraphCalcRG.pdb | Bin 0 -> 13824 bytes .../obj/RouteGraphCalcRG.csproj.FileList.txt | 13 + ...uteGraphCalcRG.csproj.FileListAbsolute.txt | 27 + SOLVER/RouteGraphCreator/Program.cs | 44 + .../Properties/AssemblyInfo.cs | 33 + .../RouteGraphCreator.csproj | 61 + .../RouteGraphCreator.csproj.user | 8 + SOLVER/RouteGraphCreator/console.ico | Bin 0 -> 86358 bytes .../obj/Debug/RouteGraphCreator.exe | Bin 0 -> 102400 bytes .../obj/Debug/RouteGraphCreator.pdb | Bin 0 -> 13824 bytes .../Release/ResolveAssemblyReference.cache | Bin 0 -> 8412 bytes .../obj/Release/RouteGraphCreator.exe | Bin 0 -> 102400 bytes .../obj/Release/RouteGraphCreator.pdb | Bin 0 -> 13824 bytes .../obj/RouteGraphCreator.csproj.FileList.txt | 11 + ...teGraphCreator.csproj.FileListAbsolute.txt | 29 + SOLVER/RouteGraphSolver.sln | 302 + SOLVER/RouteServiceState/Form1.Designer.cs | 1055 ++++ SOLVER/RouteServiceState/Form1.cs | 1369 +++++ SOLVER/RouteServiceState/Form1.resx | 3096 +++++++++++ SOLVER/RouteServiceState/Program.cs | 20 + .../Properties/AssemblyInfo.cs | 33 + .../Properties/Resources.Designer.cs | 63 + .../Properties/Resources.resx | 117 + .../Properties/Settings.Designer.cs | 26 + .../Properties/Settings.settings | 7 + .../RouteServiceState.csproj | 90 + SOLVER/RouteServiceState/SYSID.cs | 327 ++ SOLVER/RouteServiceState/mirror.ico | Bin 0 -> 174246 bytes ...StateViewer.Properties.Resources.resources | Bin 0 -> 180 bytes .../RouteMemoryStateViewer.RMSVForm.resources | Bin 0 -> 174812 bytes ...yStateViewer.csproj.GenerateResource.Cache | Bin 0 -> 842 bytes .../obj/Debug/RouteMemoryStateViewer.exe | Bin 0 -> 405504 bytes .../obj/Debug/RouteMemoryStateViewer.pdb | Bin 0 -> 52736 bytes ...erviceState.Properties.Resources.resources | Bin 0 -> 180 bytes .../RouteServiceState.RMSVForm.resources | Bin 0 -> 174812 bytes ...ServiceState.csproj.GenerateResource.Cache | Bin 0 -> 842 bytes .../obj/Debug/RouteServiceState.exe | Bin 0 -> 417792 bytes .../obj/Debug/RouteServiceState.pdb | Bin 0 -> 81408 bytes .../Properties.Resources.Designer.cs.dll | Bin 0 -> 4608 bytes ...oryStateViewer.csproj.FileListAbsolute.txt | 8 + ...teServiceState.csproj.FileListAbsolute.txt | 8 + SOLVER/RoutesKeyGen/Form1.Designer.cs | 91 + SOLVER/RoutesKeyGen/Form1.cs | 209 + SOLVER/RoutesKeyGen/Form1.resx | 3030 ++++++++++ SOLVER/RoutesKeyGen/Program.cs | 20 + .../RoutesKeyGen/Properties/AssemblyInfo.cs | 33 + .../Properties/Resources.Designer.cs | 71 + SOLVER/RoutesKeyGen/Properties/Resources.resx | 117 + .../Properties/Settings.Designer.cs | 30 + .../RoutesKeyGen/Properties/Settings.settings | 7 + SOLVER/RoutesKeyGen/RoutesKeyGen.csproj | 84 + .../obj/Debug/RoutesKeyGen.Form1.resources | Bin 0 -> 174812 bytes ...outesKeyGen.Properties.Resources.resources | Bin 0 -> 180 bytes ...RoutesKeyGen.csproj.GenerateResource.Cache | Bin 0 -> 842 bytes .../RoutesKeyGen/obj/Debug/RoutesKeyGen.exe | Bin 0 -> 368640 bytes .../RoutesKeyGen/obj/Debug/RoutesKeyGen.pdb | Bin 0 -> 26112 bytes .../RoutesKeyGen.csproj.FileListAbsolute.txt | 8 + SOLVER/RoutesKeyGen/tetedane.ico | Bin 0 -> 174246 bytes SOLVER/SSKeySys/Program.cs | 125 + SOLVER/SSKeySys/Properties/AssemblyInfo.cs | 33 + SOLVER/SSKeySys/SSKeySys.csproj | 53 + SOLVER/SSKeySys/SYSID.cs | 327 ++ SOLVER/SSKeySys/obj/Debug/SSKeySys.exe | Bin 0 -> 114688 bytes SOLVER/SSKeySys/obj/Debug/SSKeySys.pdb | Bin 0 -> 26112 bytes .../obj/Debug/nmsRouteLicenseFileTool.exe | Bin 0 -> 24576 bytes .../obj/Debug/nmsRouteLicenseFileTool.pdb | Bin 0 -> 30208 bytes SOLVER/SSKeySys/obj/Release/SSKeySys.exe | Bin 0 -> 114688 bytes SOLVER/SSKeySys/obj/Release/SSKeySys.pdb | Bin 0 -> 28160 bytes SOLVER/SSKeySys/obj/Release/nmsKEYSYS.exe | Bin 0 -> 24576 bytes SOLVER/SSKeySys/obj/Release/nmsKEYSYS.pdb | Bin 0 -> 26112 bytes .../obj/Release/nmsRouteLicenseFileTool.exe | Bin 0 -> 24576 bytes .../obj/Release/nmsRouteLicenseFileTool.pdb | Bin 0 -> 28160 bytes .../obj/SERVER/nmsRouteLicenseFileTool.exe | Bin 0 -> 28672 bytes .../obj/SERVER/nmsRouteLicenseFileTool.pdb | Bin 0 -> 28160 bytes .../obj/SSKeySys.csproj.FileListAbsolute.txt | 13 + .../obj/nmsKeySys.csproj.FileListAbsolute.txt | 5 + ...icenseFileTool.csproj.FileListAbsolute.txt | 39 + SOLVER/SSKeySys/protA.ico | Bin 0 -> 92582 bytes SOLVER/SSProtector/Program.cs | 184 + SOLVER/SSProtector/Properties/AssemblyInfo.cs | 33 + SOLVER/SSProtector/SSProtector.csproj | 69 + SOLVER/SSProtector/SSProtector.csproj.user | 7 + SOLVER/SSProtector/SYSID.cs | 327 ++ .../obj/Debug/ResolveAssemblyReference.cache | Bin 0 -> 33757 bytes SOLVER/SSProtector/obj/Debug/SSProtector.exe | Bin 0 -> 114688 bytes SOLVER/SSProtector/obj/Debug/SSProtector.pdb | Bin 0 -> 28160 bytes .../obj/Debug/nmsRouteLicenseFileTool.exe | Bin 0 -> 24576 bytes .../obj/Debug/nmsRouteLicenseFileTool.pdb | Bin 0 -> 30208 bytes .../Release/ResolveAssemblyReference.cache | Bin 0 -> 33725 bytes .../SSProtector/obj/Release/SSProtector.exe | Bin 0 -> 114688 bytes .../SSProtector/obj/Release/SSProtector.pdb | Bin 0 -> 28160 bytes .../obj/Release/nmsRouteLicenseFileTool.exe | Bin 0 -> 24576 bytes .../obj/Release/nmsRouteLicenseFileTool.pdb | Bin 0 -> 28160 bytes .../obj/SERVER/nmsRouteLicenseFileTool.exe | Bin 0 -> 28672 bytes .../obj/SERVER/nmsRouteLicenseFileTool.pdb | Bin 0 -> 28160 bytes .../SSProtector.csproj.FileListAbsolute.txt | 16 + ...icenseFileTool.csproj.FileListAbsolute.txt | 39 + SOLVER/SSProtector/protB.ico | Bin 0 -> 92582 bytes SOLVER/ShapesBBox2Regions/BBox.cs | 223 + SOLVER/ShapesBBox2Regions/DBFSharp.cs | 1190 ++++ SOLVER/ShapesBBox2Regions/InputBox.cs | 2987 ++++++++++ SOLVER/ShapesBBox2Regions/Program.cs | 20 + .../Properties/AssemblyInfo.cs | 33 + .../Properties/Resources.Designer.cs | 63 + .../Properties/Resources.resx | 117 + .../Properties/Settings.Designer.cs | 26 + .../Properties/Settings.settings | 7 + .../ShapesBBox2Regions/SBB2RForm.Designer.cs | 413 ++ SOLVER/ShapesBBox2Regions/SBB2RForm.cs | 479 ++ SOLVER/ShapesBBox2Regions/SBB2RForm.resx | 1568 ++++++ .../ShapesBBox2Regions.csproj | 98 + .../ShapesBBox2Regions/SimpleShapeWriter.cs | 933 ++++ SOLVER/ShapesBBox2Regions/Toast.ico | Bin 0 -> 86358 bytes SOLVER/ShapesBBox2Regions/WaitingForm.cs | 309 ++ ...Box2Regions.Properties.Resources.resources | Bin 0 -> 180 bytes .../ShapesBBox2Regions.SBB2RForm.resources | Bin 0 -> 86924 bytes ...BBox2Regions.csproj.GenerateResource.Cache | Bin 0 -> 846 bytes .../obj/Debug/ShapesBBox2Regions.exe | Bin 0 -> 282624 bytes .../obj/Debug/ShapesBBox2Regions.pdb | Bin 0 -> 230912 bytes .../Properties.Resources.Designer.cs.dll | Bin 0 -> 4608 bytes ...esBBox2Regions.csproj.FileListAbsolute.txt | 8 + SOLVER/ShapesMerger/DBFSharp.cs | 1190 ++++ SOLVER/ShapesMerger/MergeForm.Designer.cs | 238 + SOLVER/ShapesMerger/MergeForm.cs | 397 ++ SOLVER/ShapesMerger/MergeForm.resx | 1568 ++++++ SOLVER/ShapesMerger/Program.cs | 20 + .../ShapesMerger/Properties/AssemblyInfo.cs | 33 + .../Properties/Resources.Designer.cs | 71 + SOLVER/ShapesMerger/Properties/Resources.resx | 117 + .../Properties/Settings.Designer.cs | 30 + .../ShapesMerger/Properties/Settings.settings | 7 + SOLVER/ShapesMerger/ShapesMerger.csproj | 84 + SOLVER/ShapesMerger/WaitingForm.cs | 309 ++ SOLVER/ShapesMerger/merger.ico | Bin 0 -> 86358 bytes .../Debug/ShapesMerger.MergeForm.resources | Bin 0 -> 86924 bytes ...hapesMerger.Properties.Resources.resources | Bin 0 -> 180 bytes ...ShapesMerger.csproj.GenerateResource.Cache | Bin 0 -> 846 bytes .../ShapesMerger/obj/Debug/ShapesMerger.exe | Bin 0 -> 229376 bytes .../ShapesMerger/obj/Debug/ShapesMerger.pdb | Bin 0 -> 97792 bytes .../ShapesMerger.csproj.FileListAbsolute.txt | 8 + SOLVER/ShapesPolygonsExtractor/DBFSharp.cs | 1190 ++++ SOLVER/ShapesPolygonsExtractor/PolyReader.cs | 501 ++ SOLVER/ShapesPolygonsExtractor/Program.cs | 213 + .../Properties/AssemblyInfo.cs | 33 + .../ShapesPolygonsExtractor.csproj | 54 + .../ShapesPolygonsExtractor.csproj.user | 5 + SOLVER/ShapesPolygonsExtractor/candybar.ico | Bin 0 -> 86358 bytes .../obj/Debug/ShapesPolygonsExtractor.exe | Bin 0 -> 139264 bytes .../obj/Debug/ShapesPolygonsExtractor.pdb | Bin 0 -> 83456 bytes ...ygonsExtractor.csproj.FileListAbsolute.txt | 5 + SOLVER/Syslib/DllExport/DllExportAttribute.cs | 65 + SOLVER/Syslib/DllExport/Mono.Cecil.dll | Bin 0 -> 412672 bytes .../DllExport/RGiesecke.DllExport.MSBuild.dll | Bin 0 -> 23040 bytes .../Syslib/DllExport/RGiesecke.DllExport.dll | Bin 0 -> 68608 bytes .../DllExport/RGiesecke.DllExport.targets | 24 + SOLVER/Syslib/Properties/AssemblyInfo.cs | 36 + SOLVER/Syslib/SYSID.cs | 142 + SOLVER/Syslib/Syslib.cs | 224 + SOLVER/Syslib/Syslib.csproj | 78 + .../obj/Debug/ResolveAssemblyReference.cache | Bin 0 -> 4493 bytes SOLVER/Syslib/obj/Debug/Syslib.dll | Bin 0 -> 8704 bytes SOLVER/Syslib/obj/Debug/Syslib.pdb | Bin 0 -> 22016 bytes SOLVER/Syslib/obj/Debug/csharplib.dll | Bin 0 -> 20480 bytes SOLVER/Syslib/obj/Debug/csharplib.pdb | Bin 0 -> 19968 bytes .../obj/Syslib.csproj.FileListAbsolute.txt | 18 + .../obj/csharplib.csproj.FileListAbsolute.txt | 7 + .../obj/injlib.csproj.FileListAbsolute.txt | 8 + .../x86/Debug/ResolveAssemblyReference.cache | Bin 0 -> 4493 bytes SOLVER/Syslib/obj/x86/Debug/Syslib.dll | Bin 0 -> 12800 bytes SOLVER/Syslib/obj/x86/Debug/Syslib.pdb | Bin 0 -> 32256 bytes SOLVER/Syslib/obj/x86/Release/Syslib.dll | Bin 0 -> 24576 bytes SOLVER/Syslib/obj/x86/Release/Syslib.pdb | Bin 0 -> 24064 bytes SOLVER/TEST_MAP/DescrForm.Designer.cs | 73 + SOLVER/TEST_MAP/DescrForm.cs | 34 + SOLVER/TEST_MAP/DescrForm.resx | 120 + SOLVER/TEST_MAP/Form1.Designer.cs | 490 ++ SOLVER/TEST_MAP/Form1.cs | 270 + SOLVER/TEST_MAP/Form1.resx | 1565 ++++++ SOLVER/TEST_MAP/GraphUtils.cs | 480 ++ SOLVER/TEST_MAP/Newtonsoft.Json.dll | Bin 0 -> 383488 bytes SOLVER/TEST_MAP/PreSolvedRoutes.cs | 617 +++ SOLVER/TEST_MAP/Program.cs | 20 + SOLVER/TEST_MAP/Properties/AssemblyInfo.cs | 33 + .../TEST_MAP/Properties/Resources.Designer.cs | 63 + SOLVER/TEST_MAP/Properties/Resources.resx | 117 + .../TEST_MAP/Properties/Settings.Designer.cs | 26 + SOLVER/TEST_MAP/Properties/Settings.settings | 7 + SOLVER/TEST_MAP/RealTimeRoutes.cs | 4571 +++++++++++++++ SOLVER/TEST_MAP/RouteMapTest.csproj | 122 + .../MAP_TEST.Properties.Resources.resources | Bin 0 -> 180 bytes .../MAP_TEST.csproj.GenerateResource.Cache | Bin 0 -> 904 bytes SOLVER/TEST_MAP/obj/Debug/MAP_TEST.pdb | Bin 0 -> 32256 bytes .../obj/Debug/ResolveAssemblyReference.cache | Bin 0 -> 20623 bytes ...RouteMapTest.csproj.GenerateResource.Cache | Bin 0 -> 904 bytes .../obj/Debug/TEST_MAP.DescrForm.resources | Bin 0 -> 180 bytes .../obj/Debug/TEST_MAP.TestForm.resources | Bin 0 -> 86924 bytes .../TEST_MAP.csproj.GenerateResource.Cache | Bin 0 -> 904 bytes .../Properties.Resources.Designer.cs.dll | Bin 0 -> 4608 bytes ...apRouteTest.Properties.Resources.resources | Bin 0 -> 180 bytes ...mapRouteTest.csproj.GenerateResource.Cache | Bin 0 -> 904 bytes SOLVER/TEST_MAP/obj/Debug/mapRouteTest.exe | Bin 0 -> 282624 bytes SOLVER/TEST_MAP/obj/Debug/mapRouteTest.pdb | Bin 0 -> 40448 bytes .../mapTest.Properties.Resources.resources | Bin 0 -> 180 bytes .../mapTest.csproj.GenerateResource.Cache | Bin 0 -> 904 bytes SOLVER/TEST_MAP/obj/Debug/mapTest.pdb | Bin 0 -> 32256 bytes .../obj/MAP_TEST.csproj.FileListAbsolute.txt | 9 + .../Release/ResolveAssemblyReference.cache | Bin 0 -> 17591 bytes ...RouteMapTest.csproj.GenerateResource.Cache | Bin 0 -> 904 bytes .../obj/Release/TEST_MAP.DescrForm.resources | Bin 0 -> 180 bytes .../obj/Release/TEST_MAP.TestForm.resources | Bin 0 -> 86924 bytes .../Properties.Resources.Designer.cs.dll | Bin 0 -> 4608 bytes ...apRouteTest.Properties.Resources.resources | Bin 0 -> 180 bytes SOLVER/TEST_MAP/obj/Release/mapRouteTest.exe | Bin 0 -> 282624 bytes SOLVER/TEST_MAP/obj/Release/mapRouteTest.pdb | Bin 0 -> 40448 bytes .../RouteMapTest.csproj.FileListAbsolute.txt | 38 + .../TEST_MAP/obj/TEST_MAP.csproj.FileList.txt | 15 + .../obj/TEST_MAP.csproj.FileListAbsolute.txt | 26 + .../mapRouteTest.csproj.FileListAbsolute.txt | 9 + .../obj/mapTest.csproj.FileListAbsolute.txt | 9 + SOLVER/TEST_MAP/testA.ico | Bin 0 -> 161862 bytes SOLVER/WorkingLoadTest/EMPTY.cs | 93 + SOLVER/WorkingLoadTest/Form1.Designer.cs | 269 + SOLVER/WorkingLoadTest/Form1.cs | 318 ++ SOLVER/WorkingLoadTest/Form1.resx | 123 + SOLVER/WorkingLoadTest/Program.cs | 20 + .../Properties/AssemblyInfo.cs | 33 + .../Properties/Resources.Designer.cs | 71 + .../WorkingLoadTest/Properties/Resources.resx | 117 + .../Properties/Settings.Designer.cs | 30 + .../Properties/Settings.settings | 7 + SOLVER/WorkingLoadTest/WorkingLoadTest.csproj | 100 + .../obj/Debug/ResolveAssemblyReference.cache | Bin 0 -> 13987 bytes .../obj/Debug/WorkingLoadTest.Form1.resources | Bin 0 -> 180 bytes ...ingLoadTest.Properties.Resources.resources | Bin 0 -> 180 bytes ...kingLoadTest.csproj.GenerateResource.Cache | Bin 0 -> 842 bytes .../obj/Debug/WorkingLoadTest.exe | Bin 0 -> 192512 bytes .../obj/Debug/WorkingLoadTest.pdb | Bin 0 -> 38400 bytes .../Release/ResolveAssemblyReference.cache | Bin 0 -> 13341 bytes .../Release/WorkingLoadTest.Form1.resources | Bin 0 -> 180 bytes ...ingLoadTest.Properties.Resources.resources | Bin 0 -> 180 bytes ...kingLoadTest.csproj.GenerateResource.Cache | Bin 0 -> 842 bytes .../obj/Release/WorkingLoadTest.exe | Bin 0 -> 192512 bytes .../obj/Release/WorkingLoadTest.pdb | Bin 0 -> 36352 bytes ...orkingLoadTest.csproj.FileListAbsolute.txt | 41 + SOLVER/WorkingLoadTest/testD.ico | Bin 0 -> 161862 bytes SOLVER/XMLSaved/Properties/AssemblyInfo.cs | 35 + SOLVER/XMLSaved/XMLSaved.cs | 326 ++ SOLVER/XMLSaved/XMLSaved.csproj | 47 + SOLVER/XMLSaved/obj/Debug/XMLSaved.dll | Bin 0 -> 20480 bytes SOLVER/XMLSaved/obj/Debug/XMLSaved.pdb | Bin 0 -> 19968 bytes SOLVER/XMLSaved/obj/Release/XMLSaved.dll | Bin 0 -> 20480 bytes SOLVER/XMLSaved/obj/Release/XMLSaved.pdb | Bin 0 -> 19968 bytes .../obj/XMLSaved.csproj.FileListAbsolute.txt | 13 + .../Properties/AssemblyInfo.cs | 35 + SOLVER/dkxce.Route.Classes/Route.Classes.cs | 1487 +++++ .../dkxce.Route.Classes.csproj | 48 + .../obj/Debug/dkxce.Route.Classes.dll | Bin 0 -> 32768 bytes .../obj/Debug/dkxce.Route.Classes.pdb | Bin 0 -> 46592 bytes .../Release/ResolveAssemblyReference.cache | Bin 0 -> 3766 bytes .../obj/Release/dkxce.Route.Classes.dll | Bin 0 -> 28672 bytes .../obj/Release/dkxce.Route.Classes.pdb | Bin 0 -> 42496 bytes .../dkxce.Route.Classes.csproj.FileList.txt | 5 + ....Route.Classes.csproj.FileListAbsolute.txt | 30 + .../obj/dkxce.Route.Utils.csproj.FileList.txt | 5 + .../Properties/AssemblyInfo.cs | 35 + SOLVER/dkxce.Route.GSolver/Route.GSolver.cs | 3924 +++++++++++++ .../dkxce.Route.GSolver.csproj | 49 + .../obj/Debug/dkxce.Route.GSolver.dll | Bin 0 -> 69632 bytes .../obj/Debug/dkxce.Route.GSolver.pdb | Bin 0 -> 108032 bytes .../Release/ResolveAssemblyReference.cache | Bin 0 -> 6126 bytes .../obj/Release/dkxce.Route.GSolver.dll | Bin 0 -> 61440 bytes .../obj/Release/dkxce.Route.GSolver.pdb | Bin 0 -> 87552 bytes .../dkxce.Route.GSolver.csproj.FileList.txt | 7 + ....Route.GSolver.csproj.FileListAbsolute.txt | 36 + .../Properties/AssemblyInfo.cs | 33 + SOLVER/dkxce.Route.ISolver/Route.ISolver.cs | 760 +++ .../dkxce.Route.ISolver.csproj | 51 + .../obj/Debug/dkxce.Route.ISolver.dll | Bin 0 -> 24576 bytes .../obj/Debug/dkxce.Route.ISolver.pdb | Bin 0 -> 26112 bytes .../Release/ResolveAssemblyReference.cache | Bin 0 -> 12105 bytes .../obj/Release/dkxce.Route.ISolver.dll | Bin 0 -> 24576 bytes .../obj/Release/dkxce.Route.ISolver.pdb | Bin 0 -> 24064 bytes .../dkxce.Route.ISolver.csproj.FileList.txt | 11 + ....Route.ISolver.csproj.FileListAbsolute.txt | 48 + .../Properties/AssemblyInfo.cs | 35 + SOLVER/dkxce.Route.Matrix/Route.Matrix.cs | 687 +++ .../dkxce.Route.Matrix.csproj | 47 + .../obj/Debug/dkxce.Route.Matrix.dll | Bin 0 -> 24576 bytes .../obj/Debug/dkxce.Route.Matrix.pdb | Bin 0 -> 28160 bytes .../obj/Release/dkxce.Route.Matrix.dll | Bin 0 -> 24576 bytes .../obj/Release/dkxce.Route.Matrix.pdb | Bin 0 -> 26112 bytes .../dkxce.Route.Matrix.csproj.FileList.txt | 5 + ...e.Route.Matrix.csproj.FileListAbsolute.txt | 30 + .../Properties/AssemblyInfo.cs | 35 + SOLVER/dkxce.Route.PointNLL/Route.PointNLL.cs | 481 ++ .../dkxce.Route.PointNLL.csproj | 47 + .../obj/Debug/dkxce.Route.PointNLL.dll | Bin 0 -> 24576 bytes .../obj/Debug/dkxce.Route.PointNLL.pdb | Bin 0 -> 28160 bytes .../obj/Release/dkxce.Route.PointNLL.dll | Bin 0 -> 20480 bytes .../obj/Release/dkxce.Route.PointNLL.pdb | Bin 0 -> 26112 bytes .../dkxce.Route.PointNLL.csproj.FileList.txt | 5 + ...Route.PointNLL.csproj.FileListAbsolute.txt | 30 + .../Properties/AssemblyInfo.cs | 35 + SOLVER/dkxce.Route.Regions/Route.Regions.cs | 422 ++ .../dkxce.Route.Regions.csproj | 51 + .../obj/Debug/dkxce.Route.Regions.dll | Bin 0 -> 24576 bytes .../obj/Debug/dkxce.Route.Regions.pdb | Bin 0 -> 26112 bytes .../obj/Release/dkxce.Route.Regions.dll | Bin 0 -> 24576 bytes .../obj/Release/dkxce.Route.Regions.pdb | Bin 0 -> 24064 bytes .../dkxce.Route.Regions.csproj.FileList.txt | 7 + ....Route.Regions.csproj.FileListAbsolute.txt | 36 + .../ClientRequest.cs | 892 +++ SOLVER/dkxce.Route.ServiceSolver/Program.cs | 289 + .../Properties/AssemblyInfo.cs | 33 + .../dkxce.Route.ServiceSolver/RouteServer.cs | 369 ++ .../SOAPInterface.cs | 330 ++ SOLVER/dkxce.Route.ServiceSolver/SOAPWSDL.cs | 62 + SOLVER/dkxce.Route.ServiceSolver/SYSID.cs | 325 ++ .../XmlRpc/Logger.cs | 46 + .../XmlRpc/SimpleHttpRequest.cs | 204 + .../XmlRpc/XmlRpcBoxcarRequest.cs | 51 + .../XmlRpc/XmlRpcClientProxy.cs | 61 + .../XmlRpc/XmlRpcDeserializer.cs | 195 + .../XmlRpc/XmlRpcErrorCodes.cs | 53 + .../XmlRpc/XmlRpcException.cs | 38 + .../XmlRpc/XmlRpcExposedAttribute.cs | 60 + .../XmlRpc/XmlRpcRequest.cs | 126 + .../XmlRpc/XmlRpcRequestDeserializer.cs | 64 + .../XmlRpc/XmlRpcRequestSerializer.cs | 51 + .../XmlRpc/XmlRpcResponder.cs | 98 + .../XmlRpc/XmlRpcResponse.cs | 81 + .../XmlRpc/XmlRpcResponseDeserializer.cs | 65 + .../XmlRpc/XmlRpcResponseSerializer.cs | 57 + .../XmlRpc/XmlRpcSerializer.cs | 126 + .../XmlRpc/XmlRpcServer.cs | 236 + .../XmlRpc/XmlRpcSystemObject.cs | 251 + .../XmlRpc/XmlRpcXmlTokens.cs | 76 + .../dkxce.Route.ServiceSolver.OneRegion.cs | 510 ++ ...dkxce.Route.ServiceSolver.RouteThreader.cs | 4127 ++++++++++++++ .../dkxce.Route.ServiceSolver.Russia.cs | 1248 +++++ .../dkxce.Route.ServiceSolver.csproj | 125 + .../dkxce.Route.ServiceSolver.csproj.user | 9 + .../obj/Debug/dkxce.Route.ServiceSolver.exe | Bin 0 -> 348160 bytes .../obj/Debug/dkxce.Route.ServiceSolver.pdb | Bin 0 -> 337408 bytes .../Release/ResolveAssemblyReference.cache | Bin 0 -> 20501 bytes .../obj/Release/dkxce.Route.ServiceSolver.exe | Bin 0 -> 323584 bytes .../obj/Release/dkxce.Route.ServiceSolver.pdb | Bin 0 -> 284160 bytes ....ServiceSolver.Lipetsk.csproj.FileList.txt | 13 + ...Solver.Lipetsk.csproj.FileListAbsolute.txt | 13 + ...ce.Route.ServiceSolver.csproj.FileList.txt | 17 + ....ServiceSolver.csproj.FileListAbsolute.txt | 82 + SOLVER/dkxce.Route.ServiceSolver/solver.ico | Bin 0 -> 161862 bytes SOLVER/dkxce.Route.Shp2Rt/DBFSharp.cs | 1190 ++++ .../Properties/AssemblyInfo.cs | 35 + SOLVER/dkxce.Route.Shp2Rt/Route.Shp2Rt.cs | 3813 +++++++++++++ .../dkxce.Route.Shp2Rt.csproj | 58 + .../dkxce.Route.Shp2Rt.csproj.user | 6 + .../obj/Debug/ResolveAssemblyReference.cache | Bin 0 -> 6134 bytes .../obj/Debug/dkxce.Route.Shp2Rt.dll | Bin 0 -> 106496 bytes .../obj/Debug/dkxce.Route.Shp2Rt.pdb | Bin 0 -> 153088 bytes .../Release/ResolveAssemblyReference.cache | Bin 0 -> 6126 bytes .../obj/Release/dkxce.Route.Shp2Rt.dll | Bin 0 -> 98304 bytes .../obj/Release/dkxce.Route.Shp2Rt.pdb | Bin 0 -> 128512 bytes .../dkxce.Route.Shp2Rt.csproj.FileList.txt | 7 + ...e.Route.Shp2Rt.csproj.FileListAbsolute.txt | 38 + .../Properties/AssemblyInfo.cs | 35 + SOLVER/dkxce.Route.WayList/Route.WayList.cs | 497 ++ .../dkxce.Route.WayList.csproj | 50 + .../obj/Debug/dkxce.Route.WayList.dll | Bin 0 -> 28672 bytes .../obj/Debug/dkxce.Route.WayList.pdb | Bin 0 -> 22016 bytes .../Release/ResolveAssemblyReference.cache | Bin 0 -> 9113 bytes .../obj/Release/dkxce.Route.WayList.dll | Bin 0 -> 28672 bytes .../obj/Release/dkxce.Route.WayList.pdb | Bin 0 -> 22016 bytes .../dkxce.Route.WayList.csproj.FileList.txt | 9 + ....Route.WayList.csproj.FileListAbsolute.txt | 42 + .../dkxce.Utils.CloudBorder/CloundsBorder.cs | 211 + .../CuttingGeometries.dll | Bin 0 -> 28672 bytes SOLVER/dkxce.Utils.CloudBorder/FormTest1.cs | 92 + .../PolyCreatorClipper.cs | 4886 +++++++++++++++++ .../dkxce.Utils.CloudBorder/PolyLineBuffer.cs | 1248 +++++ .../Properties/AssemblyInfo.cs | 35 + SOLVER/nmsRoutesDirectCall/nmsRouteClient.cs | 658 +++ .../nmsRoutesDirectCall.csproj | 49 + .../obj/Debug/nmsRoutesDirectCall.dll | Bin 0 -> 24576 bytes .../obj/Debug/nmsRoutesDirectCall.pdb | Bin 0 -> 28160 bytes .../obj/Release/nmsRoutesDirectCall.dll | Bin 0 -> 20480 bytes .../obj/Release/nmsRoutesDirectCall.pdb | Bin 0 -> 22016 bytes ...utesDirectCall.csproj.FileListAbsolute.txt | 24 + ...ectCall.csproj.UnmanagedRegistration.cache | Bin 0 -> 554 bytes .../Properties/AssemblyInfo.cs | 33 + SOLVER/nmsRoutesWebTest/TestProgram.cs | 414 ++ .../nmsRoutesWebTest/nmsRoutesWebTest.csproj | 64 + .../nmsRoutesWebTest.csproj.user | 5 + .../obj/Debug/ResolveAssemblyReference.cache | Bin 0 -> 10808 bytes .../obj/Debug/nmsRoutesWebTest.exe | Bin 0 -> 184320 bytes .../obj/Debug/nmsRoutesWebTest.pdb | Bin 0 -> 24064 bytes .../Release/ResolveAssemblyReference.cache | Bin 0 -> 10785 bytes .../obj/Release/nmsRoutesWebTest.exe | Bin 0 -> 184320 bytes .../obj/Release/nmsRoutesWebTest.pdb | Bin 0 -> 22016 bytes ...sRoutesWebTest.csproj.FileListAbsolute.txt | 33 + SOLVER/nmsRoutesWebTest/testC.ico | Bin 0 -> 161862 bytes 474 files changed, 78782 insertions(+) create mode 100644 SOLVER/BUILD.cmd create mode 100644 SOLVER/CLEAR_UNUSED.cmd create mode 100644 SOLVER/RGSolver/Program.cs create mode 100644 SOLVER/RGSolver/Properties/AssemblyInfo.cs create mode 100644 SOLVER/RGSolver/RouteGraphSolver.csproj create mode 100644 SOLVER/RGSolver/TulaKalugaSmolensk.cs create mode 100644 SOLVER/RGSolver/obj/Debug/RMXSolver.exe create mode 100644 SOLVER/RGSolver/obj/Debug/RMXSolver.pdb create mode 100644 SOLVER/RGSolver/obj/Debug/ResolveAssemblyReference.cache create mode 100644 SOLVER/RGSolver/obj/Release/RMXSolver.exe create mode 100644 SOLVER/RGSolver/obj/Release/RMXSolver.pdb create mode 100644 SOLVER/RGSolver/obj/Release/ResolveAssemblyReference.cache create mode 100644 SOLVER/RGSolver/obj/RouteGraphSolver.csproj.FileList.txt create mode 100644 SOLVER/RGSolver/obj/RouteGraphSolver.csproj.FileListAbsolute.txt create mode 100644 SOLVER/RGSolver/testB.ico create mode 100644 SOLVER/RGWay2RTE/Program.cs create mode 100644 SOLVER/RGWay2RTE/Properties/AssemblyInfo.cs create mode 100644 SOLVER/RGWay2RTE/RGWay2RTE.csproj create mode 100644 SOLVER/RGWay2RTE/RGWay2RTE.csproj.user create mode 100644 SOLVER/RGWay2RTE/Transmit.ico create mode 100644 SOLVER/RGWay2RTE/obj/Debug/RGWay2RTE.exe create mode 100644 SOLVER/RGWay2RTE/obj/Debug/RGWay2RTE.pdb create mode 100644 SOLVER/RGWay2RTE/obj/RGWay2RTE.csproj.FileListAbsolute.txt create mode 100644 SOLVER/RGWay2RTE/obj/Release/RGWay2RTE.exe create mode 100644 SOLVER/RGWay2RTE/obj/Release/RGWay2RTE.pdb create mode 100644 SOLVER/RouteGraphBatcher/InputBox.cs create mode 100644 SOLVER/RouteGraphBatcher/Program.cs create mode 100644 SOLVER/RouteGraphBatcher/Properties/AssemblyInfo.cs create mode 100644 SOLVER/RouteGraphBatcher/Properties/Resources.Designer.cs create mode 100644 SOLVER/RouteGraphBatcher/Properties/Resources.resx create mode 100644 SOLVER/RouteGraphBatcher/Properties/Settings.Designer.cs create mode 100644 SOLVER/RouteGraphBatcher/Properties/Settings.settings create mode 100644 SOLVER/RouteGraphBatcher/RGBForm.Designer.cs create mode 100644 SOLVER/RouteGraphBatcher/RGBForm.cs create mode 100644 SOLVER/RouteGraphBatcher/RGBForm.resx create mode 100644 SOLVER/RouteGraphBatcher/RouteGraphBatcher.csproj create mode 100644 SOLVER/RouteGraphBatcher/WaitingForm.cs create mode 100644 SOLVER/RouteGraphBatcher/create.ico create mode 100644 SOLVER/RouteGraphBatcher/obj/Debug/RouteGraphBatcher.Properties.Resources.resources create mode 100644 SOLVER/RouteGraphBatcher/obj/Debug/RouteGraphBatcher.RGBCForm.resources create mode 100644 SOLVER/RouteGraphBatcher/obj/Debug/RouteGraphBatcher.csproj.GenerateResource.Cache create mode 100644 SOLVER/RouteGraphBatcher/obj/Debug/RouteGraphBatcher.exe create mode 100644 SOLVER/RouteGraphBatcher/obj/Debug/RouteGraphBatcher.pdb create mode 100644 SOLVER/RouteGraphBatcher/obj/Debug/TempPE/Properties.Resources.Designer.cs.dll create mode 100644 SOLVER/RouteGraphBatcher/obj/Release/ResolveAssemblyReference.cache create mode 100644 SOLVER/RouteGraphBatcher/obj/Release/RouteGraphBatcher.Properties.Resources.resources create mode 100644 SOLVER/RouteGraphBatcher/obj/Release/RouteGraphBatcher.RGBCForm.resources create mode 100644 SOLVER/RouteGraphBatcher/obj/Release/RouteGraphBatcher.csproj.GenerateResource.Cache create mode 100644 SOLVER/RouteGraphBatcher/obj/Release/RouteGraphBatcher.exe create mode 100644 SOLVER/RouteGraphBatcher/obj/Release/RouteGraphBatcher.pdb create mode 100644 SOLVER/RouteGraphBatcher/obj/RouteGraphBatcher.csproj.FileList.txt create mode 100644 SOLVER/RouteGraphBatcher/obj/RouteGraphBatcher.csproj.FileListAbsolute.txt create mode 100644 SOLVER/RouteGraphCalcMatrix/Program.cs create mode 100644 SOLVER/RouteGraphCalcMatrix/Properties/AssemblyInfo.cs create mode 100644 SOLVER/RouteGraphCalcMatrix/RouteGraphCalcMatrix.csproj create mode 100644 SOLVER/RouteGraphCalcMatrix/RouteGraphCalcMatrix.csproj.user create mode 100644 SOLVER/RouteGraphCalcMatrix/console.ico create mode 100644 SOLVER/RouteGraphCalcMatrix/obj/Debug/RouteGraphCalcMatrix.exe create mode 100644 SOLVER/RouteGraphCalcMatrix/obj/Debug/RouteGraphCalcMatrix.pdb create mode 100644 SOLVER/RouteGraphCalcMatrix/obj/Release/ResolveAssemblyReference.cache create mode 100644 SOLVER/RouteGraphCalcMatrix/obj/Release/RouteGraphCalcMatrix.exe create mode 100644 SOLVER/RouteGraphCalcMatrix/obj/Release/RouteGraphCalcMatrix.pdb create mode 100644 SOLVER/RouteGraphCalcMatrix/obj/RouteGraphCalcMatrix.csproj.FileList.txt create mode 100644 SOLVER/RouteGraphCalcMatrix/obj/RouteGraphCalcMatrix.csproj.FileListAbsolute.txt create mode 100644 SOLVER/RouteGraphCalcRG/Program.cs create mode 100644 SOLVER/RouteGraphCalcRG/Properties/AssemblyInfo.cs create mode 100644 SOLVER/RouteGraphCalcRG/RouteGraphCalcRG.csproj create mode 100644 SOLVER/RouteGraphCalcRG/RouteGraphCalcRG.csproj.user create mode 100644 SOLVER/RouteGraphCalcRG/console.ico create mode 100644 SOLVER/RouteGraphCalcRG/obj/Debug/RouteGraphCalcRG.exe create mode 100644 SOLVER/RouteGraphCalcRG/obj/Debug/RouteGraphCalcRG.pdb create mode 100644 SOLVER/RouteGraphCalcRG/obj/Release/ResolveAssemblyReference.cache create mode 100644 SOLVER/RouteGraphCalcRG/obj/Release/RouteGraphCalcRG.exe create mode 100644 SOLVER/RouteGraphCalcRG/obj/Release/RouteGraphCalcRG.pdb create mode 100644 SOLVER/RouteGraphCalcRG/obj/RouteGraphCalcRG.csproj.FileList.txt create mode 100644 SOLVER/RouteGraphCalcRG/obj/RouteGraphCalcRG.csproj.FileListAbsolute.txt create mode 100644 SOLVER/RouteGraphCreator/Program.cs create mode 100644 SOLVER/RouteGraphCreator/Properties/AssemblyInfo.cs create mode 100644 SOLVER/RouteGraphCreator/RouteGraphCreator.csproj create mode 100644 SOLVER/RouteGraphCreator/RouteGraphCreator.csproj.user create mode 100644 SOLVER/RouteGraphCreator/console.ico create mode 100644 SOLVER/RouteGraphCreator/obj/Debug/RouteGraphCreator.exe create mode 100644 SOLVER/RouteGraphCreator/obj/Debug/RouteGraphCreator.pdb create mode 100644 SOLVER/RouteGraphCreator/obj/Release/ResolveAssemblyReference.cache create mode 100644 SOLVER/RouteGraphCreator/obj/Release/RouteGraphCreator.exe create mode 100644 SOLVER/RouteGraphCreator/obj/Release/RouteGraphCreator.pdb create mode 100644 SOLVER/RouteGraphCreator/obj/RouteGraphCreator.csproj.FileList.txt create mode 100644 SOLVER/RouteGraphCreator/obj/RouteGraphCreator.csproj.FileListAbsolute.txt create mode 100644 SOLVER/RouteGraphSolver.sln create mode 100644 SOLVER/RouteServiceState/Form1.Designer.cs create mode 100644 SOLVER/RouteServiceState/Form1.cs create mode 100644 SOLVER/RouteServiceState/Form1.resx create mode 100644 SOLVER/RouteServiceState/Program.cs create mode 100644 SOLVER/RouteServiceState/Properties/AssemblyInfo.cs create mode 100644 SOLVER/RouteServiceState/Properties/Resources.Designer.cs create mode 100644 SOLVER/RouteServiceState/Properties/Resources.resx create mode 100644 SOLVER/RouteServiceState/Properties/Settings.Designer.cs create mode 100644 SOLVER/RouteServiceState/Properties/Settings.settings create mode 100644 SOLVER/RouteServiceState/RouteServiceState.csproj create mode 100644 SOLVER/RouteServiceState/SYSID.cs create mode 100644 SOLVER/RouteServiceState/mirror.ico create mode 100644 SOLVER/RouteServiceState/obj/Debug/RouteMemoryStateViewer.Properties.Resources.resources create mode 100644 SOLVER/RouteServiceState/obj/Debug/RouteMemoryStateViewer.RMSVForm.resources create mode 100644 SOLVER/RouteServiceState/obj/Debug/RouteMemoryStateViewer.csproj.GenerateResource.Cache create mode 100644 SOLVER/RouteServiceState/obj/Debug/RouteMemoryStateViewer.exe create mode 100644 SOLVER/RouteServiceState/obj/Debug/RouteMemoryStateViewer.pdb create mode 100644 SOLVER/RouteServiceState/obj/Debug/RouteServiceState.Properties.Resources.resources create mode 100644 SOLVER/RouteServiceState/obj/Debug/RouteServiceState.RMSVForm.resources create mode 100644 SOLVER/RouteServiceState/obj/Debug/RouteServiceState.csproj.GenerateResource.Cache create mode 100644 SOLVER/RouteServiceState/obj/Debug/RouteServiceState.exe create mode 100644 SOLVER/RouteServiceState/obj/Debug/RouteServiceState.pdb create mode 100644 SOLVER/RouteServiceState/obj/Debug/TempPE/Properties.Resources.Designer.cs.dll create mode 100644 SOLVER/RouteServiceState/obj/RouteMemoryStateViewer.csproj.FileListAbsolute.txt create mode 100644 SOLVER/RouteServiceState/obj/RouteServiceState.csproj.FileListAbsolute.txt create mode 100644 SOLVER/RoutesKeyGen/Form1.Designer.cs create mode 100644 SOLVER/RoutesKeyGen/Form1.cs create mode 100644 SOLVER/RoutesKeyGen/Form1.resx create mode 100644 SOLVER/RoutesKeyGen/Program.cs create mode 100644 SOLVER/RoutesKeyGen/Properties/AssemblyInfo.cs create mode 100644 SOLVER/RoutesKeyGen/Properties/Resources.Designer.cs create mode 100644 SOLVER/RoutesKeyGen/Properties/Resources.resx create mode 100644 SOLVER/RoutesKeyGen/Properties/Settings.Designer.cs create mode 100644 SOLVER/RoutesKeyGen/Properties/Settings.settings create mode 100644 SOLVER/RoutesKeyGen/RoutesKeyGen.csproj create mode 100644 SOLVER/RoutesKeyGen/obj/Debug/RoutesKeyGen.Form1.resources create mode 100644 SOLVER/RoutesKeyGen/obj/Debug/RoutesKeyGen.Properties.Resources.resources create mode 100644 SOLVER/RoutesKeyGen/obj/Debug/RoutesKeyGen.csproj.GenerateResource.Cache create mode 100644 SOLVER/RoutesKeyGen/obj/Debug/RoutesKeyGen.exe create mode 100644 SOLVER/RoutesKeyGen/obj/Debug/RoutesKeyGen.pdb create mode 100644 SOLVER/RoutesKeyGen/obj/RoutesKeyGen.csproj.FileListAbsolute.txt create mode 100644 SOLVER/RoutesKeyGen/tetedane.ico create mode 100644 SOLVER/SSKeySys/Program.cs create mode 100644 SOLVER/SSKeySys/Properties/AssemblyInfo.cs create mode 100644 SOLVER/SSKeySys/SSKeySys.csproj create mode 100644 SOLVER/SSKeySys/SYSID.cs create mode 100644 SOLVER/SSKeySys/obj/Debug/SSKeySys.exe create mode 100644 SOLVER/SSKeySys/obj/Debug/SSKeySys.pdb create mode 100644 SOLVER/SSKeySys/obj/Debug/nmsRouteLicenseFileTool.exe create mode 100644 SOLVER/SSKeySys/obj/Debug/nmsRouteLicenseFileTool.pdb create mode 100644 SOLVER/SSKeySys/obj/Release/SSKeySys.exe create mode 100644 SOLVER/SSKeySys/obj/Release/SSKeySys.pdb create mode 100644 SOLVER/SSKeySys/obj/Release/nmsKEYSYS.exe create mode 100644 SOLVER/SSKeySys/obj/Release/nmsKEYSYS.pdb create mode 100644 SOLVER/SSKeySys/obj/Release/nmsRouteLicenseFileTool.exe create mode 100644 SOLVER/SSKeySys/obj/Release/nmsRouteLicenseFileTool.pdb create mode 100644 SOLVER/SSKeySys/obj/SERVER/nmsRouteLicenseFileTool.exe create mode 100644 SOLVER/SSKeySys/obj/SERVER/nmsRouteLicenseFileTool.pdb create mode 100644 SOLVER/SSKeySys/obj/SSKeySys.csproj.FileListAbsolute.txt create mode 100644 SOLVER/SSKeySys/obj/nmsKeySys.csproj.FileListAbsolute.txt create mode 100644 SOLVER/SSKeySys/obj/nmsRouteLicenseFileTool.csproj.FileListAbsolute.txt create mode 100644 SOLVER/SSKeySys/protA.ico create mode 100644 SOLVER/SSProtector/Program.cs create mode 100644 SOLVER/SSProtector/Properties/AssemblyInfo.cs create mode 100644 SOLVER/SSProtector/SSProtector.csproj create mode 100644 SOLVER/SSProtector/SSProtector.csproj.user create mode 100644 SOLVER/SSProtector/SYSID.cs create mode 100644 SOLVER/SSProtector/obj/Debug/ResolveAssemblyReference.cache create mode 100644 SOLVER/SSProtector/obj/Debug/SSProtector.exe create mode 100644 SOLVER/SSProtector/obj/Debug/SSProtector.pdb create mode 100644 SOLVER/SSProtector/obj/Debug/nmsRouteLicenseFileTool.exe create mode 100644 SOLVER/SSProtector/obj/Debug/nmsRouteLicenseFileTool.pdb create mode 100644 SOLVER/SSProtector/obj/Release/ResolveAssemblyReference.cache create mode 100644 SOLVER/SSProtector/obj/Release/SSProtector.exe create mode 100644 SOLVER/SSProtector/obj/Release/SSProtector.pdb create mode 100644 SOLVER/SSProtector/obj/Release/nmsRouteLicenseFileTool.exe create mode 100644 SOLVER/SSProtector/obj/Release/nmsRouteLicenseFileTool.pdb create mode 100644 SOLVER/SSProtector/obj/SERVER/nmsRouteLicenseFileTool.exe create mode 100644 SOLVER/SSProtector/obj/SERVER/nmsRouteLicenseFileTool.pdb create mode 100644 SOLVER/SSProtector/obj/SSProtector.csproj.FileListAbsolute.txt create mode 100644 SOLVER/SSProtector/obj/nmsRouteLicenseFileTool.csproj.FileListAbsolute.txt create mode 100644 SOLVER/SSProtector/protB.ico create mode 100644 SOLVER/ShapesBBox2Regions/BBox.cs create mode 100644 SOLVER/ShapesBBox2Regions/DBFSharp.cs create mode 100644 SOLVER/ShapesBBox2Regions/InputBox.cs create mode 100644 SOLVER/ShapesBBox2Regions/Program.cs create mode 100644 SOLVER/ShapesBBox2Regions/Properties/AssemblyInfo.cs create mode 100644 SOLVER/ShapesBBox2Regions/Properties/Resources.Designer.cs create mode 100644 SOLVER/ShapesBBox2Regions/Properties/Resources.resx create mode 100644 SOLVER/ShapesBBox2Regions/Properties/Settings.Designer.cs create mode 100644 SOLVER/ShapesBBox2Regions/Properties/Settings.settings create mode 100644 SOLVER/ShapesBBox2Regions/SBB2RForm.Designer.cs create mode 100644 SOLVER/ShapesBBox2Regions/SBB2RForm.cs create mode 100644 SOLVER/ShapesBBox2Regions/SBB2RForm.resx create mode 100644 SOLVER/ShapesBBox2Regions/ShapesBBox2Regions.csproj create mode 100644 SOLVER/ShapesBBox2Regions/SimpleShapeWriter.cs create mode 100644 SOLVER/ShapesBBox2Regions/Toast.ico create mode 100644 SOLVER/ShapesBBox2Regions/WaitingForm.cs create mode 100644 SOLVER/ShapesBBox2Regions/obj/Debug/ShapesBBox2Regions.Properties.Resources.resources create mode 100644 SOLVER/ShapesBBox2Regions/obj/Debug/ShapesBBox2Regions.SBB2RForm.resources create mode 100644 SOLVER/ShapesBBox2Regions/obj/Debug/ShapesBBox2Regions.csproj.GenerateResource.Cache create mode 100644 SOLVER/ShapesBBox2Regions/obj/Debug/ShapesBBox2Regions.exe create mode 100644 SOLVER/ShapesBBox2Regions/obj/Debug/ShapesBBox2Regions.pdb create mode 100644 SOLVER/ShapesBBox2Regions/obj/Debug/TempPE/Properties.Resources.Designer.cs.dll create mode 100644 SOLVER/ShapesBBox2Regions/obj/ShapesBBox2Regions.csproj.FileListAbsolute.txt create mode 100644 SOLVER/ShapesMerger/DBFSharp.cs create mode 100644 SOLVER/ShapesMerger/MergeForm.Designer.cs create mode 100644 SOLVER/ShapesMerger/MergeForm.cs create mode 100644 SOLVER/ShapesMerger/MergeForm.resx create mode 100644 SOLVER/ShapesMerger/Program.cs create mode 100644 SOLVER/ShapesMerger/Properties/AssemblyInfo.cs create mode 100644 SOLVER/ShapesMerger/Properties/Resources.Designer.cs create mode 100644 SOLVER/ShapesMerger/Properties/Resources.resx create mode 100644 SOLVER/ShapesMerger/Properties/Settings.Designer.cs create mode 100644 SOLVER/ShapesMerger/Properties/Settings.settings create mode 100644 SOLVER/ShapesMerger/ShapesMerger.csproj create mode 100644 SOLVER/ShapesMerger/WaitingForm.cs create mode 100644 SOLVER/ShapesMerger/merger.ico create mode 100644 SOLVER/ShapesMerger/obj/Debug/ShapesMerger.MergeForm.resources create mode 100644 SOLVER/ShapesMerger/obj/Debug/ShapesMerger.Properties.Resources.resources create mode 100644 SOLVER/ShapesMerger/obj/Debug/ShapesMerger.csproj.GenerateResource.Cache create mode 100644 SOLVER/ShapesMerger/obj/Debug/ShapesMerger.exe create mode 100644 SOLVER/ShapesMerger/obj/Debug/ShapesMerger.pdb create mode 100644 SOLVER/ShapesMerger/obj/ShapesMerger.csproj.FileListAbsolute.txt create mode 100644 SOLVER/ShapesPolygonsExtractor/DBFSharp.cs create mode 100644 SOLVER/ShapesPolygonsExtractor/PolyReader.cs create mode 100644 SOLVER/ShapesPolygonsExtractor/Program.cs create mode 100644 SOLVER/ShapesPolygonsExtractor/Properties/AssemblyInfo.cs create mode 100644 SOLVER/ShapesPolygonsExtractor/ShapesPolygonsExtractor.csproj create mode 100644 SOLVER/ShapesPolygonsExtractor/ShapesPolygonsExtractor.csproj.user create mode 100644 SOLVER/ShapesPolygonsExtractor/candybar.ico create mode 100644 SOLVER/ShapesPolygonsExtractor/obj/Debug/ShapesPolygonsExtractor.exe create mode 100644 SOLVER/ShapesPolygonsExtractor/obj/Debug/ShapesPolygonsExtractor.pdb create mode 100644 SOLVER/ShapesPolygonsExtractor/obj/ShapesPolygonsExtractor.csproj.FileListAbsolute.txt create mode 100644 SOLVER/Syslib/DllExport/DllExportAttribute.cs create mode 100644 SOLVER/Syslib/DllExport/Mono.Cecil.dll create mode 100644 SOLVER/Syslib/DllExport/RGiesecke.DllExport.MSBuild.dll create mode 100644 SOLVER/Syslib/DllExport/RGiesecke.DllExport.dll create mode 100644 SOLVER/Syslib/DllExport/RGiesecke.DllExport.targets create mode 100644 SOLVER/Syslib/Properties/AssemblyInfo.cs create mode 100644 SOLVER/Syslib/SYSID.cs create mode 100644 SOLVER/Syslib/Syslib.cs create mode 100644 SOLVER/Syslib/Syslib.csproj create mode 100644 SOLVER/Syslib/obj/Debug/ResolveAssemblyReference.cache create mode 100644 SOLVER/Syslib/obj/Debug/Syslib.dll create mode 100644 SOLVER/Syslib/obj/Debug/Syslib.pdb create mode 100644 SOLVER/Syslib/obj/Debug/csharplib.dll create mode 100644 SOLVER/Syslib/obj/Debug/csharplib.pdb create mode 100644 SOLVER/Syslib/obj/Syslib.csproj.FileListAbsolute.txt create mode 100644 SOLVER/Syslib/obj/csharplib.csproj.FileListAbsolute.txt create mode 100644 SOLVER/Syslib/obj/injlib.csproj.FileListAbsolute.txt create mode 100644 SOLVER/Syslib/obj/x86/Debug/ResolveAssemblyReference.cache create mode 100644 SOLVER/Syslib/obj/x86/Debug/Syslib.dll create mode 100644 SOLVER/Syslib/obj/x86/Debug/Syslib.pdb create mode 100644 SOLVER/Syslib/obj/x86/Release/Syslib.dll create mode 100644 SOLVER/Syslib/obj/x86/Release/Syslib.pdb create mode 100644 SOLVER/TEST_MAP/DescrForm.Designer.cs create mode 100644 SOLVER/TEST_MAP/DescrForm.cs create mode 100644 SOLVER/TEST_MAP/DescrForm.resx create mode 100644 SOLVER/TEST_MAP/Form1.Designer.cs create mode 100644 SOLVER/TEST_MAP/Form1.cs create mode 100644 SOLVER/TEST_MAP/Form1.resx create mode 100644 SOLVER/TEST_MAP/GraphUtils.cs create mode 100644 SOLVER/TEST_MAP/Newtonsoft.Json.dll create mode 100644 SOLVER/TEST_MAP/PreSolvedRoutes.cs create mode 100644 SOLVER/TEST_MAP/Program.cs create mode 100644 SOLVER/TEST_MAP/Properties/AssemblyInfo.cs create mode 100644 SOLVER/TEST_MAP/Properties/Resources.Designer.cs create mode 100644 SOLVER/TEST_MAP/Properties/Resources.resx create mode 100644 SOLVER/TEST_MAP/Properties/Settings.Designer.cs create mode 100644 SOLVER/TEST_MAP/Properties/Settings.settings create mode 100644 SOLVER/TEST_MAP/RealTimeRoutes.cs create mode 100644 SOLVER/TEST_MAP/RouteMapTest.csproj create mode 100644 SOLVER/TEST_MAP/obj/Debug/MAP_TEST.Properties.Resources.resources create mode 100644 SOLVER/TEST_MAP/obj/Debug/MAP_TEST.csproj.GenerateResource.Cache create mode 100644 SOLVER/TEST_MAP/obj/Debug/MAP_TEST.pdb create mode 100644 SOLVER/TEST_MAP/obj/Debug/ResolveAssemblyReference.cache create mode 100644 SOLVER/TEST_MAP/obj/Debug/RouteMapTest.csproj.GenerateResource.Cache create mode 100644 SOLVER/TEST_MAP/obj/Debug/TEST_MAP.DescrForm.resources create mode 100644 SOLVER/TEST_MAP/obj/Debug/TEST_MAP.TestForm.resources create mode 100644 SOLVER/TEST_MAP/obj/Debug/TEST_MAP.csproj.GenerateResource.Cache create mode 100644 SOLVER/TEST_MAP/obj/Debug/TempPE/Properties.Resources.Designer.cs.dll create mode 100644 SOLVER/TEST_MAP/obj/Debug/mapRouteTest.Properties.Resources.resources create mode 100644 SOLVER/TEST_MAP/obj/Debug/mapRouteTest.csproj.GenerateResource.Cache create mode 100644 SOLVER/TEST_MAP/obj/Debug/mapRouteTest.exe create mode 100644 SOLVER/TEST_MAP/obj/Debug/mapRouteTest.pdb create mode 100644 SOLVER/TEST_MAP/obj/Debug/mapTest.Properties.Resources.resources create mode 100644 SOLVER/TEST_MAP/obj/Debug/mapTest.csproj.GenerateResource.Cache create mode 100644 SOLVER/TEST_MAP/obj/Debug/mapTest.pdb create mode 100644 SOLVER/TEST_MAP/obj/MAP_TEST.csproj.FileListAbsolute.txt create mode 100644 SOLVER/TEST_MAP/obj/Release/ResolveAssemblyReference.cache create mode 100644 SOLVER/TEST_MAP/obj/Release/RouteMapTest.csproj.GenerateResource.Cache create mode 100644 SOLVER/TEST_MAP/obj/Release/TEST_MAP.DescrForm.resources create mode 100644 SOLVER/TEST_MAP/obj/Release/TEST_MAP.TestForm.resources create mode 100644 SOLVER/TEST_MAP/obj/Release/TempPE/Properties.Resources.Designer.cs.dll create mode 100644 SOLVER/TEST_MAP/obj/Release/mapRouteTest.Properties.Resources.resources create mode 100644 SOLVER/TEST_MAP/obj/Release/mapRouteTest.exe create mode 100644 SOLVER/TEST_MAP/obj/Release/mapRouteTest.pdb create mode 100644 SOLVER/TEST_MAP/obj/RouteMapTest.csproj.FileListAbsolute.txt create mode 100644 SOLVER/TEST_MAP/obj/TEST_MAP.csproj.FileList.txt create mode 100644 SOLVER/TEST_MAP/obj/TEST_MAP.csproj.FileListAbsolute.txt create mode 100644 SOLVER/TEST_MAP/obj/mapRouteTest.csproj.FileListAbsolute.txt create mode 100644 SOLVER/TEST_MAP/obj/mapTest.csproj.FileListAbsolute.txt create mode 100644 SOLVER/TEST_MAP/testA.ico create mode 100644 SOLVER/WorkingLoadTest/EMPTY.cs create mode 100644 SOLVER/WorkingLoadTest/Form1.Designer.cs create mode 100644 SOLVER/WorkingLoadTest/Form1.cs create mode 100644 SOLVER/WorkingLoadTest/Form1.resx create mode 100644 SOLVER/WorkingLoadTest/Program.cs create mode 100644 SOLVER/WorkingLoadTest/Properties/AssemblyInfo.cs create mode 100644 SOLVER/WorkingLoadTest/Properties/Resources.Designer.cs create mode 100644 SOLVER/WorkingLoadTest/Properties/Resources.resx create mode 100644 SOLVER/WorkingLoadTest/Properties/Settings.Designer.cs create mode 100644 SOLVER/WorkingLoadTest/Properties/Settings.settings create mode 100644 SOLVER/WorkingLoadTest/WorkingLoadTest.csproj create mode 100644 SOLVER/WorkingLoadTest/obj/Debug/ResolveAssemblyReference.cache create mode 100644 SOLVER/WorkingLoadTest/obj/Debug/WorkingLoadTest.Form1.resources create mode 100644 SOLVER/WorkingLoadTest/obj/Debug/WorkingLoadTest.Properties.Resources.resources create mode 100644 SOLVER/WorkingLoadTest/obj/Debug/WorkingLoadTest.csproj.GenerateResource.Cache create mode 100644 SOLVER/WorkingLoadTest/obj/Debug/WorkingLoadTest.exe create mode 100644 SOLVER/WorkingLoadTest/obj/Debug/WorkingLoadTest.pdb create mode 100644 SOLVER/WorkingLoadTest/obj/Release/ResolveAssemblyReference.cache create mode 100644 SOLVER/WorkingLoadTest/obj/Release/WorkingLoadTest.Form1.resources create mode 100644 SOLVER/WorkingLoadTest/obj/Release/WorkingLoadTest.Properties.Resources.resources create mode 100644 SOLVER/WorkingLoadTest/obj/Release/WorkingLoadTest.csproj.GenerateResource.Cache create mode 100644 SOLVER/WorkingLoadTest/obj/Release/WorkingLoadTest.exe create mode 100644 SOLVER/WorkingLoadTest/obj/Release/WorkingLoadTest.pdb create mode 100644 SOLVER/WorkingLoadTest/obj/WorkingLoadTest.csproj.FileListAbsolute.txt create mode 100644 SOLVER/WorkingLoadTest/testD.ico create mode 100644 SOLVER/XMLSaved/Properties/AssemblyInfo.cs create mode 100644 SOLVER/XMLSaved/XMLSaved.cs create mode 100644 SOLVER/XMLSaved/XMLSaved.csproj create mode 100644 SOLVER/XMLSaved/obj/Debug/XMLSaved.dll create mode 100644 SOLVER/XMLSaved/obj/Debug/XMLSaved.pdb create mode 100644 SOLVER/XMLSaved/obj/Release/XMLSaved.dll create mode 100644 SOLVER/XMLSaved/obj/Release/XMLSaved.pdb create mode 100644 SOLVER/XMLSaved/obj/XMLSaved.csproj.FileListAbsolute.txt create mode 100644 SOLVER/dkxce.Route.Classes/Properties/AssemblyInfo.cs create mode 100644 SOLVER/dkxce.Route.Classes/Route.Classes.cs create mode 100644 SOLVER/dkxce.Route.Classes/dkxce.Route.Classes.csproj create mode 100644 SOLVER/dkxce.Route.Classes/obj/Debug/dkxce.Route.Classes.dll create mode 100644 SOLVER/dkxce.Route.Classes/obj/Debug/dkxce.Route.Classes.pdb create mode 100644 SOLVER/dkxce.Route.Classes/obj/Release/ResolveAssemblyReference.cache create mode 100644 SOLVER/dkxce.Route.Classes/obj/Release/dkxce.Route.Classes.dll create mode 100644 SOLVER/dkxce.Route.Classes/obj/Release/dkxce.Route.Classes.pdb create mode 100644 SOLVER/dkxce.Route.Classes/obj/dkxce.Route.Classes.csproj.FileList.txt create mode 100644 SOLVER/dkxce.Route.Classes/obj/dkxce.Route.Classes.csproj.FileListAbsolute.txt create mode 100644 SOLVER/dkxce.Route.Classes/obj/dkxce.Route.Utils.csproj.FileList.txt create mode 100644 SOLVER/dkxce.Route.GSolver/Properties/AssemblyInfo.cs create mode 100644 SOLVER/dkxce.Route.GSolver/Route.GSolver.cs create mode 100644 SOLVER/dkxce.Route.GSolver/dkxce.Route.GSolver.csproj create mode 100644 SOLVER/dkxce.Route.GSolver/obj/Debug/dkxce.Route.GSolver.dll create mode 100644 SOLVER/dkxce.Route.GSolver/obj/Debug/dkxce.Route.GSolver.pdb create mode 100644 SOLVER/dkxce.Route.GSolver/obj/Release/ResolveAssemblyReference.cache create mode 100644 SOLVER/dkxce.Route.GSolver/obj/Release/dkxce.Route.GSolver.dll create mode 100644 SOLVER/dkxce.Route.GSolver/obj/Release/dkxce.Route.GSolver.pdb create mode 100644 SOLVER/dkxce.Route.GSolver/obj/dkxce.Route.GSolver.csproj.FileList.txt create mode 100644 SOLVER/dkxce.Route.GSolver/obj/dkxce.Route.GSolver.csproj.FileListAbsolute.txt create mode 100644 SOLVER/dkxce.Route.ISolver/Properties/AssemblyInfo.cs create mode 100644 SOLVER/dkxce.Route.ISolver/Route.ISolver.cs create mode 100644 SOLVER/dkxce.Route.ISolver/dkxce.Route.ISolver.csproj create mode 100644 SOLVER/dkxce.Route.ISolver/obj/Debug/dkxce.Route.ISolver.dll create mode 100644 SOLVER/dkxce.Route.ISolver/obj/Debug/dkxce.Route.ISolver.pdb create mode 100644 SOLVER/dkxce.Route.ISolver/obj/Release/ResolveAssemblyReference.cache create mode 100644 SOLVER/dkxce.Route.ISolver/obj/Release/dkxce.Route.ISolver.dll create mode 100644 SOLVER/dkxce.Route.ISolver/obj/Release/dkxce.Route.ISolver.pdb create mode 100644 SOLVER/dkxce.Route.ISolver/obj/dkxce.Route.ISolver.csproj.FileList.txt create mode 100644 SOLVER/dkxce.Route.ISolver/obj/dkxce.Route.ISolver.csproj.FileListAbsolute.txt create mode 100644 SOLVER/dkxce.Route.Matrix/Properties/AssemblyInfo.cs create mode 100644 SOLVER/dkxce.Route.Matrix/Route.Matrix.cs create mode 100644 SOLVER/dkxce.Route.Matrix/dkxce.Route.Matrix.csproj create mode 100644 SOLVER/dkxce.Route.Matrix/obj/Debug/dkxce.Route.Matrix.dll create mode 100644 SOLVER/dkxce.Route.Matrix/obj/Debug/dkxce.Route.Matrix.pdb create mode 100644 SOLVER/dkxce.Route.Matrix/obj/Release/dkxce.Route.Matrix.dll create mode 100644 SOLVER/dkxce.Route.Matrix/obj/Release/dkxce.Route.Matrix.pdb create mode 100644 SOLVER/dkxce.Route.Matrix/obj/dkxce.Route.Matrix.csproj.FileList.txt create mode 100644 SOLVER/dkxce.Route.Matrix/obj/dkxce.Route.Matrix.csproj.FileListAbsolute.txt create mode 100644 SOLVER/dkxce.Route.PointNLL/Properties/AssemblyInfo.cs create mode 100644 SOLVER/dkxce.Route.PointNLL/Route.PointNLL.cs create mode 100644 SOLVER/dkxce.Route.PointNLL/dkxce.Route.PointNLL.csproj create mode 100644 SOLVER/dkxce.Route.PointNLL/obj/Debug/dkxce.Route.PointNLL.dll create mode 100644 SOLVER/dkxce.Route.PointNLL/obj/Debug/dkxce.Route.PointNLL.pdb create mode 100644 SOLVER/dkxce.Route.PointNLL/obj/Release/dkxce.Route.PointNLL.dll create mode 100644 SOLVER/dkxce.Route.PointNLL/obj/Release/dkxce.Route.PointNLL.pdb create mode 100644 SOLVER/dkxce.Route.PointNLL/obj/dkxce.Route.PointNLL.csproj.FileList.txt create mode 100644 SOLVER/dkxce.Route.PointNLL/obj/dkxce.Route.PointNLL.csproj.FileListAbsolute.txt create mode 100644 SOLVER/dkxce.Route.Regions/Properties/AssemblyInfo.cs create mode 100644 SOLVER/dkxce.Route.Regions/Route.Regions.cs create mode 100644 SOLVER/dkxce.Route.Regions/dkxce.Route.Regions.csproj create mode 100644 SOLVER/dkxce.Route.Regions/obj/Debug/dkxce.Route.Regions.dll create mode 100644 SOLVER/dkxce.Route.Regions/obj/Debug/dkxce.Route.Regions.pdb create mode 100644 SOLVER/dkxce.Route.Regions/obj/Release/dkxce.Route.Regions.dll create mode 100644 SOLVER/dkxce.Route.Regions/obj/Release/dkxce.Route.Regions.pdb create mode 100644 SOLVER/dkxce.Route.Regions/obj/dkxce.Route.Regions.csproj.FileList.txt create mode 100644 SOLVER/dkxce.Route.Regions/obj/dkxce.Route.Regions.csproj.FileListAbsolute.txt create mode 100644 SOLVER/dkxce.Route.ServiceSolver/ClientRequest.cs create mode 100644 SOLVER/dkxce.Route.ServiceSolver/Program.cs create mode 100644 SOLVER/dkxce.Route.ServiceSolver/Properties/AssemblyInfo.cs create mode 100644 SOLVER/dkxce.Route.ServiceSolver/RouteServer.cs create mode 100644 SOLVER/dkxce.Route.ServiceSolver/SOAPInterface.cs create mode 100644 SOLVER/dkxce.Route.ServiceSolver/SOAPWSDL.cs create mode 100644 SOLVER/dkxce.Route.ServiceSolver/SYSID.cs create mode 100644 SOLVER/dkxce.Route.ServiceSolver/XmlRpc/Logger.cs create mode 100644 SOLVER/dkxce.Route.ServiceSolver/XmlRpc/SimpleHttpRequest.cs create mode 100644 SOLVER/dkxce.Route.ServiceSolver/XmlRpc/XmlRpcBoxcarRequest.cs create mode 100644 SOLVER/dkxce.Route.ServiceSolver/XmlRpc/XmlRpcClientProxy.cs create mode 100644 SOLVER/dkxce.Route.ServiceSolver/XmlRpc/XmlRpcDeserializer.cs create mode 100644 SOLVER/dkxce.Route.ServiceSolver/XmlRpc/XmlRpcErrorCodes.cs create mode 100644 SOLVER/dkxce.Route.ServiceSolver/XmlRpc/XmlRpcException.cs create mode 100644 SOLVER/dkxce.Route.ServiceSolver/XmlRpc/XmlRpcExposedAttribute.cs create mode 100644 SOLVER/dkxce.Route.ServiceSolver/XmlRpc/XmlRpcRequest.cs create mode 100644 SOLVER/dkxce.Route.ServiceSolver/XmlRpc/XmlRpcRequestDeserializer.cs create mode 100644 SOLVER/dkxce.Route.ServiceSolver/XmlRpc/XmlRpcRequestSerializer.cs create mode 100644 SOLVER/dkxce.Route.ServiceSolver/XmlRpc/XmlRpcResponder.cs create mode 100644 SOLVER/dkxce.Route.ServiceSolver/XmlRpc/XmlRpcResponse.cs create mode 100644 SOLVER/dkxce.Route.ServiceSolver/XmlRpc/XmlRpcResponseDeserializer.cs create mode 100644 SOLVER/dkxce.Route.ServiceSolver/XmlRpc/XmlRpcResponseSerializer.cs create mode 100644 SOLVER/dkxce.Route.ServiceSolver/XmlRpc/XmlRpcSerializer.cs create mode 100644 SOLVER/dkxce.Route.ServiceSolver/XmlRpc/XmlRpcServer.cs create mode 100644 SOLVER/dkxce.Route.ServiceSolver/XmlRpc/XmlRpcSystemObject.cs create mode 100644 SOLVER/dkxce.Route.ServiceSolver/XmlRpc/XmlRpcXmlTokens.cs create mode 100644 SOLVER/dkxce.Route.ServiceSolver/dkxce.Route.ServiceSolver.OneRegion.cs create mode 100644 SOLVER/dkxce.Route.ServiceSolver/dkxce.Route.ServiceSolver.RouteThreader.cs create mode 100644 SOLVER/dkxce.Route.ServiceSolver/dkxce.Route.ServiceSolver.Russia.cs create mode 100644 SOLVER/dkxce.Route.ServiceSolver/dkxce.Route.ServiceSolver.csproj create mode 100644 SOLVER/dkxce.Route.ServiceSolver/dkxce.Route.ServiceSolver.csproj.user create mode 100644 SOLVER/dkxce.Route.ServiceSolver/obj/Debug/dkxce.Route.ServiceSolver.exe create mode 100644 SOLVER/dkxce.Route.ServiceSolver/obj/Debug/dkxce.Route.ServiceSolver.pdb create mode 100644 SOLVER/dkxce.Route.ServiceSolver/obj/Release/ResolveAssemblyReference.cache create mode 100644 SOLVER/dkxce.Route.ServiceSolver/obj/Release/dkxce.Route.ServiceSolver.exe create mode 100644 SOLVER/dkxce.Route.ServiceSolver/obj/Release/dkxce.Route.ServiceSolver.pdb create mode 100644 SOLVER/dkxce.Route.ServiceSolver/obj/dkxce.Route.ServiceSolver.Lipetsk.csproj.FileList.txt create mode 100644 SOLVER/dkxce.Route.ServiceSolver/obj/dkxce.Route.ServiceSolver.Lipetsk.csproj.FileListAbsolute.txt create mode 100644 SOLVER/dkxce.Route.ServiceSolver/obj/dkxce.Route.ServiceSolver.csproj.FileList.txt create mode 100644 SOLVER/dkxce.Route.ServiceSolver/obj/dkxce.Route.ServiceSolver.csproj.FileListAbsolute.txt create mode 100644 SOLVER/dkxce.Route.ServiceSolver/solver.ico create mode 100644 SOLVER/dkxce.Route.Shp2Rt/DBFSharp.cs create mode 100644 SOLVER/dkxce.Route.Shp2Rt/Properties/AssemblyInfo.cs create mode 100644 SOLVER/dkxce.Route.Shp2Rt/Route.Shp2Rt.cs create mode 100644 SOLVER/dkxce.Route.Shp2Rt/dkxce.Route.Shp2Rt.csproj create mode 100644 SOLVER/dkxce.Route.Shp2Rt/dkxce.Route.Shp2Rt.csproj.user create mode 100644 SOLVER/dkxce.Route.Shp2Rt/obj/Debug/ResolveAssemblyReference.cache create mode 100644 SOLVER/dkxce.Route.Shp2Rt/obj/Debug/dkxce.Route.Shp2Rt.dll create mode 100644 SOLVER/dkxce.Route.Shp2Rt/obj/Debug/dkxce.Route.Shp2Rt.pdb create mode 100644 SOLVER/dkxce.Route.Shp2Rt/obj/Release/ResolveAssemblyReference.cache create mode 100644 SOLVER/dkxce.Route.Shp2Rt/obj/Release/dkxce.Route.Shp2Rt.dll create mode 100644 SOLVER/dkxce.Route.Shp2Rt/obj/Release/dkxce.Route.Shp2Rt.pdb create mode 100644 SOLVER/dkxce.Route.Shp2Rt/obj/dkxce.Route.Shp2Rt.csproj.FileList.txt create mode 100644 SOLVER/dkxce.Route.Shp2Rt/obj/dkxce.Route.Shp2Rt.csproj.FileListAbsolute.txt create mode 100644 SOLVER/dkxce.Route.WayList/Properties/AssemblyInfo.cs create mode 100644 SOLVER/dkxce.Route.WayList/Route.WayList.cs create mode 100644 SOLVER/dkxce.Route.WayList/dkxce.Route.WayList.csproj create mode 100644 SOLVER/dkxce.Route.WayList/obj/Debug/dkxce.Route.WayList.dll create mode 100644 SOLVER/dkxce.Route.WayList/obj/Debug/dkxce.Route.WayList.pdb create mode 100644 SOLVER/dkxce.Route.WayList/obj/Release/ResolveAssemblyReference.cache create mode 100644 SOLVER/dkxce.Route.WayList/obj/Release/dkxce.Route.WayList.dll create mode 100644 SOLVER/dkxce.Route.WayList/obj/Release/dkxce.Route.WayList.pdb create mode 100644 SOLVER/dkxce.Route.WayList/obj/dkxce.Route.WayList.csproj.FileList.txt create mode 100644 SOLVER/dkxce.Route.WayList/obj/dkxce.Route.WayList.csproj.FileListAbsolute.txt create mode 100644 SOLVER/dkxce.Utils.CloudBorder/CloundsBorder.cs create mode 100644 SOLVER/dkxce.Utils.CloudBorder/CuttingGeometries.dll create mode 100644 SOLVER/dkxce.Utils.CloudBorder/FormTest1.cs create mode 100644 SOLVER/dkxce.Utils.CloudBorder/PolyCreatorClipper.cs create mode 100644 SOLVER/dkxce.Utils.CloudBorder/PolyLineBuffer.cs create mode 100644 SOLVER/nmsRoutesDirectCall/Properties/AssemblyInfo.cs create mode 100644 SOLVER/nmsRoutesDirectCall/nmsRouteClient.cs create mode 100644 SOLVER/nmsRoutesDirectCall/nmsRoutesDirectCall.csproj create mode 100644 SOLVER/nmsRoutesDirectCall/obj/Debug/nmsRoutesDirectCall.dll create mode 100644 SOLVER/nmsRoutesDirectCall/obj/Debug/nmsRoutesDirectCall.pdb create mode 100644 SOLVER/nmsRoutesDirectCall/obj/Release/nmsRoutesDirectCall.dll create mode 100644 SOLVER/nmsRoutesDirectCall/obj/Release/nmsRoutesDirectCall.pdb create mode 100644 SOLVER/nmsRoutesDirectCall/obj/nmsRoutesDirectCall.csproj.FileListAbsolute.txt create mode 100644 SOLVER/nmsRoutesDirectCall/obj/nmsRoutesDirectCall.csproj.UnmanagedRegistration.cache create mode 100644 SOLVER/nmsRoutesWebTest/Properties/AssemblyInfo.cs create mode 100644 SOLVER/nmsRoutesWebTest/TestProgram.cs create mode 100644 SOLVER/nmsRoutesWebTest/nmsRoutesWebTest.csproj create mode 100644 SOLVER/nmsRoutesWebTest/nmsRoutesWebTest.csproj.user create mode 100644 SOLVER/nmsRoutesWebTest/obj/Debug/ResolveAssemblyReference.cache create mode 100644 SOLVER/nmsRoutesWebTest/obj/Debug/nmsRoutesWebTest.exe create mode 100644 SOLVER/nmsRoutesWebTest/obj/Debug/nmsRoutesWebTest.pdb create mode 100644 SOLVER/nmsRoutesWebTest/obj/Release/ResolveAssemblyReference.cache create mode 100644 SOLVER/nmsRoutesWebTest/obj/Release/nmsRoutesWebTest.exe create mode 100644 SOLVER/nmsRoutesWebTest/obj/Release/nmsRoutesWebTest.pdb create mode 100644 SOLVER/nmsRoutesWebTest/obj/nmsRoutesWebTest.csproj.FileListAbsolute.txt create mode 100644 SOLVER/nmsRoutesWebTest/testC.ico diff --git a/SOLVER/BUILD.cmd b/SOLVER/BUILD.cmd new file mode 100644 index 0000000..327109f --- /dev/null +++ b/SOLVER/BUILD.cmd @@ -0,0 +1,41 @@ +SET MSBE=C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\MSBuild.exe +%MSBE% %CD%\XMLSaved\XMLSaved.csproj +%MSBE% %CD%\dkxce.Route.Classes\dkxce.Route.Classes.csproj +%MSBE% %CD%\dkxce.Route.GSolver\dkxce.Route.GSolver.csproj +%MSBE% %CD%\dkxce.Route.WayList\dkxce.Route.WayList.csproj +%MSBE% %CD%\dkxce.Route.ISolver\dkxce.Route.ISolver.csproj +%MSBE% %CD%\dkxce.Route.Matrix\dkxce.Route.Matrix.csproj +%MSBE% %CD%\dkxce.Route.PointNLL\dkxce.Route.PointNLL.csproj +%MSBE% %CD%\dkxce.Route.Regions\dkxce.Route.Regions.csproj +%MSBE% %CD%\dkxce.Route.Shp2Rt\dkxce.Route.Shp2Rt.csproj +%MSBE% %CD%\dkxce.Route.ServiceSolver\dkxce.Route.ServiceSolver.csproj +%MSBE% %CD%\SSKeySys\SSKeySys.csproj +%MSBE% %CD%\SSProtector\SSProtector.csproj +%MSBE% %CD%\Syslib\Syslib.csproj /p:Configuration=Debug /p:Platform=x86 +%MSBE% %CD%\nmsRoutesDirectCall\nmsRoutesDirectCall.csproj +%MSBE% %CD%\nmsRoutesWebTest\nmsRoutesWebTest.csproj +%MSBE% %CD%\RGWay2RTE\RGWay2RTE.csproj +%MSBE% %CD%\RouteGraphBatcher\RouteGraphBatcher.csproj +%MSBE% %CD%\RouteGraphCalcMatrix\RouteGraphCalcMatrix.csproj +%MSBE% %CD%\RouteGraphCalcRG\RouteGraphCalcRG.csproj +%MSBE% %CD%\RouteGraphCreator\RouteGraphCreator.csproj +%MSBE% %CD%\RGSolver\RouteGraphSolver.csproj +%MSBE% %CD%\TEST_MAP\RouteMapTest.csproj +%MSBE% %CD%\WorkingLoadTest\WorkingLoadTest.csproj +%MSBE% %CD%\RouteServiceState\RouteServiceState.csproj +%MSBE% %CD%\ShapesBBox2Regions\ShapesBBox2Regions.csproj +%MSBE% %CD%\ShapesMerger\ShapesMerger.csproj +%MSBE% %CD%\ShapesPolygonsExtractor\ShapesPolygonsExtractor.csproj +%MSBE% %CD%\RoutesKeyGen\RoutesKeyGen.csproj +cd ..\READY\MAIN_DLLs +call delete_unused_files.cmd +cd ..\MapCreator +call delete_unused_files.cmd +cd ..\Service +call delete_unused_files.cmd +cd ..\TEST +call delete_unused_files.cmd +cd ..\TOOLS +call delete_unused_files.cmd +cd ..\..\SOLVER +pause \ No newline at end of file diff --git a/SOLVER/CLEAR_UNUSED.cmd b/SOLVER/CLEAR_UNUSED.cmd new file mode 100644 index 0000000..4502fd6 --- /dev/null +++ b/SOLVER/CLEAR_UNUSED.cmd @@ -0,0 +1,11 @@ +cd ..\READY\MAIN_DLLs +call delete_unused_files.cmd +cd ..\MapCreator +call delete_unused_files.cmd +cd ..\Service +call delete_unused_files.cmd +cd ..\TEST +call delete_unused_files.cmd +cd ..\TOOLS +call delete_unused_files.cmd +pause \ No newline at end of file diff --git a/SOLVER/RGSolver/Program.cs b/SOLVER/RGSolver/Program.cs new file mode 100644 index 0000000..d5c29b9 --- /dev/null +++ b/SOLVER/RGSolver/Program.cs @@ -0,0 +1,577 @@ +// http://gis-lab.info/projects/osm_shp/region + +using System; +using System.IO; +using System.Xml; +using System.Collections.Generic; + +using dkxce.Route.Classes; +using dkxce.Route.Shp2Rt; +using dkxce.Route.GSolver; +using dkxce.Route.PointNLL; +using dkxce.Route.Matrix; +using dkxce.Route.WayList; + +namespace CNSL +{ + class Program + { + // // // // // // // // // // // // // // // // // // // // // // // // // // + // // // // // // // // // // // // // // // // // // // // // // // // // // + // // // // // // // // // // // // // // // // // // // // // // // // // // + // // TEST // // + // // // // // // // // // // // // // // // // // // // // // // // // // // + // // // // // // // // // // // // // // // // // // // // // // // // // // + // // // // // // // // // // // // // // // // // // // // // // // // // // + + static void TestGraphGeoFile() + { + List way = new List(); + way.Add(1); + way.Add(7); + PointNLLSearcher schr = PointNLLSearcher.LoadToMemory(XMLSaved.GetCurrentDir()+@"\Matrix\graph.geo"); + PointNLL[] waygeo = schr.GetCoordinates(way.ToArray()); + schr.Close(); // close INDEXES FOR NODE LAT LON + return; + } + static void CreateGraphGeoFile() + { + // Create indexes for NODE LAT LON + Random rka = new Random(); + PointNLLIndexer ixr = new PointNLLIndexer(); + for (uint i = 1; i < 100; i++) + ixr.Add(new PointNLL(i, (float)(55.0 + (float)rka.Next(100) / 100.0), (float)(39.0 + (float)rka.Next(100) / 100.0))); + ixr.OptimizeSaveAndClose(XMLSaved.GetCurrentDir() + @"\Matrix\graph.geo"); + } + + static void CSV2TXT() + { + System.IO.FileStream fs = new FileStream(XMLSaved.GetCurrentDir() + @"\Matrix2\TEST.csv", FileMode.Open); + System.IO.StreamReader sr = new StreamReader(fs); + sr.ReadLine(); + + System.IO.FileStream fw = new FileStream(XMLSaved.GetCurrentDir() + @"\Matrix2\TEST.txt", FileMode.Create); + System.IO.StreamWriter sw = new StreamWriter(fw); + sw.WriteLine("#\tnode(cost;length;time)"); + + uint prev_node = 0; + List next = new List(); + List length = new List(); + while (!sr.EndOfStream) + { + + string[] line = sr.ReadLine().Split(new string[] { ";" }, StringSplitOptions.RemoveEmptyEntries); + double len = double.Parse(line[0]); + uint f = uint.Parse(line[1]); + uint e = uint.Parse(line[2]); + if ((prev_node != f) && (prev_node > 0)) + { + if ((prev_node + 1) != f) + { + for (uint x = prev_node + 1; x < f; x++) + sw.WriteLine(x.ToString() + "\t"); + }; + sw.Write(prev_node.ToString() + "\t"); + for (int i = 0; i < next.Count; i++) + sw.Write(next[i].ToString() + "(" + length[i].ToString() + ";" + length[i].ToString() + ";" + (length[i]/60).ToString() + ") "); + sw.WriteLine(); + next.Clear(); + length.Clear(); + }; + prev_node = f; + next.Add(e); + length.Add(len); + continue; + }; + sr.Close(); + fs.Close(); + if (prev_node > 0) + { + sw.Write(prev_node.ToString() + "\t"); + for (int i = 0; i < next.Count; i++) + sw.Write(next[i].ToString() + "(" + length[i].ToString() + ";" + length[i].ToString() + ";60) "); + sw.WriteLine(); + next.Clear(); + length.Clear(); + }; + sw.Close(); + fs.Close(); + } + + #region TULA SHP EXAMPLE + static void Tula_ConvertShp() + { + string shpf = XMLSaved.GetCurrentDir() + @"\Tula\Roads.shp"; + ShpToGraphConverter con = new ShpToGraphConverter(shpf); + con.WriteLinesNamesFile = true; + con.ConvertTo(XMLSaved.GetCurrentDir() + @"\Tula\Tula.rt"); + Console.WriteLine("Press Enter key to continue..."); + Console.ReadLine(); + + } + static void Tula_Test() + { + Console.WriteLine(DateTime.Now.ToString("HH:mm:ss") + " Çàãðóçêà ãðàôà â ïàìÿòü"); + //RMGraph gr = RMGraph.LoadToMemory(XMLSaved.GetCurrentDir() + @"\Tula\Tula.rt", RMGraph.SegmentsInMemoryPreLoad.onDiskCalculations); + RMGraph gr = RMGraph.LoadToMemory(XMLSaved.GetCurrentDir() + @"\Tula\Tula.rt", 17); + //RMGraph gr = RMGraph.WorkWithDisk(XMLSaved.GetCurrentDir() + @"\Tula\Tula.rt"); + + // in city route + //FindStartStopResult nodeStart = gr.FindNodeStart((float)54.2523, (float)37.6052, (float)2000); + //FindStartStopResult nodeEnd = gr.FindNodeEnd((float)54.1654, (float)37.572, (float)2000); + + // region route + FindStartStopResult nodeStart = gr.FindNodeStart((float)54.5109, (float)37.1094, (float)2000); + FindStartStopResult nodeEnd = gr.FindNodeEnd((float)53.139, (float)38.120, (float)2000); + + DateTime s = DateTime.Now; + Console.WriteLine(s.ToString("HH:mm:ss") + " Begin Calc"); + + //gr.LoadExternalTimeInfoFile(...); .. Load Traffic + gr.BeginSolve(true, null); + gr.MinimizeRouteBy = MinimizeBy.Time; + //gr.CalculataA(1,4); + //gr.Calculate(1, new uint[] { 4 }); + gr.SolveAstar(nodeStart.nodeN, nodeEnd.nodeN); // A* + //gr.SolveDeikstra(nodeStart.nodeN, new uint[] { nodeEnd.nodeN }); // NORMAL DEIKSTRA + //gr.SolveDeikstra(new uint[] { nodeStart.nodeN }, nodeEnd.nodeN); // REVERSE DEIKSTRA + //gr.SolveDeikstra(nodeStart.nodeN, new uint[] { nodeEnd.nodeN, nodeEnd.nodeN + 10, nodeEnd.nodeN+20 }); // NORMAL DEIKSTRA MULTI + + DateTime e = DateTime.Now; + TimeSpan ts = e.Subtract(s); + Console.WriteLine(e.ToString("HH:mm:ss") + " End Calc"); + Console.WriteLine("Elapsed: " + (ts.Minutes).ToString() + "m " + ts.Seconds.ToString() + "s " + ts.Milliseconds.ToString() + "ms"); + + float c = gr.GetRouteCost(nodeStart.nodeN, nodeEnd.nodeN); + float d = gr.GetRouteDistance(nodeStart.nodeN, nodeEnd.nodeN); + float t = gr.GetRouteTime(nodeStart.nodeN, nodeEnd.nodeN); + uint[] n = gr.GetRouteNodes(nodeStart.nodeN, nodeEnd.nodeN); + float[] dd; float[] tt; + uint[] r = gr.GetRouteLines(nodeStart.nodeN, n, nodeEnd.nodeN, out dd, out tt); + PointFL[] v = gr.GetRouteVectorWNL(nodeStart.nodeN, n, nodeEnd.nodeN); + + PointF[] v1 = gr.GetRouteVector(nodeStart.nodeN, n, nodeEnd.nodeN); + RouteResult rr = gr.GetRouteFull(nodeStart, nodeEnd, true, true); + int[] linkids = gr.GetLinesLinkIDs(rr.lines); + gr.EndSolve(); + + // all-in-one check + //RouteResult r2 = gr.GetRoute(new System.Drawing.PointF((float)39.52212452888, (float)52.580548586409186), new System.Drawing.PointF((float)39.5174072814941, (float)52.57637509148828)); + + gr.Close(); + + ToJS(nodeStart.normal, rr.vector, nodeEnd.normal, "navy"); + Console.WriteLine("Press Enter key to continue..."); + Console.ReadLine(); + } + #endregion + + #region LIPETSK OSM/SHP EXAMPLE + static void Lipetsk_ConvertOSM() + { + string shpf = XMLSaved.GetCurrentDir() + @"\Matrix4\7.shp"; + ShpToGraphConverter con = new ShpToGraphConverter(shpf); + con.WriteLinesNamesFile = true; + con.ConvertTo(XMLSaved.GetCurrentDir() + @"\Matrix4\lipetsk_osm.rt"); + Console.WriteLine("Press Enter key to continue..."); + Console.ReadLine(); + } + static void Lipetsk_ConvertShp() + { + string shpf = XMLSaved.GetCurrentDir() + @"\Matrix3\Roads_Lipetsk.shp"; + ShpToGraphConverter con = new ShpToGraphConverter(shpf); + con.RegionID = 11; + con.WriteLinesNamesFile = true; + con.ConvertTo(XMLSaved.GetCurrentDir() + @"\Matrix3\lipetsk.rt"); + Console.WriteLine("Press Enter key to continue..."); + Console.ReadLine(); + + } + static void Lipetsk_TestOSM() + { + Console.WriteLine(DateTime.Now.ToString("HH:mm:ss") + " Çàãðóçêà ãðàôà â ïàìÿòü"); + //RMGraph gr = RMGraph.LoadToMemory(XMLSaved.GetCurrentDir() + @"\Matrix4\lipetsk_osm.rt", RMGraph.SegmentsInMemoryPreLoad.onDiskCalculations); + RMGraph gr = RMGraph.LoadToMemory(XMLSaved.GetCurrentDir() + @"\Matrix4\lipetsk_osm.rt", 10); + //RMGraph gr = RMGraph.WorkWithDisk(XMLSaved.GetCurrentDir() + @"\Matrix4\lipetsk_osm.rt"); + + //uint[] ltogo = gr.GetRouteLines(14709, new uint[] { 14710 }, 14709); + //int[] llids = gr.GetLinesLinkIDs(ltogo); + //return; + + // region route + //FindStartStopResult nodeStart = gr.FindNodeStart((float)53.26366, (float)39.25883, (float)2000); + //FindStartStopResult nodeEnd = gr.FindNodeEnd((float)52.497246, (float)39.894234, (float)2000); + // 52.49538, (float)39.9101 + + // as NMS + //FindStartStopResult nodeStart = gr.FindNodeStart((float)52.59708, (float)39.5685, (float)2000); + //FindStartStopResult nodeEnd = gr.FindNodeEnd((float)52.63228, (float)39.5788, (float)2000); + + // in city route + FindStartStopResult nodeStart = gr.FindNodeStart((float)52.64549811935865, (float)39.660279750823975, (float)2000); + FindStartStopResult nodeEnd = gr.FindNodeEnd((float)52.57972714326297, (float)39.51683521270752, (float)2000); + + // test restrictions + //FindStartStopResult nodeStart = gr.FindNodeStart((float)53.24475, (float)39.13105, (float)2000); + //FindStartStopResult nodeEnd = gr.FindNodeEnd((float)53.24517, (float)39.1297, (float)2000); + + // region route 2 + //FindStartStopResult nodeStart = gr.FindNodeStart((float)52.096, (float)37.95, (float)2000); + //FindStartStopResult nodeEnd = gr.FindNodeEnd((float)53.36, (float)40.10, (float)2000); + + DateTime s = DateTime.Now; + Console.WriteLine(s.ToString("HH:mm:ss") + " Begin Calc"); + + //gr.LoadExternalTimeInfoFile(...); .. Load Traffic + gr.BeginSolve(true, null); + gr.MinimizeRouteBy = MinimizeBy.Time; + //gr.CalculataA(1,4); + //gr.Calculate(1, new uint[] { 4 }); + gr.SolveAstar(nodeStart.nodeN, nodeEnd.nodeN); // A* + //gr.SolveDeikstra(nodeStart.nodeN, new uint[] { nodeEnd.nodeN }); // NORMAL DEIKSTRA + //gr.SolveDeikstra(new uint[] { nodeStart.nodeN }, nodeEnd.nodeN); // REVERSE DEIKSTRA + //gr.SolveDeikstra(nodeStart.nodeN, new uint[] { nodeEnd.nodeN, nodeEnd.nodeN + 10, nodeEnd.nodeN+20 }); // NORMAL DEIKSTRA MULTI + + DateTime e = DateTime.Now; + TimeSpan ts = e.Subtract(s); + Console.WriteLine(e.ToString("HH:mm:ss") + " End Calc"); + Console.WriteLine("Elapsed: " + (ts.Minutes).ToString() + "m " + ts.Seconds.ToString() + "s " + ts.Milliseconds.ToString() + "ms"); + + float c = gr.GetRouteCost(nodeStart.nodeN, nodeEnd.nodeN); + float d = gr.GetRouteDistance(nodeStart.nodeN, nodeEnd.nodeN); + float t = gr.GetRouteTime(nodeStart.nodeN, nodeEnd.nodeN); + uint[] n = gr.GetRouteNodes(nodeStart.nodeN, nodeEnd.nodeN); + float[] dd; float[] tt; + uint[] r = gr.GetRouteLines(nodeStart.nodeN, n, nodeEnd.nodeN, out dd, out tt); + PointFL[] v = gr.GetRouteVectorWNL(nodeStart.nodeN, n, nodeEnd.nodeN); + + PointF[] v1 = gr.GetRouteVector(nodeStart.nodeN, n, nodeEnd.nodeN); + RouteResult rr = gr.GetRouteFull(nodeStart, nodeEnd, true, true); + int[] linkids = gr.GetLinesLinkIDs(rr.lines); + gr.EndSolve(); + + // all-in-one check + //RouteResult r2 = gr.GetRoute(new System.Drawing.PointF((float)39.52212452888, (float)52.580548586409186), new System.Drawing.PointF((float)39.5174072814941, (float)52.57637509148828)); + + gr.Close(); + + ToJS(nodeStart.normal, rr.vector, nodeEnd.normal,"maroon"); + Console.WriteLine("Press Enter key to continue..."); + Console.ReadLine(); + } + static void Lipetsk_CalcRG() + { + Console.WriteLine(DateTime.Now.ToString("HH:mm:ss") + " Çàãðóçêà ãðàôà â ïàìÿòü"); + RMGraph gr = RMGraph.LoadToMemory(XMLSaved.GetCurrentDir() + @"\Matrix3\lipetsk.rt", 10); + gr.MinimizeRouteBy = MinimizeBy.Time; + gr.CalculateRGNodesRoutes(11); // Ðàñ÷åò ïóòåé ìåæäó òî÷êàìè ñòûêîâêè ìåæðàéîííûõ ìàðøðóòîâ + gr.Close(); + Console.WriteLine("Press Enter key to continue..."); + Console.ReadLine(); + } + static void Lipetsk_Test() + { + Console.WriteLine(DateTime.Now.ToString("HH:mm:ss") + " Çàãðóçêà ãðàôà â ïàìÿòü"); + //RMGraph gr = RMGraph.LoadToMemory(XMLSaved.GetCurrentDir() + @"\Matrix3\lipetsk.rt", RMGraph.SegmentsInMemoryPreLoad.onDiskCalculations); + RMGraph gr = RMGraph.LoadToMemory(XMLSaved.GetCurrentDir() + @"\Matrix3\lipetsk.rt", 10); + //RMGraph gr = RMGraph.WorkWithDisk(XMLSaved.GetCurrentDir() + @"\Matrix3\lipetsk.rt"); + + //uint[] ltogo = gr.GetRouteLines(14709, new uint[] { 14710 }, 14709); + //int[] llids = gr.GetLinesLinkIDs(ltogo); + //return; + + // region route + //FindStartStopResult nodeStart = gr.FindNodeStart((float)53.26366, (float)39.25883, (float)2000); + //FindStartStopResult nodeEnd = gr.FindNodeEnd((float)52.497246, (float)39.894234, (float)2000); + // 52.49538, (float)39.9101 + + // as NMS + //FindStartStopResult nodeStart = gr.FindNodeStart((float)52.59708, (float)39.5685, (float)2000); + //FindStartStopResult nodeEnd = gr.FindNodeEnd((float)52.63228, (float)39.5788, (float)2000); + + // in city route + // U-TURN START + //FindStartStopResult nodeStart = gr.FindNodeStart((float)52.64549811935865, (float)39.660279750823975, (float)2000); + //FindStartStopResult nodeEnd = gr.FindNodeEnd((float)52.57972714326297, (float)39.51683521270752, (float)2000); + // U-TURN END + //FindStartStopResult nodeStart = gr.FindNodeStart((float)52.62165451049805, (float)39.56116485595703, (float)2000); + //FindStartStopResult nodeEnd = gr.FindNodeEnd((float)52.60966873168945, (float)39.567176818847656, (float)2000); + // U-TURN START & END + FindStartStopResult nodeStart = gr.FindNodeStart((float)52.64549811935865, (float)39.660279750823975, (float)2000); + FindStartStopResult nodeEnd = gr.FindNodeEnd((float)52.60966873168945, (float)39.567176818847656, (float)2000); + + // test restrictions + //FindStartStopResult nodeStart = gr.FindNodeStart((float)53.24475, (float)39.13105, (float)2000); + //FindStartStopResult nodeEnd = gr.FindNodeEnd((float)53.24517, (float)39.1297, (float)2000); + + // region route 2 + //FindStartStopResult nodeStart = gr.FindNodeStart((float)52.096, (float)37.95, (float)2000); + //FindStartStopResult nodeEnd = gr.FindNodeEnd((float)53.36, (float)40.10, (float)2000); + + DateTime s = DateTime.Now; + Console.WriteLine(s.ToString("HH:mm:ss") + " Begin Calc"); + + //gr.LoadExternalTimeInfoFile(...); .. Load Traffic + gr.BeginSolve(true, null); + gr.MinimizeRouteBy = MinimizeBy.Time; + //gr.CalculataA(1,4); + //gr.Calculate(1, new uint[] { 4 }); + gr.SolveAstar(nodeStart.nodeN, nodeEnd.nodeN); // A* + //gr.SolveDeikstra(nodeStart.nodeN, new uint[] { nodeEnd.nodeN }); // NORMAL DEIKSTRA + //gr.SolveDeikstra(new uint[] { nodeStart.nodeN }, nodeEnd.nodeN); // REVERSE DEIKSTRA + //gr.SolveDeikstra(nodeStart.nodeN, new uint[] { nodeEnd.nodeN, nodeEnd.nodeN + 10, nodeEnd.nodeN+20 }); // NORMAL DEIKSTRA MULTI + + DateTime e = DateTime.Now; + TimeSpan ts = e.Subtract(s); + Console.WriteLine(e.ToString("HH:mm:ss") + " End Calc"); + Console.WriteLine("Elapsed: " + (ts.Minutes).ToString() + "m " + ts.Seconds.ToString() + "s " + ts.Milliseconds.ToString() + "ms"); + float c = gr.GetRouteCost(nodeStart.nodeN, nodeEnd.nodeN); + float d = gr.GetRouteDistance(nodeStart.nodeN, nodeEnd.nodeN); + float t = gr.GetRouteTime(nodeStart.nodeN, nodeEnd.nodeN); + uint[] n = gr.GetRouteNodes(nodeStart.nodeN, nodeEnd.nodeN); + float[] dd; float[] tt; + uint[] r = gr.GetRouteLines(nodeStart.nodeN, n, nodeEnd.nodeN, out dd, out tt); + PointFL[] v = gr.GetRouteVectorWNL(nodeStart.nodeN, n, nodeEnd.nodeN); + + /* ROUTE DESCRIPTION */ + RouteDescription rd = new RouteDescription(gr); + RDPoint[] rdps = rd.GetDescription(v); + rd.SaveTextDescription(rdps, XMLSaved.GetCurrentDir() + @"\Matrix3\WAY-LIST.txt"); + //string test_1 = rdps[2].ToString(); + /* END */ + + PointF[] v1 = gr.GetRouteVector(nodeStart.nodeN, n, nodeEnd.nodeN); + RouteResult rr = gr.GetRouteFull(nodeStart, nodeEnd, true, true); + rdps = rd.GetDescription(rr, nodeStart, nodeEnd); + rd.SaveTextDescription(rdps, XMLSaved.GetCurrentDir() + @"\Matrix3\WAY-LIST2.txt"); + int[] linkids = gr.GetLinesLinkIDs(rr.lines); + gr.EndSolve(); + + // all-in-one check + //RouteResult r2 = gr.GetRoute(new System.Drawing.PointF((float)39.52212452888, (float)52.580548586409186), new System.Drawing.PointF((float)39.5174072814941, (float)52.57637509148828)); + + gr.Close(); + + ToJS(nodeStart.normal, rr.vector, nodeEnd.normal, "navy"); + Console.WriteLine("Press Enter key to continue..."); + Console.ReadLine(); + } + static void Lipetsk_Test_010() + { + Console.WriteLine(DateTime.Now.ToString("HH:mm:ss") + " Çàãðóçêà ãðàôà â ïàìÿòü"); + RMGraph gr = RMGraph.LoadToMemory(XMLSaved.GetCurrentDir() + @"..\GRAPHS\010.rt", 10); + + //uint[] ltogo = gr.GetRouteLines(14709, new uint[] { 14710 }, 14709); + //int[] llids = gr.GetLinesLinkIDs(ltogo); + //return; + + // region route + //FindStartStopResult nodeStart = gr.FindNodeStart((float)53.26366, (float)39.25883, (float)2000); + //FindStartStopResult nodeEnd = gr.FindNodeEnd((float)52.497246, (float)39.894234, (float)2000); + // 52.49538, (float)39.9101 + + // as NMS + //FindStartStopResult nodeStart = gr.FindNodeStart((float)52.59708, (float)39.5685, (float)2000); + //FindStartStopResult nodeEnd = gr.FindNodeEnd((float)52.63228, (float)39.5788, (float)2000); + + // in city route + // U-TURN START + //FindStartStopResult nodeStart = gr.FindNodeStart((float)52.64549811935865, (float)39.660279750823975, (float)2000); + //FindStartStopResult nodeEnd = gr.FindNodeEnd((float)52.57972714326297, (float)39.51683521270752, (float)2000); + // U-TURN END + //FindStartStopResult nodeStart = gr.FindNodeStart((float)52.62165451049805, (float)39.56116485595703, (float)2000); + //FindStartStopResult nodeEnd = gr.FindNodeEnd((float)52.60966873168945, (float)39.567176818847656, (float)2000); + // U-TURN START & END + FindStartStopResult nodeStart = gr.FindNodeStart((float)52.64549811935865, (float)39.660279750823975, (float)2000); + FindStartStopResult nodeEnd = gr.FindNodeEnd((float)52.60966873168945, (float)39.567176818847656, (float)2000); + + // test restrictions + //FindStartStopResult nodeStart = gr.FindNodeStart((float)53.24475, (float)39.13105, (float)2000); + //FindStartStopResult nodeEnd = gr.FindNodeEnd((float)53.24517, (float)39.1297, (float)2000); + + // region route 2 + //FindStartStopResult nodeStart = gr.FindNodeStart((float)52.096, (float)37.95, (float)2000); + //FindStartStopResult nodeEnd = gr.FindNodeEnd((float)53.36, (float)40.10, (float)2000); + + DateTime s = DateTime.Now; + Console.WriteLine(s.ToString("HH:mm:ss") + " Begin Calc"); + + //gr.LoadExternalTimeInfoFile(...); .. Load Traffic + gr.BeginSolve(true, null); + gr.MinimizeRouteBy = MinimizeBy.Time; + //gr.CalculataA(1,4); + //gr.Calculate(1, new uint[] { 4 }); + gr.SolveAstar(nodeStart.nodeN, nodeEnd.nodeN); // A* + //gr.SolveDeikstra(nodeStart.nodeN, new uint[] { nodeEnd.nodeN }); // NORMAL DEIKSTRA + //gr.SolveDeikstra(new uint[] { nodeStart.nodeN }, nodeEnd.nodeN); // REVERSE DEIKSTRA + //gr.SolveDeikstra(nodeStart.nodeN, new uint[] { nodeEnd.nodeN, nodeEnd.nodeN + 10, nodeEnd.nodeN+20 }); // NORMAL DEIKSTRA MULTI + + DateTime e = DateTime.Now; + TimeSpan ts = e.Subtract(s); + Console.WriteLine(e.ToString("HH:mm:ss") + " End Calc"); + Console.WriteLine("Elapsed: " + (ts.Minutes).ToString() + "m " + ts.Seconds.ToString() + "s " + ts.Milliseconds.ToString() + "ms"); + float c = gr.GetRouteCost(nodeStart.nodeN, nodeEnd.nodeN); + float d = gr.GetRouteDistance(nodeStart.nodeN, nodeEnd.nodeN); + float t = gr.GetRouteTime(nodeStart.nodeN, nodeEnd.nodeN); + uint[] n = gr.GetRouteNodes(nodeStart.nodeN, nodeEnd.nodeN); + float[] dd; float[] tt; + uint[] r = gr.GetRouteLines(nodeStart.nodeN, n, nodeEnd.nodeN, out dd, out tt); + PointFL[] v = gr.GetRouteVectorWNL(nodeStart.nodeN, n, nodeEnd.nodeN); + + /* ROUTE DESCRIPTION */ + RouteDescription rd = new RouteDescription(gr); + RDPoint[] rdps = rd.GetDescription(v); + rd.SaveTextDescription(rdps, XMLSaved.GetCurrentDir() + @"\RMXSolver-DESC-WAY-LIST.txt"); + //string test_1 = rdps[2].ToString(); + /* END */ + + PointF[] v1 = gr.GetRouteVector(nodeStart.nodeN, n, nodeEnd.nodeN); + RouteResult rr = gr.GetRouteFull(nodeStart, nodeEnd, true, true); + rdps = rd.GetDescription(rr, nodeStart, nodeEnd); + rd.SaveTextDescription(rdps, XMLSaved.GetCurrentDir() + @"\RMXSolver-DESC-WAY-LIST-2.txt"); + int[] linkids = gr.GetLinesLinkIDs(rr.lines); + gr.EndSolve(); + + // all-in-one check + //RouteResult r2 = gr.GetRoute(new System.Drawing.PointF((float)39.52212452888, (float)52.580548586409186), new System.Drawing.PointF((float)39.5174072814941, (float)52.57637509148828)); + + gr.Close(); + + string js = ToJS(nodeStart.normal, rr.vector, nodeEnd.normal, "navy"); + + FileStream fs = new FileStream(XMLSaved.GetCurrentDir() + @"\RMXSolver-DESC-JS.txt", FileMode.Create, FileAccess.Write); + StreamWriter sw = new StreamWriter(fs); + sw.Write(js); + sw.Close(); + fs.Close(); + + Console.WriteLine("Press Enter key to continue..."); + Console.ReadLine(); + } + #endregion + + public static string ToJS(PointF[] start, PointFL[] route, PointF[] end, string routeColor) + { + string s = ""; + s += "var polystart = new GPolyline([\r\n"; + for (int i = 0; i < start.Length; i++) + s += "new GLatLng(" + start[i].Y.ToString().Replace(",", ".") + ", " + start[i].X.ToString().Replace(",", ".") + ")"+(i<(start.Length-1)?",":"")+"\r\n"; + s += "], \"#FF0000\", 5);\r\n"; + s += "map.addOverlay(polystart);\r\n\r\n"; + + s += "var polyroute = new GPolyline([\r\n"; + for (int i = 0; i < route.Length; i++) + s += "new GLatLng(" + route[i].Y.ToString().Replace(",", ".") + ", " + route[i].X.ToString().Replace(",", ".") + ")" + (i < (route.Length - 1) ? "," : "") + "\r\n"; + s += "], \"" + routeColor + "\", 5);\r\n"; + s += "map.addOverlay(polyroute);\r\n\r\n"; + + s += "var polyend = new GPolyline([\r\n"; + for (int i = 0; i < end.Length; i++) + s += "new GLatLng(" + end[i].Y.ToString().Replace(",", ".") + ", " + end[i].X.ToString().Replace(",", ".") + ")" + (i < (end.Length - 1) ? "," : "") + "\r\n"; + s += "], \"#00FF00\", 5);\r\n"; + s += "map.addOverlay(polyend);\r\n\r\n"; + + System.Windows.Forms.Clipboard.SetText(s); + return s; + } + + [STAThread] + static void Main(string[] args) + { + //dkxce.Route.ServiceSolver.RussiaSolver.RussiaSolver_Test_PreService(); + //dkxce.Route.ServiceSolver.RussiaSolver.Russia_Test_SvcCmd(); + + //dkxce.Route.ServiceSolver.OneRegionSolver.OneRegion_Test_PreService(); + //dkxce.Route.ServiceSolver.OneRegionSolver.OneRegion_Test_SvcCmd(); + + + // Tula - Kaluga - Smolensk + //TulaKalugaSmolensk.CreateGraphs(); + //TulaKalugaSmolensk.CreateMatrix(); + //TulaKalugaSmolensk.CheckRoute_TuKaSm_A(); + //TulaKalugaSmolensk.CheckRoute_TuKaSm_B(); + + // Tula dir + //Tula_ConvertShp(); + //Tula_Test(); + + //Matrix4 dir + //Lipetsk_ConvertOSM(); + //Lipetsk_TestOSM(); + + // Matrix3 dir + //Lipetsk_ConvertShp(); + //Lipetsk_CalcRG(); + //Lipetsk_Test(); + + // Matrix 2 dir + //CSV2TXT(); // TEST.csv --> TEST.txt + + // Matrix dir + //CreateMatrix(); + //TestMatrix(); + + //CreateGraphGeoFile(); + //TestGraphGeoFile(); + + // + Lipetsk_Test_010(); + } + + #region RGNodes Matrix EXAMPLE + static void CreateMatrix() + { + string MX_file = XMLSaved.GetCurrentDir() + @"\Matrix\matrix.bin"; + RMMatrix rm = RMMatrix.CreateInMemory(13);//.CreateOnDisk(13, mxPath); + + // Read Text Graph Info + System.IO.FileStream fs = new FileStream(XMLSaved.GetCurrentDir() + @"\Matrix\TextGraph.txt", FileMode.Open); + System.IO.StreamReader sr = new StreamReader(fs); + + sr.ReadLine(); // 1st line - info + while (!sr.EndOfStream) + { + string ln = sr.ReadLine(); + uint iFrom = uint.Parse(ln.Substring(0, ln.IndexOf("\t"))); + string[] itms = ln.Substring(ln.IndexOf("\t") + 1).Split(new string[] { " " }, StringSplitOptions.RemoveEmptyEntries); + + for (int i = 0; i < itms.Length; i++) + { + string nnew = itms[i].Substring(0, itms[i].Length - 1); + uint iTo = uint.Parse(nnew.Substring(0, nnew.IndexOf("("))); + string[] cost_dist_speed = nnew.Substring(nnew.IndexOf("(") + 1).Split(new string[] { ";" }, StringSplitOptions.None); + uint lTo = uint.Parse(cost_dist_speed[0]); + + // Params + Single lreal = Single.Parse(cost_dist_speed[1], rm.DotDelimiter); // km + Single time = Single.Parse(cost_dist_speed[2], rm.DotDelimiter); // minutes + + rm.AddWay(iFrom, iTo, lTo, lreal, time, 0); // ADD INFO TO MATRIX + }; + }; + fs.Close(); // CLOSE TEXT FILE + + rm.SaveToTextFile(XMLSaved.GetCurrentDir() + @"\Matrix\CalcMatrixFU0.txt"); // save matrix to txt + rm.Solve(); // calculate matrix + rm.SaveToFile(MX_file); // save matrix to disk + rm.SaveToTextFile(XMLSaved.GetCurrentDir() + @"\Matrix\CalcMatrixFU.txt"); // save matrix to txt + rm.Close(); // close matrix + } + + static void TestMatrix() + { + string MX_file = XMLSaved.GetCurrentDir() + @"\Matrix\matrix.bin"; + RMMatrix rm = RMMatrix.LoadToMemory(MX_file); + + uint uFrom = 5; // start node + uint uTo = 10; // end node + + double c1 = rm.GetRouteCost(uFrom, uTo); // read params + double l = rm.GetRouteDist(uFrom, uTo); // .. + double t = rm.GetRouteTime(uFrom, uTo); + uint[] arr = rm.GetRouteWay(uFrom, uTo); // .. + rm.Close(); // close matrix + } + #endregion + } +} diff --git a/SOLVER/RGSolver/Properties/AssemblyInfo.cs b/SOLVER/RGSolver/Properties/AssemblyInfo.cs new file mode 100644 index 0000000..457c6b1 --- /dev/null +++ b/SOLVER/RGSolver/Properties/AssemblyInfo.cs @@ -0,0 +1,33 @@ +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +[assembly: AssemblyTitle("CNSL")] +[assembly: AssemblyDescription("Проверка раÑчета маршрута")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("Milok Zbrozek ")] +[assembly: AssemblyProduct("CNSL")] +[assembly: AssemblyCopyright("Copyright © Milok Zbrozek 2021")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// Setting ComVisible to false makes the types in this assembly not visible +// to COM components. If you need to access a type in this assembly from +// COM, set the ComVisible attribute to true on that type. +[assembly: ComVisible(false)] + +// The following GUID is for the ID of the typelib if this project is exposed to COM +[assembly: Guid("b90e80ab-36a9-491a-af96-8a64ca68c8a8")] + +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +[assembly: AssemblyVersion("21.12.21.3")] +[assembly: AssemblyFileVersion("21.12.21.3")] diff --git a/SOLVER/RGSolver/RouteGraphSolver.csproj b/SOLVER/RGSolver/RouteGraphSolver.csproj new file mode 100644 index 0000000..0b61eed --- /dev/null +++ b/SOLVER/RGSolver/RouteGraphSolver.csproj @@ -0,0 +1,89 @@ + + + Debug + AnyCPU + 8.0.50727 + 2.0 + {CD2120A6-969A-4F7C-B9ED-3083FAFB263B} + Exe + Properties + RMXSolver + RMXSolver + testB.ico + + + true + full + false + ..\..\READY\TEST\ + DEBUG;TRACE + prompt + 4 + + + pdbonly + true + ..\..\READY\TEST\ + TRACE + prompt + 4 + + + + False + ..\..\READY\MAIN_DLLs\dkxce.Route.Classes.dll + + + False + ..\..\READY\MAIN_DLLs\dkxce.Route.GSolver.dll + + + False + ..\..\READY\MAIN_DLLs\dkxce.Route.ISolver.dll + + + False + ..\..\READY\MAIN_DLLs\dkxce.Route.Matrix.dll + + + False + ..\..\READY\MAIN_DLLs\dkxce.Route.PointNLL.dll + + + False + ..\..\READY\MAIN_DLLs\dkxce.Route.Regions.dll + + + False + ..\..\READY\MAIN_DLLs\dkxce.Route.Shp2Rt.dll + + + False + ..\..\READY\MAIN_DLLs\dkxce.Route.WayList.dll + + + + + + + False + ..\..\READY\MAIN_DLLs\XMLSaved.dll + + + + + + + + + + + + + \ No newline at end of file diff --git a/SOLVER/RGSolver/TulaKalugaSmolensk.cs b/SOLVER/RGSolver/TulaKalugaSmolensk.cs new file mode 100644 index 0000000..7c1a276 --- /dev/null +++ b/SOLVER/RGSolver/TulaKalugaSmolensk.cs @@ -0,0 +1,491 @@ +using System; +using System.IO; +using System.Xml; +using System.Collections.Generic; + +using dkxce.Route.Classes; +using dkxce.Route.Shp2Rt; +using dkxce.Route.GSolver; +using dkxce.Route.Regions; +using dkxce.Route.Matrix; + +namespace CNSL +{ + public class TulaKalugaSmolensk + { + public static void CreateGraphs() + { + string shpf = XMLSaved.GetCurrentDir() + @"\Matrix6\Tula.shp"; + ShpToGraphConverter con = new ShpToGraphConverter(shpf); + con.WriteLinesNamesFile = true; + con.ConvertTo(XMLSaved.GetCurrentDir() + @"\Matrix6\G\Tula.rt"); + + RMGraph gr = RMGraph.LoadToMemory(XMLSaved.GetCurrentDir() + @"\Matrix6\G\Tula.rt", 17); + gr.MinimizeRouteBy = MinimizeBy.Time; + gr.CalculateRGNodesRoutes(17); // Ðàñ÷åò ïóòåé ìåæäó òî÷êàìè ñòûêîâêè ìåæðàéîííûõ ìàðøðóòîâ + gr.Close(); + + shpf = XMLSaved.GetCurrentDir() + @"\Matrix6\Kaluga.shp"; + con = new ShpToGraphConverter(shpf); + con.WriteLinesNamesFile = true; + con.ConvertTo(XMLSaved.GetCurrentDir() + @"\Matrix6\G\Kaluga.rt"); + + gr = RMGraph.LoadToMemory(XMLSaved.GetCurrentDir() + @"\Matrix6\G\Kaluga.rt", 7); + gr.MinimizeRouteBy = MinimizeBy.Time; + gr.CalculateRGNodesRoutes(7); // Ðàñ÷åò ïóòåé ìåæäó òî÷êàìè ñòûêîâêè ìåæðàéîííûõ ìàðøðóòîâ + gr.Close(); + + shpf = XMLSaved.GetCurrentDir() + @"\Matrix6\Smolensk.shp"; + con = new ShpToGraphConverter(shpf); + con.WriteLinesNamesFile = true; + con.ConvertTo(XMLSaved.GetCurrentDir() + @"\Matrix6\G\Smolensk.rt"); + + gr = RMGraph.LoadToMemory(XMLSaved.GetCurrentDir() + @"\Matrix6\G\Smolensk.rt",14); + gr.MinimizeRouteBy = MinimizeBy.Time; + gr.CalculateRGNodesRoutes(14); // Ðàñ÷åò ïóòåé ìåæäó òî÷êàìè ñòûêîâêè ìåæðàéîííûõ ìàðøðóòîâ + gr.Close(); + + shpf = XMLSaved.GetCurrentDir() + @"\Matrix6\Lipetsk.shp"; + con = new ShpToGraphConverter(shpf); + con.WriteLinesNamesFile = true; + con.ConvertTo(XMLSaved.GetCurrentDir() + @"\Matrix6\G\Lipetsk.rt"); + + gr = RMGraph.LoadToMemory(XMLSaved.GetCurrentDir() + @"\Matrix6\G\Lipetsk.rt", 10); + gr.MinimizeRouteBy = MinimizeBy.Time; + gr.CalculateRGNodesRoutes(10); // Ðàñ÷åò ïóòåé ìåæäó òî÷êàìè ñòûêîâêè ìåæðàéîííûõ ìàðøðóòîâ + gr.Close(); + + + Console.WriteLine("Press Enter key to continue..."); + Console.ReadLine(); + } + + public static void CreateMatrix() + { + string path = XMLSaved.GetCurrentDir() + @"\Matrix6\G\"; + RMMatrix rm = RMMatrix.CreateInMemory(10); + + string[] files = System.IO.Directory.GetFiles(path, "*.rgnodes.xml"); + foreach (string file in files) + { + TRGNode[] nds = XMLSaved.Load(file); + for (int i = 0; i < nds.Length; i++) + for (int ito = 0; ito < nds[i].links.Length; ito++) + rm.AddWay((uint)nds[i].id, (uint)nds[i].links[ito], nds[i].costs[ito], nds[i].dists[ito], nds[i].times[ito],0); + }; + + rm.SaveToTextFile(path+"_matrix0.txt"); + rm.Solve(); // calculate matrix + rm.SaveToFile(path + "_matrix.bin"); // save matrix to disk + rm.SaveToTextFile(path + "_matrix1.txt"); + rm.Close(); // close matrix + } + + public static void CheckRoute_TuKaSm_A() + { + string path = XMLSaved.GetCurrentDir() + @"\Matrix5\G\"; + + uint[] start = new uint[] { 1, 2, 3 }; // Tula + uint[] sNodes = new uint[] { 34740 /*1*/, 34741 /*2*/, 34761 /*3*/}; + + uint[] end = new uint[] { 4, 5 }; // Smolens + uint[] eNodes = new uint[] { 65916 /*4*/, 25196 /*5*/}; + + int s_elem = -1; + int e_elem = -1; + + ///////////////////////// + + PointInRegionUtils ru = new PointInRegionUtils(); + ru.LoadRegionsFromFile(XMLSaved.GetCurrentDir() + @"\regions.shp"); + int from_reg = ru.PointInRegion(53.1517, 38.056); + string from_file = ru.RegionFileByRegionId(from_reg); + int to_reg = ru.PointInRegion(55.6030, 31.1754); + string to_file = ru.RegionFileByRegionId(to_reg); + + + // TULA + Console.WriteLine(DateTime.Now.ToString("HH:mm:ss") + " Çàãðóçêà Òóëû â ïàìÿòü"); + RMGraph grS = RMGraph.LoadToMemory(path + from_reg /*"Tula.rt"*/, 17); + FindStartStopResult nodeStart = grS.FindNodeStart((float)53.1517, (float)38.056, (float)2000); + + DateTime s1 = DateTime.Now; + Console.WriteLine(s1.ToString("HH:mm:ss") + " Begin Calc"); + + grS.BeginSolve(true, null); + grS.MinimizeRouteBy = MinimizeBy.Time; + grS.SolveDeikstra(nodeStart.nodeN, sNodes); // NORMAL DEIKSTRA + + DateTime e1 = DateTime.Now; + TimeSpan ts1 = e1.Subtract(s1); + Console.WriteLine(e1.ToString("HH:mm:ss") + " End Calc"); + Console.WriteLine("Elapsed: " + (ts1.Minutes).ToString() + "m " + ts1.Seconds.ToString() + "s " + ts1.Milliseconds.ToString() + "ms"); + + + // SMOLENSK + Console.WriteLine(DateTime.Now.ToString("HH:mm:ss") + " Çàãðóçêà Ñìîëåíñêà â ïàìÿòü"); + RMGraph grE = RMGraph.LoadToMemory(path + to_reg /*"Smolensk.rt"*/, 14); + FindStartStopResult nodeEnd = grE.FindNodeEnd((float)55.6030, (float)31.1754, (float)2000); + + DateTime s2 = DateTime.Now; + Console.WriteLine(s2.ToString("HH:mm:ss") + " Begin Calc"); + + grE.BeginSolve(true, null); + grE.MinimizeRouteBy = MinimizeBy.Time; + grE.SolveDeikstra(eNodes, nodeEnd.nodeN); // REVERSE DEIKSTRA + + DateTime e2 = DateTime.Now; + TimeSpan ts2 = e2.Subtract(s2); + Console.WriteLine(e2.ToString("HH:mm:ss") + " End Calc"); + Console.WriteLine("Elapsed: " + (ts2.Minutes).ToString() + "m " + ts2.Seconds.ToString() + "s " + ts2.Milliseconds.ToString() + "ms"); + + // Matrix + RMMatrix rm = RMMatrix.LoadToMemory(path + "_matrix.bin"); + + // merge + double time = double.MaxValue; + for(int x=0;x.Load(path + String.Format(@"RGWays\{0}T{1}.rgway.xml", start[s_elem], end[e_elem])); + PointFL[] points_B = nodes_B.route.vector; + + float time_C = grE.GetRouteTime(eNodes[e_elem],nodeEnd.nodeN); + float dist_C = grE.GetRouteDistance(eNodes[e_elem], nodeEnd.nodeN); + float cost_C = grE.GetRouteCost(eNodes[e_elem], nodeEnd.nodeN); + uint[] nodes_C = grE.GetRouteNodes(eNodes[e_elem], nodeEnd.nodeN); + PointF[] points_C = grE.GetRouteVector(eNodes[e_elem], nodes_C, nodeEnd.nodeN); + + // Tula + grS.EndSolve(); + grS.Close(); + + // Smol + grE.EndSolve(); + grE.Close(); + + rm.Close(); // close matrix + + double time_ttl = time_A + time_B + time_C; + double dist_ttl = dist_A + dist_B + dist_C; + + Console.WriteLine("Press Enter key to continue..."); + ToJS(points_A, points_B, points_C); + Console.ReadLine(); + } + + public static void CheckRoute_TuKaSm_B() + { + string path = XMLSaved.GetCurrentDir() + @"\Matrix6\G\"; + + /////////////////////// + // START - END + /////////////////////// + //double sLat = 53.1406; // tula + //double sLon = 38.110; // tula + //double sLat = 54.479; // kaluga + //double sLon = 36.357; // kaluga + //double sLat = 55.6030; // smolensk + //double sLon = 31.1754; // smolensk + double sLat = 54.128; // smolensk2 + double sLon = 33.344; // smolensk2 + //double sLat = 52.160; // lipetsk + //double sLon = 40.479; // lipetsk + //double sLat = 52.105; // lipetsk2 + //double sLon = 39.176; // lipetsk2 + //double sLat = 53.365; // lipetsk3 + //double sLon = 40.10; // lipetsk3 + + //double eLat = 53.793; // tula + //double eLon = 36.158; // tula + //double eLat = 54.236; // kaluga + //double eLon = 33.71; // kaluga + //double eLat = 54.977; // smolensk0 + //double eLon = 31.006; // smolensk0 + //double eLat = 55.6030; // smolensk1 + //double eLon = 31.1754; // smolensk1 + //double eLat = 53.933; // smolensk2 + //double eLon = 32.78; // smolensk2 + //double eLat = 55.915; // smolensk3 + //double eLon = 33.710; // smolensk3 + //double eLat = 52.105; // lipetsk + //double eLon = 39.176; // lipetsk + double eLat = 52.446; // lipetsk2 + double eLon = 37.98; // lipetsk2 + /////////////////////// + /////////////////////// + + Console.WriteLine(DateTime.Now.ToString("HH:mm:ss") + " Ïîèñê îïòèìàëüíîãî ìàðøðóòà"); + Console.WriteLine(DateTime.Now.ToString("HH:mm:ss") + " "+sLat.ToString()+" "+sLon.ToString()+" -> "+eLat.ToString()+" "+eLon.ToString()); + Console.Write(DateTime.Now.ToString("HH:mm:ss") + " Ïîïàäàíèå START: "); + + /////////////////////// + // GET REGIONS POINTS IN + /////////////////////// + PointInRegionUtils ru = new PointInRegionUtils(); + ru.LoadRegionsFromFile(path + "regions.shp"); + int sReg = ru.PointInRegion(sLat, sLon); + string sFile = ru.RegionFileByRegionId(sReg); + string sName = ru.RegionNameByRegionId(sReg); + Console.WriteLine(sReg.ToString() + " " + sName+" ["+sFile+"]"); + Console.Write(DateTime.Now.ToString("HH:mm:ss") + " Ïîïàäàíèå FINISH: "); + int eReg = ru.PointInRegion(eLat, eLon); + string eFile = ru.RegionFileByRegionId(eReg); + string eName = ru.RegionNameByRegionId(eReg); + Console.WriteLine(eReg.ToString() + " " + eName + " [" + eFile + "]"); + /////////////////////// + /////////////////////// + + if (sReg < 1) throw new Exception("Òî÷êà ñòàðòà íå ïîïàäàåò â çîíó äîñòóïíîé êàðòû!"); + if (sReg < 1) throw new Exception("Òî÷êà ñòàðòà íå ïîïàäàåò â çîíó äîñòóïíîé êàðòû!"); + if (sFile == "") throw new Exception("Äëÿ ðåãèîíà `" + sName + "` ìàðøðóòû íåäîñòóïíû!"); + if (eFile == "") throw new Exception("Äëÿ ðåãèîíà `" + eName + "` ìàðøðóòû íåäîñòóïíû!"); + + if (sReg != eReg) + { + Console.WriteLine(DateTime.Now.ToString("HH:mm:ss") + " Ïîèñê ìåæðåãèîíàëüíûõ óçëîâ â ðåãèîíàõ "+sReg.ToString()+" è "+eReg.ToString()); + /////////////////////// + // GET RGNODES + /////////////////////// + List sRGNodes = new List(); + List sGraphNodes = new List(); + List sTimeToRGNode = new List(); + foreach (TRGNode rgnode in XMLSaved.Load(path + System.IO.Path.GetFileNameWithoutExtension(sFile) + ".rgnodes.xml")) + if (rgnode.outer) + { + sRGNodes.Add((uint)rgnode.id); + sGraphNodes.Add(rgnode.node); + sTimeToRGNode.Add(Utils.GetLengthMeters(sLat, sLon, rgnode.lat, rgnode.lon, false) / 1000); // 60 km/h + }; + List eRGNodes = new List(); + List eGraphNodes = new List(); + List eTimeFromRGNode = new List(); + foreach (TRGNode rgnode in XMLSaved.Load(path + System.IO.Path.GetFileNameWithoutExtension(eFile) + ".rgnodes.xml")) + if (rgnode.inner) + { + eRGNodes.Add((uint)rgnode.id); + eGraphNodes.Add(rgnode.node); + eTimeFromRGNode.Add(Utils.GetLengthMeters(eLat, eLon, rgnode.lat, rgnode.lon, false) / 1000); // 60 km/h + }; + /////////////////////// + /////////////////////// + + int start_matrix_element = -1; + int end_matrix_element = -1; + + /////////////////////// + // GET MATRIX ROUTE, & calculate shortest way (to_matrix+in_matrix) + /////////////////////// + Console.WriteLine(DateTime.Now.ToString("HH:mm:ss") + " Çàãðóçêà ìàòðèöû ìåæðåãèîíàëüíûõ ìàðøðóòîâ"); + RMMatrix rm = RMMatrix.LoadToMemory(path + "_matrix.bin"); + Console.WriteLine(DateTime.Now.ToString("HH:mm:ss") + " Ïîèñê ìàðøðóòà " + sReg.ToString() + " -> " + eReg.ToString()); + double time_abc = double.MaxValue; + for (int x = 0; x < sRGNodes.Count; x++) + for (int y = 0; y < eRGNodes.Count; y++) + { + float ttl_time = sTimeToRGNode[x] + rm.GetRouteTime(sRGNodes[x], eRGNodes[y]) + eTimeFromRGNode[y]; + if (ttl_time < time_abc) + { + time_abc = ttl_time; + start_matrix_element = x; + end_matrix_element = y; + }; + }; + Console.WriteLine(DateTime.Now.ToString("HH:mm:ss") + " Êðîò÷àéøèé ìàðøðóò: [" + sRGNodes[start_matrix_element].ToString() + "] -> [" + eRGNodes[end_matrix_element].ToString()+"]"); + float dist_B = rm.GetRouteDist(sRGNodes[start_matrix_element], eRGNodes[end_matrix_element]); + float time_B = rm.GetRouteTime(sRGNodes[start_matrix_element], eRGNodes[end_matrix_element]); + float cost_B = rm.GetRouteCost(sRGNodes[start_matrix_element], eRGNodes[end_matrix_element]); + RouteResultStored nodes_B = new RouteResultStored(); + List points_B = new List(); + if (dist_B > 0) + { + List frt = new List(); + frt.Add(sRGNodes[start_matrix_element]); + uint[] mdl = rm.GetRouteWay(sRGNodes[start_matrix_element], eRGNodes[end_matrix_element]); + frt.AddRange(mdl); + frt.Add(eRGNodes[end_matrix_element]); + for (int i = 1; i < frt.Count; i++) + { + nodes_B = XMLSaved.Load(path + String.Format(@"RGWays\{0}T{1}.rgway.xml", frt[i-1], frt[i])); + points_B.AddRange(nodes_B.route.vector); + }; + }; + rm.Close(); + /////////////////////// + /////////////////////// + + /////////////////////// + // FROM ROUTE + /////////////////////// + DateTime s1 = DateTime.Now; + Console.Write(s1.ToString("HH:mm:ss") + " " + sFile + ", çàãðóçêà"); + RMGraph grS = RMGraph.LoadToMemory(path + sFile /*"Tula.rt"*/, 17); + DateTime e1 = DateTime.Now; + TimeSpan ts1 = e1.Subtract(s1); + Console.WriteLine(" - " + (ts1.Minutes).ToString() + "m " + ts1.Seconds.ToString() + "s " + ts1.Milliseconds.ToString() + "ms (" + e1.ToString("HH:mm:ss") + ")"); + + Console.Write(DateTime.Now.ToString("HH:mm:ss") + " Áëèæàéøèé óçåë ê " + sLat.ToString() + " " + sLon.ToString() + " - "); + FindStartStopResult nodeStart = grS.FindNodeStart((float)sLat, (float)sLon, (float)2000); + Console.WriteLine(nodeStart.nodeN); + if (nodeStart.nodeN == 0) throw new Exception("Íå íàéäåíû äîðîãè âáëèçè òî÷êè ñòàðòà"); + + s1 = DateTime.Now; + Console.Write(s1.ToString("HH:mm:ss") + " Ïîèñê ìàðøðóòà " + nodeStart.nodeN.ToString() + " -> [" + sRGNodes[start_matrix_element].ToString() + "]"); + + grS.BeginSolve(true, null); + grS.MinimizeRouteBy = MinimizeBy.Time; + grS.SolveAstar(nodeStart.nodeN, sGraphNodes[start_matrix_element]); + + e1 = DateTime.Now; + ts1 = e1.Subtract(s1); + Console.WriteLine(" - " + (ts1.Minutes).ToString() + "m " + ts1.Seconds.ToString() + "s " + ts1.Milliseconds.ToString() + "ms (" + e1.ToString("HH:mm:ss") + ")"); + + float time_A = grS.GetRouteTime(nodeStart.nodeN, sGraphNodes[start_matrix_element]); + float dist_A = grS.GetRouteDistance(nodeStart.nodeN, sGraphNodes[start_matrix_element]); + float cost_A = grS.GetRouteCost(nodeStart.nodeN, sGraphNodes[start_matrix_element]); + uint[] nodes_A = grS.GetRouteNodes(nodeStart.nodeN, sGraphNodes[start_matrix_element]); + PointF[] points_A = grS.GetRouteVector(nodeStart.nodeN, nodes_A, sGraphNodes[start_matrix_element]); + grS.EndSolve(); + grS.Close(); + /////////////////////// + /////////////////////// + + /////////////////////// + // TO ROUTE + /////////////////////// + s1 = DateTime.Now; + Console.Write(s1.ToString("HH:mm:ss") + " " + eFile + ", çàãðóçêà"); + RMGraph grE = RMGraph.LoadToMemory(path + eFile /*"Smolensk.rt"*/, 14); + + e1 = DateTime.Now; + ts1 = e1.Subtract(s1); + Console.WriteLine(" - " + (ts1.Minutes).ToString() + "m " + ts1.Seconds.ToString() + "s " + ts1.Milliseconds.ToString() + "ms (" + e1.ToString("HH:mm:ss") + ")"); + + Console.Write(DateTime.Now.ToString("HH:mm:ss") + " Áëèæàéøèé óçåë ê " + eLat.ToString() + " " + eLon.ToString() + " - "); + FindStartStopResult nodeEnd = grE.FindNodeEnd((float)eLat, (float)eLon, (float)2000); + Console.WriteLine(nodeEnd.nodeN); + if (nodeEnd.nodeN == 0) throw new Exception("Íå íàéäåíû äîðîãè âáëèçè òî÷êè ôèíèøà"); + + s1 = DateTime.Now; + Console.Write(s1.ToString("HH:mm:ss") + " Ïîèñê ìàðøðóòà [" + eRGNodes[end_matrix_element].ToString() + "] -> "+nodeEnd.nodeN.ToString()); + + grE.BeginSolve(true, null); + grE.MinimizeRouteBy = MinimizeBy.Time; + grE.SolveAstar(eGraphNodes[end_matrix_element], nodeEnd.nodeN); + + e1 = DateTime.Now; + ts1 = e1.Subtract(s1); + Console.WriteLine(" - " + (ts1.Minutes).ToString() + "m " + ts1.Seconds.ToString() + "s " + ts1.Milliseconds.ToString() + "ms (" + e1.ToString("HH:mm:ss") + ")"); + Console.WriteLine(DateTime.Now.ToString("HH:mm:ss") + " Ìàðøðóò ïîñòðîåí"); + + float time_C = grE.GetRouteTime(eGraphNodes[end_matrix_element], nodeEnd.nodeN); + float dist_C = grE.GetRouteDistance(eGraphNodes[end_matrix_element], nodeEnd.nodeN); + float cost_C = grE.GetRouteCost(eGraphNodes[end_matrix_element], nodeEnd.nodeN); + uint[] nodes_C = grE.GetRouteNodes(eGraphNodes[end_matrix_element], nodeEnd.nodeN); + PointF[] points_C = grE.GetRouteVector(eGraphNodes[end_matrix_element], nodes_C, nodeEnd.nodeN); + grE.EndSolve(); + grE.Close(); + /////////////////////// + /////////////////////// + + double time_ttl = time_A + time_B + time_C; + double dist_ttl = dist_A + dist_B + dist_C; + Console.WriteLine("Îáùåå âðåìÿ: " + time_ttl.ToString() + " ìèí"); + Console.WriteLine("Îáùåå ðàññòîÿíèå: " + (dist_ttl / 1000).ToString() + " êì"); + + Console.WriteLine("Press Enter key to continue..."); + ToJS(points_A, points_B.ToArray(), points_C); + } + else + { + /////////////////////// + // IN-ONE-REGION ROUTE + /////////////////////// + DateTime s1 = DateTime.Now; + Console.Write(s1.ToString("HH:mm:ss") + " " + sFile + ", çàãðóçêà"); + RMGraph grE = RMGraph.LoadToMemory(path + sFile, 0); + FindStartStopResult nodeStart = grE.FindNodeEnd((float)sLat, (float)sLon, (float)2000); + FindStartStopResult nodeEnd = grE.FindNodeEnd((float)eLat, (float)eLon, (float)2000); + + DateTime e1 = DateTime.Now; + TimeSpan ts1 = e1.Subtract(s1); + Console.WriteLine(" - " + (ts1.Minutes).ToString() + "m " + ts1.Seconds.ToString() + "s " + ts1.Milliseconds.ToString() + "ms (" + e1.ToString("HH:mm:ss") + ")"); + + s1 = DateTime.Now; + Console.Write(s1.ToString("HH:mm:ss") + " Ïîèñê ìàðøðóòà"); + + grE.BeginSolve(true, null); + grE.MinimizeRouteBy = MinimizeBy.Time; + grE.SolveAstar(nodeStart.nodeN, nodeEnd.nodeN); + + e1 = DateTime.Now; + ts1 = e1.Subtract(s1); + Console.WriteLine(" - " + (ts1.Minutes).ToString() + "m " + ts1.Seconds.ToString() + "s " + ts1.Milliseconds.ToString() + "ms (" + e1.ToString("HH:mm:ss") + ")"); + Console.WriteLine(DateTime.Now.ToString("HH:mm:ss") + " Ìàðøðóò ïîñòðîåí"); + + float time_C = grE.GetRouteTime(nodeStart.nodeN, nodeEnd.nodeN); + float dist_C = grE.GetRouteDistance(nodeStart.nodeN, nodeEnd.nodeN); + float cost_C = grE.GetRouteCost(nodeStart.nodeN, nodeEnd.nodeN); + uint[] nodes_C = grE.GetRouteNodes(nodeStart.nodeN, nodeEnd.nodeN); + PointF[] points_C = grE.GetRouteVector(nodeStart.nodeN, nodes_C, nodeEnd.nodeN); + grE.EndSolve(); + grE.Close(); + /////////////////////// + /////////////////////// + + Console.WriteLine("Îáùåå âðåìÿ: " + time_C.ToString() + " ìèí"); + Console.WriteLine("Îáùåå ðàññòîÿíèå: " + (dist_C / 1000).ToString() + " êì"); + + Console.WriteLine("Press Enter key to continue..."); + ToJS(new PointF[0], new PointFL[0], points_C); + }; + Console.ReadLine(); + } + + private static void ToJS(PointF[] A, PointFL[] B, PointF[] C) + { + string s = ""; + s += "var polyA = new GPolyline([\r\n"; + for (int i = 0; i < A.Length; i++) + s += "new GLatLng(" + A[i].Y.ToString().Replace(",", ".") + ", " + A[i].X.ToString().Replace(",", ".") + ")" + (i < (A.Length - 1) ? "," : "") + "\r\n"; + s += "], \"red\", 5);\r\n"; + s += "map.addOverlay(polyA);\r\n\r\n"; + + s += "var polyB = new GPolyline([\r\n"; + for (int i = 0; i < B.Length; i++) + s += "new GLatLng(" + B[i].Y.ToString().Replace(",", ".") + ", " + B[i].X.ToString().Replace(",", ".") + ")" + (i < (B.Length - 1) ? "," : "") + "\r\n"; + s += "], \"blue\", 5);\r\n"; + s += "map.addOverlay(polyB);\r\n\r\n"; + + s += "var polyC = new GPolyline([\r\n"; + for (int i = 0; i < C.Length; i++) + s += "new GLatLng(" + C[i].Y.ToString().Replace(",", ".") + ", " + C[i].X.ToString().Replace(",", ".") + ")" + (i < (C.Length - 1) ? "," : "") + "\r\n"; + s += "], \"green\", 5);\r\n"; + s += "map.addOverlay(polyC);\r\n\r\n"; + + System.Windows.Forms.Clipboard.SetText(s); + } + } +} diff --git a/SOLVER/RGSolver/obj/Debug/RMXSolver.exe b/SOLVER/RGSolver/obj/Debug/RMXSolver.exe new file mode 100644 index 0000000000000000000000000000000000000000..695f75dd12ca119cf641ddfc47909be55c3f0610 GIT binary patch literal 196608 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.v;F_F>_}A?>J^r`) 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 literal 0 HcmV?d00001 diff --git a/SOLVER/RGSolver/obj/Debug/ResolveAssemblyReference.cache b/SOLVER/RGSolver/obj/Debug/ResolveAssemblyReference.cache new file mode 100644 index 0000000000000000000000000000000000000000..6816b36c766ee183399483a69e92b0f6469da1af GIT binary patch literal 21452 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 literal 0 HcmV?d00001 diff --git a/SOLVER/RGSolver/obj/Release/RMXSolver.exe b/SOLVER/RGSolver/obj/Release/RMXSolver.exe new file mode 100644 index 0000000000000000000000000000000000000000..7854a8356d61402cfdcd849f2be79eaa6295b6f7 GIT binary patch literal 196608 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 + /// Show ReadOnly Box Dialog + /// + /// Dialog Window Title + /// Parameter Prompt Text + /// Parameter Value + /// DialogResult6 + public static DialogResult Show(string title, string promptText, string value) + { + InputBox ib = new InputBox(title, promptText, value); + ib.ReadOnly = true; + DialogResult dr = ib.Show(); + value = ib.Value; + return dr; + } + /// + /// Show ReadOnly Box Dialog with Icon + /// + /// Dialog Window Title + /// Parameter Prompt Text + /// Parameter Value + /// Icon Image + /// DialogResult + public static DialogResult Show(string title, string promptText, string value, Bitmap icon) + { + InputBox ib = new InputBox(title, promptText, value); + ib.ReadOnly = true; + ib.Icon = icon; + DialogResult dr = ib.Show(); + value = ib.Value; + return dr; + } + /// + /// Show Editable Input Box Dialog + /// + /// Dialog Window Title + /// Parameter Prompt Text + /// Parameter Value + /// DialogResult + public static DialogResult Show(string title, string promptText, ref string value) + { + InputBox ib = new InputBox(title, promptText, value); + DialogResult dr = ib.Show(); + value = ib.Value; + return dr; + + } + /// + /// Show Editable Input Box Dialog with Icon + /// + /// Dialog Window Title + /// Parameter Prompt Text + /// Parameter Value + /// Icon Image + /// DialogResult + public static DialogResult Show(string title, string promptText, ref string value, Bitmap icon) + { + InputBox ib = new InputBox(title, promptText, value); + ib.Icon = icon; + DialogResult dr = ib.Show(); + value = ib.Value; + return dr; + + } + /// + /// Show Editable Masked Input Box Dialog + /// + /// Dialog Window Title + /// Parameter Prompt Text + /// Parameter Value + /// Input Mask or Regex for Value + /// If text is Input Mask it starts from M. If text is Regex it starts from R. + /// Input Mask symbols: 0 - digits; 9 - digits and spaces; # - digits, spaces, +, - + /// L - letter; ? - letters if need; A - letter or digit; . - decimal separator; + /// , - space for digits; / - date separator; $ - currency symbol + /// Regex: http://regexstorm.net/reference + /// + /// DialogResult + public static DialogResult Show(string title, string promptText, ref string value, string InputMaskOrRegex) + { + InputBox ib = new InputBox(title, promptText, value); + ib.InputMaskOrRegex = InputMaskOrRegex; + DialogResult dr = ib.Show(); + value = ib.Value; + return dr; + } + /// + /// Show Editable Masked Input Box Dialog with Icon + /// + /// Dialog Window Title + /// Parameter Prompt Text + /// Parameter Value + /// Input Mask or Regex for Value + /// If text is Input Mask it starts from M. If text is Regex it starts from R. + /// Input Mask symbols: 0 - digits; 9 - digits and spaces; # - digits, spaces, +, - + /// L - letter; ? - letters if need; A - letter or digit; . - decimal separator; + /// , - space for digits; / - date separator; $ - currency symbol + /// Regex: http://regexstorm.net/reference + /// + /// Image Icon + /// DialogResult + public static DialogResult Show(string title, string promptText, ref string value, string InputMaskOrRegex, Bitmap icon) + { + InputBox ib = new InputBox(title, promptText, value); + ib.Icon = icon; + DialogResult dr = ib.Show(); + value = ib.Value.ToString(); + return dr; + } + + public static DialogResult QueryText(string title, string promptText, ref string value) + { + InputBox ib = new InputBox(title, promptText, value); + DialogResult dr = ib.ShowMultiline(); + value = ib.Value; + return dr; + } + + public static DialogResult QueryText(string title, string promptText, string value) + { + InputBox ib = new InputBox(title, promptText, value); + ib.ReadOnly = true; + DialogResult dr = ib.ShowMultiline(); + return dr; + } + + public static DialogResult QueryText(string title, string promptText, string value, Bitmap icon) + { + InputBox ib = new InputBox(title, promptText, value); + ib.ReadOnly = true; + ib.Icon = icon; + DialogResult dr = ib.ShowMultiline(); + return dr; + } + + public static DialogResult QueryText(string title, string promptText, ref string value, Bitmap icon) + { + InputBox ib = new InputBox(title, promptText, value); + ib.Icon = icon; + DialogResult dr = ib.ShowMultiline(); + value = ib.Value; + return dr; + } + + public static DialogResult QueryRegexBox(string title, string promptText, string testerText, ref string value) + { + InputBox ib = new InputBox(title, promptText, value); + DialogResult dr = ib.ShowRegex(testerText, false); + value = ib.Value; + return dr; + } + + public static DialogResult QueryRegexBox(string title, string promptText, string testerText, ref string value, Bitmap icon) + { + InputBox ib = new InputBox(title, promptText, value); + ib.Icon = icon; + DialogResult dr = ib.ShowRegex(testerText, false); + value = ib.Value; + return dr; + } + + public static DialogResult QueryRegexBox(string title, string promptText, string testerText, string[] options, ref int selectedValue) + { + InputBox ib = new InputBox(title, promptText, options, selectedValue); + ib.ReadOnly = true; + DialogResult dr = ib.ShowRegex(testerText, false); + selectedValue = ib.SelectedIndex; + return dr; + } + + public static DialogResult QueryRegexBox(string title, string promptText, string testerText, string[] options, ref int selectedValue, Bitmap icon) + { + InputBox ib = new InputBox(title, promptText, options, selectedValue); + ib.ReadOnly = true; + ib.Icon = icon; + DialogResult dr = ib.ShowRegex(testerText, false); + selectedValue = ib.SelectedIndex; + return dr; + } + + public static DialogResult QueryRegexBox(string title, string promptText, string testerText, string[] options, ref string selectedValue) + { + InputBox ib = new InputBox(title, promptText, options); + ib.ReadOnly = true; + ib.Value = selectedValue; + DialogResult dr = ib.ShowRegex(testerText, false); + selectedValue = ib.Value; + return dr; + } + + public static DialogResult QueryRegexBox(string title, string promptText, string testerText, string[] options, ref string selectedValue, Bitmap icon) + { + InputBox ib = new InputBox(title, promptText, options); + ib.ReadOnly = true; + ib.Value = selectedValue; + ib.Icon = icon; + DialogResult dr = ib.ShowRegex(testerText, false); + selectedValue = ib.Value; + return dr; + } + + public static DialogResult QueryRegexBox(string title, string promptText, string testerText, string[] options, ref string selectedValue, bool allowNewValue) + { + InputBox ib = new InputBox(title, promptText, options); + ib.ReadOnly = !allowNewValue; + ib.Value = selectedValue; + DialogResult dr = ib.ShowRegex(testerText, true); + selectedValue = ib.Value; + return dr; + } + + public static DialogResult QueryRegexBox(string title, string promptText, string testerText, string[] options, ref string selectedValue, bool allowNewValue, Bitmap icon) + { + InputBox ib = new InputBox(title, promptText, options); + ib.ReadOnly = !allowNewValue; + ib.Value = selectedValue; + ib.Icon = icon; + DialogResult dr = ib.ShowRegex(testerText, true); + selectedValue = ib.Value; + return dr; + } + + public static DialogResult QueryMultiple(string title, string[] prompts, string[] values, string inputMask, bool readOnly, Bitmap icon) + { + if ((prompts == null) || (values == null) || (prompts.Length == 0) || (values.Length == 0) || (values.Length != prompts.Length)) + return DialogResult.None; + + Form form = new InputBoxForm(); + form.ShowInTaskbar = pShowInTaskBar; + Label[] labels = new Label[prompts.Length]; + MaskedTextBox[] textBoxes = new MaskedTextBox[values.Length]; + Button buttonOk = new Button(); + Button buttonCancel = new Button(); + PictureBox picture = new PictureBox(); + + form.Text = title; + int lRight = 0; + for (int i = 0; i < prompts.Length; i++) + { + labels[i] = new Label(); + labels[i].Text = prompts[i]; + + textBoxes[i] = new MaskedTextBox(); + textBoxes[i].Text = values[i]; + textBoxes[i].SelectionStart = 0; + textBoxes[i].SelectionLength = textBoxes[i].Text.Length; + textBoxes[i].BorderStyle = BorderStyle.FixedSingle; + if (!String.IsNullOrEmpty(inputMask)) + textBoxes[i].Mask = inputMask; + Color bc = textBoxes[i].BackColor; + if (readOnly) textBoxes[i].ReadOnly = true; + textBoxes[i].BackColor = bc; + // textBoxes[i].TextChanged += new EventHandler(MaskOrComboTextChanged); + + labels[i].SetBounds(9, 20 + 40 * i, defWidth - 24, 13); + labels[i].AutoSize = true; + textBoxes[i].SetBounds(12, 36 + 40 * i, defWidth - 24, 20); + textBoxes[i].Anchor = textBoxes[i].Anchor | AnchorStyles.Right; + + if (labels[i].Right > lRight) lRight = labels[i].Right; + }; + + if (icon != null) picture.Image = icon; + picture.SizeMode = PictureBoxSizeMode.StretchImage; + + buttonOk.Text = pOk_Text; + buttonCancel.Text = pCancel_Text; + buttonOk.DialogResult = DialogResult.OK; + buttonCancel.DialogResult = DialogResult.Cancel; + + + buttonOk.SetBounds(defWidth - 168, 32 + 40 * prompts.Length, 75, 23); + buttonCancel.SetBounds(defWidth - 87, 32 + 40 * prompts.Length, 75, 23); + picture.SetBounds(12, 32 + 40 * prompts.Length, 22, 22); + + buttonOk.Anchor = AnchorStyles.Bottom | AnchorStyles.Right; + buttonCancel.Anchor = AnchorStyles.Bottom | AnchorStyles.Right; + + form.ClientSize = new Size(defWidth, 67 + 40 * prompts.Length); + form.Controls.AddRange(labels); + form.Controls.AddRange(textBoxes); + form.Controls.AddRange(new Control[] { buttonOk, buttonCancel, picture }); + form.ClientSize = new Size(Math.Max(defWidth, lRight + 10), form.ClientSize.Height); + form.FormBorderStyle = FormBorderStyle.FixedDialog; + form.StartPosition = FormStartPosition.CenterParent; + form.MinimizeBox = false; + form.MaximizeBox = false; + form.AcceptButton = buttonOk; + form.CancelButton = buttonCancel; + + DialogResult _result = form.ShowDialog(); + for (int i = 0; i < prompts.Length; i++) + values[i] = textBoxes[i].Text; + if (picture.Image != null) picture.Image.Dispose(); + form.Dispose(); + return _result; + } + + public static DialogResult QueryMultiple(string title, string[] prompts, string[] values, string inputMask, bool readOnly, Bitmap icon, MessageBoxButtons buttons, string[] buttonsText) + { + if ((prompts == null) || (values == null) || (prompts.Length == 0) || (values.Length == 0) || (values.Length != prompts.Length)) + return DialogResult.None; + + Form form = new InputBoxForm(); + form.ShowInTaskbar = pShowInTaskBar; + Label[] labels = new Label[prompts.Length]; + MaskedTextBox[] textBoxes = new MaskedTextBox[values.Length]; + int btnCount = 1; + if ((buttons == MessageBoxButtons.OKCancel) || (buttons == MessageBoxButtons.YesNo) || (buttons == MessageBoxButtons.RetryCancel)) btnCount = 2; + if ((buttons == MessageBoxButtons.AbortRetryIgnore) || (buttons == MessageBoxButtons.YesNoCancel)) btnCount = 3; + Button[] Buttons = new Button[btnCount]; + Button buttonCancel = new Button(); + PictureBox picture = new PictureBox(); + + form.Text = title; + int lRight = 0; + for (int i = 0; i < prompts.Length; i++) + { + labels[i] = new Label(); + labels[i].Text = prompts[i]; + + textBoxes[i] = new MaskedTextBox(); + textBoxes[i].Text = values[i]; + textBoxes[i].SelectionStart = 0; + textBoxes[i].SelectionLength = textBoxes[i].Text.Length; + textBoxes[i].BorderStyle = BorderStyle.FixedSingle; + if (!String.IsNullOrEmpty(inputMask)) + textBoxes[i].Mask = inputMask; + Color bc = textBoxes[i].BackColor; + if (readOnly) textBoxes[i].ReadOnly = true; + textBoxes[i].BackColor = bc; + // textBoxes[i].TextChanged += new EventHandler(MaskOrComboTextChanged); + + labels[i].SetBounds(9, 20 + 40 * i, defWidth - 24, 13); + labels[i].AutoSize = true; + textBoxes[i].SetBounds(12, 36 + 40 * i, defWidth - 24, 20); + textBoxes[i].Anchor = textBoxes[i].Anchor | AnchorStyles.Right; + + if (labels[i].Right > lRight) lRight = labels[i].Right; + }; + + if (icon != null) picture.Image = icon; + picture.SizeMode = PictureBoxSizeMode.StretchImage; + + for (int i = 0; i < btnCount; i++) + { + Buttons[i] = new Button(); + Buttons[i].Text = pOk_Text; + if (i == 0) + { + if (buttons == MessageBoxButtons.OK) { Buttons[i].Text = pOk_Text; Buttons[i].DialogResult = DialogResult.OK; }; + if (buttons == MessageBoxButtons.OKCancel) { Buttons[i].Text = pOk_Text; Buttons[i].DialogResult = DialogResult.OK; }; + if (buttons == MessageBoxButtons.AbortRetryIgnore) { Buttons[i].Text = "Abort"; Buttons[i].DialogResult = DialogResult.Abort; }; + if (buttons == MessageBoxButtons.YesNoCancel) { Buttons[i].Text = "Yes"; Buttons[i].DialogResult = DialogResult.Yes; }; + if (buttons == MessageBoxButtons.YesNo) { Buttons[i].Text = "Yes"; Buttons[i].DialogResult = DialogResult.Yes; }; + if (buttons == MessageBoxButtons.RetryCancel) { Buttons[i].Text = "Retry"; Buttons[i].DialogResult = DialogResult.Retry; }; + if ((buttonsText != null) && (buttonsText.Length > 0)) Buttons[i].Text = buttonsText[i]; + }; + if (i == 1) + { + if (buttons == MessageBoxButtons.OKCancel) { Buttons[i].Text = pCancel_Text; Buttons[i].DialogResult = DialogResult.Cancel; }; + if (buttons == MessageBoxButtons.AbortRetryIgnore) { Buttons[i].Text = "Retry"; Buttons[i].DialogResult = DialogResult.Retry; }; + if (buttons == MessageBoxButtons.YesNoCancel) { Buttons[i].Text = "No"; Buttons[i].DialogResult = DialogResult.No; }; + if (buttons == MessageBoxButtons.YesNo) { Buttons[i].Text = "No"; Buttons[i].DialogResult = DialogResult.No; }; + if (buttons == MessageBoxButtons.RetryCancel) { Buttons[i].Text = pCancel_Text; Buttons[i].DialogResult = DialogResult.Cancel; }; + if ((buttonsText != null) && (buttonsText.Length > 1)) Buttons[i].Text = buttonsText[i]; + }; + if (i == 2) + { + if (buttons == MessageBoxButtons.AbortRetryIgnore) { Buttons[i].Text = "Ignore"; Buttons[i].DialogResult = DialogResult.Ignore; }; + if (buttons == MessageBoxButtons.YesNoCancel) { Buttons[i].Text = pCancel_Text; Buttons[i].DialogResult = DialogResult.Cancel; }; + if ((buttonsText != null) && (buttonsText.Length > 2)) Buttons[i].Text = buttonsText[i]; + }; + Buttons[i].SetBounds(defWidth - 87 - 81 * (btnCount - i - 1), 32 + 40 * prompts.Length, 75, 23); + Buttons[i].Anchor = AnchorStyles.Bottom | AnchorStyles.Right; + }; + + buttonCancel.SetBounds(defWidth - 87, 32 + 40 * prompts.Length, 75, 23); + picture.SetBounds(12, 32 + 40 * prompts.Length, 22, 22); + + + form.ClientSize = new Size(defWidth, 67 + 40 * prompts.Length); + form.Controls.AddRange(labels); + form.Controls.AddRange(textBoxes); + form.Controls.AddRange(Buttons); + form.Controls.AddRange(new Control[] {picture }); + form.ClientSize = new Size(Math.Max(defWidth, lRight + 10), form.ClientSize.Height); + form.FormBorderStyle = FormBorderStyle.FixedDialog; + form.StartPosition = FormStartPosition.CenterParent; + form.MinimizeBox = false; + form.MaximizeBox = false; + form.AcceptButton = Buttons[0]; + form.CancelButton = Buttons[btnCount - 1]; + + DialogResult _result = form.ShowDialog(); + for (int i = 0; i < prompts.Length; i++) + values[i] = textBoxes[i].Text; + if (picture.Image != null) picture.Image.Dispose(); + form.Dispose(); + return _result; + } + + public static DialogResult QueryMultiple(string title, string[] prompts, int[] values, bool readOnly, Bitmap icon) + { + return QueryMultiple(title, prompts, values, int.MinValue, int.MaxValue, readOnly, icon); + } + + public static DialogResult QueryMultiple(string title, string[] prompts, int[] values, int minValue, int maxValue, bool readOnly, Bitmap icon) + { + if ((prompts == null) || (values == null) || (prompts.Length == 0) || (values.Length == 0) || (values.Length != prompts.Length)) + return DialogResult.None; + + Form form = new InputBoxForm(); + form.ShowInTaskbar = pShowInTaskBar; + Label[] labels = new Label[prompts.Length]; + NumericUpDown[] textBoxes = new NumericUpDown[values.Length]; + Button buttonOk = new Button(); + Button buttonCancel = new Button(); + PictureBox picture = new PictureBox(); + + form.Text = title; + int lRight = 0; + for (int i = 0; i < prompts.Length; i++) + { + labels[i] = new Label(); + labels[i].Text = prompts[i]; + + textBoxes[i] = new NumericUpDown(); + textBoxes[i].Minimum = minValue; + textBoxes[i].Maximum = maxValue; + textBoxes[i].Value = values[i]; + textBoxes[i].BorderStyle = BorderStyle.FixedSingle; + Color bc = textBoxes[i].BackColor; + if (readOnly) textBoxes[i].ReadOnly = true; + textBoxes[i].BackColor = bc; + + labels[i].SetBounds(9, 20 + 40 * i, defWidth - 24, 13); + labels[i].AutoSize = true; + textBoxes[i].SetBounds(12, 36 + 40 * i, defWidth - 24, 20); + textBoxes[i].Anchor = textBoxes[i].Anchor | AnchorStyles.Right; + + if (labels[i].Right > lRight) lRight = labels[i].Right; + }; + + if (icon != null) picture.Image = icon; + picture.SizeMode = PictureBoxSizeMode.StretchImage; + + buttonOk.Text = pOk_Text; + buttonCancel.Text = pCancel_Text; + buttonOk.DialogResult = DialogResult.OK; + buttonCancel.DialogResult = DialogResult.Cancel; + + + buttonOk.SetBounds(defWidth - 168, 32 + 40 * prompts.Length, 75, 23); + buttonCancel.SetBounds(defWidth - 87, 32 + 40 * prompts.Length, 75, 23); + picture.SetBounds(12, 32 + 40 * prompts.Length, 22, 22); + + buttonOk.Anchor = AnchorStyles.Bottom | AnchorStyles.Right; + buttonCancel.Anchor = AnchorStyles.Bottom | AnchorStyles.Right; + + form.ClientSize = new Size(defWidth, 67 + 40 * prompts.Length); + form.Controls.AddRange(labels); + form.Controls.AddRange(textBoxes); + form.Controls.AddRange(new Control[] { buttonOk, buttonCancel, picture }); + form.ClientSize = new Size(Math.Max(defWidth, lRight + 10), form.ClientSize.Height); + form.FormBorderStyle = FormBorderStyle.FixedDialog; + form.StartPosition = FormStartPosition.CenterParent; + form.MinimizeBox = false; + form.MaximizeBox = false; + form.AcceptButton = buttonOk; + form.CancelButton = buttonCancel; + + DialogResult _result = form.ShowDialog(); + for (int i = 0; i < prompts.Length; i++) + values[i] = (int)textBoxes[i].Value; + if (picture.Image != null) picture.Image.Dispose(); + form.Dispose(); + return _result; + } + + public static DialogResult QueryMultiple(string title, string[] prompts, double[] values, bool readOnly, Bitmap icon) + { + return QueryMultiple(title, prompts, values, double.MinValue, double.MinValue, readOnly, icon); + } + + private static double[] qm_d_mima = new double[] { double.MinValue, double.MaxValue }; + public static DialogResult QueryMultiple(string title, string[] prompts, double[] values, double minValue, double maxValue, bool readOnly, Bitmap icon) + { + if ((prompts == null) || (values == null) || (prompts.Length == 0) || (values.Length == 0) || (values.Length != prompts.Length)) + return DialogResult.None; + + qm_d_mima[0] = minValue; + qm_d_mima[1] = maxValue; + + Form form = new InputBoxForm(); + form.ShowInTaskbar = pShowInTaskBar; + Label[] labels = new Label[prompts.Length]; + MaskedTextBox[] textBoxes = new MaskedTextBox[values.Length]; + Button buttonOk = new Button(); + Button buttonCancel = new Button(); + PictureBox picture = new PictureBox(); + + form.Text = title; + int lRight = 0; + for (int i = 0; i < prompts.Length; i++) + { + labels[i] = new Label(); + labels[i].Text = prompts[i]; + + textBoxes[i] = new MaskedTextBox(); + textBoxes[i].Text = values[i].ToString(System.Globalization.CultureInfo.InvariantCulture); + textBoxes[i].SelectionStart = 0; + textBoxes[i].SelectionLength = textBoxes[i].Text.Length; + textBoxes[i].BorderStyle = BorderStyle.FixedSingle; + Color bc = textBoxes[i].BackColor; + if (readOnly) textBoxes[i].ReadOnly = true; + textBoxes[i].BackColor = bc; + textBoxes[i].Validating += new System.ComponentModel.CancelEventHandler(InputBox_Validating); + + labels[i].SetBounds(9, 20 + 40 * i, defWidth - 24, 13); + labels[i].AutoSize = true; + textBoxes[i].SetBounds(12, 36 + 40 * i, defWidth - 24, 20); + textBoxes[i].Anchor = textBoxes[i].Anchor | AnchorStyles.Right; + + if (labels[i].Right > lRight) lRight = labels[i].Right; + }; + + if (icon != null) picture.Image = icon; + picture.SizeMode = PictureBoxSizeMode.StretchImage; + + buttonOk.Text = pOk_Text; + buttonCancel.Text = pCancel_Text; + buttonOk.DialogResult = DialogResult.OK; + buttonCancel.DialogResult = DialogResult.Cancel; + + + buttonOk.SetBounds(defWidth - 168, 32 + 40 * prompts.Length, 75, 23); + buttonCancel.SetBounds(defWidth - 87, 32 + 40 * prompts.Length, 75, 23); + picture.SetBounds(12, 32 + 40 * prompts.Length, 22, 22); + + buttonOk.Anchor = AnchorStyles.Bottom | AnchorStyles.Right; + buttonCancel.Anchor = AnchorStyles.Bottom | AnchorStyles.Right; + + form.ClientSize = new Size(defWidth, 67 + 40 * prompts.Length); + form.Controls.AddRange(labels); + form.Controls.AddRange(textBoxes); + form.Controls.AddRange(new Control[] { buttonOk, buttonCancel, picture }); + form.ClientSize = new Size(Math.Max(defWidth, lRight + 10), form.ClientSize.Height); + form.FormBorderStyle = FormBorderStyle.FixedDialog; + form.StartPosition = FormStartPosition.CenterParent; + form.MinimizeBox = false; + form.MaximizeBox = false; + form.AcceptButton = buttonOk; + form.CancelButton = buttonCancel; + + DialogResult _result = form.ShowDialog(); + for (int i = 0; i < prompts.Length; i++) + values[i] = double.Parse(textBoxes[i].Text, System.Globalization.CultureInfo.InvariantCulture); + if (picture.Image != null) picture.Image.Dispose(); + form.Dispose(); + return _result; + } + + private static void InputBox_Validating(object sender, System.ComponentModel.CancelEventArgs e) + { + if (sender is MaskedTextBox) + { + double d = 0; + if (double.TryParse((sender as MaskedTextBox).Text, System.Globalization.NumberStyles.Any, System.Globalization.CultureInfo.InvariantCulture, out d)); + if (d < qm_d_mima[0]) d = qm_d_mima[0]; + if (d > qm_d_mima[1]) d = qm_d_mima[1]; + (sender as MaskedTextBox).Text = d.ToString(System.Globalization.CultureInfo.InvariantCulture); + }; + } + + /// + /// Show Editable Input Box Dialog + /// + /// Dialog Window Title + /// Parameter Prompt Text + /// Parameter Value + /// DialogResult + public static DialogResult QueryStringBox(string title, string promptText, ref string value) + { + InputBox ib = new InputBox(title, promptText, value); + DialogResult dr = ib.Show(); + value = ib.Value; + return dr; + } + /// + /// Show Editable Input Box Dialog with Icon + /// + /// Dialog Window Title + /// Parameter Prompt Text + /// Parameter Value + /// Icon Image + /// DialogResult + public static DialogResult QueryStringBox(string title, string promptText, ref string value, Bitmap icon) + { + InputBox ib = new InputBox(title, promptText, value); + ib.Icon = icon; + DialogResult dr = ib.Show(); + value = ib.Value; + return dr; + + } + /// + /// Show Editable Masked Input Box Dialog + /// + /// Dialog Window Title + /// Parameter Prompt Text + /// Parameter Value + /// Input Mask or Regex for Value + /// If text is Input Mask it starts from M. If text is Regex it starts from R. + /// Input Mask symbols: 0 - digits; 9 - digits and spaces; # - digits, spaces, +, - + /// L - letter; ? - letters if need; A - letter or digit; . - decimal separator; + /// , - space for digits; / - date separator; $ - currency symbol + /// Regex: http://regexstorm.net/reference + /// + /// DialogResult + public static DialogResult QueryStringBox(string title, string promptText, ref string value, string InputMaskOrRegex) + { + InputBox ib = new InputBox(title, promptText, value); + ib.InputMaskOrRegex = InputMaskOrRegex; + DialogResult dr = ib.Show(); + value = ib.Value; + return dr; + } + /// + /// Show Editable Masked Input Box Dialog with Icon + /// + /// Dialog Window Title + /// Parameter Prompt Text + /// Parameter Value + /// Input Mask or Regex for Value + /// If text is Input Mask it starts from M. If text is Regex it starts from R. + /// Input Mask symbols: 0 - digits; 9 - digits and spaces; # - digits, spaces, +, - + /// L - letter; ? - letters if need; A - letter or digit; . - decimal separator; + /// , - space for digits; / - date separator; $ - currency symbol + /// Regex: http://regexstorm.net/reference + /// + /// Image Icon + /// DialogResult + public static DialogResult QueryStringBox(string title, string promptText, ref string value, string InputMaskOrRegex, Bitmap icon) + { + InputBox ib = new InputBox(title, promptText, value); + ib.ReadOnly = true; + DialogResult dr = ib.Show(); + value = ib.Value.ToString(); + return dr; + } + + /// + /// Show ReadOnly Box Dialog + /// + /// Dialog Window Title + /// Parameter Prompt Text + /// Parameter Value + /// DialogResult + public static DialogResult Show(string title, string promptText, int value) + { + InputBox ib = new InputBox(title, promptText, value.ToString()); + ib.ReadOnly = true; + DialogResult dr = ib.Show(); + return dr; + + } + /// + /// Show ReadOnly Box Dialog with Icon + /// + /// Dialog Window Title + /// Parameter Prompt Text + /// Parameter Value + /// Image Icon + /// DialogResult + public static DialogResult Show(string title, string promptText, int value, Bitmap icon) + { + InputBox ib = new InputBox(title, promptText, value.ToString()); + ib.Icon = icon; + ib.ReadOnly = true; + DialogResult dr = ib.Show(); + return dr; + + } + /// + /// Show Editable Input Box Dialog + /// + /// Dialog Window Title + /// Parameter Prompt Text + /// Parameter Value + /// DialogResult + public static DialogResult Show(string title, string promptText, ref int value) + { + InputBox ib = new InputBox(title, promptText, value.ToString()); + DialogResult dr = ib.ShowNumericBoxed(ref value, int.MinValue, int.MaxValue); + value = int.Parse(ib.Value); + return dr; + + } + /// + /// Show Editable Input Box Dialog with Icon + /// + /// Dialog Window Title + /// Parameter Prompt Text + /// Parameter Value + /// Image Icon + /// DialogResult + public static DialogResult Show(string title, string promptText, ref int value, Bitmap icon) + { + InputBox ib = new InputBox(title, promptText, value.ToString()); + ib.Icon = icon; + DialogResult dr = ib.ShowNumericBoxed(ref value, int.MinValue, int.MaxValue); + value = int.Parse(ib.Value); + return dr; + + } + /// + /// Show Editable Input Box Dialog + /// + /// Dialog Window Title + /// Parameter Prompt Text + /// Parameter Value + /// Minimum Allowed Value + /// Maximum Allowed Value + /// DialogResult + public static DialogResult Show(string title, string promptText, ref int value, int min, int max) + { + InputBox ib = new InputBox(title, promptText, value.ToString()); + DialogResult dr = ib.ShowNumericBoxed(ref value, min, max); + value = int.Parse(ib.Value); + return dr; + + } + /// + /// Show Editable Input Box Dialog with Icon + /// + /// Dialog Window Title + /// Parameter Prompt Text + /// Parameter Value + /// Minimum Allowed Value + /// Maximum Allowed Value + /// Image Icon + /// DialogResult + public static DialogResult Show(string title, string promptText, ref int value, int min, int max, Bitmap icon) + { + InputBox ib = new InputBox(title, promptText, value.ToString()); + ib.Icon = icon; + DialogResult dr = ib.ShowNumericBoxed(ref value, min, max); + value = int.Parse(ib.Value); + return dr; + + } + + /// + /// Show Editable Input Box Dialog + /// + /// Dialog Window Title + /// Parameter Prompt Text + /// Parameter Value + /// DialogResult + public static DialogResult QueryNumberBox(string title, string promptText, ref int value) + { + InputBox ib = new InputBox(title, promptText, value.ToString()); + DialogResult dr = ib.ShowNumericBoxed(ref value, int.MinValue, int.MaxValue); + value = int.Parse(ib.Value); + return dr; + + } + /// + /// Show Editable Input Box Dialog with Icon + /// + /// Dialog Window Title + /// Parameter Prompt Text + /// Parameter Value + /// Image Icon + /// DialogResult + public static DialogResult QueryNumberBox(string title, string promptText, ref int value, Bitmap icon) + { + InputBox ib = new InputBox(title, promptText, value.ToString()); + ib.Icon = icon; + DialogResult dr = ib.ShowNumericBoxed(ref value, int.MinValue, int.MaxValue); + value = int.Parse(ib.Value); + return dr; + + } + /// + /// Show Editable Input Box Dialog + /// + /// Dialog Window Title + /// Parameter Prompt Text + /// Parameter Value + /// Minimum Allowed Value + /// Maximum Allowed Value + /// DialogResult + public static DialogResult QueryNumberBox(string title, string promptText, ref int value, int min, int max) + { + InputBox ib = new InputBox(title, promptText, value.ToString()); + DialogResult dr = ib.ShowNumericBoxed(ref value, min, max); + value = int.Parse(ib.Value); + return dr; + + } + /// + /// Show Editable Input Box Dialog with Icon + /// + /// Dialog Window Title + /// Parameter Prompt Text + /// Parameter Value + /// Minimum Allowed Value + /// Maximum Allowed Value + /// Image Icon + /// DialogResult + public static DialogResult QueryNumberBox(string title, string promptText, ref int value, int min, int max, Bitmap icon) + { + InputBox ib = new InputBox(title, promptText, value.ToString()); + ib.Icon = icon; + DialogResult dr = ib.ShowNumericBoxed(ref value, min, max); + value = int.Parse(ib.Value); + return dr; + + } + + + /// + /// Show Selectable List Box + /// + /// Dialog Window Title + /// Parameter Prompt Text + /// List Values + /// Selected Value Index + /// DialogResult + public static DialogResult Show(string title, string promptText, string[] values, ref int selectedValue) + { + InputBox ib = new InputBox(title, promptText, values, selectedValue); + ib.ReadOnly = true; + DialogResult dr = ib.Show(); + selectedValue = ib.SelectedIndex; + return dr; + + } + /// + /// Show Selectable List Box with Icon + /// + /// Dialog Window Title + /// Parameter Prompt Text + /// List Values + /// Selected Value Index + /// Image Icon + /// DialogResult + public static DialogResult Show(string title, string promptText, string[] values, ref int selectedValue, Bitmap icon) + { + InputBox ib = new InputBox(title, promptText, values, selectedValue); + ib.ReadOnly = true; + ib.Icon = icon; + DialogResult dr = ib.Show(); + selectedValue = ib.SelectedIndex; + return dr; + + } + /// + /// Show Selectable List Box + /// + /// Dialog Window Title + /// Parameter Prompt Text + /// List Values + /// Selected Value Text + /// DialogResult + public static DialogResult Show(string title, string promptText, string[] values, ref string selectedValue) + { + InputBox ib = new InputBox(title, promptText, values); + ib.ReadOnly = true; + ib.Value = selectedValue; + DialogResult dr = ib.Show(); + selectedValue = ib.Value; + return dr; + + } + /// + /// Show Selectable List Box with Icon + /// + /// Dialog Window Title + /// Parameter Prompt Text + /// List Values + /// Selected Value Text + /// Image Icon + /// DialogResult + public static DialogResult Show(string title, string promptText, string[] values, ref string selectedValue, Bitmap icon) + { + InputBox ib = new InputBox(title, promptText, values); + ib.ReadOnly = true; + ib.Icon = icon; + ib.Value = selectedValue; + DialogResult dr = ib.Show(); + selectedValue = ib.Value; + return dr; + + } + /// + /// Show Changable List Box + /// + /// Dialog Window Title + /// Parameter Prompt Text + /// List Values + /// Selected Value Text + /// Input Mask or Regex for Value + /// If text is Input Mask it starts from M. If text is Regex it starts from R. + /// Input Mask symbols: 0 - digits; 9 - digits and spaces; # - digits, spaces, +, - + /// L - letter; ? - letters if need; A - letter or digit; . - decimal separator; + /// , - space for digits; / - date separator; $ - currency symbol + /// Regex: http://regexstorm.net/reference + /// + /// DialogResult + public static DialogResult Show(string title, string promptText, string[] values, ref string selectedValue, string InputMaskOrRegex) + { + InputBox ib = new InputBox(title, promptText, values); + ib.InputMaskOrRegex = InputMaskOrRegex; + ib.ReadOnly = false; + ib.Value = selectedValue; + DialogResult dr = ib.Show(); + selectedValue = ib.Value; + return dr; + } + /// + /// Show Changable List Box with Icon + /// + /// Dialog Window Title + /// Parameter Prompt Text + /// List Values + /// Selected Value Text + /// Input Mask or Regex for Value + /// If text is Input Mask it starts from M. If text is Regex it starts from R. + /// Input Mask symbols: 0 - digits; 9 - digits and spaces; # - digits, spaces, +, - + /// L - letter; ? - letters if need; A - letter or digit; . - decimal separator; + /// , - space for digits; / - date separator; $ - currency symbol + /// Regex: http://regexstorm.net/reference + /// + /// Image Icon + /// DialogResult + public static DialogResult Show(string title, string promptText, string[] values, ref string selectedValue, string InputMaskOrRegex, Bitmap icon) + { + InputBox ib = new InputBox(title, promptText, values); + ib.InputMaskOrRegex = InputMaskOrRegex; + ib.ReadOnly = false; + ib.Icon = icon; + ib.Value = selectedValue; + DialogResult dr = ib.Show(); + selectedValue = ib.Value; + return dr; + } + /// + /// Show Listable or Changable List + /// + /// Dialog Window Title + /// Parameter Prompt Text + /// List Values + /// Selected Value Text + /// Changable or Editable + /// DialogResult + public static DialogResult Show(string title, string promptText, string[] values, ref string selectedValue, bool allowNewValue) + { + InputBox ib = new InputBox(title, promptText, values); + ib.ReadOnly = !allowNewValue; + ib.Value = selectedValue; + DialogResult dr = ib.Show(); + selectedValue = ib.Value; + return dr; + } + /// + /// Show Listable or Changable List with Icon + /// + /// Dialog Window Title + /// Parameter Prompt Text + /// List Values + /// Selected Value Text + /// Changable or Editable + /// Image Icon + /// DialogResult + public static DialogResult Show(string title, string promptText, string[] values, ref string selectedValue, bool allowNewValue, Bitmap icon) + { + InputBox ib = new InputBox(title, promptText, values); + ib.ReadOnly = !allowNewValue; + ib.Icon = icon; + ib.Value = selectedValue; + DialogResult dr = ib.Show(); + selectedValue = ib.Value; + return dr; + } + + /// + /// Show Selectable List Box + /// + /// Dialog Window Title + /// Parameter Prompt Text + /// List Values + /// Selected Value Index + /// DialogResult + public static DialogResult QueryListBox(string title, string promptText, string[] values, ref int selectedValue) + { + InputBox ib = new InputBox(title, promptText, values, selectedValue); + ib.ReadOnly = true; + DialogResult dr = ib.Show(); + selectedValue = ib.SelectedIndex; + return dr; + + } + /// + /// Show Selectable List Box with Icon + /// + /// Dialog Window Title + /// Parameter Prompt Text + /// List Values + /// Selected Value Index + /// Image Icon + /// DialogResult + public static DialogResult QueryListBox(string title, string promptText, string[] values, ref int selectedValue, Bitmap icon) + { + InputBox ib = new InputBox(title, promptText, values, selectedValue); + ib.ReadOnly = true; + ib.Icon = icon; + DialogResult dr = ib.Show(); + selectedValue = ib.SelectedIndex; + return dr; + + } + /// + /// Show Selectable List Box + /// + /// Dialog Window Title + /// Parameter Prompt Text + /// List Values + /// Selected Value Text + /// DialogResult + public static DialogResult QueryListBox(string title, string promptText, string[] values, ref string selectedValue) + { + InputBox ib = new InputBox(title, promptText, values); + ib.ReadOnly = true; + ib.Value = selectedValue; + DialogResult dr = ib.Show(); + selectedValue = ib.Value; + return dr; + + } + /// + /// Show Selectable List Box with Icon + /// + /// Dialog Window Title + /// Parameter Prompt Text + /// List Values + /// Selected Value Text + /// Image Icon + /// DialogResult + public static DialogResult QueryListBox(string title, string promptText, string[] values, ref string selectedValue, Bitmap icon) + { + InputBox ib = new InputBox(title, promptText, values); + ib.ReadOnly = true; + ib.Icon = icon; + ib.Value = selectedValue; + DialogResult dr = ib.Show(); + selectedValue = ib.Value; + return dr; + + } + /// + /// Show Changable List Box + /// + /// Dialog Window Title + /// Parameter Prompt Text + /// List Values + /// Selected Value Text + /// Input Mask or Regex for Value + /// If text is Input Mask it starts from M. If text is Regex it starts from R. + /// Input Mask symbols: 0 - digits; 9 - digits and spaces; # - digits, spaces, +, - + /// L - letter; ? - letters if need; A - letter or digit; . - decimal separator; + /// , - space for digits; / - date separator; $ - currency symbol + /// Regex: http://regexstorm.net/reference + /// + /// DialogResult + public static DialogResult QueryListBox(string title, string promptText, string[] values, ref string selectedValue, string InputMaskOrRegex) + { + InputBox ib = new InputBox(title, promptText, values); + ib.InputMaskOrRegex = InputMaskOrRegex; + ib.ReadOnly = false; + ib.Value = selectedValue; + DialogResult dr = ib.Show(); + selectedValue = ib.Value; + return dr; + } + /// + /// Show Changable List Box with Icon + /// + /// Dialog Window Title + /// Parameter Prompt Text + /// List Values + /// Selected Value Text + /// Input Mask or Regex for Value + /// If text is Input Mask it starts from M. If text is Regex it starts from R. + /// Input Mask symbols: 0 - digits; 9 - digits and spaces; # - digits, spaces, +, - + /// L - letter; ? - letters if need; A - letter or digit; . - decimal separator; + /// , - space for digits; / - date separator; $ - currency symbol + /// Regex: http://regexstorm.net/reference + /// + /// Image Icon + /// DialogResult + public static DialogResult QueryListBox(string title, string promptText, string[] values, ref string selectedValue, string InputMaskOrRegex, Bitmap icon) + { + InputBox ib = new InputBox(title, promptText, values); + ib.InputMaskOrRegex = InputMaskOrRegex; + ib.ReadOnly = false; + ib.Icon = icon; + ib.Value = selectedValue; + DialogResult dr = ib.Show(); + selectedValue = ib.Value; + return dr; + } + /// + /// Show Listable or Changable List + /// + /// Dialog Window Title + /// Parameter Prompt Text + /// List Values + /// Selected Value Text + /// Changable or Editable + /// DialogResult + public static DialogResult QueryListBox(string title, string promptText, string[] values, ref string selectedValue, bool allowNewValue) + { + InputBox ib = new InputBox(title, promptText, values); + ib.ReadOnly = !allowNewValue; + ib.Value = selectedValue; + DialogResult dr = ib.Show(); + selectedValue = ib.Value; + return dr; + } + /// + /// Show Listable or Changable List with Icon + /// + /// Dialog Window Title + /// Parameter Prompt Text + /// List Values + /// Selected Value Text + /// Changable or Editable + /// Image Icon + /// DialogResult + public static DialogResult QueryListBox(string title, string promptText, string[] values, ref string selectedValue, bool allowNewValue, Bitmap icon) + { + InputBox ib = new InputBox(title, promptText, values); + ib.ReadOnly = !allowNewValue; + ib.Icon = icon; + ib.Value = selectedValue; + DialogResult dr = ib.Show(); + selectedValue = ib.Value; + return dr; + } + + /// + /// Show Two-List DropBox + /// + /// Dialog Window Title + /// Parameter Prompt Text + /// boolean value + /// Text for False Value + /// Text for True Value + /// DialogResult + public static DialogResult Show(string title, string promptText, ref bool value, string textFalse, string textTrue) + { + InputBox ib = new InputBox(title, promptText, new string[]{ textFalse, textTrue }, value ? 1 : 0); + ib.ReadOnly = true; + DialogResult dr = ib.Show(); + value = ib.SelectedIndex == 1; + return dr; + } + /// + /// Show Two-List DropBox with Icon + /// + /// Dialog Window Title + /// Parameter Prompt Text + /// boolean value + /// Text for False Value + /// Text for True Value + /// Image Icon + /// DialogResult + public static DialogResult Show(string title, string promptText, ref bool value, string textFalse, string textTrue, Bitmap icon) + { + InputBox ib = new InputBox(title, promptText, new string[] { textFalse, textTrue }, value ? 1 : 0); + ib.Icon = icon; + ib.ReadOnly = true; + DialogResult dr = ib.Show(); + value = ib.SelectedIndex == 1; + return dr; + } + + /// + /// Show ReadOnly Box Dialog + /// + /// Dialog Window Title + /// Parameter Prompt Text + /// Parameter Value + /// DialogResult + public static DialogResult Show(string title, string promptText, float value) + { + InputBox ib = new InputBox(title, promptText, value.ToString(System.Globalization.CultureInfo.InvariantCulture)); + ib.ReadOnly = true; + DialogResult dr = ib.Show(); + return dr; + + } + /// + /// Show ReadOnly Box Dialog with Icon + /// + /// Dialog Window Title + /// Parameter Prompt Text + /// Parameter Value + /// Image Icon + /// DialogResult + public static DialogResult Show(string title, string promptText, float value, Bitmap icon) + { + InputBox ib = new InputBox(title, promptText, value.ToString(System.Globalization.CultureInfo.InvariantCulture)); + ib.Icon = icon; + ib.ReadOnly = true; + DialogResult dr = ib.Show(); + return dr; + + } + /// + /// Show Editable Input Box Dialog + /// + /// Dialog Window Title + /// Parameter Prompt Text + /// Parameter Value + /// DialogResult + public static DialogResult Show(string title, string promptText, ref float value) + { + InputBox ib = new InputBox(title, promptText, value.ToString(System.Globalization.CultureInfo.InvariantCulture)); + ib.InputMaskOrRegex = "^(([+-]?)|([+-]?[0-9]{1,}[.]?[0-9]{0,})|([+-]?[.][0-9]{0,}))$"; + DialogResult dr = ib.Show(); + if ((ib.Value == "-") || (ib.Value == ".")) + value = 0; + else + value = float.Parse(ib.Value, System.Globalization.CultureInfo.InvariantCulture); + return dr; + + } + /// + /// Show Editable Input Box Dialog with Icon + /// + /// Dialog Window Title + /// Parameter Prompt Text + /// Parameter Value + /// Image Icon + /// DialogResult + public static DialogResult Show(string title, string promptText, ref float value, Bitmap icon) + { + InputBox ib = new InputBox(title, promptText, value.ToString(System.Globalization.CultureInfo.InvariantCulture)); + ib.InputMaskOrRegex = "^(([+-]?)|([+-]?[0-9]{1,}[.]?[0-9]{0,})|([+-]?[.][0-9]{0,}))$"; + ib.Icon = icon; + DialogResult dr = ib.Show(); + if ((ib.Value == "-") || (ib.Value == ".")) + value = 0; + else + value = float.Parse(ib.Value, System.Globalization.CultureInfo.InvariantCulture); + return dr; + } + + /// + /// Show ReadOnly Box Dialog + /// + /// Dialog Window Title + /// Parameter Prompt Text + /// Parameter Value + /// DialogResult + public static DialogResult QueryNumberBox(string title, string promptText, float value) + { + InputBox ib = new InputBox(title, promptText, value.ToString(System.Globalization.CultureInfo.InvariantCulture)); + ib.ReadOnly = true; + DialogResult dr = ib.Show(); + return dr; + + } + /// + /// Show ReadOnly Box Dialog with Icon + /// + /// Dialog Window Title + /// Parameter Prompt Text + /// Parameter Value + /// Image Icon + /// DialogResult + public static DialogResult QueryNumberBox(string title, string promptText, float value, Bitmap icon) + { + InputBox ib = new InputBox(title, promptText, value.ToString(System.Globalization.CultureInfo.InvariantCulture)); + ib.Icon = icon; + ib.ReadOnly = true; + DialogResult dr = ib.Show(); + return dr; + + } + /// + /// Show Editable Input Box Dialog + /// + /// Dialog Window Title + /// Parameter Prompt Text + /// Parameter Value + /// DialogResult + public static DialogResult QueryNumberBox(string title, string promptText, ref float value) + { + InputBox ib = new InputBox(title, promptText, value.ToString(System.Globalization.CultureInfo.InvariantCulture)); + ib.InputMaskOrRegex = "^(([+-]?)|([+-]?[0-9]{1,}[.]?[0-9]{0,})|([+-]?[.][0-9]{0,}))$"; + DialogResult dr = ib.Show(); + if ((ib.Value == "-") || (ib.Value == ".")) + value = 0; + else + value = float.Parse(ib.Value, System.Globalization.CultureInfo.InvariantCulture); + return dr; + + } + /// + /// Show Editable Input Box Dialog with Icon + /// + /// Dialog Window Title + /// Parameter Prompt Text + /// Parameter Value + /// Image Icon + /// DialogResult + public static DialogResult QueryNumberBox(string title, string promptText, ref float value, Bitmap icon) + { + InputBox ib = new InputBox(title, promptText, value.ToString(System.Globalization.CultureInfo.InvariantCulture)); + ib.InputMaskOrRegex = "^(([+-]?)|([+-]?[0-9]{1,}[.]?[0-9]{0,})|([+-]?[.][0-9]{0,}))$"; + ib.Icon = icon; + DialogResult dr = ib.Show(); + if ((ib.Value == "-") || (ib.Value == ".")) + value = 0; + else + value = float.Parse(ib.Value, System.Globalization.CultureInfo.InvariantCulture); + return dr; + } + + /// + /// Show ReadOnly Box Dialog + /// + /// Dialog Window Title + /// Parameter Prompt Text + /// Parameter Value + /// DialogResult + public static DialogResult Show(string title, string promptText, double value) + { + InputBox ib = new InputBox(title, promptText, value.ToString(System.Globalization.CultureInfo.InvariantCulture)); + ib.ReadOnly = true; + DialogResult dr = ib.Show(); + return dr; + + } + /// + /// Show ReadOnly Box Dialog with Icon + /// + /// Dialog Window Title + /// Parameter Prompt Text + /// Parameter Value + /// Image Icon + /// DialogResult + public static DialogResult Show(string title, string promptText, double value, Bitmap icon) + { + InputBox ib = new InputBox(title, promptText, value.ToString(System.Globalization.CultureInfo.InvariantCulture)); + ib.Icon = icon; + ib.ReadOnly = true; + DialogResult dr = ib.Show(); + return dr; + + } + /// + /// Show Editable Input Box Dialog + /// + /// Dialog Window Title + /// Parameter Prompt Text + /// Parameter Value + /// DialogResult + public static DialogResult Show(string title, string promptText, ref double value) + { + InputBox ib = new InputBox(title, promptText, value.ToString(System.Globalization.CultureInfo.InvariantCulture)); + ib.InputMaskOrRegex = "^(([+-]?)|([+-]?[0-9]{1,}[.]?[0-9]{0,})|([+-]?[.][0-9]{0,}))$"; + DialogResult dr = ib.Show(); + if ((ib.Value == "-") || (ib.Value == ".")) + value = 0; + else + value = double.Parse(ib.Value, System.Globalization.CultureInfo.InvariantCulture); + return dr; + + } + /// + /// Show Editable Input Box Dialog with Icon + /// + /// Dialog Window Title + /// Parameter Prompt Text + /// Parameter Value + /// Image Icon + /// DialogResult + public static DialogResult Show(string title, string promptText, ref double value, Bitmap icon) + { + InputBox ib = new InputBox(title, promptText, value.ToString(System.Globalization.CultureInfo.InvariantCulture)); + ib.InputMaskOrRegex = "^(([+-]?)|([+-]?[0-9]{1,}[.]?[0-9]{0,})|([+-]?[.][0-9]{0,}))$"; + ib.Icon = icon; + DialogResult dr = ib.Show(); + if ((ib.Value == "-") || (ib.Value == ".")) + value = 0; + else + value = double.Parse(ib.Value, System.Globalization.CultureInfo.InvariantCulture); + return dr; + } + + /// + /// Show ReadOnly Box Dialog + /// + /// Dialog Window Title + /// Parameter Prompt Text + /// Parameter Value + /// DialogResult + public static DialogResult QueryNumberBox(string title, string promptText, double value) + { + InputBox ib = new InputBox(title, promptText, value.ToString(System.Globalization.CultureInfo.InvariantCulture)); + ib.ReadOnly = true; + DialogResult dr = ib.Show(); + return dr; + + } + /// + /// Show ReadOnly Box Dialog with Icon + /// + /// Dialog Window Title + /// Parameter Prompt Text + /// Parameter Value + /// Image Icon + /// DialogResult + public static DialogResult QueryNumberBox(string title, string promptText, double value, Bitmap icon) + { + InputBox ib = new InputBox(title, promptText, value.ToString(System.Globalization.CultureInfo.InvariantCulture)); + ib.Icon = icon; + ib.ReadOnly = true; + DialogResult dr = ib.Show(); + return dr; + + } + /// + /// Show Editable Input Box Dialog + /// + /// Dialog Window Title + /// Parameter Prompt Text + /// Parameter Value + /// DialogResult + public static DialogResult QueryNumberBox(string title, string promptText, ref double value) + { + InputBox ib = new InputBox(title, promptText, value.ToString(System.Globalization.CultureInfo.InvariantCulture)); + ib.InputMaskOrRegex = "^(([+-]?)|([+-]?[0-9]{1,}[.]?[0-9]{0,})|([+-]?[.][0-9]{0,}))$"; + DialogResult dr = ib.Show(); + if ((ib.Value == "-") || (ib.Value == ".")) + value = 0; + else + value = double.Parse(ib.Value, System.Globalization.CultureInfo.InvariantCulture); + return dr; + + } + /// + /// Show Editable Input Box Dialog with Icon + /// + /// Dialog Window Title + /// Parameter Prompt Text + /// Parameter Value + /// Image Icon + /// DialogResult + public static DialogResult QueryNumberBox(string title, string promptText, ref double value, Bitmap icon) + { + InputBox ib = new InputBox(title, promptText, value.ToString(System.Globalization.CultureInfo.InvariantCulture)); + ib.InputMaskOrRegex = "^(([+-]?)|([+-]?[0-9]{1,}[.]?[0-9]{0,})|([+-]?[.][0-9]{0,}))$"; + ib.Icon = icon; + DialogResult dr = ib.Show(); + if ((ib.Value == "-") || (ib.Value == ".")) + value = 0; + else + value = double.Parse(ib.Value, System.Globalization.CultureInfo.InvariantCulture); + return dr; + } + + /// + /// Show Listable Input Box Dialog for typeof(Enum) + /// + /// Dialog Window Title + /// Parameter Prompt Text + /// Type of Enum + /// Selected Value + /// DialogResult + public static DialogResult Show(string title, string promptText, Type enumType, ref object selectedValue) + { + Array vls = Enum.GetValues((enumType)); + + List vals = new List(); + foreach (string element in Enum.GetNames(enumType)) + vals.Add(element); + + InputBox ib = new InputBox(title, promptText, vals.ToArray()); + ib.Value = selectedValue.ToString(); + ib.ReadOnly = true; + DialogResult dr = ib.Show(); + selectedValue = vls.GetValue(ib.SelectedIndex); + return dr; + } + /// + /// Show Listable Input Box Dialog for typeof(Enum) + /// + /// Dialog Window Title + /// Parameter Prompt Text + /// Type of Enum + /// Selected Value + /// /// Image Icon + /// DialogResult + public static DialogResult Show(string title, string promptText, Type enumType, ref object selectedValue, Bitmap icon) + { + Array vls = Enum.GetValues((enumType)); + + List vals = new List(); + foreach (string element in Enum.GetNames(enumType)) + vals.Add(element); + + InputBox ib = new InputBox(title, promptText, vals.ToArray()); + ib.Icon = icon; + ib.Value = selectedValue.ToString(); + ib.ReadOnly = true; + DialogResult dr = ib.Show(); + selectedValue = vls.GetValue(ib.SelectedIndex); + return dr; + } + + /// + /// Show Editable Directory Input Box With Browse Button + /// + /// Dialog Window Title + /// Parameter Prompt Text + /// DIrectory + /// DialogResult + public static DialogResult QueryDirectoryBox(string title, string promptText, ref string path) + { + InputBox ib = new InputBox(title, promptText, path); + DialogResult dr = ib.ShowSelectDir(); + path = ib.Value; + return dr; + } + /// + /// Show Editable Directory Input Box With Browse Button + /// + /// Dialog Window Title + /// Parameter Prompt Text + /// DIrectory + /// Image Icon + /// DialogResult + public static DialogResult QueryDirectoryBox(string title, string promptText, ref string path, Bitmap icon) + { + InputBox ib = new InputBox(title, promptText, path); + ib.Icon = icon; + DialogResult dr = ib.ShowSelectDir(); + path = ib.Value; + return dr; + } + + /// + /// Show Editable File Input Box + /// + /// Dialog Window Title + /// Parameter Prompt Text + /// File Path + /// OpenFileDialog Filter + /// DialogResult + public static DialogResult QueryFileBox(string title, string promptText, ref string file, string filter) + { + InputBox ib = new InputBox(title, promptText, file); + DialogResult dr = ib.ShowSelectFile(filter); + file = ib.Value; + return dr; + } + + /// + /// Show Editable File Input Box with Icon + /// + /// Dialog Window Title + /// Parameter Prompt Text + /// File Path + /// OpenFileDialog Filter + /// Image Icon + /// DialogResult + public static DialogResult QueryFileBox(string title, string promptText, ref string file, string filter, Bitmap icon) + { + InputBox ib = new InputBox(title, promptText, file); + DialogResult dr = ib.ShowSelectFile(filter); + file = ib.Value; + return dr; + } + + /// + /// Show Editable Color Box + /// + /// Dialog Window Title + /// Parameter Prompt Text + /// Color + /// DialogResult + public static DialogResult QueryColorBox(string title, string promptText, ref Color color) + { + InputBox ib = new InputBox(title, promptText); + DialogResult dr = ib.ShowSelectColor(ref color); + return dr; + } + + private static String HexConverter(Color c) + { + return "#" + c.R.ToString("X2") + c.G.ToString("X2") + c.B.ToString("X2"); + } + + private static Color RGBConverter(string hex) + { + Color rtn = Color.Black; + try + { + return Color.FromArgb( + int.Parse(hex.Substring(1, 2), System.Globalization.NumberStyles.HexNumber), + int.Parse(hex.Substring(3, 2), System.Globalization.NumberStyles.HexNumber), + int.Parse(hex.Substring(5, 2), System.Globalization.NumberStyles.HexNumber)); + } + catch { }; + + return rtn; + } + + private static TextBox query_info_box = null; + private static Label query_info_btm = null; + private static EventBtnHandler query_info_evn = null; + public delegate void EventBtnHandler(object sender, ref string infoText, ref string bottomText, ref bool close); + public static DialogResult QueryInfoBox(string title, string topText, string bottomText, string mainText) + { + return QueryInfoBox(title, topText, bottomText, mainText, true, false, MessageBoxButtons.OK, true); + } + public static DialogResult QueryInfoBox(string title, string topText, string bottomText, string mainText, bool readOnly, bool allowNewLoadSave, MessageBoxButtons buttons, bool closeButton) + { + Form form = closeButton ? new Form() : new InputBoxForm(); + form.DialogResult = DialogResult.Cancel; + form.ShowInTaskbar = pShowInTaskBar; + form.Text = title; + form.ClientSize = new Size(defWidth, 107); + form.FormBorderStyle = FormBorderStyle.FixedDialog; + form.StartPosition = FormStartPosition.CenterParent; + form.MinimizeBox = false; + form.MaximizeBox = false; + form.ClientSize = new Size(500, 400); + + Panel panel1 = new Panel(); + Label label1 = new Label(); + Panel panel2 = new Panel(); + Label label2 = new Label(); + Panel panel3 = new Panel(); + Panel panel4 = new Panel(); + TextBox textBox1 = new TextBox(); + Panel panel5 = new Panel(); + Panel panel6 = new Panel(); + Button button4 = new Button(); + Button button3 = new Button(); + Button button5 = new Button(); + + int btnCount = 1; + if ((buttons == MessageBoxButtons.OKCancel) || (buttons == MessageBoxButtons.YesNo) || (buttons == MessageBoxButtons.RetryCancel)) btnCount = 2; + if ((buttons == MessageBoxButtons.AbortRetryIgnore) || (buttons == MessageBoxButtons.YesNoCancel)) btnCount = 3; + Button[] Buttons = new Button[btnCount]; + for (int i = 0; i < btnCount; i++) + { + Buttons[i] = new Button(); + Buttons[i].Text = pOk_Text; + if (i == 0) + { + if (buttons == MessageBoxButtons.OK) { Buttons[i].Text = pOk_Text; Buttons[i].DialogResult = DialogResult.OK; }; + if (buttons == MessageBoxButtons.OKCancel) { Buttons[i].Text = pOk_Text; Buttons[i].DialogResult = DialogResult.OK; }; + if (buttons == MessageBoxButtons.AbortRetryIgnore) { Buttons[i].Text = pOk_Abort; Buttons[i].DialogResult = DialogResult.Abort; }; + if (buttons == MessageBoxButtons.YesNoCancel) { Buttons[i].Text = pOk_Yes; Buttons[i].DialogResult = DialogResult.Yes; }; + if (buttons == MessageBoxButtons.YesNo) { Buttons[i].Text = pOk_Yes; Buttons[i].DialogResult = DialogResult.Yes; }; + if (buttons == MessageBoxButtons.RetryCancel) { Buttons[i].Text = pOk_Retry; Buttons[i].DialogResult = DialogResult.Retry; }; + }; + if (i == 1) + { + if (buttons == MessageBoxButtons.OKCancel) { Buttons[i].Text = pCancel_Text; Buttons[i].DialogResult = DialogResult.Cancel; }; + if (buttons == MessageBoxButtons.AbortRetryIgnore) { Buttons[i].Text = pOk_Retry; Buttons[i].DialogResult = DialogResult.Retry; }; + if (buttons == MessageBoxButtons.YesNoCancel) { Buttons[i].Text = pOk_No; Buttons[i].DialogResult = DialogResult.No; }; + if (buttons == MessageBoxButtons.YesNo) { Buttons[i].Text = pOk_No; Buttons[i].DialogResult = DialogResult.No; }; + if (buttons == MessageBoxButtons.RetryCancel) { Buttons[i].Text = pCancel_Text; Buttons[i].DialogResult = DialogResult.Cancel; }; + }; + if (i == 2) + { + if (buttons == MessageBoxButtons.AbortRetryIgnore) { Buttons[i].Text = pOk_Ignore; Buttons[i].DialogResult = DialogResult.Ignore; }; + if (buttons == MessageBoxButtons.YesNoCancel) { Buttons[i].Text = pCancel_Text; Buttons[i].DialogResult = DialogResult.Cancel; }; + }; + Buttons[i].BackColor = System.Drawing.SystemColors.Control; + Buttons[i].Location = new System.Drawing.Point(9 + 81 * i, 10); + Buttons[i].Size = new System.Drawing.Size(75, 23); + }; + panel3.Controls.AddRange(Buttons); + + panel1.BackColor = System.Drawing.SystemColors.Window; + panel1.Controls.Add(label1); + panel1.Dock = System.Windows.Forms.DockStyle.Top; + panel1.Location = new System.Drawing.Point(0, 0); + panel1.Size = new System.Drawing.Size(578, 45); + label1.AutoSize = true; + label1.Location = new System.Drawing.Point(12, 14); + label1.Size = new System.Drawing.Size(174, 26); + label1.Text = topText; + panel2.BackColor = System.Drawing.SystemColors.Window; + panel2.Controls.Add(label2); + panel2.Controls.Add(panel3); + panel2.Dock = System.Windows.Forms.DockStyle.Bottom; + panel2.Location = new System.Drawing.Point(0, 432); + panel2.Size = new System.Drawing.Size(578, 45); + panel3.Dock = System.Windows.Forms.DockStyle.Right; + panel3.Location = new System.Drawing.Point(400, 0); + panel3.Size = new System.Drawing.Size(34 + 81 * btnCount, 45); + label2.AutoSize = true; + label2.Location = new System.Drawing.Point(12, 16); + label2.Size = new System.Drawing.Size(12, 13); + label2.Text = bottomText; + panel4.Controls.Add(textBox1); + panel4.Controls.Add(panel6); + panel4.Controls.Add(panel5); + panel4.Dock = System.Windows.Forms.DockStyle.Fill; + panel4.Location = new System.Drawing.Point(0, 135); + panel4.Size = new System.Drawing.Size(578, 297); + panel5.BackColor = System.Drawing.SystemColors.Window; + panel5.Dock = System.Windows.Forms.DockStyle.Left; + panel5.Location = new System.Drawing.Point(0, 0); + panel5.Size = new System.Drawing.Size(34, 297); + textBox1.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + textBox1.Dock = System.Windows.Forms.DockStyle.Fill; + textBox1.Location = new System.Drawing.Point(34, 0); + textBox1.Multiline = true; + textBox1.ScrollBars = System.Windows.Forms.ScrollBars.Both; + textBox1.Size = new System.Drawing.Size(510, 297); + textBox1.Text = mainText; + textBox1.SelectionStart = 0; + Color bc = textBox1.BackColor; + textBox1.ReadOnly = readOnly; + textBox1.BackColor = bc; + panel6.BackColor = System.Drawing.SystemColors.Window; + panel6.Controls.Add(button5); + panel6.Controls.Add(button4); + panel6.Controls.Add(button3); + panel6.Dock = System.Windows.Forms.DockStyle.Right; + panel6.Location = new System.Drawing.Point(544, 0); + panel6.Size = new System.Drawing.Size(34, 297); + button4.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + button4.Location = new System.Drawing.Point(6, 54); + button4.Size = new System.Drawing.Size(22, 23); + button4.Text = "S"; + button3.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + button3.Location = new System.Drawing.Point(6, 30); + button3.Size = new System.Drawing.Size(22, 23); + button3.Text = readOnly ? "" : "L"; + button5.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + button5.Location = new System.Drawing.Point(6, 6); + button5.Size = new System.Drawing.Size(22, 23); + button5.TabIndex = 3; + button5.Text = readOnly ? "" : "N"; + if (!readOnly) + { + button3.Click += new EventHandler(buttonLNS_Click); + button4.Click += new EventHandler(buttonLNS_Click); + button5.Click += new EventHandler(buttonLNS_Click); + }; + form.Controls.Add(panel4); + form.Controls.Add(panel1); + form.Controls.Add(panel2); + form.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent; + + { + //button1.Text = fullview ? pCancel_Text : pOk_Text; + //button2.Visible = fullview; + button3.Visible = allowNewLoadSave; + button4.Visible = allowNewLoadSave; + button5.Visible = allowNewLoadSave; + + button3.Enabled = !readOnly; + button4.Enabled = !String.IsNullOrEmpty(mainText); + button5.Enabled = !readOnly; + }; + + query_info_box = textBox1; + query_info_btm = label2; + DialogResult dr = form.ShowDialog(); + query_info_box = null; + query_info_btm = null; + form.Dispose(); + return dr; + } + public static DialogResult QueryInfoBox(string title, string topText, string bottomText, ref string mainText) + { + return QueryInfoBox(title, topText, bottomText, ref mainText, true, false, MessageBoxButtons.OK, true); + } + public static DialogResult QueryInfoBox(string title, string topText, string bottomText, ref string mainText, bool readOnly, bool allowNewLoadSave, MessageBoxButtons buttons, bool closeButton) + { + return QueryInfoBox(title, topText, bottomText, ref mainText, true, false, MessageBoxButtons.OK, true, null, null); + } + public static DialogResult QueryInfoBox(string title, string topText, string bottomText, ref string mainText, bool readOnly, bool allowNewLoadSave, MessageBoxButtons buttons, bool closeButton, string[] buttonsText, EventBtnHandler onclick) + { + Form form = closeButton ? new Form() : new InputBoxForm(); + form.DialogResult = DialogResult.Cancel; + form.ShowInTaskbar = pShowInTaskBar; + form.Text = title; + form.ClientSize = new Size(defWidth, 107); + form.FormBorderStyle = FormBorderStyle.FixedDialog; + form.StartPosition = FormStartPosition.CenterParent; + form.MinimizeBox = false; + form.MaximizeBox = false; + form.ClientSize = new Size(500, 400); + + Panel panel1 = new Panel(); + Label label1 = new Label(); + Panel panel2 = new Panel(); + Label label2 = new Label(); + Panel panel3 = new Panel(); + Panel panel4 = new Panel(); + TextBox textBox1 = new TextBox(); + Panel panel5 = new Panel(); + Panel panel6 = new Panel(); + Button button4 = new Button(); + Button button3 = new Button(); + Button button5 = new Button(); + + int btnCount = 1; + if ((buttons == MessageBoxButtons.OKCancel) || (buttons == MessageBoxButtons.YesNo) || (buttons == MessageBoxButtons.RetryCancel)) btnCount = 2; + if ((buttons == MessageBoxButtons.AbortRetryIgnore) || (buttons == MessageBoxButtons.YesNoCancel)) btnCount = 3; + Button[] Buttons = new Button[btnCount]; + for (int i = 0; i < btnCount; i++) + { + Buttons[i] = new Button(); + Buttons[i].Text = pOk_Text; + if (i == 0) + { + if (buttons == MessageBoxButtons.OK) { Buttons[i].Text = pOk_Text; Buttons[i].DialogResult = DialogResult.OK; }; + if (buttons == MessageBoxButtons.OKCancel) { Buttons[i].Text = pOk_Text; Buttons[i].DialogResult = DialogResult.OK; }; + if (buttons == MessageBoxButtons.AbortRetryIgnore) { Buttons[i].Text = pOk_Abort; Buttons[i].DialogResult = DialogResult.Abort; }; + if (buttons == MessageBoxButtons.YesNoCancel) { Buttons[i].Text = pOk_Yes; Buttons[i].DialogResult = DialogResult.Yes; }; + if (buttons == MessageBoxButtons.YesNo) { Buttons[i].Text = pOk_Yes; Buttons[i].DialogResult = DialogResult.Yes; }; + if (buttons == MessageBoxButtons.RetryCancel) { Buttons[i].Text = pOk_Retry; Buttons[i].DialogResult = DialogResult.Retry; }; + if ((buttonsText != null) && (buttonsText.Length > 0)) Buttons[i].Text = buttonsText[0]; + }; + if (i == 1) + { + if (buttons == MessageBoxButtons.OKCancel) { Buttons[i].Text = pCancel_Text; Buttons[i].DialogResult = DialogResult.Cancel; }; + if (buttons == MessageBoxButtons.AbortRetryIgnore) { Buttons[i].Text = pOk_Retry; Buttons[i].DialogResult = DialogResult.Retry; }; + if (buttons == MessageBoxButtons.YesNoCancel) { Buttons[i].Text = pOk_No; Buttons[i].DialogResult = DialogResult.No; }; + if (buttons == MessageBoxButtons.YesNo) { Buttons[i].Text = pOk_No; Buttons[i].DialogResult = DialogResult.No; }; + if (buttons == MessageBoxButtons.RetryCancel) { Buttons[i].Text = pCancel_Text; Buttons[i].DialogResult = DialogResult.Cancel; }; + if ((buttonsText != null) && (buttonsText.Length > 1)) Buttons[i].Text = buttonsText[1]; + }; + if (i == 2) + { + if (buttons == MessageBoxButtons.AbortRetryIgnore) { Buttons[i].Text = pOk_Ignore; Buttons[i].DialogResult = DialogResult.Ignore; }; + if (buttons == MessageBoxButtons.YesNoCancel) { Buttons[i].Text = pCancel_Text; Buttons[i].DialogResult = DialogResult.Cancel; }; + if ((buttonsText != null) && (buttonsText.Length > 2)) Buttons[i].Text = buttonsText[2]; + }; + Buttons[i].BackColor = System.Drawing.SystemColors.Control; + Buttons[i].Location = new System.Drawing.Point(9 + 81 * i, 10); + Buttons[i].Size = new System.Drawing.Size(75, 23); + if (onclick != null) + { + Buttons[i].DialogResult = DialogResult.None; + query_info_evn = onclick; + Buttons[i].Click += new EventHandler(QIB_Click); + }; + }; + panel3.Controls.AddRange(Buttons); + + panel1.BackColor = System.Drawing.SystemColors.Window; + panel1.Controls.Add(label1); + panel1.Dock = System.Windows.Forms.DockStyle.Top; + panel1.Location = new System.Drawing.Point(0, 0); + panel1.Size = new System.Drawing.Size(578, 45); + label1.AutoSize = true; + label1.Location = new System.Drawing.Point(12, 14); + label1.Size = new System.Drawing.Size(174, 26); + label1.Text = topText; + panel2.BackColor = System.Drawing.SystemColors.Window; + panel2.Controls.Add(label2); + panel2.Controls.Add(panel3); + panel2.Dock = System.Windows.Forms.DockStyle.Bottom; + panel2.Location = new System.Drawing.Point(0, 432); + panel2.Size = new System.Drawing.Size(578, 45); + panel3.Dock = System.Windows.Forms.DockStyle.Right; + panel3.Location = new System.Drawing.Point(400, 0); + panel3.Size = new System.Drawing.Size(34 + 81 * btnCount, 45); + label2.AutoSize = true; + label2.Location = new System.Drawing.Point(12, 16); + label2.Size = new System.Drawing.Size(12, 13); + label2.Text = bottomText; + panel4.Controls.Add(textBox1); + panel4.Controls.Add(panel6); + panel4.Controls.Add(panel5); + panel4.Dock = System.Windows.Forms.DockStyle.Fill; + panel4.Location = new System.Drawing.Point(0, 135); + panel4.Size = new System.Drawing.Size(578, 297); + panel5.BackColor = System.Drawing.SystemColors.Window; + panel5.Dock = System.Windows.Forms.DockStyle.Left; + panel5.Location = new System.Drawing.Point(0, 0); + panel5.Size = new System.Drawing.Size(34, 297); + textBox1.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + textBox1.Dock = System.Windows.Forms.DockStyle.Fill; + textBox1.Location = new System.Drawing.Point(34, 0); + textBox1.Multiline = true; + textBox1.ScrollBars = System.Windows.Forms.ScrollBars.Both; + textBox1.Size = new System.Drawing.Size(510, 297); + textBox1.Text = mainText; + textBox1.SelectionStart = 0; + Color bc = textBox1.BackColor; + textBox1.ReadOnly = readOnly; + textBox1.BackColor = bc; + panel6.BackColor = System.Drawing.SystemColors.Window; + panel6.Controls.Add(button5); + panel6.Controls.Add(button4); + panel6.Controls.Add(button3); + panel6.Dock = System.Windows.Forms.DockStyle.Right; + panel6.Location = new System.Drawing.Point(544, 0); + panel6.Size = new System.Drawing.Size(34, 297); + button4.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + button4.Location = new System.Drawing.Point(6, 54); + button4.Size = new System.Drawing.Size(22, 23); + button4.Text = "S"; + button3.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + button3.Location = new System.Drawing.Point(6, 30); + button3.Size = new System.Drawing.Size(22, 23); + button3.Text = readOnly ? "" : "L"; + button5.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + button5.Location = new System.Drawing.Point(6, 6); + button5.Size = new System.Drawing.Size(22, 23); + button5.TabIndex = 3; + button5.Text = readOnly ? "" : "N"; + if (!readOnly) + { + button3.Click += new EventHandler(buttonLNS_Click); + button4.Click += new EventHandler(buttonLNS_Click); + button5.Click += new EventHandler(buttonLNS_Click); + }; + form.Controls.Add(panel4); + form.Controls.Add(panel1); + form.Controls.Add(panel2); + form.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent; + + { + //button1.Text = fullview ? pCancel_Text : pOk_Text; + //button2.Visible = fullview; + button3.Visible = allowNewLoadSave; + button4.Visible = allowNewLoadSave; + button5.Visible = allowNewLoadSave; + + button3.Enabled = !readOnly; + button4.Enabled = !String.IsNullOrEmpty(mainText); + button5.Enabled = !readOnly; + }; + + query_info_box = textBox1; + query_info_btm = label2; + DialogResult dr = form.ShowDialog(); + query_info_box = null; + query_info_btm = null; + mainText = textBox1.Text; + form.Dispose(); + return dr; + } + + static void QIB_Click(object sender, EventArgs e) + { + if ((query_info_evn != null) && (query_info_box != null) && (query_info_btm != null)) + { + string text = query_info_box.Text; + string botm = query_info_btm.Text; + bool close = false; + query_info_evn(sender, ref text, ref botm, ref close); + query_info_box.Text = text; + query_info_btm.Text = botm; + if (close) ((Form)((Control)sender).Parent.Parent.Parent).Close(); + }; + } + + private static void buttonLNS_Click(object sender, EventArgs e) + { + if (sender is Button) + { + if (query_info_box == null) return; + Button btn = (Button)sender; + if (btn.Text == "N") + query_info_box.Text = ""; + if (btn.Text == "L") + { + OpenFileDialog ofd = new OpenFileDialog(); + ofd.Filter = "Text Files (*.txt)|*.txt|All Types (*.*)|*.*"; + ofd.DefaultExt = ".txt"; + if (ofd.ShowDialog() == DialogResult.OK) + { + try + { + FileStream fs = new FileStream(ofd.FileName, FileMode.Open, FileAccess.Read); + StreamReader sr = new StreamReader(fs, System.Text.Encoding.GetEncoding(1251)); + query_info_box.Text = sr.ReadToEnd(); + sr.Close(); + fs.Close(); + } + catch { }; + }; + ofd.Dispose(); + }; + if (btn.Text == "S") + { + SaveFileDialog sfd = new SaveFileDialog(); + sfd.Filter = "Text Files (*.txt)|*.txt|All Types (*.*)|*.*"; + sfd.DefaultExt = ".txt"; + if (sfd.ShowDialog() == DialogResult.OK) + { + try + { + FileStream fs = new FileStream(sfd.FileName, FileMode.Create, FileAccess.Write); + StreamWriter sw = new StreamWriter(fs, System.Text.Encoding.GetEncoding(1251)); + sw.Write(query_info_box.Text); + sw.Close(); + fs.Close(); + } + catch { }; + }; + sfd.Dispose(); + }; + }; + } + } + + public class InputBoxForm : Form + { + private const int CP_NOCLOSE_BUTTON = 0x200; + protected override CreateParams CreateParams + { + get + { + CreateParams myCp = base.CreateParams; + myCp.ClassStyle = myCp.ClassStyle | CP_NOCLOSE_BUTTON; + return myCp; + } + } + } +} diff --git a/SOLVER/RouteGraphBatcher/Program.cs b/SOLVER/RouteGraphBatcher/Program.cs new file mode 100644 index 0000000..6d87762 --- /dev/null +++ b/SOLVER/RouteGraphBatcher/Program.cs @@ -0,0 +1,20 @@ +using System; +using System.Collections.Generic; +using System.Windows.Forms; + +namespace RouteGraphBatcher +{ + static class Program + { + /// + /// The main entry point for the application. + /// + [STAThread] + static void Main() + { + Application.EnableVisualStyles(); + Application.SetCompatibleTextRenderingDefault(false); + Application.Run(new RGBCForm()); + } + } +} \ No newline at end of file diff --git a/SOLVER/RouteGraphBatcher/Properties/AssemblyInfo.cs b/SOLVER/RouteGraphBatcher/Properties/AssemblyInfo.cs new file mode 100644 index 0000000..7700ee1 --- /dev/null +++ b/SOLVER/RouteGraphBatcher/Properties/AssemblyInfo.cs @@ -0,0 +1,33 @@ +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +[assembly: AssemblyTitle("RouteGraphBatcher")] +[assembly: AssemblyDescription("Создание графа из Shape")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("Milok Zbrozek ")] +[assembly: AssemblyProduct("RouteGraphBatcher")] +[assembly: AssemblyCopyright("Copyright © Milok Zbrozek 2021")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// Setting ComVisible to false makes the types in this assembly not visible +// to COM components. If you need to access a type in this assembly from +// COM, set the ComVisible attribute to true on that type. +[assembly: ComVisible(false)] + +// The following GUID is for the ID of the typelib if this project is exposed to COM +[assembly: Guid("4afca24d-2f17-4101-b9b4-da80a5125d86")] + +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +[assembly: AssemblyVersion("21.12.21.3")] +[assembly: AssemblyFileVersion("21.12.21.3")] diff --git a/SOLVER/RouteGraphBatcher/Properties/Resources.Designer.cs b/SOLVER/RouteGraphBatcher/Properties/Resources.Designer.cs new file mode 100644 index 0000000..804c599 --- /dev/null +++ b/SOLVER/RouteGraphBatcher/Properties/Resources.Designer.cs @@ -0,0 +1,63 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version:2.0.50727.3662 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +namespace RouteGraphBatcher.Properties { + using System; + + + /// + /// A strongly-typed resource class, for looking up localized strings, etc. + /// + // This class was auto-generated by the StronglyTypedResourceBuilder + // class via a tool like ResGen or Visual Studio. + // To add or remove a member, edit your .ResX file then rerun ResGen + // with the /str option, or rebuild your VS project. + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "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() { + } + + /// + /// Returns the cached ResourceManager instance used by this class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Resources.ResourceManager ResourceManager { + get { + if (object.ReferenceEquals(resourceMan, null)) { + global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("RouteGraphBatcher.Properties.Resources", typeof(Resources).Assembly); + resourceMan = temp; + } + return resourceMan; + } + } + + /// + /// Overrides the current thread's CurrentUICulture property for all + /// resource lookups using this strongly typed resource class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Globalization.CultureInfo Culture { + get { + return resourceCulture; + } + set { + resourceCulture = value; + } + } + } +} diff --git a/SOLVER/RouteGraphBatcher/Properties/Resources.resx b/SOLVER/RouteGraphBatcher/Properties/Resources.resx new file mode 100644 index 0000000..af7dbeb --- /dev/null +++ b/SOLVER/RouteGraphBatcher/Properties/Resources.resx @@ -0,0 +1,117 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 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 + + \ No newline at end of file diff --git a/SOLVER/RouteGraphBatcher/Properties/Settings.Designer.cs b/SOLVER/RouteGraphBatcher/Properties/Settings.Designer.cs new file mode 100644 index 0000000..c26035d --- /dev/null +++ b/SOLVER/RouteGraphBatcher/Properties/Settings.Designer.cs @@ -0,0 +1,26 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version:2.0.50727.3662 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +namespace RouteGraphBatcher.Properties { + + + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "8.0.0.0")] + internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase { + + private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings()))); + + public static Settings Default { + get { + return defaultInstance; + } + } + } +} diff --git a/SOLVER/RouteGraphBatcher/Properties/Settings.settings b/SOLVER/RouteGraphBatcher/Properties/Settings.settings new file mode 100644 index 0000000..3964565 --- /dev/null +++ b/SOLVER/RouteGraphBatcher/Properties/Settings.settings @@ -0,0 +1,7 @@ + + + + + + + diff --git a/SOLVER/RouteGraphBatcher/RGBForm.Designer.cs b/SOLVER/RouteGraphBatcher/RGBForm.Designer.cs new file mode 100644 index 0000000..a01f791 --- /dev/null +++ b/SOLVER/RouteGraphBatcher/RGBForm.Designer.cs @@ -0,0 +1,530 @@ +namespace RouteGraphBatcher +{ + partial class RGBCForm + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.components = new System.ComponentModel.Container(); + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(RGBCForm)); + this.label1 = new System.Windows.Forms.Label(); + this.f1 = new System.Windows.Forms.TextBox(); + this.sf = new System.Windows.Forms.Button(); + this.label2 = new System.Windows.Forms.Label(); + this.cb = new System.Windows.Forms.ComboBox(); + this.rb = new System.Windows.Forms.Button(); + this.gb = new System.Windows.Forms.GroupBox(); + this.wt = new System.Windows.Forms.Label(); + this.nt = new System.Windows.Forms.Label(); + this.gt = new System.Windows.Forms.Label(); + this.button6 = new System.Windows.Forms.Button(); + this.wd = new System.Windows.Forms.TextBox(); + this.label6 = new System.Windows.Forms.Label(); + this.button4 = new System.Windows.Forms.Button(); + this.rd = new System.Windows.Forms.TextBox(); + this.label4 = new System.Windows.Forms.Label(); + this.button3 = new System.Windows.Forms.Button(); + this.gd = new System.Windows.Forms.TextBox(); + this.label3 = new System.Windows.Forms.Label(); + this.textBox1 = new System.Windows.Forms.TextBox(); + this.btnsum = new System.Windows.Forms.Button(); + this.cb2 = new System.Windows.Forms.CheckBox(); + this.cb3 = new System.Windows.Forms.CheckBox(); + this.cb1 = new System.Windows.Forms.CheckBox(); + this.cb4 = new System.Windows.Forms.CheckBox(); + this.cb5 = new System.Windows.Forms.CheckBox(); + this.cstreg = new System.Windows.Forms.CheckBox(); + this.customreg = new System.Windows.Forms.NumericUpDown(); + this.arn = new System.Windows.Forms.CheckBox(); + this.btnEx = new System.Windows.Forms.Button(); + this.button1 = new System.Windows.Forms.Button(); + this.contextMenuStrip1 = new System.Windows.Forms.ContextMenuStrip(this.components); + this.shapesBBox2RegionsToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.mergeShapesMergerToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.extractShapesPolygonsExtractorToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.gb.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.customreg)).BeginInit(); + this.contextMenuStrip1.SuspendLayout(); + this.SuspendLayout(); + // + // label1 + // + this.label1.AutoSize = true; + this.label1.Location = new System.Drawing.Point(23, 13); + this.label1.Name = "label1"; + this.label1.Size = new System.Drawing.Size(39, 13); + this.label1.TabIndex = 0; + this.label1.Text = "Ôàéë:"; + // + // f1 + // + this.f1.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + this.f1.Location = new System.Drawing.Point(78, 11); + this.f1.Name = "f1"; + this.f1.Size = new System.Drawing.Size(642, 20); + this.f1.TabIndex = 1; + this.f1.TextChanged += new System.EventHandler(this.f1_TextChanged); + // + // sf + // + this.sf.Location = new System.Drawing.Point(734, 8); + this.sf.Name = "sf"; + this.sf.Size = new System.Drawing.Size(75, 23); + this.sf.TabIndex = 2; + this.sf.Text = "Îáçîð..."; + this.sf.UseVisualStyleBackColor = true; + this.sf.Click += new System.EventHandler(this.sf_Click); + // + // label2 + // + this.label2.AutoSize = true; + this.label2.Location = new System.Drawing.Point(23, 40); + this.label2.Name = "label2"; + this.label2.Size = new System.Drawing.Size(46, 13); + this.label2.TabIndex = 3; + this.label2.Text = "Ðåãèîí:"; + // + // cb + // + this.cb.DropDownHeight = 250; + this.cb.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.cb.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.cb.FormattingEnabled = true; + this.cb.IntegralHeight = false; + this.cb.Location = new System.Drawing.Point(78, 37); + this.cb.Name = "cb"; + this.cb.Size = new System.Drawing.Size(459, 21); + this.cb.TabIndex = 4; + this.cb.SelectedIndexChanged += new System.EventHandler(this.cb_SelectedIndexChanged); + // + // rb + // + this.rb.Location = new System.Drawing.Point(734, 40); + this.rb.Name = "rb"; + this.rb.Size = new System.Drawing.Size(75, 23); + this.rb.TabIndex = 5; + this.rb.Text = "Çàïóñê!"; + this.rb.UseVisualStyleBackColor = true; + this.rb.Click += new System.EventHandler(this.button2_Click); + // + // gb + // + this.gb.Controls.Add(this.wt); + this.gb.Controls.Add(this.nt); + this.gb.Controls.Add(this.gt); + this.gb.Controls.Add(this.button6); + this.gb.Controls.Add(this.wd); + this.gb.Controls.Add(this.label6); + this.gb.Controls.Add(this.button4); + this.gb.Controls.Add(this.rd); + this.gb.Controls.Add(this.label4); + this.gb.Controls.Add(this.button3); + this.gb.Controls.Add(this.gd); + this.gb.Controls.Add(this.label3); + this.gb.Location = new System.Drawing.Point(12, 90); + this.gb.Name = "gb"; + this.gb.Size = new System.Drawing.Size(814, 156); + this.gb.TabIndex = 6; + this.gb.TabStop = false; + this.gb.Text = "Ïàïêè"; + // + // wt + // + this.wt.Location = new System.Drawing.Point(66, 131); + this.wt.Name = "wt"; + this.wt.Size = new System.Drawing.Size(642, 21); + this.wt.TabIndex = 16; + this.wt.Text = "Graphs:"; + // + // nt + // + this.nt.Location = new System.Drawing.Point(66, 91); + this.nt.Name = "nt"; + this.nt.Size = new System.Drawing.Size(642, 14); + this.nt.TabIndex = 15; + this.nt.Text = "Graphs:"; + // + // gt + // + this.gt.Location = new System.Drawing.Point(66, 50); + this.gt.Name = "gt"; + this.gt.Size = new System.Drawing.Size(642, 14); + this.gt.TabIndex = 13; + this.gt.Text = "Graphs:"; + // + // button6 + // + this.button6.Location = new System.Drawing.Point(722, 105); + this.button6.Name = "button6"; + this.button6.Size = new System.Drawing.Size(75, 23); + this.button6.TabIndex = 12; + this.button6.Text = "Îáçîð..."; + this.button6.UseVisualStyleBackColor = true; + this.button6.Click += new System.EventHandler(this.button6_Click); + // + // wd + // + this.wd.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + this.wd.Location = new System.Drawing.Point(66, 108); + this.wd.Name = "wd"; + this.wd.Size = new System.Drawing.Size(642, 20); + this.wd.TabIndex = 11; + this.wd.TextChanged += new System.EventHandler(this.gd_TextChanged); + // + // label6 + // + this.label6.AutoSize = true; + this.label6.Location = new System.Drawing.Point(11, 110); + this.label6.Name = "label6"; + this.label6.Size = new System.Drawing.Size(53, 13); + this.label6.TabIndex = 10; + this.label6.Text = "RGWays:"; + // + // button4 + // + this.button4.Location = new System.Drawing.Point(722, 64); + this.button4.Name = "button4"; + this.button4.Size = new System.Drawing.Size(75, 23); + this.button4.TabIndex = 6; + this.button4.Text = "Îáçîð..."; + this.button4.UseVisualStyleBackColor = true; + this.button4.Click += new System.EventHandler(this.button4_Click); + // + // rd + // + this.rd.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + this.rd.Location = new System.Drawing.Point(66, 67); + this.rd.Name = "rd"; + this.rd.Size = new System.Drawing.Size(642, 20); + this.rd.TabIndex = 5; + this.rd.TextChanged += new System.EventHandler(this.gd_TextChanged); + // + // label4 + // + this.label4.AutoSize = true; + this.label4.Location = new System.Drawing.Point(11, 69); + this.label4.Name = "label4"; + this.label4.Size = new System.Drawing.Size(49, 13); + this.label4.TabIndex = 4; + this.label4.Text = "Regions:"; + // + // button3 + // + this.button3.Location = new System.Drawing.Point(722, 24); + this.button3.Name = "button3"; + this.button3.Size = new System.Drawing.Size(75, 23); + this.button3.TabIndex = 3; + this.button3.Text = "Îáçîð..."; + this.button3.UseVisualStyleBackColor = true; + this.button3.Click += new System.EventHandler(this.button3_Click); + // + // gd + // + this.gd.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + this.gd.Location = new System.Drawing.Point(66, 27); + this.gd.Name = "gd"; + this.gd.Size = new System.Drawing.Size(642, 20); + this.gd.TabIndex = 2; + this.gd.TextChanged += new System.EventHandler(this.gd_TextChanged); + // + // label3 + // + this.label3.AutoSize = true; + this.label3.Location = new System.Drawing.Point(11, 29); + this.label3.Name = "label3"; + this.label3.Size = new System.Drawing.Size(44, 13); + this.label3.TabIndex = 0; + this.label3.Text = "Graphs:"; + // + // textBox1 + // + this.textBox1.BackColor = System.Drawing.SystemColors.Window; + this.textBox1.BorderStyle = System.Windows.Forms.BorderStyle.None; + this.textBox1.Location = new System.Drawing.Point(12, 287); + this.textBox1.Multiline = true; + this.textBox1.Name = "textBox1"; + this.textBox1.ReadOnly = true; + this.textBox1.ScrollBars = System.Windows.Forms.ScrollBars.Both; + this.textBox1.Size = new System.Drawing.Size(814, 317); + this.textBox1.TabIndex = 7; + this.textBox1.Text = "Status..."; + // + // btnsum + // + this.btnsum.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.btnsum.Location = new System.Drawing.Point(12, 255); + this.btnsum.Name = "btnsum"; + this.btnsum.Size = new System.Drawing.Size(710, 23); + this.btnsum.TabIndex = 9; + this.btnsum.Text = "Ñêëåèòü ìàðøðóòû äëÿ âñåõ ðåãèîíîâ"; + this.btnsum.UseVisualStyleBackColor = true; + this.btnsum.Click += new System.EventHandler(this.btnsum_Click); + // + // cb2 + // + this.cb2.AutoSize = true; + this.cb2.Checked = true; + this.cb2.CheckState = System.Windows.Forms.CheckState.Checked; + this.cb2.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.cb2.Location = new System.Drawing.Point(543, 45); + this.cb2.Name = "cb2"; + this.cb2.Size = new System.Drawing.Size(179, 17); + this.cb2.TabIndex = 10; + this.cb2.Text = "Ðàñ÷åò òðàíçèòíûõ ìàðøðóòîâ"; + this.cb2.UseVisualStyleBackColor = true; + this.cb2.CheckedChanged += new System.EventHandler(this.cb2_CheckedChanged); + // + // cb3 + // + this.cb3.AutoSize = true; + this.cb3.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.cb3.Location = new System.Drawing.Point(543, 59); + this.cb3.Name = "cb3"; + this.cb3.Size = new System.Drawing.Size(174, 17); + this.cb3.TabIndex = 12; + this.cb3.Text = "Ñîçäàíèå êàðòû òðàíçèòà MP"; + this.cb3.UseVisualStyleBackColor = true; + // + // cb1 + // + this.cb1.AutoSize = true; + this.cb1.Checked = true; + this.cb1.CheckState = System.Windows.Forms.CheckState.Checked; + this.cb1.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.cb1.Location = new System.Drawing.Point(543, 31); + this.cb1.Name = "cb1"; + this.cb1.Size = new System.Drawing.Size(118, 17); + this.cb1.TabIndex = 13; + this.cb1.Text = "Ïîñòðîåíèå ãðàôà"; + this.cb1.UseVisualStyleBackColor = true; + this.cb1.CheckedChanged += new System.EventHandler(this.cb1_CheckedChanged); + // + // cb4 + // + this.cb4.AutoSize = true; + this.cb4.Checked = true; + this.cb4.CheckState = System.Windows.Forms.CheckState.Checked; + this.cb4.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.cb4.Location = new System.Drawing.Point(543, 73); + this.cb4.Name = "cb4"; + this.cb4.Size = new System.Drawing.Size(176, 17); + this.cb4.TabIndex = 14; + this.cb4.Text = "Ñ÷èòàòü ñòàòèñòèêó àòðèáóòîâ"; + this.cb4.UseVisualStyleBackColor = true; + // + // cb5 + // + this.cb5.AutoSize = true; + this.cb5.Checked = true; + this.cb5.CheckState = System.Windows.Forms.CheckState.Checked; + this.cb5.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.cb5.Location = new System.Drawing.Point(385, 73); + this.cb5.Name = "cb5"; + this.cb5.Size = new System.Drawing.Size(94, 17); + this.cb5.TabIndex = 15; + this.cb5.Text = "Backup ãðàôà"; + this.cb5.UseVisualStyleBackColor = true; + // + // cstreg + // + this.cstreg.AutoSize = true; + this.cstreg.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.cstreg.Location = new System.Drawing.Point(78, 65); + this.cstreg.Name = "cstreg"; + this.cstreg.Size = new System.Drawing.Size(102, 17); + this.cstreg.TabIndex = 16; + this.cstreg.Text = "Ïðîèçâîëüíûé:"; + this.cstreg.UseVisualStyleBackColor = true; + this.cstreg.CheckedChanged += new System.EventHandler(this.cstreg_CheckedChanged); + // + // customreg + // + this.customreg.Enabled = false; + this.customreg.Location = new System.Drawing.Point(183, 63); + this.customreg.Maximum = new decimal(new int[] { + 999, + 0, + 0, + 0}); + this.customreg.Minimum = new decimal(new int[] { + 1, + 0, + 0, + 0}); + this.customreg.Name = "customreg"; + this.customreg.Size = new System.Drawing.Size(60, 20); + this.customreg.TabIndex = 18; + this.customreg.UpDownAlign = System.Windows.Forms.LeftRightAlignment.Left; + this.customreg.Value = new decimal(new int[] { + 700, + 0, + 0, + 0}); + // + // arn + // + this.arn.AutoSize = true; + this.arn.Checked = true; + this.arn.CheckState = System.Windows.Forms.CheckState.Checked; + this.arn.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.arn.Location = new System.Drawing.Point(385, 59); + this.arn.Name = "arn"; + this.arn.Size = new System.Drawing.Size(152, 17); + this.arn.TabIndex = 19; + this.arn.Text = "Ñïðàøèâàòü èìÿ ðåãèîíà"; + this.arn.UseVisualStyleBackColor = true; + // + // btnEx + // + this.btnEx.Location = new System.Drawing.Point(249, 64); + this.btnEx.Name = "btnEx"; + this.btnEx.Size = new System.Drawing.Size(130, 23); + this.btnEx.TabIndex = 20; + this.btnEx.Text = "Èçâëå÷ü ãðàíèöû"; + this.btnEx.UseVisualStyleBackColor = true; + this.btnEx.Visible = false; + this.btnEx.Click += new System.EventHandler(this.btnEx_Click); + // + // button1 + // + this.button1.Location = new System.Drawing.Point(734, 255); + this.button1.Name = "button1"; + this.button1.Size = new System.Drawing.Size(75, 23); + this.button1.TabIndex = 21; + this.button1.Text = "Tools ..."; + this.button1.UseVisualStyleBackColor = true; + this.button1.Click += new System.EventHandler(this.button1_Click); + // + // contextMenuStrip1 + // + this.contextMenuStrip1.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.shapesBBox2RegionsToolStripMenuItem, + this.mergeShapesMergerToolStripMenuItem, + this.extractShapesPolygonsExtractorToolStripMenuItem}); + this.contextMenuStrip1.Name = "contextMenuStrip1"; + this.contextMenuStrip1.Size = new System.Drawing.Size(384, 70); + // + // shapesBBox2RegionsToolStripMenuItem + // + this.shapesBBox2RegionsToolStripMenuItem.Name = "shapesBBox2RegionsToolStripMenuItem"; + this.shapesBBox2RegionsToolStripMenuItem.Size = new System.Drawing.Size(383, 22); + this.shapesBBox2RegionsToolStripMenuItem.Text = "Ñîçäàòü ôàéë Ðåãèîíîâ (ShapesBBox2Regions) ..."; + this.shapesBBox2RegionsToolStripMenuItem.Click += new System.EventHandler(this.shapesBBox2RegionsToolStripMenuItem_Click); + // + // mergeShapesMergerToolStripMenuItem + // + this.mergeShapesMergerToolStripMenuItem.Name = "mergeShapesMergerToolStripMenuItem"; + this.mergeShapesMergerToolStripMenuItem.Size = new System.Drawing.Size(383, 22); + this.mergeShapesMergerToolStripMenuItem.Text = "Ñêëåèòü øåéïû (ShapesMerger) ..."; + this.mergeShapesMergerToolStripMenuItem.Click += new System.EventHandler(this.mergeShapesMergerToolStripMenuItem_Click); + // + // extractShapesPolygonsExtractorToolStripMenuItem + // + this.extractShapesPolygonsExtractorToolStripMenuItem.Name = "extractShapesPolygonsExtractorToolStripMenuItem"; + this.extractShapesPolygonsExtractorToolStripMenuItem.Size = new System.Drawing.Size(383, 22); + this.extractShapesPolygonsExtractorToolStripMenuItem.Text = "Èçâëå÷ü ïîëèãîíû èç øåéïîâ (ShapesPolygonsExtractor) ..."; + this.extractShapesPolygonsExtractorToolStripMenuItem.Click += new System.EventHandler(this.extractShapesPolygonsExtractorToolStripMenuItem_Click); + // + // RGBCForm + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(838, 616); + this.Controls.Add(this.btnEx); + this.Controls.Add(this.button1); + this.Controls.Add(this.arn); + this.Controls.Add(this.customreg); + this.Controls.Add(this.cstreg); + this.Controls.Add(this.gb); + this.Controls.Add(this.cb5); + this.Controls.Add(this.cb4); + this.Controls.Add(this.cb1); + this.Controls.Add(this.cb3); + this.Controls.Add(this.cb2); + this.Controls.Add(this.btnsum); + this.Controls.Add(this.textBox1); + this.Controls.Add(this.rb); + this.Controls.Add(this.cb); + this.Controls.Add(this.label2); + this.Controls.Add(this.sf); + this.Controls.Add(this.f1); + this.Controls.Add(this.label1); + this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); + this.MaximizeBox = false; + this.Name = "RGBCForm"; + this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen; + this.Text = "RouteGraph Batch Creator"; + this.Load += new System.EventHandler(this.Form1_Load); + this.FormClosing += new System.Windows.Forms.FormClosingEventHandler(this.Form1_FormClosing); + this.gb.ResumeLayout(false); + this.gb.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)(this.customreg)).EndInit(); + this.contextMenuStrip1.ResumeLayout(false); + this.ResumeLayout(false); + this.PerformLayout(); + + } + + #endregion + + private System.Windows.Forms.Label label1; + private System.Windows.Forms.TextBox f1; + private System.Windows.Forms.Button sf; + private System.Windows.Forms.Label label2; + private System.Windows.Forms.ComboBox cb; + private System.Windows.Forms.Button rb; + private System.Windows.Forms.GroupBox gb; + private System.Windows.Forms.Button button6; + private System.Windows.Forms.TextBox wd; + private System.Windows.Forms.Label label6; + private System.Windows.Forms.Button button4; + private System.Windows.Forms.TextBox rd; + private System.Windows.Forms.Label label4; + private System.Windows.Forms.Button button3; + private System.Windows.Forms.TextBox gd; + private System.Windows.Forms.Label label3; + private System.Windows.Forms.Label wt; + private System.Windows.Forms.Label nt; + private System.Windows.Forms.Label gt; + private System.Windows.Forms.TextBox textBox1; + private System.Windows.Forms.Button btnsum; + private System.Windows.Forms.CheckBox cb2; + private System.Windows.Forms.CheckBox cb3; + private System.Windows.Forms.CheckBox cb1; + private System.Windows.Forms.CheckBox cb4; + private System.Windows.Forms.CheckBox cb5; + private System.Windows.Forms.CheckBox cstreg; + private System.Windows.Forms.NumericUpDown customreg; + private System.Windows.Forms.CheckBox arn; + private System.Windows.Forms.Button btnEx; + private System.Windows.Forms.Button button1; + private System.Windows.Forms.ContextMenuStrip contextMenuStrip1; + private System.Windows.Forms.ToolStripMenuItem shapesBBox2RegionsToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem mergeShapesMergerToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem extractShapesPolygonsExtractorToolStripMenuItem; + } +} + diff --git a/SOLVER/RouteGraphBatcher/RGBForm.cs b/SOLVER/RouteGraphBatcher/RGBForm.cs new file mode 100644 index 0000000..0cd3671 --- /dev/null +++ b/SOLVER/RouteGraphBatcher/RGBForm.cs @@ -0,0 +1,991 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.Text; +using System.Windows.Forms; +using System.Xml; +using System.IO; + +namespace RouteGraphBatcher +{ + public partial class RGBCForm : Form + { + public dkxce.Route.Regions.PointInRegionUtils piru; + + public BatchParams bp = new BatchParams(); + public RGBCForm() + { + InitializeComponent(); + } + + private void PreFillDirs() + { + bp.Graphs = gd.Text; + bp.Regions = rd.Text; + bp.RGWays = wd.Text; + } + + private void button2_Click(object sender, EventArgs e) + { + if(cb1.Checked) + if (!File.Exists(f1.Text)) + { + MessageBox.Show("Ôàéë `" + f1.Text + "` íå íàéäåí!", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); + return; + }; + + if(cb2.Checked || cb3.Checked) + if (cb.SelectedIndex < 0) + { + MessageBox.Show("Âûáåðèòå ðåãèîí", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); + return; + }; + + gb.Enabled = false; + cb.Enabled = false; + rb.Enabled = false; + f1.Enabled = false; + sf.Enabled = false; + btnsum.Enabled = false; + cstreg.Enabled = false; + customreg.Enabled = false; + + PreFillDirs(); + string bpg = bp.Graphs; + string bpr = bp.Regions; + string bpw = bp.RGWays; + + if (!Path.IsPathRooted(bpg)) + bpg = XMLSaved.GetCurrentDir() + bpg; + if (!Path.IsPathRooted(bpr)) + bpr = XMLSaved.GetCurrentDir() + bpr; + if (!Path.IsPathRooted(bpw)) + bpw = XMLSaved.GetCurrentDir() + bpw; + + int reg = (cstreg.Checked) ? (int)customreg.Value : ((NI)cb.SelectedItem).i; + string RegName = "", nRegName = ""; + if (!cstreg.Checked) + { + string rn = ((NI)cb.SelectedItem).n; + if (rn.IndexOf("[") > 0) rn = rn.Substring(0, rn.IndexOf("[")).Trim(); + nRegName = RegName = rn; + }; + if (arn.Checked) + { + if (InputBox.QueryStringBox("Íàçâàíèå ðåãèîíà", "Ââåäèòå íàçâàíèå ðåãèîíà:", ref nRegName) == DialogResult.OK) + RegName = nRegName; + }; + + // OLD VERSION // where no B & region in name, example: `01T02.rgway.xml` + // foreach (string file in Directory.GetFiles(bpg, String.Format("{0:000}", reg) + ".rgnodes.xml")) + // File.Delete(file); + //{ + //dkxce.Route.Classes.TRGNode[] nds = XMLSaved.Load(file); + //File.Delete(file); + //for(int x=0;x.GetCurrentDir() + @"\RouteGraphCreator.exe"; + psi.Arguments = reg.ToString() + " " + "\"" + f1.Text + "\" " + "\"" + bpg + @"\" + String.Format("{0:000}", reg) + ".rt\""; + if (cb4.Checked) + psi.Arguments += " attr"; + if(!String.IsNullOrEmpty(RegName)) + psi.Arguments += " \"/regName=" + RegName + "\""; + + textBox1.Text += "RouteGraphCreator.exe " + psi.Arguments + "\r\n\r\n"; + + p = System.Diagnostics.Process.Start(psi); + Application.DoEvents(); + p.WaitForExit(); + Application.DoEvents(); + }; + + if (cb2.Checked) + { + // CalcRG + psi = new System.Diagnostics.ProcessStartInfo(); + psi.FileName = XMLSaved.GetCurrentDir() + @"\RouteGraphCalcRG.exe"; + psi.Arguments = reg.ToString() + " " + "\"" + bpg + @"\" + String.Format("{0:000}", reg) + ".rt\" \"" + bpw + "\" "; + + textBox1.Text += "RouteGraphCalcRG.exe " + psi.Arguments + "\r\n\r\n"; + + p = System.Diagnostics.Process.Start(psi); + Application.DoEvents(); + p.WaitForExit(); + Application.DoEvents(); + }; + + if (cb3.Checked) + { + // MP + psi = new System.Diagnostics.ProcessStartInfo(); + psi.FileName = XMLSaved.GetCurrentDir() + @"\RGWay2RTE.exe"; + psi.Arguments = "mp \"" + bpw + "\\*B" + reg.ToString() + ".rgway.xml\""; + + textBox1.Text += "RGWay2RTE.exe " + psi.Arguments + "\r\n\r\n"; + + p = System.Diagnostics.Process.Start(psi); + Application.DoEvents(); + p.WaitForExit(); + Application.DoEvents(); + }; + + gb.Enabled = true; + cb.Enabled = true; + rb.Enabled = true; + f1.Enabled = true; + sf.Enabled = true; + btnsum.Enabled = true; + cstreg.Enabled = true; + customreg.Enabled = true; + if (cstreg.Checked) cb.Enabled = false; + else customreg.Enabled = false; + + textBox1.Text += "...\r\nDone!"; + } + + private void sf_Click(object sender, EventArgs e) + { + OpenFileDialog ofd = new OpenFileDialog(); + ofd.Title = "Âûáåðèòå shape-ôàéë"; + ofd.DefaultExt = ".shp"; + ofd.Filter = "Shape files (*.shp)|*.shp"; + if (ofd.ShowDialog() == DialogResult.OK) + { + f1.Text = ofd.FileName; + }; + ofd.Dispose(); + } + + private void gd_TextChanged(object sender, EventArgs e) + { + gt.Text = gd.Text; + if (!Path.IsPathRooted(gt.Text)) + gt.Text = XMLSaved.GetCurrentDir() + gt.Text; + + nt.Text = rd.Text; + if (!Path.IsPathRooted(nt.Text)) + nt.Text = XMLSaved.GetCurrentDir() + nt.Text; + + wt.Text = wd.Text; + if (!Path.IsPathRooted(wt.Text)) + wt.Text = XMLSaved.GetCurrentDir() + wt.Text; + } + + private void Form1_FormClosing(object sender, FormClosingEventArgs e) + { + PreFillDirs(); + XMLSaved.Save(XMLSaved.GetCurrentDir() + @"\RouteGraphBatcher.xml", bp); + } + + private void Form1_Load(object sender, EventArgs e) + { + string bpf = XMLSaved.GetCurrentDir() + @"\RouteGraphBatcher.xml"; + if (File.Exists(bpf)) bp = XMLSaved.Load(bpf); + + gd.Text = bp.Graphs; + rd.Text = bp.Regions; + wd.Text = bp.RGWays; + + piru = new dkxce.Route.Regions.PointInRegionUtils(); + string tmp = rd.Text; + if (!Path.IsPathRooted(tmp)) tmp = XMLSaved.GetCurrentDir() + tmp; + piru.LoadRegionsFromFile(tmp + @"\Regions.shp"); + + for (int i = 0; i < piru.RegionsNames.Length; i++) + cb.Items.Add(new NI(piru.RegionsNames[i]+" "+String.Format("[{0:000}]",piru.RegionsIDs[i]),piru.RegionsIDs[i])); + cb.Sorted = true; + } + + private void button3_Click(object sender, EventArgs e) + { + SaveFileDialog sfd = new SaveFileDialog(); + sfd.OverwritePrompt = false; + sfd.Title = "Âûáåðèòå ïàïêó"; + sfd.FileName = "sample.rt"; + sfd.DefaultExt = ".rt"; + sfd.Filter = "Route Graphs|*.rt"; + if (sfd.ShowDialog() == DialogResult.OK) + gd.Text = Path.GetDirectoryName(sfd.FileName); + sfd.Dispose(); + } + + private void button4_Click(object sender, EventArgs e) + { + SaveFileDialog sfd = new SaveFileDialog(); + sfd.OverwritePrompt = false; + sfd.Title = "Âûáåðèòå ïàïêó"; + sfd.FileName = "sample.shp"; + sfd.DefaultExt = ".shp"; + sfd.Filter = "Shape files|*.shp"; + if (sfd.ShowDialog() == DialogResult.OK) + rd.Text = Path.GetDirectoryName(sfd.FileName); + sfd.Dispose(); + } + + private void button6_Click(object sender, EventArgs e) + { + SaveFileDialog sfd = new SaveFileDialog(); + sfd.OverwritePrompt = false; + sfd.Title = "Âûáåðèòå ïàïêó"; + sfd.FileName = "sample.xml"; + sfd.DefaultExt = ".xml"; + sfd.Filter = "XML files|*.xml"; + if (sfd.ShowDialog() == DialogResult.OK) + wd.Text = Path.GetDirectoryName(sfd.FileName); + sfd.Dispose(); + } + + private void btnsum_Click(object sender, EventArgs e) + { + gb.Enabled = false; + cb.Enabled = false; + rb.Enabled = false; + f1.Enabled = false; + sf.Enabled = false; + btnsum.Enabled = false; + + PreFillDirs(); + string bpg = bp.Graphs; + string bpr = bp.Regions; + + if (!Path.IsPathRooted(bpg)) + bpg = XMLSaved.GetCurrentDir() + bpg; + if (!Path.IsPathRooted(bpr)) + bpr = XMLSaved.GetCurrentDir() + bpr; + + // + System.Diagnostics.ProcessStartInfo psi = new System.Diagnostics.ProcessStartInfo(); + psi.FileName = XMLSaved.GetCurrentDir() + @"\RouteGraphCalcMatrix.exe"; + psi.Arguments = "\"" + bpg + "\" " + "\"" + bpg + @"\"+"000.bin\" "+bpr; + + textBox1.Clear(); + textBox1.Text += psi.FileName + " " + psi.Arguments + "\r\n"; + + System.Diagnostics.Process p = System.Diagnostics.Process.Start(psi); + Application.DoEvents(); + p.WaitForExit(); + Application.DoEvents(); + // + + gb.Enabled = true; + cb.Enabled = true; + rb.Enabled = true; + f1.Enabled = true; + sf.Enabled = true; + btnsum.Enabled = true; + } + + private void cb2_CheckedChanged(object sender, EventArgs e) + { + } + + private void cb1_CheckedChanged(object sender, EventArgs e) + { + cb4.Enabled = cb1.Checked; + } + + private void f1_TextChanged(object sender, EventArgs e) + { + if (File.Exists(f1.Text)) + { + PreReadShape(f1.Text); + string cfgf = PreCheckFCFG(f1.Text); + PreCheckFields(cfgf, f1.Text.Replace(System.IO.Path.GetExtension(f1.Text),".dbf")); + }; + } + + private void PreCheckFields(string cfgFile, string dbfFile) + { + dkxce.Route.Classes.ShapeFields stream_ShapeFile_FieldNames = null; + try + { + stream_ShapeFile_FieldNames = dkxce.Route.Classes.ShapeFields.Load(cfgFile); + } + catch + { + return; + }; + + List flds = new List(); + Hashtable fht = new Hashtable(); + string fieldsOk = ""; + string fieldsBad = ""; + string fieldsErr = ""; + string fieldsEdd = ""; + string cautions = ""; + bool raiseNoFields = false; + // READ FIELDS + try + { + string[] FIELDS = ReadDBFFields(dbfFile, out fht); + flds.AddRange(FIELDS); + } + catch (Exception) + { + return; + }; + if (flds.Count == 0) return; + + // CHECK FIELDS + { + if (stream_ShapeFile_FieldNames.SOURCE == "GARMIN") + { + Console.WriteLine(stream_ShapeFile_FieldNames.SOURCE); + + CheckFields("LinkId", ref stream_ShapeFile_FieldNames.fldLinkId, flds, ref fieldsOk, ref fieldsBad, ref fieldsErr, ref fieldsEdd, ref raiseNoFields, 0, 'N', fht, ref cautions); + CheckFields("GarminType", ref stream_ShapeFile_FieldNames.fldGarminType, flds, ref fieldsOk, ref fieldsBad, ref fieldsErr, ref fieldsEdd, ref raiseNoFields, 0, 'C', fht, ref cautions); + } + else if (stream_ShapeFile_FieldNames.SOURCE == "OSM") + { + Console.WriteLine(stream_ShapeFile_FieldNames.SOURCE); + + CheckFields("OSM_ID", ref stream_ShapeFile_FieldNames.fldOSM_ID, flds, ref fieldsOk, ref fieldsBad, ref fieldsErr, ref fieldsEdd, ref raiseNoFields, 0, 'N', fht, ref cautions); + CheckFields("OSM_SURFACE", ref stream_ShapeFile_FieldNames.fldOSM_SURFACE, flds, ref fieldsOk, ref fieldsBad, ref fieldsErr, ref fieldsEdd, ref raiseNoFields, 0, 'C', fht, ref cautions); + } + else if ((stream_ShapeFile_FieldNames.SOURCE == "OSM2") || (stream_ShapeFile_FieldNames.SOURCE == "OSM2SHP")) + { + CheckFields("OSM_ID", ref stream_ShapeFile_FieldNames.fldOSM_ID, flds, ref fieldsOk, ref fieldsBad, ref fieldsErr, ref fieldsEdd, ref raiseNoFields, 0, 'N', fht, ref cautions); + CheckFields("OSM_TYPE", ref stream_ShapeFile_FieldNames.fldOSM_TYPE, flds, ref fieldsOk, ref fieldsBad, ref fieldsErr, ref fieldsEdd, ref raiseNoFields, 1, 'C', fht, ref cautions); + CheckFields("OSM_SURFACE", ref stream_ShapeFile_FieldNames.fldOSM_SURFACE, flds, ref fieldsOk, ref fieldsBad, ref fieldsErr, ref fieldsEdd, ref raiseNoFields, 1, 'C', fht, ref cautions); + CheckFields("GarminType", ref stream_ShapeFile_FieldNames.fldGarminType, flds, ref fieldsOk, ref fieldsBad, ref fieldsErr, ref fieldsEdd, ref raiseNoFields, 1, 'C', fht, ref cautions); + + CheckFields("SERVICE", ref stream_ShapeFile_FieldNames.fldOSM_ADDIT_SERVICE, flds, ref fieldsOk, ref fieldsBad, ref fieldsErr, ref fieldsEdd, ref raiseNoFields, 2, 'C', fht, ref cautions); + CheckFields("JUNCTION", ref stream_ShapeFile_FieldNames.fldOSM_ADDIT_JUNCTION, flds, ref fieldsOk, ref fieldsBad, ref fieldsErr, ref fieldsEdd, ref raiseNoFields, 2, 'C', fht, ref cautions); + CheckFields("LANES", ref stream_ShapeFile_FieldNames.fldOSM_ADDIT_LANES, flds, ref fieldsOk, ref fieldsBad, ref fieldsErr, ref fieldsEdd, ref raiseNoFields, 2, 'C', fht, ref cautions); + CheckFields("MAXACTUAL", ref stream_ShapeFile_FieldNames.fldOSM_ADDIT_MAXACTUAL, flds, ref fieldsOk, ref fieldsBad, ref fieldsErr, ref fieldsEdd, ref raiseNoFields, 2, 'C', fht, ref cautions); + }; + // other fields + { + CheckFields("SpeedLimit", ref stream_ShapeFile_FieldNames.fldSpeedLimit, flds, ref fieldsOk, ref fieldsBad, ref fieldsErr, ref fieldsEdd, ref raiseNoFields, 0, 'N', fht, ref cautions); + CheckFields("RouteLevel", ref stream_ShapeFile_FieldNames.fldRouteLevel, flds, ref fieldsOk, ref fieldsBad, ref fieldsErr, ref fieldsEdd, ref raiseNoFields, 2, 'N', fht, ref cautions); + CheckFields("RouteSpeed", ref stream_ShapeFile_FieldNames.fldRouteSpeed, flds, ref fieldsOk, ref fieldsBad, ref fieldsErr, ref fieldsEdd, ref raiseNoFields, 2, 'N', fht, ref cautions); + CheckFields("OneWay", ref stream_ShapeFile_FieldNames.fldOneWay, flds, ref fieldsOk, ref fieldsBad, ref fieldsErr, ref fieldsEdd, ref raiseNoFields, 0, '0', fht, ref cautions); + CheckFields("Length", ref stream_ShapeFile_FieldNames.fldLength, flds, ref fieldsOk, ref fieldsBad, ref fieldsErr, ref fieldsEdd, ref raiseNoFields, 3, 'F', fht, ref cautions); + CheckFields("Name", ref stream_ShapeFile_FieldNames.fldName, flds, ref fieldsOk, ref fieldsBad, ref fieldsErr, ref fieldsEdd, ref raiseNoFields, 3, 'C', fht, ref cautions); + CheckFields("TurnRestrictions", ref stream_ShapeFile_FieldNames.fldTurnRstr, flds, ref fieldsOk, ref fieldsBad, ref fieldsErr, ref fieldsEdd, ref raiseNoFields, 3, 'C', fht, ref cautions); + CheckFields("TMC", ref stream_ShapeFile_FieldNames.fldTMC, flds, ref fieldsOk, ref fieldsBad, ref fieldsErr, ref fieldsEdd, ref raiseNoFields, 2, 'C', fht, ref cautions); + CheckFields("RGNODE", ref stream_ShapeFile_FieldNames.fldRGNODE, flds, ref fieldsOk, ref fieldsBad, ref fieldsErr, ref fieldsEdd, ref raiseNoFields, 2, 'C', fht, ref cautions); + CheckFields("ACC_MASK", ref stream_ShapeFile_FieldNames.fldACCMask, flds, ref fieldsOk, ref fieldsBad, ref fieldsErr, ref fieldsEdd, ref raiseNoFields, 2, 'C', fht, ref cautions); + CheckFields("ATTR", ref stream_ShapeFile_FieldNames.fldAttr, flds, ref fieldsOk, ref fieldsBad, ref fieldsErr, ref fieldsEdd, ref raiseNoFields, 2, 'C', fht, ref cautions); + CheckFields("MaxWeight", ref stream_ShapeFile_FieldNames.fldMaxWeight, flds, ref fieldsOk, ref fieldsBad, ref fieldsErr, ref fieldsEdd, ref raiseNoFields, 2, 'F', fht, ref cautions); + CheckFields("MaxAxle", ref stream_ShapeFile_FieldNames.fldMaxAxle, flds, ref fieldsOk, ref fieldsBad, ref fieldsErr, ref fieldsEdd, ref raiseNoFields, 2, 'F', fht, ref cautions); + CheckFields("MaxHeight", ref stream_ShapeFile_FieldNames.fldMaxHeight, flds, ref fieldsOk, ref fieldsBad, ref fieldsErr, ref fieldsEdd, ref raiseNoFields, 2, 'F', fht, ref cautions); + CheckFields("MaxWidth", ref stream_ShapeFile_FieldNames.fldMaxWidth, flds, ref fieldsOk, ref fieldsBad, ref fieldsErr, ref fieldsEdd, ref raiseNoFields, 2, 'F', fht, ref cautions); + CheckFields("MaxLength", ref stream_ShapeFile_FieldNames.fldMaxLength, flds, ref fieldsOk, ref fieldsBad, ref fieldsErr, ref fieldsEdd, ref raiseNoFields, 2, 'F', fht, ref cautions); + CheckFields("MinDistance", ref stream_ShapeFile_FieldNames.fldMinDistance, flds, ref fieldsOk, ref fieldsBad, ref fieldsErr, ref fieldsEdd, ref raiseNoFields, 2, 'F', fht, ref cautions); + }; + }; + // RESULT + string outText = "Analyse: \r\n " + dbfFile + "\r\n\r\n"; + if (fieldsOk.Length > 0) + { + outText += "Found Fields: \r\n "; + outText += fieldsOk.Trim().Trim(',') + "\r\n\r\n"; + }; + //if (fieldsBad.Length > 0) + //{ + // outText += "Bad Fields: \r\n "; + // outText += (fieldsBad.Trim().Trim(',')) + "\r\n\r\n"; + //}; + if (fieldsErr.Length > 0) + { + outText += "Failed Fields: \r\n "; + outText += (fieldsBad.Length > 0 ? fieldsErr : fieldsErr.Trim().Trim(',')) + "\r\n\r\n"; + }; + if (cautions.Length > 0) + { + outText += "Cautions: \r\n "; + outText += cautions.Trim().Trim(',') + "\r\n\r\n"; + }; + if (raiseNoFields) + { + outText += "Error: \r\n "; + outText += ("Required Fields (" + fieldsEdd.Trim().Trim(',') + ") not Found") + "\r\n\r\n"; + }; + textBox1.Text = (outText); + } + + private string PreCheckFCFG(string fileName) + { + string fieldCongifDefault = XMLSaved.GetCurrentDir() + @"\default.fldcfg.xml"; + string fieldConfigFileName = Path.GetDirectoryName(fileName) + @"\" + Path.GetFileNameWithoutExtension(fileName) + ".fldcfg.xml"; + string fieldConfigFileDef = Path.GetDirectoryName(fileName) + @"\default.fldcfg.xml"; + if (File.Exists(fieldConfigFileName)) + return fieldConfigFileName; + else if (File.Exists(fieldConfigFileDef)) + return fieldConfigFileDef; + else + { + File.Copy(fieldCongifDefault, fieldConfigFileDef); + return fieldConfigFileDef; + }; + } + + private void PreReadShape(string filename) + { + FileStream shapeFileStream = new FileStream(filename, FileMode.Open, FileAccess.Read); + byte[] shapeFileData = new byte[100]; + if (shapeFileStream.Length >= 100) + shapeFileStream.Read(shapeFileData, 0, shapeFileData.Length); + shapeFileStream.Close(); + + int shapetype = readIntLittle(shapeFileData, 32); + if (shapetype != 3) return; + + double MinX = readDoubleLittle(shapeFileData, 36 + 8 * 0); + double MinY = readDoubleLittle(shapeFileData, 36 + 8 * 1); + double MaxX = readDoubleLittle(shapeFileData, 36 + 8 * 2); + double MaxY = readDoubleLittle(shapeFileData, 36 + 8 * 3); + double cx = (MinX + MaxX) / 2.0; + double cy = (MinY + MaxY) / 2.0; + SelectRegion(piru.PointInRegion(cy, cx)); + + } + + private void SelectRegion(int regID) + { + if (regID < 1) return; + foreach (object obj in cb.Items) + { + NI ni = (NI)obj; + if (ni.i == regID) + { + cb.SelectedItem = obj; + break; + }; + }; + } + + private int readIntLittle(byte[] data, int pos) + { + byte[] bytes = new byte[4]; + bytes[0] = data[pos]; + bytes[1] = data[pos + 1]; + bytes[2] = data[pos + 2]; + bytes[3] = data[pos + 3]; + return BitConverter.ToInt32(bytes, 0); + } + + private double readDoubleLittle(byte[] data, int pos) + { + byte[] bytes = new byte[8]; + bytes[0] = data[pos]; + bytes[1] = data[pos + 1]; + bytes[2] = data[pos + 2]; + bytes[3] = data[pos + 3]; + bytes[4] = data[pos + 4]; + bytes[5] = data[pos + 5]; + bytes[6] = data[pos + 6]; + bytes[7] = data[pos + 7]; + return BitConverter.ToDouble(bytes, 0); + } + + private string[] ReadDBFFields(string filename, out Hashtable fieldsType) + { + string dbffile = filename.Substring(0, filename.Length - 4) + ".dbf"; + FileStream dbfFileStream = new FileStream(dbffile, FileMode.Open, FileAccess.Read); + + // Read File Version + dbfFileStream.Position = 0; + int ver = dbfFileStream.ReadByte(); + + // Read Records Count + dbfFileStream.Position = 04; + byte[] bb = new byte[4]; + dbfFileStream.Read(bb, 0, 4); + int total_lines = BitConverter.ToInt32(bb, 0); + + // Read DataRecord 1st Position + dbfFileStream.Position = 8; + bb = new byte[2]; + dbfFileStream.Read(bb, 0, 2); + short dataRecord_1st_Pos = BitConverter.ToInt16(bb, 0); + int FieldsCount = (((bb[0] + (bb[1] * 0x100)) - 1) / 32) - 1; + + // Read DataRecord Length + dbfFileStream.Position = 10; + bb = new byte[2]; + dbfFileStream.Read(bb, 0, 2); + short dataRecord_Length = BitConverter.ToInt16(bb, 0); + + // Read Çàãîëîâêè Ïîëåé + dbfFileStream.Position = 32; + string[] Fields_Name = new string[FieldsCount]; // Ìàññèâ íàçâàíèé ïîëåé + Hashtable fieldsLength = new Hashtable(); // Ìàññèâ ðàçìåðîâ ïîëåé + fieldsType = new Hashtable(); // Ìàññèâ òèïîâ ïîëåé + byte[] Fields_Dig = new byte[FieldsCount]; // Ìàññèâ ðàçìåðîâ äðîáíîé ÷àñòè + int[] Fields_Offset = new int[FieldsCount]; // Ìàññèâ îòñòóïîâ + bb = new byte[32 * FieldsCount]; // Îïèñàíèå ïîëåé: 32 áàéòa * êîë-âî, íà÷èíàÿ ñ 33-ãî + dbfFileStream.Read(bb, 0, bb.Length); + int FieldsLength = 0; + for (int x = 0; x < FieldsCount; x++) + { + Fields_Name[x] = System.Text.Encoding.Default.GetString(bb, x * 32, 10).TrimEnd(new char[] { (char)0x00 }).ToUpper(); + fieldsType.Add(Fields_Name[x], "" + (char)bb[x * 32 + 11]); + fieldsLength.Add(Fields_Name[x], (int)bb[x * 32 + 16]); + Fields_Dig[x] = bb[x * 32 + 17]; + Fields_Offset[x] = 1 + FieldsLength; + FieldsLength = FieldsLength + (int)fieldsLength[Fields_Name[x]]; + + // loadedScript.fieldsType[Fields_Name[x]] == "L" -- System.Boolean + // loadedScript.fieldsType[Fields_Name[x]] == "D" -- System.DateTime + // loadedScript.fieldsType[Fields_Name[x]] == "N" -- System.Int32 (FieldDigs[x] == 0) / System.Decimal (FieldDigs[x] != 0) + // loadedScript.fieldsType[Fields_Name[x]] == "F" -- System.Double + // loadedScript.fieldsType[Fields_Name[x]] == "C" -- System.String + // loadedScript.fieldsType[Fields_Name[x]] == def -- System.String + }; + dbfFileStream.Close(); + + return Fields_Name; + } + + // todo = 0 - ïîëÿ âñåãäà äîëæíû áûòü (LinkID, GarminType, OSM_ID, OSM_SURFACE, SpeedLimit, OneWay); îøèáêà åñëè ïîëåé íåò + // todo = 1 - æåëàòåëüíûå ïîëÿ (OSM_TYPE, OSM_SURFACE, GarminType); íåò îøèáêè åñëè íåò ïîëåé èëè íå óêàçàíû + // todo = 2 - ïðîâåðÿþòñÿ, åñëè óêàçàíû (ROUTE_LEVEL, ROUTE_SPEED, TMC, RGNODE, ...); îøèáêà åñëè óêàçàíû, íî íåò ïîëåé + // todo = 3 - æåëàòåëüíûå ïîëÿ (Length, Name, TurnRestrictions); îøèáêà åñëè óêàçàíû, íî íåò ïîëåé + private void CheckFields(string name, ref string f, List flds, ref string fieldsOk, ref string fieldsBad, ref string fieldsErr, ref string fieldsEdd, ref bool raiseNoFields, byte todo, char fType, Hashtable fTypes, ref string cautions) + { + if ((f != null) && (f != String.Empty) && (flds.Contains(f)) && (fType != '0') && ((string)fTypes[f] != fType.ToString())) + cautions += name + " is not `" + fType.ToString() + "`, "; + + string[] ff = new string[0]; + if ((f != null) && (f != String.Empty)) ff = f.Split(new char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries); + + bool fCont = false; + foreach (string fff in ff) + if (flds.Contains(fff)) + { + f = fff; + fCont = true; + break; + }; + + if (todo == 0) + { + if (fCont) + fieldsOk += name + ", "; + else + { + fieldsErr += name + ", "; + fieldsEdd += name + ", "; + raiseNoFields = true; + }; + }; + if (todo == 1) + { + if (fCont) + fieldsOk += name + ", "; + else + fieldsErr += name + ", "; + }; + if (todo == 2) + { + if ((f != null) && (f != String.Empty)) + { + if (fCont) + fieldsOk += name + ", "; + else + { + fieldsErr += name + ", "; + fieldsEdd += name + ", "; + raiseNoFields = true; + }; + } + else + fieldsBad += name + ", "; + }; + if (todo == 3) + { + if ((f != null) && (f != String.Empty)) + { + if (fCont) + fieldsOk += name + ", "; + else + { + fieldsErr += name + ", "; + fieldsEdd += name + ", "; + raiseNoFields = true; + }; + } + else + fieldsErr += name + ", "; + }; + } + + private void cstreg_CheckedChanged(object sender, EventArgs e) + { + cb.Enabled = !cstreg.Checked; + customreg.Enabled = cstreg.Checked; + } + + private void cb_SelectedIndexChanged(object sender, EventArgs e) + { + btnEx.Visible = (piru != null) && (cb.SelectedIndex >= 0) && (piru.RegionsCount > 0); + } + + private void btnEx_Click(object sender, EventArgs e) + { + if (cb.SelectedIndex < 0) return; + if (piru == null) return; + + if (piru.RegionsCount < 1) return; + NI ni = ((NI)cb.SelectedItem); + int rid = -1; + string rnm = ""; + for (int i = 0; i < piru.RegionsCount; i++) + if (piru.RegionsIDs[i] == ni.i) + { + rid = i; + rnm = ni.n; + }; + if (rid < 0) return; + int sval = 0; + + if (InputBox.QueryListBox("Èçâëå÷åíèå ãðàíèö", "Âûáåðèòå ÷òî õîòèòå èçâëå÷ü:", new string[] { rnm, "*** ÂÑÅ ÐÅÃÈÎÍÛ ***" }, ref sval) != DialogResult.OK) return; + + int km = 0, rfk = 0; + if (InputBox.QueryNumberBox("Óâåëè÷èòü çîíó", "Íà ñêîëüêî êèëîìåòðîâ óâåëè÷èòü çîíó", ref rfk, 0, 500) == DialogResult.OK) + km = rfk; + + if (sval == 0) + { + dkxce.Route.Regions.PointInRegionUtils.Polygon poly = piru.GetRegionPoly(rid); + if (poly == null) return; + + SaveFileDialog sfd = new SaveFileDialog(); + sfd.DefaultExt = ".shp"; + sfd.Filter = "Shape Files (*.shp)|*.shp"; + sfd.Title = "Export Bounds"; + if (sfd.ShowDialog() == DialogResult.OK) + ExtractPoly(poly, sfd.FileName, km); + sfd.Dispose(); + } + else + { + string path = System.Environment.GetFolderPath(System.Environment.SpecialFolder.DesktopDirectory); + if(InputBox.QueryDirectoryBox("Âûáåðèòå ïàïêó","Ïàïêà äëÿ èçâåë÷åíèÿ ãðàíèö:", ref path) != DialogResult.OK) return; + KMZRebuilder.WaitingBoxForm wfb = new KMZRebuilder.WaitingBoxForm("Èçâëå÷åíèå ãðàíèö", "Çàãðóçêà...", this); + wfb.Show(); + for (int i = 0; i < piru.RegionsCount; i++) + { + dkxce.Route.Regions.PointInRegionUtils.Polygon poly = piru.GetRegionPoly(i); + string fName = path + @"\" + String.Format("{0} - {1}.shp", piru.RegionsIDs[i], piru.RegionsNames[i]); + try + { + ExtractPoly(poly, fName, km); + } + catch (Exception ex) + { + wfb.Hide(); + if (MessageBox.Show(ex.Message + "\r\n\r\nÏðîäîëæèòü?", "Error", MessageBoxButtons.YesNo, MessageBoxIcon.Error) == DialogResult.Yes) + wfb.Show(); + else + break; + }; + wfb.Text = String.Format("Îáðàáîòàíî {0} ðåãèîíîâ èç {1} - {2:0.00}%",i+1, piru.RegionsCount, ((double)(i+1))/((double)piru.RegionsCount)*100.0 ); + }; + wfb.Hide(); + wfb = null; + MessageBox.Show("Ãîòîâî", "Èçâëå÷åíèå ãðàíèö", MessageBoxButtons.OK, MessageBoxIcon.Information); + }; + } + + private void ExtractPoly(dkxce.Route.Regions.PointInRegionUtils.Polygon poly, string fileName, int enlargeKm) + { + string fext = Path.GetExtension(fileName); + + string box = fileName.Replace(fext, "_[box].shp"); + string ext = fileName.Replace(fext, "_[ext].shp"); + + string kml = fileName.Replace(fext, ".kml"); + string kmb = fileName.Replace(fext, "_[box].kml"); + string kme = fileName.Replace(fext, "_[ext].kml"); + + string bbb = fileName.Replace(fext, "_[box].txt"); + string bbe = fileName.Replace(fext, "_[ext].txt"); + + Save2Shape(fileName, poly.points); + Save2KML(kml, poly.points); + + Save2TextUrl(bbb, Poly2TextUrl(poly.box)); + Save2Shape(box, poly.box); + Save2KML(kmb, poly.box); + + if (enlargeKm > 0) + { + double[] enl = Enlarge(poly.box, enlargeKm); + Save2TextUrl(bbe, Poly2TextUrl(enl)); + Save2Shape(ext, enl); + Save2KML(kme, enl); + }; + } + + private double[] Enlarge(double[] box, double dist_in_km) + { + double[] res = new double[4]; + double lon_min = box[0]; + double lat_min = box[1]; + double lon_max = box[2]; + double lat_max = box[3]; + double d_buttom = 1.0 / (dkxce.Route.Classes.Utils.GetLengthMetersA(lat_min - 1, (lon_min + lon_max) / 2, lat_min, (lon_min + lon_max) / 2, false) / 1000.0) * dist_in_km; + double d_top = 1.0 / (dkxce.Route.Classes.Utils.GetLengthMetersA(lat_max, (lon_min + lon_max) / 2, lat_max + 1, (lon_min + lon_max) / 2, false) / 1000.0) * dist_in_km; + double d_left = 1.0 / (dkxce.Route.Classes.Utils.GetLengthMetersA((lat_min + lat_max) / 2, lon_min - 1, (lat_min + lat_max) / 2, lon_min, false) / 1000.0) * dist_in_km; + double d_right = 1.0 / (dkxce.Route.Classes.Utils.GetLengthMetersA((lat_min + lat_max) / 2, lon_max, (lat_min + lat_max) / 2, lon_max + 1, false) / 1000.0) * dist_in_km; + res = new double[4] { box[0] - d_buttom, box[1] - d_left, box[2] + d_top, box[3] + d_right }; + return res; + } + + public static string Poly2TextUrl(double[] box) + { + PointF[] pass = new PointF[4] { new PointF((float)box[0], (float)box[1]), new PointF((float)box[2], (float)box[1]), new PointF((float)box[2], (float)box[3]), new PointF((float)box[0], (float)box[3]) }; + return Poly2TextUrl(pass); + } + + public static string Poly2TextUrl(PointF[] poly) + { + // [BBIKE_EXTRACT_LINK] // + double xmin = double.MaxValue; + double ymin = double.MaxValue; + double xmax = double.MinValue; + double ymax = double.MinValue; + + string pll = ""; + for (int i = 0; i < poly.Length; i++) + { + xmin = Math.Min(xmin, poly[i].X); + ymin = Math.Min(ymin, poly[i].Y); + xmax = Math.Max(xmax, poly[i].X); + ymax = Math.Max(ymax, poly[i].Y); + if (pll.Length > 0) + pll += "|"; + pll += String.Format(System.Globalization.CultureInfo.InvariantCulture, + "{0},{1}", poly[i].X, poly[i].Y); + }; + + string url = "https://extract.bbbike.org/"; + url += String.Format(System.Globalization.CultureInfo.InvariantCulture, + "?sw_lng={0}&sw_lat={1}&ne_lng={2}&ne_lat={3}", + xmin, ymin, xmax, ymax); + url += "&format=mapsforge-osm.zip"; + url += "&coords=" + pll; + url += "&city=Noname"; + url += "&lang=en"; + + return url; + } + + public static void Save2TextUrl(string filename, string url) + { + if (filename == null) return; + + FileStream fs = new FileStream(filename, FileMode.Create, FileAccess.Write); + StreamWriter sw = new StreamWriter(fs, Encoding.ASCII); + sw.WriteLine("[BBIKE_EXTRACT_LINK]"); + sw.WriteLine(url); + sw.Close(); + fs.Close(); + } + + public static void Save2Shape(string filename, double[] box) + { + PointF[] pass = new PointF[4] { new PointF((float)box[0], (float)box[1]), new PointF((float)box[2], (float)box[1]), new PointF((float)box[2], (float)box[3]), new PointF((float)box[0], (float)box[3]) }; + Save2Shape(filename, pass); + } + + public static void Save2Shape(string filename, dkxce.Route.Classes.PointF[] poly) + { + PointF[] pass = new PointF[poly.Length]; + for (int i = 0; i < poly.Length; i++) + pass[i] = new PointF(poly[i].X, poly[i].Y); + Save2Shape(filename, pass); + } + + public static void Save2Shape(string filename, PointF[] poly) + { + double xmin = double.MaxValue; + double ymin = double.MaxValue; + double xmax = double.MinValue; + double ymax = double.MinValue; + + for (int i = 0; i < poly.Length; i++) + { + xmin = Math.Min(xmin, poly[i].X); + ymin = Math.Min(ymin, poly[i].Y); + xmax = Math.Max(xmax, poly[i].X); + ymax = Math.Max(ymax, poly[i].Y); + }; + + List arr = new List(); + arr.AddRange(Convert(BitConverter.GetBytes((int)9994), false)); // File Code + arr.AddRange(new byte[20]); // Not used + arr.AddRange(Convert(BitConverter.GetBytes((int)((100 + 8 + 48 + 16 * poly.Length) / 2)), false)); // File_Length / 2 + arr.AddRange(Convert(BitConverter.GetBytes((int)1000), true)); // Version 1000 + arr.AddRange(Convert(BitConverter.GetBytes((int)5), true)); // Polygon Type + arr.AddRange(Convert(BitConverter.GetBytes((double)xmin), true)); + arr.AddRange(Convert(BitConverter.GetBytes((double)ymin), true)); + arr.AddRange(Convert(BitConverter.GetBytes((double)xmax), true)); + arr.AddRange(Convert(BitConverter.GetBytes((double)ymax), true)); + arr.AddRange(new byte[32]); // end of header + + arr.AddRange(Convert(BitConverter.GetBytes((int)1), false)); // rec number + arr.AddRange(Convert(BitConverter.GetBytes((int)((48 + 16 * poly.Length) / 2)), false));// rec_length / 2 + arr.AddRange(Convert(BitConverter.GetBytes((int)5), true)); // rec type polygon + arr.AddRange(Convert(BitConverter.GetBytes((double)xmin), true)); + arr.AddRange(Convert(BitConverter.GetBytes((double)ymin), true)); + arr.AddRange(Convert(BitConverter.GetBytes((double)xmax), true)); + arr.AddRange(Convert(BitConverter.GetBytes((double)ymax), true)); + arr.AddRange(Convert(BitConverter.GetBytes((int)1), true)); // 1 part + arr.AddRange(Convert(BitConverter.GetBytes((int)poly.Length), true)); // 4 points + arr.AddRange(Convert(BitConverter.GetBytes((int)0), true)); // start at 0 point + + for (int i = 0; i < poly.Length; i++) + { + arr.AddRange(Convert(BitConverter.GetBytes((double)poly[i].X), true)); // point 0 x + arr.AddRange(Convert(BitConverter.GetBytes((double)poly[i].Y), true)); // point 0 y + }; + + FileStream fs = new FileStream(filename, FileMode.Create, FileAccess.Write); + fs.Write(arr.ToArray(), 0, arr.Count); + fs.Close(); + } + + public static void Save2KML(string filename, double[] box) + { + PointF[] pass = new PointF[4] { new PointF((float)box[0], (float)box[1]), new PointF((float)box[2], (float)box[1]), new PointF((float)box[2], (float)box[3]), new PointF((float)box[0], (float)box[3]) }; + Save2KML(filename, pass); + } + + public static void Save2KML(string filename, dkxce.Route.Classes.PointF[] poly) + { + PointF[] pass = new PointF[poly.Length]; + for (int i = 0; i < poly.Length; i++) + pass[i] = new PointF(poly[i].X, poly[i].Y); + Save2KML(filename, pass); + } + + public static void Save2KML(string filename, PointF[] poly) + { + FileStream fs = new FileStream(filename, FileMode.Create, FileAccess.Write); + StreamWriter sw = new StreamWriter(fs, System.Text.Encoding.UTF8); + sw.WriteLine(""); + sw.WriteLine(""); + sw.WriteLine("My Polygon"); + sw.Write("1"); + foreach (PointF p in poly) + sw.Write(string.Format(System.Globalization.CultureInfo.InvariantCulture, "{0},{1},0 ", p.X, p.Y)); + sw.WriteLine(""); + sw.WriteLine(""); + sw.WriteLine(""); + sw.Close(); + fs.Close(); + } + + public static byte[] Convert(byte[] ba, bool bigEndian) + { + if (BitConverter.IsLittleEndian != bigEndian) Array.Reverse(ba); + return ba; + } + + private void shapesBBox2RegionsToolStripMenuItem_Click(object sender, EventArgs e) + { + try + { + System.Diagnostics.Process.Start(@"..\TOOLS\ShapesBBox2Regions.exe"); + } + catch { }; + } + + private void mergeShapesMergerToolStripMenuItem_Click(object sender, EventArgs e) + { + try + { + System.Diagnostics.Process.Start(@"..\TOOLS\ShapesMerger.exe"); + } + catch { }; + } + + private void extractShapesPolygonsExtractorToolStripMenuItem_Click(object sender, EventArgs e) + { + try + { + System.Diagnostics.Process.Start(@"..\TOOLS\ShapesPolygonsExtractor.exe"); + } + catch { }; + } + + private void button1_Click(object sender, EventArgs e) + { + contextMenuStrip1.Show(button1, new Point(0, button1.Height)); + } + } + + public struct NI + { + public string n; + public int i; + public NI(string n, int i) + { + this.n = n; + this.i = i; + } + public override string ToString() + { + return n; + } + } + + [Serializable] + public class BatchParams + { + public string Graphs = "GRAPHS"; + public string Regions = "Regions"; + //public string RGNodes = "RGNodes"; + public string RGWays = "RGWays"; + } +} \ No newline at end of file diff --git a/SOLVER/RouteGraphBatcher/RGBForm.resx b/SOLVER/RouteGraphBatcher/RGBForm.resx new file mode 100644 index 0000000..bb6daa9 --- /dev/null +++ b/SOLVER/RouteGraphBatcher/RGBForm.resx @@ -0,0 +1,1672 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 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 + + + 17, 17 + + + + + AAABAAgAMDAAAAEACACoDgAAhgAAACAgAAABAAgAqAgAAC4PAAAQEAAAAQAIAGgFAADWFwAAgIAAAAEA + IAAoCAEAPh0AADAwAAABACAAqCUAAGYlAQAgIAAAAQAgAKgQAAAOSwEAGBgAAAEAIACICQAAtlsBABAQ + AAABACAAaAQAAD5lAQAoAAAAMAAAAGAAAAABAAgAAAAAAAAJAAAAAAAAAAAAAAABAAAAAQAAAAAAACws + LQAwLC4AMTAvAC4uMgAxLjAAMzIzADg2NwA1NjgAOTc5ADc4OgA7OzsAQD0+AEE/QABDQ0QASEdDAEtL + SwBTUlIAWVZdAFpbWwBiXHkAWmlhAFZwZABiYmIAYWlnAGppZQBmamoAa2trAGpxbgBqa3AAc3NzAHV8 + eQB7e3sAg3x1AH6BfgCIoXMAmKV/ADtdhQA4U5sAP2KWADlBqABJa5gATXaWAFF4lgBpZoMAaHuGAH58 + jABFRacAU3CgAFVjsgBoeasAAADJACIizQAjI9MAPF3BAE5a0wBca9MAfHzTAHt74QBdjJQAYYyGAHyH + ggBrnocAdZ2KAGCBngB9i5QAZJSVAHacnwBuqYoAe6aOAHKtjgB+rIgAdLKPAGuklAB0rJIAebOTAFyJ + vgBqhKIAdIesAHaVpAB2ibQAZZ68AH6UtAByrLoAd7a4AFuEwQBoiMoAcpbIAG+F1wCEg4MAiIeDAISJ + iQCKi4oAkY+MAImTjgCWlI4AmJaPAImMlwCOnZYAlJSTAJKZlQCbnJUAm5eZAJ2cnQCJp4IAlaaDAJSj + nQCGuJwAqqeEALOphgCioJsAs7eVAIWarACWnKYAjYG2AJONuACPlLMAop6gAIumqwCdqqMAjbeiAJq5 + qQCFprMAmaa3AJausQCaqb0AnLe5AKSmpQCirKUArKysAKG6rQC6taQAsqSxAKK9sACxsbEAsL23AL29 + vQDGsYwAy7mYANC8mwDKv64Al8usAJzWrACFyLcAncmwAI7ctQCX1rAAnNayAJLbtQCd2rMAk924AJ3e + vQCjxKsApdeqAL3UpgCnw7MAssa4AKrXtACk2rcAq9+wAKnSvACg378At9WzAJbhuACm5LsA1sWoAMfS + pQDW1aUAzcqwANTNuwDbz7gA5tutAOrVugDw3rEA0uCyAO/qvADz4LMA/eS2AP/rtgD+7L0A//O/AISE + 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 + AAD//wAA8AAAAD//AADwAAAAP/8AAPAAAAAf/wAA8AAAAB//AADwAAAAH/8AAPgAAAAP/wAA+AAAAA// + AAD4AAAAB/8AAOAAAAAH/wAAwAAAAAf/AACAAAAAA/8AAIAAAAAA/wAAwAAAAAB/AADwAAAAAB8AAPgA + AAAADwAA/gAAAAADAAD/AAAAAAEAAP/AAAAAAAAA/+AAAAADAAD/4AAAAAcAAP/gAAAADwAA//AAAAA/ + AAD/8AAAAH8AAP/4AAAA/wAA//gAAAP/AAD/+AAAB/8AAP/8AAAf/wAA//wAAD//AAD//wAAf/8AAP// + gAH//wAA///gA///AAD///AH//8AAP///B///wAA///+P///AAD///9///8AACgAAAAgAAAAQAAAAAEA + CAAAAAAAAAQAAAAAAAAAAAAAAAEAAAABAAAAAAAANDQ0ADk2OgA8OzwAQz8/AD8+QQBAPUEARENEAEVG + SQBMTEwATk9QAFNTUwBYV1cAV1hXAF1bVgBcXFwAWWFdAGBfYABeaWIAYmJiAGRpaABqamoAbXBtAHRx + aQBtdX4AcnJyAHd9egB9fX0AcoV/AFp3hgBSepYAUHeYAGl3rQAMDNAAMjLGAD4+zQBqedYAVYOUAFmF + lABbi5QAYY2NAHqMggBwk4EAfJaMAHmZjABhipkAfIOTAHiOlwBomZUAbquPAHSjiQBzro4AaaKUAHet + kQB9rZkAd7eTAHywlwB/uZMAU4W7AGqEpQB6ja4AdZavAHmRqgB1iroAbaq3AHGsuAB6nM0AeqDJAISD + gwCOhocAg4mFAIuKhACMjIwAlo+DAIGYjACUkYYAkYWQAIyTkACMm5QAk5OTAJ2cnACmnJEAi6yJAJ2p + iACHsokAhqSWAJSllgCTo5oAh7CUAIWznACJtZwAgrmbAIi6mgCtr4oAuLidAIGXrACBlLAAhqamAIql + qgCbpKAAm6qjAJCnrgCQqqgAjrmhAJO4pgCUs6gAnLqrAJqtvgCHsLAAm7KzAJ+5swCkpKMAqqysAKq+ + pACusasAoruuALC4oACsrrQAsbGxALy1sQC+s70Aurq7AMqyiwDAuI0AzLaTANG7nADOv6IAwb2qAMm2 + vgCRwqcAm8CoAIjPswCfxLsAj9qzAJXTtACV3rgAmNy6AKPOrQCwzKMAtsCuAKvarACz2awAu9utAKXB + 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 + iQCOkpMAlJiQAJmZmQCDqp4AkqOXAJ+slACQpZgAmKyeAISarQCBpqsAkqygAJetogCBsKIAj7WiAJG4 + pQCZvKQAnLaoAJivsgCcsrYApaWkAKemqQCpqakAobasAK6zrQCkvbYArr29ALW2tQCIx6cAidC2AK3E + sQCpwLYAoM21AKvLuAC00bsAt9m+AMTBmgDIwKYAxMyvAM7KuwDMzrgA3ti1ANDUvADw2roA3eC3ANvh + uQD/7r8Ak7PWAKG3xwC2tssAra3cAJLDxgCUwMsAntjCAKvRzwC10sAAtdXBALDTzgCiydQAs8jRAKzV + 1ACl0NoAs9veAMLCwgDGxsYAydLNAM/R1ADW1NQA2NjWAPHdzADQ8cwAwObWAMzq2gDN7doAx/LXAMb3 + 2gDh4d4A1tboAOXl4QDk5OUA6+rrAOzs7ADz8+8A6Of3AO3t+QDz7/EA8vLyAPX18wD19fUA+PjzAPT0 + /AD6+voA///6AP/9/gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADQwUAAAAAAAAAAAAAAAlAztnKgMAAAAAAAAAAAAA + AUJ4goJnAwAAAAAAAAAAAj19dXN1fSgHAAAAAAAAAAx9eXRYa4JBTRgAAAAAAAANfXsaWYB9M1RSBgAA + AAAAFD16gYJ4PCxLLQ8AAAAAER5DP2pqQiweHCMvDQAAACUWSU9fV0Y2Gx83UEwMAAAAAAtGcEAwIisx + SlVsTxcnAAAACz45ITVfXFs5UW0yEQAAAAAZNCBicURaZF0SAAAAAAAABUdwXVZhckgIAAAAAAAAAAAm + bmVgaCkUAAAAAAAAAAAAAAc4VA4AAAAAAAAAAAAAAAAAFAkAAAAAAAAA8f8AAMD/AADAfwAAgD8AAIAf + AACADwAAgA8AAAAHAAAAAwAAwAAAAOAAAADwAwAA8AcAAPgPAAD8PwAA/n8AACgAAACAAAAAAAEAAAEA + IAAAAAAAAAgBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAzMzMwMzMzcDMz + M48zMzO/MzMz3zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzPvMzMzvzMzM58zMzNwMzMzQAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAADMzM1AzMzOfMzMz7zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMz + M/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM68zMzNgMzMzEAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMzMzIDMzM48zMzPvMzMz/zMzM/8zMzP/MzMz/zMz + M/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMz + M/8zMzP/MzMz/zMzM/8zMzP/MzMznzMzMzAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMzMzIDMz + M58zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMz + M/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMz + M78zMzMwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAMzMzEDMzM4AzMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/05O + Tv9+fn7/nZ2d/7W1tf/a2tr/39/f/+Tk5P/p6en/7u7u//Pz8//4+Pj//v7+//z8/P/T09P/xMTE/5KS + kv9tbW3/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzOfMzMzEAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADMzMzAzMzPfMzMz/zMz + M/8zMzP/MzMz/zMzM/8zMzP/SkpK/35+fv+tra3/xMTE/8nJyf/Ozs7/1NTU/9ra2v/f39//5OTk/+np + 6f/u7u7/8/Pz//j4+P/+/v7//Pz8//n5+f/19fX/8vLy/+/v7//g4OD/pKSk/2pqav8zMzP/MzMz/zMz + M/8zMzP/MzMz/zMzM/8zMzPvMzMzUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAzMzNwMzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/Y2Nj/5ubm/+xsbH/ubm5/7+/ + v//ExMT/ycnJ/87Ozv/U1NT/2tra/9/f3//k5OT/6enp/+7u7v/z8/P/+Pj4//7+/v/8/Pz/+fn5//X1 + 9f/y8vL/7+/v/+zs7P/o6Oj/5eXl/9fX1/+JiYn/PT09/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMzjwAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMzMznzMzM/8zMzP/MzMz/zMz + M/8zMzP/UFBQ/5OTk/+ioqL/qqqq/7Gxsf+5ubn/v7+//8TExP/Jycn/zs7O/9TU1P/a2tr/39/f/+Tk + 5P/p6en/7u7u//Pz8//4+Pj//v7+//z8/P/5+fn/9fX1//Ly8v/v7+//7Ozs/+jo6P/l5eX/4uLi/9/f + 3//c3Nz/e3t7/z09Pf8zMzP/MzMz/zMzM/8zMzP/MzMzvzMzMxAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAMzMzEDMzM88zMzP/MzMz/zMzM/8zMzP/Nzc3/3Nzc/+SkpL/mpqa/6Kiov+qqqr/sbGx/7m5 + uf+/v7//xMTE/8nJyf/Ozs7/1NTU/9ra2v/f39//5OTk/+np6f/u7u7/8/Pz//j4+P/+/v7//Pz8//n5 + +f/19fX/8vLy/+/v7//s7Oz/6Ojo/+Xl5f/i4uL/39/f/9zc3P/Z2dn/wMDA/1BQUP8zMzP/MzMz/zMz + M/8zMzP/MzMzzzMzMxAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADMzMxAzMzPPMzMz/zMzM/8zMzP/MzMz/0RE + RP99fX3/iYmJ/5KSkv+ampr/oqKi/6qqqv+xsbH/ubm5/7+/v//ExMT/ycnJ/87Ozv/U1NT/2tra/9/f + 3//k5OT/6enp/+7u7v/z8/P/+Pj4//7+/v/8/Pz/+fn5//X19f/y8vL/7+/v/+zs7P/o6Oj/5eXl/+Li + 4v/f39//3Nzc/9nZ2f/V1dX/0tLS/3d3d/8zMzP/MzMz/zMzM/8zMzP/MzMzzzMzMxAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAMzMzrzMzM/8zMzP/MzMz/zY2Nv9aWlr/enp6/4KCgv+JiYn/kpKS/5qamv+ioqL/qqqq/7Gx + sf+5ubn/v7+//8TExP/Jycn/zs7O/9TU1P/a2tr/39/f/+Tk5P/p6en/7u7u//Pz8//4+Pj//v7+//z8 + /P/5+fn/9fX1//Ly8v/v7+//7Ozs/+jo6P/l5eX/4uLi/9/f3//c3Nz/2dnZ/9XV1f/S0tL/z8/P/6+v + r/9GRkb/MzMz/zMzM/8zMzP/MzMzzzMzMxAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADMzM48zMzP/MzMz/zMzM/82Njb/XV1d/3Jy + cv96enr/goKC/4mJif+SkpL/mpqa/6Kiov+qqqr/sbGx/7m5uf+/v7//xMTE/8nJyf/Ozs7/1NTU/9ra + 2v/f39//5OTk/+np6f/u7u7/8/Pz//j4+P/+/v7//Pz8//n5+f/19fX/8vLy/+/v7//s7Oz/6Ojo/+Xl + 5f/i4uL/39/f/9zc3P/Z2dn/1dXV/9LS0v/Pz8//zMzM/8LCwv9PT0//MzMz/zMzM/8zMzP/MzMzvwAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAzMzNQMzMz/zMzM/8zMzP/MzMz/1lZWf9ra2v/cnJy/3p6ev+CgoL/iYmJ/5KSkv+ampr/oqKi/6qq + qv+xsbH/ubm5/7+/v//ExMT/ycnJ/87Ozv/U1NT/2tra/9/f3//k5OT/6enp/+7u7v/z8/P/+Pj4//7+ + /v/8/Pz/+fn5//X19f/y8vL/7+/v/+zs7P/o6Oj/5eXl/+Li4v/f39//3Nzc/9nZ2f/V1dX/0tLS/8/P + z//MzMz/zMzM/8LCwv9PT0//MzMz/zMzM/8zMzP/MzMzgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMzMzEDMzM+8zMzP/MzMz/zMzM/9SUlL/ZmZm/2tr + a/9ycnL/enp6/4KCgv+JiYn/kpKS/5qamv+ioqL/qqqq/7Gxsf+5ubn/v7+//8TExP/W1tb/4+Pj/+zs + 7P/19fX/9/f3//j4+P/5+fn/+vr6//z8/P/9/f3//v7+//7+/v/8/Pz/+vr6//X19f/w8PD/7Ozs/+jo + 6P/l5eX/4uLi/9/f3//c3Nz/2dnZ/9XV1f/S0tL/z8/P/8zMzP/MzMz/zMzM/6+vr/88PDz/MzMz/zMz + M/8zMzP/MzMzMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAzMzOPMzMz/zMzM/8zMzP/SUlJ/2ZmZv9mZmb/a2tr/3Jycv96enr/goKC/4mJif+SkpL/mpqa/6Ki + ov+qqqr/sbGx/87Ozv/n5+f/+/v7//////////////////n5+f/39/f/9/f3//f39//39/f/9/f3//f3 + 9//39/f/9/f3//39/f/////////////////5+fn/8PDw/+bm5v/i4uL/39/f/9zc3P/Z2dn/1dXV/9LS + 0v/Pz8//zMzM/8zMzP/MzMz/zMzM/5KSkv8zMzP/MzMz/zMzM/8zMzO/AAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMzMzIDMzM/8zMzP/MzMz/zk5Of9iYmL/ZmZm/2Zm + Zv9ra2v/cnJy/3p6ev+CgoL/iYmJ/5KSkv+ampr/s7Oz/9/f3//6+vr////////////19fX/7e3t/+fn + 5//g4OD/4ODg/+Dg4P/g4OD/4ODg/+Dg4P/g4OD/4ODg/+Dg4P/g4OD/4ODg/+Pj4//r6+v/8fHx//39 + /f////////////X19f/n5+f/3Nzc/9nZ2f/V1dX/0tLS/8/Pz//MzMz/zMzM/8zMzP/MzMz/zMzM/2xs + bP8zMzP/MzMz/zMzM/8zMzNAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAzMzOPMzMz/zMzM/8zMzP/WVlZ/2ZmZv9mZmb/ZmZm/2tra/9ycnL/enp6/4KCgv+JiYn/mJiY/9/f + 3/////////////n5+f/s7Oz/4+Pj/+Li4v/i4uL/4uLi/+Li4v/i4uL/4uLi/+Li4v/i4uL/4uLi/+Li + 4v/i4uL/4uLi/+Li4v/i4uL/4uLi/+Li4v/i4uL/4uLi/+vr6//19fX////////////4+Pj/4ODg/9XV + 1f/S0tL/z8/P/8zMzP/MzMz/zMzM/8zMzP/MzMz/wsLC/zw8PP8zMzP/MzMz/zMzM78AAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADMzM+8zMzP/MzMz/z8/P/9mZmb/ZmZm/2Zm + Zv9mZmb/a2tr/3Jycv96enr/goKC/8TExP////////////n5+f/r6+v/4+Pj/+Pj4//j4+P/4+Pj/+Pj + 4//j4+P/4+Pj/+Pj4//j4+P/4+Pj/+Pj4//j4+P/4+Pj/+Pj4//j4+P/4+Pj/+Pj4//j4+P/4+Pj/+Pj + 4//j4+P/4+Pj/+Pj4//m5ub/9PT0////////////8fHx/9TU1P/Pz8//zMzM/8zMzP/MzMz/zMzM/8zM + zP/MzMz/f39//zMzM/8zMzP/MzMz/zMzMyAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAzMzNQMzMz/zMzM/8zMzP/UlJS/2ZmZv9mZmb/ZmZm/2ZmZv9ra2v/cnJy/4KCgv/f39////////39 + /f/u7u7/5OTk/+Tk5P/k5OT/5OTk/+Tk5P/k5OT/5OTk/+Tk5P/k5OT/5OTk/+Tk5P/k5OT/5OTk/+Tk + 5P/k5OT/5OTk/+Tk5P/k5OT/5OTk/+Tk5P/k5OT/5OTk/+Tk5P/k5OT/5OTk/+Tk5P/k5OT/6urq//n5 + +f//////+fn5/9jY2P/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/CwsL/MzMz/zMzM/8zMzP/MzMzzzMz + MyAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADMzM58zMzP/MzMz/zY2Nv9iYmL/ZmZm/2Zm + Zv9mZmb/ZmZm/2tra/+mpqb/9vb2///////6+vr/6enp/+bm5v/m5ub/5ubm/+bm5v/m5ub/5ubm/+bm + 5v/m5ub/5ubm/+bm5v/m5ub/5ubm/+bm5v/m5ub/5ubm/+bm5v/m5ub/5ubm/+bm5v/m5ub/5ubm/+bm + 5v/m5ub/5ubm/+bm5v/m5ub/5ubm/+bm5v/m5ub/5+fn//X19f///////////+jo6P/MzMz/zMzM/8zM + zP/MzMz/zMzM/8zMzP9iYmL/MzMz/zMzM/8zMzP/MzMz7zMzM3AAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAMzMzzzMzM/8zMzP/QkJC/2ZmZv9mZmb/ZmZm/2ZmZv9mZmb/vr6+////////////8/Pz/+jo + 6P/n5+f/5+fn/+fn5//n5+f/5+fn/+fn5//n5+f/5+fn/+fn5//n5+f/5+fn/+fn5//n5+f/5+fn/+fn + 5//n5+f/5+fn/+fn5//n5+f/5+fn/+fn5//n5+f/5+fn/+fn5//n5+f/5+fn/+fn5//n5+f/5+fn/+fn + 5//n5+f/5+fn//Dw8P/9/f3///////Ly8v/Pz8//zMzM/8zMzP/MzMz/zMzM/5KSkv8zMzP/MzMz/zMz + M/8zMzP/MzMz/zMzM78zMzMgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAzMzP/MzMz/zMzM/9PT0//ZmZm/2Zm + Zv9mZmb/ZmZm/7Kysv///////f39/+3t7f/o6Oj/6Ojo/+jo6P/o6Oj/6Ojo/+jo6P/o6Oj/6Ojo/+jo + 6P/o6Oj/6Ojo/+jo6P/o6Oj/6Ojo/+jo6P/o6Oj/6Ojo/+jo6P/o6Oj/6Ojo/+jo6P/o6Oj/6Ojo/+jo + 6P/o6Oj/6Ojo/+jo6P/o6Oj/6Ojo/+jo6P/o6Oj/6Ojo/+jo6P/o6Oj/6Ojo/+rq6v/6+vr///////Ly + 8v/MzMz/zMzM/8zMzP/MzMz/uLi4/zMzM/8zMzP/Pj4+/zMzM/8zMzP/MzMz/zMzM/8zMzOAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAMzMzMDMzM/8zMzP/MzMz/1lZWf9mZmb/ZmZm/2ZmZv+oqKj///////39/f/t7e3/6urq/+rq + 6v/q6ur/6urq/+rq6v/q6ur/6urq/+rq6v/q6ur/6urq/+rq6v/q6ur/6urq/+rq6v/q6ur/6urq/+rq + 6v/q6ur/6urq/+rq6v/q6ur/6urq/+rq6v/q6ur/6urq/+rq6v/q6ur/6urq/+rq6v/q6ur/6urq/+rq + 6v/q6ur/6urq/+rq6v/q6ur/6urq/+vr6//7+/v//////+/v7//MzMz/zMzM/8zMzP/MzMz/MzMz/zMz + M//l5eX/cnJy/zMzM/8zMzP/MzMz/zMzM/8zMzPPMzMzMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAzMzNAMzMz/zMzM/8zMzP/YmJi/2Zm + Zv9mZmb/jIyM////////////8PDw/+vr6//r6+v/6+vr/+vr6//r6+v/6+vr/+vr6//r6+v/6+vr/+vr + 6//r6+v/6+vr/+vr6//r6+v/4ODg/8fHx/+tra3/np6e/5mZmf+ZmZn/mZmZ/5mZmf+ZmZn/ra2t/7y8 + vP/b29v/6+vr/+vr6//r6+v/6+vr/+vr6//r6+v/6+vr/+vr6//r6+v/6+vr/+vr6//r6+v/6+vr/+zs + 7P/9/f3//////+Xl5f/MzMz/zMzM/8zMzP9ZWVn/MzMz/4Kzmv/d8+j/v7+//z8/P/8zMzP/MzMz/zMz + M/8zMzP/MzMzgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAADMzM0AzMzP/MzMz/zMzM/9mZmb/ZmZm/29vb//19fX///////T09P/s7Oz/7Ozs/+zs + 7P/s7Oz/7Ozs/+zs7P/s7Oz/7Ozs/+zs7P/s7Oz/7Ozs/+zs7P/s7Oz/5ubm/729vf+enp7/o6Oj/729 + vf/X19f/19fX/9fX1//X19f/19fX/9fX1/+9vb3/o6Oj/5mZmf+ysrL/4eHh/+zs7P/s7Oz/7Ozs/+zs + 7P/s7Oz/7Ozs/+zs7P/s7Oz/7Ozs/+zs7P/s7Oz/7Ozs/+/v7////////////9jY2P/MzMz/zMzM/1lZ + Wf8zMzP/e7GW/5Tbt/+54cb/8Ovn/39/f/8zMzP/MzMz/zMzM/8zMzP/MzMzzzMzM0AAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMzMzQDMzM/8zMzP/MzMz/2Zm + Zv9mZmb/vLy8///////6+vr/7u7u/+7u7v/u7u7/7u7u/+7u7v/u7u7/7u7u/+7u7v/u7u7/7u7u/+7u + 7v/u7u7/7u7u/97e3v+oqKj/qKio/9PT0//u7u7/7u7u/+7u7v/u7u7/7u7u/+7u7v/u7u7/7u7u/+7u + 7v/u7u7/3t7e/6ioqP+enp7/09PT/+7u7v/u7u7/7u7u/+7u7v/u7u7/7u7u/+7u7v/u7u7/7u7u/+7u + 7v/u7u7/7u7u//b29v//////9fX1/8zMzP/MzMz/WVlZ/zMzM/97sZb/lNu3/5Tbt/9rZLP/r6/v/8zM + zP9MTEz/MzMz/zMzM/8zMzP/MzMz/zMzM48zMzMQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAzMzNAMzMz/zMzM/8zMzP/ZmZm/3l5ef////////////Hx8f/v7+//7+/v/+/v + 7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//Ozs7/mZmZ/7m5uf/p6en/7+/v/+/v + 7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/76+vv+enp7/ubm5/+/v + 7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+/v//39/f//////39/f/8zM + zP9ZWVn/MzMz/3uxlv+Kzbj/JTbG/zIpsv/u28H//vDU//Lw7v+MjIz/MzMz/zMzM/8zMzP/MzMz/zMz + M98zMzNAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADMzM0AzMzP/MzMz/zMz + M/9mZmb/xcXF///////5+fn/8PDw//Dw8P/w8PD/8PDw//Dw8P/w8PD/8PDw//Dw8P/w8PD/8PDw//Dw + 8P/w8PD/1NTU/56env/U1NT/8PDw//Dw8P/w8PD/8PDw//Dw8P/w8PD/8PDw//Dw8P/w8PD/8PDw//Dw + 8P/w8PD/8PDw//Dw8P/w8PD/6enp/7u7u/+YmJj/v7+///Dw8P/w8PD/8PDw//Dw8P/w8PD/8PDw//Dw + 8P/w8PD/8PDw//Dw8P/w8PD/9fX1///////4+Pj/zMzM/1lZWf8zMzP/Vnqb/wkNyv9Te8D/pcmc//fZ + q//+6sH//uvE//746//MzMz/TExM/zMzM/8zMzP/MzMz/zMzM/8zMzOPMzMzEAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAMzMzQDMzM/8zMzP/MzMz/2ZmZv/19fX///////T09P/y8vL/8vLy//Ly + 8v/y8vL/8vLy//Ly8v/y8vL/8vLy//Ly8v/y8vL/8vLy/+bm5v+enp7/0NDQ//Ly8v/y8vL/8vLy//Ly + 8v/y8vL/8vLy//Ly8v/y8vL/8vLy//Ly8v/y8vL/8vLy//Ly8v/v7+//4+Pj/9PT0/+ZmZn/o6Oj/+Hh + 4f+ZmZn/1tbW//Ly8v/y8vL/8vLy//Ly8v/y8vL/8vLy//Ly8v/y8vL/8vLy//Ly8v/y8vL//v7+//// + ///V1dX/WVlZ/zMzM/8fKKP/eLG6/5Tbt/+U27f/7sSO//7qwf/+6sH//urB//7v0P/y7+r/jIyM/zMz + M/8zMzP/MzMz/zMzM/8zMzPvMzMzUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAzMzNAMzMz/zMz + M/8zMzP/lZWV///////9/f3/8/Pz//Pz8//z8/P/8/Pz//Pz8//z8/P/8/Pz//Pz8//z8/P/8/Pz//Pz + 8//z8/P/urq6/7q6uv/z8/P/8/Pz//Pz8//z8/P/8/Pz//Pz8//z8/P/8/Pz//Pz8//z8/P/8/Pz//Pz + 8//r6+v/2tra/87Ozv/FxcX/f39//4CAgP/z8/P/8/Pz/8bGxv+kpKT/8/Pz//Pz8//z8/P/8/Pz//Pz + 8//z8/P/8/Pz//Pz8//z8/P/8/Pz//Pz8//6+vr//////+jo6P9ZWVn/MzMz/4a0nP+U27f/lNu3/5Tb + t//awYz//urB//7qwf/+6sH//urB//7rxP/+9eP/2NjY/1lZWf8zMzP/MzMz/zMzM/8zMzP/MzMzrzMz + MxAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAADMzM0AzMzP/MzMz/zMzM/+ysrL///////r6+v/09PT/9PT0//T0 + 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P+kpKT/4uLi//T09P/09PT/9PT0//T0 + 9P/09PT/9PT0//T09P/09PT/9PT0//Hx8f/l5eX/09PT/8zMzP/MzMz/srKy/2xsbP9ubm7/2dnZ//T0 + 9P/09PT/7u7u/5mZmf/o6Oj/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//f3 + 9///////8vLy/1lZWf8zMzP/k7im/5Tbt/+U27f/lNu3/8u6g//+6sH//urB//7qwf/+6sH//urB//7q + wf/+79D//vz3/5mZmf8zMzP/MzMz/zMzM/8zMzP/MzMz7zMzM1AAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMzMzQDMz + M/8zMzP/MzMz/9jY2P//////+fn5//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b2 + 9v/29vb/5OTk/6SkpP/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2/+7u7v/b29v/zs7O/8zM + zP/MzMz/zMzM/5mZmf9mZmb/ZmZm/7e3t//29vb/9vb2//b29v/29vb/tra2/83Nzf/29vb/9vb2//b2 + 9v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9/f3////////////WVlZ/zMzM/+evK3/lNu3/5Tb + t/+U27f/t7eC//7qwf/+6sH//urB//7qwf/+6sH//urB//7qwf/+68T//vXj/9jY2P9ZWVn/MzMz/zMz + M/8zMzP/MzMz/zMzM2AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAzMzNAMzMz/zMzM/8zMzP/4uLi///////5+fn/9/f3//f3 + 9//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//f39//sLCw//f39//39/f/9/f3//f3 + 9//39/f/9/f3//f39/+amub/DAzM/4yMzP/MzMz/zMzM/7+/v/95eXn/ZmZm/2ZmZv+Tk5P/9/f3//f3 + 9//39/f/9/f3//f39//IyMj/yMjI//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f3 + 9//39/f/9vb2//////9cXFz/MzMz/6W+sf+U27f/lNu3/5Tbt/+3t4L//urB//7qwf/+6sH//urB//7q + wf/+6sH//urB//7qwf/+6sH//u/Q//789/+ZmZn/MzMz/zMzM/8zMzP/MzMzrwAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADMz + M0AzMzP/MzMz/zMzM////////////+Xl5f/4+Pj/+Pj4//j4+P/4+Pj/+Pj4//j4+P/4+Pj/+Pj4//j4 + +P/4+Pj/+Pj4/+bm5v+qqqr/+Pj4//j4+P/4+Pj/+Pj4//j4+P/4+Pj/urrt/wAAzP8AAMz/AADM/z8/ + zP+fn6z/bGxs/2ZmZv9mZmb/eHh4/+7u7v/4+Pj/+Pj4//j4+P/4+Pj/+Pj4/8jIyP/IyMj/+Pj4//j4 + +P/4+Pj/+Pj4//j4+P/4+Pj/+Pj4//j4+P/4+Pj/+Pj4/9bW1v/b29v//////2ZmZv8zMzP/pb6x/5Tb + t/+U27f/lNu3/6rElf/537L//urB//7qwf/+6sH//urB//7qwf/+6sH//urB//7qwf/+6sH//u3M//79 + +/+ysrL/MzMz/zMzM/8zMzP/MzMzIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMzMzQDMzM/8zMzP/MzMz////////////19fX//r6 + +v/6+vr/+vr6//r6+v/6+vr/+vr6//r6+v/6+vr/+vr6//r6+v/6+vr/+vr6/5mZmf/z8/P/+vr6//r6 + +v/6+vr/+vr6/8vL8f8PD87/AADM/wAAzP8AAMz/AADM/wYGxf9GRoX/ZmZm/2ZmZv/V1dX/+vr6//r6 + +v/6+vr/+vr6//r6+v/6+vr/t7e3/8nJyf/6+vr/+vr6//r6+v/6+vr/+vr6//r6+v/6+vr/+vr6//r6 + +v/6+vr/tLS0/9nZ2f//////ZmZm/zMzM/+lvrH/lNu3/5Tbt/+U27f/pcmc//XUpP/+6sH//urB//7q + wf/+6sH//urB//7qwf/+6sH//urB//7w1P/7+fT/4djG//////8/Pz//MzMz/zMzM/8zMzOAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAzMzNAMzMz/zMzM/8zMzP////////////Ozs7/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7 + +//7+/v/+/v7//v7+//7+/v/sbGx/9zc3P/7+/v/+/v7//v7+//Ly/L/Dw/O/wAAzP8AAMz/AADM/wAA + zP8AAMz/AADM/wAAzP8fH6z/qqq2//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+/+xsbH/4uLi//v7 + +//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+/+Wlpb/2NjY//////9mZmb/MzMz/5q7 + qv+U27f/lNu3/5Tbt/+uwI//+d+y//7qwf/+6sH//urB//7qwf/+6sH//urB//7rxP/+9+f/8u7l/9HD + pv/Lu5r/7unf/39/f/8zMzP/MzMz/zMzM98AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADMzM0AzMzP/MzMz/zMzM////////////8zM + zP/z8/P//Pz8//z8/P/8/Pz//Pz8//z8/P/8/Pz//Pz8//z8/P/8/Pz//Pz8//z8/P/ExMT/xMTE//z8 + /P/8/Pz/7Oz5/w8Pz/8AAMz/AADM/wAAzP8AAMz/AADM/wAAzP8AAMz/Pz/Y/7298P/8/Pz//Pz8//z8 + /P/8/Pz//Pz8//z8/P/8/Pz/7+/v/5mZmf/v7+///Pz8//z8/P/8/Pz//Pz8//z8/P/8/Pz//Pz8//z8 + /P/8/Pz//Pz8/29vb//Y2Nj//////2ZmZv8zMzP/k7im/5Tbt/+U27f/lNu3/7e3gv/+6sH//urB//7q + wf/+6sH//urB//7qwf/+7cz//vvz/+XdzP/Lu5r/y7ua/8u7mv/e1L//2NjY/zMzM/8zMzP/MzMz/zMz + M1AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAMzMzQDMzM/8zMzP/MzMz/+Xl5f//////0tLS/97e3v/+/v7//v7+//7+/v/+/v7//v7+//7+ + /v/+/v7//v7+//7+/v/+/v7//v7+/+Tk5P+fn5//9/f3/+7u+v8vL9X/AADM/wAAzP8AAMz/AADM/wAA + zP8AAMz/Pz/Y/76+8f/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+/v+4uLj/vr6+//7+ + /v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+/v+7u7v/ZmZm/+vr6///////WVlZ/zMz + M/+GtJz/lNu3/5Tbt/+U27f/t7eC//7qwf/+6sH//urB//7qwf/+6sH//vPc//j28v/YzLP/y7ua/8u7 + mv/Lu5r/y7ua/8u7mv/7+vj/WVlZ/zMzM/8zMzP/MzMznwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMzMz/zMzM/8zMzP/zMzM//// + ///b29v/zMzM//j4+P///////////////////////////////////////////////////////////8XF + xf+ioq//Ly/V/wAAzP8AAMz/AADM/wAAzP8AAMz/Pz/Y/7+/8v////////////////////////////// + ////////////////////////0tLS/6Wlpf/4+Pj///////////////////////////////////////// + ////////9fX1/29vb/9vb2////////////8zMzP/MzMz/5rdu/+U27f/lNu3/5Tbt//Su4T//urB//7q + wf/+6sH//uvE//746//u6d//zr+g/8u7mv/Lu5r/y7ua/8u7mv/Lu5r/y7ua/+jh0v+lpaX/MzMz/zMz + M/8zMzP/MzMzEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAzMzPfMzMz/zMzM/+ZmZn//////+jo6P/MzMz/2NjY//////////////////// + /////////////////////////////////////////////zMzzP8AAMz/AADM/wAAzP8AAMz/Pz/Y/7+/ + 8v///////////////////////////////////////////////////////////9LS0v+fn5//6+vr//// + //////////////////////////////////////////////////+fn5//ZmZm/5WVlf//////zMzM/zMz + M/8/SEP/lNu3/5Tbt/+U27f/lNu3/9+9hf/+6sH//urB//7v0P/+/fv/4djG/8u7mv/Lu5r/y7ua/8u7 + mv/Lu5r/y7ua/8u7mv/Lu5r/0cOm//Ly8v8zMzP/MzMz/zMzM/8zMzNwAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADMzM58zMzP/MzMz/1lZ + Wf//////+Pj4/8zMzP/MzMz/5eXl//////////////////////////////////////////////////// + //9fX9//AADM/wAAzP8AAMz/UlLS/9/f+P////////////////////////////////////////////// + //////////////j4+P/MzMz/n5+f//Ly8v////////////////////////////////////////////// + ////////xcXF/2ZmZv9mZmb/xcXF//////+MjIz/MzMz/1dyZP+U27f/lNu3/5Tbt/+c0qn/8MmV//7q + wf/+9OD/9fLs/9THrP/Lu5r/y7ua/8u7mv/Lu5r/y7ua/8u7mv/Lu5r/y7ua/8u7mv/Lu5r/9fLs/39/ + f/8zMzP/MzMz/zMzM98AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAMzMzYDMzM/8zMzP/MzMz/+Xl5f//////29vb/8zMzP/MzMz/6+vr//// + ////////////////////////////////////////X1/f/wAAzP8AAMz/X1/f/7i40v+lpaX/xcXF/+Xl + 5f///////////////////////////////////////////+Xl5f/FxcX/n5+f/7+/v//y8vL///////// + /////////////////////////////////////////////+Li4v9vb2//ZmZm/29vb////////////0xM + TP8zMzP/daaN/5Tbt/+U27f/lNu3/7O7iP/758H//vvz/+vl2f/Ov6D/y7ua/8u7mv/Lu5r/y7ua/8u7 + mv/Lu5r/y7ua/8u7mv/Lu5r/y7ua/8u7mv/Zx67/zMzM/zMzM/8zMzP/MzMz/zMzM0AAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAzMzMQMzMz7zMz + M/8zMzP/f39////////y8vL/zMzM/8zMzP/MzMz/6+vr/////////////////////////////////39/ + 5f8AAMz/X1/f/9/f+P////////////Ly8v/S0tL/rKys/5+fn/+ysrL/srKy/7Kysv+ysrL/srKy/7Ky + sv+fn5//paWl/8XFxf/r6+v///////////////////////////////////////////////////////// + ///j4+P/b29v/2ZmZv9mZmb/srKy///////MzMz/MzMz/z9IQ/+U27f/lNu3/5Tbt/+U27f/3c2n//v5 + 9P/b0Ln/y7ua/8u7mv/Lu5r/y7ua/8u7mv/Lu5r/y7ua/8u7mv/Lu5r/y7ua/8u7mv/Lu5r/xa6I/5uX + bv/2+vj/TExM/zMzM/8zMzP/MzMznwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAzMzOfMzMz/zMzM/8zMzP/5eXl///////b29v/zMzM/8zM + zP/MzMz/6+vr//////////////////////+fn+v/X1/f/9/f+P////////////////////////////// + ////////+Pj4/+Xl5f/l5eX/5eXl/+Xl5f/l5eX/5eXl//j4+P////////////////////////////// + ////////////////////////////////////////5eXl/3Z2dv9mZmb/ZmZm/3l5ef/19fX//////2Zm + Zv8zMzP/Y4d1/5Tbt/+U27f/mt27/9bx5P/18uz/0cOm/8u7mv/Lu5r/y7ua/8u7mv/Lu5r/y7ua/8u7 + mv/Lu5r/y7ua/8u7mv/Lu5r/y7ua/8u7mv+ujl7/eauM/8vh1v+ZmZn/MzMz/zMzM/8zMzPvMzMzEAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADMz + MyAzMzP/MzMz/zMzM/9ycnL///////v7+//Pz8//zMzM/8zMzP/MzMz/6enp/////////////////9/f + +P////////////////////////////////////////////////////////////////////////////// + /////////////////////////////////////////////////////////////////////////////+bm + 5v91dXX/bW1t/2ZmZv9mZmb/2NjY//////+ysrL/MzMz/zk9O/+N0K7/lNu3/6jhxP/q+PH/28+7/8u7 + mv/Lu5r/y7ua/8u7mv/Lu5r/y7ua/8u7mv/Lu5r/y7ua/8u7mv/Lu5r/y7ua/8u7mv/JtpT/vZhr/4uZ + cv92r5L/j76m/+Xl5f8zMzP/MzMz/zMzM/8zMzNgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADMzM48zMzP/MzMz/zMzM/+/v7///////+/v + 7//MzMz/zMzM/8zMzP/Nzc3/5OTk//n5+f////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ///////////////////////////////////Kysr/hoaG/3V1df9tbW3/ZmZm/6ioqP//////5eXl/z8/ + P/8zMzP/b5yF/5Tbt//C6tb/9vr4/5+7ov/AoXf/y7ua/8u7mv/Lu5r/y7ua/8u7mv/Lu5r/y7ua/8u7 + mv/Lu5r/y7ua/8u7mv/CpXz/sJJk/5eTaP+HnXf/dq+S/3avkv92r5L/7fXx/3Jycv8zMzP/MzMz/zMz + M88AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAMzMzEDMzM+8zMzP/MzMz/z8/P//Y2Nj//////+vr6//MzMz/zMzM/83Nzf/Q0ND/1tbW//Ly + 8v////////////////////////////////////////////////////////////////////////////// + ///////////////////////////////////////////////////////////////////r6+v/pKSk/4aG + hv9+fn7/dXV1/21tbf+fn5////////////9mZmb/MzMz/0tdVP+a3bv/3fPo/9zr4/9+tJj/oJBj/8u7 + mv/Lu5r/y7ua/8u7mv/Lu5r/y7ua/8u7mv/Lu5r/y7ua/8Spgv+3l2v/nZRo/4edd/92r5L/dq+S/3av + kv92r5L/bqST/yxBnP9vb8v/srKy/zMzM/8zMzP/MzMz/zMzMzAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAzMzMwMzMz3zMzM/8zMzP/MzMz/1lZ + Wf/y8vL//////+vr6//MzMz/zc3N/9DQ0P/U1NT/19fX/+Hh4f/09PT///////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ///////////////////u7u7/vb29/5aWlv+Pj4//hoaG/35+fv91dXX/o6Oj////////////f39//zMz + M/8sLEb/cYfI//j8+v+x0sH/dq+S/4edd//EqYL/y7ua/8u7mv/Lu5r/y7ua/8u7mv/Lu5r/ybaU/8Ch + d/+mkWP/jpZs/3mrjP92r5L/dq+S/3avkv92r5L/dq+S/1+Olf8WIJ//JDad/3epmf//////Pz8//zMz + M/8zMzP/MzMznwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAMzMzgDMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/1lZWf/y8vL//////+vr6//Q0ND/0NDQ/9TU + 1P/X19f/29vb/97e3v/l5eX/8vLy//z8/P////////////////////////////////////////////// + //////////////////////////////////////////////v7+//k5OT/w8PD/6enp/+fn5//lpaW/4+P + j/+Ghob/fn5+/7Gxsf///////////39/f/8zMzP/OT07/7fNwv/m6vL/Y3ys/3avkv95q4z/uZxw/8u7 + mv/Lu5r/y7ua/8u7mv/Lu5r/xa6I/7WTZf+Xk2j/faeH/3avkv92r5L/dq+S/3avkv92r5L/dq+S/3av + kv9JbZj/Bwqh/0Jimf97sJX/hrSd/9zo4v+MjIz/MzMz/zMzM/8zMzPvAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMzMzEDMzM78zMzP/MzMz/zMzM/8zMzP/jIyM/9He + 2P9FUkv/MzMz/1lZWf/y8vL//////+zs7P/S0tL/1NTU/9fX1//b29v/3t7e/+Li4v/l5eX/6Ojo/+/v + 7//19fX/+vr6//z8/P/+/v7////////////////////////////////////////////39/f/8PDw/+Tk + 5P/S0tL/v7+//7i4uP+wsLD/p6en/5+fn/+Wlpb/j4+P/4aGhv+2trb///////////9ycnL/MzMz/z8/ + P//Y2Nj/1Obc/3epmf8OFaD/dq+S/6uRZP/Lu5r/y7ua/8u7mv/JtpT/wKF3/6mNXv+LmXL/eauM/3av + kv92r5L/dq+S/3avkv92r5L/dq+S/3avkv9upJP/JDad/xghof97lqf/nLus/6K9sP+ivbD/v9HI/9jY + 2P8zMzP/MzMz/zMzM/8zMzNgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADMz + M0AzMzPvMzMz/zMzM/8zMzP/Pz8//7+/v//J7dv/lNu3/43Qrv9FUkv/MzMz/0xMTP/y8vL///////b2 + 9v/h4eH/19fX/9vb2//e3t7/4uLi/+Xl5f/o6Oj/7Ozs/+/v7//y8vL/9vb2//n5+f/8/Pz//Pz8//f3 + 9//x8fH/7Ozs/+bm5v/g4OD/2tra/9XV1f/Pz8//ysrK/8TExP+/v7//uLi4/7CwsP+np6f/n5+f/5aW + lv+kpKT/2dnZ////////////cnJy/zMzM/8/Pz//0NPR/6nNuv92r5L/dq+S/yQ2nf96c33/ybaU/8u7 + mv/JtpT/u5Rl/5uPYv+EoHz/dq+S/3avkv92r5L/dq+S/3avkv92r5L/dq+S/3avkv92r5L/X46V/w4V + oP8+UKP/l7Gv/6K9sP+ivbD/or2w/6K9sP+ivbD/8/b1/1lZWf8zMzP/MzMz/zMzM78AAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAzMzOPMzMz/zMzM/8zMzP/MzMz/1lZWf/e4+H/ruTJ/5Tb + t/+U27f/lNu3/43Qrv9LXVT/MzMz/0xMTP/MzMz////////////y8vL/4eHh/97e3v/i4uL/5eXl/+jo + 6P/s7Oz/7+/v//Ly8v/29vb/+fn5//z8/P/8/Pz/9/f3//Hx8f/s7Oz/5ubm/+Dg4P/a2tr/1dXV/8/P + z//Kysr/xMTE/7+/v/+4uLj/sLCw/6enp/+lpaX/0dHR////////////5eXl/2ZmZv8zMzP/TExM/8fM + yf+Pvqb/dq+S/3avkv92r5L/aGd9/0xGn//Froj/uY9f/5eTaP95q4z/dq+S/3avkv92r5L/dq+S/3av + kv92r5L/dq+S/3avkv92r5L/dq+S/0Jimf8HCqH/YX2i/6K9sP+ivbD/or2w/6K9sP+ivbD/or2w/6K9 + sP/Q3tf/srKy/zMzM/8zMzP/MzMz/zMzMyAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAzMzMgMzMzzzMz + M/8zMzP/MzMz/zMzM/+MjIz/5Pbt/5rdu/+U27f/lNu3/5Tbt/+U27f/lNu3/43Qrv9LXVT/MzMz/zMz + M/9/f3//5eXl////////////9PT0/+vr6//l5eX/6Ojo/+zs7P/v7+//8vLy//b29v/5+fn//Pz8//z8 + /P/39/f/8fHx/+zs7P/m5ub/4ODg/9ra2v/V1dX/z8/P/8rKyv/ExMT/v7+//7i4uP++vr7/2NjY//// + ////////8vLy/6Wlpf8zMzP/MzMz/0xMTP+wu7b/l7mo/3avkv92r5L/dq+S/5uPYv/CpXz/FQ6W/4uH + aP95q4z/dq+S/3avkv92r5L/dq+S/3avkv92r5L/dq+S/3avkv92r5L/dq+S/26kk/8kNp3/HSue/4Ch + pf+ivbD/or2w/6K9sP+ivbD/or2w/6K9sP+ivbD/or2w/63Fuf/y8vL/Pz8//zMzM/8zMzP/MzMzjwAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAMzMzUDMzM+8zMzP/MzMz/zMzM/8/Pz//zMzM/8Lq1v+U27f/lNu3/5Tb + t/+U27f/lNu3/5Tbt/+U27f/lNu3/5Tbt/91po3/OT07/zMzM/8/Pz//paWl//////////////////39 + /f/29vb/8/Pz//Dw8P/y8vL/9vb2//n5+f/8/Pz//Pz8//f39//x8fH/7Ozs/+bm5v/g4OD/2tra/9XV + 1f/Pz8//ysrK/8/Pz//j4+P/9vb2/////////////////7Kysv9MTEz/MzMz/zMzM/+foaD/ssS7/6K9 + sP+MtqH/dq+S/3avkv+Zi1z/p31H/46WbP8+U5X/QmKZ/3avkv92r5L/dq+S/3avkv92r5L/dq+S/3av + kv92r5L/dq+S/3avkv9fjpX/DhWg/ztXmv+Rt6T/or2w/6K9sP+ivbD/or2w/6K9sP+ivbD/or2w/6K9 + sP+Xuaj/g7Ob/9zr4/9/f3//MzMz/zMzM/8zMzPfAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMzMzEDMzM58zMzP/MzMz/zMz + M/8zMzP/ZmZm/+Tt6f+o4cT/lNu3/5Tbt/+U27f/lNu3/5Tbt/+U27f/lNu3/5Tbt/+U27f/lNu3/5Tb + t/+N0K7/XXxs/zMzM/8zMzP/Pz8//5mZmf/l5eX///////////////////////z8/P/8/Pz//Pz8//39 + /f/9/f3/+/v7//j4+P/19fX/8vLy/+/v7//s7Oz/7+/v//Pz8///////////////////////8vLy/6Wl + pf9MTEz/MzMz/zMzM/9ycnL/tLu4/6fBtP+ivbD/or2w/4Gymf92r5L/kpJn/46WbP95q4z/dq+S/2eZ + lP8WIJ//dq+S/3avkv92r5L/dq+S/3avkv92r5L/dq+S/3avkv92r5L/QmKZ/w4VoP9fjpX/kbek/6K9 + sP+ivbD/or2w/6K9sP+ivbD/or2w/6K9sP+cu6z/gbKZ/3avkv95q4z/xLib/8zMzP8zMzP/MzMz/zMz + M/8zMzNQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAADMzMzAzMzPPMzMz/zMzM/8zMzP/MzMz/5mZmf/d8+j/mt27/5Tbt/+U27f/lNu3/5Tb + t/+U27f/lNu3/5Tbt/+U27f/lNu3/5Tbt/+U27f/lNu3/5Tbt/+U27f/jdCu/2pvWP8zMzP/MzMz/zMz + M/9ZWVn/mZmZ/9jY2P////////////////////////////////////////////////////////////// + ///////////////////Y2Nj/mZmZ/3Jycv8zMzP/MzMz/zMzM/9vcXD/2NjY/9De1/+ivbD/or2w/6K9 + sP+ivbD/eK+T/3avkv92r5L/dq+S/3avkv92r5L/dq+S/x0rnv9fjpX/dq+S/3avkv92r5L/dq+S/3av + kv92r5L/bqST/yQ2nf8sQZz/bqST/4y2of+ivbD/or2w/6K9sP+ivbD/or2w/6K9sP+ivbD/jLah/3av + kv92r5L/gKSC/7WTZf/Lu5r/+/r4/0xMTP8zMzP/MzMz/zMzM68AAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAzMzNwMzMz/zMzM/8zMzP/MzMz/0xM + TP/Fycf/wurW/5Tbt/+U27f/lNu3/5Tbt/+U27f/lNu3/5Tbt/+U27f/lNu3/5Tbt/+U27f/lNu3/5Tb + t/+U27f/lNu3/5Tbt/+Y1rD/5b6G//HeuP+xpYv/VVJX/zMzM/8zMzP/MzMz/zMzM/9MTEz/ZmZm/5mZ + mf+ZmZn/mZmZ/5mZmf+ZmZn/mZmZ/5mZmf+ZmZn/mZmZ/2ZmZv9ZWVn/MzMz/zMzM/8zMzP/MzMz/09V + Uv91hHz/0t7Y//P29f+5zcP/or2w/6K9sP+ivbD/or2w/5y7rP92r5L/dq+S/3avkv92r5L/dq+S/3av + kv92r5L/SW2Y/yxBnP92r5L/dq+S/3avkv92r5L/dq+S/1iDlv8WIJ//SW2Y/3avkv+Ds5v/or2w/6K9 + sP+ivbD/or2w/6K9sP+ivbD/n7yu/4a0nf92r5L/dq+S/3mrjP+umm//y7ua/8u7mv/o4dL/paWl/zMz + M/8zMzP/MzMz/zMzM0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAMzMzrzMzM/8zMzP/MzMz/zMzM/9ycnL/3uvk/6jhxP+U27f/lNu3/5Tbt/+U27f/lNu3/5Tb + t/+U27f/lNu3/5Tbt/+U27f/lNu3/5Tbt/+U27f/lNu3/5Tbt/+U27f/lNu3/8+1ff/75Ln//urB/86+ + w/8vK8n/koa8/7Gli/+Lg3H/YVZI/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMz + M/8zMzP/MzMz/zMzM/9GSkj/bHhy/4ibkv+41cb/0e/g//X7+P/h6ub/p8G0/6K9sP+ivbD/or2w/6K9 + sP+ivbD/lLim/3avkv92r5L/dq+S/3avkv92r5L/dq+S/3avkv92r5L/DhWg/26kk/92r5L/dq+S/3av + kv87V5r/FiCf/2eZlP92r5L/eK+T/5+8rv+ivbD/or2w/6K9sP+ivbD/or2w/5+8rv9+sZf/dq+S/3av + kv92r5L/q5Fk/8u7mv/Lu5r/y7ua/9THrP/l5eX/MzMz/zMzM/8zMzP/MzMz/zMzM48zMzMQAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAzMzNwMzMz7zMzM/8zMzP/MzMz/0RJ + R//Fycf/ye3b/5Tbt/+U27f/lNu3/5Tbt/+U27f/lNu3/5Tbt/+U27f/lNu3/5Tbt/+U27f/lNu3/5Tb + t/+U27f/lNu3/5Tbt//CtHz/+d+y//7qwf9/dcb/LyvJ/86+w//+6sH//urB//7qwf/Gvor/lNu3/5fc + uf+lvrH/pb6x/z9Iqf8MDKX/coOt/6W+sf+lvrH/pb6x/6W+sf+41cb/y+3c/8vt3P/L7dz/y+3c/9vy + 5v/1+ff/ytnS/6K9sP+ivbD/or2w/6K9sP+ivbD/or2w/6K9sP+MtqH/dq+S/3avkv92r5L/dq+S/3av + kv92r5L/dq+S/3avkv8zTJv/SW2Y/3avkv9upJP/HSue/ztXmv92r5L/dq+S/3avkv+Rt6T/or2w/6K9 + sP+ivbD/or2w/6K9sP+fvK7/frGX/3avkv92r5L/dq+S/5SWbf/Hso7/y7ua/8u7mv/Lu5r/y7ua//j2 + 8v+lpaX/MzMz/zMzM/8zMzP/MzMz/zMzM98zMzNAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAzMzMgMzMzvzMzM/8zMzP/MzMz/zMzM/9+h4P/3uvk/6jhxP+U27f/lNu3/5Tb + t/+U27f/lNu3/5Tbt/+U27f/lNu3/5Tbt/+U27f/lNu3/5Tbt/+Y1rD/y6tu//vkuf/u28H/PzrJ/29m + x//+6sH//urB//7qwf/+6sH/2LyF/5jWsP+U27f/uefQ/8vt3P/L7dz/y+3c/3KF1f8MDs3/WGfT/77e + 2//L7dz/y+3c/8vt3P/L7dz/y+3c/87u3v/r+PH/7fLw/7PJvv+ivbD/or2w/6K9sP+ivbD/or2w/6K9 + sP+ivbD/or2w/4Gymf92r5L/dq+S/3avkv92r5L/dq+S/3avkv92r5L/dq+S/1+Olf8dK57/WIOW/w4V + oP9Yg5b/dq+S/3avkv92r5L/gbKZ/6K9sP+ivbD/or2w/6K9sP+ivbD/or2w/4Gymf92r5L/dq+S/3av + kv99p4f/vZhr/8u7mv/Lu5r/y7ua/9HDpv/18uz//vfn//778//Y2Nj/WVlZ/zMzM/8zMzP/MzMz/zMz + M/8zMzOPMzMzEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMzMzcDMz + M+8zMzP/MzMz/zMzM/8+Pj7/v7+//8nt2/+U27f/lNu3/5Tbt/+U27f/lNu3/5Tbt/+U27f/lNu3/5Tb + t/+U27f/pcmc/9i8hf/75Ln/rqDE/x8dyv+uoMT//urB//7qwf/+6sH//urB/+jDjf+c0qn/lNu3/6zi + x//L7dz/y+3c/8vt3P/L7dz/y+3c/7HP2v8/StH/GR3O/5ix2P/L7dz/y+3c/8vt3P/U8OL/9fv4/9zm + 4f+nwbT/or2w/6K9sP+ivbD/or2w/6K9sP+ivbD/or2w/6K9sP+ivbD/gbKZ/3avkv92r5L/dq+S/3av + kv92r5L/dq+S/3avkv92r5L/dq+S/w4VoP8kNp3/bqST/3avkv92r5L/dq+S/3avkv+Xuaj/or2w/6K9 + sP+ivbD/or2w/6K9sP+Xuaj/dq+S/3avkv92r5L/dq+S/6KUaf/Lu5r/y7ua/8u7mv/e1L//+/n0//7w + 1P/+6sH//urB//704P//////mZmZ/zMzM/8zMzP/MzMz/zMzM/8zMzPfMzMzQAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMzMzIDMzM78zMzP/MzMz/zMzM/8zMzP/cnJy/97r + 5P+u5Mn/lNu3/5Tbt/+U27f/lNu3/5Tbt/+U27f/mNaw/7vCkP/wyZX//urB/29mx/8/Osn/7tvB//7q + wf/+6sH//urB//7qwf/szpz/oc2j/5Tbt/+h38D/y+3c/8vt3P/L7dz/y+3c/8vt3P/L7dz/y+3c/8vt + 3P+Lotf/DA7N/1hn0/++3tv/4fTr//n6+v+/0cj/or2w/6K9sP+ivbD/or2w/6K9sP+ivbD/or2w/6K9 + sP+ivbD/or2w/6K9sP97sJX/dq+S/3avkv92r5L/dq+S/3avkv92r5L/dq+S/1+Olf8WIJ//Bwqh/ztX + mv92r5L/dq+S/3avkv92r5L/eK+T/6K9sP+ivbD/or2w/6K9sP+ivbD/or2w/4Gymf92r5L/dq+S/3av + kv+EoHz/xKmC/8u7mv/Ov6D/6+XZ//757//+68T//urB//7qwf/+6sH//urB//7tzP/++/P/2NjY/1lZ + Wf8zMzP/MzMz/zMzM/8zMzP/MzMzjzMzMxAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAADMzM3AzMzPvMzMz/zMzM/8zMzP/Pj4+/7+/v//Q79//mt27/5Tbt/+U27f/nNKp/764 + gv/ow43/++S5/86+w/8vK8n/f3XG//7qwf/+6sH//urB//7qwf/+6sH/7M6c/6XJnP+U27f/nt69/8fr + 2f/L7dz/y+3c/8vt3P/L7dz/y+3c/8vt3P/L7dz/y+3c/8vt3P++3tv/T1rU/7y+8P/t8vD/rcW5/6K9 + sP+ivbD/or2w/6K9sP+ivbD/or2w/6K9sP+ivbD/or2w/6K9sP+ivbD/n7yu/3avkv92r5L/dq+S/3av + kv92r5L/dq+S/3avkv9CYpn/DhWg/0ltmP9nmZT/DhWg/3avkv92r5L/dq+S/3avkv+JtZ//or2w/6K9 + sP+ivbD/or2w/6K9sP+Zuqr/dq+S/3avkv92r5L/dq+S/6CcdP/Lu5r/1Mes//j28v/+9OD//urB//7q + wf/+6sH//urB//7qwf/+6sH//urB//7qwf/+89z//v37/5mZmf8zMzP/MzMz/zMzM/8zMzP/MzMz3zMz + M0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADMzMyAzMzO/MzMz/zMz + M/8zMzP/MzMz/3Jycv/k7en/vNa1/8/Fkv/zz5z//urB//7qwf+eksX/LyvJ/86+w//+6sH//urB//7q + wf/+6sH//urB/+zOnP+lyZz/lNu3/57evf/H69n/y+3c/8vt3P/L7dz/y+3c/8vt3P/L7dz/y+3c/8vt + 3P/L7dz/y+3c/9jx5P/7/fz/naLT/zxGp/+ivbD/or2w/6K9sP+ivbD/or2w/6K9sP+ivbD/or2w/6K9 + sP+ivbD/or2w/6K9sP+UuKb/dq+S/3avkv92r5L/dq+S/3avkv9upJP/JDad/xYgn/9nmZT/dq+S/3av + kv8WIJ//WIOW/3avkv92r5L/dq+S/5S4pv+ivbD/or2w/6K9sP+ivbD/or2w/4m1n/92r5L/dq+S/3av + kv95q4z/wqV8/+HYxv/+/Pf//u3M//7qwf/+6sH//urB//7qwf/+6sH//urB//7qwf/+6sH//urB//7q + wf/+7Mj//vnv/9jY2P9mZmb/MzMz/zMzM/8zMzP/MzMz/zMzM48zMzMQAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAzMzNwMzMz7zMzM/8zMzP/MzMz/0lEQP+/v7///vXj//7r + xP/u28H/T0nI/09JyP/u28H//urB//7qwf/+6sH//urB//7qwf/ow43/oc2j/5Tbt/+X3Ln/wOnV/8vt + 3P/L7dz/y+3c/8vt3P/L7dz/y+3c/8vt3P/L7dz/y+3c/8vt3P/l9u3/+fr6/7nNw/+Dma3/Cguj/6K9 + sP+ivbD/or2w/6K9sP+ivbD/or2w/6K9sP+ivbD/or2w/6K9sP+ivbD/or2w/4m1n/92r5L/dq+S/3av + kv92r5L/WIOW/wcKof8zTJv/dq+S/3avkv92r5L/dq+S/0ltmP8sQZz/dq+S/3avkv92r5L/n7yu/6K9 + sP+ivbD/or2w/6K9sP+ivbD/e7CV/3avkv92r5L/dq+S/5Wifv/u6d///vjr//7rxP/+6sH//urB//7q + wf/+6sH//urB//7qwf/+6sH//urB//7qwf/+6sH//urB//7qwf/+6sH//vHY//79+/+lpaX/PT09/zMz + M/8zMzP/MzMz/zMzM98zMzNAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAzMzMgMzMzvzMzM/8zMzP/MzMz/zMzM/9ycnL/8u/q/3972f+eksX//urB//7qwf/+6sH//urB//7q + wf/75Ln/2sGM/5jWsP+U27f/l9y5/8Dp1f/L7dz/y+3c/8vt3P/L7dz/y+3c/8vt3P/L7dz/y+3c/8vt + 3P/R7+D/9fv4/+fu6/+nwbT/or2w/6K9sP8UF6T/ZXar/6K9sP+ivbD/or2w/6K9sP+ivbD/or2w/6K9 + sP+ivbD/or2w/6K9sP+ivbD/frGX/3avkv92r5L/dq+S/ztXmv8HCqH/WIOW/3avkv92r5L/dq+S/3av + kv92r5L/bqST/wcKof9upJP/dq+S/3avkv+ivbD/or2w/6K9sP+ivbD/or2w/5y7rP92r5L/dq+S/3av + kv+Yw63/9vj0//7z3P/+6sH//urB//7qwf/+6sH//urB//7qwf/+6sH//urB//7qwf/+6sH//urB//7q + wf/+6sH//urB//7qwf/+6sH//uvE//746//l5eX/ZmZm/zMzM/8zMzP/MzMz/zMzM/8zMzOfMzMzEAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMzMzcDMzM+8zMzP/MzMz/zMz + M/8+Pj7/v7+///746//+68T//urB//7qwf/+6sH/99mr/8u6g/+Y1rD/lNu3/5fcuf/A6dX/y+3c/8vt + 3P/L7dz/y+3c/8vt3P/L7dz/y+3c/8vt3P/L7dz/2/Lm//v9/P/K2dL/or2w/6K9sP+ivbD/or2w/1tq + qv8yO6f/or2w/6K9sP+ivbD/or2w/6K9sP+ivbD/or2w/6K9sP+ivbD/or2w/5y7rP92r5L/dq+S/2eZ + lP8WIJ//HSue/3Sllv+MtqH/ibWf/3ivk/92r5L/dq+S/3avkv92r5L/LEGc/0Jimf92r5L/gbKZ/6K9 + sP+ivbD/or2w/6K9sP+ivbD/kbek/3avkv92r5L/utfI//Pv5P/5477//urB//7qwf/+6sH//urB//7q + wf/+6sH//urB//7qwf/+6sH//urB//7qwf/+6sH//urB//7qwf/+6sH//urB//7qwf/+6sH//urB//7w + 1P/+/fv/paWl/z09Pf8zMzP/MzMz/zMzM/8zMzPvMzMzUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAMzMzIDMzM78zMzP/MzMz/zMzM/8zMzP/cnJy//Lw7v/+8NT//urB/+zO + nP+wxZb/lNu3/5Tbt/+a3bv/wOnV/8vt3P/L7dz/y+3c/8vt3P/L7dz/y+3c/8vt3P/L7dz/zu7e/+v4 + 8f/z9vX/s8m+/6K9sP+ivbD/or2w/6K9sP+ivbD/l7Gv/wAAo/+Npa7/or2w/6K9sP+ivbD/or2w/6K9 + sP+ivbD/or2w/6K9sP+ivbD/kbek/3avkv9JbZj/Bwqh/0Jimf92r5L/kbek/6K9sP+ivbD/kbek/3iv + k/92r5L/dq+S/3avkv9fjpX/FiCf/3avkv+Bspn/or2w/6K9sP+ivbD/or2w/6K9sP+MtqH/h7mf/+Xw + 6v/Q79//rMuh//7qwf/+6sH//urB//7qwf/+6sH//urB//7qwf/+6sH//urB//7qwf/+6sH//urB//7q + wf/+6sH//urB//7qwf/+6sH//urB//7qwf/u28H/X1fH/z87zf/u5+T/5eXl/2ZmZv8zMzP/MzMz/zMz + M/8zMzP/MzMzrzMzMxAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADMz + M3AzMzPvMzMz/zMzM/8zMzP/Pj4+/7+/v//46NX/o9Su/5Tbt/+U27f/nt69/8fr2f/L7dz/y+3c/8vt + 3P/L7dz/y+3c/8vt3P/L7dz/y+3c/9Tw4v/1+/j/3Obh/6fBtP+ivbD/or2w/6K9sP+ivbD/or2w/6K9 + sP+ivbD/PEan/1tqqv+ivbD/or2w/6K9sP+ivbD/or2w/6K9sP+ivbD/or2w/6K9sP95p5r/JDad/w4V + oP9fjpX/dq+S/4Gymf+ivbD/or2w/6K9sP+ivbD/kbek/3avkv92r5L/dq+S/3avkv8OFaD/X46V/4Gy + mf+ivbD/or2w/6K9sP+ivbD/or2w/67Mvf/v9/P/tebN/5Tbt/+zu4j//urB//7qwf/+6sH//urB//7q + wf/+6sH//urB//7qwf/+6sH//urB//7qwf/+6sH//urB//7qwf/+6sH//urB//7qwf/+6sH/zr7D/x8d + yv9vZsf/7tvB//7qwf/+79D//vz3/6Wlpf8+Pj7/MzMz/zMzM/8zMzP/MzMz7zMzM1AAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADMzMyAzMzO/MzMz/zMzM/8zMzP/MzMz/3Jy + cv/r8O3/vOjS/6jhxP/L7dz/y+3c/8vt3P/L7dz/y+3c/8vt3P/L7dz/y+3c/8vt3P/h9Ov/+fr6/8TV + zf+ivbD/or2w/6K9sP+ivbD/or2w/6K9sP+ivbD/or2w/6K9sP9vgav/FBek/6K9sP+ivbD/or2w/6K9 + sP+ivbD/or2w/6K9sP+ivbD/eY2s/w4VoP8sQZz/bqST/3avkv92r5L/l7mo/6K9sP+ivbD/or2w/6K9 + sP+ivbD/e7CV/3avkv92r5L/dq+S/0Jimf8sQZz/e7CV/6K9sP+ivbD/or2w/6fBtP/W4tz/6vjx/6Hf + wP+U27f/lNu3/7e3gv/+6sH//urB//7qwf/+6sH//urB//7qwf/+6sH//urB//7qwf/+6sH//urB//7q + wf/+6sH//urB//7qwf/+6sH//urB/46Dxf8PDsv/rqDE//7qwf/+6sH//urB//7qwf/+68T//vXj/+Xl + 5f9ycnL/MzMz/zMzM/8zMzP/MzMz/zMzM68zMzMQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAzMzNwMzMz7zMzM/8zMzP/MzMz/z4+Pv+/v7//8vr2/9Hv4P/L7dz/y+3c/8vt + 3P/L7dz/y+3c/8vt3P/O7t7/7vn0/+3y8P+zyb7/or2w/6K9sP+ivbD/or2w/6K9sP+ivbD/or2w/6K9 + sP+ivbD/or2w/6K9sP8UF6T/g5mt/6K9sP+ivbD/or2w/6K9sP+ivbD/or2w/1Feqf8HCqH/SW2Y/3av + kv92r5L/dq+S/4a0nf+ivbD/or2w/6K9sP+ivbD/or2w/5y7rP92r5L/dq+S/3avkv92r5L/bqST/wcK + of9upJP/or2w/6K9sP+zyb7/7fLw/+X27f+l4ML/lNu3/5Tbt/+U27f/qsSV//nfsv/+6sH//urB//7q + wf/+6sH//urB//7qwf/+6sH//urB//7qwf/+6sH//urB//7qwf/+6sH//urB/+7bwf8/Osn/LyvJ/97M + wv/+6sH//urB//7qwf/537L/6siU/8LDkf+3t4L/udCq/+r48f+/v7//Pj4+/zMzM/8zMzP/MzMz/zMz + M+8zMzNQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAzMzMgMzMzvzMz + M/8zMzP/MzMz/zMzM/9ycnL/7/Hw/+H06//L7dz/y+3c/8vt3P/L7dz/2PHk//v9/P/W4tz/or2w/6K9 + sP+ivbD/or2w/6K9sP+ivbD/or2w/6K9sP+ivbD/or2w/6K9sP+ivbD/or2w/1Feqf88Rqf/or2w/6K9 + sP+ivbD/or2w/42lrv8eI6X/GyKj/2eZlP92r5L/dq+S/3avkv92r5L/nLus/6K9sP+ivbD/or2w/6K9 + sP+ivbD/ibWf/3avkv92r5L/dq+S/3avkv92r5L/LEGc/0ltmP+Zuqr/ytnS//X59//Y8eT/y+3c/6/k + yf+U27f/lNu3/5Tbt/+c0qn/8MmV//7qwf/+6sH//urB//7qwf/+6sH//urB//7qwf/+6sH//urB//7q + wf/+6sH//urB//7qwf++r8P/Dw7L/391xv/+6sH//urB//7qwf/+6sH//urB/8+1ff+c0qn/lNu3/5Tb + t/+U27f/lNu3/8nt2//y8vL/cnJy/zMzM/8zMzP/MzMz/zMzM/8zMzOvMzMzEAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMzMzcDMzM+8zMzP/MzMz/zMzM/8+Pj7/v7+///L6 + 9v/R7+D/y+3c/+X27f/5+vr/v9HI/6K9sP+ivbD/or2w/6K9sP+ivbD/or2w/6K9sP+ivbD/or2w/6K9 + sP+ivbD/or2w/6K9sP+ivbD/jaWu/woLo/+ivbD/or2w/6K9sP9vgav/Cguj/0ZSqP+MtqH/dq+S/3av + kv92r5L/dq+S/4m1n/+ivbD/or2w/6K9sP+ivbD/or2w/6K9sP+cu6z/eK+T/3avkv92r5L/dq+S/3av + kv9ReJf/LTuk/9zo4v/u+fT/zu7e/8vt3P/L7dz/uefQ/5Tbt/+U27f/lNu3/5Tbt//Wtn3//urB//7q + wf/+6sH//urB//7qwf/+6sH//urB//7qwf/+6sH//urB//7qwf/+6sH/f3XG/w8Oy/++r8P//urB//7q + wf/+6sH//urB//7qwf/+6sH/y7qD/5Tbt/+U27f/lNu3/5Tbt/+U27f/lNu3/6HfwP/r+PH/v7+//z4+ + Pv8zMzP/MzMz/zMzM/8zMzPvMzMzUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAMzMzIDMzM78zMzP/MzMz/zMzM/8zMzP/cnJy/+/x8P/4/Pr/5+7r/6fBtP+ivbD/or2w/6K9 + sP+ivbD/or2w/6K9sP+ivbD/or2w/6K9sP+ivbD/or2w/6K9sP+ivbD/or2w/6K9sP+ivbD/Mjun/2V2 + q/+Xsa//PEan/woLo/95jaz/n7yu/3ivk/92r5L/dq+S/3avkv94r5P/n7yu/6K9sP+ivbD/or2w/6K9 + sP+ivbD/or2w/6K9sP+OtqL/dq+S/3avkv92r5L/dq+S/4++pv/f3/P/lZzl/77e2//L7dz/y+3c/8vt + 3P/A6dX/lNu3/5Tbt/+U27f/lNu3/67Aj//32av//urB//7qwf/+6sH//urB//7qwf/+6sH//urB//7q + wf/+6sH/3szC/y8ryf8/Osn/7tvB//7qwf/+6sH//urB//7qwf/+6sH//urB//7qwf/fvYX/lNu3/5Tb + t/+U27f/lNu3/5Tbt/+U27f/r+TJ/8vt3P/h9Ov/7/Hw/3Jycv8zMzP/MzMz/zMzM/8zMzP/MzMzrzMz + MxAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADMzM3AzMzPvMzMz/zMz + M/8zMzP/Pz8///Ly8v+txbn/or2w/6K9sP+ivbD/or2w/6K9sP+ivbD/or2w/6K9sP+ivbD/or2w/6K9 + sP+ivbD/or2w/6K9sP+ivbD/or2w/6K9sP9ldqv/HiOl/xQXpP8oL6b/l7Gv/6K9sP+MtqH/dq+S/3av + kv92r5L/dq+S/5S4pv+ivbD/or2w/6K9sP+ivbD/or2w/6K9sP+ivbD/or2w/5+8rv94r5P/dq+S/3av + kv+618j/8fr2/57Uxf8uRMX/GR3O/5ix2P/L7dz/y+3c/8vt3P+U27f/lNu3/5Tbt/+U27f/lNu3/8+1 + ff/75Ln//urB//7qwf/+6sH//urB//7qwf/+6sH//urB/66gxP8PDsv/joPF//7qwf/+6sH//urB//7q + wf/+6sH//urB//7qwf/+6sH//urB/923fv+U27f/lNu3/5Tbt/+U27f/l9y5/7nn0P/L7dz/y+3c/8vt + 3P/R7+D/8vr2/7Kysv8zMzP/MzMz/zMzM/8zMzP/MzMz3wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAADMzMyAzMzO/MzMz/zMzM/8zMzP/paWl/9bi3P+ivbD/or2w/6K9 + sP+ivbD/or2w/6K9sP+ivbD/or2w/6K9sP+ivbD/or2w/6K9sP+ivbD/or2w/6K9sP+ivbD/or2w/3mN + rP8AAKP/UV6p/6K9sP+ivbD/mbqq/3avkv92r5L/dq+S/3avkv+Bspn/or2w/6K9sP+ivbD/or2w/6K9 + sP+ivbD/or2w/6K9sP+ivbD/or2w/4a0nf9+tJj/3Ovj/9bx5P+a3bv/lNu3/5Tbt/+Bn9D/DA7N/1hn + 0/++3tv/y+3c/57evf+U27f/lNu3/5Tbt/+U27f/mNaw/9Sxdv/75Ln//urB//7qwf/+6sH//urB/+7b + wf9fV8f/Hx3K/86+w//+6sH//urB//7qwf/+6sH//urB//7qwf/+6sH//urB//7qwf/lzZv/oc2j/5Tb + t/+U27f/lNu3/5fcuf/A6dX/y+3c/8vt3P/L7dz/y+3c/9Tw4v/S1tT/Pj4+/zMzM/8zMzP/MzMz/zMz + M88zMzMwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAzMzO/MzMz/zMzM/9ZWVn/8/b1/6K9sP+ivbD/or2w/6K9sP+ivbD/or2w/6K9sP+ivbD/or2w/6K9 + sP+ivbD/or2w/6K9sP+ivbD/or2w/6K9sP9RXqn/HiOl/0ZSqP88Rqf/or2w/6K9sP+Bspn/dq+S/3av + kv92r5L/dq+S/5y7rP+ivbD/or2w/6K9sP+ivbD/or2w/6K9sP+ivbD/or2w/6K9sP+ivbD/tM7B/+/3 + 8/+86NL/lNu3/5Tbt/+U27f/lNu3/6jhxP++3tv/TFjS/wwOzf+Lotf/od/A/5Tbt/+U27f/lNu3/5Tb + t/+U27f/mNaw/8+1ff/537L//urB//7qwf/OvsP/LyvJ/09JyP/u28H//urB//7qwf/+6sH//urB//7q + wf/+6sH//urB//7qwf/75Ln/2sGM/5jWsP+U27f/lNu3/5Tbt/+o4cT/y+3c/8vt3P/L7dz/y+3c/8vt + 3P/l9u3/jIyM/zMzM/8zMzP/MzMz/zMzM/8zMzOfMzMzEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADMzM2AzMzP/MzMz/zMzM//Y2Nj/v9HI/6K9 + sP+ivbD/or2w/6K9sP+ivbD/or2w/6K9sP+ivbD/or2w/6K9sP+ivbD/or2w/6K9sP+Xsa//KC+m/0ZS + qP+Xsa//or2w/xQXpP+ivbD/ibWf/3avkv92r5L/dq+S/3avkv+MtqH/or2w/6K9sP+ivbD/or2w/6K9 + sP+ivbD/or2w/6K9sP+ivbD/or2w/9bi3P/u+fP/od/A/5Tbt/+U27f/lNu3/5Tbt/+U27f/l9y5/8fr + 2f/L7dz/mLHY/xkdzv8uRMX/is24/5Tbt/+U27f/lNu3/5Tbt/+U27f/lNu3/7m8if/sv4f/joPF/x8d + yv+Og8X//urB//7qwf/+6sH//urB//7qwf/+6sH//urB//7qwf/+6sH/9dSk/8C9if+Y1rD/lNu3/5Tb + t/+X3Ln/tubO/8vt3P/L7dz/y+3c/8vt3P/O7t7/2OHc/1lZWf8zMzP/MzMz/zMzM/8zMzPvMzMzUAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAMzMzEDMzM+8zMzP/MzMz/39/f//h6ub/or2w/6K9sP+ivbD/or2w/6K9sP+ivbD/or2w/6K9 + sP+ivbD/or2w/6K9sP+ivbD/eY2s/xQXpP9vgav/or2w/6K9sP+ivbD/PEan/1dxof92r5L/dq+S/3av + kv92r5L/frGX/6K9sP+ivbD/or2w/6K9sP+ivbD/or2w/6K9sP+ivbD/or2w/7PJvv/t8vD/6Pfv/73o + 0v+U27f/lNu3/5Tbt/+U27f/lNu3/5Tbt/+U27f/tubO/8vt3P/L7dz/vt7b/1hn0/8JDcr/U3vA/5Tb + t/+U27f/lNu3/5Tbt/+U27f/is24/zJAvv8gJMH/v5iQ//nfsv/+6sH//urB//7qwf/+6sH//urB//7q + wf/75Ln/8MmV/9K7hP+lyZz/lNu3/5Tbt/+U27f/od/A/8Tq1//L7dz/y+3c/8vt3P/L7dz/2/Lm/7y+ + vf8+Pj7/MzMz/zMzM/8zMzP/MzMzzzMzMyAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMzMznzMzM/8zMzP/Pz8///// + //+txbn/or2w/6K9sP+ivbD/or2w/6K9sP+ivbD/or2w/6K9sP+ivbD/or2w/1Feqf8eI6X/jaWu/6K9 + sP+ivbD/or2w/6K9sP9+l6n/HSue/3avkv92r5L/dq+S/3avkv+Xuaj/or2w/6K9sP+ivbD/or2w/6K9 + sP+ivbD/or2w/6S9sf/E1c3/9fn3/9jx5P/L7dz/tubO/5Tbt/+U27f/lNu3/5Tbt/+U27f/lNu3/5Tb + t/+a3bv/y+3c/8vt3P/L7dz/y+3c/5q90v8bKcj/JTbG/4G/uf+U27f/lNu3/2+kvP8SG8n/N1LE/4rN + uP+c0qn/t7eC/9+9hf/sv4f/7L+H/+y/h//lvob/0ruE/7O7iP+c0qn/lNu3/5Tbt/+U27f/nt69/73o + 0v/L7dz/y+3c/8vt3P/L7dz/y+3c/9vq4v+MjIz/MzMz/zMzM/8zMzP/MzMz/zMzM48AAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAzMzMwMzMz/zMzM/8zMzP/srKy/8rZ0v+ivbD/or2w/6K9sP+ivbD/or2w/6K9 + sP+ivbD/or2w/42lrv8oL6b/UV6p/6K9sP+ivbD/or2w/6K9sP+ivbD/l7mo/3ivk/8OFaD/Z5mU/3av + kv92r5L/ibWf/6K9sP+ivbD/or2w/6K9sP+ivbD/or2w/6K9sP+nwbT/3Obh//L69v/O7t7/y+3c/8vt + 3P+l4ML/lNu3/5Tbt/+U27f/lNu3/5Tbt/+U27f/lNu3/5Tbt/+v5Mn/y+3c/8vt3P/L7dz/y+3c/7bm + zv9KbcH/CQ3K/1N7wP9KbcH/CQ3K/2WWvf+U27f/lNu3/5Tbt/+U27f/lNu3/5jWsP+U27f/lNu3/5Tb + t/+U27f/lNu3/5Tbt/+U27f/mt27/7bmzv/L7dz/y+3c/8vt3P/L7dz/y+3c/9Tw4v/P1dL/WVlZ/zMz + M/8zMzP/MzMz/zMzM+8zMzNQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAzMzPfMzMz/zMz + M/9mZmb/8/b1/6K9sP+ivbD/or2w/6K9sP+ivbD/or2w/6K9sP9vgav/FBek/3mNrP+ivbD/or2w/6K9 + sP+ivbD/or2w/5G3pP92r5L/dq+S/0Jimf8zTJv/dq+S/3uwlf+fvK7/or2w/6K9sP+ivbD/or2w/6K9 + sP+ivbD/s8m+//P29f/l9u3/y+3c/8vt3P/L7dz/xOrX/5Tbt/+U27f/lNu3/5Tbt/+U27f/lNu3/5Tb + t/+U27f/lNu3/5fcuf/H69n/y+3c/8vt3P/L7dz/y+3c/8Dp1f+GtsT/CQ3K/wkNyv94sbr/lNu3/5Tb + t/+U27f/lNu3/5Tbt/+U27f/lNu3/5Tbt/+U27f/lNu3/5Tbt/+U27f/od/A/7bmzv/L7dz/y+3c/8vt + 3P/L7dz/y+3c/8vt3P/e8+n/r7Gw/z4+Pv8zMzP/MzMz/zMzM/8zMzO/MzMzIAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAADMzM3AzMzP/MzMz/zMzM//l5eX/uc3D/6K9sP+ivbD/or2w/6K9 + sP+ivbD/RlKo/ygvpv+Xsa//or2w/6K9sP+ivbD/or2w/6K9sP+JtZ//dq+S/3avkv92r5L/bqST/w4V + oP92r5L/l7mo/6K9sP+ivbD/or2w/6K9sP+ivbD/or2w/8rZ0v/4/Pr/1PDi/8vt3P/L7dz/y+3c/8vt + 3P+h38D/lNu3/5Tbt/+U27f/lNu3/5Tbt/+U27f/lNu3/5Tbt/+U27f/lNu3/7Lly//L7dz/y+3c/8vt + 3P/L7dz/pMDZ/yYsz/9ldtT/a4PQ/x8qyv9vpLz/lNu3/5Tbt/+U27f/lNu3/5Tbt/+U27f/lNu3/5Tb + t/+l4ML/suXL/8Tq1//L7dz/y+3c/8vt3P/L7dz/y+3c/8vt3P/O7t7/4uzn/39/f/8zMzP/MzMz/zMz + M/8zMzP/MzMzgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMzMzIDMz + M/8zMzP/MzMz/4yMjP/c5uH/or2w/6K9sP+ivbD/jaWu/x4jpf9baqr/or2w/6K9sP+ivbD/or2w/6K9 + sP+Zuqr/gbKZ/3avkv92r5L/dq+S/3avkv92r5L/JDad/2F9ov+ivbD/or2w/6K9sP+ivbD/or2w/6fB + tP/n7uv/7vn0/87u3v/L7dz/y+3c/8vt3P/L7dz/suXL/5Tbt/+U27f/lNu3/5Tbt/+U27f/lNu3/5Tb + t/+U27f/lNu3/5Tbt/+U27f/l9y5/8Tq1//L7dz/y+3c/3KF1f8mLM//mLHY/8vt3P/L7dz/sc/a/zI7 + 0P81Rsr/sNnR/73o0v+96NL/vejS/73o0v/E6tf/y+3c/8vt3P/L7dz/y+3c/8vt3P/L7dz/y+3c/8vt + 3P/L7dz/1PDi/9LW1P9MTEz/MzMz/zMzM/8zMzP/MzMz7zMzM0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMzMzrzMzM/8zMzP/TExM//////+nwbT/or2w/2+B + q/8eI6X/g5mt/6K9sP+ivbD/or2w/6K9sP+fvK7/jLah/3ivk/92r5L/dq+S/3avkv92r5L/dq+S/3av + kv9TeZn/Mjun/6K9sP+ivbD/or2w/6K9sP+5zcP/9fn3/97z6f/L7dz/y+3c/8vt3P/L7dz/y+3c/8Dp + 1f+U27f/lNu3/5Tbt/+U27f/lNu3/5Tbt/+U27f/lNu3/5Tbt/+U27f/lNu3/5Tbt/+U27f/nt69/77e + 2/8/StH/P0rR/77e2//L7dz/y+3c/8vt3P/L7dz/y+3c/3KF1f8ZHc7/coXV/8vt3P/L7dz/y+3c/8vt + 3P/L7dz/y+3c/8vt3P/L7dz/y+3c/8vt3P/L7dz/y+3c/+X27f+lpaX/MzMz/zMzM/8zMzP/MzMz/zMz + M78zMzMQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAzMzNQMzMz/zMzM/8zMzP/v7+//8TVzf9GUqj/Mjun/5exr/+ivbD/or2w/6K9sP+ivbD/jLah/3uw + lf92r5L/dq+S/3avkv92r5L/dq+S/3avkv92r5L/eK+T/5m6qv8KC6P/jaWu/6K9sP+ivbD/0N7X//X7 + +P/U8OL/y+3c/8vt3P/L7dz/y+3c/8vt3P/L7dz/2PHk/5Tbt/+U27f/lNu3/5Tbt/+U27f/lNu3/5Tb + t/+U27f/lNu3/5Tbt/+U27f/lNu3/5Tbt/9vpLz/EhvJ/3KF1f/L7dz/y+3c/8vt3P/L7dz/y+3c/8vt + 3P/L7dz/y+3c/7HP2v8yO9D/MjvQ/6TA2f/L7dz/y+3c/8vt3P/L7dz/y+3c/8vt3P/L7dz/y+3c/87u + 3v/l7en/cnJy/zMzM/8zMzP/MzMz/zMzM/8zMzNwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAzMzPvMzMz/zMzM/9ycnL/z8/t/2V2 + q/+ivbD/or2w/6K9sP+Zuqr/hrSd/3ivk/92r5L/dq+S/3avkv92r5L/dq+S/3avkv92r5L/dq+S/3av + kv+Rt6T/or2w/0ZSqP9baqr/rcW5/+3y8P/o9+//zu7e/8vt3P/L7dz/y+3c/8vt3P/L7dz/y+3c/8vt + 3P/L7dz/pODC/5Tbt/+U27f/lNu3/5Tbt/+U27f/lNu3/5Tbt/+U27f/lNu3/5Tbt/+U27f/Sm3B/xsp + yP94sbr/qOHE/8vt3P/L7dz/y+3c/8vt3P/L7dz/y+3c/8vt3P/L7dz/y+3c/8vt3P9yhdX/DA7N/2V2 + 1P++3tv/y+3c/8vt3P/L7dz/y+3c/8vt3P/b8ub/yMrJ/0xMTP8zMzP/MzMz/zMzM/8zMzPfMzMzMAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAADMzM48zMzP/MzMz/zMzM//y8vL/sMi8/5e5qP+JtZ//frGX/3avkv92r5L/dq+S/3av + kv92r5L/dq+S/3avkv92r5L/dq+S/3avkv92r5L/g7Ob/6K9sP+ivbD/g5mt/2Nnwf/1+ff/2/Lm/8vt + 3P/L7dz/y+3c/8vt3P/L7dz/y+3c/8vt3P/L7dz/y+3c/8vt3P/E6tf/qOHE/5Tbt/+U27f/lNu3/5Tb + t/+U27f/lNu3/5Tbt/+U27f/gb+5/xspyP9AX8L/is24/5Tbt/+U27f/peDC/8fr2f/L7dz/y+3c/8vt + 3P/L7dz/y+3c/8vt3P/L7dz/y+3c/8vt3P+xz9r/MjvQ/xkdzv+Ysdj/y+3c/8vt3P/L7dz/6Pfv/5mZ + mf8zMzP/MzMz/zMzM/8zMzP/MzMzrzMzMxAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMzMzIDMzM/8zMzP/MzMz/6Wl + pf/D3M//dq+S/3avkv92r5L/dq+S/3avkv92r5L/dq+S/3avkv92r5L/dq+S/3avkv92r5L/dq+S/3uw + lf+fvK7/or2w/6fBtP/c5uH/2Nz0/0VM1f+kwNn/y+3c/8vt3P/L7dz/y+3c/8vt3P/L7dz/y+3c/8vt + 3P/L7dz/y+3c/8vt3P/L7dz/vejS/5rdu/+U27f/lNu3/5Tbt/+U27f/lNu3/1yIvv8SG8n/ZZa9/5Tb + t/+U27f/lNu3/5Tbt/+U27f/mt27/73o0v/L7dz/y+3c/8vt3P/L7dz/y+3c/8vt3P/L7dz/y+3c/8vt + 3P/L7dz/coXV/wwOzf8/StH/yOHh/+ju6/9mZmb/MzMz/zMzM/8zMzP/MzMz/zMzM3AAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAMzMzzzMzM/8zMzP/TExM//b6+P92r5L/dq+S/3avkv92r5L/dq+S/3av + kv92r5L/dq+S/3avkv92r5L/dq+S/3avkv92r5L/l7mo/6K9sP+zyb7/7fLw/+X27f/L7dz/coXV/wwO + zf9ldtT/y+3c/8vt3P/L7dz/x+vZ/8vt3P/L7dz/y+3c/8vt3P/L7dz/y+3c/8vt3P/L7dz/x+vZ/6jh + xP+U27f/lNu3/4rNuP8uRMX/JTbG/4G/uf+U27f/lNu3/5Tbt/+U27f/lNu3/5Tbt/+U27f/lNu3/57e + vf+25s7/x+vZ/8vt3P/L7dz/y+3c/8vt3P/L7dz/y+3c/8fr2f+96NL/ncjM/3J73P+8vMj/Pj4+/zMz + M/8zMzP/MzMz/zMzM88zMzMwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAzMzNgMzMz/zMz + M/8zMzP/2NjY/6nNuv92r5L/dq+S/3avkv92r5L/dq+S/3avkv92r5L/dq+S/3avkv92r5L/dq+S/4y2 + of+ivbD/ytnS//X59//Y8eT/y+3c/8vt3P/L7dz/sc/a/zI70P8mLM//pMDZ/8Tq1/+X3Ln/x+vZ/8vt + 3P/L7dz/y+3c/8vt3P/L7dz/y+3c/8vt3P/L7dz/y+3c/57evf9vpLz/EhvJ/0ptwf+U27f/lNu3/5Tb + t/+U27f/lNu3/5Tbt/+U27f/lNu3/5Tbt/+U27f/lNu3/5Tbt/+U27f/nt69/6HfwP+h38D/od/A/6Hf + wP+U27f/lNu3/5rdu//d8+j/jIyM/zMzM/8zMzP/MzMz/zMzM/8zMzOfMzMzEAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAADMzMxAzMzPvMzMz/zMzM/9/f3//3Ovj/3avkv92r5L/dq+S/3av + kv92r5L/dq+S/3avkv92r5L/dq+S/3avkv+GtJ3/p8G0/+Hq5v/u+fT/zu7e/8vt3P/L7dz/y+3c/8vt + 3P/L7dz/y+3c/3KF1f8MDs3/V3LK/5Tbt/+e3r3/x+vZ/8vt3P/L7dz/y+3c/8vt3P/L7dz/y+3c/8vt + 3P/L7dz/XnTP/xIbyf9vpLz/lNu3/5Tbt/+U27f/lNu3/5Tbt/+U27f/lNu3/5Tbt/+U27f/lNu3/5Tb + t/+U27f/lNu3/5Tbt/+U27f/lNu3/5Tbt/+U27f/lNu3/5Tbt/+o4cT/2OHc/1lZWf8zMzP/MzMz/zMz + M/8zMzPvMzMzYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADMz + M58zMzP/MzMz/z8/P//y8vL/h7mf/3avkv92r5L/dq+S/3avkv92r5L/dq+S/3avkv92r5L/ibWf/7nN + w//z9vX/4fTr/8vt3P/L7dz/y+3c/8vt3P/L7dz/y+3c/8vt3P/L7dz/y+3c/6rN1f8lNsb/GynI/3ix + uv+l4ML/y+3c/8vt3P/L7dz/y+3c/8vt3P/L7dz/sc/a/yYsz/8/StH/otXI/5Tbt/+U27f/lNu3/5Tb + t/+e3r3/rOLH/6/kyf+25s7/xOrX/8vt3P/L7dz/y+3c/8vt3P/L7dz/y+3c/8vt3P/E6tf/uefQ/6/k + yf+v5Mn/0O/f/7+/v/8+Pj7/MzMz/zMzM/8zMzP/MzMzzzMzMzAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMzMzQDMzM/8zMzP/MzMz/7Kysv+618j/dq+S/3av + kv92r5L/dq+S/3avkv92r5L/e7CV/5m6qv/Q3tf/9fv4/9Tw4v/L7dz/y+3c/8vt3P/L7dz/y+3c/8vt + 3P/L7dz/y+3c/8vt3P/L7dz/od/A/5Tbt/9Te8D/CQ3K/0ptwf+o4cT/y+3c/8vt3P/L7dz/y+3c/4ui + 1/8ZHc7/coXV/8vt3P/E6tf/od/A/6/kyf+559D/x+vZ/8vt3P/L7dz/y+3c/8vt3P/L7dz/y+3c/8vt + 3P/L7dz/y+3c/8vt3P/L7dz/y+3c/8vt3P/L7dz/zu7e/+Xt6f+MjIz/MzMz/zMzM/8zMzP/MzMz/zMz + M48AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAMzMz3zMzM/8zMzP/WVlZ/+318f92r5L/dq+S/3avkv92r5L/e7CV/5G3pP+nwbT/5+7r/+v4 + 8f/O7t7/y+3c/8vt3P/L7dz/y+3c/8vt3P/L7dz/y+3c/8vt3P/L7dz/y+3c/7Lly/+U27f/lNu3/5Tb + t/+Bv7n/JTbG/xspyP+avdL/y+3c/77e2/9MWNL/JizP/6TA2f/L7dz/y+3c/8vt3P/L7dz/y+3c/8vt + 3P/L7dz/y+3c/8vt3P/L7dz/y+3c/8vt3P/L7dz/y+3c/8vt3P/L7dz/y+3c/8vt3P/L7dz/y+3c/9vy + 5v/V19b/WVlZ/zMzM/8zMzP/MzMz/zMzM+8zMzNQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAzMzOAMzMz/zMzM/8zMzP/5eXl/6DI + tP92r5L/e7CV/5G3pP+ivbD/v9HI//X59//e8+n/y+3c/8vt3P/L7dz/y+3c/8vt3P/L7dz/y+3c/8vt + 3P/L7dz/y+3c/8vt3P/H69n/l9y5/5Tbt/+U27f/lNu3/5fcuf+s4sf/coXV/wwOzf9YZ9P/GR3O/1hn + 0/++3tv/y+3c/8vt3P/L7dz/y+3c/8vt3P/L7dz/y+3c/8vt3P/L7dz/y+3c/8vt3P/L7dz/y+3c/8vt + 3P/L7dz/y+3c/8vt3P/L7dz/y+3c/8vt3P/o9+//srKy/z4+Pv8zMzP/MzMz/zMzM/8zMzPPMzMzIAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAADMzMyAzMzP/MzMz/zMzM/+MjIz/1ube/5G3pP+ivbD/or2w/9bi3P/1+/j/0e/g/8vt + 3P/L7dz/y+3c/8vt3P/L7dz/y+3c/8vt3P/L7dz/y+3c/8vt3P/L7dz/y+3c/6HfwP+U27f/lNu3/5rd + u/+25s7/y+3c/8vt3P/L7dz/fpTW/wAAzP8MDs3/coXV/8vt3P/L7dz/y+3c/8vt3P/L7dz/y+3c/8vt + 3P/L7dz/y+3c/8vt3P/L7dz/y+3c/8vt3P/L7dz/y+3c/8vt3P/L7dz/y+3c/8vt3P/U8OL/6O7r/39/ + f/8zMzP/MzMz/zMzM/8zMzP/MzMzgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADMzM68zMzP/MzMz/z8/ + P///////p8G0/7PJvv/t8vD/6Pfv/8vt3P/L7dz/y+3c/8vt3P/L7dz/y+3c/8vt3P/L7dz/y+3c/8vt + 3P/L7dz/y+3c/8vt3P+v5Mn/lNu3/5rdu/+y5cv/y+3c/8vt3P/L7dz/y+3c/2V21P8mLM//sc/a/4ui + 1/8MDs3/MjvQ/7HP2v/L7dz/y+3c/8vt3P/L7dz/y+3c/8vt3P/L7dz/y+3c/8vt3P/L7dz/y+3c/8vt + 3P/L7dz/y+3c/8vt3P/L7dz/3vPp/9XX1v9MTEz/MzMz/zMzM/8zMzP/MzMz7zMzM0AAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAMzMzYDMzM/8zMzP/MzMz/7+/v//n7uv/9fn3/9jx5P/L7dz/y+3c/8vt + 3P/L7dz/y+3c/8vt3P/L7dz/y+3c/8vt3P/L7dz/y+3c/8vt3P/L7dz/tubO/5Tbt/+l4ML/x+vZ/8vt + 3P/L7dz/y+3c/77e2/8yO9D/WGfT/8vt3P/L7dz/y+3c/77e2/9MWNL/DA7N/3KF1f/L7dz/y+3c/8vt + 3P/L7dz/y+3c/8vt3P/L7dz/y+3c/8vt3P/L7dz/y+3c/8vt3P/L7dz/zu7e/+759P+lpaX/MzMz/zMz + M/8zMzP/MzMz/zMzM78zMzMQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMzMz7zMz + M/8zMzP/ZmZm//Ly8v/e8+n/y+3c/8vt3P/L7dz/y+3c/8vt3P/L7dz/y+3c/8vt3P/L7dz/y+3c/8vt + 3P/L7dz/y+3c/7bmzv+U27f/tubO/8vt3P/L7dz/y+3c/8vt3P+Ysdj/GR3O/4ui1//L7dz/y+3c/8vt + 3P/L7dz/y+3c/8vt3P+Ysdj/GR3O/zI70P+xz9r/y+3c/8vt3P/L7dz/y+3c/8vt3P/L7dz/y+3c/8vt + 3P/L7dz/wOnV/83u3f/r8O3/cnJy/zMzM/8zMzP/MzMz/zMzM/8zMzOAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAzMzOPMzMz/zMzM/8zMzP/TExM/8zMzP/u+fT/zu7e/8vt + 3P/L7dz/y+3c/8vt3P/L7dz/y+3c/8vt3P/L7dz/y+3c/8vt3P+y5cv/l9y5/8Dp1f/L7dz/y+3c/8vt + 3P/L7dz/ZXbU/yYsz/+xz9r/y+3c/8vt3P/L7dz/y+3c/8vt3P/L7dz/y+3c/8vt3P/L7dz/ZXbU/wwO + zf9yhdX/vejS/7bmzv+v5Mn/udWz/7zEmP/FvIv/t7eC/7e3gv/N6NT/2NjY/0xMTP8zMzP/MzMz/zMz + M/8zMzPfMzMzQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADMz + MyAzMzPvMzMz/zMzM/8zMzP/MzMz/4yMjP/v8fD/2/Lm/8vt3P/L7dz/y+3c/8vt3P/L7dz/y+3c/8vt + 3P/H69n/peDC/5rdu//A6dX/y+3c/8vt3P/L7dz/sc/a/zI70P9YZ9P/y+3c/8vt3P/L7dz/y+3c/8vt + 3P/L7dz/y+3c/8fr2f+25s7/rOLH/57evf+U27f/eLG6/y0tuf8lNsb/tKON/+7Ejv/11KT/+d+y//7q + wf/+68T//vnv/5mZmf8zMzP/MzMz/zMzM/8zMzP/MzMzrzMzMxAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADMzMxAzMzOvMzMz/zMzM/8zMzP/MzMz/z8/ + P/+/v7//7vn0/87u3v/L7dz/y+3c/8vt3P/H69n/r+TJ/5fcuf+X3Ln/wOnV/8vt3P/L7dz/y+3c/4ui + 1/8ZHc7/mLHY/8vt3P/L7dz/y+3c/8vt3P/L7dz/y+3c/8Dp1f+o4cT/lNu3/5Tbt/+U27f/mNaw/7DF + lv/awYz/88+c/46Dxf8fHcr/joPF//7qwf/+6sH//vDU//Lw7v9mZmb/MzMz/zMzM/8zMzP/MzMz/zMz + M3AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAzMzNQMzMz3zMzM/8zMzP/MzMz/zMzM/9ycnL/7/Hw/+H06/+25s7/qOHE/5fc + uf+U27f/lNu3/73o0v/L7dz/y+3c/8vt3P9YZ9P/MjvQ/77e2//L7dz/y+3c/8vt3P/L7dz/y+3c/8Dp + 1f+h38D/lNu3/5Tbt/+U27f/mNaw/7m8if/ow43/++S5//7qwf/+6sH//urB/+7bwf9PScj/PzrJ//71 + 4//MzMz/Pj4+/zMzM/8zMzP/MzMz/zMzM98zMzMwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAzMzMQMzMzjzMz + M/8zMzP/MzMz/zMzM/8/Pz//paWl/+T27f+h38D/lNu3/5Tbt/+v5Mn/y+3c/8vt3P+xz9r/JizP/2V2 + 1P/L7dz/y+3c/8vt3P/L7dz/y+3c/8fr2f+v5Mn/lNu3/5Tbt/+U27f/lNu3/7XBj//ow43/++S5//7q + wf/+6sH//urB//7qwf/+6sH//urB//7tzP/u7PT/jIyM/zMzM/8zMzP/MzMz/zMzM/8zMzOfMzMzEAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMzMzQDMzM98zMzP/MzMz/zMzM/8zMzP/ZmZm/97j + 4f/C6tb/od/A/8vt3P/L7dz/i6LX/xkdzv+Ysdj/y+3c/8vt3P/L7dz/y+3c/8vt3P/E6tf/nt69/5Tb + t/+U27f/lNu3/6HNo//YvIX/++S5//7qwf/+6sH//urB//7qwf/+6sH//urB//7qwf/+8dj/5eTh/1lZ + Wf8zMzP/MzMz/zMzM/8zMzPvMzMzYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAMzMzEDMzM48zMzP/MzMz/zMzM/8zMzP/Pz8//5mZmf/y+vb/0e/g/1hn0/8yO9D/vt7b/8vt + 3P/L7dz/y+3c/8vt3P/L7dz/uefQ/5fcuf+U27f/lNu3/5Tbt/+syp3/6siU//7qwf/+6sH//urB//7q + wf/+6sH//urB//7qwf/+68T//vjr/7+/v/8+Pj7/MzMz/zMzM/8zMzP/MzMzzzMzMzAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADMzM0AzMzPPMzMz/zMz + M/8zMzP/MzMz/1lZWf/Y2Nj/mJ3n/8vt3P/L7dz/y+3c/8vt3P/L7dz/y+3c/7nn0P+U27f/lNu3/5Tb + t/+U27f/vriC//fZq//+6sH//urB//7qwf/+6sH//urB//7qwf/+6sH//u3M//Lv6v+MjIz/MzMz/zMz + M/8zMzP/MzMz/zMzM58zMzMQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAzMzOAMzMz/zMzM/8zMzP/MzMz/zMzM/+ZmZn/9fv4/9Tw + 4v/L7dz/y+3c/8vt3P+559D/lNu3/5Tbt/+U27f/lNu3/8S5g//75Ln//urB//7qwf/+6sH//urB//7q + wf/+6sH//urB//704P/Y2Nj/WVlZ/zMzM/8zMzP/MzMz/zMzM+8zMzNQAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAzMzMwMzMzzzMzM/8zMzP/MzMz/zMzM/9MTEz/zMzM/+X27f/L7dz/wOnV/5Tbt/+U27f/lNu3/5Tb + t//AvYn/++S5//7qwf/+6sH//urB//7qwf/+6sH//urB//7rxP/++e//srKy/z4+Pv8zMzP/MzMz/zMz + M/8zMzPPMzMzIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMzMzgDMzM/8zMzP/MzMz/zMz + M/8zMzP/jIyM/+ju6/+y5cv/lNu3/5Tbt/+U27f/wL2J//nfsv/+6sH//urB//7qwf/+6sH//urB//7q + wf/+8NT/8vDu/39/f/8zMzP/MzMz/zMzM/8zMzP/MzMzjwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAMzMzMDMzM78zMzP/MzMz/zMzM/8zMzP/TExM/8HFw//Q79//mt27/6zK + nf/32av//urB//7qwf/+6sH//urB//7qwf/+6sH//vXj/9jY2P9MTEz/MzMz/zMzM/8zMzP/MzMz7zMz + M1AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADMz + M3AzMzPvMzMz/zMzM/8zMzP/MzMz/3Jycv/k7en/7tiy//7qwf/+6sH//urB//7qwf/+6sH//u3M//77 + 8/+lpaX/MzMz/zMzM/8zMzP/MzMz/zMzM78zMzMQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADMzMyAzMzO/MzMz/zMzM/8zMzP/MzMz/0pF + Qf+ysrL//vXj//7rxP/+6sH//urB//7x2P/y8O7/cnJy/zMzM/8zMzP/MzMz/zMzM/8zMzOAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAzMzNwMzMz7zMzM/8zMzP/MzMz/zMzM/9mZmb/5eLd//7w1P/++Ov/zMzM/0xM + TP8zMzP/MzMz/zMzM/8zMzPvMzMzQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAzMzMgMzMzrzMz + M/8zMzP/MzMz/zMzM/8/Pz//paWl/5mZmf8zMzP/MzMz/zMzM/8zMzP/MzMzrzMzMxAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMzMzUDMzM+8zMzP/MzMz/zMzM/8zMzP/MzMz/zMz + M/8zMzP/MzMz/zMzM3AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAMzMzEDMzM68zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM98zMzMwAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADMzM1AzMzPvMzMz/zMz + M/8zMzOvMzMzEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAADMzMxAzMzP4MzMzcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA//////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////////////////////4AAP/////////////////wAAAP////////////////gAAAA//// + ////////////gAAAAD///////////////gAAAAAP//////////////wAAAAAB//////////////4AAAA + AAP/////////////8AAAAAAA/////////////8AAAAAAAH////////////+AAAAAAAA///////////// + gAAAAAAAH////////////wAAAAAAAB////////////4AAAAAAAAP///////////8AAAAAAAAB/////// + /////AAAAAAAAAf///////////gAAAAAAAAD///////////4AAAAAAAAA///////////+AAAAAAAAAH/ + //////////AAAAAAAAAA///////////wAAAAAAAAAH//////////8AAAAAAAAAAf//////////AAAAAA + AAAAD//////////gAAAAAAAAAAP/////////4AAAAAAAAAAB/////////+AAAAAAAAAAAH/////////g + AAAAAAAAAAAf////////4AAAAAAAAAAAD////////+AAAAAAAAAAAAP////////gAAAAAAAAAAAB//// + ////4AAAAAAAAAAAAH///////+AAAAAAAAAAAAA////////gAAAAAAAAAAAAH///////4AAAAAAAAAAA + AB///////+AAAAAAAAAAAAAP///////gAAAAAAAAAAAAD///////4AAAAAAAAAAAAA///////+AAAAAA + AAAAAAAH///////gAAAAAAAAAAAAB///////8AAAAAAAAAAAAAP///////AAAAAAAAAAAAAD///////w + AAAAAAAAAAAAA///////8AAAAAAAAAAAAAH///////AAAAAAAAAAAAAB///////4AAAAAAAAAAAAAP// + ////+AAAAAAAAAAAAAD///////wAAAAAAAAAAAAA///////8AAAAAAAAAAAAAH///////AAAAAAAAAAA + AAB///////gAAAAAAAAAAAAAf//////gAAAAAAAAAAAAAD//////wAAAAAAAAAAAAAA//////4AAAAAA + AAAAAAAAH/////4AAAAAAAAAAAAAAB/////8AAAAAAAAAAAAAAAf////8AAAAAAAAAAAAAAAD////+AA + AAAAAAAAAAAAAA/////AAAAAAAAAAAAAAAAH////gAAAAAAAAAAAAAAAAf///4AAAAAAAAAAAAAAAAD/ + ///AAAAAAAAAAAAAAAAAP///8AAAAAAAAAAAAAAAAB////gAAAAAAAAAAAAAAAAH///+AAAAAAAAAAAA + AAAAA////wAAAAAAAAAAAAAAAAD////AAAAAAAAAAAAAAAAAf///4AAAAAAAAAAAAAAAAB////gAAAAA + AAAAAAAAAAAP///8AAAAAAAAAAAAAAAAA////wAAAAAAAAAAAAAAAAH///+AAAAAAAAAAAAAAAAAf/// + 4AAAAAAAAAAAAAAAAD////AAAAAAAAAAAAAAAAAP///8AAAAAAAAAAAAAAAAB////gAAAAAAAAAAAAAA + AAH///+AAAAAAAAAAAAAAAAB////wAAAAAAAAAAAAAAAAf////AAAAAAAAAAAAAAAAP////wAAAAAAAA + AAAAAAAP////8AAAAAAAAAAAAAAAH/////gAAAAAAAAAAAAAAH/////4AAAAAAAAAAAAAAD//////AAA + AAAAAAAAAAAB//////wAAAAAAAAAAAAAB//////8AAAAAAAAAAAAAA///////gAAAAAAAAAAAAAf//// + //4AAAAAAAAAAAAAf///////AAAAAAAAAAAAAP///////wAAAAAAAAAAAAH///////8AAAAAAAAAAAAH + ////////gAAAAAAAAAAAD////////4AAAAAAAAAAAB////////+AAAAAAAAAAAB/////////wAAAAAAA + AAAA/////////8AAAAAAAAAAA//////////gAAAAAAAAAAf/////////4AAAAAAAAAAP/////////+AA + AAAAAAAAP//////////wAAAAAAAAAH//////////8AAAAAAAAAD///////////gAAAAAAAAD//////// + ///4AAAAAAAAB///////////+AAAAAAAAA////////////wAAAAAAAA/////////////AAAAAAAAf/// + /////////4AAAAAAAP/////////////gAAAAAAP/////////////8AAAAAAH//////////////wAAAAA + D///////////////AAAAAD///////////////4AAAAB////////////////gAAAB//////////////// + 8AAAA/////////////////wAAAf////////////////+AAAf/////////////////4AAP/////////// + ///////AAH//////////////////8AH///////////////////gD///////////////////+B/////// + /////////////x////////////////////////////////////////////////////8oAAAAMAAAAGAA + AAABACAAAAAAAIAlAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAzMzMtMTExbS0tLZ4rKyu8Kioqvioq + Kr4rKyunLy8vdzMzMzozMzMCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMzMzei8vL+0sLCz/Ojo6/1NT + U/9gYGD/Y2Nj/2dnZ/9eXl7/QkJC/ysrK/8rKyv0MjIymTMzMwIAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADMzMxQxMTHVLi4u/0pK + Sv9/f3//sbGx/9HR0f/n5+f/9fX1///////7+/v/39/f/6urq/9lZWX/Ly8v/y0tLeozMzM3AAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMzMzKDEx + MfE1NTX/ZWVl/5+fn/+7u7v/x8fH/9LS0v/g4OD/7e3t//v7+//6+vr/8/Pz//Hx8f/l5eX/p6en/0VF + Rf8rKyv5MzMzSAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAzMzMMMTEx7Tk5Of9oaGj/jY2N/5+fn/+wsLD/wMDA/9DQ0P/h4eH/7u7u//z8/P/6+vr/7u7u/+bm + 5v/g4OD/39/f/8TExP9dXV3/Kysr+jMzMzMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAyMjK4NTU1/1xcXP92dnb/hISE/5ycnP/BwcH/39/f/+zs7P/w8PD/8/Pz//b2 + 9v/4+Pj/9vb2/+3t7f/g4OD/1NTU/9TU1P/FxcX/S0tL/y0tLeEAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAADMzMyUwMDD9Tk5O/2hoaP9ra2v/np6e/+Dg4P/y8vL/6+vr/+Xl + 5f/i4uL/4uLi/+Hh4f/i4uL/5+fn/+/v7//09PT/4+Pj/8vLy//U1NT/paWl/zExMf8yMjJaAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADIyMpA3Nzf/YGBg/2NjY/+tra3/9fX1/+/v + 7//k5OT/5OTk/+Xl5f/n5+f/6Ojo/+jo6P/m5ub/5OTk/+Pj4//o6Oj/9fX1/+rq6v/Ozs7/zs7O/1hY + WP8nJif4MTExbgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAwMMhAQED/YGBg/7Gx + sf/9/f3/6+vr/+jo6P/p6en/7Ozs/+np6f/c3Nz/2NjY/9nZ2f/h4eH/7Ozs/+rq6v/o6Oj/6Ojo//T0 + 9P/u7u7/1tbW/319ff9aXVv/Pz87/yorKsszMzMbAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAw + MNU+Pj7/lpaW//39/f/t7e3/7Ozs/+zs7P/w8PD/39/f/8XFxf/Nzc3/0dHR/8/Pz//Gxsb/zs7O/+zs + 7P/u7u7/7Ozs/+vr6//4+Pj/7u7u/4aEhf97po7/maa3/1lWXf8oKCn3MDAwfwAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAC8vL9RGRkb/4eHh//n5+f/v7+//8PDw//Pz8//g4OD/x8fH/+np6f/09PT/9fX1//f3 + 9//29vb/wsLC/7+/v//w8PD/8fHx//Dw8P/x8fH//////5GPjP87XYX/kKbA//jsy/+XlY7/NTY4/yoq + KtMzMzMoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAACoqKtRjY2P//f39//T09P/09PT/9PT0//T09P/Ozs7/7+/w//f3 + 9//+/vX/9/fu/+bm5f+rq6v/s7Oz/9ra2v/b29v/9/f3//T09P/z8/P//////52Zm/9hjIb/q9+w//3l + tv//+NH/1M27/2BgYP8oKSn6MjIygQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACcnJ9R6enr///////f39//39/f/+Pj4//Ly + 8v/V1db//Pz7////+f97e+H/hITM/4+Piv+BgYD/8vLy//Hx8f/Y2Nj/+vr6//f39//4+Pj/+vr6/6Ke + oP93nov/n9ux//LgtP//68L///LG//vy1P+VlZL/Li4v/zIyMjMAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACcnJ9WCgoL/+vr6//r6 + +v/7+/v/+/v7//r6+v/V1dT////8/4KC5f8AAMj/AADI/0VFp//i4t///////+vr6//b29v//v7+//v7 + +///////2dnZ/5+bnf90nIn/ntuy//Dfsv//7MH//+7J//TozP/l3Mr/VVVW/ywsLa4AAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgo + KMt2dnb/7e3t//X19f///////v7+///////x8eT/fHzW/wAAzf8jI9P/j4/q/+3t/////////v7+/9PT + 0//w8PD////////////09PT/sLCw/5uXmf9rnof/pNqv//ritf//8dL/5tvF/8q7nP/Xx6b/lZOO/ygo + KvUzMzMEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAC4uLpRNTU3/5eXl/9zc3P/+/v7///////7+//+dnez/IiLN/3190P/h4e/////4//n5 + 9v/p6en/1dXV/+jo6P////////////////+fn5//s7Kz/3p8ev91upr/tdqw//vny//bz7j/yLiX/8q6 + mP/Pvpz/yr+u/zw9P/8wMDBqAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAADMzMyoqKir9rq6u/+Tk5P/Z2dn//v7+/+Dg+v+enuz/7+/8//z8 + 8P/k5OD/3t7d/93d3f/h4eH/9vb2/////////////////7Gxsf92dnb/xsLD/1VuYf+h5cX/1NrC/9PD + p//IuJb/zb2c/9C8m//JsYz/s76b/2xyb/8qKSrXAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAuLi65QkFB/97d3f/Y2Nj/2NjY//X1 + 9//////////////////////////////////////////////////z8/P/sLCw/29vb//MzMv/amtw/5G8 + qf+50Lb/y7aV/868mv/PuZf/wrCL/6mqhf+PrIH/ZJSY/4ONn/8zMS/9MjIyJgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADIyMl0sKivzS0xL/2ls + a//i4OH/39/f/9fX1//r6+v/+Pj4//39/f///////v7+//39/f/6+vr/7u7u/9LS0v+enp7/i4uL/8/P + z/+HhIT/fYuU/4Wms/+1roT/zrWR/7arh/+VpoP/fqyI/3Kvj/9Pe5n/U3Cg/6rAvP9SUFD/LS0toAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAALi4uqjAs + Lv51fHn/q+LG/3Wukf9fZWL/zsnL//Ly8//q6ur/6+vr//T09P/8/Pz/8/Pz/+Tk5P/U1NT/wcHB/7e3 + t//Gxsb/zs7O/3x6e/95jIP/i7qe/2lmg/+spIP/iaeE/3SrjP91tZL/a6ST/0prmv94jqv/p8Kw/7jQ + w/+EiYn/KSgp8DMzMwIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADM0 + MywsKyvfQT0+/5GnnP+m58b/k964/5njvf+Av5//VnBk/4iKiP/Ozsv/7u/w///+//////////////Pz + 8//q6er/4uHh/87Nzf+cm5v/cXJx/46dlv+Mu6T/iKFz/2h7hv9djpT/draT/3m2kv9gkZT/TG2a/42o + rP+rxbP/oL2w/423oP+qs6T/OTc5/zExMVIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAMzMzfy4tLvxaW1v/qdG9/5znwf+S27b/lNu3/5Tbt/+T4b7/od6v/7Ckif9iXHn/g3x1/3+C + ff+MjJP/jY2T/5udlf+Fh4b/d357/36Ig/+gqqX/sMa7/6XCtP9/sZf/drCR/2yklf9QeJf/eLKS/1R+ + lv9TfJb/lrio/6rDs/+cu63/erCX/5ilf//Yx6v/Y2Nl/yMjI+YzMzMlAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAMzMzZy8uLvFQUlH/mbmp/6PmxP+T3rn/kdu3/47cuf+j26r/v7mp/6+e + yv/l0cr/0NGh/5fLrP+ct7n/VWOy/3+WtP+11cH/zufa/9Ll3P+uyLv/oLyv/567rf96sJX/da+R/326 + kf9Nc5j/SWuY/2GSk/+Mup7/p7+y/5+8rv95spf/haSB/8myj//l2cH/2tbJ/2BhYv8nJyn5Ly8vgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADQ0NAYtLS2zMy4x/nN8eP+n2cD/puK5/73U + pv+ypLH/sqDG//fjw//l36v/pNq3/8jw3v/U9+L/x+vf/42k3/+1xeb/xNjL/6C7rf+gvK7/o72x/5u7 + q/94sZL/ebWR/12Klf84U5v/VHyW/366kf+auqv/pr6z/4y2ov9tqIj/tLCQ/+3gyv//7sz///LH//zx + 1f+cm5X/Nzg6/ygpKdIzMzMjAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMTIxVyoo + Ke5MTEz/uLSg/8q3z//Lusj//+6+/9zaqv+f17T/wuza/83t3f/J7dv/1/Tk/+H04P93hLb/hp+q/6XB + sP+ivbD/pL6y/5a9pf9yqpH/Sm+X/1F4lv9xqZL/SnCX/3yxlv+ivbD/obyv/3euk/+Xu6L/8ubM///v + yP/+6r///urA///swP//99H/3NbB/2tqZv8oKCr5Ly8vgwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAADMzMwYtLCyxLi4y/np4fP/z5sb/0uCy/5vZtv/B69n/ze3d/8zu3f/a8ub/ydvS/6jC + sf+Em6v/a36r/6nEsP+ivrD/qsay/3SZoP8/Ypb/dZah/5e/pP99t5L/UHmV/2+YnP+kwK//nbqs/6HM + uf/a4cL//+3D//7pwP/+6sH//urB//7qwf//87//59bH/7at1v+ioJv/QD0//ykpKdkyMzMoAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMjIxVSgoKO5LSUr/m7So/9T46P/P8eD/0PDg/9ru + 5P+6zsT/nrqs/6G8r/+ivbD/YXGq/6C7sP+mwbH/cIOr/0domf90p5X/pMKu/6W+sv+CtZj/ZJmS/1By + mP+zy7j/yuHW/6HixP/D06b//+rB//7qwf/+6sH//+3B///ywf+/ssP/l4vF/+bVv//v6rz/uMez/2Zq + av8rKSr6Li4uhwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADMzMwgsLC2zMi8x/n6A + f//U6N7/1efe/6zCt/+euqz/or2w/6K9sP+oxLD/e5Ct/3SIrP9mdK3/YIGe/3Syj/+RuaP/pb6y/6O9 + sP+Bspn/ca2N/3aPsv/C0uL/0/je/5Peuv+r0af//+O3///sxP//8cH/8+TB/6GUxf+uocT//e7D///m + tv+kzqP/kOC5/7fp0P+gp6T/R0dH/zAwMNwzMzNIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAMTExVCMiI/NvbW7/uM7E/526rP+ivbD/or2w/6O+sP+qxrH/gZat/zlBqP+JpKv/f7iT/3+y + l/+ivbD/o72w/6G8r/+Zuqn/qdO8/6neyP9ujs3/kafZ/53fvf+T3rP/y9Gk///vuv/ZysX/k4fH/9HD + xP//9sP//+zB/+Tarf+X1a3/oODB/8n03//d+Or/c3Vz/ywrK/8zMzOUAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAADExMV04Njf/sL23/6TBs/+ivbD/pcCw/6S/sP93i6z/domt/3KC + rf94ppr/drGR/5m6qf+jvbH/nrqs/7DGvP/P5dr/o+LC/4/csv+o5cL/nLPb/2GCyP98vbj/mOGy/4qW + rv+Ngbb/7tW2///rtv/x3rH/ydOm/5nWsf+u5sz/1vnn/7/Tyf9YWln/Kysr9DMzM1UAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADMzMwQpKCn0iIuK/7PMwP+mwq//mLGv/2t9 + q/+EmK//qcaw/3acn/9PfJP/j7yf/6O9sP+fuq3/vdHH/9vv5v+96tT/kNq0/5Pbtv+U27f/x/LU/8bl + 3v9piMr/PF3B/2Kdvf+e363/qtWm/6jSqP+f1a//pODD/8Tv2//a+On/naqj/z48Pf8rKirVMzMzFgAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAtLS2tUlBR/7zO + xP+Gnq3/bH2s/5ausf+hwqz/gbOZ/3Ktj/9Qcpr/mbWs/6jAs//M3tX/2PLl/8jt2v+d3r3/ktq2/5Tb + t/+S27X/qOjA/7LO2/+Intj/kqvX/3Wayf+UxMn/te/N/7fq0v/D69n/1ffm/8/o3P93fHr/LSss/i4u + LpYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAyMjIxMTAv/pacpv9+k7T/mLmp/4y5n/93r5P/c66Q/3y1kv9qhKL/mqm9/9/04P/S8uL/y+3c/8Xr + 2P+W27j/kdq1/5fgt/+V3bf/aZ+7/3GWx//H59z/2fvf/8Pi3v+Gmdn/ip3Z/8fm3v/a/On/uMrB/1RU + VP8oJifwMjIySgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAKikp4XBwcv+dybD/c66P/3OukP91r5L/cayO/462of/D1M3/mKbf/6bB + 2//Q9dv/zvDd/8zt3f/B6tX/pue+/4bJt/9cib7/cqy6/5XgtP+l4sH/vujT/8rv2f/O89r/mLnX/4SZ + 3f+XoJ7/Ojg4/ysqK8szMzMOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDAwfUI/Qf+fvK3/c7CR/3Svkf9vq4z/j7mk/9Di + 2f/Z9uT/wuTb/4SZ2P9xk8r/tODQ/9X43v/V9t//nLnW/1qFwP+Fx7f/nuS5/5/fvv+g37//o+DB/6fh + xP+q6sn/sODC/2lwbv8rKCr8Ly8vhwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMzMzECwpK/qJk47/g7yf/3Ws + kP+lxrX/2Ozi/9Hx4f/J7Nv/0PHe/8by1P9zsLj/XIPC/6K/1/+Pp9j/kKfZ/77p0/+/7dL/xuvZ/8vt + 3P/N7d3/zfDf/9j66f+wwrn/Tk1O/yooKOsyMjI8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACws + LMRZWVn/tdDC/8DXzP/a8ub/zO/d/8rt2//N7d3/yOza/6HfwP+38sb/qcvV/05a0/9ca9P/xOXc/9f5 + 3v/O7t//zO/g/8vv3//P8+H/1/Pl/5KZlf83NDX/LCsrvjMzMwgAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAADIyMk0wMDD/ra6u/+b/8//L8d//yu3c/87u3v/I7Nr/subK/8Xw1P+mv9v/iJ7Y/8jp + 3f+yzdz/b4XX/5e22v/K79X/yubJ/9Dr0P/I39P/a2xr/yknKPswMDB5AAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwMDC+MjIy/3+Cgf/P5dr/0/jl/7nn0P+x6Mf/w+jY/5Cm + 2f+Wrtj/z+/e/8Tv2P+u6cj/qte0/4+Us/+Tjbj/7N7C/7y2ov9GRkf/KSgp5TMzMzEAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMTExaycnJ/RNS0z/n7Go/7Ds + y/+v1tj/g5jY/67K2v/T9dz/q+XK/5fWsP/F06b/9eCy///5w//h1dL/fnyM/zQ0NP8tLC2zAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADMz + MxIsLCy9Ly0u/3R3dP+eq9H/yenn/8702v+e4MP/nNKp/+Xarf//6r////fO/+DYwv9paGX/KSoo+DAw + MW0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAMjIyXygnKPFIR0P/pa6m/7Xr0v+h2q7/7dyv///vxP//99L/uLSo/0FB + RP8oKSneMzMzJQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADMzMwwuLi6zLSsr/mFpZ//NyrD///vQ//bt + 0P+Ih4P/LC0v/i0tLaYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMjIyUiop + KetAP0D/mJaP/2NiYv8nJyn0MTExXAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAADMzMwIvMDCtKCkq/iwsLdkzMzMZAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAzMzMWMDAwvjIyMlIAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAA////////AAD///////8AAP/gB////wAA/4AB////AAD+AAD///8AAPwAAH///wAA+AAAP/// + AAD4AAA///8AAPAAAB///wAA8AAAD///AADwAAAD//8AAPAAAAH//wAA8AAAAH//AADwAAAAP/8AAPAA + AAAf/wAA8AAAAB//AADwAAAAD/8AAPAAAAAP/wAA8AAAAA//AAD4AAAAB/8AAPAAAAAH/wAA4AAAAAP/ + AACAAAAAA/8AAAAAAAAB/wAAAAAAAAD/AACAAAAAAD8AAOAAAAAAHwAA8AAAAAAHAAD8AAAAAAMAAP4A + AAAAAAAA/4AAAAAAAAD/wAAAAAEAAP/AAAAAAwAA/+AAAAAPAAD/4AAAAB8AAP/wAAAAPwAA//AAAAD/ + AAD/8AAAAf8AAP/4AAAD/wAA//gAAA//AAD//AAAH/8AAP/+AAB//wAA//8AAP//AAD//8AB//8AAP// + 4Af//wAA///4D///AAD///wf//8AAP///j///wAAKAAAACAAAABAAAAAAQAgAAAAAACAEAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMTExJSwsLG4qKiq9Kioq3ikp + KeMpKSnbJycnrywsLF8yMjIOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADExMU8tLS3oPj4+/2Zm + Zv+IiIj/lJSU/5KSkv9ra2v/Ojo6/ygoKNUxMTExAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAxMTF/MjIy/WFh + Yf+jo6P/zMzM/+fn5/////////////T09P/Kysr/cHBw/ywsLPcwMDBKAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMTExVzQ0 + NP5fX1//j4+P/7CwsP/Pz8//4+Pj//T09P/8/Pz/8vLy/+rq6v/d3d3/jo6O/y4uLvYxMTElAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAxMTHlTU1N/2tra/+np6f/3t7e/+rq6v/p6en/6enp/+np6f/s7Oz/7u7u/9zc3P/V1dX/cHBw/ycn + J78AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAMTExUDc3N/5eXl7/sLCw//Pz8//s7Oz/6Ojo/+Tk5P/h4eH/5OTk/+fn5//p6en/8PDw/+bm + 5v+wsLD/PTw8/ykoJsQuLi4bAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAvLy90NjY2/6SkpP/7+/v/7e3t/+7u7v/c3Nz/0dHS/9TU1P/U1NT/3d3d/+zs + 7P/r6+v/+vr6/8vIyf9yhX//bXV+/zUzNfQjJCV2AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAACoqKnNJSUn/7Ozs//f39//z8/P/4eHh/9jY2f/6+vH//v72/+Hh + 4f+6urv/4ODg//Pz8//5+fn/4d3c/1p3hv+5zML/zMas/1VUVP8mJyjLMTExLAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAISEhc2NjY//9/f3/9/f3//j4+P/d3d7////5/7+/ + 7/+WlsT/lZWT/97e3v/h4eH/9vb2//39/f/i3eD/eZiM/7ndrf//9Mb/8uzL/4uKhP8tLS7hMTExBAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfHx92ampq//j4+P/+/v7//v7+//T0 + 5/+ysuj/DAzQ/zIyxv/Kytj//f36/+Hh4f/8/Pz//////8S/wf96mo3/s9ms///swv/67Mz/5drC/1VU + Vf8qKithAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACcnJ1RQUFD+4+Pj//f3 + 9///////xcXw/z4+zf+IiNz/6ur3//X18//h4eH/8/Pz///////Pz8//n5qc/3Ggi//H4rn/797C/86/ + ov/YxKH/lo+D/ygpK8QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACsr + K96lpKT/6Ojn/+/v8//Kyvj/6ur5//397v/v7+r/6urq//r6+v//////z8/P/5SSk/+Mk5D/kcKn/9bS + tv/Ru5z/zLaT/8C4jf+UpZb/Pj5C/C4tLBQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAtLS0hKSUn5ldYV//DwsP/5+Tl//X28v/+/vv////////////8/Pz/7e3t/8XFxf+fnp7/n5yd/3iO + l/+wuKD/yrKL/62viv+Oroj/YY2N/3WWr/9qbGz/KyopkwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAKikpWjMvMfV4i4H/ldO0/3CTgf+qrKz/4ODf//j4+f///////Pz7/+fm5//Ozc3/trW1/52b + nP+CmIr/fJaM/4OJhf+Hson/bquP/1eHlv94k6r/qca6/5Ojmv8vLS/mAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAC8uL7VFQ0T/lLmm/5/qxP+T4Lv/juC3/4mqiv+RhZD/p6Wg/6qusf+vr7f/rrGr/6Cm + o/+epKH/mqui/465of93p4j/W4uV/2milP9YhZX/iKWo/6XDsv+HsJT/uLid/09NT/4jIyWEAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAMC8wqUFBQPyGpJb/n+PB/5rjuf+jzq3/vrO9/9jDuv+wzKP/n8S7/3WK + uv+gucT/xNvM/67Hu/+lwbT/hrab/3e3kP9Qd5j/UXqV/4Sxnv+pw7L/fLCX/52piP/w3L//zMq4/1hX + V/8hIiTLLC4tIQAAAAAAAAAAAAAAAAAAAAAAAAAALSwsPC0oK+BeaWL/tsCu/9O+yv/o1rz/xd6w/7vq + 1P/V+eT/2PTn/5yr0P+YsLL/or6u/6bCsP97rJj/VYOT/1aBlv9ci5T/m8Co/5W2qP+Is5n/59y////v + yP//9Mj/9O7K/5SRhv8zMzn2JCMkeQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACglJpQ9OUD7ppyR/8ro + v/+879n/0fHj/9Lq3v+70sH/jaWr/3qQqv+vy7P/iKOr/1N7l/+Gpqb/iLqa/1SCk/+UsKj/qM27/8Ta + u///7sT//+rA///vwP/16MP/z8HS/7y1sf9dW1b/KCcozSwsKyYAAAAAAAAAAAAAAAAAAAAAAAAAAC0t + LD8nJyneYmpp/8fa0f/Q59v/qsK2/525rP+lwbD/eY2t/3yOr/9hhpv/f6+a/6zEtP+Ltp3/aJmV/6Ky + zP/A8Nj/q9qs///muv//9cP/3dHD/7Ooxv/n0MH/1+Ox/6Pcvf+Mm5T/Pz0++C8vL5QAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAjISKiVFJU/rDGvP+du63/p8Kw/5+6sP9pd63/aoSl/3+5lP+cvKr/orqv/6nE + tv+n3b3/kL3N/4yr0/+Iz7P/y9+r/8m2vv/CrML/9uK+/+zlsf+l2LH/vfjd/8Pazv9OTk7/Li0twgAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAvLS7pmaWg/63JuP+Qp67/gZSw/42nq/9ij5f/irae/6O7 + r/+90cj/yOra/5XeuP+b47j/t9vY/3qfzP9Thbv/h7Cw/8rhq/++2a3/suPD/8r24/+dqqT/PTw8/Csq + K38AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACopKJxtcG3/mq2+/4GXrP+TuKf/f7mT/1uF + lP+ftbT/zePT/9bx5P+m48X/j9qz/5bhtP+azsb/oLbd/5q22P+JtM3/p9jP/8r44f/K6Nv/d316/yso + KegnJiY/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAALSwsGUJAQv2Qqqj/grmb/3Gu + jv91ro7/n7m3/6Sz2v/I5+D/0vbe/7/t0f+Y3Lr/cay4/22qt/+l38P/zfbX/7nb2/+atuP/prfA/1ZX + U/8nJSe7Ly8vDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAALSkrznyO + g/93t5b/d62R/7LQwf/b9eP/u9ne/3qgyf+iy8//yeXg/46u0v+Iv8D/rOfE/67lxv+269H/v/PU/4GZ + jv80MTf5JSQkegAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAsKituVFdW/63Pvf/E4dP/1PLi/87u3//F8dT/puPC/3uZz/9qedb/tdPd/9T73v/M8OD/2fvq/83l + 2f9xdXP/LCgp4S8uLjMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAADExMRIwLi/ump6c/9z46//Q9uP/w+3U/7flz/+kv9j/scre/67V2P+Gps3/rcHN/9/u + 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 + AAAAAAAAAAAAAAAAAAD4+PgCTkpMWDo6Ott5l4j/rrSy/ejp5f3//////////fr6+v3W1tb/qaan/ZGW + kf99kZH9pqmL/ZWxiP1lkY//eZ6t/YWVk/9TUFCPAAAAAAAAAAAAAAAAAAAAAAAAAABNSkyeWWRe8ZjT + tf+Q4rv/g7qX/5WRlf+5trb/vr7D/7y8uP+jp6T/naOg/5Cxnf9xm4j/Z5mR/1iOkf+Doqn/lbmo/667 + oP8vLTPZrK2uJgAAAAAAAAAAAAAAAAAAAABNTE2USlRQ6Yq+pf+o4Lr/vcC6/dnGuf2t1a7/lLTE/ZSs + x/281cb/qsS3/Y27oP9knpD9SXCW/X6qnf2ewKv/jKyN/e3cuv3MybX/SUhF9gcJC3Tn5ucOAAAAAAAA + AAAAAAAAkY2PQD8/P7eNh4b/2dG+/sbqwv3K8uP/2fXg/Z+yxP2Lpar/psGv/W6Wm/9pkpr9X46T/oir + oP2dwK7/z9a2/f/sxf3/+sf/3tXD/oR+g/88ODepjo6ONQAAAAAAAAAAAAAAAOfn5xINDA2NTlRO/L3X + y//Q6Nv/qMG0/aK+rP16jK3/dpCn/WmXlv+lwa79bqCR/Y2huP2878z/3eGz/f/3wf3ZzcP/z7zI/ePe + u/6Is5z/Sk1M4UxLTIQAAAAAAAAAAAAAAAAAAAAArKqsMjQuM9+vx7v/ob6t/522r/9oear/cJ+Y/5i+ + pP+qwLb/r9q//5XOxv+MstD/ksev/7Oztf/Nvbr/6+ez/7bju/++7dn/c3p39k1LTKgAAAAAAAAAAAAA + AAAAAAAAAAAAAFJOTpOPmZX/lq23/Yigrf18qJn/cpma/bLIuv/J5dn9oeHB/ZXmsP2oztT/eJfQ/Xaj + v/2/57z/w+/T/bHRxP9IR0fmTUpMbPj4+AUAAAAAAAAAAAAAAAAAAAAAAAAAAEVFQyFZW1//j7St/Xew + kf11q47/lajA/cbe3v/U+t79p+bA/Xm7tP14srr/ueTR/bba2/2kxej/lqej/y0tLeM6Ojos9vX1AQAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAnJSXPfqWP/4C3m//K49T/1PLk/4ezyP+bv9D/pr3d/5bF + yf+478z/vfDV/7vrzf9NV1HzKCMmk+fm5goAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + 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 + AAA= + + + \ No newline at end of file diff --git a/SOLVER/RouteGraphBatcher/RouteGraphBatcher.csproj b/SOLVER/RouteGraphBatcher/RouteGraphBatcher.csproj new file mode 100644 index 0000000..771fc13 --- /dev/null +++ b/SOLVER/RouteGraphBatcher/RouteGraphBatcher.csproj @@ -0,0 +1,99 @@ + + + Debug + AnyCPU + 8.0.50727 + 2.0 + {2CC5E4D5-99B3-49C4-BEC8-5818CD19B425} + WinExe + Properties + RouteGraphBatcher + RouteGraphBatcher + create.ico + + + true + full + false + ..\..\READY\MapCreator\ + DEBUG;TRACE + prompt + 4 + + + pdbonly + true + ..\..\READY\MapCreator\ + TRACE + prompt + 4 + + + + False + ..\..\READY\MAIN_DLLs\dkxce.Route.Classes.dll + + + False + ..\..\READY\MAIN_DLLs\dkxce.Route.Regions.dll + + + + + + + + + False + ..\..\READY\MAIN_DLLs\XMLSaved.dll + + + + + Form + + + Form + + + RGBForm.cs + + + + + Designer + RGBForm.cs + + + ResXFileCodeGenerator + Resources.Designer.cs + Designer + + + True + Resources.resx + True + + + SettingsSingleFileGenerator + Settings.Designer.cs + + + True + Settings.settings + True + + + + + + + + + \ No newline at end of file diff --git a/SOLVER/RouteGraphBatcher/WaitingForm.cs b/SOLVER/RouteGraphBatcher/WaitingForm.cs new file mode 100644 index 0000000..dea290d --- /dev/null +++ b/SOLVER/RouteGraphBatcher/WaitingForm.cs @@ -0,0 +1,309 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.Text; +using System.Windows.Forms; +using System.Threading; +using System.Runtime.InteropServices; + +namespace KMZRebuilder +{ + public class WaitingBoxForm + { + private class WaitingForm : Form + { + private const int CP_NOCLOSE_BUTTON = 0x200; + protected override CreateParams CreateParams + { + get + { + CreateParams myCp = base.CreateParams; + myCp.ClassStyle = myCp.ClassStyle | CP_NOCLOSE_BUTTON; + return myCp; + } + } + + public WaitingForm() + { + this.tableLayoutPanel1 = new System.Windows.Forms.TableLayoutPanel(); + this.label1 = new System.Windows.Forms.Label(); + this.progressBar1 = new System.Windows.Forms.ProgressBar(); + this.tableLayoutPanel1.SuspendLayout(); + this.SuspendLayout(); + // + // tableLayoutPanel1 + // + this.tableLayoutPanel1.ColumnCount = 1; + this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 50F)); + this.tableLayoutPanel1.Controls.Add(this.progressBar1, 0, 0); + this.tableLayoutPanel1.Controls.Add(this.label1, 0, 2); + this.tableLayoutPanel1.Dock = System.Windows.Forms.DockStyle.Fill; + this.tableLayoutPanel1.Location = new System.Drawing.Point(0, 0); + this.tableLayoutPanel1.Name = "tableLayoutPanel1"; + this.tableLayoutPanel1.RowCount = 3; + this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 50F)); + this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 5F)); + this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 50F)); + this.tableLayoutPanel1.Size = new System.Drawing.Size(492, 145); + this.tableLayoutPanel1.TabIndex = 0; + // + // label1 + // + this.label1.Anchor = System.Windows.Forms.AnchorStyles.Top; + this.label1.AutoSize = true; + this.label1.Location = new System.Drawing.Point(209, 0); + this.label1.Name = "label1"; + this.label1.Size = new System.Drawing.Size(73, 13); + this.label1.TabIndex = 3; + this.label1.Text = "Please Wait..."; + // + // progressBar1 + // + this.progressBar1.Anchor = System.Windows.Forms.AnchorStyles.Bottom; + this.progressBar1.Location = new System.Drawing.Point(2, 2); + this.progressBar1.Name = "progressBar1"; + this.progressBar1.Size = new System.Drawing.Size(490, 23); + this.progressBar1.TabIndex = 2; + // + // WaitingForm + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.StartPosition = FormStartPosition.CenterParent; + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(492, 55); + this.Controls.Add(this.tableLayoutPanel1); + this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedToolWindow; + this.Name = "WaitingForm"; + this.Text = "Working in the background"; + this.Load += new System.EventHandler(this.WaitingForm_Load); + this.tableLayoutPanel1.ResumeLayout(false); + this.tableLayoutPanel1.PerformLayout(); + this.ShowInTaskbar = false; + this.ResumeLayout(false); + } + + private System.Windows.Forms.TableLayoutPanel tableLayoutPanel1; + private System.Windows.Forms.ProgressBar progressBar1; + private System.Windows.Forms.Label label1; + + private void WaitingForm_Load(object sender, EventArgs e) + { + progressBar1.Style = ProgressBarStyle.Marquee; + try + { + this.BringToFront(); + if(this.StartPosition != FormStartPosition.Manual) + this.CenterToScreen(); + } + catch { }; + } + + internal string Label + { + get + { + return label1.Text; + } + set + { + label1.Text = value; + } + } + } + + private Thread showThread; + private bool showForm = false; + private string formCaption = "Working.."; + private string formText = "Please wait..."; + private Point parentCenter; + private Form parent; + private bool isModal = true; + + public WaitingBoxForm(){} + + public WaitingBoxForm(Form parent) + { + if (parent != null) + { + this.parent = parent; + this.parentCenter = new Point(parent.DesktopLocation.X + (int)parent.Width / 2, parent.DesktopLocation.Y + (int)parent.Height / 2); + }; + } + + public WaitingBoxForm(string Caption, string Text) + { + this.formCaption = Caption; + this.formText = Text; + } + + public WaitingBoxForm(string Caption, string Text, Form parent) + { + this.formCaption = Caption; + this.formText = Text; + if (parent != null) + { + this.parent = parent; + this.parentCenter = new Point(parent.DesktopLocation.X + (int)parent.Width / 2, parent.DesktopLocation.Y + (int)parent.Height / 2); + }; + } + + public string Caption + { + get + { + return this.formCaption; + } + set + { + this.formCaption = value; + } + } + + public string Text + { + get + { + return this.formText; + } + set + { + this.formText = value; + } + } + + public bool Modal + { + get + { + return isModal; + } + set + { + isModal = value; + } + } + + public bool Activated + { + get { return showForm; } + } + + private bool ApplicationIsActive() + { + IntPtr foregroundWindow = GetForegroundWindow(); + if (foregroundWindow == IntPtr.Zero) return false; + + int foregroundWindowProcessID; + GetWindowThreadProcessId(foregroundWindow, out foregroundWindowProcessID); + + return foregroundWindowProcessID == System.Diagnostics.Process.GetCurrentProcess().Id; + } + + [DllImport("user32.dll", CharSet = CharSet.Auto, ExactSpelling = true)] + private static extern IntPtr GetForegroundWindow(); + + [DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = true)] + private static extern int GetWindowThreadProcessId(IntPtr handle, out int processId); + + [DllImport("user32.dll")] + private static extern bool SetForegroundWindow(IntPtr hWnd); + + private void ShowThread() + { + WaitingForm waitingform = new WaitingForm(); + waitingform.Text = this.formCaption; + waitingform.Label = this.formText; + + if (this.parentCenter != null) + { + waitingform.StartPosition = FormStartPosition.Manual; + waitingform.Location = new Point(parentCenter.X - waitingform.Width / 2, parentCenter.Y - waitingform.Height / 2); + }; + + waitingform.Show(); + waitingform.Refresh(); + + while (showForm) + { + Application.DoEvents(); + + if (waitingform.Text != this.formCaption) waitingform.Text = this.formCaption; + if (waitingform.Label != this.formText) waitingform.Label = this.formText; + waitingform.Refresh(); + + if (isModal && ApplicationIsActive()) + { + waitingform.BringToFront(); + waitingform.Activate(); + waitingform.Focus(); + waitingform.Refresh(); + }; + + System.Threading.Thread.Sleep(50); + }; + waitingform.Close(); + waitingform.Dispose(); + waitingform = null; + } + + public void Show() + { + if (this.showThread != null) + { + this.showForm = false; + this.showThread.Join(); + }; + if(this.parent != null) this.parentCenter = new Point(parent.DesktopLocation.X + (int)parent.Width / 2, parent.DesktopLocation.Y + (int)parent.Height / 2); + this.showThread = new Thread(new ThreadStart(ShowThread)); + showForm = true; + showThread.Start(); + } + + public void Show(Form parent) + { + this.parent = parent; + if (parent != null) + this.parentCenter = new Point(parent.DesktopLocation.X + (int)parent.Width / 2, parent.DesktopLocation.Y + (int)parent.Height / 2); + else + this.parentCenter = Point.Empty; + this.Show(); + } + + public void Show(string Caption, string Text) + { + this.formCaption = Caption; + this.formText = Text; + if(!this.Activated) + this.Show(); + } + + public void Show(string Caption, string Text, Form parent) + { + this.formCaption = Caption; + this.formText = Text; + this.parent = parent; + if (parent != null) + this.parentCenter = new Point(parent.DesktopLocation.X + (int)parent.Width / 2, parent.DesktopLocation.Y + (int)parent.Height / 2); + else + this.parentCenter = Point.Empty; + this.Show(); + } + + public void Hide() + { + this.showForm = false; + if(this.showThread != null) this.showThread.Join(); + this.showThread = null; + if (this.parent != null) + { + this.parent.BringToFront(); + this.parent.Activate(); + this.parent.Focus(); + this.parent.Refresh(); + }; + } + + } +} \ No newline at end of file diff --git a/SOLVER/RouteGraphBatcher/create.ico b/SOLVER/RouteGraphBatcher/create.ico new file mode 100644 index 0000000000000000000000000000000000000000..08e65d3ffaf9b64a210b72b6f398935b5a45ef77 GIT binary patch literal 92582 zcmeEv2V7N0_W!uMiTQ8LCfVlh=C{!#Yhu@Edc!o6Xo{;zOwmM5(->>)4I7FLM2bie zq^a~Gy%&+*L5fmTidaAq`{Vr2_rj3N^F0Jt6HT~$hPiXg+?n~FIdjU)JR!P?d&JP8 zLW%eMNr-hqh~B+h()S24_ci#d`~^#D5oAiD}=i5mT406DyW&7H__}Ta26SC_ehiUrb%> z!8J)1k3O0%9(ycTyfiUZy#HCQm@qw8EL)b#->DE2H(Q9wo7ahD>sO2EJJ*Z(_8Y~d zRXfGR)R7`iV5c52@iNyitV#0sS zF>k%6SYYWQ7HrrjzS$WeR#@y4b3Mbv!k`fG`Px`9)i_1WwMr7Rj1G#mYt{(k^=ri1 z4I9M9O&f)o>1MIP+(cMemw@z9mGMS_BBEosMFYn}@J> zcNSZMorF#3USZ@GAa=L~3oCCwVY4?<*ae3Q7dKboHU@siD>)E5cT!M0<FAfmqheL#YX{2yY@DQ#C-9==co7f#6Ap8?Ug!{pL!lgJ^c$E2yy*UxWu`F5y z=LZO@iV)#;EL;@q-y;s>xQc>&SCO9LEArCAMM-9es4DRiwfSM9zSK|Tl>3Xi+6d85 z9w0Qwf&`ri5=|!~1vNyAwQJLa<%UGD&ZbE0*>ON@b&C-ut|h`^PodZmR4BZ6B?y1V zL=o*DFM_-ZgiCahFgC6h_Vy=5N=T}(NJthTX>r2!P@D+OP7r$!6bk?J65&%&DD02M zaTybYUrmw-KAR{)YqCY){wk3WA1~6=(?xz_f`}_f6NLv8MDpQWk(-+4E?;%rr#xKf=e&efy|&8ZYY z=k|*uN6N(cQ&~dOkR#|)mWazaB2rEs6-B3xiOjR*qM)%-96fqOR8-W76DLlHigV@S z%$Z~2!iCe~bX~nDFTX5KpVo*fY7h+#4dTj`2BFbhMfd;tj@~_c_I$XbpX<@B$AkQQ z&-=RF{pt1Jd9d39z1QV7YKUrA^}M^s^2M3*!ThWFjw{tG?+_|O;g z*X86k@bit_d^tT^Sf}pS9=f~d!=KJKZfLxu(P;RE!or*f?$iCKa`o;9{`JuOqD#n` z4=zw{pe-{`I%;feywq4!ThzdxY1CXQ?A`O; z2lW)`!5&{Jj~C@I_2%SWy42W6jh`AU)%S@9?`xn&4O1rnBTbI6Msw*BP3#j|J@Jn` zT3vfQ(37}bG`SjTy4bL4U2PFsY5q$Ney8^K?Dmz8=X(=z#)U*L1Wx!=bE$|EG~d9| z_t^21U;SRk^PduqLW&zcdK1?C?8TyvcRqwLpCOKtmBfAOH084MYt^{ErOR^&ag|<-T#_rp@jtzx5OxL|% zo<8u0sUzQhr{4#*NuRgA_Pw4sWJ?tb`yi_O}|qaHg;&z6Q| z=NlOrEq;6Si;oW&ZDhOXjTuL3YEFLBhVcIQz?y`FV;+{JrR8VOkC|=Dr5M$3z^MMC ztrw44TwQbQ*s+rZ52*?7p+EFK>TQ)(SAO=O?d)N;wzjW7@%rM?170^;?0A@;K6Y$h zam>sfYTWL5VDZ_rrS(axjf{pZwjI`Ql#%W9*ZSL)rP<)|XG{=0*Z1LbE|wy7|G=ivvFW)E9tJ$)p@ zdhmQ{nuUc$dP;Ek`2Cq#49uh5uHo9hn=^LtqR}HqzqkDSnYvOd3rpw!j^`(XgG4HN_9j zTyB0)c|_6oC?J-F6J5;iq96V z6JwWHi7^YU#k7T9qDPM`F>F|(c;%IJ@%`cg@zEL!@u`u8_?-2}$y>IFC7V}^+2*Un zGONvE@s7=6^2Qxv*&1`P$Yi^i%6i>Q4^uJEd4u@T+eA!rvJeZs%*1l99b#dyxmf1A zT^NR%i*ZKbtY5l{C0o43d@CQZ*vwtb-xwxlxCe_lo*`n1UAkD}n5^iOChOLVH5-h? zrj2XG=FOXhmFXI>%6hY~Fk2_gjJAr+<{WG-gt@sn>ymcD&CX10^4uWo_Zo}!{u{(P z7uGplt%SL=jact%A&dg-#D+jSu{zXN7>C&iFQ1JfB*b2<+U_YA?7}>RjaL-s=PPXe1B63pfN*hf7VfNLx<|PP zZ$A&=6z(m2LmY*t_dZ3>j0p4-Q2~)6EG%54_-_(1AzMURkh#bXw-XuBP9iqaT_guZ z3A4D}!Zv1)FwW$B6T*cl>zS6h`-Ej_h_F5sCY&?8gm0R&2#WC*9>ty_pvY5%v(D%m z>nGgf_X(fW0O64sCOp!@gl~MXa4iWHfd_+yNjdAq75jvFdAP7S8Y0pXJw;){E|FN` zF49s$L}7fG*k9@^5{g+j%?T1U1reh9P_(G$kW%3x4jc&;DK*jJ;88zuymFtod@Mp( zStYPed5GIAT^NTZimj39VvA>vu=B_gHmrjN>`4@E!7;)yG(kA|rwON!625*^`1{w0 z=;%5T=NTswqGLsFREn_4NEEvhGejusq;4h2!aplkgy+PH$m}HHmr^Rc^9x1r!4lzc zG*&p&vcAgtseetf2s)81B2VOqfXYGY+o2L^Xe-vN%qhER7WvhYyLe)0rZ<`k=_FX1%qxR3x4)5V;piMPp68 zpp&tpf%Vj@&{Z1}1U06zzF8*r@2}^4FN!0F%f*4pa*=YbLgbufo%LL$$iH+<6kn=k zo%N`wsi|h2wN{)vSIs)syoqo}RD#OVfc^(q20nGPO*>E6Bj-}F9v*Ij>k>w^#e zc2|o%O#8WR56;TFz%p*$-&;6N+XuQm_}+rN^DH!9D0%C5ZEqpf{hq(is=I(gQ&RlT zYn7|J9$cW|o9FSsh52`>goGuvSz;;hrCy@RbcQRn89$mn*Qd`DtEYbEa{PGBJF<*#-1Xl*S!a(XOnJp@%EOZ<^qFeD ztGc?j>fpj2vKhMnwdly!)uyk!H0YVFpA8Mp+U!wVuFc+~ZDoXq`{wMTKgxFc!z{BYlco&%Zf0z~u}#wJFZ|$Ul6K~6Spp&c_4nyt zPJRCInMDn$M%K|G0X_%L)c@?hW@LmUCV9t{Tim0g ztNh__@tGk>X(sNuZ|WAw{(0Bn`ZSZ;(w=&H5m(}YImZp}`DY6-I--Ad@2OpGt*5ka zGu;reByp9ci;FB>)U&iv&XPwtOCjYfF_p74RL-(mb5O(?J{N{D95`zO4!!vN{&JRj zE^-1Kg=M4PbAUJlk;{Nqa;7UebI5+>{IQGo^9K$1!-fPo1tMo}4y|&EnoHokCCw_A z_~@gL#OG`e|6<|<@%f~Q;+wC&6rWF=EGAC=T1=WWNqqb5w_@5?Q^a@QHp?L^7XBc9 zShQ5ko;_PEm_J|qXt+cyU9vVHRj01xLh4F#iVnbGt@JjF#dt-ux zV|t+QNDUGDvcpAiQItrCwGl}%ZXzMgM`Wagi?oaoQCb)%vhpHCeQ}sL%;R!NMW~?D z(ZW2SKC}{_E3~%ZGnBw%J1R*O!;9TD|C{fujepwkE`b z55I2k{r9g8eE9z!8v;{7pTEEJ!I$GlKJ!qoXUDv&h#2>doIPUbqXV8C_0bO>^n8LJ zx%ZXlA9?!A37#f-nKb}1I?NC>l)r{~heix;V>sfpN+O+2HP5)u+<+qP{qW5$e*(2oPk z^UJivZ||$z)BD~1s8I^$US3`bj>*Z%l#!7^d3kvq!v7Lajb=X)vCoL=>guSx zyqsKIT!`l)wMPpWcgFno(D-?4%xw&rTqh1+ef1UbL}21|F%%jaO3~5LHwAz8CsIvK z4OLcF(!qlViG8&6^2;ylECZL#^yh7n-_F;#Z5?!BKW5Ar;`wvruI;Gdb9Nj^S4G;-ufZ8`wo>f!^sz`f2jZZ}hH>?cl~NW2E% zw!}XzEsb~%8-4J>2ii0ceVwXy-PURW#(j($dz^pz>8Hf|6WrGLw?hLfwW`>a)YAft zHOBlpHU4AAjwPOtdqema6ciAzVIb&n(Cc|}zhdu!p3ieY6`K#1H^crTZ9uq=XY1?h zmG`9nreE*$y-chjc4F0h9R99Ei zl`B^;E4}pq=D@$b09sHVcn5S)RaHeD#UFG4xl~QVeBLzTk`Mgw z!w;=>X{px;UG?s|*4zTzMs4~&#(ea98FY>R*4EYv?h+*QSMYjZi2iyr0%!rWBoFut zKuh}gzr-K%pw>9h#RJ+QcE-PT+&3^VXvJM0{_xYt1Gobx;C`zD#(;C@&dE*GjQ#!n73|U0km-T_?Gi8^ zNWB9zAp5b&x|-1)g3hN{{^vGqyZ5%1Zvrw#UK@7pav_LTMp z%o~x|%UISA^9W$WmT6TC{`Z@-5plgosM?{;*w6dsDA?m4crDubMgsJ;0|yQe<^}EC zxs!N({WSsiA|fJ)_XEA5Z$R&qV*zlM*dvB6i#o0ju%W{ZH5ASBQw&(gQP;cW{5Qu7 zxZZ8>mwkWMtXZux7W6K(Z)XGK!pO)-1#@R-XXPC8cyt9khi5<=7;h>nDmwi=^nH1# z^#Y0iQa>xQC<&&}ibSeEQLRfq1WkY!jQFjL3HtCyU&Mj26*^vL1Mf+wj2#$1Ft4+t z@5}eVCpz<<%wOs!&<`XJ(8eD$F#YQQ_8T{k6}&f^E?!{DZS$-5AM3(@@#4j@8!2`c z^sCMU_yEw4F&7XzVrSl!&qCh-4ImGBt)sCV2VkdA^MCaJjp-rO=b1zr*3X|#m&8(2 zeIA{yKTR0xxGl6p8QSO9%nNkkzkmOJ1%KFAFz$CIz$ORW5O?N1?PozZ;o;!~8#Bgh z?fdPerELJVVm1CBFR`WncV7yPTN*>I$#!(1$b*_{nFdZI@NUZ|lxKfyyg(QJvi&gb zL#OI!z<3Yrv$C=}{Ej+r^l#XY!S}&GAP+zez&U)$>SwQa4u3KZ_z5Kc@733t7WsuK zG62Sa(+MWc_=5%z>bTr>wfcBL9k=!Lsq}T~`UheJlwekV2c4BdZ!Ml1G`4(`5tKhN7Y zYVG@w)wSQ1X^aV2Pb$;bi}&r@r^pcP;SU|KG0)}t__K}R%B6EuQJAPSkCyFt<*yNc zjL-0?bS7Z^C+6p=-$_k9s}p-k1BiR|@?_o-)aE^P9ymwd7@M@O>r3+wv?wyX8h@K` z_cr|BJI1vA{tvsrg=#u`x{|Wv-6%EOhE5+ZQ}h#6|1bMB;t!b&eHrWWI~p)23_(7B z^5iAPKJ%J>ug2cMppg9n^{wy7chxcM0^lu()z{lQhyOy#vXcL6%m3}lf8h658mRJc znu0s9M<~sUR`ONhkFns6wF_wTe~kM$u(l4icsVz}BQbOU2L}g5emi~oG7TA$uNQmZ z9u;+_L;1sp4|{M&%7ABJHw5OeE8vjwzqbCb7ypJsbn*OIDohJ#gT17IE0-^}=Gj6A z4tF>YXq9Ks?{PqO!Z~EC&K$7cI63*~#U8jvN1yF*mY_pdSJw`g1GY=_eFS;PzG`zg zybb@)318cG>~FCHgU4q?JL<$9G*DB~Tqc=sOMJ)Lgt+`=vM%7WIACi5{*s5vw(Lke zeE3gtzU1|t#U0-P_TVS7A9v*2cpiOU+A&cF)Xm`S*V|wZ`(Ih4(NFlZ?HBSrWIWl= z^~I0{U{{iD))LRYQ+WWF-$B*|yb=fcJ=zXIjtL!U|1ZBRYs2%$j?JO6vd-}k`E6i{ zcJAl_-UI9rqz_B_^~TTrx()tzIeV!-*|Hh`bLG@{_9W#U@VqYek|yxHVcYrTWp^{vfVzD&a)gS>8phf?pQgH%ilT%pf0k%s(FAu8gOtpLE5;h@sa1? z>&RDE=&YP6^F&??7A$Dx`>-WT|21di(|2eyh)6bDlqczOq*!utt#b zDtG|u^8Cv$(v~c51^+!22~>OW43%Vtce>AmHj;xZDAIa5ZQ3!H7Wix<(@MnY0Dd^=`tT9`Qb$Tk3awkWt_}Wjt~z*vw9(G8Gg7dR zt1VFYwL`cQ#q3(xDg5JHmyz$buW7saR9bJpP{AJfBb;hHqdliQ^A5(pjU0eBl>G@~ zvZMjvk2yYaPR`Fs11Jal%)lP|i^~2F`9U6%?~k7NA%Wjx&iA1cM`^`AYjWKBRfn)o z*t?p7w@)W~i)%3l?lWD?Y2d4NEO(^p@(B&S6KR0^KGuSisd)hOK`Dnz8j$#7jvxF) zn4^XH7`O7kyaCJ+hh5*))U*x$m?tI=sgn&HIFjb9Poj%gFOy$RtkPG}cY&+EaUT2~ zyur=vD>AYAK^fy^KUc?Jnpo1`dppp7p0THedz2Xw5dzQXh=BZ#0 zc`ej#wodFJ&j*@+qwx3TyVtkj?`qs}{>}_*>i)-F^xBjiwA9y<*6p*WLp4XV=M2`} zDgB>u2G5UHCLgD6*)>x16T(FolYBn=-{9M*bX5xKn{nW7W4qS{PhmZ zD=Ri-Iv?v>)0%`BaG_ zH$irmGyq*!js=)o1HKRbFZ;h5f6xeM0MFxD$coZm2b?kg56?h`$NDhL|AhY^x&~xB z_!0HtkMSRSz{o?5eO7KZ?M)AB#S)k;`Ej`-yGt29+~OOuHJw6h9hbE}r^Z_Q9Q+=1 z^vW1#+V1Dmio3)gal`pWZJ$u|?TkNT-A2|2_UPlKM=QwtSaPer3_Ce!0J0RG0S!P7 zln3wy9f1GeYW!gz%FfP~pH_H{l=V=q18K>MPNv3h>UYcO-H{Fi9v^D@rNZN{*VonW zgU^HCPhRe%6L(1iS)~Vc$$`CZHyU6Jq334;OLYLhKX(3+2p z{@(+3(#l<~?P3oa@Y)}$lneY*mW$)tYEN=5&lnEZ@O$)U=*QZa>q^6p4*3doL|uV{ z`oOvY@O#W1!B~Ey{2${0?7DIer~C%&I=~y>M{wBXNd5`o3O<{IcD3TaW77oMz5Fdj zj(=sGr6R9MY_Atfe*fZl8!`)axi0pgyEOr}ijIkXAb+3nE(xg3!398~2}$_UUrJ9b|yKCAq9DEM#N_FWtO?YkWoioSL|+;JcL9%DUd;Ck3Y29)2#n351; ztBj3W?L6j}qya7qboy)fJ@A5EM0-wzKFoDp2OWGr>yuVGK)oSDAa6Cl*2c3VX}pho zq--bKbk>~NO5PZ6<=89ZMLy=O{a+hv@Nr}-C zFEKYrO{ZM$Uu=#ze|xrUHyNXB`;!lJnBVKdU0$;;@TJPAb#$gQg#27L(MMy)x1j}m z6W;@$0hZSbcn{ho;A0gAMwk#8Ouby&c%Z{odPVR;zBQXKv7lpPL78+xf`$lQH^I>4{^V=JyhB?Km@V zIbAsxs?4Fth>E8n1CnXmx(J09Hm#XMlRtj@8Z2d5+KWeydYgV&G?$ERw^2xbB4yX{ z{ERCXsiL;34Zl}oWWj5@BqsV|@OAWU^?i)-u;pQlz;*BtV64ttp5yuozwK?_*S0HQ z4hhCV9rZKiYd@QBkiUh#-$vGZt~7UzSL-!gM*!BTrw+9VC1w4RnAp0r;z*(KqJn!rsDa1|9G>Y3=*cu8g^(YW+k-3uS!%v+)A{ z7IeL6)%O*;T(N%54f6r;{8W#bO25bc2?j4D)2wd~w80%TP#9rEcosAjTAkGf)44|Z z)Z9KbWsh#XJZ@|2d`a|o^m}Fh6uCaGB|e#9N4wIU73_DF#k9dy_HA{%$?0Gl zUQluF1YKgE0c`5Ju+Vo6z8E#m+UMx|80TTj)8_ej7URCYytVs2?8efMhpI3}ZM@ZKsnbKghnxo|C`X=t@y4s`7HC|JK`Q^7eFMvHLq9Bkm_iv+yOuN>4?cBCsr;I1-c%#?@ z|3aRRcSUoR?45GyrIEXJ;-Cw6c}<_}4;~L*ua@tDHPYH+Kk|_IsbkQEnpU9i!KRFL z0@xoy>EEh8AlpM{d@@Pl6W|5XZ=p3V{Ni%KJ8z6oz1N%z$Ie_0or(d(fi~e}8vrZh;m}sACV+6c_FL*snL*JTUP zr}Jr#E0#_xlr^B(FG|@rs-xJepF2~i@B-)vI)2aewvh|47n0%9B0}HSMb8)$u!oM6 z^E-pR)ak2FpJ*fF{k5kHeY3!$Q#7EhlVf}b_S$`1(gFAa?yF@$ZJI(_+ooh4??vY? zvWy2_uEz65&Rf=+!B(J$7dS9)_(kmnQb*85>)1OD`{&#U_R#6U?{(?)pMUR8!(Qz8 z7@)>T+WDd5&2zOrq~ZdLwx2dk6Xg z%LRIP0qi$FoBx2nrPE#j9RYhJO5Fxyz3=|!y;LFV!H3Who-cKJ*l_jf^q5~Egfne% z)op{*?xzwX@O1QPiK*I-gL7>fkorJ-_`{~OKGcCK>uU+Jv1jV8n~FWg(=W%fF7;wM zovuEn*bVjY0-xK37hJ5#C+EE8`ShKU^E;!{Lk0vN(8gLMaF|nFa0~Z`m>}H z*`E>1cXU0EZ+WLhQr(3H3am<3bQ-J~yIFl7x)kgu(4|}DDy%_enG(D}$6ocf4KFxR ze~Kb%auh#;T9?;%E_M2Z{PYfCI%|~&{gveaU3janE#Bg(U?_cd5?g(C9Bo++yaMmy zx;kI@lnag=Qr3#Vh9PYsdiM*^$J_N>H(9fv?*CJ&PTQFxQ?l$0xj@_Z$vgmdq}zrU zoV|Qr@y+PN9sK?@+r&C*!&PGd{Gku1uc^=f`^8>`-%FpJ#2)i;)z8UuwVWWIRm*|$ zIgCpvFZ2@E^0-#)K?9xIFG>gY=;yGT!B1A27T1QCU>~a5Bnyg*HzUwlXqLM|f3VTs z&b*-ROg*80Ytw+#>Cum5+jb@fzPfAykP9Au%#|K`)VbAXC-FoKoOOLimyU?%(f>h1 zu=7A3ZM<|ru}7djK3el2+pHPafp2?bLzGXv(&zQr&frUxHgm~u5W`o8`7d`8FOWKY zXKlD@+<>#TEdb*Ju8kbKN0IH-xZ@lctMgEwgD$jXK)mzcMcZl6i!RC>e();rEJ@4o zTdA?Yc|p+fHvP6e%;h~`4t@_Bkk_l4*=V@P*w8ya4NMv~_wl4xKrN9tc|i zbOP`KV2?2$wi<0Lk=AF!k>4~4a%$D*B<)}gXIWVTS=v=zGH?u)8FJf z>KO7N)`4O@DE0wR&wpIykk!T)i9QEEmNpH*=9TBSpmpw(8dIs$L$}kO52JogeO{Sv z+iE|T-_mDGg&v(#kf%!~%w#-<{@nA-@IC%+GzWzSG2a399d(=E$T=`a-^W<5mIHyc z*ALWoTh&qN`CHFIu?cEYPaQw5`inVEszdcD^9{9IzRQAJI4_*)4aSjZn zEkKtHkFh`(&bqFFFP*;Bpchm0Iq9>;oD|GW!MK3mjFH%A$Dt7$=w$SIh0mkUca+~_ z-`SYR4XyTbg^C##G(@;02hYCVw+V{hT}pZ44U` zMZNzMOVQR_+wcQ5kHSCw$@J{l1cgUHe~0Y`vOIW#445Mi%wa#)*6|@~ybF_hf zd%8Z}gAEt+2O%q~b$V@^o-P`Y`j#3K(9NhBv8}v7o_}L?t$c_)rC(H6{xZNruAi}qJza=ml#05x7% zvjFVXbJa12eb|dx^z_IS@-50%#&L}0GN|8|< z^910o?VDHQj&sljcmsR@Y8?UVfU!1E7r&S74qs$P@Ya4t%J&_?Rq_Jx1B?^$+xlYg z`%0c`t;d!>`$pUUc6g8RZ?y%Wewmr4u9?#bEMbdnufMBl0J0!x26Tk61G**r^w8F!Udz`LsfmX1#4Kjj0egU06DJ5BZoj7C*+$Hq3Cju>$KJJF?FO^n2hw z;>)-;c0b5)(l)3ofAuxV3v{h*1HI~51A=k$j^p>b=!WajMh=8eDE?69HFkSlSZiNX z>v~eBFFbUP-h4N|Lwr_^3(g^%seL}`em}uDO0nnY)9LY^K3k3UcaWC60J1|8?~zr* z@~NKrop&_9*FyuDk_SKz#9ryz*mfi>bv>aI>>jyFR;hX?dY@9h1t!#hOvx8 zo#X-V3Bl*y5!~?%WJBuJK^b$+S3&zh)Q7{B1?e$Ih-WT&S6@K3l8;-=ZqcQkP zJ3hNfH?ys8*Sr{e2Z_I&8-(=~*P{W*h|uX_!__snRN|+O-P7|G{w-y8$ZP8R>T~c7 z@C=O0PWegK^n1_`_AP)P0DS&>b{yQtJRLlbfVCoe=IZ@w`MoY0Wb8*s{1Ic$66Rd# z!ymF9^umtl^lChDE^WKxmc}UddGK>xdK>0+sBJaC4(|dtVAv79q5W-{mO8y2et+Bf z>~vvvv#&Ak&}kK25Oag@dkNb319#~6(uRwpsIeUzu0EX5Um^3U z$7Q6!zolG&IUMNo?d>BcwAun-1BFjOpTAa(nXYq*J!0+qa^5cbyY@Yqmd|vC7r=*{e)=$B z?Xw=A-AZ+RyUyFT0ON0}>L&`{#J=;_v+YRCWDGtJ`3`uep0b~#4t`(8^%~K(wp}Uh7T`959N5YOBrQN5#G1D2 z`SKv=gV#gG)5c!ffwlR)HulH^7(+LJjR)fg{JVn&HS3G}oVU>F1QWvC{ML0H*r$j0 z_WQN_?6mQ^6=}vCHsMxTP|^ToLdXQVcmXg&pG2S6)$gS}M?Eh~8+Xu)+TR1*F+Uf3 z*kJ!E>~n{88`rGg;JtaU@6B(;XLlf92je=6L&QYU_ZyxC(r#ReRj7B z>-O?x%tvszh8KY6;dpF(!jK5x90J%%g(>+!TcWkoa*t}Ie<2AM%}vd=y(foo3GTS z0i?kTbj|hFg?&Qknrq~{Yj^%6u!>1tIITJKnQS4}P!1hTFyOZ!ToFBsa!?HV0tU zh7Mpi!tYj`F7$6>&uQiPEx*Ci<+Hmbu>7osPI6eEeDRfssZfXlKwhwT)h8MKZKpDqfKD(RR;JqY2mI+yIP>D1#Z_CP&VDV#s5|c1N9fK3h{e&x}4ia zonFal)eB9W6!-u10KYCo_n*=ikyd3`kF+Yo7$t4k`oc;jZJ?Fz)tXjri`KOAc~t?F z&#MZcomPsYDv+LZH~GEh;{H@%nKo>BK&EAZWLmaJd2@MNTR^7e2V`2bWZ0T+$*?uu zl3{DQrAb@UEg80^TQdA9Z9q7FO82@>y7_}YJ%7D)Gv+@%-<+21A)CD8>E;Uk^n7!= z1uwyeQhx1p3*N2wRcS-Kpq*B|uiXEs{LMrjgPfWV1H8Xdri4O+E##+M?8UcL*(>*d zDtpmr%~Y;)qNCDoj*RPs*chL)a6rXQ2qWj85*kTgP+vS zkV!yY!D}+Sro`GA8fcYRJ40@QHYL{15NUN2Agyi!bP9DEG^$_A9#%e2g1re*fB!3^a4Ee&AUnqH|Cur=9S zpw{eL5Nyr91%cM=`8~XE@YDNBuQ61m%Y|rZ>*kAGLsj-lhN|op2z#ks2LuLf(lL@< zw_L4nlReW|o9sEmHrew_z1n1_Khc+KHk8984&6j={x8JJK1$T}?+$GN)@27h`Q(!` z1`QgtbHIQB5&ir3k3!({-9v^9S;+Ta;PAWKt$JLhC0xE!0|ySI7hZUQ#*G_ClO|1~ zufF<w|D;F!Gmeks8PxqZ$Cdj%FfQF z>gsB0Y;06I;FT*^`1ixg$iu^fzWL@G;=1yBqCvI%{O@JzkK;JH8eEPnKNgUy%~1z-c4`5`6jTq#QD7abJu~t z*@Me|>iOrNr>Rq?(v~e-2<7+n^`)4Y7|P1Zq6*$i@AT=@boJ_0rTjRrs;W}z1uPO0 z5@_PYiKxS6&Tsh7SqG-y5VZS*2@`0+f(5j8?OL+4v!mG9ScOhbo;*qQ_4P`dpFe+| zE?&Gyh=B)i$;-=A!v6jHY4qsPprwkRtNh$leTEJls(JtY_m#GvK7Bgv+__UJ7uM^Z zIB`Oukt0Wr5CU*OjQ&tpS4Zd0oui{ik5X!Cs!|8cw_q%Z+vKyKqYnI?tcQpD$9gF%D=Ve!plOs%(meVm=sG<;UE!mdnVFQBn5eWf zoJ~#6Px9JjOA~tfndgYd z?p($KqS{S6IL|zctDqZ{Q5`_fb#?VhnVXtWcJRzfW!wq~2%zHPVk#*qQSReCj0rgG zci7V8&Fjdc%$GEkK`fY66L#STLjPncu#(Q z0rUGSeD4x1U0T6>HH}P7H`1zAE0z0bcg*d>cqZS&xzkQZTDWr)Ih6R(+46lvC*p|C zCeoF&d1Pt1jRp@M0{(PU#t1Hd{_54Ml``Pl7+>WWo1dS@Wxq zZM%I3P2ahmT#9|@@{vH!D2J*__ESo@9UVO2MwaF#+^73Da$oqv|5^u@)hyn7?>%LV z0*{nsM-}YtPtv20rZYc;{7}cmyhxWWomcvEety2fJ7w7sL*@wZ51=K>meBk#8wxD; zr7P8`RFWA&Ng>-QCCr*KqwFXp+M8Z_*?^cQegD6fpWA@DaDR=rx3@AT0e{q?y!3sNAI+RhyDIlnUU3}d#_#5`TTyzX z9c4w>QnKG>3W&0$ALh=Y{{8wN{9ntD_ZfrG*Is>X~d^gcvcOx?OTt#17Sksy<4mAA9AsX(- zkN+=q;P)pE>_4Dk^t+>J+7Hv|NO=X7@tAe+;K9~03A_~taKSnHImRi-)sU4oZQ8{9 z-DlEzmiv}(vLGY301EV8OBsP?6y&jtjkEEZsrlW;>F5OazS`GX}Dr zaW(s8_r!s$RP~-#f81Qz;&1h@LJ&-pcn+695 zw~ocjmMo>ko7d2$u$?sR+co6rvW7P7UQ6>lHq-pTZ8V*Ki)Yky8(L)ILA&F8DI_bN z)^6B9{rdK+XBzI54m$j);R6Q_7*O`=%de2xZaZ?TP9*cv5ZZAxl2%4L(8sgCCgY99 zEF+}SX&%3*nH?z@pboXiYv~Bfp&2Yw*xB0BoVjzz#NLWFhr5vRt{-XY(seY^#DW$C znbYE+Z8XWug5I5BLtFNElE?l4a>Q@a1TzK!F7*7f&qH1v+ffX-u7-mL4Zix>=bzKw z>`1b!j-_oSL9Odi%qya3SE&#Ax@@2+6Bg5&W%J2!^>SWoX3lzzIoaA454pz&@NeCF z(GuV7WbJB5g$F!Xr~Za{^J7(9t`1py__^*(sEjy^FS|dXimmD1G#mKN(u>qrm)F%BU`;oXSJwofJ-v5k9n2 zDVHV9_c5d8VP^E+kJj|gbZeTt&73wfP3?~MSAM^1vHx~5a#=;m{-#t}6idYg$uw#5 z6nf%`ewSDlTiFpDo_gx3ySd*43?KYt(~rv*(e9!cayt@Ak$G<9@8U=Pj)`>PXgpPx zdGHt%OiA^nly~6>@AFwkTU^R0aDNpg6sD3Rm)VhjgT|SEGtf5NgZBm5MvJ-6PTXio z&yBOC54qh}a9wP|Jjg97fPbsTiDv9ErhUF!=~Q_NkI88)R~(?LXY!d2E$P|kULcl_ za=48j>qtGG9QNe+{(bwM#$45qeU6k8oJpx+Nt|yK9V&JwhlBel?qo5gpE^v*r%LGH zxnsOHZaFPn8$|0I+{rc8SNVMmmneU-igcy9?q)P<)^`4Vdn=l=cN>kGy`7f%St-x# zVvH7go747iCpufj<*rNOdGpa6VpzW5a3Pxx6~xl?@4v;^3@p}kqz+uyy9W&%=r?%q zu%;!8mQh1hBIT6(lWkED#qvHLD0>?3p;XL!WhR&8(4IIyT5Ib;(^q)V-UKdxlrOm_ z`qR7}j$|;!isoA}y+ymw^5AVWX0avBvbN)WzJ16(%#(Jdg;H?^%W|jUsp)u3n|c4# z!26389H1bt0&;S+r4c+n_v_cMXjlj3?P0^7{D@_t)1%)RMYj9)P~OEF$~;p}S@q>q zeEJxLWhBr}l!4n3dsj}LgvDs;iBlkOKkq?f2i)fPVci zGoN4IK`icJxiDbZkSCi~tTd#&no`QIE+x-6{#_$3yZrr~J>2d~w|db$V^8{ao)=A8 zwUg#?e>4kqR?6r78B2w6n~M-1FUNPtG24$oCvnq456eBt%G-~2#d*@IfE_f~%ar@44ebc@q&+bKlvbKg zg=Z@%=~OY<^IlQgikrvvZ6$%UrzVE{GfK#KXCZC#I7sttcpu7yWD2ZHr{LNgif3Mz zf1!#pYYx#u)*l897}&)9)=HM;Mq-vtpL}xYkR~fTH(Fu7kF0rI-pqTcFXZ3F`q6tU zEn~Ut`?XGFvp15;cwERi+x+{7`%e^-RY?e$6$jGx@?f$&98A+3!fB4x0Xk59h>EV1 zQT&loTDPN!Hrf}_0p6Rn`08;ANr|NoKm3sTKK?{Ke|yx8lv(?o{{8w@%$_}$?2~=D z%%)1Y=ks3wb39GRgnt7pJ};fD-O8AcmQYq>31!stc)?>vY;8Wvg;BIFIhZDFh@!ck zVPwg=yz7xzimJ(_l)56yXej13IY?`F9H#A#JL!ezo@06$0DIS;w99d$Y35tYUo&`> zWfw2{k!7=aEZ@vxnb%^VND!4MIR*7-G#K3d1ln{ zT#7!GLy1h^*mnWrd3t>r6<$70zHy=S{(J9J|Gs@sFulCgnR0dJS@t6(U_Xe!tT>7} zn5M`QX?2Gwg=Hd?Cy8Yw>=zTvHlDqy`Skv0xin#VE+w#hdhk*y?<-zLY1n6&_vp`T zsGx%lm9%XK%WF?P4Za@5ZFEm(%G23rxozHKIwCLD@vEqTQqPoe*$*lEoulmjRVlQe z*C@M1H}jXIt2DrQ>Gr<5xGje!$clvI{W(^*gL_e9?-oaf@smgPpD z=Wj)EJy@4nrHoCv7x{NydH)T+ngbMH!?fa7#JshTGV4m2hZmCf@g#C*`PI}SfXugq z(8H?z z8xN63WeRQQed6}>SlY;PEM1DH3jST@70Wgg>m4+R<*OV0{>^xg+wITXA0meg8cg#R z&ZC_k*_3>|nljE6(@q{g@mu4SEW;4X_H-eG$_tslO#O!X_3wLe=+Gx;+>A2Zj69f@ zzU=!%-!pH&^*XtFyHVhY9NJavO{Wg|ux!Ti*o7R{iT2Q|uf74Ds+8;9A^rAdl&zzA zaG84W7#}cbz<{R7)4rqh6knn%S#Y7H?; z{Yhz1T)(Ka5BqY#5~5>iiOm)YDDq^xUL0LM$-Z;;hko?o zM?4Q>z~qj$0n_k@W5$eWLSIAuaqQn;&wB)?Gygfn{on%oI-4;;+v7mrbg;3bIgXp? z0Q)8CSog_@cA~XjZ zp5ocJTz#yP8qc3)9564V`9PbaUtpe(1N%cA?D#jnO}3M72>UerH<6dmMl$g>rpY|7 zZ@!feegDG`Y^UjGe!cIrO#0dIAx}0g+O&!+bNA6~^Ht>T>B)3n#`JJW`8ei>R9CV7 z!@j_vz(BIMwWHP68)=!Hn?vjGo!7v+m-!?Y)ka<2_|np4{~&KrkyUk$i~Bo zOhR|j!rjL7`6f%6=43&i7+I3B>mG8A_owx~78DXYpCaX9Fk)+IiFzApn(SL zqb!~B{WLmIoK0EPCFC9#ME0SciXU$A7B5<6;zN_y*^;4;4S6Q)qfJ5fG?nd4PX1{W zQ(s6P#mtMU!iXB<>2P*D1?)+r>a18gc+`)a4@J^uTMIIH`IU=2=IHe^Jod<=P9Ki_ zun9f_d-h+#7w-_}OVbv5u`Sq@3_~r*F2bFh!q`Ti5JbBVN7B~FblU8ZOU9Y(`(U4F za!?e-dB)NCBT;m+(vMsV{V4L{VTv!#Aj|_DJZMmyE_#sH*!FOI2h+b-atPZ9y=j#N z`_p%O&=k|{v@vKWIfwhOA0Ua6YKzH|{ra{?LnyeUkd`>4(Kw@U?gPH;5A&d?A}{i1 zKW)nSqipYY!FYX@?YD;VJNn}O{rcL?m_37RyrO8;c26=7+0FGfr_YTn$RThar60|u z0-n3%c62|P76*`3#XhphNF>Lg!(iYcj@ZSm(z*>0Lm)`!B_)*V7K z-1&El%Hk>gJpXPe&-t^& zqsp4AEDU71KhC$cHJA&*w=FrlZOeD+eG z|NLjk^}eO+KF^t%`QiAF$tyFG5-M^jk9`lYv+h5`cFd!3v~))%eZRPX0&@>j-jz~H zV?S!qm0C)#ETTE^r}gbu!SfJqcn%)R5Pu#zc*tp+opyAH_k7A?8j3%aN5Pf+yU@{v zh2hzzaHl4~&XOeG>Kkp0mUQ?gP{^O&oPMy8Rn7zsLTJ_zuspOj-MFEwC z%!^BDUv3Hc9Z#V!_Q_RMg-|B@iA>h5r)QoTexXmF$G`0Ccdqw5W4QCB7oWenjCpS2 z(Q@*wOQzU^?(A3IPqk&SG;hu{>hpO2BDT9i{k$ay+eP0T*uQVtr;{g=dz1_NQ!^WXkiltwy}`(&bsRrqeS|KiBa16HiRk@z^cB#Jb<7ENdTU8h!3Y zKLp|CDq9pTvL&IOEe+*thCzs7D?|)iN@Ca=62oQ&8Oqrl!RLl6IS97daJZk(yO*<> zfo(O4U4%^*-8lT7157M1V;FGYRcrjAayH}Cv&jPH3N}@MQ2xPTCy*RLS=6^d_{_e*9$q)bauYY;*T9M;#zy0=kUN6ze`gZPL{_>Y? z^XARdId*sSt2_^XDcj&qVg5Yk$Fa=c#Onx}u>Qo*(6H(M{_p=vcx}hS9nDYu9FMD? zJjedYrAwF6zJ2=?{Sh)VbT#M=Sg#Nk7DoU6_rDKr-MY0?`YNway3fGCAn|jalg9H% zHN4(IgL!|55n9#>XrLd@oiq3H_>VtwW*Y(E?a;yYl_wv5_~A0FcVc^khIMRBQ4!Do z%E{5NuCIY^#NX4PEsC)qLqi>OC}omoL}Zj^OOU1J{FzwIrMhfdvgk*8;DHC*fN26e*MK6>)b%vdL*3Igl#8F zGfN5$3Zkf}c#4P!A!nW=Wbf=qTm9^5j;%3$x5JD+F)^bxPJ78RbPsulJF>nuyvWnb z`@w$iL{x7X~9@u1C~TQsK*g=x}~1L>W&-#p*_|J^%}^~p9iOtUSfBe;JBZ{c~H zMcGkJiM4T>l(R>vsIgq*;Gdw`0-Ip_iU}b}#q8r`33{{p!#6^|)`#`yal4HS%C8WwBhkCw8C4Dauo` zWV077*t%OYZMzlg8s3_jj%J!IyFxS(b!l|CB0xhIVl_qStjk0sX^xhLHyH=m(Wv*{ zt$26zyVvNKp6;H*o*F#7%!hTwT~S_SALK(*7rWDJ2WztCaoas6h?oro4o{xS1eREURd#t>IHO7u!nq_-< zuFVb`jek-Y%cMn`T@|q!%PL>Zo{T(Nv^`6+z&TnIT^&L3b-5b9>;!uIt+%R}Zhm0e zyi4Y(j^BLq^+!JaoNb}|yfh1a%{22pOvrLij3$xol6jX)HM^@~G>gOcX%_j1QRuO3 zO;GXwFXd`u+N#2EO-zjb(d>urpE%kM3DX!`>)aITlm!*cbY>&jFJo|SqHdyWk=Wwb zoMSKxVGKy^I!aS**`!dIfU6l$7zGNY9iy}Zw*rdGx)CgHX&;~4qz)p*ncd{gJvaBB zbMC$AJ@5NI&-2z7sq30SrSXKIx4y*RdfK1!^JD`OZ)+uz!A}ikP`A|J+$GlMUB8S2 z)*jTHaiPA$kIJrIwDSFTggj`Q?ML>uEpsW!((>u4srwR-dh5)p2UhJapmx=B^>TD1 z97GqN-R$e5K6NxwV)8~>N6$wB;frWwuK)a|O}}YM%ib7rxo#Ub{}?rbYNeE6~4-0j*OZ{~(iTeZl@NFU4F`A*)Qjk>fq zam#yO&CYo%St4~86&1;ro=tqTz$j{h#LxsIDm#fHhEgIm2`V*1u(;U;f+}VtoJc;Y z8By8U65_IjnBB$r>>k?vv~>1XiBJp?&O#)_VS;l@qQ&E|jJtWT!p6KrrBo^%jE~&J zu8qWyZyWQaA1_)oVCv(Ze@+ z8lkbDu=TawML@>Gt*(lNdgXi1GB%+!dP#D=EPBS{!)$a%oTWd-zQP( zj+W%UPs!w#ebon}UptIwuv*|Hr!Y7)f+kxNju@&?c&r5P)zIJS4X83}v0?ps`{KFf zGPyRtq$tuf)CT83YfPhmyu|?%*Yj^%4cK-_6Vp;3Yp+9Kv>842dSq?R@`%@n|9PJ& zlC@84&3@&grSnHPiQUw7*ziTQ1%ajCl$__}AB?58%Ba$_mvPwF?n_<}!KEKQgfOfZqNtH_rN i_Arf0P0WO>OE7vnHFpz&u^r;79O5+#yf&IH68#M}bIO_k literal 0 HcmV?d00001 diff --git a/SOLVER/RouteGraphBatcher/obj/Debug/RouteGraphBatcher.Properties.Resources.resources b/SOLVER/RouteGraphBatcher/obj/Debug/RouteGraphBatcher.Properties.Resources.resources new file mode 100644 index 0000000000000000000000000000000000000000..06c24d06c1cab750788146ce052b37770f3fa530 GIT binary patch literal 180 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 D7=H7_ literal 0 HcmV?d00001 diff --git a/SOLVER/RouteGraphBatcher/obj/Debug/RouteGraphBatcher.exe b/SOLVER/RouteGraphBatcher/obj/Debug/RouteGraphBatcher.exe new file mode 100644 index 0000000000000000000000000000000000000000..4b6491f343e833a063ff4a96c9c03572f5806b11 GIT binary patch literal 274432 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

0gN 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 R{Luq{^uQlI@c&N_{2$;~DS7|^ literal 0 HcmV?d00001 diff --git a/SOLVER/RouteGraphBatcher/obj/Debug/TempPE/Properties.Resources.Designer.cs.dll b/SOLVER/RouteGraphBatcher/obj/Debug/TempPE/Properties.Resources.Designer.cs.dll new file mode 100644 index 0000000000000000000000000000000000000000..00aa7e41ac13367f1873fccaa739ddf58582e649 GIT binary patch literal 4608 zcmeHKPi!338UNnwW_Po(O?GM1pinxA12|4Sb%gV%A=7AcvXeO^yB zJF|T=YvLThQdK0{14UJPiiCgz9FX7;T4)u~Lk{JDlnYnNp-7y7N^K84kp8|mGrMam zYN^y)`quAz-@o_0@B7|+-y1Ld@RyV!qAdEYTSRYT$JUUNgUtAe(&JEmj%eh`^WX{w%Yy1rRkY?z&(C9ToX;=#o9*?FSVB16BOdeu%> z`-qJFyF`Jg2u?2Mema5CM6aMTFfkah-@vs0JklmQ_}ns7`5Dn}{WlmBGFG9hu)D~3 zg{Z)Z*xoJ?jcn(A8QO%sA-w|VM~7%Dl9waUe`6)cbgYTrpmZ~dE?Fv64k+zg1qg4{ zHiy8jSW0>U6t(CQbl4U`A8r+*>M+gtO~lWQeKTkW(SD+#ACa`0?ag%iS zbcVhU47N)2G+_2C6EI!e^Mx2GOdTKvR`(_xH71aSVz3h+#MELjx5?V^oLz@0&$a~Z zf-Pvn7GSn`m~xW`$k=3JGL>TsAqR}*DC6o6V6Qkfv!d|uUSXCs^ za_-h2vZk$XPe1(7!yu3k4{#YPj6Y5EM~nwyV7w72*Kdcc@fW1*EXMJ34VuAPobvHg z=jt_#HP9Cj$avKYnxMJCggF1zmjz-a`lmQbd*WQ*1rnxpM~<{d@R3-L`Ix6i-hPk~6~K?_Cg3yTqR7#UfJOR;_z<{hj2byQVK9HqSc6VS!&i(K zj3RwtybJiLhQ-V}R*KhS$m{N=Z_#n&MN?uot$^AI&vqc~H{d~u{z_wj-xbqz*5uhg z-77>H`cG==SB1RT1M0Pe+9&pbdN-jS6eg%YY3etH$Hffd{JW-})m9Apv!-6yo5>sy zoD)Is7>7uRN9YJ(8QusnN3$BQYq&Fk7mVlW33|r(HQ?*URk{cKm&gTti#F(MnFmBk zYaXH>(I3ddX`2!j-A&(ty~Ff#nxlPG2OI}p*E){oJK*1-*XT|9Iy@4{1@G52dI0dK zI1G4R97h}m_}n>nSwOyRdCG1=VN1J?G;?HW6Le9dTX}1#_>wa$1bmHEE?b~gsNDb&z`4n!9 z?YUQC%X2+1>M2?GSA)KC!XwLx0!3{ZT}&59%`z|53WxBN*OIF?4A=cIvVBKt8?~56 z=@^G?E%p4!?MMXN>AId&4XM^$h zzx|e_*_gwlSqnP-<>{2fp4yRYv1DK`@wVpLZ9fPj*9j3wv)4wF&jkLtP^zu^X*hjz z15-Sfkdm$}vbol%1xxp%Xlt z66?0t>z@sFB=Dsl;V?^&=36c{wW@-rLc8e=1-MPnh>!!E0DT0uojKoGQ-SYZku9Qy zCDg|rMFfXQkxgAx%PPi*9AFYW3sqb}tE;I9bwN@H?vfsPwt_D6@MfOAAm8{wy>|Vk zH#;@|-iuWD-IXU-?wR@MxlFD+ieAc~jGeqk&T4$&g}(rQa|y@8VpbYM!@XyFTgiC8aKXEWLFONZ~PTKB#+;I9I(wHCQ#m`_}lS9h489sQiIox8H_8`!0WX_^SDP1yqb%2 z26P?pWc<}l*R!8}k=hx|CjH&WH15fk*N}NNbOEb2?&L|_R1f#EPCl*T{&G90XDvf& zgBwE5H{FHQ*K(pavm@|Tz^4dWF8J-+So#Fv37YQzW~d3A=$r6J^!01HDmdCscgs2^ zbf%fcc*&F1Ib4YYd&zVJ(A!6!aw>*5=ng4Mfrrx>DjQ?l+{MenFf;&0#e*p*&hC=`V literal 0 HcmV?d00001 diff --git a/SOLVER/RouteGraphBatcher/obj/Release/ResolveAssemblyReference.cache b/SOLVER/RouteGraphBatcher/obj/Release/ResolveAssemblyReference.cache new file mode 100644 index 0000000000000000000000000000000000000000..1afa4068decbfe0c921195ca13976651bad5f34c GIT binary patch literal 7867 zcmeHM%Xbr17|%^7j~PnSf(Qs=dFX~RX~6;_98VisEi_P)+EcWiVVc~eBa;kgX3|61 z$Vy@1W1)CFJ{F1#9}AQP>dME`$5Q1S7cO1!Kj8PfnS?tuM<{iblMDTFf4#5o@w?x> zH;u4JByyVyK2f@(BxbW#!F4>RXG@ueWl^jfzr@Wad^<&XU4G1_Lj5j`6bWimAr5I z9KF<%WpjbLw$_{UjAPrp;FAWP{+#J8_~yLLp|9FSLV@_tt_kX(O*&?A+${Kxn+VKF zW}M17)8%e2Ce1iSKIJ-#R*}0&{335%;0jsf#b->r#=S_St1A+Vtx2|8YoamNt`<5^ zESvw4aI~-9>(mSBtz_u(;Rl6-?jfF2;HhMTxH+xO<`e z0!6Q=k4RIDo%eYaTm?P!l?-_CB@DsOKO1iy+kfrmCAFJ?x)!2`1QTXcmeQ@5yNyVwxP%LWc!k)m-k((TJB=o0;c77DcBt$ zPl)}oftHLvOk%V_8fh~R=|e;M-eG<3z4vpqX4?sPB7!X{cHN3CQ8&_1brZy95`FL~ z3WFPks~@3Cd<%(e3+k>yafE0!if^Ui>Z1_bNc17tC=Brxia$n`ct44d;=u-5h2r3j zP#nQjR_^ibG)&z=q7MW_QNW0MFb5{Z3~WfvXy*0QovKLj-9~T*OjJvbY9M=#njTLY zL2~Uekn~3Evg2C*LS<7JjyrC~srs&CuQQ0xPPL5XDA`V#mb;-bhsdeEHE-FLzZ5sd zZL{p9#6)+-vqU1oxD^UO&%Cd2`vK0#9{H|g^5V2(lxNi5<_HH=77 zxkwcMlP1H2)DqE@Kd81UPlZL*f$qe7Ar|VFC^ah-4<<9s!ZW zMB3G#}O(_@af|2gW9;z&*GYfFmM@gF)?QRE& z0Gc{Rl6@!9lYJ`zjeR3?^+v!|8bkSTfMka>;+@c*XZA6KIk+0kR%}f@PQR$rW|C^` zy2KRrwFETwl}wv!A==

d>Z*X>*DK9Iw+xQ*%wqKTG{(wJ0ZA4xo6A4))DAIPM6KSUb5GCHJbW73o;z@ckTxk;M^(B@r< zDeQ^_H1>{6o3~}!r10iMi84G7Tb^Nf^L3cj#>}cvfTc4G@9}y%a;V1MlBmSqlz_(G zka_jG%qs=o40K4-#-#Bnz@e|PfYET0vdZw=Fh7#e^U4=0DpRm z-ncL~v-!!tFEe~4fc%7ShUAjM^Do>L&%l;laqSOx#r3~sSKQ>nU2&sp+4T%HphOwY mZ*;l)9gsq<4$rm_bX{f+wqLj_wqeVK;c1j8gQr_9yyjm^D-B=( literal 0 HcmV?d00001 diff --git a/SOLVER/RouteGraphBatcher/obj/Release/RouteGraphBatcher.Properties.Resources.resources b/SOLVER/RouteGraphBatcher/obj/Release/RouteGraphBatcher.Properties.Resources.resources new file mode 100644 index 0000000000000000000000000000000000000000..06c24d06c1cab750788146ce052b37770f3fa530 GIT binary patch literal 180 zcmX?i>is@O1_p+SK%5g?SzMBus~417oL^d$oLUTL1*ImYq!#HYis@O1_p+SK%5g?SzMBus~417oL^d$oLUTL1*ImYq!#HY5S_{HjQb_55Rs4^mXJfhW!P0DUKYWXHKKx15f8caPS=oTd#9JK9&!Bz z{vYpp^Ah4#s>W$}np7)Cuzj-xY5uEO;*cvp6i#9W* zWppfXgzeS|SX3tMtwbGu+O2-3U1p(|LguW{?bbmy)GFSE>9H9>+8cIOleOei((TH% zj#w1|m-$%89vuR1L%IbMNF}7P0%R#w3wSzE8gOYS5cX6$0?FT7%0ldnotFLg#e}m| zIbDf3YXReb++wv2`In;7yQ3*O7)O1hHI=7fVDwqwHz$S~@&aYLQ)c+*(K$L$+cQEA z1UE7Fd$N_j8Bc@-+ho$dk#JzmnUY{DoH$Y!P^RHxcp`KL=y|1*7Xz-hGR$N)28_s~^RPnOjl=EDfwAK} z)8y;Q6Qd B^b!C7 literal 0 HcmV?d00001 diff --git a/SOLVER/RouteGraphBatcher/obj/Release/RouteGraphBatcher.exe b/SOLVER/RouteGraphBatcher/obj/Release/RouteGraphBatcher.exe new file mode 100644 index 0000000000000000000000000000000000000000..c23fe126c0f96f27d6ba54369f90fa5658b34164 GIT binary patch literal 159744 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 WH(>YQM|3}r<>xu@c@7-J9QZ$_;QlKB literal 0 HcmV?d00001 diff --git a/SOLVER/RouteGraphBatcher/obj/RouteGraphBatcher.csproj.FileList.txt b/SOLVER/RouteGraphBatcher/obj/RouteGraphBatcher.csproj.FileList.txt new file mode 100644 index 0000000..a447947 --- /dev/null +++ b/SOLVER/RouteGraphBatcher/obj/RouteGraphBatcher.csproj.FileList.txt @@ -0,0 +1,8 @@ +..\ReadyBatch\RouteGraphBatcher.exe +..\ReadyBatch\RouteGraphBatcher.pdb +obj\Debug\ResolveAssemblyReference.cache +obj\Debug\RouteGraphBatcher.Properties.Resources.resources +obj\Debug\RouteGraphBatcher.csproj.GenerateResource.Cache +obj\Debug\RouteGraphBatcher.exe +obj\Debug\RouteGraphBatcher.pdb +obj\Debug\RouteGraphBatcher.RGBCForm.resources diff --git a/SOLVER/RouteGraphBatcher/obj/RouteGraphBatcher.csproj.FileListAbsolute.txt b/SOLVER/RouteGraphBatcher/obj/RouteGraphBatcher.csproj.FileListAbsolute.txt new file mode 100644 index 0000000..c683ebc --- /dev/null +++ b/SOLVER/RouteGraphBatcher/obj/RouteGraphBatcher.csproj.FileListAbsolute.txt @@ -0,0 +1,42 @@ +D:\Projects\projects.cs.III\_GRAPH_SOLUTION\ReadyBatch\RouteGraphBatcher.exe +D:\Projects\projects.cs.III\_GRAPH_SOLUTION\ReadyBatch\RouteGraphBatcher.pdb +D:\Projects\projects.cs.III\_GRAPH_SOLUTION\RouteGraphBatcher\obj\Debug\ResolveAssemblyReference.cache +D:\Projects\projects.cs.III\_GRAPH_SOLUTION\RouteGraphBatcher\obj\Debug\RouteGraphBatcher.RGBCForm.resources +D:\Projects\projects.cs.III\_GRAPH_SOLUTION\RouteGraphBatcher\obj\Debug\RouteGraphBatcher.Properties.Resources.resources +D:\Projects\projects.cs.III\_GRAPH_SOLUTION\RouteGraphBatcher\obj\Debug\RouteGraphBatcher.csproj.GenerateResource.Cache +D:\Projects\projects.cs.III\_GRAPH_SOLUTION\RouteGraphBatcher\obj\Debug\RouteGraphBatcher.exe +D:\Projects\projects.cs.III\_GRAPH_SOLUTION\RouteGraphBatcher\obj\Debug\RouteGraphBatcher.pdb +C:\PROJECTS\CSharp_Navicom\ADDR_SEARCH\_GRAPH_SOLUTION\ReadyBatch\RouteGraphBatcher.exe +C:\PROJECTS\CSharp_Navicom\ADDR_SEARCH\_GRAPH_SOLUTION\ReadyBatch\RouteGraphBatcher.pdb +C:\PROJECTS\CSharp_Navicom\ADDR_SEARCH\_GRAPH_SOLUTION\RouteGraphBatcher\obj\Debug\ResolveAssemblyReference.cache +C:\PROJECTS\CSharp_Navicom\ADDR_SEARCH\_GRAPH_SOLUTION\RouteGraphBatcher\obj\Debug\RouteGraphBatcher.RGBCForm.resources +C:\PROJECTS\CSharp_Navicom\ADDR_SEARCH\_GRAPH_SOLUTION\RouteGraphBatcher\obj\Debug\RouteGraphBatcher.Properties.Resources.resources +C:\PROJECTS\CSharp_Navicom\ADDR_SEARCH\_GRAPH_SOLUTION\RouteGraphBatcher\obj\Debug\RouteGraphBatcher.csproj.GenerateResource.Cache +C:\PROJECTS\CSharp_Navicom\ADDR_SEARCH\_GRAPH_SOLUTION\RouteGraphBatcher\obj\Debug\RouteGraphBatcher.exe +C:\PROJECTS\CSharp_Navicom\ADDR_SEARCH\_GRAPH_SOLUTION\RouteGraphBatcher\obj\Debug\RouteGraphBatcher.pdb +C:\PROJECTS\CSharp_Navicom\ADDR_SEARCH\[READY]\ROUTES\MapCreator\RouteGraphBatcher.exe +C:\PROJECTS\CSharp_Navicom\ADDR_SEARCH\[READY]\ROUTES\MapCreator\RouteGraphBatcher.pdb +M:\NAVICOM_PROJECTS\_ROUTES_GIT_\SOLVER\READY\MapCreator\RouteGraphBatcher.exe +M:\NAVICOM_PROJECTS\_ROUTES_GIT_\SOLVER\READY\MapCreator\RouteGraphBatcher.pdb +M:\NAVICOM_PROJECTS\_ROUTES_GIT_\SOLVER\RouteGraphBatcher\obj\Debug\ResolveAssemblyReference.cache +M:\NAVICOM_PROJECTS\_ROUTES_GIT_\SOLVER\RouteGraphBatcher\obj\Debug\RouteGraphBatcher.RGBCForm.resources +M:\NAVICOM_PROJECTS\_ROUTES_GIT_\SOLVER\RouteGraphBatcher\obj\Debug\RouteGraphBatcher.Properties.Resources.resources +M:\NAVICOM_PROJECTS\_ROUTES_GIT_\SOLVER\RouteGraphBatcher\obj\Debug\RouteGraphBatcher.csproj.GenerateResource.Cache +M:\NAVICOM_PROJECTS\_ROUTES_GIT_\SOLVER\RouteGraphBatcher\obj\Debug\RouteGraphBatcher.exe +M:\NAVICOM_PROJECTS\_ROUTES_GIT_\SOLVER\RouteGraphBatcher\obj\Debug\RouteGraphBatcher.pdb +M:\NAVICOM_PROJECTS\_ROUTES_GIT_\READY\MapCreator\RouteGraphBatcher.exe +M:\NAVICOM_PROJECTS\_ROUTES_GIT_\READY\MapCreator\RouteGraphBatcher.pdb +M:\NAVICOM_PROJECTS\_ROUTES_GIT_\SOLVER\RouteGraphBatcher\obj\Release\ResolveAssemblyReference.cache +M:\NAVICOM_PROJECTS\_ROUTES_GIT_\SOLVER\RouteGraphBatcher\obj\Release\RouteGraphBatcher.RGBCForm.resources +M:\NAVICOM_PROJECTS\_ROUTES_GIT_\SOLVER\RouteGraphBatcher\obj\Release\RouteGraphBatcher.Properties.Resources.resources +M:\NAVICOM_PROJECTS\_ROUTES_GIT_\SOLVER\RouteGraphBatcher\obj\Release\RouteGraphBatcher.csproj.GenerateResource.Cache +M:\NAVICOM_PROJECTS\_ROUTES_GIT_\SOLVER\RouteGraphBatcher\obj\Release\RouteGraphBatcher.exe +M:\NAVICOM_PROJECTS\_ROUTES_GIT_\SOLVER\RouteGraphBatcher\obj\Release\RouteGraphBatcher.pdb +M:\NAVICOM_PROJECTS\_ROUTES_PSOURCE_\SOLVER\RouteGraphBatcher\obj\Debug\RouteGraphBatcher.exe +M:\NAVICOM_PROJECTS\_ROUTES_PSOURCE_\SOLVER\RouteGraphBatcher\obj\Debug\RouteGraphBatcher.pdb +M:\NAVICOM_PROJECTS\_ROUTES_PSOURCE_\READY\MapCreator\RouteGraphBatcher.exe +M:\NAVICOM_PROJECTS\_ROUTES_PSOURCE_\READY\MapCreator\RouteGraphBatcher.pdb +M:\NAVICOM_PROJECTS\_ROUTES_PSOURCE_\SOLVER\RouteGraphBatcher\obj\Debug\ResolveAssemblyReference.cache +M:\NAVICOM_PROJECTS\_ROUTES_PSOURCE_\SOLVER\RouteGraphBatcher\obj\Debug\RouteGraphBatcher.RGBCForm.resources +M:\NAVICOM_PROJECTS\_ROUTES_PSOURCE_\SOLVER\RouteGraphBatcher\obj\Debug\RouteGraphBatcher.Properties.Resources.resources +M:\NAVICOM_PROJECTS\_ROUTES_PSOURCE_\SOLVER\RouteGraphBatcher\obj\Debug\RouteGraphBatcher.csproj.GenerateResource.Cache diff --git a/SOLVER/RouteGraphCalcMatrix/Program.cs b/SOLVER/RouteGraphCalcMatrix/Program.cs new file mode 100644 index 0000000..6f323d0 --- /dev/null +++ b/SOLVER/RouteGraphCalcMatrix/Program.cs @@ -0,0 +1,257 @@ +using System; +using System.Collections.Generic; +using System.Text; +using System.IO; +using System.Xml; + +using dkxce.Route.Classes; +using dkxce.Route.Matrix; + +using dkxce.Route.Regions; + +namespace RouteGraphCalcMatrix +{ + class Program + { + static void Main(string[] args) + { + if ((args == null) || (args.Length < 2)) + { + Console.WriteLine("Ìîäóëü ñîçäàíèå ìàòðèöû ìåæðåãèîíàëüíûõ ìàðøðóòîâ"); + Console.WriteLine("User syntax: RouteGraphCalcMatrix.exe %graphs_dir% %matrix_filename% %regions_dir%"); + Console.WriteLine("Example: RouteGraphCalcMatrix.exe DATA\\READY\\GRAPHS DATA\\READY\\000.bin "); + System.Threading.Thread.Sleep(5000); + return; + }; + + string path = args[0]; + if (!System.IO.Path.IsPathRooted(path)) path = XMLSaved.GetCurrentDir() + path; + + int size = 10; + string[] files = System.IO.Directory.GetFiles(path, "*.rgnodes.xml"); + Console.WriteLine("Calculate matrix size..."); + foreach (string file in files) + { + TRGNode[] nds = XMLSaved.Load(file); + for (int i = 0; i < nds.Length; i++) + if (nds[i].id > size) size = nds[i].id; + }; + Console.WriteLine("Matrix size is " + size.ToString() + " X " + size.ToString()); + + RMMatrix rm = RMMatrix.CreateInMemory(size); + RGNodesDots rgnd = new RGNodesDots(size); + if (args.Length > 2) rgnd.RegionsDir = args[2]; + + Console.WriteLine("Loading RGNodes in Matrix"); + foreach (string file in files) + { + TRGNode[] nds = XMLSaved.Load(file); + for (int i = 0; i < nds.Length; i++) + { + if (nds[i].links != null) + for (int ito = 0; ito < nds[i].links.Length; ito++) + rm.AddWay((uint)nds[i].id, (uint)nds[i].links[ito], nds[i].costs[ito], nds[i].dists[ito], nds[i].times[ito], (ushort)nds[i].region); + + string err = ""; + if (nds[i].links != null) + if (nds[i].dists.Length > 0) + if (nds[i].dists[0] > 1E+20) + err = nds[i].region.ToString()+"["+nds[i].links[0].ToString()+"->-"+nds[i].id.ToString()+"]"; + + rgnd.AddNode(nds[i].id, nds[i].lat, nds[i].lon, nds[i].region.ToString(), err); + }; + }; + + path = args[1]; + if (!System.IO.Path.IsPathRooted(path)) path = XMLSaved.GetCurrentDir() + path; + + rm.SaveToTextFile(path + ".zero.txt"); + Console.WriteLine("Solving..."); + rm.Solve(); // calculate matrix + rm.SaveToFile(path); // save matrix to disk + rm.SaveToTextFile(path + ".filled.txt"); + rgnd.SaveNodesToCSV(path + ".csv"); + rgnd.SaveNodesToGPX(path + ".gpx"); + rgnd.SaveNodesToMP(path + ".mp"); + rgnd.SaveNodesToKML(path + ".kml"); + rgnd.SaveNodesToGeoJSON(path + ".geojson"); + System.Threading.Thread.Sleep(1500); + Console.WriteLine("Done"); + rm.Close(); // close matrix + } + + private class RGNodesDots + { + public string RegionsDir = ""; + + private int size = 0; + private float[] lats; + private float[] lons; + private string[] regs; + private string[] errs; + + private int maxRegsIn = 2; + + public RGNodesDots(int size) + { + this.size = size; + this.lats = new float[size+1]; + this.lons = new float[size+1]; + this.regs = new string[size+1]; + this.errs = new string[size+1]; + } + + public void AddNode(int id, float lat, float lon, string reg, string error) + { + try + { + this.lats[id] = lat; + this.lons[id] = lon; + if (this.regs[id] == null) this.regs[id] = ""; + if (this.errs[id] == null) this.errs[id] = ""; + this.regs[id] += (this.regs[id].Length > 0 ? "," : "") + reg; + int tmp = this.regs[id].Split(new string[] { "," }, StringSplitOptions.None).Length; + if (tmp > maxRegsIn) tmp = maxRegsIn; + if(error.Length > 0) + this.errs[id] += (this.errs[id].Length > 0 ? "," : "") + error; + } + catch (Exception ex) + { + Console.WriteLine(ex.Message); + Console.ReadLine(); + }; + } + + ///

+ /// Ñîçäàåò òàáëèöó êîîðäèíàò óçëîâ ìåæðåãèîíàëüíûõ ìàðøðóòîâ + /// + /// Ïîëíûé ïóòü ê ôàéëó + public void SaveNodesToCSV(string fn) + { + FileStream fout = new FileStream(fn, FileMode.Create); + StreamWriter sw = new StreamWriter(fout,System.Text.Encoding.GetEncoding(1251)); + + PointInRegionUtils ru = new PointInRegionUtils(); + if(this.RegionsDir != "") + ru.LoadRegionsFromFile(this.RegionsDir + @"\regions.shp"); + + //sw.WriteLine("Òî÷êè ñòûêîâêè ìåæðåãèîíàëüíûõ ìàðøðóòîâ"); + sw.Write("RGNODE;REGION_A;REGION_B;" + (maxRegsIn > 2 ? "REGIONS_ALL;" : "") + "LAT;LON;ERROR_IN(FROM_RGNODE->-TO_RGNODE);"); + if (ru.RegionsCount > 0) + { + sw.Write("REG_ANAM;"); + sw.Write("REG_BNAM;"); + }; + sw.WriteLine(); + for (uint x = 1; x <= size; x++) + { + sw.Write(x.ToString() + ";"); + string[] r = new string[] { "" }; + if(this.regs[x] != null) r = this.regs[x].Split(new string[] { "," }, StringSplitOptions.None); + sw.Write(r[0] + ";"); + sw.Write((r.Length > 1 ? r[1] : "") + ";"); + if(maxRegsIn > 2) + sw.Write((r.Length > 2 ? this.regs[x] : "") + ";"); + sw.Write(this.lats[x].ToString() + ";"); + sw.Write(this.lons[x].ToString() + ";"); + sw.Write(this.errs[x] + ";"); + if (ru.RegionsCount > 0) + { + if(r[0].Length > 0) + sw.Write(ru.RegionNameByRegionId(int.Parse(r[0]))+";"); + else + sw.Write(";"); + if(r.Length > 1) + sw.Write(ru.RegionNameByRegionId(int.Parse(r[1])) + ";"); + else + sw.Write(";"); + }; + sw.WriteLine(); + }; + sw.WriteLine(); + + sw.Flush(); + fout.Close(); + } + + public void SaveNodesToGPX(string fn) + { + FileStream fout = new FileStream(fn, FileMode.Create); + StreamWriter sw = new StreamWriter(fout, System.Text.Encoding.GetEncoding(1251)); + + sw.WriteLine(""); + sw.WriteLine(""); + + for (uint x = 1; x <= size; x++) + if((this.lats[x] != 0) && (this.lons[x] != 0)) + sw.WriteLine(""+x.ToString()+""); + sw.WriteLine(""); + + sw.Flush(); + fout.Close(); + } + + public void SaveNodesToKML(string fn) + { + FileStream fout = new FileStream(fn, FileMode.Create); + StreamWriter sw = new StreamWriter(fout, System.Text.Encoding.GetEncoding(1251)); + + sw.WriteLine("RGNodes"); + + for (uint x = 1; x <= size; x++) + if ((this.lats[x] != 0) && (this.lons[x] != 0)) + sw.WriteLine("" + x.ToString() + "" + this.lons[x].ToString().Replace(",", ".") + "," + this.lats[x].ToString().Replace(",", ".") + ",0"); + sw.WriteLine(""); + + sw.Flush(); + sw.Close(); + } + + public void SaveNodesToGeoJSON(string fn) + { + FileStream fout = new FileStream(fn, FileMode.Create); + StreamWriter sw = new StreamWriter(fout, System.Text.Encoding.GetEncoding(1251)); + sw.WriteLine("{ \"type\": \"FeatureCollection\", \"features\": ["); + int fC = 0; + + for (uint x = 1; x <= size; x++) + if ((this.lats[x] != 0) && (this.lons[x] != 0)) + { + if ((fC++) > 0) sw.Write(","); + sw.Write("{ \"type\": \"Feature\", \"geometry\": {\"type\": \"Point\", \"coordinates\": ["+this.lons[x].ToString().Replace(",", ".") + "," + this.lats[x].ToString().Replace(",", ".")+"]},"); + sw.WriteLine("\"properties\": {\"id\": "+x.ToString()+ "}}"); + }; + + + sw.WriteLine("]}"); + sw.Flush(); + sw.Close(); + } + + public void SaveNodesToMP(string fn) + { + FileStream fout = new FileStream(fn, FileMode.Create); + StreamWriter sw = new StreamWriter(fout, System.Text.Encoding.GetEncoding(1251)); + + sw.WriteLine("; Generated by dkxce RGWay 2 MP Converter"); + sw.WriteLine(""); + sw.WriteLine("[IMG ID]"); + sw.WriteLine("[END-IMG ID]"); + sw.WriteLine(""); + + for (uint x = 1; x <= size; x++) + if ((this.lats[x] != 0) && (this.lons[x] != 0)) + { + sw.WriteLine("[POI]"); + sw.WriteLine("Type=0x1611"); + sw.WriteLine("Label=" + x.ToString()); + sw.WriteLine("Data0=(" + this.lats[x].ToString().Replace(",", ".") + "," + this.lons[x].ToString().Replace(",", ".") + ")"); + sw.WriteLine("[END]"); + }; + + sw.Flush(); + fout.Close(); + } + } + } +} diff --git a/SOLVER/RouteGraphCalcMatrix/Properties/AssemblyInfo.cs b/SOLVER/RouteGraphCalcMatrix/Properties/AssemblyInfo.cs new file mode 100644 index 0000000..9dac252 --- /dev/null +++ b/SOLVER/RouteGraphCalcMatrix/Properties/AssemblyInfo.cs @@ -0,0 +1,33 @@ +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +[assembly: AssemblyTitle("RouteGraphCalcMatrix")] +[assembly: AssemblyDescription("Модуль раÑчета матрицы межрегиональных маршрутов")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("Milok Zbrozek ")] +[assembly: AssemblyProduct("RouteGraphCalcMatrix")] +[assembly: AssemblyCopyright("Copyright © Milok Zbrozek 2021")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// Setting ComVisible to false makes the types in this assembly not visible +// to COM components. If you need to access a type in this assembly from +// COM, set the ComVisible attribute to true on that type. +[assembly: ComVisible(false)] + +// The following GUID is for the ID of the typelib if this project is exposed to COM +[assembly: Guid("b5ba2695-bcb8-44af-ab1a-e287cab8b5c8")] + +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +[assembly: AssemblyVersion("21.12.21.3")] +[assembly: AssemblyFileVersion("21.12.21.3")] diff --git a/SOLVER/RouteGraphCalcMatrix/RouteGraphCalcMatrix.csproj b/SOLVER/RouteGraphCalcMatrix/RouteGraphCalcMatrix.csproj new file mode 100644 index 0000000..6c8fff5 --- /dev/null +++ b/SOLVER/RouteGraphCalcMatrix/RouteGraphCalcMatrix.csproj @@ -0,0 +1,67 @@ + + + Debug + AnyCPU + 8.0.50727 + 2.0 + {ACA0760C-FC85-42D6-A045-5E8635D78070} + Exe + Properties + RouteGraphCalcMatrix + RouteGraphCalcMatrix + console.ico + + + true + full + false + ..\..\READY\MapCreator\ + DEBUG;TRACE + prompt + 4 + + + pdbonly + true + ..\..\READY\MapCreator\ + TRACE + prompt + 4 + + + + False + ..\..\READY\MAIN_DLLs\dkxce.Route.Classes.dll + + + False + ..\..\READY\MAIN_DLLs\dkxce.Route.Matrix.dll + + + False + ..\..\READY\MAIN_DLLs\dkxce.Route.Regions.dll + + + + + + False + ..\..\READY\MAIN_DLLs\XMLSaved.dll + + + + + + + + + + + + \ No newline at end of file diff --git a/SOLVER/RouteGraphCalcMatrix/RouteGraphCalcMatrix.csproj.user b/SOLVER/RouteGraphCalcMatrix/RouteGraphCalcMatrix.csproj.user new file mode 100644 index 0000000..8b7821a --- /dev/null +++ b/SOLVER/RouteGraphCalcMatrix/RouteGraphCalcMatrix.csproj.user @@ -0,0 +1,5 @@ + + + "C:\PROJECTS\CSharp_Navicom\ADDR_SEARCH\_GRAPH_SOLUTION\ReadyBatch\Graphs" "C:\PROJECTS\CSharp_Navicom\ADDR_SEARCH\_GRAPH_SOLUTION\ReadyBatch\GRAPHS\00X.bin" + + \ No newline at end of file diff --git a/SOLVER/RouteGraphCalcMatrix/console.ico b/SOLVER/RouteGraphCalcMatrix/console.ico new file mode 100644 index 0000000000000000000000000000000000000000..fa2c978e7da61d4750e460e275f86773f61aee26 GIT binary patch literal 86358 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 literal 0 HcmV?d00001 diff --git a/SOLVER/RouteGraphCalcMatrix/obj/Debug/RouteGraphCalcMatrix.exe b/SOLVER/RouteGraphCalcMatrix/obj/Debug/RouteGraphCalcMatrix.exe new file mode 100644 index 0000000000000000000000000000000000000000..10ed2d5640cece87f1d613e332a85ff63c3f8601 GIT binary patch literal 110592 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 NFePA0V5CUk{{vGTNUQ(= literal 0 HcmV?d00001 diff --git a/SOLVER/RouteGraphCalcMatrix/obj/Debug/RouteGraphCalcMatrix.pdb b/SOLVER/RouteGraphCalcMatrix/obj/Debug/RouteGraphCalcMatrix.pdb new file mode 100644 index 0000000000000000000000000000000000000000..aa77bc7b9732264b74ffb9638b8d29e4938f7b05 GIT binary patch literal 19968 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 e(7KXN!{>pi!&g}%RvUXAmTbIXcO4Sc zLZlXY1EgM5mG+?*Ri%9@Z67N2^3=;?FX~gJKJ>8<{0Dlz@!FXsRznh=EKlO&b3C_m zX1+P+%!F7d6uM0X-zbe?A}5k&#<5*H=c!!<)5@xYx;y5!wGJ7MYufq!JJjv?Yimsu zEU(}g`}0P@b9Ae%b)Ya}nVF-;^q@Uvxf7o|J$^I8Yq3Xp6$^y zp6xXF=0p?r_=N5lPBR8g*jZ!1u_w)};Y9I6+B|PaWRV*g(yfBwhC+39q5Aq|(Mogm zmd4srLFe8%Ld8^J9nQjg!Z&WnbvJtZVyphnWiOWIj8XByc?=r%rLO&`<8jmE4o zVdS$$K4Thgqnpt^&v4M!4M|dDdE1>6rBBnQXVp$&i0&!R$OGa)mAa4)Cr_aZKL4)1 zb!7L=zh04>NRVS7%|sY%hry8>d;jG1EvQ-nvXThHvY`Hx>+7}+e@*@GL)9vf`-w2D z80!Ci=k{g;^{Y{}24pRfdQ7)q8=G`jv_Go5X#z-ow2p1?0h}^&{-F!36hC$k(3FvN zM7l~?6nsRx+TO12=umge?druVP3E$@_OnjKM1mcNDI~+g<+ZbRy;&Z zq?JhD+!L_`y|IH_Z|E*9TMlPF z@(7U@Kof-lja>0ZiHST$B%rwO6PBPjkj@nc^cJzsk5f1K2_h{xE+`W4I}grrD(f}4 z7ey-vx7aMp<6NWW2g2Tb&XzTVkS^UdqM9FJnlyO+PHWV5Oz-sgnxNQYI|)1QIkvSz zqtj>SM=>2moB`c*R+Yx!fyFaNOw079BU+E8kGe5F&}@I!&=6vEyflQv(I)>0`&x9A zLsC9xjusppk+gKE$z_(<>436}>$Q2V_n2eaQ+KP6uYX_#Doh|cGQK?F$X43DXvsGz zavO;k=@Z#Tq#FswzIZ&I+!sIAInn`0q3r2BeyhBK=0(l2$4>19wut(wKL% zfWfZts0xFd<>!1S7vXTZxQmN$yJByR;Fm@M*4|c@-%M=cg!t$hM1M&biPYg z8{e#Um_%gp18-+p8*WlWmL3eh)81u+!q z90CcCMmP)A7D&RiKtf^I4^~PqR7Wd!~sy`A)@Sa0iNtLK~UHY5v!m2 zSfxJX+2Jv3pyBto>dZb)Vw?RW=ft?B$iwtQ5jLlYV;>7hVIK*C!afvX^8pEP=G2E^ zgUDKgO%=mtgf=)*gpDF+NGL)kOB{QjU{J~p*?WSZuPAlRH8D|Yw zRg9|%+F$`!XGtvL${~(j6`;hf2!g_17jgBPh${*Ak{W2L7&PYqn$k0hB2Se;GY!yO z7I4BY34+325<&A~05rJ0)<9Fmpt(RB97w0(XNtaNhB$UnKnlAc2nu_Fq;hWbJPEV8 z5#BOT!VJ$26=N9Q5^Bh*Vq{&S4Hjb9WfF_HdYL#jB|wRt69k1#inuC>xRUVVR0B;F zgXRitaNv2g{1AM#jGt@3&shO7Y(fweW{ddAi};D*i785-@Hgj&ht}@;=T(NMCio}3 zIEp2PXN6!>JTFviitA*sDXx_jo8pELY>Jyg#imI5f=!Y9Rcwk-j}m4G^=NYERWyd9 f7aVQIZ#u_voYY`boY;yJV^dJV>>ANZ6EFJ@rn_i@ literal 0 HcmV?d00001 diff --git a/SOLVER/RouteGraphCalcMatrix/obj/Release/RouteGraphCalcMatrix.exe b/SOLVER/RouteGraphCalcMatrix/obj/Release/RouteGraphCalcMatrix.exe new file mode 100644 index 0000000000000000000000000000000000000000..9cf88dd7c1f6366f2f8441e80c360c5d32bfcb2a GIT binary patch literal 110592 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 literal 0 HcmV?d00001 diff --git a/SOLVER/RouteGraphCalcMatrix/obj/RouteGraphCalcMatrix.csproj.FileList.txt b/SOLVER/RouteGraphCalcMatrix/obj/RouteGraphCalcMatrix.csproj.FileList.txt new file mode 100644 index 0000000..83d459a --- /dev/null +++ b/SOLVER/RouteGraphCalcMatrix/obj/RouteGraphCalcMatrix.csproj.FileList.txt @@ -0,0 +1,5 @@ +obj\Debug\ResolveAssemblyReference.cache +..\ReadyBatch\RouteGraphCalcMatrix.exe +..\ReadyBatch\RouteGraphCalcMatrix.pdb +obj\Debug\RouteGraphCalcMatrix.exe +obj\Debug\RouteGraphCalcMatrix.pdb diff --git a/SOLVER/RouteGraphCalcMatrix/obj/RouteGraphCalcMatrix.csproj.FileListAbsolute.txt b/SOLVER/RouteGraphCalcMatrix/obj/RouteGraphCalcMatrix.csproj.FileListAbsolute.txt new file mode 100644 index 0000000..ec659dc --- /dev/null +++ b/SOLVER/RouteGraphCalcMatrix/obj/RouteGraphCalcMatrix.csproj.FileListAbsolute.txt @@ -0,0 +1,27 @@ +D:\Projects\projects.cs.III\_GRAPH_SOLUTION\ReadyBatch\RouteGraphCalcMatrix.exe +D:\Projects\projects.cs.III\_GRAPH_SOLUTION\ReadyBatch\RouteGraphCalcMatrix.pdb +D:\Projects\projects.cs.III\_GRAPH_SOLUTION\RouteGraphCalcMatrix\obj\Debug\ResolveAssemblyReference.cache +D:\Projects\projects.cs.III\_GRAPH_SOLUTION\RouteGraphCalcMatrix\obj\Debug\RouteGraphCalcMatrix.exe +D:\Projects\projects.cs.III\_GRAPH_SOLUTION\RouteGraphCalcMatrix\obj\Debug\RouteGraphCalcMatrix.pdb +C:\PROJECTS\CSharp_Navicom\ADDR_SEARCH\_GRAPH_SOLUTION\ReadyBatch\RouteGraphCalcMatrix.exe +C:\PROJECTS\CSharp_Navicom\ADDR_SEARCH\_GRAPH_SOLUTION\ReadyBatch\RouteGraphCalcMatrix.pdb +C:\PROJECTS\CSharp_Navicom\ADDR_SEARCH\_GRAPH_SOLUTION\RouteGraphCalcMatrix\obj\Debug\ResolveAssemblyReference.cache +C:\PROJECTS\CSharp_Navicom\ADDR_SEARCH\_GRAPH_SOLUTION\RouteGraphCalcMatrix\obj\Debug\RouteGraphCalcMatrix.exe +C:\PROJECTS\CSharp_Navicom\ADDR_SEARCH\_GRAPH_SOLUTION\RouteGraphCalcMatrix\obj\Debug\RouteGraphCalcMatrix.pdb +C:\PROJECTS\CSharp_Navicom\ADDR_SEARCH\[READY]\ROUTES\MapCreator\RouteGraphCalcMatrix.exe +C:\PROJECTS\CSharp_Navicom\ADDR_SEARCH\[READY]\ROUTES\MapCreator\RouteGraphCalcMatrix.pdb +M:\NAVICOM_PROJECTS\_ROUTES_GIT_\SOLVER\READY\MapCreator\RouteGraphCalcMatrix.exe +M:\NAVICOM_PROJECTS\_ROUTES_GIT_\SOLVER\READY\MapCreator\RouteGraphCalcMatrix.pdb +M:\NAVICOM_PROJECTS\_ROUTES_GIT_\SOLVER\RouteGraphCalcMatrix\obj\Debug\ResolveAssemblyReference.cache +M:\NAVICOM_PROJECTS\_ROUTES_GIT_\SOLVER\RouteGraphCalcMatrix\obj\Debug\RouteGraphCalcMatrix.exe +M:\NAVICOM_PROJECTS\_ROUTES_GIT_\SOLVER\RouteGraphCalcMatrix\obj\Debug\RouteGraphCalcMatrix.pdb +M:\NAVICOM_PROJECTS\_ROUTES_GIT_\READY\MapCreator\RouteGraphCalcMatrix.exe +M:\NAVICOM_PROJECTS\_ROUTES_GIT_\READY\MapCreator\RouteGraphCalcMatrix.pdb +M:\NAVICOM_PROJECTS\_ROUTES_GIT_\SOLVER\RouteGraphCalcMatrix\obj\Release\ResolveAssemblyReference.cache +M:\NAVICOM_PROJECTS\_ROUTES_GIT_\SOLVER\RouteGraphCalcMatrix\obj\Release\RouteGraphCalcMatrix.exe +M:\NAVICOM_PROJECTS\_ROUTES_GIT_\SOLVER\RouteGraphCalcMatrix\obj\Release\RouteGraphCalcMatrix.pdb +M:\NAVICOM_PROJECTS\_ROUTES_PSOURCE_\READY\MapCreator\RouteGraphCalcMatrix.exe +M:\NAVICOM_PROJECTS\_ROUTES_PSOURCE_\READY\MapCreator\RouteGraphCalcMatrix.pdb +M:\NAVICOM_PROJECTS\_ROUTES_PSOURCE_\SOLVER\RouteGraphCalcMatrix\obj\Debug\ResolveAssemblyReference.cache +M:\NAVICOM_PROJECTS\_ROUTES_PSOURCE_\SOLVER\RouteGraphCalcMatrix\obj\Debug\RouteGraphCalcMatrix.exe +M:\NAVICOM_PROJECTS\_ROUTES_PSOURCE_\SOLVER\RouteGraphCalcMatrix\obj\Debug\RouteGraphCalcMatrix.pdb diff --git a/SOLVER/RouteGraphCalcRG/Program.cs b/SOLVER/RouteGraphCalcRG/Program.cs new file mode 100644 index 0000000..6cf5d43 --- /dev/null +++ b/SOLVER/RouteGraphCalcRG/Program.cs @@ -0,0 +1,33 @@ +using System; +using System.IO; +using System.Xml; +using System.Collections.Generic; + +using dkxce.Route.Classes; +using dkxce.Route.Shp2Rt; +using dkxce.Route.GSolver; + +namespace RouteGraphCalcRG +{ + class Program + { + static void Main(string[] args) + { + if ((args == null) || (args.Length < 3)) + { + Console.WriteLine("Ìîäóëü ïðåäâàðèòåëüíîãî ïðîñ÷åòà ìàðøðóòîâ ìåæäó RGNodes (ìåæðåãèîíàëüíûìè) òî÷êàìè"); + Console.WriteLine("User syntax: RouteGraphCalcRG.exe %region_id% %route_filename% rgway_dir%"); + Console.WriteLine("Example: RouteGraphCreator.exe 11 DATA\\READY\\lipetsk.rt DATA\\READY\\RGWAY"); + System.Threading.Thread.Sleep(5000); + return; + }; + + Console.WriteLine(DateTime.Now.ToString("HH:mm:ss") + " Çàãðóçêà ãðàôà â ïàìÿòü"); + RMGraph gr = RMGraph.LoadToMemory(args[1], Convert.ToInt32(args[0])); + gr.MinimizeRouteBy = MinimizeBy.Time; + gr.CalculateRGNodesRoutes(Convert.ToInt32(args[0]),args[2]); // Ðàñ÷åò ïóòåé ìåæäó òî÷êàìè ñòûêîâêè ìåæðàéîííûõ ìàðøðóòîâ + + gr.Close(); + } + } +} diff --git a/SOLVER/RouteGraphCalcRG/Properties/AssemblyInfo.cs b/SOLVER/RouteGraphCalcRG/Properties/AssemblyInfo.cs new file mode 100644 index 0000000..f9f2e0a --- /dev/null +++ b/SOLVER/RouteGraphCalcRG/Properties/AssemblyInfo.cs @@ -0,0 +1,33 @@ +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +[assembly: AssemblyTitle("RouteGraphCalcRG")] +[assembly: AssemblyDescription("Можуль предварительного раÑчета межрегиональных маршрутов")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("Milok Zbrozek ")] +[assembly: AssemblyProduct("RouteGraphCalcRG")] +[assembly: AssemblyCopyright("Copyright © Milok Zbrozek 2021")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// Setting ComVisible to false makes the types in this assembly not visible +// to COM components. If you need to access a type in this assembly from +// COM, set the ComVisible attribute to true on that type. +[assembly: ComVisible(false)] + +// The following GUID is for the ID of the typelib if this project is exposed to COM +[assembly: Guid("1e2fbd2f-715e-4e90-8b51-8c6d56eb0548")] + +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +[assembly: AssemblyVersion("21.12.21.3")] +[assembly: AssemblyFileVersion("21.12.21.3")] diff --git a/SOLVER/RouteGraphCalcRG/RouteGraphCalcRG.csproj b/SOLVER/RouteGraphCalcRG/RouteGraphCalcRG.csproj new file mode 100644 index 0000000..d85bfff --- /dev/null +++ b/SOLVER/RouteGraphCalcRG/RouteGraphCalcRG.csproj @@ -0,0 +1,63 @@ + + + Debug + AnyCPU + 8.0.50727 + 2.0 + {9F0C10CD-A68C-4CE3-9C84-89D66B24AD7D} + Exe + Properties + RouteGraphCalcRG + RouteGraphCalcRG + console.ico + + + true + full + false + ..\..\READY\MapCreator\ + DEBUG;TRACE + prompt + 4 + + + pdbonly + true + ..\..\READY\MapCreator\ + TRACE + prompt + 4 + + + + False + ..\..\READY\MAIN_DLLs\dkxce.Route.Classes.dll + + + False + ..\..\READY\MAIN_DLLs\dkxce.Route.GSolver.dll + + + False + ..\..\READY\MAIN_DLLs\dkxce.Route.Shp2Rt.dll + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/SOLVER/RouteGraphCalcRG/RouteGraphCalcRG.csproj.user b/SOLVER/RouteGraphCalcRG/RouteGraphCalcRG.csproj.user new file mode 100644 index 0000000..b06819f --- /dev/null +++ b/SOLVER/RouteGraphCalcRG/RouteGraphCalcRG.csproj.user @@ -0,0 +1,5 @@ + + + 27 "C:\PROJECTS\CSharp_Navicom\ADDR_SEARCH\[READY]\ROUTES\MapCreator\..\GRAPHS\027.rt" "C:\PROJECTS\CSharp_Navicom\ADDR_SEARCH\[READY]\ROUTES\MapCreator\..\RGWays" + + \ No newline at end of file diff --git a/SOLVER/RouteGraphCalcRG/console.ico b/SOLVER/RouteGraphCalcRG/console.ico new file mode 100644 index 0000000000000000000000000000000000000000..fa2c978e7da61d4750e460e275f86773f61aee26 GIT binary patch literal 86358 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 literal 0 HcmV?d00001 diff --git a/SOLVER/RouteGraphCalcRG/obj/Debug/RouteGraphCalcRG.exe b/SOLVER/RouteGraphCalcRG/obj/Debug/RouteGraphCalcRG.exe new file mode 100644 index 0000000000000000000000000000000000000000..ed3acbc6deb39b4eb094be196c485dbb561be250 GIT binary patch literal 102400 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 literal 0 HcmV?d00001 diff --git a/SOLVER/RouteGraphCalcRG/obj/Debug/RouteGraphCalcRG.pdb b/SOLVER/RouteGraphCalcRG/obj/Debug/RouteGraphCalcRG.pdb new file mode 100644 index 0000000000000000000000000000000000000000..3ea503b07b8879c5ead7a0b8ee284f5a61c67bf1 GIT binary patch literal 13824 zcmeHMZA@EL7(NB$8?>m1%&=-$oCDiJ*dS@1PP@}tQ`xxPFCaz6zgUOlK3+qvOOyOv z1r~Vb_wSdbtX&HlvQnkbGz^EStvVh zo%4%%?{h`ZzURL4zz^SjYMtvzUsoM`_+IPyaqF>7LYyo29NTp$-uubeLjy<7Z2Rm% z?fC-?8_Ls(Q+Fg!zPA32z*y^#FKv6Y3VGE)4NwbM0p5EhAf<3D@NfCQaNbb1B$ov) zHvV&3%pU)F&1bCST+fxd|Ca@x$~4#Hm91~ZKCl-UfP!(b5nK-x1EoM6Pyv(!jGbKL z{}s?nDGUp&``T$qp(&}~PP{wv>*p4@_>#neyIF=zQ2GJJ2cJFn@(W*$B2AqKpiTj# z6ov(s7MB+3o5$Il!S29aTX%X~-ofCI&)e^I4f_K@pLb-~?GFz5y(2!CI~eeL2X?xB z0iQaZRQj|~V$v0ghJAg3Ax)joLNR+-7b4ajh=*n(VKo*^XzG1RIH?DM8cXQGgsx6& zVI>&Q)#!|(1&nNzOiYIHAZ;Rm66S+Al4M5?8_5wzO1>;$_Wwg)_8%Ta|G!l0(mS&M z=gS-a{d3sE>|ztQXJVGlgk-M)kj3deJ+=>qB5|baMX{CTdZ9G$WzkB}Y#s6M(UVFH zd%p8&yT{8t;9u9Hv8ZUux^}72D29lL8rSW8N?g$*VbMta*wk!Tu^S_e-4zY#x`MHV z^{>$RCll?yo?L{#8si4b`EL}wk1`F#WF^LHu|BZ-hRIzLfn9i1EO(bP3KN zjBh`54PC*Q%JuyRYAFR`f&KP2OWBL>gy_#FZu{bo$KK!H_h#|QZ_YFweSI2vj)6#g z$`c<~g(Dt{;rz|$?vqMrOwnZjFAyhQMl*QUcsr1*|F7)(>1ize4VYs9&KfTm2RKCM f8Uy5z4FeT`a6KnQT0mMrT0mMrT0mN0ZCT(?4)y^0 literal 0 HcmV?d00001 diff --git a/SOLVER/RouteGraphCalcRG/obj/Release/ResolveAssemblyReference.cache b/SOLVER/RouteGraphCalcRG/obj/Release/ResolveAssemblyReference.cache new file mode 100644 index 0000000000000000000000000000000000000000..5d0a7fd895dcb2ae832068b24710f438adc9d030 GIT binary patch literal 11470 zcmeHMS$ES$6!tiZV~G?KC@tNg(3K!3Y3V}C=?Nx*K%4|Scr6pKo7O6ZpE zK=;yp-%d{pFLZzG^4R4E^sSG5=znPMHpko&M&4TZ^ZGkz-j5Bq} zbh*0>N;6K8kGRgXRpf3GKjf_=Tp^3R#BS5Ba4!~XX^FMAE=fl9HBi&FE@I3B^Ys6{ z>$ba&V^rD_lBxpHN@5vu_#_e}uGaN2`p@3tZ1R6`$+d@{T>tUC|^-O*$8DlAk=(lk-Ij_3S#y*rw-k4^5WA8ex`3 z8C6)>j@$(#TJhWZ1=+B^zs3Y8YA5A>)+t&gix=C`(bTv-Gh|Nj_98#T%SB!;Slny( z3a0OK7j3a9rk${6bGyHb7`<|Kbqk4*TsMDxaIU8N7bbS z)D*-r5)8J(;Lp16SjWGn@(vU&hgd;^VOmiB=e^IKFj0OXidI5gM1o<)Q2yy#mu(nB z`Nb$&1#t<9R&;mHHZC0`VGKtkBvJpFC z5d+5(ih+wwd+q~YL(SEzA=W~yBhdjyATf|YjQ$$RB(5bfD389nITtZ_@M|%%ejPPe zuZOsSLw$|{#K1xP#SFZYnyVWibP^rdLP!cYy#V*IQ(FzV z9L=Z)ywqG)#J+YT2#y2glA{_3D_cyDCygNLEHw}fdhH3vwfxDcRbklgxEZJHyN5p%K$^SJrfhVB=fkmTmbn38UXOC%lwUG}oTBwZ&MANNw?Wa%r%wgHdd( zhpBSOny9!YqHArVlN+sNXF`KLzgBDKdz5*m-Fdd-3C16qfrt)d=O(5no=DT`C2Rgl zQ@aR0N}ohGi9Q@UHl@?)?56Zk@9u%jaMl>f4e#j7jONouZusuezPzz*VAM#9V4SW8 z<8)0Sf}Yw#s+8a9RCRt61t-`xjl+gv#FEM^@%%SZ28C1-)0AH+x2Ty4_W-2)LORc8 z0>e$=WinPB0>TLkc$~%&0O;;HLmk0h#k7Axtq$Wj{~`b5pf+4gDl+*&=GfYYUhW5dK@htpdW6 z3)m+hJh(8tpEAqk!BxGurf#DGVfS{*4F4~7&z;`X0aD7oBU3;mWtPCV0iXgh`x`=a zv%e-VXEwaNuw+QogufSXSU`Aw0Y?Oc#}{_)qD*Lk1Fx^CIVur`<|*_4EUmvh)kt($7PdA}k17_EJV;2oM6^BcNV``v6n$9Y}EnJN^vUiqk;C$eITn zm%gkrzQog%YUKE|g;OTlCMh8Z<9LW5goBlWebi_{DBcW06vBfbG)4=Yobn2eYg^-* zx}PBSgQng~l6@qxm3=4yjeS6Pr|(FReuNt*_y%>i2AM3pw0dazCz8=B72>|qIL>>-&l4~8g%NAo6S8kjOq(*jG^eb3ZMa}=a`K;j9TmVm}8 zGHHC7G%4KEAjKK(R3gtmLsZb@RRiqCFV##V`Z6FQ!=j< zT&Fcj)4-&8l@>Vq{PS9!Kd*y7mP8pgDFKa5$owgV_=Ee`CVv{3Kkv{2OTp~jI%(bm zX~rdLX@R9+_6fmiF#D8pY@b9W zc8>%!wwF--UU84iD+O;%nxtu9(tH8Z)ZTk*>d883PJuL|5>HrO0vgN7q}dfB4c@CY zNz=fjIZX>3dWZ34oi<;AHd%=&Y)}Fk+bPp#hfJFk-k&Au6aW6m*zQYi{__~ado;u{ zyiS!<3hzw9Rq^g5vMTP%!&Px-9$D3$R~6TwkyUZig%oGF=|Yt=FV9o6^kcYV+;Bu{ z!}BasoE;?@sSS@NVQqLsiPVNuC{mo^6dI`wXAYz|!o*7j9U^~|+h@-H@6yJY|X literal 0 HcmV?d00001 diff --git a/SOLVER/RouteGraphCalcRG/obj/Release/RouteGraphCalcRG.exe b/SOLVER/RouteGraphCalcRG/obj/Release/RouteGraphCalcRG.exe new file mode 100644 index 0000000000000000000000000000000000000000..8c45a5a856e9a1a0456a7b7fbfbbf2cd609fcfc9 GIT binary patch literal 102400 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 literal 0 HcmV?d00001 diff --git a/SOLVER/RouteGraphCalcRG/obj/Release/RouteGraphCalcRG.pdb b/SOLVER/RouteGraphCalcRG/obj/Release/RouteGraphCalcRG.pdb new file mode 100644 index 0000000000000000000000000000000000000000..18cb507ecce1f0745b449eab22fc15a0bb4a29aa GIT binary patch literal 13824 zcmeHNZD?Cn7(Qvces`K}*4nu)laAH4CTVHys9@V=S&3^*O}a59m}N=YUYq2`d$Y|A zf5ZtQ{*e9!&)p7WmfyzhC>iC2kes;-WwZ7zqaqr>J6?6LLPoz8~Z=G_4SDl`7YX54PVJ*g?n zWzXxr>9Xvk9lJdTuzIn$SOH$1!9`L@OW^XMM+RoA z=B?8KG2?rq?DenRdr$uQ^I7ZkK=!%r^mC6{$LFnQ+J(4W?KyMs&E(*>(Gw$|{<-VB zXSBCYQf)}DrY<~~KL5$q&w|m;-#*y&qMTW`UIJ|xheqH|pd6?KHUKq1EwB!#1L}bW zU_Btm|JIMw&HUnWI#7-Ard`k1fu-y}+m~%OTwJ)wv3Y^b@%9HF9@_75`MjY~zwaTpYb+29 z`F;Dw+=0-rXDk#9_(t}-{XxHaI2{|-!l_ADI3Dp22S+t^LJKGC5nYHxe=r$7qD0h0 zD5a@S#3E@u7}8in4^1fPP*7LnM`BvgNJ6dDWCSnKCW0t!zJ%U~+CpOMs5P`Sl2%&+ z=KP;N+FsR*`LC?-0~{SW|5qrqA}Y?AW*6;r&*A_F6O_LOKoY}YuILw5iCUyI8EE&_3h-hYh zbn2-{%x+j4yDJ{n^%(36zh96Sm`rv1)BmkA9574`>$C`)m2Cu!zH%k(3bZ;~ogm|# zHY5F7z7P`{b-Pk@i;9Z5feW)AJ^H=p%k4E~U%dPAK~xc5u^V}K6Dm<2T;FgmR2jTd z{006tK(gS^lojKzQ%0&$C&Ty*aav|0IFQ)_z6pE>_#NO~;E3xo{MKFI0q|ze@0zWL6PKfHq4~=}DkPtT+80{5)3v z9U*rztsM)Es!B2~j&Bg#jePnyi^whj8pXYNY0mrULY;I{rAKsulB5JmRsuHoe9rAc z8cRhtnrj12f@+kbuU=#Ry5#3S$M|SXml5|P4tc&-?3k?+zt=IgumPRGC}0xLmk@)1 z{+KZsF4*?v~L#g{dw_h^# z&WxdQ)eTmLsH?#!V7Yom!E)4D68mU!#$l!wuf}$lxqp`XJU^2qel$yIqXF4_Gq-3s z6`a58ngi$W0N6}6?mZv_aPM{sbx-c#Ea+OKTsfB#9O zIYyM^lqWf^3P&=W!2XLd+>^0zG^QPjs}VW=HzekwEkr}i@#mS09RH#nrkmEV!+7%` zVA_AxaAeop|2FuC!t>v(JCoO9lt3HClk*yT$cEd*-tw})0it{5{vXfg>0TwR9SNAf V7h5|$mOYgckP?s*kP@H-{spi=peq0X literal 0 HcmV?d00001 diff --git a/SOLVER/RouteGraphCalcRG/obj/RouteGraphCalcRG.csproj.FileList.txt b/SOLVER/RouteGraphCalcRG/obj/RouteGraphCalcRG.csproj.FileList.txt new file mode 100644 index 0000000..c0d0340 --- /dev/null +++ b/SOLVER/RouteGraphCalcRG/obj/RouteGraphCalcRG.csproj.FileList.txt @@ -0,0 +1,13 @@ +obj\Debug\ResolveAssemblyReference.cache +bin\Debug\RouteGraphCalcRG.exe +bin\Debug\RouteGraphCalcRG.pdb +bin\Debug\dkxce.Route.Classes.dll +bin\Debug\dkxce.Route.GSolver.dll +bin\Debug\dkxce.Route.Shp2Rt.dll +bin\Debug\dkxce.Route.GSolver.pdb +bin\Debug\dkxce.Route.Shp2Rt.pdb +bin\Debug\dkxce.Route.Classes.pdb +obj\Debug\RouteGraphCalcRG.exe +obj\Debug\RouteGraphCalcRG.pdb +..\ReadyBatch\RouteGraphCalcRG.exe +..\ReadyBatch\RouteGraphCalcRG.pdb diff --git a/SOLVER/RouteGraphCalcRG/obj/RouteGraphCalcRG.csproj.FileListAbsolute.txt b/SOLVER/RouteGraphCalcRG/obj/RouteGraphCalcRG.csproj.FileListAbsolute.txt new file mode 100644 index 0000000..f4f70bd --- /dev/null +++ b/SOLVER/RouteGraphCalcRG/obj/RouteGraphCalcRG.csproj.FileListAbsolute.txt @@ -0,0 +1,27 @@ +D:\Projects\projects.cs.III\_GRAPH_SOLUTION\ReadyBatch\RouteGraphCalcRG.exe +D:\Projects\projects.cs.III\_GRAPH_SOLUTION\ReadyBatch\RouteGraphCalcRG.pdb +D:\Projects\projects.cs.III\_GRAPH_SOLUTION\RouteGraphCalcRG\obj\Debug\ResolveAssemblyReference.cache +D:\Projects\projects.cs.III\_GRAPH_SOLUTION\RouteGraphCalcRG\obj\Debug\RouteGraphCalcRG.exe +D:\Projects\projects.cs.III\_GRAPH_SOLUTION\RouteGraphCalcRG\obj\Debug\RouteGraphCalcRG.pdb +C:\PROJECTS\CSharp_Navicom\ADDR_SEARCH\_GRAPH_SOLUTION\ReadyBatch\RouteGraphCalcRG.exe +C:\PROJECTS\CSharp_Navicom\ADDR_SEARCH\_GRAPH_SOLUTION\ReadyBatch\RouteGraphCalcRG.pdb +C:\PROJECTS\CSharp_Navicom\ADDR_SEARCH\_GRAPH_SOLUTION\RouteGraphCalcRG\obj\Debug\ResolveAssemblyReference.cache +C:\PROJECTS\CSharp_Navicom\ADDR_SEARCH\_GRAPH_SOLUTION\RouteGraphCalcRG\obj\Debug\RouteGraphCalcRG.exe +C:\PROJECTS\CSharp_Navicom\ADDR_SEARCH\_GRAPH_SOLUTION\RouteGraphCalcRG\obj\Debug\RouteGraphCalcRG.pdb +C:\PROJECTS\CSharp_Navicom\ADDR_SEARCH\[READY]\ROUTES\MapCreator\RouteGraphCalcRG.exe +C:\PROJECTS\CSharp_Navicom\ADDR_SEARCH\[READY]\ROUTES\MapCreator\RouteGraphCalcRG.pdb +M:\NAVICOM_PROJECTS\_ROUTES_GIT_\SOLVER\READY\MapCreator\RouteGraphCalcRG.exe +M:\NAVICOM_PROJECTS\_ROUTES_GIT_\SOLVER\READY\MapCreator\RouteGraphCalcRG.pdb +M:\NAVICOM_PROJECTS\_ROUTES_GIT_\SOLVER\RouteGraphCalcRG\obj\Debug\ResolveAssemblyReference.cache +M:\NAVICOM_PROJECTS\_ROUTES_GIT_\SOLVER\RouteGraphCalcRG\obj\Debug\RouteGraphCalcRG.exe +M:\NAVICOM_PROJECTS\_ROUTES_GIT_\SOLVER\RouteGraphCalcRG\obj\Debug\RouteGraphCalcRG.pdb +M:\NAVICOM_PROJECTS\_ROUTES_GIT_\READY\MapCreator\RouteGraphCalcRG.exe +M:\NAVICOM_PROJECTS\_ROUTES_GIT_\READY\MapCreator\RouteGraphCalcRG.pdb +M:\NAVICOM_PROJECTS\_ROUTES_GIT_\SOLVER\RouteGraphCalcRG\obj\Release\ResolveAssemblyReference.cache +M:\NAVICOM_PROJECTS\_ROUTES_GIT_\SOLVER\RouteGraphCalcRG\obj\Release\RouteGraphCalcRG.exe +M:\NAVICOM_PROJECTS\_ROUTES_GIT_\SOLVER\RouteGraphCalcRG\obj\Release\RouteGraphCalcRG.pdb +M:\NAVICOM_PROJECTS\_ROUTES_PSOURCE_\READY\MapCreator\RouteGraphCalcRG.exe +M:\NAVICOM_PROJECTS\_ROUTES_PSOURCE_\READY\MapCreator\RouteGraphCalcRG.pdb +M:\NAVICOM_PROJECTS\_ROUTES_PSOURCE_\SOLVER\RouteGraphCalcRG\obj\Debug\ResolveAssemblyReference.cache +M:\NAVICOM_PROJECTS\_ROUTES_PSOURCE_\SOLVER\RouteGraphCalcRG\obj\Debug\RouteGraphCalcRG.exe +M:\NAVICOM_PROJECTS\_ROUTES_PSOURCE_\SOLVER\RouteGraphCalcRG\obj\Debug\RouteGraphCalcRG.pdb diff --git a/SOLVER/RouteGraphCreator/Program.cs b/SOLVER/RouteGraphCreator/Program.cs new file mode 100644 index 0000000..547e890 --- /dev/null +++ b/SOLVER/RouteGraphCreator/Program.cs @@ -0,0 +1,44 @@ +using System; +using System.IO; +using System.Xml; +using System.Collections.Generic; + +using dkxce.Route.Classes; +using dkxce.Route.Shp2Rt; + +namespace RouteGraphCreator +{ + class Program + { + static void Main(string[] args) + { + if ((args == null) || (args.Length < 3)) + { + Console.WriteLine("Ìîäóëü ñîçäàíèÿ ãðàôà èç shape ôàéëà äîðîã"); + Console.WriteLine("User syntax: RouteGraphCreator.exe %region_id% %shape_filename% %route_filename%"); + Console.WriteLine("User syntax: RouteGraphCreator.exe %region_id% %shape_filename% %route_filename% attr"); + Console.WriteLine("Example: RouteGraphCreator.exe 11 DATA\\Roads_Lipetsk.shp DATA\\READY\\lipetsk.rt"); + Console.WriteLine("Example: RouteGraphCreator.exe 11 DATA\\Roads_Lipetsk.shp DATA\\READY\\lipetsk.rt attr"); + System.Threading.Thread.Sleep(5000); + return; + }; + + string shpf = args[1]; + ShpToGraphConverter con = new ShpToGraphConverter(shpf); + con.RegionID = Convert.ToInt32(args[0]); + con.WriteLinesNamesFile = true; + string rName = null; + if (args.Length > 3) + { + for (int i = 3; i < args.Length; i++) + { + if (args[i] == "attr") + con.analyse_attributes_do = true; + if (args[i].StartsWith("/regName=")) + rName = args[i].Substring(9).Trim(); + }; + }; + con.ConvertTo(args[2], rName); + } + } +} diff --git a/SOLVER/RouteGraphCreator/Properties/AssemblyInfo.cs b/SOLVER/RouteGraphCreator/Properties/AssemblyInfo.cs new file mode 100644 index 0000000..d3fb3d6 --- /dev/null +++ b/SOLVER/RouteGraphCreator/Properties/AssemblyInfo.cs @@ -0,0 +1,33 @@ +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +[assembly: AssemblyTitle("Route Graph Creator")] +[assembly: AssemblyDescription("Модуль пожготовки графа из Shape-файла(ов)")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("Milok Zbrozek ")] +[assembly: AssemblyProduct("RouteGraphCreator")] +[assembly: AssemblyCopyright("Copyright © Milok Zbrozek 2021")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// Setting ComVisible to false makes the types in this assembly not visible +// to COM components. If you need to access a type in this assembly from +// COM, set the ComVisible attribute to true on that type. +[assembly: ComVisible(false)] + +// The following GUID is for the ID of the typelib if this project is exposed to COM +[assembly: Guid("23c14216-7a29-47a6-8d3e-6449c8937572")] + +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +[assembly: AssemblyVersion("21.12.21.3")] +[assembly: AssemblyFileVersion("21.12.21.3")] diff --git a/SOLVER/RouteGraphCreator/RouteGraphCreator.csproj b/SOLVER/RouteGraphCreator/RouteGraphCreator.csproj new file mode 100644 index 0000000..26e2391 --- /dev/null +++ b/SOLVER/RouteGraphCreator/RouteGraphCreator.csproj @@ -0,0 +1,61 @@ + + + Debug + AnyCPU + 8.0.50727 + 2.0 + {937C1718-7B0B-48A6-8200-DAA7486D90B8} + Exe + Properties + RouteGraphCreator + RouteGraphCreator + console.ico + + + true + full + false + ..\..\READY\MapCreator\ + TRACE;DEBUG + prompt + 4 + true + + + pdbonly + true + ..\..\READY\MapCreator\ + TRACE + prompt + 4 + true + + + + False + ..\..\READY\MAIN_DLLs\dkxce.Route.Classes.dll + + + False + ..\..\READY\MAIN_DLLs\dkxce.Route.Shp2Rt.dll + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/SOLVER/RouteGraphCreator/RouteGraphCreator.csproj.user b/SOLVER/RouteGraphCreator/RouteGraphCreator.csproj.user new file mode 100644 index 0000000..80ef43f --- /dev/null +++ b/SOLVER/RouteGraphCreator/RouteGraphCreator.csproj.user @@ -0,0 +1,8 @@ + + + 999 "M:\NAVICOM_PROJECTS\_ROUTES_PSOURCE_\READY\_SHAPES_\WATER\X3[L0001].shp" "M:\NAVICOM_PROJECTS\_ROUTES_PSOURCE_\READY\MapCreator\..\GRAPHS\999.rt" + + + 710 "M:\NAVICOM_PROJECTS\_ROUTES_GIT_\READY\_SHAPES_\LIPETSK_OSM2SHP\LIPETSK[L0001].shp" "M:\NAVICOM_PROJECTS\_ROUTES_GIT_\READY\MapCreator\..\GRAPHS\710.rt" attr + + \ No newline at end of file diff --git a/SOLVER/RouteGraphCreator/console.ico b/SOLVER/RouteGraphCreator/console.ico new file mode 100644 index 0000000000000000000000000000000000000000..fa2c978e7da61d4750e460e275f86773f61aee26 GIT binary patch literal 86358 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 literal 0 HcmV?d00001 diff --git a/SOLVER/RouteGraphCreator/obj/Debug/RouteGraphCreator.exe b/SOLVER/RouteGraphCreator/obj/Debug/RouteGraphCreator.exe new file mode 100644 index 0000000000000000000000000000000000000000..922d260a2408658c32f6d1d436b9127ff7024d3b GIT binary patch literal 102400 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 literal 0 HcmV?d00001 diff --git a/SOLVER/RouteGraphCreator/obj/Debug/RouteGraphCreator.pdb b/SOLVER/RouteGraphCreator/obj/Debug/RouteGraphCreator.pdb new file mode 100644 index 0000000000000000000000000000000000000000..315d3316f0a29d0222e6538c8f1095fd4ef3e9d1 GIT binary patch literal 13824 zcmeHNZERCj7(U&G?1N1^agL$0gH1jLZHEKLf&nR&3^qDehQm}#>F!ve>uv5WFbpOa zeh`010uv?tFwvO!5il`<7*t5mm_Tc9B^K3GUF}M_d>&tIt*a&Ykn4W8*IQgzu_7oSIp(jJj^HlFA$O)p z{v8J%c>cHZ!%`-$2g)7g6SwlR=EFs2>KqN6$8NI#nj(gW^T4?V{zw_u9vIxTc4`0Q zv(EiNaXRo~&I|APS0BFc?I+ItOVjb9=k`A0>^kc_HCKqi{H9YIUrH?dxN}eQ8$T{T zw_AJpFuM)q8}Enj@0o8zSykqd)_Fq18powot9C(^}Y-Z-w0Q(2aUhjK&W(UI5uL7u3 z04dqwfuVt+0k+LSn$yx4TJzxgCSRZ>+}ajc<@c=%hQe)u_I3VXxHTAPZ}a)Xp2XJOA$l4^iOBX?RP6~THFb*;P3fVq#w>a` zsjJ(xs1gq8YJ9t*h0J8+Om;`Dl90tNiE|124TW~H|8UNcGBzHt$A90F_>m5b{~PtK zJ??F$RdW1~P22nzrEq+?#atfG#4Bt>Nah{@NnGB|u_sz0u>`_pBG<`$Nhs}SnYB<< zJKKXh^_0?sGvAf4yD7jk;MI6XPh3=H#C>W!ju|4RCUo~oC821ssHmX6b8Bx@aho%Z z+ZT`Mx`L^N?;oKHb|)9KrBJ5JvX%ez?I-V;CsOPz1V+A zBK`$<7Whjr%lpdW^I(>H5sZC@@jZAB_*XElEsO&6%wn++G2Ta%zz1uA9l$Q27kC0# z2$VxV6Y!hQ7mIn|Did~I^b-d0Y$<$IYlf$ZMuZnz;Rj6J0+d%J*z3~oEXK36<7dRV zM|MyFVb}%K12;psm#--BTxMUJl4JVSw2j`fZTzQpxkf2qtllxoE2L@+Jixm=DdW!r zm7>I66S2%-=U*H4CsNwZaH|?iq{QQ;qQ=y7J#ttZfHE;BBh9;r%d59;{P_ko;`A&< zdSKjoz=buRWBYny?+rKz^6?zk>It@9kNfe@Hr`QCXP)~Dgm|)0%<3-^KNNMMtzE!8 zpaZalXNhTMZWSI~i+Z|ZaYgrx z>8&5%MsGF(6mB_~RtQW2D70b*Kntb(9S`9Ak5li}_TOQ4;6JzjZ0Mgt2gv*e#Qwm% zY!TiwuwSrc*b?khMF7tX^7}uWki~M)UFVp5^qmOX^TNe9bD!Cmx8l&iu~mC3Ki{$) zX`bd-Vrx^POBJ33ZoTyMaPL+kor)&Me-=0FUo?&XkFx}@=l|=C|B+)qy@aK|0do$( no#8d}0B7jY<^VZk!$Daf+|Nmo9*`c89*`c89*`cGSRVKT@3<>1 literal 0 HcmV?d00001 diff --git a/SOLVER/RouteGraphCreator/obj/Release/ResolveAssemblyReference.cache b/SOLVER/RouteGraphCreator/obj/Release/ResolveAssemblyReference.cache new file mode 100644 index 0000000000000000000000000000000000000000..b1d640f1977e377125e0e424b6d1be2e6115a6db GIT binary patch literal 8412 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 literal 0 HcmV?d00001 diff --git a/SOLVER/RouteGraphCreator/obj/Release/RouteGraphCreator.pdb b/SOLVER/RouteGraphCreator/obj/Release/RouteGraphCreator.pdb new file mode 100644 index 0000000000000000000000000000000000000000..c736020a5873d95004687844942264209d2fab32 GIT binary patch literal 13824 zcmeHNU2Icj82&njZ0iPe;v7S7*&84GcAog<(ie{7Te4yMt4E%43|w@aTPMV|iq3O=Z>6_>-hbHt!If=a zj%X)OaN1CQ@O<{ku_aG$dMO$hIri6J=yoivHE2g2Fb}u`s0Av4Dqucf2daS@U?JcD z*#1Sp0-zM7n8u%T?%(D>1qPRUnw$gI&+?h}f9f%R|7Vz`rt|eR$B}PsG$zWLQ(5QDPZA z9MM=rj|?U+- zvC^?8cu3DEDcDz2&#uk@?X7>pds9iVJTL53lS%9n2{o;|I+V1cC1Rq1>HR|oV~We% zZCu`DRM!=3FMR*Bv|xOAeNP5uoMu1J7L%D*j}H%I%QziuV}4ppO`BzM=hsvjZC5nK zGm8Ce1^ZFR3ufP0M;+e7y(qt~1j1!d6|r8Fmw&qD*Rl7W{JQh(s>-r6r{3>Fvgi`+ zNP``Mg47>vPrjQ9X1U+N8~Fl=4S$wy>k)3w#lu!LXw#yx#+_i;xW>I;JR7UQOTaDQ zyTFftVGkQVFnsm~&)){{4lw-r#%}OE;0PFX7*y19a2$LenEhP=9tK|?pD;9VBf=x# zmEckED)1}d2f!!6%zrA!?}D+P7-zt69~d>F4ej0y8~~mN4gxO#jIW1X-U#@BHlP_; zVFLO_4eV2sSSmJyH-R66F58g9gFH>J^Q*)k$WsB>m>I%nC%`e3GP4GFmv5+aU*%k^ z#$?3!nfhzX@yw;>7VDfPyERs`WRXb)paJ^Lq!gb9mWzcrO3XEnV+c3@rid?{(GEqr z)kHcYo~sqB%ygbtw%i4vPOQy~^K9@?T8d9M=n;<)DN+MPs{tp@e6H>361P>CTXzF4 zf(qp0SzTi1b%DIxnL!OP>T74T}ygc}!>uRowDVxYDPcFk> zjhVqV^^JnI6Xz_2eYBW%l{JfRjk`+-%ZHY00$-ICzBntbW+SrCR%$^oC-`DC`~sN& z4}eW%!`=Z5fWF)L0PS5|5MXCz4@K@7`;uyGNVs(^<{n5S72SQyJb!!>wFzs~6kazN zcR#QIu)gTxamL+?@lyVa2DlLEU$DksHz)D+jd=0W_ou&Vtl#mG|Mbqc+YdL;-{bZt(nFo;0aduu z@QUf# + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.components = new System.ComponentModel.Container(); + System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle1 = new System.Windows.Forms.DataGridViewCellStyle(); + System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle2 = new System.Windows.Forms.DataGridViewCellStyle(); + System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle3 = new System.Windows.Forms.DataGridViewCellStyle(); + System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle4 = new System.Windows.Forms.DataGridViewCellStyle(); + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(RMSVForm)); + this.dataGridView2 = new System.Windows.Forms.DataGridView(); + this.Column13 = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.Column14 = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.Column15 = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.Column16 = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.Column17 = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.dataGridView3 = new System.Windows.Forms.DataGridView(); + this.Column11 = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.Column12 = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.Column18 = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.Column19 = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.timer1 = new System.Windows.Forms.Timer(this.components); + this.panel2 = new System.Windows.Forms.Panel(); + this.l23 = new System.Windows.Forms.Label(); + this.label18 = new System.Windows.Forms.Label(); + this.lut = new System.Windows.Forms.Label(); + this.label10 = new System.Windows.Forms.Label(); + this.label8 = new System.Windows.Forms.Label(); + this.numericUpDown1 = new System.Windows.Forms.NumericUpDown(); + this.label1 = new System.Windows.Forms.Label(); + this.sysidbox = new System.Windows.Forms.TextBox(); + this.panel3 = new System.Windows.Forms.Panel(); + this.btnU = new System.Windows.Forms.Button(); + this.label19 = new System.Windows.Forms.Label(); + this.btnI = new System.Windows.Forms.Button(); + this.panelRun = new System.Windows.Forms.Panel(); + this.startS = new System.Windows.Forms.Button(); + this.startC = new System.Windows.Forms.Button(); + this.cfgs = new System.Windows.Forms.ComboBox(); + this.label16 = new System.Windows.Forms.Label(); + this.dataGridView1 = new System.Windows.Forms.DataGridView(); + this.ServiceName = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.Column1 = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.Column2 = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.Column3 = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.Column4 = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.Threads = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.Column5 = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.Column6 = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.Column7 = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.Column10 = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.Column8 = new System.Windows.Forms.DataGridViewButtonColumn(); + this.Column9 = new System.Windows.Forms.DataGridViewButtonColumn(); + this.panel1 = new System.Windows.Forms.Panel(); + this.ttNow = new System.Windows.Forms.Label(); + this.label20 = new System.Windows.Forms.Label(); + this.cfnm = new System.Windows.Forms.Label(); + this.label22 = new System.Windows.Forms.Label(); + this.ttRun = new System.Windows.Forms.Label(); + this.label17 = new System.Windows.Forms.Label(); + this.ttST = new System.Windows.Forms.Label(); + this.label21 = new System.Windows.Forms.Label(); + this.lHTTP = new System.Windows.Forms.Label(); + this.lHA = new System.Windows.Forms.Label(); + this.lHD = new System.Windows.Forms.Label(); + this.lTCP = new System.Windows.Forms.Label(); + this.label15 = new System.Windows.Forms.Label(); + this.label14 = new System.Windows.Forms.Label(); + this.label13 = new System.Windows.Forms.Label(); + this.label12 = new System.Windows.Forms.Label(); + this.label11 = new System.Windows.Forms.Label(); + this.label9 = new System.Windows.Forms.Label(); + this.label5 = new System.Windows.Forms.Label(); + this.lMWT = new System.Windows.Forms.Label(); + this.lMST = new System.Windows.Forms.Label(); + this.lTRC = new System.Windows.Forms.Label(); + this.lGRC = new System.Windows.Forms.Label(); + this.lMode = new System.Windows.Forms.Label(); + this.lArea = new System.Windows.Forms.Label(); + this.lDPool = new System.Windows.Forms.Label(); + this.lProtocol = new System.Windows.Forms.Label(); + this.label7 = new System.Windows.Forms.Label(); + this.label6 = new System.Windows.Forms.Label(); + this.label4 = new System.Windows.Forms.Label(); + this.label3 = new System.Windows.Forms.Label(); + this.label2 = new System.Windows.Forms.Label(); + this.eBtn = new System.Windows.Forms.Button(); + ((System.ComponentModel.ISupportInitialize)(this.dataGridView2)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.dataGridView3)).BeginInit(); + this.panel2.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.numericUpDown1)).BeginInit(); + this.panel3.SuspendLayout(); + this.panelRun.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.dataGridView1)).BeginInit(); + this.panel1.SuspendLayout(); + this.SuspendLayout(); + // + // dataGridView2 + // + this.dataGridView2.AllowUserToAddRows = false; + this.dataGridView2.AllowUserToDeleteRows = false; + this.dataGridView2.BackgroundColor = System.Drawing.SystemColors.Window; + this.dataGridView2.ColumnHeadersBorderStyle = System.Windows.Forms.DataGridViewHeaderBorderStyle.Single; + this.dataGridView2.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize; + this.dataGridView2.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[] { + this.Column13, + this.Column14, + this.Column15, + this.Column16, + this.Column17}); + this.dataGridView2.Dock = System.Windows.Forms.DockStyle.Left; + this.dataGridView2.Location = new System.Drawing.Point(0, 190); + this.dataGridView2.Name = "dataGridView2"; + this.dataGridView2.ReadOnly = true; + this.dataGridView2.RowHeadersBorderStyle = System.Windows.Forms.DataGridViewHeaderBorderStyle.Single; + this.dataGridView2.ScrollBars = System.Windows.Forms.ScrollBars.Horizontal; + this.dataGridView2.SelectionMode = System.Windows.Forms.DataGridViewSelectionMode.CellSelect; + this.dataGridView2.ShowCellErrors = false; + this.dataGridView2.ShowEditingIcon = false; + this.dataGridView2.ShowRowErrors = false; + this.dataGridView2.Size = new System.Drawing.Size(461, 275); + this.dataGridView2.TabIndex = 48; + // + // Column13 + // + this.Column13.HeaderText = "ObjectsUsed"; + this.Column13.Name = "Column13"; + this.Column13.ReadOnly = true; + this.Column13.Width = 70; + // + // Column14 + // + this.Column14.HeaderText = "ObjectsIdle"; + this.Column14.Name = "Column14"; + this.Column14.ReadOnly = true; + this.Column14.Width = 70; + // + // Column15 + // + this.Column15.HeaderText = "ThreadsAlive"; + this.Column15.Name = "Column15"; + this.Column15.ReadOnly = true; + this.Column15.Width = 72; + // + // Column16 + // + this.Column16.HeaderText = "ThreadsCounted"; + this.Column16.Name = "Column16"; + this.Column16.ReadOnly = true; + this.Column16.Width = 90; + // + // Column17 + // + this.Column17.HeaderText = "ThreadsMaxAlive"; + this.Column17.Name = "Column17"; + this.Column17.ReadOnly = true; + this.Column17.Width = 92; + // + // dataGridView3 + // + this.dataGridView3.AllowUserToAddRows = false; + this.dataGridView3.AllowUserToDeleteRows = false; + this.dataGridView3.BackgroundColor = System.Drawing.SystemColors.Window; + this.dataGridView3.ColumnHeadersBorderStyle = System.Windows.Forms.DataGridViewHeaderBorderStyle.Single; + this.dataGridView3.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize; + this.dataGridView3.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[] { + this.Column11, + this.Column12, + this.Column18, + this.Column19}); + this.dataGridView3.Dock = System.Windows.Forms.DockStyle.Fill; + this.dataGridView3.Location = new System.Drawing.Point(461, 190); + this.dataGridView3.Name = "dataGridView3"; + this.dataGridView3.ReadOnly = true; + this.dataGridView3.RowHeadersBorderStyle = System.Windows.Forms.DataGridViewHeaderBorderStyle.Single; + this.dataGridView3.ScrollBars = System.Windows.Forms.ScrollBars.Vertical; + this.dataGridView3.SelectionMode = System.Windows.Forms.DataGridViewSelectionMode.CellSelect; + this.dataGridView3.ShowCellErrors = false; + this.dataGridView3.ShowEditingIcon = false; + this.dataGridView3.ShowRowErrors = false; + this.dataGridView3.Size = new System.Drawing.Size(478, 275); + this.dataGridView3.TabIndex = 66; + // + // Column11 + // + this.Column11.Frozen = true; + this.Column11.HeaderText = "ObjectID"; + this.Column11.Name = "Column11"; + this.Column11.ReadOnly = true; + this.Column11.Width = 50; + // + // Column12 + // + this.Column12.HeaderText = "GlobalRegions"; + this.Column12.Name = "Column12"; + this.Column12.ReadOnly = true; + this.Column12.Width = 80; + // + // Column18 + // + this.Column18.HeaderText = "ThreadRegions"; + this.Column18.Name = "Column18"; + this.Column18.ReadOnly = true; + this.Column18.Width = 82; + // + // Column19 + // + this.Column19.HeaderText = "SessionRegions"; + this.Column19.Name = "Column19"; + this.Column19.ReadOnly = true; + this.Column19.Width = 200; + // + // timer1 + // + this.timer1.Interval = 2000; + this.timer1.Tick += new System.EventHandler(this.timer1_Tick); + // + // panel2 + // + this.panel2.Controls.Add(this.l23); + this.panel2.Controls.Add(this.label18); + this.panel2.Controls.Add(this.lut); + this.panel2.Controls.Add(this.label10); + this.panel2.Controls.Add(this.label8); + this.panel2.Controls.Add(this.numericUpDown1); + this.panel2.Controls.Add(this.label1); + this.panel2.Controls.Add(this.sysidbox); + this.panel2.Dock = System.Windows.Forms.DockStyle.Bottom; + this.panel2.Location = new System.Drawing.Point(0, 465); + this.panel2.Name = "panel2"; + this.panel2.Size = new System.Drawing.Size(939, 44); + this.panel2.TabIndex = 67; + // + // l23 + // + this.l23.Location = new System.Drawing.Point(775, 27); + this.l23.Name = "l23"; + this.l23.Size = new System.Drawing.Size(162, 13); + this.l23.TabIndex = 101; + this.l23.Text = "Logical Processors: ?"; + this.l23.TextAlign = System.Drawing.ContentAlignment.TopRight; + // + // label18 + // + this.label18.AutoSize = true; + this.label18.Location = new System.Drawing.Point(9, 27); + this.label18.Name = "label18"; + this.label18.Size = new System.Drawing.Size(65, 13); + this.label18.TabIndex = 99; + this.label18.Text = "Machine ID:"; + // + // lut + // + this.lut.AutoSize = true; + this.lut.Location = new System.Drawing.Point(286, 6); + this.lut.Name = "lut"; + this.lut.Size = new System.Drawing.Size(36, 13); + this.lut.TabIndex = 4; + this.lut.Text = "Never"; + // + // label10 + // + this.label10.AutoSize = true; + this.label10.Location = new System.Drawing.Point(200, 6); + this.label10.Name = "label10"; + this.label10.Size = new System.Drawing.Size(83, 13); + this.label10.TabIndex = 3; + this.label10.Text = "| Last update:"; + // + // label8 + // + this.label8.AutoSize = true; + this.label8.Location = new System.Drawing.Point(166, 6); + this.label8.Name = "label8"; + this.label8.Size = new System.Drawing.Size(24, 13); + this.label8.TabIndex = 2; + this.label8.Text = "sec"; + // + // numericUpDown1 + // + this.numericUpDown1.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + this.numericUpDown1.Location = new System.Drawing.Point(98, 3); + this.numericUpDown1.Maximum = new decimal(new int[] { + 240, + 0, + 0, + 0}); + this.numericUpDown1.Minimum = new decimal(new int[] { + 5, + 0, + 0, + 0}); + this.numericUpDown1.Name = "numericUpDown1"; + this.numericUpDown1.Size = new System.Drawing.Size(62, 20); + this.numericUpDown1.TabIndex = 1; + this.numericUpDown1.Value = new decimal(new int[] { + 5, + 0, + 0, + 0}); + this.numericUpDown1.ValueChanged += new System.EventHandler(this.numericUpDown1_ValueChanged); + // + // label1 + // + this.label1.AutoSize = true; + this.label1.Location = new System.Drawing.Point(9, 6); + this.label1.Name = "label1"; + this.label1.Size = new System.Drawing.Size(83, 13); + this.label1.TabIndex = 0; + this.label1.Text = "Update Interval:"; + // + // sysidbox + // + this.sysidbox.BackColor = System.Drawing.SystemColors.Control; + this.sysidbox.BorderStyle = System.Windows.Forms.BorderStyle.None; + this.sysidbox.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(204))); + this.sysidbox.Location = new System.Drawing.Point(97, 27); + this.sysidbox.Name = "sysidbox"; + this.sysidbox.ReadOnly = true; + this.sysidbox.Size = new System.Drawing.Size(362, 13); + this.sysidbox.TabIndex = 100; + this.sysidbox.Text = "...detecting..."; + // + // panel3 + // + this.panel3.Controls.Add(this.btnU); + this.panel3.Controls.Add(this.label19); + this.panel3.Controls.Add(this.btnI); + this.panel3.Controls.Add(this.panelRun); + this.panel3.Controls.Add(this.dataGridView1); + this.panel3.Dock = System.Windows.Forms.DockStyle.Top; + this.panel3.Location = new System.Drawing.Point(0, 0); + this.panel3.Name = "panel3"; + this.panel3.Size = new System.Drawing.Size(939, 70); + this.panel3.TabIndex = 68; + // + // btnU + // + this.btnU.FlatStyle = System.Windows.Forms.FlatStyle.Popup; + this.btnU.Location = new System.Drawing.Point(151, 47); + this.btnU.Name = "btnU"; + this.btnU.Size = new System.Drawing.Size(75, 21); + this.btnU.TabIndex = 54; + this.btnU.Text = "Uninstall"; + this.btnU.UseVisualStyleBackColor = true; + this.btnU.Click += new System.EventHandler(this.btnU_Click); + // + // label19 + // + this.label19.AutoSize = true; + this.label19.Location = new System.Drawing.Point(3, 51); + this.label19.Name = "label19"; + this.label19.Size = new System.Drawing.Size(68, 13); + this.label19.TabIndex = 53; + this.label19.Text = "Win Service:"; + // + // btnI + // + this.btnI.FlatStyle = System.Windows.Forms.FlatStyle.Popup; + this.btnI.Location = new System.Drawing.Point(73, 47); + this.btnI.Name = "btnI"; + this.btnI.Size = new System.Drawing.Size(75, 21); + this.btnI.TabIndex = 52; + this.btnI.Text = "Install"; + this.btnI.UseVisualStyleBackColor = true; + this.btnI.Click += new System.EventHandler(this.btnI_Click); + // + // panelRun + // + this.panelRun.Controls.Add(this.eBtn); + this.panelRun.Controls.Add(this.startS); + this.panelRun.Controls.Add(this.startC); + this.panelRun.Controls.Add(this.cfgs); + this.panelRun.Controls.Add(this.label16); + this.panelRun.Dock = System.Windows.Forms.DockStyle.Right; + this.panelRun.Location = new System.Drawing.Point(232, 44); + this.panelRun.Name = "panelRun"; + this.panelRun.Size = new System.Drawing.Size(707, 26); + this.panelRun.TabIndex = 46; + // + // startS + // + this.startS.FlatStyle = System.Windows.Forms.FlatStyle.Popup; + this.startS.Location = new System.Drawing.Point(613, 3); + this.startS.Name = "startS"; + this.startS.Size = new System.Drawing.Size(93, 21); + this.startS.TabIndex = 52; + this.startS.Text = "Start as Service"; + this.startS.UseVisualStyleBackColor = true; + this.startS.Click += new System.EventHandler(this.startS_Click); + // + // startC + // + this.startC.FlatStyle = System.Windows.Forms.FlatStyle.Popup; + this.startC.Location = new System.Drawing.Point(516, 3); + this.startC.Name = "startC"; + this.startC.Size = new System.Drawing.Size(95, 21); + this.startC.TabIndex = 51; + this.startC.Text = "Start as Console"; + this.startC.UseVisualStyleBackColor = true; + this.startC.Click += new System.EventHandler(this.startC_Click); + // + // cfgs + // + this.cfgs.DrawMode = System.Windows.Forms.DrawMode.OwnerDrawFixed; + this.cfgs.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.cfgs.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.cfgs.FormattingEnabled = true; + this.cfgs.Location = new System.Drawing.Point(106, 3); + this.cfgs.Name = "cfgs"; + this.cfgs.Size = new System.Drawing.Size(387, 21); + this.cfgs.TabIndex = 50; + this.cfgs.DrawItem += new System.Windows.Forms.DrawItemEventHandler(this.cfgs_DrawItem); + this.cfgs.SelectedIndexChanged += new System.EventHandler(this.cfgs_SelectedIndexChanged); + // + // label16 + // + this.label16.AutoSize = true; + this.label16.Location = new System.Drawing.Point(3, 7); + this.label16.Name = "label16"; + this.label16.Size = new System.Drawing.Size(103, 13); + this.label16.TabIndex = 49; + this.label16.Text = "Run Configurations: "; + // + // dataGridView1 + // + this.dataGridView1.AllowUserToAddRows = false; + this.dataGridView1.AllowUserToDeleteRows = false; + this.dataGridView1.BackgroundColor = System.Drawing.SystemColors.Control; + this.dataGridView1.BorderStyle = System.Windows.Forms.BorderStyle.None; + this.dataGridView1.ColumnHeadersBorderStyle = System.Windows.Forms.DataGridViewHeaderBorderStyle.Single; + this.dataGridView1.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize; + this.dataGridView1.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[] { + this.ServiceName, + this.Column1, + this.Column2, + this.Column3, + this.Column4, + this.Threads, + this.Column5, + this.Column6, + this.Column7, + this.Column10, + this.Column8, + this.Column9}); + this.dataGridView1.Dock = System.Windows.Forms.DockStyle.Top; + this.dataGridView1.Location = new System.Drawing.Point(0, 0); + this.dataGridView1.Name = "dataGridView1"; + this.dataGridView1.ReadOnly = true; + this.dataGridView1.RowHeadersBorderStyle = System.Windows.Forms.DataGridViewHeaderBorderStyle.Single; + this.dataGridView1.ScrollBars = System.Windows.Forms.ScrollBars.None; + this.dataGridView1.SelectionMode = System.Windows.Forms.DataGridViewSelectionMode.CellSelect; + this.dataGridView1.ShowCellErrors = false; + this.dataGridView1.ShowEditingIcon = false; + this.dataGridView1.ShowRowErrors = false; + this.dataGridView1.Size = new System.Drawing.Size(939, 44); + this.dataGridView1.TabIndex = 45; + this.dataGridView1.CellClick += new System.Windows.Forms.DataGridViewCellEventHandler(this.dataGridView1_CellClick); + // + // ServiceName + // + dataGridViewCellStyle1.BackColor = System.Drawing.SystemColors.ButtonFace; + this.ServiceName.DefaultCellStyle = dataGridViewCellStyle1; + this.ServiceName.Frozen = true; + this.ServiceName.HeaderText = "Service Name"; + this.ServiceName.Name = "ServiceName"; + this.ServiceName.ReadOnly = true; + this.ServiceName.Width = 180; + // + // Column1 + // + this.Column1.Frozen = true; + this.Column1.HeaderText = "Status"; + this.Column1.Name = "Column1"; + this.Column1.ReadOnly = true; + this.Column1.Width = 70; + // + // Column2 + // + this.Column2.HeaderText = "ProcID"; + this.Column2.Name = "Column2"; + this.Column2.ReadOnly = true; + this.Column2.Width = 60; + // + // Column3 + // + this.Column3.HeaderText = "Usage"; + this.Column3.Name = "Column3"; + this.Column3.ReadOnly = true; + this.Column3.Width = 50; + // + // Column4 + // + this.Column4.HeaderText = "Handles"; + this.Column4.Name = "Column4"; + this.Column4.ReadOnly = true; + this.Column4.Width = 50; + // + // Threads + // + this.Threads.HeaderText = "Threads"; + this.Threads.Name = "Threads"; + this.Threads.ReadOnly = true; + this.Threads.Width = 50; + // + // Column5 + // + this.Column5.HeaderText = "PhysMem"; + this.Column5.Name = "Column5"; + this.Column5.ReadOnly = true; + this.Column5.Width = 60; + // + // Column6 + // + this.Column6.HeaderText = "VirtMem"; + this.Column6.Name = "Column6"; + this.Column6.ReadOnly = true; + this.Column6.Width = 60; + // + // Column7 + // + this.Column7.HeaderText = "PrivateMem"; + this.Column7.Name = "Column7"; + this.Column7.ReadOnly = true; + this.Column7.Width = 70; + // + // Column10 + // + dataGridViewCellStyle2.ForeColor = System.Drawing.Color.Navy; + this.Column10.DefaultCellStyle = dataGridViewCellStyle2; + this.Column10.HeaderText = "Started"; + this.Column10.Name = "Column10"; + this.Column10.ReadOnly = true; + this.Column10.Width = 124; + // + // Column8 + // + dataGridViewCellStyle3.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleCenter; + dataGridViewCellStyle3.BackColor = System.Drawing.SystemColors.Control; + this.Column8.DefaultCellStyle = dataGridViewCellStyle3; + this.Column8.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.Column8.HeaderText = "Start"; + this.Column8.Name = "Column8"; + this.Column8.ReadOnly = true; + this.Column8.Width = 62; + // + // Column9 + // + dataGridViewCellStyle4.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleCenter; + dataGridViewCellStyle4.BackColor = System.Drawing.SystemColors.Control; + this.Column9.DefaultCellStyle = dataGridViewCellStyle4; + this.Column9.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.Column9.HeaderText = "Stop"; + this.Column9.Name = "Column9"; + this.Column9.ReadOnly = true; + this.Column9.Width = 62; + // + // panel1 + // + this.panel1.Controls.Add(this.ttNow); + this.panel1.Controls.Add(this.label20); + this.panel1.Controls.Add(this.cfnm); + this.panel1.Controls.Add(this.label22); + this.panel1.Controls.Add(this.ttRun); + this.panel1.Controls.Add(this.label17); + this.panel1.Controls.Add(this.ttST); + this.panel1.Controls.Add(this.label21); + this.panel1.Controls.Add(this.lHTTP); + this.panel1.Controls.Add(this.lHA); + this.panel1.Controls.Add(this.lHD); + this.panel1.Controls.Add(this.lTCP); + this.panel1.Controls.Add(this.label15); + this.panel1.Controls.Add(this.label14); + this.panel1.Controls.Add(this.label13); + this.panel1.Controls.Add(this.label12); + this.panel1.Controls.Add(this.label11); + this.panel1.Controls.Add(this.label9); + this.panel1.Controls.Add(this.label5); + this.panel1.Controls.Add(this.lMWT); + this.panel1.Controls.Add(this.lMST); + this.panel1.Controls.Add(this.lTRC); + this.panel1.Controls.Add(this.lGRC); + this.panel1.Controls.Add(this.lMode); + this.panel1.Controls.Add(this.lArea); + this.panel1.Controls.Add(this.lDPool); + this.panel1.Controls.Add(this.lProtocol); + this.panel1.Controls.Add(this.label7); + this.panel1.Controls.Add(this.label6); + this.panel1.Controls.Add(this.label4); + this.panel1.Controls.Add(this.label3); + this.panel1.Controls.Add(this.label2); + this.panel1.Dock = System.Windows.Forms.DockStyle.Top; + this.panel1.Location = new System.Drawing.Point(0, 70); + this.panel1.Name = "panel1"; + this.panel1.Size = new System.Drawing.Size(939, 120); + this.panel1.TabIndex = 69; + // + // ttNow + // + this.ttNow.AutoSize = true; + this.ttNow.ForeColor = System.Drawing.Color.Navy; + this.ttNow.Location = new System.Drawing.Point(414, 97); + this.ttNow.Name = "ttNow"; + this.ttNow.Size = new System.Drawing.Size(16, 13); + this.ttNow.TabIndex = 97; + this.ttNow.Text = "..."; + // + // label20 + // + this.label20.AutoSize = true; + this.label20.ForeColor = System.Drawing.Color.Maroon; + this.label20.Location = new System.Drawing.Point(298, 97); + this.label20.Name = "label20"; + this.label20.Size = new System.Drawing.Size(62, 13); + this.label20.TabIndex = 96; + this.label20.Text = "Status time:"; + // + // cfnm + // + this.cfnm.AutoSize = true; + this.cfnm.ForeColor = System.Drawing.Color.Indigo; + this.cfnm.Location = new System.Drawing.Point(126, 7); + this.cfnm.Name = "cfnm"; + this.cfnm.Size = new System.Drawing.Size(16, 13); + this.cfnm.TabIndex = 95; + this.cfnm.Text = "..."; + // + // label22 + // + this.label22.AutoSize = true; + this.label22.ForeColor = System.Drawing.Color.Indigo; + this.label22.Location = new System.Drawing.Point(12, 7); + this.label22.Name = "label22"; + this.label22.Size = new System.Drawing.Size(88, 13); + this.label22.TabIndex = 94; + this.label22.Text = "Configuration file:"; + // + // ttRun + // + this.ttRun.AutoSize = true; + this.ttRun.ForeColor = System.Drawing.Color.Navy; + this.ttRun.Location = new System.Drawing.Point(701, 97); + this.ttRun.Name = "ttRun"; + this.ttRun.Size = new System.Drawing.Size(16, 13); + this.ttRun.TabIndex = 93; + this.ttRun.Text = "..."; + // + // label17 + // + this.label17.AutoSize = true; + this.label17.ForeColor = System.Drawing.Color.Maroon; + this.label17.Location = new System.Drawing.Point(595, 97); + this.label17.Name = "label17"; + this.label17.Size = new System.Drawing.Size(50, 13); + this.label17.TabIndex = 92; + this.label17.Text = "Running:"; + // + // ttST + // + this.ttST.AutoSize = true; + this.ttST.ForeColor = System.Drawing.Color.Navy; + this.ttST.Location = new System.Drawing.Point(126, 97); + this.ttST.Name = "ttST"; + this.ttST.Size = new System.Drawing.Size(16, 13); + this.ttST.TabIndex = 90; + this.ttST.Text = "..."; + // + // label21 + // + this.label21.AutoSize = true; + this.label21.ForeColor = System.Drawing.Color.Maroon; + this.label21.Location = new System.Drawing.Point(12, 97); + this.label21.Name = "label21"; + this.label21.Size = new System.Drawing.Size(56, 13); + this.label21.TabIndex = 88; + this.label21.Text = "Started at:"; + // + // lHTTP + // + this.lHTTP.AutoSize = true; + this.lHTTP.ForeColor = System.Drawing.Color.Navy; + this.lHTTP.Location = new System.Drawing.Point(701, 44); + this.lHTTP.Name = "lHTTP"; + this.lHTTP.Size = new System.Drawing.Size(16, 13); + this.lHTTP.TabIndex = 87; + this.lHTTP.Text = "..."; + // + // lHA + // + this.lHA.AutoSize = true; + this.lHA.ForeColor = System.Drawing.Color.Navy; + this.lHA.Location = new System.Drawing.Point(701, 60); + this.lHA.Name = "lHA"; + this.lHA.Size = new System.Drawing.Size(16, 13); + this.lHA.TabIndex = 86; + this.lHA.Text = "..."; + // + // lHD + // + this.lHD.AutoSize = true; + this.lHD.ForeColor = System.Drawing.Color.Navy; + this.lHD.Location = new System.Drawing.Point(701, 76); + this.lHD.Name = "lHD"; + this.lHD.Size = new System.Drawing.Size(16, 13); + this.lHD.TabIndex = 85; + this.lHD.Text = "..."; + // + // lTCP + // + this.lTCP.AutoSize = true; + this.lTCP.ForeColor = System.Drawing.Color.Navy; + this.lTCP.Location = new System.Drawing.Point(701, 28); + this.lTCP.Name = "lTCP"; + this.lTCP.Size = new System.Drawing.Size(16, 13); + this.lTCP.TabIndex = 84; + this.lTCP.Text = "..."; + // + // label15 + // + this.label15.AutoSize = true; + this.label15.Location = new System.Drawing.Point(595, 76); + this.label15.Name = "label15"; + this.label15.Size = new System.Drawing.Size(63, 13); + this.label15.TabIndex = 83; + this.label15.Text = "Description:"; + // + // label14 + // + this.label14.AutoSize = true; + this.label14.Location = new System.Drawing.Point(595, 61); + this.label14.Name = "label14"; + this.label14.Size = new System.Drawing.Size(100, 13); + this.label14.TabIndex = 82; + this.label14.Text = "HTTP Autorization::"; + // + // label13 + // + this.label13.AutoSize = true; + this.label13.Location = new System.Drawing.Point(595, 45); + this.label13.Name = "label13"; + this.label13.Size = new System.Drawing.Size(61, 13); + this.label13.TabIndex = 81; + this.label13.Text = "HTTP Port:"; + // + // label12 + // + this.label12.AutoSize = true; + this.label12.Location = new System.Drawing.Point(595, 28); + this.label12.Name = "label12"; + this.label12.Size = new System.Drawing.Size(53, 13); + this.label12.TabIndex = 80; + this.label12.Text = "TCP Port:"; + // + // label11 + // + this.label11.AutoSize = true; + this.label11.Location = new System.Drawing.Point(298, 45); + this.label11.Name = "label11"; + this.label11.Size = new System.Drawing.Size(75, 13); + this.label11.TabIndex = 79; + this.label11.Text = "MaxWaitTime:"; + // + // label9 + // + this.label9.AutoSize = true; + this.label9.Location = new System.Drawing.Point(298, 61); + this.label9.Name = "label9"; + this.label9.Size = new System.Drawing.Size(80, 13); + this.label9.TabIndex = 78; + this.label9.Text = "MaxSolveTime:"; + // + // label5 + // + this.label5.AutoSize = true; + this.label5.Location = new System.Drawing.Point(298, 77); + this.label5.Name = "label5"; + this.label5.Size = new System.Drawing.Size(110, 13); + this.label5.TabIndex = 77; + this.label5.Text = "GlobalRegionsCache:"; + // + // lMWT + // + this.lMWT.AutoSize = true; + this.lMWT.ForeColor = System.Drawing.Color.Navy; + this.lMWT.Location = new System.Drawing.Point(414, 44); + this.lMWT.Name = "lMWT"; + this.lMWT.Size = new System.Drawing.Size(16, 13); + this.lMWT.TabIndex = 76; + this.lMWT.Text = "..."; + // + // lMST + // + this.lMST.AutoSize = true; + this.lMST.ForeColor = System.Drawing.Color.Navy; + this.lMST.Location = new System.Drawing.Point(414, 60); + this.lMST.Name = "lMST"; + this.lMST.Size = new System.Drawing.Size(16, 13); + this.lMST.TabIndex = 75; + this.lMST.Text = "..."; + // + // lTRC + // + this.lTRC.AutoSize = true; + this.lTRC.ForeColor = System.Drawing.Color.Navy; + this.lTRC.Location = new System.Drawing.Point(126, 75); + this.lTRC.Name = "lTRC"; + this.lTRC.Size = new System.Drawing.Size(16, 13); + this.lTRC.TabIndex = 74; + this.lTRC.Text = "..."; + // + // lGRC + // + this.lGRC.AutoSize = true; + this.lGRC.ForeColor = System.Drawing.Color.Navy; + this.lGRC.Location = new System.Drawing.Point(414, 76); + this.lGRC.Name = "lGRC"; + this.lGRC.Size = new System.Drawing.Size(16, 13); + this.lGRC.TabIndex = 73; + this.lGRC.Text = "..."; + // + // lMode + // + this.lMode.AutoSize = true; + this.lMode.ForeColor = System.Drawing.Color.Navy; + this.lMode.Location = new System.Drawing.Point(126, 60); + this.lMode.Name = "lMode"; + this.lMode.Size = new System.Drawing.Size(16, 13); + this.lMode.TabIndex = 72; + this.lMode.Text = "..."; + // + // lArea + // + this.lArea.AutoSize = true; + this.lArea.ForeColor = System.Drawing.Color.Navy; + this.lArea.Location = new System.Drawing.Point(126, 44); + this.lArea.Name = "lArea"; + this.lArea.Size = new System.Drawing.Size(16, 13); + this.lArea.TabIndex = 71; + this.lArea.Text = "..."; + // + // lDPool + // + this.lDPool.AutoSize = true; + this.lDPool.ForeColor = System.Drawing.Color.Navy; + this.lDPool.Location = new System.Drawing.Point(414, 28); + this.lDPool.Name = "lDPool"; + this.lDPool.Size = new System.Drawing.Size(16, 13); + this.lDPool.TabIndex = 70; + this.lDPool.Text = "..."; + // + // lProtocol + // + this.lProtocol.AutoSize = true; + this.lProtocol.ForeColor = System.Drawing.Color.Navy; + this.lProtocol.Location = new System.Drawing.Point(126, 28); + this.lProtocol.Name = "lProtocol"; + this.lProtocol.Size = new System.Drawing.Size(16, 13); + this.lProtocol.TabIndex = 69; + this.lProtocol.Text = "..."; + // + // label7 + // + this.label7.AutoSize = true; + this.label7.Location = new System.Drawing.Point(298, 28); + this.label7.Name = "label7"; + this.label7.Size = new System.Drawing.Size(72, 13); + this.label7.TabIndex = 68; + this.label7.Text = "DynamicPool:"; + // + // label6 + // + this.label6.AutoSize = true; + this.label6.Location = new System.Drawing.Point(12, 76); + this.label6.Name = "label6"; + this.label6.Size = new System.Drawing.Size(114, 13); + this.label6.TabIndex = 67; + this.label6.Text = "ThreadRegionsCache:"; + // + // label4 + // + this.label4.AutoSize = true; + this.label4.Location = new System.Drawing.Point(12, 60); + this.label4.Name = "label4"; + this.label4.Size = new System.Drawing.Size(37, 13); + this.label4.TabIndex = 66; + this.label4.Text = "Mode:"; + // + // label3 + // + this.label3.AutoSize = true; + this.label3.Location = new System.Drawing.Point(12, 44); + this.label3.Name = "label3"; + this.label3.Size = new System.Drawing.Size(32, 13); + this.label3.TabIndex = 65; + this.label3.Text = "Area:"; + // + // label2 + // + this.label2.AutoSize = true; + this.label2.Location = new System.Drawing.Point(12, 28); + this.label2.Name = "label2"; + this.label2.Size = new System.Drawing.Size(49, 13); + this.label2.TabIndex = 64; + this.label2.Text = "Protocol:"; + // + // eBtn + // + this.eBtn.FlatStyle = System.Windows.Forms.FlatStyle.Popup; + this.eBtn.Location = new System.Drawing.Point(496, 3); + this.eBtn.Name = "eBtn"; + this.eBtn.Size = new System.Drawing.Size(18, 21); + this.eBtn.TabIndex = 53; + this.eBtn.Text = "E"; + this.eBtn.UseVisualStyleBackColor = true; + this.eBtn.Click += new System.EventHandler(this.eBtn_Click); + // + // RMSVForm + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(939, 509); + this.Controls.Add(this.dataGridView3); + this.Controls.Add(this.dataGridView2); + this.Controls.Add(this.panel1); + this.Controls.Add(this.panel3); + this.Controls.Add(this.panel2); + this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); + this.Name = "RMSVForm"; + this.Text = "Route Service State"; + this.Load += new System.EventHandler(this.RMSVForm_Load); + this.Shown += new System.EventHandler(this.RMSVForm_Shown); + ((System.ComponentModel.ISupportInitialize)(this.dataGridView2)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.dataGridView3)).EndInit(); + this.panel2.ResumeLayout(false); + this.panel2.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)(this.numericUpDown1)).EndInit(); + this.panel3.ResumeLayout(false); + this.panel3.PerformLayout(); + this.panelRun.ResumeLayout(false); + this.panelRun.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)(this.dataGridView1)).EndInit(); + this.panel1.ResumeLayout(false); + this.panel1.PerformLayout(); + this.ResumeLayout(false); + + } + + #endregion + + private System.Windows.Forms.DataGridView dataGridView2; + private System.Windows.Forms.DataGridViewTextBoxColumn Column13; + private System.Windows.Forms.DataGridViewTextBoxColumn Column14; + private System.Windows.Forms.DataGridViewTextBoxColumn Column15; + private System.Windows.Forms.DataGridViewTextBoxColumn Column16; + private System.Windows.Forms.DataGridViewTextBoxColumn Column17; + private System.Windows.Forms.DataGridView dataGridView3; + private System.Windows.Forms.DataGridViewTextBoxColumn Column11; + private System.Windows.Forms.DataGridViewTextBoxColumn Column12; + private System.Windows.Forms.DataGridViewTextBoxColumn Column18; + private System.Windows.Forms.DataGridViewTextBoxColumn Column19; + private System.Windows.Forms.Timer timer1; + private System.Windows.Forms.Panel panel2; + private System.Windows.Forms.Label lut; + private System.Windows.Forms.Label label10; + private System.Windows.Forms.Label label8; + private System.Windows.Forms.NumericUpDown numericUpDown1; + private System.Windows.Forms.Label label1; + private System.Windows.Forms.Panel panel3; + private System.Windows.Forms.DataGridView dataGridView1; + private System.Windows.Forms.Panel panel1; + private System.Windows.Forms.Label ttRun; + private System.Windows.Forms.Label label17; + private System.Windows.Forms.Label ttST; + private System.Windows.Forms.Label label21; + private System.Windows.Forms.Label lHTTP; + private System.Windows.Forms.Label lHA; + private System.Windows.Forms.Label lHD; + private System.Windows.Forms.Label lTCP; + private System.Windows.Forms.Label label15; + private System.Windows.Forms.Label label14; + private System.Windows.Forms.Label label13; + private System.Windows.Forms.Label label12; + private System.Windows.Forms.Label label11; + private System.Windows.Forms.Label label9; + private System.Windows.Forms.Label label5; + private System.Windows.Forms.Label lMWT; + private System.Windows.Forms.Label lMST; + private System.Windows.Forms.Label lTRC; + private System.Windows.Forms.Label lGRC; + private System.Windows.Forms.Label lMode; + private System.Windows.Forms.Label lArea; + private System.Windows.Forms.Label lDPool; + private System.Windows.Forms.Label lProtocol; + private System.Windows.Forms.Label label7; + private System.Windows.Forms.Label label6; + private System.Windows.Forms.Label label4; + private System.Windows.Forms.Label label3; + private System.Windows.Forms.Label label2; + private System.Windows.Forms.DataGridViewTextBoxColumn ServiceName; + private System.Windows.Forms.DataGridViewTextBoxColumn Column1; + private System.Windows.Forms.DataGridViewTextBoxColumn Column2; + private System.Windows.Forms.DataGridViewTextBoxColumn Column3; + private System.Windows.Forms.DataGridViewTextBoxColumn Column4; + private System.Windows.Forms.DataGridViewTextBoxColumn Threads; + private System.Windows.Forms.DataGridViewTextBoxColumn Column5; + private System.Windows.Forms.DataGridViewTextBoxColumn Column6; + private System.Windows.Forms.DataGridViewTextBoxColumn Column7; + private System.Windows.Forms.DataGridViewTextBoxColumn Column10; + private System.Windows.Forms.DataGridViewButtonColumn Column8; + private System.Windows.Forms.DataGridViewButtonColumn Column9; + private System.Windows.Forms.Panel panelRun; + private System.Windows.Forms.Button startC; + private System.Windows.Forms.ComboBox cfgs; + private System.Windows.Forms.Label label16; + private System.Windows.Forms.Button btnU; + private System.Windows.Forms.Label label19; + private System.Windows.Forms.Button btnI; + private System.Windows.Forms.Label cfnm; + private System.Windows.Forms.Label label22; + private System.Windows.Forms.Button startS; + private System.Windows.Forms.Label ttNow; + private System.Windows.Forms.Label label20; + private System.Windows.Forms.TextBox sysidbox; + private System.Windows.Forms.Label label18; + private System.Windows.Forms.Label l23; + private System.Windows.Forms.Button eBtn; + } +} + diff --git a/SOLVER/RouteServiceState/Form1.cs b/SOLVER/RouteServiceState/Form1.cs new file mode 100644 index 0000000..9af50ff --- /dev/null +++ b/SOLVER/RouteServiceState/Form1.cs @@ -0,0 +1,1369 @@ +using System; +using System.IO; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.Text; +using System.Management; +using System.Windows.Forms; +using System.ServiceProcess; +using System.Diagnostics; +using System.Xml; +using System.Xml.Serialization; + +using System.Runtime.InteropServices; +using System.Security; +using System.Security.Permissions; +using Microsoft.Win32.SafeHandles; +using System.Runtime.ConstrainedExecution; + +namespace RouteServiceState +{ + public partial class RMSVForm : Form + { + string sName = "dkxce.Route.ServiceSolver"; + string sFile = Path.GetFullPath(XMLSaved.GetCurrentDir() + @"\..\Service\dkxce.Route.ServiceSolver.exe"); + + bool isadmin = false; + bool stopped = true; + TimeSpan[] ts = new TimeSpan[11]; + DateTime[] dt = new DateTime[11]; + + public RMSVForm() + { + InitializeComponent(); + isadmin = PrivilegeManager.IsUserAnAdmin(); + Text += String.Format(" {0}", isadmin ? "[Admin]" : "[NoAdmin]"); + } + + private void RMSVForm_Load(object sender, EventArgs e) + { + dataGridView1.Rows.Add(new object[] { "Route.ServiceSolver", "Wait...", "", "", "", "", "", "", "", "", "Start", "Stop" }); + timer1_Tick(sender, e); + timer1.Enabled = true; + LoadConfigs(); + } + + private void LoadConfigs() + { + string path = Path.GetFullPath(XMLSaved.GetCurrentDir() + @"\..\Service\"); + string[] files = Directory.GetFiles(path, "*.xml", SearchOption.TopDirectoryOnly); + Array.Sort(files); + foreach(string file in files) + { + string desc = ""; + try { SvcConfig cfg = XMLSaved.Load(file); desc = cfg.http_description; } catch { }; + if (!String.IsNullOrEmpty(desc)) + { + if((desc == "Default") || (desc == "Default Configuration")) + cfgs.Items.Insert(0, new ItemInfo(file, desc, true)); + else + cfgs.Items.Add(new ItemInfo(file, desc)); + } + else + { + if (Path.GetFileName(file) == "dkxce.Route.ServiceSolver.xml") + cfgs.Items.Insert(0, new ItemInfo(file, "Default")); + else + cfgs.Items.Add(new ItemInfo(file)); + }; + }; + try + { + path = Path.GetFullPath(XMLSaved.GetCurrentDir() + @"\..\"); + files = Directory.GetFiles(path, "*.xml", SearchOption.TopDirectoryOnly); + foreach (string file in files) + { + // + string desc = ""; + try { SvcConfig cfg = XMLSaved.Load(file); desc = cfg.http_description; } + catch { }; + if (!String.IsNullOrEmpty(desc)) + cfgs.Items.Add(new ItemInfo(file, desc, @"..\")); + else + cfgs.Items.Add(new ItemInfo(file, null, @"..\")); + + }; + } + catch { }; + if(cfgs.Items.Count > 0) cfgs.SelectedIndex = 0; + } + + private void numericUpDown1_ValueChanged(object sender, EventArgs e) + { + timer1.Interval = (int)(numericUpDown1.Value * 1000); + } + + private static Process GetProcess(string svcName) + { + ManagementObject service = new ManagementObject(@"Win32_service.Name='" + svcName + "'"); + object o = service.GetPropertyValue("ProcessId"); + int processId = (int)((UInt32)o); + return Process.GetProcessById(processId); + } + + private void callUpdateStatus(ServiceController sc, int row) + { + callUpdateStatus(sc, row, ""); + } + + private void callUpdateStatus(ServiceController sc, int row, string file) + { + Process p = null; + + try + { + dataGridView1.Rows[row - 1].Cells[1].Value = sc.Status.ToString(); + dataGridView1.Rows[row - 1].Cells[1].Style.ForeColor = Color.Green; + p = GetProcess(sc.ServiceName); + } + catch (InvalidOperationException ex) + { + dataGridView1.Rows[row - 1].Cells[1].Value = "ERROR"; + dataGridView1.Rows[row - 1].Cells[2].Value = ex.Message; + } + catch (Exception ex) + { + dataGridView1.Rows[row - 1].Cells[1].Value = "ERROR"; + dataGridView1.Rows[row - 1].Cells[2].Value = ex.Message; + }; + if ((p != null) && (p.Id == 0)) + { + Process[] pcs = Process.GetProcessesByName(System.IO.Path.GetFileNameWithoutExtension(file)); + if ((pcs != null) && (pcs.Length > 0)) + { + dataGridView1.Rows[row - 1].Cells[1].Value = "Console"; + dataGridView1.Rows[row - 1].Cells[1].Style.ForeColor = Color.Blue; + p = pcs[0]; + }; + }; + if (p == null) + { + Process[] pcs = Process.GetProcessesByName(System.IO.Path.GetFileNameWithoutExtension(file)); + if ((pcs != null) && (pcs.Length > 0)) + { + dataGridView1.Rows[row - 1].Cells[1].Value = "Console"; + dataGridView1.Rows[row - 1].Cells[1].Style.ForeColor = Color.Blue; + p = pcs[0]; + } + else if (System.IO.File.Exists(file)) + dataGridView1.Rows[row - 1].Cells[1].Value = "No Service"; + else + dataGridView1.Rows[row - 1].Cells[1].Value = "Not Found"; + }; + + if ((p != null) && (p.Id > 0)) + { + string usage = "?"; + if ((ts[row - 1] != null) && (dt[row - 1] != null)) + { + TimeSpan dts = p.TotalProcessorTime.Subtract(ts[row - 1]); + TimeSpan ddt = DateTime.UtcNow.Subtract(dt[row - 1]); + usage = ((int)(Convert.ToDouble(dts.TotalMilliseconds) / Convert.ToDouble(ddt.TotalMilliseconds) * 100)).ToString() + " %"; + }; + ts[row - 1] = p.TotalProcessorTime; + dt[row - 1] = DateTime.UtcNow; + + dataGridView1.Rows[row - 1].Cells[2].Value = p.Id.ToString(); + dataGridView1.Rows[row - 1].Cells[3].Value = usage; + dataGridView1.Rows[row - 1].Cells[4].Value = p.HandleCount.ToString(); + dataGridView1.Rows[row - 1].Cells[5].Value = p.Threads.Count.ToString(); + dataGridView1.Rows[row - 1].Cells[6].Value = (p.WorkingSet64 / 1024 / 1024).ToString() + " MB"; + dataGridView1.Rows[row - 1].Cells[7].Value = (p.VirtualMemorySize64 / 1024 / 1024).ToString() + " MB"; + dataGridView1.Rows[row - 1].Cells[8].Value = (p.PrivateMemorySize64 / 1024 / 1024).ToString() + " MB"; + dataGridView1.Rows[row - 1].Cells[9].Value = p.StartTime.ToString(); + dataGridView1.Rows[row - 1].Cells[10].Style.ForeColor = Color.Gray; + dataGridView1.Rows[row - 1].Cells[11].Style.ForeColor = Color.Black; + } + else + { + dataGridView1.Rows[row - 1].Cells[1].Style.ForeColor = Color.Maroon; + dataGridView1.Rows[row - 1].Cells[2].Value = ""; + dataGridView1.Rows[row - 1].Cells[3].Value = ""; + dataGridView1.Rows[row - 1].Cells[4].Value = ""; + dataGridView1.Rows[row - 1].Cells[5].Value = ""; + dataGridView1.Rows[row - 1].Cells[6].Value = ""; + dataGridView1.Rows[row - 1].Cells[7].Value = ""; + dataGridView1.Rows[row - 1].Cells[8].Value = ""; + dataGridView1.Rows[row - 1].Cells[9].Value = ""; + dataGridView1.Rows[row - 1].Cells[10].Style.ForeColor = Color.Black; + dataGridView1.Rows[row - 1].Cells[11].Style.ForeColor = Color.Gray; + }; + } + + private void timer1_Tick(object sender, EventArgs e) + { + try + { + callUpdateStatus(new ServiceController(sName), 1, sFile); + } + catch { }; + + string val = dataGridView1.Rows[0].Cells[1].Value.ToString(); + stopped = val == "Stopped" || val == "No Service"; + + + panelRun.Enabled = stopped; + cfgs.Enabled = stopped; + startC.Enabled = stopped; + startS.Enabled = stopped; + btnI.Enabled = stopped && (val == "No Service"); + btnU.Enabled = stopped && (val == "Stopped"); + + GetRouteData(); + } + + private void GetRouteData() + { + //FileMappingServer fms = new FileMappingServer(); + //fms.Connect(); + //fms.WriteData("Hello, World!"); + //fms.Close(); + + if (dataGridView2.RowCount == 0) + dataGridView2.Rows.Add(); + + RouteThreaderInfo rti = new RouteThreaderInfo(); + FileMappingClient fmc = new FileMappingClient(); + try + { + fmc.Connect("Global\\dRSSThreads"); + string data = fmc.ReadData(); + if ((data != null) && (data != "") && (data != "null")) + rti = XMLSaved.LoadText(data); + } + catch (Exception ex) + { + lut.Text = "No Data " + DateTime.Now.ToString("HH:mm:ss dd.MM.yyyy") + " Error: " + ex.Message; + }; + fmc.Close(); + + if (String.IsNullOrEmpty(rti.Protocol)) + { + panel1.Enabled = false; + dataGridView2.Enabled = false; + dataGridView3.Enabled = false; + dataGridView2.Rows.Clear(); + dataGridView3.Rows.Clear(); + return; + } + else + { + panel1.Enabled = true; + dataGridView2.Enabled = true; + dataGridView3.Enabled = true; + }; + + cfnm.Text = rti.confile; + + lProtocol.Text = rti.Protocol; + lDPool.Text = rti.DynamicPool.ToString(); + lArea.Text = rti.Area; + lMode.Text = rti.Mode; + + lGRC.Text = rti.GlobalRegionsCache; + lTRC.Text = rti.ThreadRegionsCache; + lMST.Text = rti.MaxSolveTime.ToString(); + lMWT.Text = rti.MaxWaitTime.ToString(); + + lTCP.Text = rti.config.defPort.ToString(); + lHTTP.Text = rti.config.defHTTP.ToString(); + lHA.Text = rti.config.authorization.ToString(); + lHD.Text = rti.config.http_description; + + ttST.Text = rti.startedAt.ToString("HH:mm:ss dd.MM.yyyy"); + ttNow.Text = DateTime.UtcNow.ToString("HH:mm:ss dd.MM.yyyy"); + ttRun.Text = RunningToString(DateTime.UtcNow, rti.startedAt); + + dataGridView2.Rows[0].Cells[0].Value = rti.ObjectsUsed.ToString(); + dataGridView2.Rows[0].Cells[1].Value = rti.ObjectsIdle.ToString(); + dataGridView2.Rows[0].Cells[2].Value = rti.ThreadsAlive.ToString(); + dataGridView2.Rows[0].Cells[3].Value = rti.ThreadsCounted.ToString(); + dataGridView2.Rows[0].Cells[4].Value = rti.ThreadsMaxAlive.ToString(); + + string[] objs = rti.ObjectsData.Split(new string[] { ";" }, StringSplitOptions.RemoveEmptyEntries); + if (objs.Length != dataGridView3.Rows.Count) + { + dataGridView3.Rows.Clear(); + foreach (string obj in objs) + dataGridView3.Rows.Add(obj.Split(new string[] { ":" }, StringSplitOptions.None)); + } + else + { + for (int i = 0; i < objs.Length; i++) + dataGridView3.Rows[i].SetValues(objs[i].Split(new string[] { ":" }, StringSplitOptions.None)); + }; + + lut.Text = DateTime.Now.ToString("HH:mm:ss dd.MM.yyyy"); + } + + private string RunningToString(DateTime till, DateTime since) + { + TimeSpan ts = till.Subtract(since); + return String.Format("{4:00}:{5:00}:{6:00} {3:00}.{1:00}:{0:0000} UTC - {2} weeks", (int)(ts.Days / 365.2425), (int)(ts.Days / 30.436875), (int)ts.TotalDays / 7, ts.Days, ts.Hours, ts.Minutes, ts.Seconds); + } + + private void dataGridView1_CellClick(object sender, DataGridViewCellEventArgs e) + { + if ((e.ColumnIndex == 10) || (e.ColumnIndex == 11) && (e.RowIndex == 0)) + { + string killer = XMLSaved.GetCurrentDir() + @"\nircmd.exe"; + try + { + ServiceController sc = new ServiceController(sName); + // START // + if (e.ColumnIndex == 10) + { + Exception err = null; + try { sc.Start(); } catch (Exception ex) { err = ex; }; + if (err != null) + { + try { ProcessStart(sFile); err = null; } catch { }; + }; + if (err != null) throw err; + }; + // STOP // + if (e.ColumnIndex == 11) + { + Exception err = null; + try { sc.Stop(); } catch (Exception ex) { err = ex; }; + if (err != null) + { + Process[] pcs = Process.GetProcessesByName(sName); + try { if ((pcs != null) && (pcs.Length > 0)) { pcs[0].Close(); err = null; }; } catch { }; + try { if ((pcs != null) && (pcs.Length > 0)) { pcs[0].Kill(); err = null; }; } catch { }; + try { ProcessStart(killer, "killprocess " + sName + ".exe"); err = null; } catch { }; + }; + if (err != null) throw err; + }; + } + catch (Exception ex) + { + MessageBox.Show(ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); + }; + }; + } + + private void ProcessStart(string proc) + { + ProcessStartInfo psi = new ProcessStartInfo(proc); + if (System.Environment.OSVersion.Version.Major >= 6) + { + psi.UseShellExecute = true; + psi.Verb = "runas"; + }; + Process.Start(psi); + } + + private void ProcessStart(string proc, string args) + { + ProcessStartInfo psi = new ProcessStartInfo(proc, args); + if (System.Environment.OSVersion.Version.Major >= 6) + { + psi.UseShellExecute = true; + psi.Verb = "runas"; + }; + Process.Start(psi); + } + + private void startC_Click(object sender, EventArgs e) + { + if (cfgs.SelectedIndex < 0) return; + try + { + ProcessStartInfo psi = new ProcessStartInfo(sFile, ((ItemInfo)cfgs.SelectedItem).fName); + if (System.Environment.OSVersion.Version.Major >= 6) + { + psi.UseShellExecute = true; + psi.Verb = "runas"; + } + psi.WorkingDirectory = Path.GetDirectoryName(sFile); + Process.Start(psi); + } + catch { }; + } + + private void btnI_Click(object sender, EventArgs e) + { + try + { + ProcessStartInfo psi = new ProcessStartInfo(sFile, "/i"); + psi.WorkingDirectory = Path.GetDirectoryName(sFile); + Process.Start(psi); + } + catch { }; + } + + private void btnU_Click(object sender, EventArgs e) + { + try + { + ProcessStartInfo psi = new ProcessStartInfo(sFile, "/u"); + psi.WorkingDirectory = Path.GetDirectoryName(sFile); + Process.Start(psi); + } + catch { }; + } + + private void startS_Click(object sender, EventArgs e) + { + if (cfgs.SelectedIndex < 0) return; + try + { + ServiceController sc = new ServiceController(sName); + sc.Start(new string[] { ((ItemInfo)cfgs.SelectedItem).fName }); + } + catch { }; + } + + private void cfgs_SelectedIndexChanged(object sender, EventArgs e) + { + // do nothing + } + + private void cfgs_DrawItem(object sender, DrawItemEventArgs e) + { + if (!cfgs.Enabled) return; + if (e.Index == -1) return; + + ComboBox combo = ((ComboBox)sender); + ItemInfo ii = (ItemInfo)cfgs.Items[e.Index]; + + e.DrawBackground(); + + string res = ""; + if (String.IsNullOrEmpty(ii.fAddit)) res = Path.GetFileName(ii.fName); + else res = String.Format("{0} ({1})", Path.GetFileName(ii.fName), ii.fAddit); + if (!String.IsNullOrEmpty(ii.fSub)) res += String.Format(" at {0}", ii.fSub); + + string fn = Path.GetFileNameWithoutExtension(ii.fName); + string fe = Path.GetExtension(ii.fName); + string fc = " ("; + string fx = ") "; + int w = 0; + + e.Graphics.DrawString(fn, e.Font, new SolidBrush(ii.fDef ? Color.DarkViolet : e.ForeColor), new PointF(e.Bounds.Left + w, e.Bounds.Top)); + w += (int)e.Graphics.MeasureString(fn, e.Font, 0, StringFormat.GenericTypographic).Width; + e.Graphics.DrawString(fe, e.Font, new SolidBrush(Color.Gray), new PointF(e.Bounds.Left + w, e.Bounds.Top)); + w += (int)e.Graphics.MeasureString(fe, e.Font, 0, StringFormat.GenericTypographic).Width; + if (!String.IsNullOrEmpty(ii.fAddit)) + { + e.Graphics.DrawString(fc, e.Font, new SolidBrush(Color.Silver), new PointF(e.Bounds.Left + w, e.Bounds.Top)); + w += (int)e.Graphics.MeasureString(fc, e.Font, 0, StringFormat.GenericTypographic).Width; + e.Graphics.DrawString(ii.fAddit, e.Font, new SolidBrush(ii.fDef ? Color.DarkViolet : ((e.State & DrawItemState.Focus) == DrawItemState.Focus ? e.ForeColor : Color.Navy)), new PointF(e.Bounds.Left + w, e.Bounds.Top)); + w += (int)e.Graphics.MeasureString(ii.fAddit.Trim(), e.Font, 0, StringFormat.GenericTypographic).Width; + e.Graphics.DrawString(fx, e.Font, new SolidBrush(Color.Silver), new PointF(e.Bounds.Left + w, e.Bounds.Top)); + w += (int)e.Graphics.MeasureString(fx, e.Font, 0, StringFormat.GenericTypographic).Width; + }; + + e.DrawFocusRectangle(); + } + + private void RMSVForm_Shown(object sender, EventArgs e) + { + if (!isadmin) + MessageBox.Show("This application requeries admin rights\r\nÝòî ïðèëîæåíèå òðåáóåò àäìèíñêèõ ïðàâ\r\n\r\nÏîæàëóéñòà, çàïóñòèòå ïðèëîæåíèå ñ ïðàâàìè àäìèíèñòðàòîðà", this.Text, MessageBoxButtons.OK, MessageBoxIcon.Exclamation); + + this.l23.Text = "Logical Processors: " + Environment.ProcessorCount.ToString(); + System.Threading.Thread thr = new System.Threading.Thread(GetSysID); + thr.Start(); + } + + private void GetSysID() + { + string SysID = ""; + try + { + SysID = SYSID.GetSystemID(true, true, false, true, false); + } + catch { }; + this.Invoke(new SetSysIDDelegate(SetSysID), SysID); + } + + private delegate void SetSysIDDelegate(string sysid); + private void SetSysID(string sysid) + { + this.sysidbox.Text = sysid; + } + + private void eBtn_Click(object sender, EventArgs e) + { + if (cfgs.SelectedIndex < 0) return; + string[] notepads = new string[] { "notepad++.exe", "akelpad.exe", "notepad.exe" }; + int tri = 0; + while (tri < 3) + { + try + { + ProcessStartInfo psi = new ProcessStartInfo(notepads[tri++], ((ItemInfo)cfgs.SelectedItem).fName); + psi.UseShellExecute = true; + Process.Start(psi); + break; + } + catch { }; + }; + } + } + + public class PrivilegeManager + { + [DllImport("shell32.dll", SetLastError = true)] + [return: MarshalAs(UnmanagedType.Bool)] + public static extern bool IsUserAnAdmin(); + + [DllImport("advapi32.dll", SetLastError = true)] + [return: MarshalAs(UnmanagedType.Bool)] + static extern bool OpenProcessToken( + IntPtr ProcessHandle, + UInt32 DesiredAccess, out IntPtr TokenHandle); + + private static uint STANDARD_RIGHTS_REQUIRED = 0x000F0000; + private static uint STANDARD_RIGHTS_READ = 0x00020000; + private static uint TOKEN_ASSIGN_PRIMARY = 0x0001; + private static uint TOKEN_DUPLICATE = 0x0002; + private static uint TOKEN_IMPERSONATE = 0x0004; + private static uint TOKEN_QUERY = 0x0008; + private static uint TOKEN_QUERY_SOURCE = 0x0010; + private static uint TOKEN_ADJUST_PRIVILEGES = 0x0020; + private static uint TOKEN_ADJUST_GROUPS = 0x0040; + private static uint TOKEN_ADJUST_DEFAULT = 0x0080; + private static uint TOKEN_ADJUST_SESSIONID = 0x0100; + private static uint TOKEN_READ = (STANDARD_RIGHTS_READ | TOKEN_QUERY); + private static uint TOKEN_ALL_ACCESS = (STANDARD_RIGHTS_REQUIRED | TOKEN_ASSIGN_PRIMARY | + TOKEN_DUPLICATE | TOKEN_IMPERSONATE | TOKEN_QUERY | TOKEN_QUERY_SOURCE | + TOKEN_ADJUST_PRIVILEGES | TOKEN_ADJUST_GROUPS | TOKEN_ADJUST_DEFAULT | + TOKEN_ADJUST_SESSIONID); + + [DllImport("kernel32.dll", SetLastError = true)] + public static extern IntPtr GetCurrentProcess(); + + [DllImport("advapi32.dll", SetLastError = true, CharSet = CharSet.Auto)] + [return: MarshalAs(UnmanagedType.Bool)] + static extern bool LookupPrivilegeValue( + string lpSystemName, + string lpName, + out LUID lpLuid); + + #region Privelege constants + + public const string SE_ASSIGNPRIMARYTOKEN_NAME = "SeAssignPrimaryTokenPrivilege"; + public const string SE_AUDIT_NAME = "SeAuditPrivilege"; + public const string SE_BACKUP_NAME = "SeBackupPrivilege"; + public const string SE_CHANGE_NOTIFY_NAME = "SeChangeNotifyPrivilege"; + public const string SE_CREATE_GLOBAL_NAME = "SeCreateGlobalPrivilege"; + public const string SE_CREATE_PAGEFILE_NAME = "SeCreatePagefilePrivilege"; + public const string SE_CREATE_PERMANENT_NAME = "SeCreatePermanentPrivilege"; + public const string SE_CREATE_SYMBOLIC_LINK_NAME = "SeCreateSymbolicLinkPrivilege"; + public const string SE_CREATE_TOKEN_NAME = "SeCreateTokenPrivilege"; + public const string SE_DEBUG_NAME = "SeDebugPrivilege"; + public const string SE_ENABLE_DELEGATION_NAME = "SeEnableDelegationPrivilege"; + public const string SE_IMPERSONATE_NAME = "SeImpersonatePrivilege"; + public const string SE_INC_BASE_PRIORITY_NAME = "SeIncreaseBasePriorityPrivilege"; + public const string SE_INCREASE_QUOTA_NAME = "SeIncreaseQuotaPrivilege"; + public const string SE_INC_WORKING_SET_NAME = "SeIncreaseWorkingSetPrivilege"; + public const string SE_LOAD_DRIVER_NAME = "SeLoadDriverPrivilege"; + public const string SE_LOCK_MEMORY_NAME = "SeLockMemoryPrivilege"; + public const string SE_MACHINE_ACCOUNT_NAME = "SeMachineAccountPrivilege"; + public const string SE_MANAGE_VOLUME_NAME = "SeManageVolumePrivilege"; + public const string SE_PROF_SINGLE_PROCESS_NAME = "SeProfileSingleProcessPrivilege"; + public const string SE_RELABEL_NAME = "SeRelabelPrivilege"; + public const string SE_REMOTE_SHUTDOWN_NAME = "SeRemoteShutdownPrivilege"; + public const string SE_RESTORE_NAME = "SeRestorePrivilege"; + public const string SE_SECURITY_NAME = "SeSecurityPrivilege"; + public const string SE_SHUTDOWN_NAME = "SeShutdownPrivilege"; + public const string SE_SYNC_AGENT_NAME = "SeSyncAgentPrivilege"; + public const string SE_SYSTEM_ENVIRONMENT_NAME = "SeSystemEnvironmentPrivilege"; + public const string SE_SYSTEM_PROFILE_NAME = "SeSystemProfilePrivilege"; + public const string SE_SYSTEMTIME_NAME = "SeSystemtimePrivilege"; + public const string SE_TAKE_OWNERSHIP_NAME = "SeTakeOwnershipPrivilege"; + public const string SE_TCB_NAME = "SeTcbPrivilege"; + public const string SE_TIME_ZONE_NAME = "SeTimeZonePrivilege"; + public const string SE_TRUSTED_CREDMAN_ACCESS_NAME = "SeTrustedCredManAccessPrivilege"; + public const string SE_UNDOCK_NAME = "SeUndockPrivilege"; + public const string SE_UNSOLICITED_INPUT_NAME = "SeUnsolicitedInputPrivilege"; + #endregion + + [StructLayout(LayoutKind.Sequential)] + public struct LUID + { + public UInt32 LowPart; + public Int32 HighPart; + } + + [DllImport("kernel32.dll", SetLastError = true)] + static extern bool CloseHandle(IntPtr hHandle); + + public const UInt32 SE_PRIVILEGE_ENABLED_BY_DEFAULT = 0x00000001; + public const UInt32 SE_PRIVILEGE_ENABLED = 0x00000002; + public const UInt32 SE_PRIVILEGE_REMOVED = 0x00000004; + public const UInt32 SE_PRIVILEGE_USED_FOR_ACCESS = 0x80000000; + + [StructLayout(LayoutKind.Sequential)] + public struct TOKEN_PRIVILEGES + { + public UInt32 PrivilegeCount; + public LUID Luid; + public UInt32 Attributes; + } + + [StructLayout(LayoutKind.Sequential)] + public struct LUID_AND_ATTRIBUTES + { + public LUID Luid; + public UInt32 Attributes; + } + + [DllImport("advapi32.dll", SetLastError = true)] + [return: MarshalAs(UnmanagedType.Bool)] + static extern bool AdjustTokenPrivileges( + IntPtr TokenHandle, + [MarshalAs(UnmanagedType.Bool)]bool DisableAllPrivileges, + ref TOKEN_PRIVILEGES NewState, + UInt32 Zero, + IntPtr Null1, + IntPtr Null2); + + /// + /// Ìåíÿåò ïðèâèëåãèþ + /// + /// ID ïðîöåññà + /// Ïðèâèëåãèÿ + public static void SetPrivilege( + IntPtr PID, + string privilege) + { + IntPtr hToken; + LUID luidSEDebugNameValue; + TOKEN_PRIVILEGES tkpPrivileges; + + if (!OpenProcessToken(PID, TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, out hToken)) + { + throw new Exception("Ïðîèçîøëà îøèáêà ïðè âûïîëíåíèè OpenProcessToken(). Êîä îøèáêè " + + Marshal.GetLastWin32Error()); + } + + if (!LookupPrivilegeValue(null, privilege, out luidSEDebugNameValue)) + { + CloseHandle(hToken); + throw new Exception("Ïðîèçîøëà îøèáêà ïðè âûïîëíåíèè LookupPrivilegeValue(). Êîä îøèáêè " + + Marshal.GetLastWin32Error()); + } + + tkpPrivileges.PrivilegeCount = 1; + tkpPrivileges.Luid = luidSEDebugNameValue; + tkpPrivileges.Attributes = SE_PRIVILEGE_ENABLED; + + if (!AdjustTokenPrivileges(hToken, false, ref tkpPrivileges, 0, IntPtr.Zero, IntPtr.Zero)) + { + throw new Exception("Ïðîèçîøëà îøèáêà ïðè âûïîëíåíèè LookupPrivilegeValue(). Êîä îøèáêè :" + + Marshal.GetLastWin32Error()); + } + CloseHandle(hToken); + } + } + + internal class FileMappingClient + { + internal const uint ViewOffset = 0; + internal const uint ViewSize = 15 * 1024; + private bool connected = false; + public bool Connected + { + get { return connected; } + } + + private SafeFileMappingHandle hMapFile = null; + private IntPtr pView = IntPtr.Zero; + + /// + /// Global\\SampleMap + /// http://msdn.microsoft.com/en-us/library/aa366537.aspx + /// + /// + public void Connect(string FullMapName) + { + try { PrivilegeManager.SetPrivilege(Process.GetCurrentProcess().Handle, PrivilegeManager.SE_CREATE_GLOBAL_NAME); } catch { }; + + try + { + hMapFile = NativeMethod.OpenFileMapping( + FileMapAccess.FILE_MAP_READ_ACCESS, // Read access + false, // Do not inherit the name + FullMapName // File mapping name + ); + + if (hMapFile.IsInvalid) + { + connected = false; + hMapFile.Close(); + return; + }; + + pView = NativeMethod.MapViewOfFile( + hMapFile, // Handle of the map object + FileMapAccess.FILE_MAP_READ_ACCESS, // Read access + 0, // High-order DWORD of file offset + ViewOffset, // Low-order DWORD of file offset + ViewSize // Byte# to map to view + ); + + if (pView == IntPtr.Zero) throw new Win32Exception(); + + connected = true; + } + catch (Exception ex) + { + Console.WriteLine("The process throws the error: {0}", ex.Message); + }; + } + + public string ReadData() + { + if (connected) + return Marshal.PtrToStringUni(pView); + else + return null; + } + + public void Close() + { + if (hMapFile != null) + { + if (pView != IntPtr.Zero) + { + NativeMethod.UnmapViewOfFile(pView); + pView = IntPtr.Zero; + } + hMapFile.Close(); + hMapFile = null; + }; + connected = false; + } + + + #region Native API Signatures and Types + + /// + /// Access rights for file mapping objects + /// http://msdn.microsoft.com/en-us/library/aa366559.aspx + /// + [Flags] + public enum FileMapAccess + { + FILE_MAP_COPY = 0x0001, + FILE_MAP_WRITE = 0x0002, + FILE_MAP_READ = 0x0004, + SECTION_MAP_EXECUTE = 0x0008, + SECTION_EXTEND_SIZE = 0x0010, + FILE_MAP_ALL_ACCESS = 0x000F001F, + FILE_MAP_READ_ACCESS = 0x000F000C + } + + + /// + /// Represents a wrapper class for a file mapping handle. + /// + [SuppressUnmanagedCodeSecurity, + HostProtection(SecurityAction.LinkDemand, MayLeakOnAbort = true)] + internal sealed class SafeFileMappingHandle : SafeHandleZeroOrMinusOneIsInvalid + { + [SecurityPermission(SecurityAction.LinkDemand, UnmanagedCode = true)] + private SafeFileMappingHandle() + : base(true) + { + } + + [SecurityPermission(SecurityAction.LinkDemand, UnmanagedCode = true)] + public SafeFileMappingHandle(IntPtr handle, bool ownsHandle) + : base(ownsHandle) + { + base.SetHandle(handle); + } + + [ReliabilityContract(Consistency.WillNotCorruptState, Cer.Success), + DllImport("kernel32.dll", CharSet = CharSet.Auto, SetLastError = true)] + [return: MarshalAs(UnmanagedType.Bool)] + private static extern bool CloseHandle(IntPtr handle); + + protected override bool ReleaseHandle() + { + return CloseHandle(base.handle); + } + } + + + /// + /// The class exposes Windows APIs used in this code sample. + /// + [SuppressUnmanagedCodeSecurity] + internal class NativeMethod + { + /// + /// Opens a named file mapping object. + /// + /// + /// The access to the file mapping object. This access is checked against + /// any security descriptor on the target file mapping object. + /// + /// + /// If this parameter is TRUE, a process created by the CreateProcess + /// function can inherit the handle; otherwise, the handle cannot be + /// inherited. + /// + /// + /// The name of the file mapping object to be opened. + /// + /// + /// If the function succeeds, the return value is an open handle to the + /// specified file mapping object. + /// + [DllImport("kernel32.dll", CharSet = CharSet.Auto, SetLastError = true)] + public static extern SafeFileMappingHandle OpenFileMapping( + FileMapAccess dwDesiredAccess, bool bInheritHandle, string lpName); + + + /// + /// Maps a view of a file mapping into the address space of a calling + /// process. + /// + /// + /// A handle to a file mapping object. The CreateFileMapping and + /// OpenFileMapping functions return this handle. + /// + /// + /// The type of access to a file mapping object, which determines the + /// protection of the pages. + /// + /// + /// A high-order DWORD of the file offset where the view begins. + /// + /// + /// A low-order DWORD of the file offset where the view is to begin. + /// + /// + /// The number of bytes of a file mapping to map to the view. All bytes + /// must be within the maximum size specified by CreateFileMapping. + /// + /// + /// If the function succeeds, the return value is the starting address + /// of the mapped view. + /// + [DllImport("Kernel32.dll", CharSet = CharSet.Auto, SetLastError = true)] + public static extern IntPtr MapViewOfFile( + SafeFileMappingHandle hFileMappingObject, + FileMapAccess dwDesiredAccess, + uint dwFileOffsetHigh, + uint dwFileOffsetLow, + uint dwNumberOfBytesToMap); + + + /// + /// Unmaps a mapped view of a file from the calling process's address + /// space. + /// + /// + /// A pointer to the base address of the mapped view of a file that + /// is to be unmapped. + /// + /// + [DllImport("Kernel32.dll", CharSet = CharSet.Auto, SetLastError = true)] + [return: MarshalAs(UnmanagedType.Bool)] + public static extern bool UnmapViewOfFile(IntPtr lpBaseAddress); + } + + #endregion + } + + internal class FileMappingServer + { + private SafeFileMappingHandle hMapFile = null; + private IntPtr pView = IntPtr.Zero; + + private const string FullMapName = "Global\\dRSSThreads"; + private const uint MapSize = 65536; + private const uint ViewOffset = 0; + private const uint ViewSize = 15 * 1024; + + private bool connected = false; + public bool Connected { get { return connected; } } + + public void Connect() + { + try { PrivilegeManager.SetPrivilege(Process.GetCurrentProcess().Handle, PrivilegeManager.SE_CREATE_GLOBAL_NAME); } catch { }; + + try + { + SECURITY_ATTRIBUTES sa = SECURITY_ATTRIBUTES.Empty; + hMapFile = NativeMethod.CreateFileMapping(INVALID_HANDLE_VALUE, ref sa, FileProtection.PAGE_READWRITE, 0, MapSize, FullMapName); + + if (hMapFile.IsInvalid) throw new Win32Exception(); + + //IntPtr sidPtr = IntPtr.Zero; + //SECURITY_INFORMATION sFlags = SECURITY_INFORMATION.Owner; + //System.Security.Principal.NTAccount user = new System.Security.Principal.NTAccount("P1R4T3\\Harris"); + //System.Security.Principal.SecurityIdentifier sid = (System.Security.Principal.SecurityIdentifier)user.Translate(typeof(System.Security.Principal.SecurityIdentifier)); + //ConvertStringSidToSid(sid.ToString(), ref sidPtr); + SetNamedSecurityInfoW(FullMapName, SE_OBJECT_TYPE.SE_KERNEL_OBJECT, SECURITY_INFORMATION.Dacl, IntPtr.Zero, IntPtr.Zero, IntPtr.Zero, IntPtr.Zero); + + pView = NativeMethod.MapViewOfFile(hMapFile, FileMapAccess.FILE_MAP_ALL_ACCESS, 0, ViewOffset, ViewSize); + if (pView == IntPtr.Zero) throw new Win32Exception(); + connected = true; + byte[] bMessage = Encoding.Unicode.GetBytes("BEGINS" + '\0'); + Marshal.Copy(bMessage, 0, pView, bMessage.Length); + } + catch (Exception ex) + { + XMLSaved.Add2SysLog(ex.Message); + }; + } + + public void WriteData(RouteThreaderInfo message) + { + if (connected) + { + byte[] bMessage = Encoding.Unicode.GetBytes(XMLSaved.Save(message) + '\0'); + Marshal.Copy(bMessage, 0, pView, bMessage.Length); + }; + } + + public void Close() + { + if (hMapFile != null) + { + if (pView != IntPtr.Zero) + { + NativeMethod.UnmapViewOfFile(pView); + pView = IntPtr.Zero; + }; + hMapFile.Close(); + hMapFile = null; + }; + connected = false; + } + + #region Native API Signatures and Types + + [DllImport("advapi32.dll", CharSet = CharSet.Unicode)] + private static extern uint SetNamedSecurityInfoW(String pObjectName, SE_OBJECT_TYPE ObjectType, SECURITY_INFORMATION SecurityInfo, IntPtr psidOwner, IntPtr psidGroup, IntPtr pDacl, IntPtr pSacl); + + [DllImport("Advapi32.dll", SetLastError = true)] + private static extern bool ConvertStringSidToSid(String StringSid, ref IntPtr Sid); + + private enum SE_OBJECT_TYPE + { + SE_UNKNOWN_OBJECT_TYPE = 0, + SE_FILE_OBJECT, + SE_SERVICE, + SE_PRINTER, + SE_REGISTRY_KEY, + SE_LMSHARE, + SE_KERNEL_OBJECT, + SE_WINDOW_OBJECT, + SE_DS_OBJECT, + SE_DS_OBJECT_ALL, + SE_PROVIDER_DEFINED_OBJECT, + SE_WMIGUID_OBJECT, + SE_REGISTRY_WOW64_32KEY + } + + [Flags] + private enum SECURITY_INFORMATION : uint + { + Owner = 0x00000001, + Group = 0x00000002, + Dacl = 0x00000004, + Sacl = 0x00000008, + ProtectedDacl = 0x80000000, + ProtectedSacl = 0x40000000, + UnprotectedDacl = 0x20000000, + UnprotectedSacl = 0x10000000 + } + + + [StructLayout(LayoutKind.Sequential)] + public struct SECURITY_ATTRIBUTES + { + public int nLength; + public IntPtr lpSecurityDescriptor; + public int bInheritHandle; + + public static SECURITY_ATTRIBUTES Empty + { + get + { + SECURITY_ATTRIBUTES sa = new SECURITY_ATTRIBUTES(); + sa.nLength = sizeof(int) * 2 + IntPtr.Size; + sa.lpSecurityDescriptor = IntPtr.Zero; + sa.bInheritHandle = 0; + return sa; + } + } + } + + /// + /// Memory Protection Constants + /// http://msdn.microsoft.com/en-us/library/aa366786.aspx + /// + [Flags] + public enum FileProtection : uint + { + NONE = 0x00, + PAGE_NOACCESS = 0x01, + PAGE_READONLY = 0x02, + PAGE_READWRITE = 0x04, + PAGE_WRITECOPY = 0x08, + PAGE_EXECUTE = 0x10, + PAGE_EXECUTE_READ = 0x20, + PAGE_EXECUTE_READWRITE = 0x40, + PAGE_EXECUTE_WRITECOPY = 0x80, + PAGE_GUARD = 0x100, + PAGE_NOCACHE = 0x200, + PAGE_WRITECOMBINE = 0x400, + SEC_FILE = 0x800000, + SEC_IMAGE = 0x1000000, + SEC_RESERVE = 0x4000000, + SEC_COMMIT = 0x8000000, + SEC_NOCACHE = 0x10000000 + } + + + /// + /// Access rights for file mapping objects + /// http://msdn.microsoft.com/en-us/library/aa366559.aspx + /// + [Flags] + public enum FileMapAccess + { + FILE_MAP_COPY = 0x0001, + FILE_MAP_WRITE = 0x0002, + FILE_MAP_READ = 0x0004, + SECTION_MAP_EXECUTE = 0x0008, + SECTION_EXTEND_SIZE = 0x0010, + FILE_MAP_ALL_ACCESS = 0x000F001F, + FILE_MAP_READ_ACCESS = 0x000F000C + } + + + /// + /// Represents a wrapper class for a file mapping handle. + /// + [SuppressUnmanagedCodeSecurity, + HostProtection(SecurityAction.LinkDemand, MayLeakOnAbort = true)] + internal sealed class SafeFileMappingHandle : SafeHandleZeroOrMinusOneIsInvalid + { + [SecurityPermission(SecurityAction.LinkDemand, UnmanagedCode = true)] + private SafeFileMappingHandle() + : base(true) + { + } + + [SecurityPermission(SecurityAction.LinkDemand, UnmanagedCode = true)] + public SafeFileMappingHandle(IntPtr handle, bool ownsHandle) + : base(ownsHandle) + { + base.SetHandle(handle); + } + + [ReliabilityContract(Consistency.WillNotCorruptState, Cer.Success), + DllImport("kernel32.dll", CharSet = CharSet.Auto, SetLastError = true)] + [return: MarshalAs(UnmanagedType.Bool)] + private static extern bool CloseHandle(IntPtr handle); + + protected override bool ReleaseHandle() + { + return CloseHandle(base.handle); + } + } + + + internal static readonly IntPtr INVALID_HANDLE_VALUE = new IntPtr(-1); + + + /// + /// The class exposes Windows APIs used in this code sample. + /// + [SuppressUnmanagedCodeSecurity] + internal class NativeMethod + { + /// + /// Creates or opens a named or unnamed file mapping object for a + /// specified file. + /// + /// + /// A handle to the file from which to create a file mapping object. + /// + /// + /// A pointer to a SECURITY_ATTRIBUTES structure that determines + /// whether a returned handle can be inherited by child processes. + /// + /// + /// Specifies the page protection of the file mapping object. All + /// mapped views of the object must be compatible with this + /// protection. + /// + /// + /// The high-order DWORD of the maximum size of the file mapping + /// object. + /// + /// + /// The low-order DWORD of the maximum size of the file mapping + /// object. + /// + /// + /// The name of the file mapping object. + /// + /// + /// If the function succeeds, the return value is a handle to the + /// newly created file mapping object. + /// + [DllImport("Kernel32.dll", SetLastError = true)] + public static extern SafeFileMappingHandle CreateFileMapping( + IntPtr hFile, + ref SECURITY_ATTRIBUTES lpAttributes, + FileProtection flProtect, + uint dwMaximumSizeHigh, + uint dwMaximumSizeLow, + string lpName); + + + /// + /// Maps a view of a file mapping into the address space of a calling + /// process. + /// + /// + /// A handle to a file mapping object. The CreateFileMapping and + /// OpenFileMapping functions return this handle. + /// + /// + /// The type of access to a file mapping object, which determines the + /// protection of the pages. + /// + /// + /// A high-order DWORD of the file offset where the view begins. + /// + /// + /// A low-order DWORD of the file offset where the view is to begin. + /// + /// + /// The number of bytes of a file mapping to map to the view. All bytes + /// must be within the maximum size specified by CreateFileMapping. + /// + /// + /// If the function succeeds, the return value is the starting address + /// of the mapped view. + /// + [DllImport("Kernel32.dll", CharSet = CharSet.Auto, SetLastError = true)] + public static extern IntPtr MapViewOfFile( + SafeFileMappingHandle hFileMappingObject, + FileMapAccess dwDesiredAccess, + uint dwFileOffsetHigh, + uint dwFileOffsetLow, + uint dwNumberOfBytesToMap); + + + /// + /// Unmaps a mapped view of a file from the calling process's address + /// space. + /// + /// + /// A pointer to the base address of the mapped view of a file that + /// is to be unmapped. + /// + /// + [DllImport("Kernel32.dll", CharSet = CharSet.Auto, SetLastError = true)] + [return: MarshalAs(UnmanagedType.Bool)] + public static extern bool UnmapViewOfFile(IntPtr lpBaseAddress); + } + + #endregion + } + + internal class AnotherProcessMemory + { + private const int PROCESS_WM_READ = 0x0010; + private const int PROCESS_VM_WRITE = 0x0020; + private const int PROCESS_VM_OPERATION = 0x0008; + + [DllImport("kernel32.dll")] + private static extern IntPtr OpenProcess(int dwDesiredAccess, bool bInheritHandle, int dwProcessId); + + [DllImport("kernel32.dll", SetLastError = true)] + [return: MarshalAs(UnmanagedType.Bool)] + public static extern bool CloseHandle(IntPtr hObject); + + + [DllImport("kernel32.dll")] + private static extern bool ReadProcessMemory(int hProcess, int lpBaseAddress, byte[] lpBuffer, int dwSize, ref int lpNumberOfBytesRead); + + [DllImport("kernel32.dll", SetLastError = true)] + private static extern bool WriteProcessMemory(int hProcess, int lpBaseAddress, byte[] lpBuffer, int dwSize, ref int lpNumberOfBytesWritten); + + + private int _ProcessID = 0; + private IntPtr _ProcessHandle = IntPtr.Zero; + + public static int GetCurrentProcessId() { return Process.GetCurrentProcess().Id; } + + public AnotherProcessMemory(int ProcessID) + { + this._ProcessID = ProcessID; + } + + public AnotherProcessMemory(string ProcessName) + { + this._ProcessID = Process.GetProcessesByName(ProcessName)[0].Id; + } + + public void Open(System.IO.FileAccess mode) + { + if (mode == System.IO.FileAccess.Read) + _ProcessHandle = OpenProcess(PROCESS_WM_READ, false, _ProcessID); + else if (mode == System.IO.FileAccess.Write) + _ProcessHandle = OpenProcess(PROCESS_VM_WRITE | PROCESS_VM_OPERATION, false, _ProcessID); + else + _ProcessHandle = OpenProcess(PROCESS_WM_READ | PROCESS_VM_WRITE | PROCESS_VM_OPERATION, false, _ProcessID); + } + + public void Close() + { + if (IsOpen) + { + CloseHandle(_ProcessHandle); + _ProcessHandle = IntPtr.Zero; + }; + } + + public bool IsOpen + { + get + { + return _ProcessHandle != IntPtr.Zero; + } + } + + public bool Read(int BaseAddress, byte[] buffer, int bufferSize, ref int noOfBytesRead) + { + if (!IsOpen) + throw new Exception("Process is not opened!"); + return ReadProcessMemory((int)_ProcessHandle, BaseAddress, buffer, bufferSize, ref noOfBytesRead); + } + + public bool Write(int BaseAddress, byte[] buffer, int bufferSize, ref int noOfBytesWritten) + { + if (!IsOpen) + throw new Exception("Process is not opened!"); + return WriteProcessMemory((int)_ProcessHandle, BaseAddress, buffer, bufferSize, ref noOfBytesWritten); + } + + public bool Read(IntPtr BaseAddress, byte[] buffer, int bufferSize, ref int noOfBytesRead) + { + if (!IsOpen) + throw new Exception("Process is not opened!"); + return ReadProcessMemory((int)_ProcessHandle, (int)BaseAddress, buffer, bufferSize, ref noOfBytesRead); + } + + public bool Write(IntPtr BaseAddress, byte[] buffer, int bufferSize, ref int noOfBytesWritten) + { + if (!IsOpen) + throw new Exception("Process is not opened!"); + return WriteProcessMemory((int)_ProcessHandle, (int)BaseAddress, buffer, bufferSize, ref noOfBytesWritten); + } + } + + public class ItemInfo + { + public string fName = null; + public string fAddit = null; + public string fSub = null; + public bool fDef = false; + + public ItemInfo(string fName) + { + this.fName = fName; + } + + public ItemInfo(string fName, string fAddit) + { + this.fName = fName; + this.fAddit = fAddit; + } + + public ItemInfo(string fName, string fAddit, bool fDef) + { + this.fName = fName; + this.fAddit = fAddit; + this.fDef = fDef; + } + + public ItemInfo(string fName, string fAddit, string fSub) + { + this.fName = fName; + this.fAddit = fAddit; + this.fSub = fSub; + } + + public ItemInfo(string fName, string fAddit, string fSub, bool fDef) + { + this.fName = fName; + this.fAddit = fAddit; + this.fSub = fSub; + this.fDef = fDef; + } + + public override string ToString() + { + string res = ""; + if (String.IsNullOrEmpty(fAddit)) res = Path.GetFileName(fName); + else res = String.Format("{0} ({1})", Path.GetFileName(fName), fAddit); + if (!String.IsNullOrEmpty(fSub)) res += String.Format(" at {0}", fSub); + return res; + } + } + + [Serializable] + public class RouteThreaderInfo + { + public DateTime startedAt; + + public bool DynamicPool; + + public int MaxSolveTime; + public int MaxWaitTime; + + public int ObjectsUsed; + public int ObjectsIdle; + public int ThreadsAlive; + public int ThreadsCounted; + public int ThreadsMaxAlive; + + public string Protocol; + public string Area; + public string Mode; + public string GlobalRegionsCache; + public string ThreadRegionsCache; + + public string ObjectsData; + + public SvcConfig config; + public string confile; + } + + [Serializable] + public class SvcConfig + { + public int defPort = 7755; + public int defHTTP = 80; + + [XmlElement("http.authorization")] + public bool authorization = false; + [XmlElement("http.showhost")] + public bool http_showhost = false; + [XmlElement("http.showip")] + public bool http_showip = false; + [XmlElement("http.description")] + public string http_description = null; + [XmlElement("http.html")] + public string http_html = null; + } +} \ No newline at end of file diff --git a/SOLVER/RouteServiceState/Form1.resx b/SOLVER/RouteServiceState/Form1.resx new file mode 100644 index 0000000..d4a3a34 --- /dev/null +++ b/SOLVER/RouteServiceState/Form1.resx @@ -0,0 +1,3096 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 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 + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + 17, 17 + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + + + 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 + YwB0XWIAX2p1AGRkZABtZWoAbGpqAHZjZwB1ZGsAeGZtAHZtbwB5aW4Abm14AHxqcQBzc3MAcnF5AHp2 + eQB6enoAhlFmAJVdYgCDZmwAgWluAJdgZQCYYWYAkGdvAJtkagCfam8Agm1zAIZueQCVaHIAm2l2AIN2 + egCKdXsAgnx8AJJxeACbc3sAomdzAKJrcwCkbXgAqG97AKRxdwCmc3kAqXR9AKp4fgCIg34AF0+PABlW + nAAVXrEAIXPQABZ35gAifeUAgXyAAI19gACReoIAmX6KAKt1gACifIQArHqBALB8hgB+jZ8AKYHmADqJ + 5ABBit0AZ5/fAGyh3gB6qNwARY7iAEiR5QBRlOEAW5riAFCZ7QBgnOAAXKDuAGOh6QB+tPEAhoGFAImE + gwCGhooAjYWJAI2KjACXh4oAl5KLAJuVjgCVjpEAlpGUAJ2XkACbmJcAn5mcAK+AhQChgY8ArYSMAKGI + jgCwgYYAsoGJALaJjwCghZAApIuRAKiOlQCqjZgAtIaQALiGkAC6i5QAvY6YAKSelgCsk5kArZicALSS + nwC9kpgAo6CbAK2mnQCYnqYAo56hAKmdogC4l6IAt5uhALqcowClpacAqqOnAK2qpwCup6oAqqurALum + qgC7tKsAs66xALytsQCnsbsAtLW2ALyxswC+vbgAwJScAMOWoADEmqIAyJ6nAMGeqQDEpasAyqOrAMG5 + rwDHrbIAzKqxANGttADEubYA07C3ANWyuQDYtbwA2Li+AMvFvADRx7wA1cu/AJevyQCesMQAg63cAIux + 3ACUtdoAmLfaAJm42gCivNkAjbrtAIa48gDDvcAAy77BANq8wgC4x9cAlcDzAJvE8wCmxuoAu87iAKLJ + 9QCqzPMAr9D2ALnU8gDIxsYA3cDGANfOwgDZzsEA0sbIAN/EyQDSzM0A2cjMANrQwwDAy9cAytDWANnX + 1ADgxcsA4cnOAOTZzADjzNEA5tHVAOXd0wDo3tIA5NXYAOjV2QDh2tsA69rdAOvg0gDu5dkA8OTWAPDo + 3QDK3/cA7d3gANbi7gDN4fkA2un6AOPi4QDu4uQA5unsAOzr6wDx5ecA8+zjAPDm6ADy6eoA9vHqAPjz + 7QDn7PEA4e37AO7w8gDl8PwA6/P8APTz8gD59vIA+/j1APD2/ADz+P0A/Pv5AAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFItJSUjGBcXFRIVFSMtAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AABSJSUjGBcSEhcXFxsgJjQ0QUFCQTw3IRQXDw8XJQAAAAAAAAAAAAAAAAAAAAAAaxsbISEzQVd5hISE + oKKjpqqqrKysrKqjSYSpkFQaDw8YUgAAAAAAAAAAAAAAAACYhKapqaqqrKysrKysr6+vr87V1tnd2a+s + qlaqrKykeCYSAxUtAAAAAAAAAAAAAACsr6+vr9bY3d/l8PDt3M+9mo5zbmtSj/DVrIN8famsr6mJOhcG + AAAAAAAAAAAAAACsrK/OlHZzbWtram5udZWfsMvX29vXcSTfrKFFCBk9oKqsr5AeJQAAAAAAAAAAAACv + r6kDjLHR2/n9/f39+fHx8OLi2+Lb4iWsrKZWCAcHCDGCqqxVIwAAAAAAAAAAAACsr5EQ4uLi2/D9/f39 + /fHx8e7b4tvi4kukrKp8CAgHCAgJWayBIwAAAAAAAAAAAADZrJEX4tvb4uL5/f39/frx8fHh29vb4oZ/ + rKyDMjIyMjIySKyHIwAAAAAAAAAAAAC+1qYS4uLb2+Dj/f39/f316+zs4uLb4Kc/r6yEODIyMjIySKyJ + IwAAAAAAAAAAAAAA3awQ1+Dg4Nu3xvb29Pv2wcHCu2S21Ms0rKyERDIyMjIySayHJQAAAAAAAAAAAAAA + 5awbp+Lg4mRQW+T09Pb75MHBwWVQUF0dr6+ESjIyMjIySqyBJQAAAAAAAAAAAAAA6q9BcOLb1FFQUGf0 + 9PT7+8fBwbtbUFAMr6+gWTIyMjIyWax+JQAAAAAAAAAAAAAA6q+HJeLb11tQUFDF9PT0+/TCwcFpUFAN + r6ymVjIyMjIySqxvJQAAAAAAAAAAAAAA8K+oEuDi4rpRUFBi9PT7+/zowcHBZ1BMqK+qVjUyMjIyWax/ + JQAAAAAAAAAAAAAA1NmvD9fb2+LUwNTi7v39/P399+bIwVxOj6+sWTYyMjIyWaykLQAAAAAAAAAAAAAA + ANmvE7Lg29vi4tvb4vn5/f39/fLx9cVPVK+vWDgyMjIyWayRLQAAAAAAAAAAAAAAAN+sII24trW30tvi + 2+H9/f39/f3x8fHDJM6vfEQyMjIye6+ILQAAAAAAAAAAAAAAAO2sQU1QUFBQUFy22+Lu/f39/f368fLy + JNavg0gyMjIye6x/UgAAAAAAAAAAAAAAAO+sgAtQUFBQUFBQY9Ti+f39/f39+fHyLdmqhUkyMjIyfKyA + MAAAAAAAAAAAAAAAAN6vmAVQUFBQUFBQUFzU4/39/f39/fLya86solYyMjI1faxwAAAAAAAAAAAAAAAA + AOzKqgRguLZgW1BQUFBi2+79/f39/frxi72vpkk2MjIyfa9UAAAAAAAAAAAAAAAAAADWrBTL4uLi1F5Q + UFBQt+L5/f39/f3znI/Kqkk4MjIyhKxUAAAAAAAAAAAAAAAAAADZrxqZ29vb4tu1UFBQXNvj/f37+/v0 + tmrZqkZEMjIyhKxAAAAAAAAAAAAAAAAAAADdrDp04tvi2+LbW1BQUdTi7Pb09Pv85yvdr0lEMjIyiqw+ + AAAAAAAAAAAAAAAAAADlrHBA29vb29viUVBQUdTbYuT09Pb7/C7fr1hJMjIyoawpAAAAAAAAAAAAAAAA + AADqrZAk7uLb4tvSUFBQXOJgUGf09Pb7/G7crINJMjIyoqwlAAAAAAAAAAAAAAAAAADPr6YS+uLb4Nth + UFBQXttbUFDF+/39/ZPPrKFJMjIyo6wlAAAAAAAAAAAAAAAAAADqr6wG+fHiumFQUFBQ09JQUFBl+v39 + /cmUr6ZGNTIypqklAAAAAAAAAAAAAAAAAAAAzqwUxOhpUFBQUFBg4rdQUFC17v39/elz2alDRDIyqaUt + AAAAAAAAAAAAAAAAAAAAzqwgtOfnYlBQUGbb4rdQUFBg4vn9/flS3KpDSTIyqqQwAAAAAAAAAAAAAAAA + AAAA1aw/WufnyFFQtdvb4rpQUFBh4uH6/f0v5a1GSTI2rIcAAAAAAAAAAAAAAAAAAAAA2ayJIujn9MjU + 4uLb4NRbUFBQuuLu/f1s2a9YVjY4r20AAAAAAAAAAAAAAAAAAAAA3KypFfz6/Pru4tvg4uJeUFBQUbbU + +f2anq+DVjZHrEAAAAAAAAAAAAAAAAAAAAAAz6ysEPX6+vr64uLX4tvUUVBQUFBbaPbmPq+jRjh8rEAA + AAAAAAAAAAAAAAAAAAAAAK+vD+n6+vr68eLi1+LgwFBQUFBQULz0H6yqQ0iiqWoAAAAAAAAAAAAAAAAA + AAAAAK+vHI76+vr6+u7i4tvi4tJcUFBQUFGzFK+sRnypiAAAAAAAAAAAAAAAAAAAAAAAAKyvkAGV6dTU + 1MmajIZxbktSDgsLCgoEka+shTimcgAAAAAAAAAAAAAAAAAAAAAAAMqsrJEmJCYmLCw/U1V6gIeRkaWp + qayvrKyvpkOqAAAAAAAAAAAAAAAAAAAAAAAAAO/cr6ysr6yvrKyvrK6srqyvr6yvr6+vr9WvrXyeAAAA + AAAAAAAAAAAAAAAAAAAAAADt7+rl3eXl5erl6u3j7e3f7e3q7+/v7+/v2c0AAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA////////AAD///////8AAP///////wAA////////AAD//+AAf/8AAP8A + AAAH/wAA/AAAAAD/AAD4AAAAAD8AAPgAAAAAPwAA+AAAAAAfAAD4AAAAAB8AAPgAAAAAHwAA+AAAAAAf + AAD4AAAAAB8AAPwAAAAAHwAA/AAAAAAfAAD8AAAAAB8AAPwAAAAAHwAA/AAAAAAfAAD8AAAAAB8AAP4A + AAAAHwAA/gAAAAAfAAD+AAAAAB8AAP4AAAAAHwAA/gAAAAA/AAD+AAAAAD8AAP8AAAAAPwAA/wAAAAA/ + AAD/AAAAAD8AAP8AAAAAPwAA/wAAAAA/AAD/AAAAAD8AAP8AAAAAPwAA/4AAAAA/AAD/gAAAAD8AAP+A + AAAAfwAA/4AAAAB/AAD/gAAAAH8AAP+AAAAAfwAA/8AAAAB/AAD/wAAAAP8AAP/AAAAA/wAA/8AAAAH/ + AAD/wAAAAf8AAP/gAAAD/wAA////////AAD///////8AAP///////wAAKAAAACAAAABAAAAAAQAIAAAA + AAAABAAAAAAAAAAAAAAAAQAAAAEAAAAAAABqNFUAbDZVADVPcABKSUkATk5OAFRNTwBYTE4AVVJTAF9b + XABdXV0AeEJbAGFUWwBhWVsAZ1tdAGxcXwBzWF0Acl1hAHhcYwBhYWEAZGRkAG5lZwBoYWoAbmltAG9v + bwB6YmcAc2VrAHRtbQB6aW8AdGxwAHJycgB2cHAAe3V2AH97dwB7e3sAfX19AIVQZgCVXWIAl2BlAJxm + awCeaW4Ag2twAIJudQCFcXUAjXJ3AINzegCEe3oAi3p9AJF6fwCjbXQApm95AKRwdwClcXgAqnN+AKp1 + fwAaVJYAGFacACBYnAAWX7IAIFyhAExnjwB+foAAG2zIADN+1QAWduYAF3jmABp55gAhfeUAkXuBAJl5 + gACtd4IArniEALB6hgCxfIcAdo+uACyC5AAmgOgAZp/fAGqh3gB0pt4AeqndAEGN4gBEkusAS5ToAFGU + 4QBbmeAAU5vtAGGc4ABypeAAeLDxAJOBhACbhYoAlY+JAJOMjQCdjI8Ag4+dAJeMkQCIkpwAmpGUAJyV + lgCemZMAkpGYAKCHjQCugY0AqoaNALKBiQC0gYsAtoONALaIjgCjhpEAooqQAKqPlgC3ipAAuYuTAL6P + mQCqk5cArZKaAKafngCtmJwAsZWcALqSmgC9kZkAtJmeAKKeoAC0l6EAtpmhALiaogC8m6UAu5ylAKWh + owCpoqQAqqSnAK6nqgCpqakAramrAK+rrQCwqaAAt6SpAL2hqAC0q64AuLGnALOysgC1tLUAvbm2AMCU + nADCmJ8Aw5ihAMSZogDBnKMAxZ2jAMabpADHnqYAyJ6mAMChqADBpasAxqWtAMmhqQDMpawAzqivAMC4 + rgDLq7EAzqiwAMissgDNrLMA0KqxANGsswDRrrUAwbW5AMW1uADHvr8A1LC3ANWyuQDXtr0A2LS7ANi2 + vQDYuL8AysG2AJ6wxACStdsAmLfaAJy52gClvtkAqL/ZAJ+/4wCUvewAjbzzANu8wgDavsQA3L/EALvJ + 1wCyxNgAlcDzALDN7wC+0eUAp8z2AKvM8wCz0vQAzcfAAM7AxADOy8YA1sLGANDGyADew8gA2sTJAN7E + ygDeys4A2szPANrSyADCy9UAyM/WAMzR1gDb1dYA3trUANTZ3gDd29oA4cfMAOHIzQDl2s0A48zRAOTN + 0gDlz9QA5tLWAOPd0wDp3tEA59TYAOjV2ADp2dwA7OHTAO7l2QDx59sA8OjeAMbZ7wDV3+kAwtv5AOve + 4QDZ4eoAzOH5ANPj9gDe6/kA5OPhAOnn5QDu5ugA8+zjAPHr6wD28eoA+PPtAOLt+wDr8fYA6/P8APHz + 9AD59vIA+/n2APL1+gD1+PsA/fv5AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAIhgUCgoKDQ4OERkSEAcIBRQAAAAAAAAAAAAAAAArKSxFaHiSkpidpKStq6qhSKF/KQYF + GAAAAAAAAAAAqKutusrY2+Hhzcaoi4SDydekaZKrm20MBQAAAAAAAADKq4ljdYOGho2Px8/Z399cqKs2 + AiRopKsrPQAAAAAAAMirDePj5P7+/vr09OPj49lEq3ECAgILkn0iAAAAAAAAqa8V4+Pj8v7+/vX08uPj + 4y+rkCYmJiZpgCIAAAAAAAAA2Brj4+PQ7fj4+MPAt7XeWquSJyYmJnF/PQAAAAAAAADbRLDj0UFS7u74 + 6b+5TEI8r5IzJiUmbH0AAAAAAAAAAOF9ZOO1QUG57vb4w79ZQTm6nTMmJSZxdAAAAAAAAAAA6qoh499O + UVj4/P34w79WOqKqMyYlJXF/AAAAAAAAAADTqxvj4+Pj4+b+/v778+c/dqs2JiUmcZsAAAAAAAAAAAC6 + FlhXTbLU4/T+/v769Ohgq2klJSZ5egAAAAAAAAAAAMoaQUFBQUO04/7+/v719WOtcSYmJXh6AAAAAAAA + AAAA20Q+Q0JBQUGy8v7+/v70Y8pxJyYmkHMAAAAAAAAAAADdd2Tj3rNCQkHR9P7+/vll25AzJiWQbgAA + AAAAAAAAAOKhLuPj471CQU7k/vj4+ErbkjMlJZJbAAAAAAAAAAAAya0Y4+Pj40NBVd+47vb40aihMyUm + kloAAAAAAAAAAADxqx/y4+O9QUFQskHE+Pz3gqQyJiWdLgAAAAAAAAAAAACvGvrkvktBQdFRQVP+/v6B + ujYmJZ0tAAAAAAAAAAAAALopwcNBQUFP40NBVfP+/oHKSScmpCAAAAAAAAAAAAAAvFux7FlBUOPjS0FR + 4/v+gttpMyakLgAAAAAAAAAAAADXm2Hu9tXj4+NOQkK05f6NyngzJ6sAAAAAAAAAAAAAAMiqPfv7+uPj + 49JBQkFUw+t0nDM0igAAAAAAAAAAAAAAzasY+v779d/j47VBQUJC7C2qNnhbAAAAAAAAAAAAAAAAqx+E + 6u/Wxp+MiF87ODcDdKs2cmAAAAAAAAAAAAAAAACtqm1EW1tuc3d/m5uhoaurq5CSAAAAAAAAAAAAAAAA + APPh29vb293b3d3d3eHi4urqugAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/////////////////gAA//AAAB/gAAAP4AAAB+AA + AAfgAAAH8AAAB/AAAA/wAAAP8AAAD/AAAA/4AAAP+AAAD/gAAA/4AAAP+AAAD/gAAA/4AAAP/AAAD/wA + AA/8AAAP/AAAH/wAAB/8AAAf/gAAH/4AAD/+AAB///////////8oAAAAGAAAADAAAAABAAgAAAAAAEAC + AAAAAAAAAAAAAAABAAAAAQAAAAAAAGo0VQBzPVoAVlRVAFlTVQBhVVoAaVZaAGpdYQBuXGAAYmBgAGli + ZABsaGkAb29vAHR0dAB8cXYAdXJ/AHh4eACNWWwAlV1iAJZfZACYYWYAmmNpAJ5pbgCda3kAh35/AKBq + cAChbXIAo2x1AKNwdQClcngAp3V7AKh0ewCqdH0Aqnh+AIiCfgA5ZpsAHV6pABhfsAAYY7oAIWGtAD1z + sQAfbMQAFnfmABd45gAbeeYAHHrmAB985gAgfOYAjnqAAIx+ggCTe4EAmn+EAK12gQCtfIIAqXuIALF/ + hwB8h50AKILoADSG5AA7iuMAPovjADeK6gBind8AcqXeAHmo3QBDjeIAVJbhAFya4ABenucAYJvgAHSr + 6wB4r+8AfrTxAI+CggCLh4cAkYiFAJWEiACag4kAloyJAJiWlwCghY4ApoWMAK+DjwCwgYcAs4CKALWH + jQCki5EAooyRAKaMkgCpjpUAuIeSALmJkgC9jpcAvo+ZAKGQkQCllpUAq5CWAKGblACqk5gArZieAKqc + nwC7kJYAt5ObALKWnACzmJ4AqqKfALeaoAC4mqMAuZyjALubpQC7n6UAv5+oAJ+nrwCZoLEAraaoALKp + qwC0qa0AsbCtALqyrQCoqrQAp625ALevsgC7rrEAvq+zAL21sAC7sbQAvri5AMCTnADEmaIAxpukAMSc + pADInqcAxaCmAMGiqQDDpqwAyaCpAM2lrQDIqK8AwK+zAMirsQDNqbEAzq60ANGrswDRrbUAzrC2AMa+ + swDAu7kAyru+AM24vQDRsrgA1bK5ANa0uwDYt70A2Li+AM/HuwCDrdwAibDdAJK02wCVttsAnbraAKi/ + 2QCKs+EAmbzkAI+98QDLvsEA2brAANy/xQC6wMYArsHWALnI1wCzxdgAvsvZAJPA8wCWwfMAscvnAKfL + 9QCx0fcAutTyALzV8gDNwMMAyMnLANfBxgDdwMYA2sTIAMDL1wDIz9YAy9DWANnX1ADT19oA4MbLAOHH + zADg1skA4szQAOHR1ADi3NMA597TAOnf0gDk2dsA4d/cAOrg0gDs4dIA7ePXAPDn2wDw59wA8OjeAN/n + 7wDM4foA1Ob6ANzq+wDh5OcA6uDiAOzm5wDv6OAA6ejnAPLr4QDw7OcA8ebpAPLo6gDz6uwA9OvtAPDv + 7AD07O0A8/DrAPbw6QD48+0A+fTvAOjv9wDg7fwA9e7wAO/x9ADl8PwA7vT6AOvz/QDt9P0A+fXxAPr4 + 9QD8+vcA9Pf6APH2/AD8+vgA/fz6AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAQDAwHCgcHBgQJDQAAAAAAAAAAADIzUWaCg4iPmKa2j1qMUQUDAAAAAAAA + pJeUe3t9fn6SfXZplIgXUoxrBwAAAAAAs4wiv9Tv7+rfycnJXowRAQI2bQAAAAAAAJBhycnh7+/f18nE + X5ceEhIWhQAAAAAAAL1OxLlE0ObOrEY+OJc3EhIWbwAAAAAAAMBJyZsqSNDosKw9J5hbEhIZbQAAAAAA + AMEwxLs/nOXt7bKjKYt/EhIZhQAAAAAAAMVNp6m6ycrv7+/fomOCFRMZhgAAAAAAANNrJioqO7jf7+/r + 4WOCFxIdbgAAAAAAAACVI0I6Ki+r6+/v4XOPFhIdaAAAAAAAAAC2S8nEQCo7zO/t6HGZGRQeYgAAAAAA + AAC9ScnExC8twrLj6HjAHhMhVwAAAAAAAAC3MczJqis6nznP7bS2VBI1TAAAAAAAAADBMc2cLyqdRSqu + 79V7WxRTMQAAAAAAAADFWaivLUDJQyqg4etzXRZUSQAAAAAAAAAAiHDi0cnEnSs7vO97ghllSgAAAAAA + AAAAl0/r6srJxEEqLUZ3jxmFAAAAAAAAAAAAlw7F18aakXUoJSQPlzRmAAAAAAAAAAAAwIxfV1lma4WL + jJeZmWVyAAAAAAAAAAAAANnY0tnZ2dnlAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP// + /wD///8A/gA/AOAADwDAAAcAwAAHAOAABwDgAAcA4AAHAOAABwDgAAcA4AAHAPAABwDwAAcA8AAHAPAA + BwDwAAcA8AAHAPgABwD4AA8A+AAPAPgADwD8A/8A////ACgAAAAQAAAAIAAAAAEACAAAAAAAAAEAAAAA + AAAAAAAAAAEAAAABAAAAAAAAcjxZAGxpagB0amwAeWluAHtydAB4dnYAlV1iAJdgZQCbZGoAnWZsAJ9o + bwCYaXwAgXx9AKNtdACmcnkAJ2y+AFl5pwAZaMMAFnfnABd45gAaeeYAr32FAH6FngBOgLkAfZy/AC+G + 6QAyheQANofkADiI4wA9i+MAWJTZAGef3wBpoN8AfKreAEuW6wBwrPAAioiJAJWKjACZiIsAooqPALWD + jACljpQAqI2SAKuPlAC3h5AAp5OWAKeTmACjnZ8As5OYALSQmAC1lZwAuJGZALiWnAC8l54AsZieALaZ + nwC2mqEAtpyiALOmpAC4oqcAs6qiAL2kqgC7r6oAva6yAMCUnADDmaEAw6KpAMqkrADMpKwAwaqwAMeq + sADFrrMAyquxANGsswDKsrcAx763ANCzuQDRt7wA1re9ANG4vgDVub8A0Me7ANTLvgCFrdwAi7HcALa2 + wgC4vcIAorzaAKe/2gDYv8QAtszmALvX+ADOzM0A1sHFANvHygDexcoA0MvIANHOzgDDzNYAx8/YAMrQ + 1gDX1dUA39vWANvc2wDhyc4A4NvUAOPd1gDo39QA5dfaAOPf2QDq4NIA7OHSAM/X4gDS3uwAy93yANbl + 9gDr4eMA6unnAO/u6wDs7e8A8engAPHv7AD28OkA4+/8AO7z+QDp8v0A8vLyAPj39ADy9fgA9ff6APb4 + +wD8+vgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACUNBQMFAAAAAAAAACs4SU9PRkZR + QTgEAgAAAAA4TGFmZ2xsO0IBDDMAAAAAL2xufYFyZD9FCAdBAAAAAEZTICR8XCQQSgoHMgAAAABfO2RY + f4NzH0YLB0EAAAAAbREeIWiEhHc8Dwc4AAAAAHUXVB4bdoSAQBYHMQAAAAAALmxnFVh0fVYtBysAAAAA + ACp5WBRUI4FhQQcqAAAAAAA6WxoiVRt7YkUKJwAAAAAAT1d4bGMVInFDDiYAAAAAAF4wd2tTGRIYOikA + AAAAAAAATz5GS1FeYGk+AAAAAAAAAAAAAAAAAAAAAAAAAP//AAD8HwAAwAMAAMADAADAAwAAwAMAAMAD + AADAAwAAwAMAAOADAADgAwAA4AMAAOADAADgBwAA8AcAAP//AAAoAAAAgAAAAAABAAABACAAAAAAAAAI + AQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAEAAAABAAAAAgAAAAIAAAADAAAAAwAA + AAMAAAADAAAAAwAAAAMAAAADAAAAAwAAAAIAAAABAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAEAAAABAAAAAgAAAAIAAAADAAAAAwAAAAMAAAAEAAAABQAAAAYAAAAGAAAABwAA + AAgAAAAIAAAACQAAAAoAAAALAAAADAAAAA0AAAANAAAADgAAAA4AAAAOAAAADgAAAA0AAAANAAAACwAA + AAkAAAAHAAAABQAAAAMAAAACAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAA + AAEAAAACAAAAAgAAAAMAAAADAAAABAAAAAQAAAAFAAAABgAAAAcAAAAIAAAACAAAAAkAAAALAAAADAAA + AA0AAAAOAAAAEAAAABEAAAASAAAAEwAAABUAAAAWAAAAFwAAABkAAAAaAAAAHAAAAB0AAAAfAAAAIAAA + ACEAAAAiAAAAIgAAACIAAAAiAAAAIQAAACAAAAAdAAAAGQAAABUAAAARAAAADQAAAAkAAAAIAAAABgAA + AAQAAAADAAAAAwAAAAIAAAABAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAQAAAAEAAAACAAAAAwAA + AAMAAAADAAAABAAAAAUAAAAGAAAABwAAAAgAAAAIAAAACgAAAAsAAAANAAAADQAAAA8AAAAQAAAAEgAA + ABIAAAAUAAAAFgAAABcAAAAZAAAAGwAAAB0AAAAeAAAAIQAAACIAAAAkAAAAJwAAACgAAAAqAAAALAAA + AC4AAAAwAAAAMgAAADQAAAA2AAAAOAAAADoAAAA8AAAAPQAAAD4AAAA+AAAAPwAAAD4AAAA9AAAAOwAA + ADcAAAAyAAAALAAAACUAAAAfAAAAGgAAABYAAAATAAAAEgAAABAAAAANAAAACwAAAAgAAAAFAAAAAwAA + AAIAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAABAAAAAgAAAAIAAAADAAAAAwAAAAMAAAAEAAAABQAA + AAYAAAAGAAAABwAAAAgAAAAJAAAACgAAAAwAAAANAAAADgAAABAAAAARAAAAEgAAABQAAAAWAAAAFwAA + ABkAAAAbAAAAHQAAAB8AAAAhAAAAIwAAACUAAAAnAAAAKQAAACsAAAAtAAAAMAAAADIAAAA0AAAANwAA + ADoAAAA8AAAAPwAAAEEAAABEAAAARgAAAEkAAABMAAAATgAAAFEAAABTAAAAVgAAAFkAAABbAAAAXgAA + AGEAAABiAAAAYwAAAGQAAABkAAAAYwAAAGEAAABfAAAAWwAAAFMAAABLAAAAQgAAADoAAAAyAAAALgAA + ACoAAAAnAAAAJAAAACAAAAAcAAAAFwAAABIAAAANAAAACQAAAAYAAAADAAAAAgAAAAEAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAgAAAAMAAAAFAAAABwAA + AAgAAAAKAAAADAAAAA0AAAAOAAAADwAAABEAAAASAAAAEwAAABUAAAAXAAAAGAAAABoAAAAcAAAAHgAA + ACAAAAAiAAAAJAAAACcAAAApAAAAKwAAAC0AAAAwAAAAMgAAADUAAAA3AAAAOwAAAD0AAABAAAAAQgAA + AEUAAABIAAAASwAAAE0AAABRAAAAVAAAAFYAAABaAAAAXQAAAGEAAABkAAAAZwAAAGsAAABuAAAAcQAA + AHQAAAB3AAAAegAAAHwAAACAAAAAggAAAIUAAACHAAAAiQAAAIoAAACLAAAAiwAAAIsAAACLAAAAigAA + AIcAAACCAAAAewAAAHEAAABnAAAAXQAAAFQAAABOAAAASQAAAEYAAABBAAAAPAAAADYAAAAuAAAAJwAA + ACAAAAAZAAAAEwAAAA0AAAAJAAAABgAAAAMAAAACAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAQAAAAMAAAAGAAAACgAAAA8AAAATAAAAGAAAABwAAAAeAAAAIAAAACIAAAAkAAAAJgAA + ACcAAAAqAAAALAAAAC4AAAAxAAAANAAAADcAAAA5AAAAPAAAAD8AAABBAAAARQAAAEcAAABLAAAATQAA + AFEAAABUAAAAVwAAAFsAAABeAAAAYgAAAGYAAABoAAAAawAAAHAAAABzAAAAdQAAAHkAAAB9AAAAgAAA + AIMAAACGAAAAiQAAAIwAAACPAAAAkQAAAJQAAACWAAAAmQAAAJsAAACdAAAAnwAAAKIAAACkAAAApQAA + AKcAAACpAAAAqgAAAKoAAACrAAAAqwAAAKoAAACqAAAAqAAAAKQAAACeAAAAlQAAAIwAAACDAAAAewAA + AHUAAABwAAAAbAAAAGYAAABgAAAAWAAAAE4AAABFAAAAOwAAADIAAAAoAAAAIAAAABgAAAASAAAADAAA + AAgAAAAEAAAAAgAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAADAAAACAAAAA4AAAAXAAAAIAAA + ACgAAAAwAAAANgAAADkAAAA8AAAAPwAAAEEAAABEAAAARgAAAEkAAABMAAAATwAAAFIAAABWAAAAWQAA + AFwAAABhAAAAZAAAAGcAAABrAAAAbwAAAHIAAAB1AAAAegAAAH0AAACAAAAAhAAAAIcAAACKAAAAjQAA + AJAAAACSAAAAlQAAAJgAAACaAAAAnQAAAJ8AAACiAAAApAAAAKcAAACpAAAAqwAAAK0AAACvAAAAsQAA + ALMAAAC0AAAAtwAAALkAAAC5AAAAuwAAAL0AAAC/AAAAvwAAAMAAAADBAAAAwgAAAMIAAADCAAAAwgAA + AMEAAAC/AAAAvQAAALgAAACyAAAAqwAAAKQAAACeAAAAmgAAAJYAAACSAAAAjQAAAIcAAAB/AAAAdQAA + AGoAAABeAAAAUgAAAEYAAAA7AAAAMAAAACUAAAAdAAAAFAAAAA4AAAAJAAAABQAAAAMAAAACAAAAAQAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAwAAAAgAAAAPAAAAGwAAACkAAAA4AAAARgAAAFEAAABYAAAAXQAAAGEAAABkAAAAZwAA + AGoAAABtAAAAcAAAAHQAAAB3AAAAewAAAH8AAACCAAAAhQAAAIkAAACMAAAAjwAAAJEAAACVAAAAlwAA + AJoAAACdAAAAoAAAAKMAAAClAAAAqAAAAKoAAACsAAAArgAAALAAAACyAAAAtAAAALYAAAC4AAAAuQAA + ALwAAAC+AAAAvwAAAMAAAADCAAAAxAAAAMQAAADGCQgIyRMSEs0TERLNExERziYlJdJEQEHZVlBR3ldP + Ud5WTE/fVEpM31JGSd9aUVPgVEhL31RJTN9PSUrdGhgZ1AAAAM4AAADNAAAAygAAAMYAAADCAAAAvQAA + ALkAAAC1AAAAswAAALAAAACsAAAAqAAAAKEAAACZAAAAkAAAAIUAAAB4AAAAawAAAF0AAABQAAAAQgAA + ADYAAAAqAAAAIQAAABcAAAARAAAACwAAAAcAAAADAAAAAgAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAFAAAADQAAABoAAAAsAAAAQgAA + AFcAAABpAAAAdwAAAIAAAACFAAAAiQAAAIsAAACOAAAAkAAAAJMAAACWAAAAmQAAAJsAAACfAAAAoQAA + AKQAAACmAAAAqQAAAKsAAACuAAAArwAAALIAAAC0AAAAtgAAALgAAAC6AAAAvAAAAL4AAAC/AAAAwQAA + AMMAAADEAAAAxQAAAMcUEhPMFxUVzRgVFs82NDXVVlBR3VtRU99aUFLffXV25Z2Oke6fi5DwmoOH8KqU + mfO8o6j4yKmv/MWhqPzAmaH8wpqj/cacpf/DmKD/wZOc/72PmP+6ipT/t4aQ/7N+if+yfoj/tYON/7mJ + k/+3jJX9p4mP9ndpa+kaFxjXAAAA0gAAAM8AAADNAAAAygAAAMkAAADHAAAAxQAAAMMAAAC/AAAAugAA + ALQAAACuAAAApQAAAJsAAACQAAAAggAAAHUAAABmAAAAVgAAAEgAAAA7AAAALwAAACQAAAAbAAAAEwAA + AA0AAAAIAAAABQAAAAMAAAABAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAwAAAAgAAAAVAAAAJwAAAEEAAABcAAAAdgAAAIoAAACaAAAAogAAAKYAAACpAAAAqwAA + AK0AAACvAAAAsQAAALMAAAC0AAAAtwAAALkAAAC7AAAAvQAAAL8AAADAAAAAwgAAAMQAAADFAAAAxhcW + FswcGRrOHBkazz07O9deV1jeX1RW4F9TVuGBd3non42R75+HjPGdg4nyr5Sa9sCepfu+l579uI2W/byO + mP+6ipT/t4SP/7J9iP+tdYH/q3N//6tzf/+qcn7/p215/6Vqd/+lanb/pWt3/6Zrd/+lanb/pWp2/6Nn + dP+iZXL/oWRx/6Bib/+eX2z/nF1q/5lZZv+YV2T/l1Zk/5lYZf+bW2n/o2d0/7GIkftvZ2nmpZaZ8aCH + jPKhjZHydGhs6VJKTOEcGhrXAAAA0AAAAM4AAADMAAAAyAAAAMQAAAC9AAAAtgAAAK0AAACjAAAAlwAA + AIoAAAB7AAAAbAAAAF0AAABOAAAAQQAAADQAAAAoAAAAHwAAABcAAAAQAAAACgAAAAYAAAADAAAAAgAA + AAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAADQAAAB4AAAA2AAAAVQAA + AHUAAACQAAAApgAAALQAAAC7AAAAvwAAAMAAAADCAAAAxAAAAMQAAADGBgYGyB0bHM4gHB3PJSMj0k1J + StpmXV7hYVNV4XFkZ+SXh4rtoYiO8pp+hPKniZD2upSc/LiNlv2ygoz9tICL/696hf+rdH//p215/6Nn + dP+kaHT/pGh1/6Rodf+laXb/qG97/6x1gP+weoX/sn6J/7aEjv+6ipT/v5Ca/8KWn//Fm6P/yZ+o/8yk + rP/Op6//0Kqy/9Kutf/Tr7b/1LC3/9SwuP/Vsbj/1bG4/9SwuP/UsLf/0q61/8+psf/MpKz/x5yl/76P + mP+zgIr/pmx4/5tcav+bXGn/mVhl/7iHkf/jy9D/2LW7/9Gutf+vi5n/n3yN/6iIlv2nkZn2gXR36z85 + Ot4HBwfUAAAA0AAAAM0AAADJAAAAwwAAALwAAACzAAAAqQAAAJ4AAACQAAAAggAAAHMAAABkAAAAVQAA + AEYAAAA5AAAALQAAACIAAAAYAAAAEAAAAAkAAAAFAAAAAwAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAQAAAAYAAAASAAAAJwAAAEMODQ1qMi8vmColJrEqJifESkdI1WdeYOBoWl3jZFRX435x + dOiahIjwnH+F85V0e/Omgor3s4aQ/a58h/6rdYD+qnN+/6duev+kaXX/oGNv/59hbv+gY3D/oWVx/6Fk + cP+jaHT/qG56/612gf+xfIf/toSO/7uLlf/Bk53/xpuk/8qhqf/Opq7/0ay0/9SwuP/Ws7r/17W8/9m3 + vv/auL//2bi//9m4vv/Zt77/2be+/9m3vf/Ytr3/2La8/9e1vP/Xtbz/17S7/9e0u//XtLv/17S7/9e0 + u//XtLv/17S7/9e0u//XtLv/17W8/9i2vf/Zt77/2bi//9m4vv/Vsbj/wZOd/6BjcP+cXGr/m1xp/8qh + qf/bvML/17O6/9q3vf/QrbX/tJGe/5Zzhf+Sb4L/rYya/7SaofiIen3rMzAw3AAAANMAAADPAAAAzAAA + AMYAAAC/AAAAuAAAAK4AAACjAAAAlgAAAIgAAAB6AAAAawAAAFsAAABMAAAAPAAAAC4AAAAhAAAAFQAA + AAwAAAAGAAAAAwAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAACAAAABcLCwswsJ6hqMSm + rejEnaT9uIqT/rF9h/6ueIT/rXaB/6t0f/+pcX3/p215/6pxfP+rc3//rHWB/612gf+xe4b/tICL/7eF + kP+7i5X/wJGb/8SYof/Inqf/y6Kr/86nr//Rq7L/1K+2/9azuv/XtLv/2La9/9m4v//ZuL//2bi+/9m3 + vv/Zt77/2La9/9i1vP/Xtbv/17S7/9a0u//Ws7r/1rO6/9azuv/Ws7r/1rO6/9azuv/Ws7r/1rO6/9az + uv/Ws7r/1rO6/9azuv/Ws7r/1rO6/9azuv/Ws7r/1rO6/9azuv/Wsrr/1rK5/9azuv/Ws7r/1rO6/9az + uv/Ws7r/1rO6/9e0u//busD/yJ6n/59ib/+ZWWf/sHqF/9m4v//Ws7r/1rO6/9e0u//buL7/2ra9/8aj + rf+jgJD/imd7/5Jugf+zkp//q5Wb9WJZWuUTEhLWAAAA0QAAAM4AAADJAAAAwwAAALsAAACyAAAAqAAA + AJsAAACPAAAAgAAAAHAAAABeAAAASwAAADgAAAAmAAAAFwAAAAwAAAAFAAAAAgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAIAAAAKAAAAG8Wvs66qcHz/nFxp/55gbP+qcn7/vIyW/8ecpf/Npa3/0Kqx/9Ov + tv/Wsrn/1rS7/9e1vP/Ytr3/2be+/9m4vv/auL//2bi//9m4vv/Zt77/2be+/9i3vf/Ytr3/2LW8/9e1 + vP/XtLv/17S7/9a0uv/Ws7r/1rO6/9azuv/Ws7r/1rO6/9azuv/Ws7r/1rO6/9azuv/Ws7r/1rO6/9az + uv/Ws7r/1rK5/9Wyuf/Vsbn/1bG4/9WwuP/UsLf/1K+3/9Svtv/Urrb/0662/9Svtv/Ur7f/1LC3/9Wx + uP/Vsbj/1bG5/9ayuf/Ws7r/1bG4/9Svtv/UsLf/1rO6/9azuv/Ws7r/1rO6/9azuv/aucD/v5Ga/5pa + aP+iZnP/z6qx/9azuv/Ws7r/1rO6/9azuv/Ws7r/2ba8/9y5v//Usbn/tpOg/5Fugv+CX3X/l3SG/7KW + oPuHeXzsMS8v2wAAANMAAADPAAAAywAAAMUAAAC/AAAAtgAAAKwAAAChAAAAkwAAAIAAAABrAAAAVAAA + ADwAAAAmAAAAFQAAAAkAAAADAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAyyqqtV0Kuz/8GU + nf/Gm6T/0Kqy/9i2vf/ZuL//2La9/9i1vP/Xtbz/17S7/9a0u//WtLr/1rO6/9azuv/Ws7r/1rO6/9az + uv/Ws7r/1rO6/9azuv/Ws7r/1rO6/9azuv/Ws7r/1rO6/9azuv/Ws7r/1rO6/9ayuf/Vsrn/1bG4/9Wx + uP/UsLf/1LC3/9Svtv/Ur7b/0662/9Sutv/Ur7f/1bC4/9WxuP/Ws7r/2La9/9q5wP/bvcP/3cDG/+DF + y//jys//5c/T/+jU2P/q2Nz/7d3g/+/h5P/x5uj/8+nr//Xs7v/38PH/+PLz//jy8//06uz/7Nve/9/C + yP/UsLf/1bK5/9azuv/Ws7r/1rO6/9e0u//Xtbz/q3N+/5tcaf/BlZ3/07C2/9e1vP/Ws7r/1rO6/9az + uv/Ws7r/1rO6/9e0u//buL7/27i+/8qnsP+kgpL/hGB2/4Nhdv+lhZT+mISK8lZPUOMJCQnUAAAA0QAA + AM0AAADJAAAAwgAAALkAAACvAAAAnwAAAIoAAABwAAAAUwAAADcAAAAgAAAAEAAAAAYAAAABAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAADAAAADdfBxrPVsLj/2be+/9m3vv/Xtbz/1rO6/9azuv/Ws7r/1rO6/9az + uv/Ws7r/1rO6/9azuv/Ws7r/1rO6/9azuv/Wsrr/1rK5/9Wyuf/Vsbj/1bC4/9Swt//Ur7f/1K+2/9Ou + tv/Trrb/1K+3/9WxuP/Vsrn/1rO6/9i3vf/au8H/3L/E/97CyP/hx8z/5M3R/+fS1v/q2Nv/7d3g//Dj + 5f/z6Or/9u7w//n09f/8+Pn//vz9//////////////////////////////////////////////////// + //////////////////////////////////////////7+/+7f4v/Ws7r/1bK5/9azuv/Ws7r/1rO6/9q4 + v/+/kJr/mVhm/7iHkP/NqK7/2be+/9m3v//Zt77/17S7/9azuv/Ws7r/1rO6/9azuv/Ws7r/2LW8/9y5 + v//XtLv/vJml/5RxhP9+W3L/j22B/6KJlPh2bG7pHx0d2QAAANIAAADPAAAAygAAAMQAAAC2AAAAowAA + AIkAAABqAAAASAAAACwAAAAXAAAACQAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOFfX4b2LvB6NWx + uP/Ws7r/1rO6/9azuv/Ws7r/1rO6/9azuv/VsLj/1LC3/9Svtv/Ur7b/0662/9Sutv/UsLf/1bG4/9ay + uf/Xtbv/2bi//9u8w//dwMb/4MXK/+PLz//m0dX/6tfa/+3d4P/w4+b/8+nr//fv8P/69fb//Pn6///+ + /v/////////////////////////////////////////////////////////////7/P/79PX/9ezu/+vh + 4//f1Nf/1MnM/8q9wf++srX/sKSp/6SYnf+ajpP/kYSK/4l8gv+FeH3/jX6E/6KOlP/AqK3/5MzR//3w + 8v///////////+/i5P/VsLf/1rO6/9azuv/Ws7r/2Le9/8qhqv+bW2j/toOO/6t7gf+mc3j/sYKH/8Wd + o//Vsrn/2ri//9i2vf/Ws7r/1rO6/9azuv/Ws7r/1rO6/9e0u//at73/3Lm//8+stP+riJf/hmN4/4Be + dP+Zeor8k4CG8VVPUOIHBwfUAAAAzwAAAMYAAAC0AAAAnAAAAHwAAABYAAAANwAAAB0AAAANAAAAAwAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAArusrzjYtr3/1rK5/9azuv/Ws7r/1rO6/9azuv/Ws7r/17W8/97C + x//hx8z/5M3S/+fT1//r2d3/7uDi//Hl6P/06+3/+PLz//v4+P/9+/z///////////////////////// + ////////////////////////////////////+fr/+vHz//Po6v/r3uH/3tDT/9DBxf/CtLj/tKWp/6GS + mP+NgIX/em50/2leZP9YT1X/SUFI/zkzOv8sKC//JyQq/yMhJ/8gHyT/HR0i/yAgJP8lJin/Kist/y4v + Mf8zNDb/Njc4/zEyNP8hIyf/DRAW/w4PFv82MDb/i3V7/+nT1////////////+HIzf/Ur7f/1rO6/9az + uv/Xtbv/0qy0/6BjcP+yfYn/rHuA/49VWv+LUlz/lVxh/6Rvc/+5jJH/zqiu/9m3vv/Zt7//17S7/9az + uv/Ws7r/1rO6/9azuv/Ws7r/2LW7/9y5v//Ztr3/xKGr/557jP+FYnf/km+D/6SKk/dGQ0PfAAAAzgAA + AMAAAACpAAAAigAAAGUAAABAAAAAIwAAABAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAC1MzNRtay + uf/Ws7r/1rO6/9azuv/Ws7r/1rO6/9SxuP/dv8X//fz8//////////////////////////////////// + //////////v9///2+P/57O//8OPl/+nZ3P/dzND/zbvA/76ssf+vnaL/momO/4V1e/9xZGr/X1NZ/01C + Sf88NDr/Ligu/yYiKP8kISf/IB8l/xwdIv8iIyj/MDI1/zs9P/9DRUj/VVdY/21ubf91dHH/hYF8/5eT + jP+moJj/s6yj/8G5r//Nxbn/1s3B/93Txv/h18r/5dvN/+nf0f/s4dP/6N3Q/93Tx//Bua//f3t3/yEl + KP8ABgz/VkpQ/+jV2f//////8ubp/9Wwt//Ws7r/1rO6/9azuv/XtLv/qG56/612gf+2iY3/iVFb/2kz + Vf9zPVj/gUla/41UXP+aY2f/rXt//8SaoP/Usbj/2ri//9i2vf/Ws7r/1rO6/9azuv/Ws7r/1rO6/9az + uv/Ztr3/3bm//9Wyuf+4laH/flpx/5Jzhf1DQUHdAAAAxQAAALAAAACSAAAAbQAAAEYAAAAnAAAAEgAA + AAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAALf0NNg1rO6/9azuv/Ws7r/1rO6/9azuv/Ws7r/1rO6/9ay + uv/ewcf/7dXa/97Kzv/HtLn/uaWr/6mWnP+Zh43/iHZ9/3Zmbf9kVl3/U0dO/0Q7Qv80LTT/JSAm/yAd + I/8hICX/Hh4k/xwfJP8uMTT/P0JE/0dKTf9aXV//fX+B/5GTlP+bnZ7/qamo/7u4tP/MycT/2NXP/+Tg + 2v/w6+T/+PPs//758v///PT///72///57//47d7/+Ozd//br3P/16dv/8+jZ//Ln2P/x5tf/8OXW/+/k + 1v/v49X/7uPV/+7i1P/u49X/8OXW//Tp2v/77+D/2c/D/0hISP8ABAn/cmJo//33+P/9/Pz/2bm//9Wx + uf/Ws7r/1rO6/9m3vv+yfon/p216/76Slv+HTlz/ZjBU/2cxVP9nMVT/azVW/3U+WP+BSVn/jlZe/6Fs + cP+4io7/zaes/9i2vf/ZuL//17S7/9azuv/Ws7r/1rO6/9azuv/Ws7r/17S7/926wP/MqbL/a0dh/5Z/ + ivcJCQnKAAAAtAAAAJcAAAByAAAASgAAACsAAAAUAAAABgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeHR + 1GjWs7r/1rO6/9azuv/Ws7r/1rO6/9azuv/Ws7r/1rO6/924v/+Ue4L/Kics/xQUGv8TFRr/Ghwh/yEk + J/8uMDL/Ojw8/0ZHR/9UVVP/aGZj/4yMi/+goaL/tbW1/83Ny//d29r/5+Xk//Ty8P///Pr///////// + //////////////////////////74//758f/9+PH//Pbv//r17v/58+z/+PPs//fy6//38uv/+PPt//Hp + 3v/r4NL/7OHT/+zh0//s4dP/7OHT/+zh0//s4dP/7OHT/+zh0//s4dP/7OHT/+zh0//s4dP/7OHT/+zh + 0//26tz/3dPH/yotL/8fHSP/2MPI///////dwMX/1bG4/9azuv/Ws7r/2bi//7yMlv+iZnP/w5ie/4tT + X/9oMlT/aTNV/2kzVf9oMlX/ZzFU/2cxVP9rNVX/dD1W/4BIWP+TW2P/qnh8/8OZnf/Vsrj/2ri//9e1 + vP/Ws7r/1rO6/9azuv/Ws7r/1rO6/926wP+ffI3/e1hw/1RQUNkAAAC1AAAAmQAAAHQAAABMAAAALAAA + ABUAAAAGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB4tjZUtayuv/Ws7r/1rO6/9azuv/Ws7r/1rO6/9az + uv/duL//tZif/xkcIf8GCxH/Ozw+/7ewpv/XzsH/39XI/+bbzv/s4dP/8+jZ//fr3P/26tv//fTp//// + //////////////////////7///78//78+v/9+/r//fv5//78+////v3///79///+/v/9/Pr/9/Ls//fy + 6//38uv/9/Lr//fy6//38uv/9/Lr//fy6//38uv/9/Lr/+7k2P/r4NL/7OHT/+zh0//s4dP/7OHT/+zh + 0//s4dP/7OHT/+zh0//s4dP/7OHT/+zh0//s4dP/7OHT/+zh0//88OD/hYF8/wsPFf+zl57/6tHW/9e2 + vf/Ws7r/1rO6/9azuv/Zt77/xZqj/59gbv/Fm6H/klxm/2kzVP9pM1X/aTNV/2kzVf9pM1X/aTNV/2gy + Vf9nMVT/ZzFU/2s0Vf91PVX/hU1b/59pcP+8j5T/06+1/9q4v//XtLv/1rO6/9azuv/Ws7r/2ba9/8Og + qv90UGn/koSI6gAAALUAAACaAAAAdQAAAEwAAAAsAAAAFQAAAAYAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AADZys401rO6/9azuv/Ws7r/1rO6/9azuv/Ws7r/1rO6/+C7wv9jV13/Bw0S/yEkJ//Oxbr//PDg//Hm + 1//w5Nb/7+PV/+7i1P/t4dP/7OHT/+zh0//r4NH/9vDp//78+//9+/n//fv5//37+f/9+/n//fv5//37 + +f/9+/n//fv5//79/P///v3///79/////v/7+fX/9/Hq//fy6//38uv/9/Lr//fy6//38uv/9/Lr//fy + 6//38+z/9e/n/+zh1P/s4dP/7OHT/+zh0//s4dP/7OHT/+zh0//s4dP/7OHT/+zh0//s4dP/7OHT/+zh + 0//s4dP/7OHT//fr3P+vqaD/Bw0S/56Gjf/dt7//1rO6/9azuv/Ws7r/1rO6/9i2vf/Npa7/n2Fu/8SY + oP+caG//bDVU/2gyVf9pM1X/aTNV/2kzVf9pM1X/aTNV/2kzVf9pM1X/aDJV/2cxVP9nMVT/bTZU/3xE + V/+ZY2v/vZGV/9Wyuf/Ytr3/1rO6/9azuv/XtLv/07C4/31acf+kkJfyAAAAtQAAAJoAAAB1AAAATAAA + ACwAAAAVAAAABgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANvGyi3ZuL//1bK5/9azuv/Ws7r/1rO6/9az + uv/Ytbz/0rC3/zQxNv8FChH/aWdl//ru3//s4dP/7OHT/+zh0//s4dP/7OHT/+zh0//s4dP/7OHT/+zh + 0v/t49X/+/j0//78+v/9+/n//fv5//37+f/9+/n//fv5//37+f/9+/n//fz6///+/f///v3///79///+ + /f/59fD/9/Hq//fy6//38uv/9/Lr//fy6//38uv/9/Lr//fy6//48+z/8uvh/+vg0v/s4dP/7OHT/+zh + 0//s4dP/7OHT/+zh0//s4dP/7OHT/+zh0//s4dP/7OHT/+zh0//s4dP/9Oja/8O7sf8OExf/g3B3/+G7 + w//Ws7r/1rO6/9azuv/Ws7r/17S7/9Outv+iZnL/wJKc/6h2ev9xOVX/ZzFU/2kzVf9pM1X/aTNV/2kz + Vf9pM1X/aTNV/2kzVf9pM1X/aTNV/2kzVf9oMlX/ZjBU/2ozU/9+Rlf/o291/82nrv/Ytbz/1rO6/9az + uv/at73/iWZ6/52KkfEAAAC1AAAAmgAAAHUAAABMAAAALAAAABUAAAAGAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAz8bIDdu8wuDVsbj/1rO6/9azuv/Ws7r/1rO6/9u3vv/Boqn/HyEm/woOFP+jnZX/+Ozd/+zh + 0//s4dP/7OHT/+zh0//s4dP/7OHT/+zh0//s4dP/7OHT/+vg0f/x6d///fz6//37+f/9+/n//fv5//37 + +f/9+/n//fv5//37+f/9+/n//v37///+/f///v3///7+//78+v/38+z/9/Lq//fy6//38uv/9/Lr//fy + 6//38uv/9/Lr//fy6//38uv/7+ba/+zg0v/s4dP/7OHT/+zh0//s4dP/7OHT/+zh0//s4dP/7OHT/+zh + 0//s4dP/7OHT/+zh0//w5df/29HF/xwfI/9lWF7/4bzD/9azuv/Ws7r/1rO6/9azuv/Ws7r/17S7/6du + ev+7ipT/soOH/3pCV/9lL1T/aDJV/2gyVf9oMlX/aDJV/2gyVf9nMlX/ZzJV/2cyVf9nMVX/ZzFU/2cx + VP9nMVT/ZS9U/2cyVf+KUFr/om5y/9WxuP/XtLv/1rO6/9u4vv+VcYT/mIWN8QAAALUAAACaAAAAdQAA + AEwAAAAsAAAAFQAAAAYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB3cTJwdWxuP/Vsrn/1rO6/9az + uv/Ws7r/3Li//7WZoP8ZHCH/Excc/7+3rf/16dr/7OHT/+zh0//s4dP/7OHT/+zh0//s4dP/7OHT/+zh + 0//s4dP/7OHT/+zg0v/38uv//vz7//37+f/9+/n//fv5//37+f/9+/n//fv5//37+f/9+/n///78///+ + /f///v3////+//z69v/38ur/9/Lr//fy6//38uv/9/Lr//fy6//38uv/9/Lr//fy7P/28On/7eLV/+zg + 0v/s4dP/7OHT/+zh0//s4dP/7OHT/+zh0//s4dP/7OHT/+zh0//s4dP/7OHT/+7j1f/q39H/MzY3/0hA + Rv/duL//1rO6/9azuv/Ws7r/1rO6/9azuv/Yt77/r3mF/7SAi/+6jZH/iFBb/203Vv9uN1f/bzlX/3A6 + V/9wOlf/cTpX/3E6V/9xOlf/cTtY/3I7WP9yPFj/dD5Z/3dBWv99Rlv/i1Ng/5VdYv+ZYWb/0Kqx/9e1 + vP/Ws7r/3Lm//556i/+UgovxAAAAtQAAAJkAAAB1AAAATAAAACwAAAAVAAAABgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAHiztGH1LC3/9u8wv/WtLv/1rO6/9azuv/cuL//tJif/xcaIP8aHSL/ycC1//Pn + 2f/s4dP/7OHT/+zh0//s4dP/7OHT/+zh0//s4dP/7OHT/+zh0//s4dP/7ODS/+3j1//7+fb//vz6//37 + +f/9+/n//fv5//37+f/9+/n//fv5//37+f/+/Pr///79///+/f///v3////+//r28f/38er/9/Lr//fy + 6//38uv/9/Lr//fy6//38uv/9/Lr//jz7P/z7OP/6+DS/+zh0//s4dP/7OHT/+zh0//s4dP/7OHT/+zh + 0//s4dP/7OHT/+zh0//s4dP/7eLU//Tp2v9RUVD/LSow/9OxuP/Ytbz/1rO6/9azuv/Ws7r/1rO6/9m4 + v/+3hZD/rHSA/8CWnP+TWl//k1xi/5RcYv+VXWP/ll5j/5ZeY/+WXmP/ll5j/5ZeY/+WXmP/ll5j/5Ze + Y/+XX2P/mGBk/5lhZP+YYGT/lV1h/5pjaP/RrLP/17W8/9azuv/cub//on6O/5N/ifEAAAC1AAAAmQAA + AHQAAABMAAAALAAAABUAAAAGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOLR1EzUr7f/6tjc/9y/ + xP/Vsbj/1rO6/9u3vv++n6b/Gx0i/xkcIf/Iv7X/8+jZ/+zh0//s4dP/7OHT/+zh0//s4dP/7OHT/+zh + 0//s4dP/7OHT/+zh0//s4dP/6+DR//Lr4f/+/Pv//fv5//37+f/9+/n//fv5//37+f/9+/n//fv5//37 + +f/+/fv///79///+/f///v3//v38//j07f/38ur/9/Lr//fy6//38uv/9/Lr//fy6//38uv/9/Lr//jz + 7P/w59z/6+DS/+zh0//s4dP/7OHT/+zh0//s4dP/7OHT/+zh0//s4dP/7OHT/+zh0//s4dP/+O3d/3Fu + a/8YGR//xqat/9q2vf/Ws7r/1rO6/9azuv/Ws7r/2bi+/8CSm/+mbHj/xZyi/5VdYv+XXmP/l19j/5Ze + Y/+WXmP/ll5j/5ZeY/+WXmP/ll5j/5ZeY/+WXmP/ll5j/5ZeY/+WXmP/ll5j/5ZeY/+VXGH/mmRp/9Kt + tP/Xtbz/1rO6/9y5v/+kgJD/kn+I8AAAALQAAACZAAAAdAAAAEwAAAAsAAAAFQAAAAYAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA2c/QINe1vPTs3N//59LW/9Svtv/Ws7r/2ba9/8uqsf8oKC3/EBQZ/762 + rP/16dv/7OHT/+zh0//s4dP/7OHT/+zh0//s4dP/7OHT/+zh0//s4dP/7OHT/+zh0//s4dP/6+HS//jz + 7f/+/Pv//fv5//37+f/9+/n//fv5//37+f/9+/n//fv5//37+f///v3///79///+/f////7//Pv4//fy + 6//38uv/9/Lr//fy6//38uv/9/Lr//fy6//38uv/9/Ls//fx6v/u5Nf/7ODS/+zh0//s4dP/7OHT/+zh + 0//s4dP/7OHT/+zh0//s4dP/7OHT/+zh0//47N3/k46H/wwQFv+xlZz/3bnA/9azuv/Ws7r/1rO6/9az + uv/Yt73/yJ6n/6Fkcf/Hnqb/mmRp/5VdYv+WXmP/ll5j/5ZeY/+WXmP/ll5j/5ZeY/+WXmP/ll5j/5Ze + Y/+WXmP/ll5j/5ZeY/+WXmP/ll5j/5VcYf+bZGr/0q61/9e1vP/Ws7r/3Lm//6iEk/+RfofwAAAAtAAA + AJgAAABzAAAASwAAACwAAAAUAAAABgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAC277E0unW + 2v/x5Ob/1K+2/9azuv/XtLv/2LS8/0E8Qf8GCxD/p6GZ//fr3P/s4dP/7OHT/+zh0//s4dP/7OHT/+zh + 0//s4dP/7OHT/+zh0//s4dP/7OHT/+zh0//r4NL/7+XY//z59//9/Pr//fv5//37+f/9+/n//fv5//37 + +f/9+/n//fv5//78+v///v3///79///+/f////7/+/fz//ny6v/79Ov/+vTr//r06//68+v/+fPr//jz + 6//48uv/+PPs//Tu5f/s4dP/7OHT/+zh0//s4dP/7OHT/+zh0//s4dP/7OHT/+zh0//s4dP/7OHT//br + 3P+xqqH/CA0S/5qDif/gu8L/1rO6/9azuv/Ws7r/1rO6/9e1vP/Op6//oGNw/8acpf+gbHH/lFxh/5Ze + Y/+WXmP/ll5j/5ZeY/+WXmP/ll5j/5ZeY/+WXmP/ll5j/5ZeY/+WXmP/ll5j/5ZeY/+WXmP/lVxh/5xm + a//SrrX/17S7/9azuv/buL7/qoaV/5F+h/AAAAC0AAAAmAAAAHMAAABLAAAAKwAAABQAAAAGAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHdw8id48zR//jy8//Wsrn/1rO6/9azuv/hu8P/ZVlf/wAG + DP+Df3r/+e3e/+zh0//s4dP/7OHT/+zh0//s4dP/7OHT/+zh0//s4dP/7OHT/+zh0//s4dP/7OHT/+zh + 0//r4NH/8+zk///8+//9+/n//vv5//78+f///Pn///z5//78+f/9+/n//fv5//39/P/+/f3//f39//39 + /f/9/fz/7O7w/+Po7P/m6e3/6Ors/+rs7P/u7uz/8/Dr//jy6//68+v//fbs//fs3v/z5NH/8+XS/+/i + 0//t4dP/7OHT/+zh0//s4dP/7OHT/+zh0//s4dP/8ufY/8vCt/8RFhv/fWxx/+G8w//Ws7r/1rO6/9az + uv/Ws7r/17S7/9Ovt/+jZnP/wpWe/6l3fP+TWl//ll5j/5ZeY/+WXmP/ll5j/5ZeY/+WXmP/ll5j/5Ze + Y/+WXmP/ll5j/5ZeY/+WXmP/ll5j/5ZeY/+UXGH/nGds/9Ovtv/XtLv/1rO6/9y5v/+ohJP/jnuE7wAA + ALQAAACXAAAAcgAAAEoAAAArAAAAFAAAAAYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOHM + 0HTgxcr//v39/9q7wf/Vsbj/1rO6/+G7wv+SfYP/AwgO/1dVVf/06Nr/7eLT/+zh0//s4dP/7OHT/+zh + 0//s4dP/7OHT/+zh0//s4dP/7OHT/+zh0//s4dP/7eHT//Pk0v/559L///nv///9+//4+fn/9ff6//H1 + +v/t8/v/6vL7/+fw/P/k7/z/5O/8//H3/v/y9/7/8ff+//T5/v/b6/z/l8P1/5TA9P+XwvT/msP0/53F + 8/+hx/P/qMrz/7HP8f+91fH/y9zv/73M3f/HztX/5t7U//Tl0v/559L/9eXS/+/j0//s4dP/7OHT/+zh + 0//w5db/4dbJ/yElKP9fU1n/4bzD/9azuv/Ws7r/1rO6/9azuv/Ws7r/17S7/6duev+8jJb/sYKI/5JZ + Xv+WXmP/ll5j/5ZeY/+WXmP/ll5j/5ZeY/+WXmP/ll5j/5ZeY/+WXmP/ll5j/5ZeY/+WXmP/ll5j/5Rc + Yf+eaG3/06+2/9e0u//Ws7r/3Lm//6WBkf+MeoPvAAAAswAAAJYAAABxAAAASQAAACoAAAATAAAABgAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA3MjMPd7Axv///v7/4cfN/9Swt//Ws7r/3Li//7ib + of8VFx3/LS8y/+LYy//v5Nb/7OHT/+zh0//s4dP/7OHT/+zh0//s4dP/7OHT/+zh0//s4dP/7OHT//Dj + 0//15tL/yM/X/4Ks3P9upuf/2+r8/+Tw/P/f7Pz/3+z8/97s/P/f7Pz/3+z8/9/t/P/e7Pz/5vD9//L3 + /v/x9/7/8ff+//b6///F3fr/j770/5TA9P+UwPT/k8D0/5LA9P+Rv/T/kL/0/4++9P+UwfX/drDz/x98 + 5/8xheT/WJjh/4iw3f+8ydj/493U//fm0v/359L/8OPT/+7j1P/s4tT/PD0+/0I7Qv/bt77/17S7/9az + uv/Ws7r/1rO6/9azuv/Zt77/r3mE/7N/iv+5jZP/klle/5ZeY/+WXmP/ll5j/5ZeY/+WXmP/ll5j/5Ze + Y/+WXmP/ll5j/5ZeY/+WXmP/ll5j/5ZeY/+WXmP/lFxh/59pbv/UsLf/17S7/9azuv/cub//o3+P/4t6 + g+4AAACzAAAAlQAAAHAAAABIAAAAKgAAABMAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AADa0dQc3cDG7vz7+//o1dn/1K+2/9azuv/Ytbz/0a+2/zEvNP8SFhv/xbyy//To2v/s4dP/7OHT/+zh + 0//s4dP/7OHT/+zh0//s4dP/7OHT/+zh0//y5NL/5d7U/2yi3/8XeOf/CXHo/wVu5v96sfL/6/P9/+Dt + /P/g7fz/4O38/+Dt/P/g7fz/4O38/+Dt/P/f7fz/7PT+//L4/v/x9/7/8/j+//H3/v+tz/f/kb70/5XB + 9P+VwfT/lcH0/5XB9P+VwfT/lcH0/5XB9P+cxvX/XaDv/wpx5/8Mcuj/CnLo/xN25/8xheX/ZZ/g/6nA + 2f/f2tT/+OfS///v2/9aWVf/JyUs/9Kwt//Ztbz/1rO6/9azuv/Ws7r/1rO6/9q4v/+3hY//q3N//8KY + nv+TWl//ll5j/5ZeY/+WXmP/ll5j/5ZeY/+WXmP/ll5j/5ZeY/+WXmP/ll5j/5ZeY/+WXmP/ll5j/5Ze + Y/+UXGD/n2pw/9Swt//XtLv/1rO6/9y5v/+hfY3/iXiB7gAAALIAAACVAAAAbwAAAEgAAAApAAAAEgAA + AAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAALcv8XZ+PP0//Dk5//Ur7b/1rO6/9az + uv/eucD/UUlO/wMIDv+fmZL/+Ozd/+zh0//s4dP/7OHT/+zh0//s4dP/7OHT/+zh0//s4dP/8OPT/+ff + 0/9Nk+L/B3Dp/xR35/8XeOf/E3bn/xx76P+41vj/6fL9/+Dt/P/g7fz/4O38/+Dt/P/g7fz/4O38/+Dt + /P/i7v3/8Pb+//H3/v/x9/7/9Pn+/+Pv/f+bxfX/ksD0/5XB9P+VwfT/lcH0/5XB9P+VwfT/lcH0/5bC + 9P+Yw/X/PI3r/xB05v8XeOf/Fnfn/xF16P8Lcuj/DnPo/yyC5f9to9//ydXi/3x5dP8WFx3/xKet/927 + wf/Wsrn/1rO6/9azuv/Ws7r/2be+/8CSm/+lanf/xZyj/5ZfY/+WXWL/ll5j/5ZeY/+WXmP/ll5j/5Ze + Y/+WXmP/ll5j/5ZeY/+WXmP/ll5j/5ZeY/+WXmP/ll5j/5RbYP+ga3H/1LG4/9e0u//Ws7r/3Lm//556 + i/+IeIDsAAAAsQAAAJQAAABuAAAARwAAACgAAAASAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAd7Gy6ry5+n/+PLz/9ayuf/Ws7r/1rO6/+G8w/91Zmv/AAUL/3Rwbf/47d7/7OHT/+zh + 0//s4dP/7OHT/+zh0//s4dP/7OHT/+zh0//359L/eKje/wdw6f8XeOf/F3jn/xd45/8XeOf/DXLm/0iV + 7P/g7fz/4+/8/+Dt/P/g7fz/4O38/+Dt/P/g7fz/4O38/9/s/P/n8f3/8vj+//H3/v/x9/7/9vr//83i + +v+Sv/T/lcH0/5XB9P+VwfT/lcH0/5XB9P+VwfT/lcH0/5nD9P+IufP/IX7o/xN25/8XeOf/F3jn/xd4 + 5/8XeOf/EnXn/wpy6P8YfvL/MWSe/xUUFP+ulJr/4cDH/9ayuf/Ws7r/1rO6/9azuv/Yt73/yJ6n/6Bj + cP/In6f/m2Vq/5VdYv+WXmP/ll5j/5ZeY/+WXmP/ll5j/5ZeY/+WXmP/ll5j/5ZeY/+WXmP/ll5j/5Ze + Y/+WXmP/lFtg/6Fscv/Vsbj/17S7/9azuv/cub//nHeJ/4R1fesAAACxAAAAlAAAAG0AAABGAAAAKAAA + ABIAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB28PHie7e4v/+/P3/2bi//9Wy + uf/Ws7r/4LvC/5iBiP8GCxH/SkpK//Hl1//t4tT/7OHT/+zh0//s4dP/7OHT/+zh0//s4dP/8ePT/9XW + 1f8ifeb/E3bn/xd45/8XeOf/F3jn/xd45/8WeOf/DXLm/4e58//s9P3/4O38/+Dt/P/g7fz/4O38/+Dt + /P/g7fz/4O38/+Dt/P/s9f7/8vf+//H3/v/y9/7/9Pn+/7XU+P+QvvT/lcH0/5XB9P+VwfT/lcH0/5XB + 9P+VwfT/lcH0/53F9f9qqPD/EnXm/xZ45/8XeOf/F3jn/xd45/8XeOf/F3jn/xN57v8fa8L/ExYZ/5V/ + hP/lxcv/1rO6/9azuv/Ws7r/1rO6/9i1vP/Op6//oGNv/8acpP+ibXP/lFxg/5ZeY/+WXmP/ll5j/5Ze + Y/+WXmP/ll5j/5ZeY/+WXmP/ll5j/5ZeY/+WXmP/ll5j/5ZeY/+UW2D/om5z/9Wyuf/XtLv/1rO6/9y5 + v/+adYf/gnN76QAAALAAAACTAAAAbQAAAEYAAAAnAAAAEgAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAADh0tVR59TX///////dwMb/1bG4/9azuv/cuL//tZmf/xQXHP8qLC//39XJ//Dk + 1v/s4dP/7OHT/+zh0//s4dP/7OHT/+zh0//459L/obza/wxy6P8XeOf/F3jn/xd45/8XeOf/F3jn/xd4 + 5/8Tdef/In/p/8Lc+f/n8f3/4O38/+Dt/P/g7fz/4O38/+Dt/P/g7fz/3+38/+Pv/f/x9/7/8ff+//H3 + /v/0+P7/6PL9/6DI9f+Sv/T/lcH0/5XB9P+VwfT/lcH0/5XB9P+VwfT/lcH0/5vF9f9HlOz/D3Pm/xd4 + 5/8XeOf/F3jn/xd45/8XeOf/Fnnr/x901f8QGCH/eGZr/+fHzf/Xtbz/1rO6/9azuv/Ws7r/17S7/9Ov + tv+hZXH/wZOc/6p5fv+TWl//ll5j/5ZeY/+WXmP/ll5j/5ZeY/+WXmP/ll5j/5ZeY/+WXmP/ll5j/5Ze + Y/+WXmP/ll5j/5RbYP+jb3T/1rK5/9e0u//Ws7r/3Li+/5dyhf9+cHfnAAAAsAAAAJMAAABsAAAARgAA + ACcAAAASAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAN3MzzTlz9P8/////+PL + 0P/Ur7f/1rO6/9m2vf/KqbD/KCct/xQYHf/GvrP/9OjZ/+zh0//s4dP/7OHT/+zh0//s4dP/7OHT//jn + 0v+Gr93/C3Lo/xd45/8XeOf/F3jn/xd45/8XeOf/F3jn/xd45/8Mcub/VJzu/+Tv/f/i7vz/4O38/+Dt + /P/g7fz/4O38/+Dt/P/g7fz/3+z8/+jy/f/y+P7/8ff+//H3/v/2+v7/1ef7/5TA9P+UwPT/lcH0/5XB + 9P+VwfT/lcH0/5XB9P+VwfT/mMP0/4++8/8ogun/EnXm/xd45/8XeOf/F3jn/xd45/8XeOn/Gnnm/xMn + Pv9cTVD/6MnP/9m5wP/Wsrn/1rO6/9azuv/WtLv/17O6/6ZseP+6iJP/s4SK/5JZXv+WXmP/ll5j/5Ze + Y/+WXmP/ll5j/5ZeY/+WXmP/ll5j/5ZeY/+WXmP/ll5j/5ZeY/+WXmP/lFtg/6Nwdf/Ws7r/17S7/9az + uv/buL7/lHCC/3pudeYAAACwAAAAkwAAAGwAAABGAAAAJwAAABIAAAAEAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAsKOmDOHIzeT/////6tfb/9Svtv/Ws7r/17S7/9m1vP9CPEL/BgsR/6ih + mf/369z/7OHT/+zh0//s4dP/7OHT/+zh0//s4dP/+OfS/4uy3P8Kcuj/F3jn/xd45/8XeOf/F3jn/xd4 + 5/8XeOf/F3jn/xZ35/8PdOb/lMH0/+z0/f/g7fz/4O38/+Dt/P/g7fz/4O38/+Dt/P/g7fz/4O38/+31 + /v/y+P7/8ff+//H3/v/1+v7/vNn4/5C+9P+VwfT/lcH0/5XB9P+VwfT/lcH0/5XB9P+VwfT/nMX1/3Wv + 8f8Vd+f/Fnfn/xd45/8XeOf/F3jn/xd45/8ZffH/ETJV/0U5Of/gwcf/3sDH/9WxuP/Ws7r/1rO6/9az + uv/Ytr3/rXaB/7B6hv+7kJb/k1le/5ZeY/+WXmP/ll5j/5ZeY/+WXmP/ll5j/5ZeY/+WXmP/ll5j/5Ze + Y/+WXmP/ll5j/5ZeY/+TW2D/pHF2/9azuv/WtLv/1rO6/9u4vv+SboH/dGdu5AAAALAAAACTAAAAbAAA + AEYAAAAnAAAAEgAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABPSkwD4svPzP37 + +//x5ef/1K+2/9azuv/Ws7r/4LvC/2BUWv8BBgz/g396//nt3v/s4dP/7OHT/+zh0//s4dP/7OHT/+zh + 0//25tL/sMTZ/w906P8WeOf/F3jn/xd45/8XeOf/F3jn/xd45/8XeOf/F3jn/xF15v8qg+n/y+H6/+bx + /f/g7fz/4O38/+Dt/P/g7fz/4O38/+Dt/P/f7fz/5O/9//H3/v/x9/7/8ff+//P4/v/t9f7/psv2/5G/ + 9P+VwfT/lcH0/5XB9P+VwfT/lcH0/5XB9P+VwfT/ncb1/1Ob7f8Pc+b/F3jn/xd45/8XeOf/F3jn/xd9 + 8v8ZRXf/LiYm/9S3vf/jyM3/1bG4/9azuv/Ws7r/1rO6/9m4v/+0gYv/qG57/8GYnv+UW1//ll5j/5Ze + Y/+WXmP/ll5j/5ZeY/+WXmP/ll5j/5ZeY/+WXmP/ll5j/5ZeY/+WXmP/ll5j/5NaX/+lcnf/17S7/9a0 + u//Ws7r/27i+/5RyhP9oU1zkAAAAsAAAAJMAAABsAAAARgAAACcAAAASAAAABAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHdxMmc+fT1//fw8f/Vsrn/1rO6/9azuv/hvMP/gW91/wAG + DP9gXlz/9erb/+3i0//s4dP/7OHT/+zh0//s4dP/7OHT/+/j0//l3dT/NYbk/w906P8XeOf/F3jn/xd4 + 5/8XeOf/F3jn/xd45/8XeOf/F3jn/wxx5v9gou//5/H9/+Hu/P/g7fz/4O38/+Dt/P/g7fz/4O38/+Dt + /P/f7Pz/6fL9//L4/v/x9/7/8ff+//b5/v/c6/z/l8L0/5PA9P+VwfT/lcH0/5XB9P+VwfT/lcH0/5XB + 9P+XwvT/lMH0/zKH6v8RdOb/F3jn/xd45/8XeOf/F37y/x5Wlv8fGhn/wKSr/+rR1v/Vsbj/1rO6/9az + uv/Ws7r/2bi+/7yMlv+hZXL/xZyj/5hgZf+VXWL/ll5j/5ZeY/+WXmP/ll5j/5ZeY/+WXmP/ll5j/5Ze + Y/+WXmP/ll5j/5ZeY/+WXmP/k1pf/6ZzeP/XtLv/1rS7/9azuv/buL7/lnSG/2xXX+QAAACwAAAAkgAA + AGwAAABFAAAAJwAAABIAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeLP + 03X06uz//Pr7/9i3vf/Vsrn/1rO6/9+7wv+fh47/CQ4U/z4+QP/s4tT/7uPV/+zh0//s4dP/7OHT/+zh + 0//s4dP/7OHT//fm0v+ivNr/DHPo/xR25/8XeOf/F3jn/xd45/8XeOf/F3jn/xd45/8XeOf/FXfn/xJ1 + 5v+gyPb/6vP9/9/t/P/f7fz/3+38/9/s/P/f7Pz/3+z8/9/s/P/f7fz/7fX+//H3/v/x9/7/8ff+//b6 + /v/E3fr/kL70/5XB9P+VwfT/lcH0/5XB9P+VwfT/lcH0/5XB9P+bxPX/f7Ty/xp65/8Ud+f/F3jn/xd4 + 5/8XfPH/HV+r/xYVFf+pj5X/79jc/9e1u//Ws7r/1rO6/9azuv/Zt77/xJih/51ea//Gm6P/nGds/5Vd + Yv+WXmP/ll5j/5ZeY/+WXmP/ll5j/5ZeY/+WXmP/ll5j/5ZeY/+WXmP/ll5j/5ZeY/+TWl//p3R6/9e1 + vP/Ws7r/1rO6/9y4vv+beIr/b1xj5AAAAK8AAACSAAAAawAAAEUAAAAnAAAAEgAAAAQAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA28nNRu/h5P//////3L7E/9WxuP/Ws7r/27i//7ud + pP8XGR//JCcq/9nPw//x5dj/7OHT/+zh0//s4dP/7OHT/+zh0//s4dP/7eHT//Xm0v+Frt3/DnTo/wxz + 6P8Vd+f/Fnjn/xZ45/8Vd+f/EXXo/w1z6P8Kcuj/BW7n/y6G6//P5Pv/5vD8/+Pv/P/l7/z/5fD8/+fw + +//n8Pv/5/D7/+Xv+//q8/z/9Pj+//L4/v/x9/7/8vj+//D3/v+rzvf/jbz0/5LA9P+UwfT/lcH0/5XB + 9P+VwfT/lcH0/5XB9P+dxvX/X6Lu/xB05v8XeOf/F3jn/xZ67P8dcM7/EBYd/494ff/x2d7/2rrB/9ay + uf/Ws7r/1rO6/9i3vf/Koar/nF1q/8KWn/+kcXb/lFtg/5ZeY/+WXmP/ll5j/5ZeY/+WXmP/ll5j/5Ze + Y/+WXmP/ll5j/5ZeY/+WXmP/ll5j/5NaX/+odnv/2LW9/9azuv/Ws7r/3Lm//6aDk/9yX2bjAAAArwAA + AJEAAABrAAAARAAAACYAAAARAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AADe0tUp69rd9v/////hx8z/1K+3/9azuv/Ztbz/zq2z/y8sMv8PExj/v7et//Xp2v/s4dP/7OHT/+zh + 0//s4dP/7OHT/+zh0//s4dP/7uLT//bl0v+twtn/Q47j/xd45/8PdOj/D3To/xh45/8yhuT/UpXi/3en + 3v+YuNv/r8LX/+Pl5f/8/Pv/+/r5//37+f/9+/n//vv5//77+f/++/n//vv5//37+f/+/fz//v79//39 + /f/8/P3//f7+/+vz/P+10vP/o8jz/5bC9P+QvvX/kL70/5PA9P+VwfT/lcH0/5bC9P+Yw/X/PI7r/xB0 + 5v8XeOf/F3nr/xpz2f8QGyf/cl9j//HY3f/ew8j/1bG4/9azuv/Ws7r/17W8/8+psP+eYG3/vY2X/6x7 + gf+TWl//ll5j/5ZeY/+WXmP/ll5j/5ZeY/+WXmP/ll5j/5ZeY/+WXmP/ll5j/5ZeY/+WXmP/k1pf/6l3 + fP/Ytr3/1rO6/9azuv/Ztrz/wZ2o/3tpbuMAAACvAAAAkAAAAGkAAABDAAAAJQAAABAAAAAEAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJ6UlQnm0tbk/////+bR1f/Ur7b/1rO6/9ez + uv/cuL//SEFG/wQJD/+dl5D/+Ozd/+zh0//s4dP/7OHT/+zh0//s4dP/7OHT/+zh0//s4dP/7eHT//fm + 0v/t4tP/xs7X/6jA2f+owNn/xc7X/+Td1P/z5NL/+OfS//nn0v/15dL/7+LT//n18P///Pv//fv5//37 + +f/9+/n//fv5//37+f/9+/n//fv5//37+f///vz///79///+/f///v3////+///79v/18Ov/5urt/8/e + 7/+00fH/nMTz/5C+9P+Qv/T/lMD0/5rE9P+IufP/IH3o/xN25/8XeOj/Gnzs/xIsR/9XSEr/7NLX/+PL + 0P/UsLf/1rO6/9azuv/XtLv/1LC3/6Jlcv+1gY3/tIaM/5JZXv+WXmP/ll5j/5ZeY/+WXmP/ll5j/5Ze + Y/+WXmP/ll5j/5ZeY/+WXmP/ll5j/5ZeY/+TWl//qnh+/9m3vv/Ws7r/1rO6/9azuv/XtLv/hXR34wAA + AK0AAACPAAAAZwAAAEEAAAAkAAAAEAAAAAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAUU1OA+XT18T+/v7/7N3g/9Svtv/Ws7r/1rO6/+C7wv9lWF7/AAUL/3x4dP/57d7/7OHT/+zh + 0//s4dP/7OHT/+zh0//s4dP/7OHT/+zh0//s4dP/7OHT/+7i0//z5dL/9+bS//fm0v/z5dL/7+LT/+3h + 0//s4dP/7OHT/+zh0//r4NH/7+bb//z6+P/9+/r//fv5//37+f/9+/n//fv5//37+f/9+/n//fv5//78 + +v///v3///79///+/f///v3///7+//v28f/68+r//fXr//v06//v7uz/0uDv/67O8v+UwfT/j770/5zF + 9f9qqPD/EnXm/xZ45/8XffH/EzRa/0A0NP/gxcr/6tbb/9Svt//Ws7r/1rO6/9a0u//XtLv/qG97/6x1 + gf+8kJb/k1pf/5ZeY/+WXmP/ll5j/5ZeY/+WXmP/ll5j/5ZeY/+WXmP/ll5j/5ZeY/+WXmP/ll5j/5NZ + Xv+reX//2be+/9azuv/Ws7r/1rO6/9ayuf+HeHvjAAAArAAAAI0AAABmAAAAQAAAACMAAAAPAAAAAwAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB38jNnfz6+v/z6ev/1LC3/9az + uv/Ws7r/4bzD/4Jwdv8BBw3/W1pZ//Tp2v/t4tT/7OHT/+zh0//s4dP/7OHT/+zh0//s4dP/7OHT/+zh + 0//s4dP/7OHT/+zh0//s4dP/7OHT/+zh0//s4dP/7OHT/+zh0//s4dP/7OHT/+zh0//r4NH/9e7m//78 + +//9+/n//fv5//37+f/9+/n//fv5//37+f/9+/n//fv5//79/P///v3///79///+/f///v7//v37//jz + 7f/38uv/9/Lr//nz6//99ev/+fPr/+Po7f+40/H/lsL0/5bC9f9HlOz/D3Tm/xd+8v8bTYb/KiMi/9K2 + vP/w3+L/1bG5/9azuv/Ws7r/1rO6/9i3vf+veoX/pGl2/8GWnf+VXGH/ll5j/5ZeY/+WXmP/ll5j/5Ze + Y/+WXmP/ll5j/5ZeY/+WXmP/ll5j/5ZeY/+WXmP/klle/6x7gf/ZuL//1rO6/9azuv/Ws7r/1rK5/4h6 + feIAAACrAAAAiwAAAGMAAAA+AAAAIgAAAA4AAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAHk09Z49/Dx//nz9P/Ws7r/1rK5/9azuv/fusH/noeN/woOFP88PT7/7OHT/+7j + 1P/s4dP/7OHT/+zh0//s4dP/7OHT/+zh0//s4dP/7OHT/+zh0//s4dP/7OHT/+zh0//s4dP/7OHT/+zh + 0//s4dP/7OHT/+zh0//s4dP/7OHT/+zh0v/t4tT/+vby//78+//9+/n//fv5//37+f/9+/n//fv5//37 + +f/9+/n//fv5///+/f///v3///79///+/f////7//Pr3//fy6//38uv/9/Lr//fy6//38uv/+/Tr//z0 + 6//l6e3/s9Dy/4q79P8mgen/Envy/xlUmf8dGRf/u5+m//bn6v/Xtrz/1rK5/9azuv/Ws7r/2bi//7eE + j/+eYG3/w5ig/5lhZv+VXWL/ll5j/5ZeY/+WXmP/ll5j/5ZeY/+WXmP/ll5j/5ZeY/+WXmP/ll5j/5Ze + Y/+SWV7/rX2D/9m4v//Ws7r/1rO6/9azuv/Vsrn/gXZ43wAAAKoAAACKAAAAYQAAAD0AAAAhAAAADQAA + AAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANjEx0vz5+n//v39/9m4 + v//Vsrn/1rO6/9y4v/+5m6L/Fhke/yUoK//Zz8P/8ebX/+zh0//s4dP/7OHT/+zh0//s4dP/7OHT/+zh + 0//s4dP/7OHT/+zh0//s4dP/7OHT/+zh0//s4dP/7OHT/+zh0//s4dP/7OHT/+zh0//s4dP/7OHT/+vg + 0f/w6N3//fv5//37+f/9+/n//fv5//37+f/9+/n//fv5//37+f/9+/n//vz7///+/f///v3///79///+ + /f////7/+/fz//fx6v/38uv/9/Lr//fy6//38uv/9/Lr//v06//58+v/1OHw/3ew8f8QePD/IWe1/xUW + F/+kiZD/+Ons/9y9w//Vsbj/1rO6/9azuv/ZuL7/vpCZ/5tbaP/Clp//nmlu/5VcYf+WXmP/ll5j/5Ze + Y/+WXmP/ll5j/5ZeY/+WXmP/ll5j/5ZeY/+WXmP/ll5j/5JZXv+vfoT/2bi//9azuv/Ws7r/1rO6/9Wy + uf90bG3bAAAAqQAAAIkAAABhAAAAPAAAACAAAAANAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA4NLVL+7g4vj/////3cDG/9WwuP/Ws7r/2ba9/8qqsf8qKS//EBUa/8S6 + r//669n/9ubS//jn0v/459L/+OfS//fn0v/359L/9+fS//fn0v/359L/+OfS//fm0v/y5NL/7uLT/+zh + 0//s4dP/7OHT/+zh0//s4dP/7OHT/+zh0//s4dP/7OHT/+vg0f/28On//vz7//37+f/9+/n//fv5//37 + +f/9+/n//fv5//37+f/9+/n///38///+/f///v3///79///+/f///vz/+PTu//fx6v/38uv/9/Lr//fy + 6//38uv/9/Lr//jy6//99ev/6+3u/1+j8f8Sac3/EBYc/4hxd//46Ov/4cjN/9Swt//Ws7r/1rO6/9m3 + vv/Gm6P/mVhm/76Qmf+lc3j/lFtg/5ZeY/+WXmP/ll5j/5ZeY/+WXmP/ll5j/5ZeY/+WXmP/ll5j/5Ze + Y/+WXmP/klle/7CAhv/ZuL//1rO6/9azuv/Ws7r/1bK5/2dgYdcAAACpAAAAiAAAAGAAAAA8AAAAIAAA + AA0AAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACtnqEM6NXZ6P// + ///iys//1K+3/9azuv/XtLv/2ba9/0E7Qf8HCxH/npqV/9ze3/+yxdn/mbjb/4av3f94qN7/Z6Dg/2af + 4P9mn+D/Zp/g/2Wf4P+Ksdz/r8PZ/8/T1v/r4dP/+OfS//Xl0v/u4tP/7OHT/+zh0//s4dP/7OHT/+zh + 0//s4dP/7OHS/+3j1f/79/P//vz6//37+f/9+/n//fv5//37+f/9+/n//fv5//37+f/9+/r///79///+ + /f///v3///79///+/v/9+/n/9/Lr//fy6//38uv/9/Lr//fy6//38uv/9/Lr//fy6//+9uv/7u/v/1aW + 3v8LHC7/bFld//bh5f/o1dn/1K+2/9azuv/Ws7r/2La9/8ujq/+bXGn/uIaR/619g/+TWl7/ll5j/5Ze + Y/+WXmP/ll5j/5ZeY/+WXmP/ll5j/5ZeY/+WXmP/ll5j/5ZeY/+SWV7/sYKI/9q4v//Ws7r/1rO6/9az + uv/Vsbn/V1NU0wAAAKgAAACIAAAAXwAAADsAAAAfAAAADQAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAHlzdATm1dnK/////+jV2P/Ur7b/1rO6/9azuv/fusL/XVJY/wsL + Cv8tVob/I4Tz/xF15/8Lcuj/C3Lo/wty6P8Lcuj/C3Lo/wty6P8Lcuj/C3Lo/wpy6P8PdOj/Hnzm/z6M + 5P92p97/usjY/+3h0//459L/7+LT/+zh0//s4dP/7OHT/+zh0//s4dP/6+DR//Hp3//+/Pr//fv5//37 + +f/9+/n//fv5//37+f/9+/n//fv5//37+f/+/Pv///79///+/f///v3///79/////v/7+PT/9/Hq//fy + 6//38uv/9/Lr//fy6//38uv/9/Lr//fy6//+9+z/7+3r/y44Qf9MQEb/7dXZ/+/h4//Ur7b/1rO6/9az + uv/Xtbz/0auy/59hbv+we4b/tYeN/5NZXv+WXmP/ll5j/5ZeY/+WXmP/ll5j/5ZeY/+WXmP/ll5j/5Ze + Y/+WXmP/ll5j/5JZXv+zhIr/2ri//9azuv/Ws7r/1rO6/9WxuP9IREXOAAAApwAAAIcAAABeAAAAOgAA + AB4AAAAMAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAd/I + zKT//v7/7uDj/9Svtv/Ws7r/1rO6/+K8w/97anD/CgoJ/yJHcv8WffL/Fnjn/xd45/8XeOf/F3jn/xd4 + 5/8XeOf/F3jn/xd45/8XeOf/F3jn/xZ45/8Ud+f/D3To/wpx6P8Sduf/Qo3j/5y62//p4NP/+OfS/+3h + 0//s4dP/7OHT/+zh0//s4dP/7ODS//fy6//+/Pv//fv5//37+f/9+/n//fv5//37+f/9+/n//fv5//37 + +f///fz///79///+/f///v3///79///+/f/59fD/9/Hq//fy6//38uv/9/Lr//fy6//38uv/9/Lr//fy + 6////vT/Xl5e/y8pMP/gxcv/9uzu/9Wxuf/Ws7r/1rO6/9e0u//Vsbj/pGl2/6lvfP+8kJf/k1pf/5Ze + Y/+WXmP/ll5j/5ZeY/+WXmP/ll5j/5ZeY/+WXmP/ll5j/5ZeY/+WXmP/klle/7SGjP/auL//1rO6/9az + uv/Ws7r/1rO6/zkwMs0AAACmAAAAhQAAAFwAAAA5AAAAHgAAAAwAAAACAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB5dTXgPr29//06+3/1LC3/9azuv/Ws7r/4LvC/5iB + h/8PEBH/GzJN/xl77P8XeOj/F3jn/xd45/8XeOf/F3jn/xd45/8XeOf/F3jn/xd45/8XeOf/F3jn/xd4 + 5/8XeOf/F3jn/xZ35/8OdOj/C3Lo/zuK5P+rwdn/9eXS//Hk0v/s4dP/7OHT/+zh0//s4NL/7eTX//v5 + 9f/+/Pr//fv5//37+f/9+/n//fv5//37+f/9+/n//fv5//38+v///v3///79///+/f///v3///7+//78 + +v/38uz/9/Lq//fy6//38uv/9/Lr//fy6//38uv/9/Lr////9/+Dg4L/Ghkf/86yuP/78/X/2bi+/9Wy + uf/Ws7r/1rS7/9e0u/+rc3//oWRy/8CVnP+WXmP/ll5j/5ZeY/+WXmP/ll5j/5ZeY/+WXmP/ll5j/5Ze + Y/+WXmP/ll5j/5ZeY/+SWV7/tYiO/9q4v//Ws7r/1rO6/9azuv/XtLv/OzM0zAAAAKUAAACEAAAAWwAA + ADcAAAAdAAAACwAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AADfztFR9ezu//n09f/XtLv/1rK5/9azuv/duMD/s5ad/xYWGP8aKj7/HHnl/xZ46f8XeOf/F3jn/xd4 + 5/8XeOf/F3jn/xd45/8XeOf/F3jn/xd45/8XeOf/F3jn/xd45/8XeOf/F3jn/xd45/8XeOf/DnTo/w90 + 6P9knuD/4NvU//bm0v/s4dP/7OHT/+zh0//r4NH/8uvh//78+//9+/n//fv5//37+f/9+/n//fv5//37 + +f/9+/n//fv5//79+////v3///79///+/f///v3////+//z59v/38er/9/Lr//fy6//38uv/9/Lr//fy + 6//38uv///73/6Ggnf8OEBb/t5ui//73+P/ewcf/1bG4/9azuv/Ws7r/2be+/7J9iP+cXWr/wZae/5tl + af+VXWL/ll5j/5ZeY/+WXmP/ll5j/5ZeY/+WXmP/ll5j/5ZeY/+WXmP/ll5j/5JZXv+3ipD/2ri//9az + uv/Ws7r/1rK6/9e1vP88NTfLAAAApAAAAIEAAABYAAAANgAAABwAAAAKAAAAAQAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOLU1zXx5uj5/vz9/9m4v//Vsrn/1rO6/9q2 + vf/Gp63/JiUp/xUbIv8abcz/F3rt/xd45/8XeOf/F3jn/xd45/8XeOf/F3jn/xd45/8XeOf/F3jn/xd4 + 5/8XeOf/F3jn/xd45/8XeOf/F3jn/xd45/8XeOf/Fnfn/wlx6P82h+T/x8/X//nn0v/s4dP/7OHT/+zh + 0//r4dL/+PPt//78+//9+/n//fv5//37+f/9+/n//fv5//37+f/9+/n//fv5///+/P///v3///79///+ + /f///v3////9//n28f/38er/9/Lr//fy6//38uv/9/Lr//fy6///+/P/xcK9/w4SF/+ehYv///X3/+TN + 0v/Ur7b/1rO6/9azuv/ZuL//uYiS/5lYZv/Akpv/om5y/5RcYf+WXmP/ll5j/5ZeY/+WXmP/ll5j/5Ze + Y/+WXmP/ll5j/5ZeY/+WXmP/klle/7mMkv/auL//1rO6/9azuv/Wsrn/2Le9/z03OMoAAAChAAAAgAAA + AFYAAAA0AAAAGgAAAAkAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAwLS3EOvb3uz/////3cDG/9WwuP/Ws7r/2LS7/9azuv87Nzv/ERMV/x1nu/8We+//F3jn/xd4 + 5/8XeOf/F3jn/xd45/8XeOf/F3jn/xd45/8XeOf/F3jn/xd45/8XeOf/F3jn/xd45/8XeOf/F3jn/xd4 + 5/8XeOf/F3jn/w1z6P8ifub/t8fY//ro0v/s4dP/7OHT/+vg0v/v5dn//Pn3//38+v/9+/n//fv5//37 + +f/9+/n//fv5//37+f/9+/n//vz6///+/f///v3///79///+/f///v7//v37//jz7f/38ur/9/Lr//fy + 6//38uv/9/Lr//338P/c2NP/FRoe/4Brcv/97vH/7Nzf/9Outv/Ws7r/1rO6/9m4vv/Ak5z/mFhl/7uL + lP+peH7/k1pf/5ZeY/+WXmP/ll5j/5ZeY/+WXmP/ll5j/5ZeY/+WXmP/ll5j/5ZeY/+SWV7/uo6U/9q4 + v//Ws7r/1rO6/9Wyuf/ZuL//QDo7yQAAAJ8AAAB9AAAAVAAAADIAAAAZAAAACAAAAAEAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACLhIUH6Njbz//////iyc7/1K+3/9az + uv/Ws7r/3rnA/1VMUv8ODgz/G1OV/xZ98/8XeOf/F3jn/xd45/8XeOf/F3jn/xd45/8XeOf/F3jn/xd4 + 5/8XeOf/F3jn/xd45/8XeOf/F3jn/xd45/8XeOf/F3jn/xd45/8XeOf/F3jn/w906P8ceuf/scTZ//no + 0v/s4dP/7OHT/+vg0f/z7OT//vz7//37+f/9+/n//fv5//37+f/9+/n//fv5//37+f/9+/n//v37///+ + /f///v3///79///+/f////7//Pr3//fy6v/38uv/9/Lr//fy6//38uv/+vTt//Hs5f8uMjT/X1BX//fk + 5//06ev/1K+3/9azuv/Ws7r/2be+/8edpf+ZWWb/tICL/7GDif+TWV7/ll5j/5ZeY/+WXmP/ll5j/5Ze + Y/+WXmP/ll5j/5ZeY/+WXmP/ll5j/5JZXv+8kZf/2ri//9azuv/Ws7r/1bK5/9e5vv85NTbGAAAAngAA + AHsAAABRAAAAMQAAABcAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAALiztKp/////+fT1//Ur7b/1rO6/9azuv/ivMT/c2Rq/woKCf8eSXz/GH7z/xd4 + 5/8XeOf/F3jn/xd45/8XeOf/F3jn/xd45/8XeOf/F3jn/xd45/8XeOf/F3jn/xd45/8XeOf/F3jn/xd4 + 5/8XeOf/F3jn/xd45/8XeOf/F3jn/xB16P8aeuf/ssTY//nn0v/s4dP/7OHS/+zh0//59e///vz7//37 + +f/9+/n//fv5//37+f/9+/n//fv5//37+f/9+/n///78///+/f///v3///79///+/f////7/+vby//fx + 6v/38uv/9/Lr//fy6//48uv//vny/0hKTP9BNz7/69TZ//r19v/Ws7r/1rK6/9azuv/Ytr3/zKSt/51e + a/+tdYH/uYyS/5NaX/+WXmP/ll5j/5ZeY/+WXmP/ll5j/5ZeY/+WXmP/ll5j/5ZeY/+WXmP/klle/76U + mv/auL//1rO6/9azuv/Vsbj/0bK5/CUkJMAAAACdAAAAeQAAAFAAAAAvAAAAFwAAAAgAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeTT1ob7+Pj/7d/i/9Sv + tv/Ws7r/1rO6/+G8w/+Qe4H/DQ4P/x02Uv8ZfO3/E3bo/xB06P8Oc+j/DXPo/w1z6P8Nc+j/DnPo/xB1 + 6P8Ud+f/F3jn/xd45/8XeOf/F3jn/xd45/8XeOf/F3jn/xd45/8XeOf/F3jn/xd45/8XeOf/F3jn/xB1 + 5/8ce+f/u8nY//jn0v/s4dP/6+DR//Dm2//8+vj//fv6//37+f/9+/n//fv5//37+f/9+/n//fv5//37 + +f/+/Pr///79///+/f///v3///79///+/f///fz/+fTu//fy6v/38uv/9/Lr//fy6////fb/cHBw/yUi + KP/dw8j//vz9/9q7wf/Vsbj/1rO6/9e1u//SrLT/oWRx/6Vqd/+/k5r/lVxh/5ZeY/+WXmP/ll5j/5Ze + Y/+WXmP/ll5j/5ZeY/+WXmP/ll5j/5ZeY/+SWV7/wJac/9q4v//Ws7r/1rO6/9WxuP/HrLL5EhISugAA + AJsAAAB2AAAATgAAAC0AAAAWAAAABwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA3MfMVvfw8f/z6ev/1LC3/9azuv/Ws7r/3bnA/6yRmP8TFBb/Hy09/xl4 + 5P8jf+j/PYvk/0mR4v9MkuL/TJLi/0yS4v9JkeL/N4jk/x175v8Mc+j/DXPo/xV35/8XeOf/F3jn/xd4 + 5/8XeOf/F3jn/xd45/8XeOf/F3jn/xd45/8XeOf/F3jn/w906P8ngOb/0NPW//Xl0v/s4dP/6+DR//Xu + 5v/+/Pv//fv5//37+f/9+/n//fv5//37+f/9+/n//fv5//37+f/+/fz///79///+/f///v3///79//// + /v/9+/j/9/Lr//fy6//38uv/9/Lr////9/+RkI//ExQa/8assv//////4MXL/9Swt//Ws7r/17S7/9Wy + uf+mbHj/n2Jv/8GVnf+YYWb/lV1i/5ZeY/+WXmP/ll5j/5ZeY/+WXmP/ll5j/5ZeY/+WXmP/ll5j/5Na + X//CmJ7/2be//9azuv/Ws7r/1rK5/7+jqPcDAgO2AAAAmQAAAHUAAABMAAAALAAAABUAAAAGAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADez9I78+jq/Pjz + 8//Ws7r/1rK5/9azuv/bt77/wqOp/yAhJv8UGyP/kqjA/9zc2//p39P/8ePT//Lk0v/y5NL/8uTS//Hj + 0//m3tT/0NPW/5262v9RlOH/FHbo/w1z6P8XeOf/F3jn/xd45/8XeOf/F3jn/xd45/8XeOf/F3jn/xd4 + 5/8XeOf/GHjn/wty6P9Gj+P/6uDT/+/i0//s4dL/7OLU//r28v/+/Pv//fv5//37+f/9+/n//fv5//37 + +f/9+/n//fv5//37+f///v3///79///+/f///v3///79/////v/7+PT/9/Hq//fy6//38uv///z0/7e0 + sf8NERb/rpSb///////n09f/1K+2/9azuv/Ws7r/17W8/612gf+aW2j/wJSd/55pbv+VXGH/ll5j/5Ze + Y/+WXmP/ll5j/5ZeY/+WXmP/ll5j/5ZeY/+WXmP/lFtg/8OaoP/Zt77/1rO6/9azuv/Wsrn/vqKn9wMC + ArUAAACXAAAAcgAAAEoAAAArAAAAFAAAAAYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAMSztRPs3N/w/fv7/9i3vv/Vsrn/1rO6/9i1vP/Tsbj/NDE3/woP + FP+4rJ7/++3b/+7i0//t4dP/7eHT/+3h0//t4dP/7eHT/+/i0//y5NL/+OfS//Tl0/+5yNj/RY7j/wty + 6P8Wd+f/F3jn/xd45/8XeOf/F3jn/xd45/8XeOf/F3jn/xd45/8XeOf/F3jn/wlx6P+BrN3/+OfS/+zh + 0//r4NH/8Ojd//37+f/9+/n//fv5//37+f/9+/n//fv5//37+f/9+/n//fv5//78+v///v3///79///+ + /f///v3///79///+/f/59fD/9/Hq//jz6///+vH/1dDK/xEVGv+PeX////v8/+7g4//Ur7b/1rO6/9az + uv/ZuL7/s3+K/5hXZf+8jZb/pnN4/5RbYP+WXmP/ll5j/5ZeY/+WXmP/ll5j/5ZeY/+WXmP/ll5j/5Ze + Y/+UXGH/xZyj/9m3vv/Ws7r/1rO6/9Wxuf/CqK33AwICswAAAJUAAABwAAAASAAAACkAAAASAAAABQAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoZiZCera + 3dT+/f3/3L/F/9WxuP/Ws7r/17S7/924v/9ORkz/AQcN/4+KhP/57d7/7OHT/+zh0//s4dP/7OHT/+zh + 0//s4dP/7OHT/+zh0//s4dP/7eHT//fn0v/t4dP/dafe/w1z6P8Uduf/F3jn/xd45/8XeOf/F3jn/xd4 + 5/8XeOf/F3jn/xd45/8XeOf/E3bn/x575v/P09b/8+TS/+zh0//r4NH/9vDp//78+//9+/n//fv5//37 + +f/9+/n//fv5//37+f/9+/n//fv5//79/P///v3///79///+/f///v3////+//78+v/28uz/9fHr//n1 + 7//p5d//JCgs/25cY//+8fP/9u7v/9WwuP/Ws7r/1rO6/9m4vv+6ipT/mFdl/7aDjv+ufoP/k1pe/5Ze + Y/+WXmP/ll5j/5ZeY/+WXmP/ll5j/5ZeY/+WXmP/ll1i/5VdYv/GnqT/2be+/9azuv/Ws7r/1bG4/8Or + sPYBAQGwAAAAkwAAAG0AAABGAAAAJwAAABIAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAC4szRr/7+/v/hx8z/1LC3/9azuv/Ws7r/4bzD/2te + ZP8ABgz/bmto//fr3P/s4dP/7OHT/+zh0//s4dP/7OHT/+zh0//s4dP/7OHT/+zh0//s4dP/7OHT//Dj + 0//459L/jbPc/xF16P8Sdef/F3jn/xd45/8XeOf/F3jn/xd45/8XeOf/F3jn/xd45/8XeOf/CXHo/3Sm + 3v/459L/7OHT/+zh0v/t49b/+/j0//38+v/9+/n//fv5//37+f/9+/n//fv5//37+f/9+/n///z5//// + /f/9/f3/+/z9//j7/v/2+v7/+fv//9vp+P+kyPL/p8r0/6nO+P8tOUb/UUNI//Ti5v/8+fr/17W8/9Wy + uf/Ws7r/2bi+/8KVnv+ZWGb/r3iE/7WHjf+TWl//ll5j/5ZeY/+WXmP/ll5j/5ZeY/+WXmP/ll5j/5Ze + Y/+WXWL/ll5j/8igp//Ztr3/1rO6/9azuv/UsLf/sp+j7wAAAK8AAACRAAAAagAAAEQAAAAmAAAAEQAA + AAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAHk0taN/Pn6/+bR1f/Ur7b/1rO6/9azuv/hvMP/iHV7/wMJD/9MTEz/8ufY/+3i0//s4dP/7OHT/+zh + 0//s4dP/7OHT/+zh0//s4dP/7OHT/+zh0//s4dP/7OHT/+7i0//559L/o73a/xl55/8Rdef/F3jn/xd4 + 5/8XeOf/F3jn/xd45/8XeOf/F3jn/xd45/8Rdej/LYPl/+Hb1P/v49P/7OHT/+vg0f/y6d///fz6//37 + +f/9+/n//fv5//37+f/9+/n//vz5//z7+f/y9vr/7fT9//L4/v/w9/7/8Pf+//D3/v/x9/7/8Pf+/63Q + +P+MvPT/mMj//0NZcP80Ky7/6NLW///////bvML/1bG4/9azuv/Yt73/yJ6n/5xcaf+nbXr/vI+W/5Nb + YP+WXmP/ll5j/5ZeY/+WXmP/ll5j/5ZeY/+WXmP/ll5j/5VdYv+WXmP/yaKp/9i2vf/Ws7r/1rO6/9Su + tv+bjZDoAAAArQAAAI8AAABnAAAAQQAAACQAAAAQAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANa/xF348vP/7Nzg/9Sutv/Ws7r/1rO6/9+6 + wf+ljJP/DBAV/zM0N//k2cz/7+TV/+zh0//s4dP/7OHT/+zh0//s4dP/7OHT/+zh0//s4dP/7OHT/+zh + 0//s4dP/7OHT/+3h0//66NL/scTZ/x585/8Sduj/F3jn/xd45/8XeOf/F3jn/xd45/8XeOf/F3jn/xZ3 + 5/8Qdej/s8XY//bm0v/s4dP/7OHT/+zg0v/38uv//vz7//37+f/9+/n//vv5//77+f/z9vr/5O/8/97s + /P/f7Pz/7fT+//L3/v/x9/7/8ff+//H3/v/0+f7/5/H9/53G9f+ayv//VnCO/yAbHf/Tu8H//////+DH + zP/UsLf/1rO6/9i2vP/Op6//n2Ju/6Fkcf++kpr/l2Bk/5ZdYv+WXmP/ll5j/5ZeY/+WXmP/ll5j/5Ze + Y/+WXmP/lV1i/5dfZP/LpKv/2La9/9azuv/Ws7r/1bK5/4h2eeMAAACrAAAAjAAAAGQAAAA/AAAAIgAA + AA4AAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAA39HUQPTr7Pzy5+n/1K+2/9azuv/Ws7r/3Le//7yfpf8bHSL/Gx8j/9HIvP/y5tj/7OHT/+zh + 0//s4dP/7OHT/+zh0//s4dP/7OHT/+zh0//s4dP/7OHT/+zh0//s4dP/7OHT/+zh0//86NL/rcLZ/xZ3 + 5/8Wd+f/F3jn/xd45/8XeOf/F3jn/xd45/8XeOf/F3jn/wty6P9xpd7/9+bS/+zh0//s4dP/7ODS/+7k + 1//7+PX//fz6//77+f/8+/r/6vL7/97s/P/f7Pz/4O38/9/t/P/j7/3/8ff+//H3/v/x9/7/8ff+//H3 + /v/2+v//0uX7/5jH/f9qj7n/ExUZ/7ykqf//////6NPX/9Svtv/Ws7r/17S7/9Ovtv+jaHT/nF1q/7+S + m/+cZmv/lV1i/5ZeY/+WXmP/ll5j/5ZeY/+WXmP/ll5j/5ZeY/+VXWL/mGFm/82nrv/Ytbz/1rO6/9az + uv/Ws7n/iXd74wAAAKoAAACKAAAAYQAAADwAAAAhAAAADQAAAAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADHur0Y7d7i9Pfv8f/Vsrn/1rO6/9az + uv/Ztbz/zq20/y4sMf8NERf/t6+m//Xp2v/s4dP/7OHT/+zh0//s4dP/7OHT/+zh0//s4dP/7OHT/+zh + 0//s4dP/7OHT/+zh0//s4dP/7OHT/+7i0//05dL/SpLi/w506P8XeOf/F3jn/xd45/8XeOf/F3jn/xd4 + 5/8XeOf/DXPo/0uS4v/05dL/7OHT/+zh0//s4dP/6+DR//Lr4v///fr/+vr5/+Xw+//e7Pz/4O38/+Dt + /P/g7fz/4O38/9/s/P/p8v3/8vj+//H3/v/x9/7/8ff+//H3/v/1+f7/vdz+/3Wg0f8PExn/n4mO//// + ///v4eP/1K+2/9azuv/XtLv/1rO6/6lwfP+aWWf/u4yW/6Rwdf+UW2D/ll5j/5ZeY/+WXmP/ll5j/5Ze + Y/+WXmP/ll5j/5VdYv+ZYmf/0Kqx/9e1vP/Ws7r/1rO6/9Wyuf+OgIPiAAAApwAAAIYAAABeAAAAOgAA + AB8AAAAMAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAALSqrAzq2t3a+vX2/9e1vP/Wsrn/1rO6/9e0u//atr3/RD5D/wQJD/+Zk4z/+Ozd/+zh + 0//s4dP/7OHT/+zh0//s4dP/7OHT/+zh0//s4dP/7OHT/+zh0//s4dP/7OHT/+zh0//s4dP/7OHT//nn + 0v9ineD/C3Lo/xd45/8XeOf/F3jn/xd45/8XeOf/F3jn/xd45/8Nc+j/T5Ti//Tl0v/s4dP/7OHT/+zh + 0//s4dP/7+LS//n07f/n8v3/3uz8/+Dt/P/g7fz/4O38/+Dt/P/g7fz/4O38/+Dt/P/u9f7/8vf+//H3 + /v/x9/7/8ff+//P4/v/v9///mL7q/xMgL/9+am////v8//bu8P/VsLj/1rO6/9azuv/Yt73/r3mF/5hX + Zf+2hI7/rHuA/5NaX/+WXmP/ll5j/5ZeY/+WXmP/ll5j/5ZeY/+WXmP/lV1h/5tkaf/RrbT/17W8/9az + uv/Ws7r/1bG5/3tydNwAAACkAAAAgwAAAFsAAAA3AAAAHQAAAAsAAAACAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAuLO0rX79/j/27zC/9Wx + uP/Ws7r/17O6/9+7wv9fVFn/AAUL/3x5df/47Nz/7OHT/+zh0//s4dP/7OHT/+zh0//s4dP/7OHT/+zh + 0//s4dP/7OHT/+zh0//s4dP/7OHT/+zh0//s4dP/+OfS/2Cc4P8Lcuj/F3jn/xd45/8XeOf/F3jn/xd4 + 5/8XeOf/F3jn/w1z6P9PlOL/9OXS/+zh0//s4dP/7OHT//Dj0//i29P/Z6Lm/8vh/P/l8Pz/4O38/+Dt + /P/g7fz/4O38/+Dt/P/g7fz/3+z8/+Tv/f/x9/7/8ff+//H3/v/x9/7/8ff+//f7///Z6///ITFC/15O + U//87/H//Pr6/9i2vf/Vsrn/1rO6/9m4vv+2g47/mFhl/695hP+0hYv/k1pf/5ZeY/+WXmP/ll5j/5Ze + Y/+WXmP/ll5j/5ZeY/+VXGH/nWZr/9Kutf/XtLv/1rO6/9azuv/Vsbj/WFRV0AAAAKIAAACAAAAAVgAA + ADQAAAAbAAAACQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAB48/Tnfn09f/gxcr/1LC3/9azuv/Ws7r/4r3E/3tqcP8BBgv/ZGRk//jt + 4P/s4dL/7OHT/+zh0//s4dP/7OHT/+zh0//s4dP/7OHT/+zh0//s4dP/7OHT/+zh0//s4dP/7OHT/+3h + 0//z5NL/U5Xi/w1z6P8XeOf/F3jn/xd45/8XeOf/F3jn/xd45/8XeOf/DXPo/02T4v/05dL/7OHT/+zh + 0//t4dP/9ubS/2yi3/8Aauf/bqvw/+nz/f/h7fz/4O38/+Dt/P/g7fz/4O38/+Dt/P/g7fz/3+38/+rz + /v/y+P7/8ff+//H3/v/x9/7/8vf+//v///9XZHH/OTA1//Hf4///////3L7D/9WxuP/Ws7r/2bi+/76P + mf+ZWWf/qG57/7qNlP+TWmD/ll5j/5ZeY/+WXmP/ll5j/5ZeY/+WXmP/ll5j/5RcYf+fam//1LC3/9e0 + u//Ws7r/1rO6/9a0u/9BOTvJAAAAnwAAAHwAAABTAAAAMgAAABkAAAAIAAAAAQAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHgz9Jn9u7v/+XO + 0//Ur7b/1rO6/9azuv/gu8L/l4CH/wYKEP9JS0//+/Xv/+3i0//s4dP/7OHT/+zh0//s4dP/7OHT/+zh + 0//s4dP/7OHT/+zh0//s4dP/7OHT/+zh0//s4dP/7+LT/+Xd1P8zhuX/EXXn/xd45/8XeOf/F3jn/xd4 + 5/8XeOf/F3jn/xd45/8Mc+j/WJjh//Xl0v/s4dP/7OHT//jn0v+owNn/D3To/xN25/8XeOf/rdD3/+rz + /f/g7fz/4O38/+Dt/P/g7fz/4O38/+Dt/P/g7fz/4e38/+/2/v/y9/7/8ff+//H3/v/x9/7//////32G + j/8fGyD/3srP///////hyM3/1K+3/9azuv/Zt77/xJmi/5tbaf+iZnP/vZCY/5ZfZP+WXmP/ll5j/5Ze + Y/+WXmP/ll5j/5ZeY/+WXmP/lFtg/6Fscv/Vsbj/17S7/9azuv/Wsrn/2Le9/0U+P8kAAACdAAAAeQAA + AFAAAAAvAAAAFwAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAN3Lz1Ly5+r/6tnc/9Svtv/Ws7r/1rO6/925wP+xlZv/EBQZ/y4x + NP/v7er/9+/m/+vf0f/s4dP/7OHT/+zh0//s4dP/7OHT/+zh0//s4dP/7OHT/+zh0//s4dP/7OHT/+zh + 0//15tL/vcnY/xR35/8WeOf/F3jn/xd45/8XeOf/F3jn/xd45/8XeOf/F3jn/wpx6P+Msdz/+efS/+zh + 0//w49P/49zU/zOG5f8PdOj/GHjn/w5z5v89juv/2un7/+Tv/P/g7fz/4O38/+Dt/P/g7fz/4O38/+Dt + /P/e7Pz/4+/9//D3/v/w9/7/8Pf+//D3/v/8////pq+6/xIUGf/FsLX//////+fT1//Ur7b/1rO6/9i2 + vf/Koqr/nmBt/51ebP++kZr/m2Vq/5VdYv+WXmP/ll5j/5ZeY/+WXmP/ll5j/5ZeY/+UW2D/o290/9az + uf/XtLv/1rO6/9Wyuf/XuL7+ODU2wgAAAJoAAAB1AAAATAAAACwAAAAVAAAABwAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0sXII+zc + 3/jw4uX/0662/9azuv/Ws7r/2re+/8Skq/8jIyj/Fhoe/9rY1v///vz/7+bZ/+vg0f/s4dP/7OHT/+zh + 0//s4dP/7OHT/+zh0//s4dP/7OHT/+zh0//s4dP/7OHT//no0v9sot//C3Lo/xd45/8XeOf/F3jn/xd4 + 5/8XeOf/F3jn/xd45/8WeOf/EHXo/7DD2f/25tL/7OHT//no0v+IsNz/CXHo/xd45/8XeOf/F3jn/wxy + 5v97s/L/6/P9/+Dt/P/g7fz/4O38/+Dt/P/f7Pz/4O38/+bw+//q8vv/9Pj9//j6/v/4+v7/+Pr+//3/ + ///Kz9b/DhEX/6eTmf//////7t/i/9Svtv/Ws7r/17W8/9Crsv+hZHH/m1tp/7uMlf+jb3T/lFtg/5Ze + Y/+WXmP/ll5j/5ZeY/+WXmP/ll5j/5NaX/+lcnf/17S7/9a0u//Ws7r/1bG4/8mssvkUFBS3AAAAlgAA + AHAAAABJAAAAKgAAABMAAAAGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADFtLcU6NbZ7fPo6//Vsbj/1rO6/9azuv/YtLv/1bK5/zUy + N/8LDxT/vLq5///////59e//7OLU/+zh0//s4dP/7OHT/+zh0//s4dP/7OHT/+zh0//s4dP/7OHT/+zh + 0//25tL/x8/W/xt65/8Ud+f/F3jn/xd45/8XeOf/F3jn/xd45/8XeOf/F3jn/xN25/8jfub/2NfV//Hj + 0//w49P/4dzU/y6D5f8Rdef/F3jn/xd45/8XeOf/E3bn/xx75/+51vj/6fL9/+Dt/P/g7fz/3uz8/+fw + /P/3+Pr//fv5//78+f/+/Pn///79///+/f///v3//////+/t7P8iJir/gnB2///////17e7/1LC4/9az + uv/XtLv/1LC3/6ZreP+ZWWb/toSP/6p5fv+TWl//ll5j/5ZeY/+WXmP/ll5j/5ZeY/+WXmP/k1pf/6d0 + ev/Ytbz/1rO6/9azuv/Wsrn/waSp9wMDA7EAAACTAAAAbQAAAEYAAAAnAAAAEgAAAAUAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD89 + PQTk0dXD9ezu/9e0u//Wsrn/1rO6/9e0u//cuL//UEdN/wAFCv+ampr///////36+P/17+f/6+DR/+zh + 0//s4dP/7OHT/+zh0//s4dP/7OHT/+zh0//s4dP/8eTS/+zh0/9IkOL/DXPo/xd45/8XeOf/F3jn/xd4 + 5/8XeOf/F3jn/xd45/8XeOf/DHPo/1KV4v/z5NL/7eHT//jn0v+dutr/DHPo/xd45/8XeOf/F3jn/xd4 + 5/8XeOf/DXLm/0iV7f/g7fz/4u78/9/t/P/s8/v//fv5///8+f/9+/n//fv5//37+f/+/Pv///79///+ + /f////7//////zc7P/9eUFf///f4//v3+P/Xtbz/1bK5/9azuv/XtLv/rHSA/5lZZv+veYX/soOJ/5Na + X/+WXmP/ll5j/5ZeY/+WXmP/ll5j/5ZeY/+TWl//qXd9/9m3vv/Ws7r/1rO6/9WxuP/Gq7D3BQUFrwAA + AJAAAABpAAAAQgAAACUAAAAQAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAuDLz7H17O7/2rrA/9Wyuf/Ws7r/1rO6/+G8 + w/9qXWP/AAQJ/3p7e////////Pn2//369//x6d7/6+DR/+zh0//s4dP/7OHT/+zh0//s4dP/7OHT//Pk + 0v/y5NP/Zp/g/wty6P8XeOf/F3jn/xd45/8XeOf/F3jn/xd45/8XeOf/F3jn/xd45/8Lcuj/mbjb//jn + 0v/t4dP/9OXT/1SW4f8Mc+j/F3jn/xd45/8XeOf/F3jn/xd45/8XeOf/DXLm/4i68//q8/3/8PX7///8 + +f/9+/n//fv5//37+f/9+/n//fv5//37+f/+/fz///79///+/f//////YmVn/zoyOP/25+r//////9u7 + wv/Vsbj/1rO6/9m3vv+yfYj/mlln/6hve/+5jJL/k1pf/5ZeY/+WXmP/ll5j/5ZeY/+WXmP/ll5j/5NZ + Xv+sfIL/2be+/9azuv/Ws7r/1K+3/7WhpfAAAACrAAAAiwAAAGQAAAA/AAAAIgAAAA4AAAADAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAB4c7Se/Lm6f/fw8j/1bG4/9azuv/Ws7r/4bzD/4Zzev8CBw3/VFZY/////v/8+fb//Pr3//v3 + 8//u49b/7ODS/+zh0//s4dP/7OHT/+7i0//559L/4tzU/12b4f8Lcuj/F3jn/xd45/8XeOf/F3jn/xd4 + 5/8XeOf/F3jn/xd45/8XeOf/EXXn/yqB5f/d2tX/8OPT//Hj0//Z19X/JX/m/xN25/8XeOf/F3jn/xd4 + 5/8XeOf/F3jn/xd45/8Sdef/IX7o/8fe+f///vr//fv5//37+f/9+/n//fv5//37+f/9+/n//fv5//37 + +v///v3///79//////+Eh4j/IBwi/+PS1f//////4MXL/9Swt//Ws7r/2bi+/7qJk/+aWmj/o2Zz/7yP + l/+WXmP/ll5j/5ZeY/+WXmP/ll5j/5ZeY/+WXmP/klle/7GBh//ZuL//1rO6/9azuv/VsLf/lIOG5QAA + AKgAAACIAAAAYAAAADwAAAAgAAAADQAAAAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADZwcZi7+Ll/+PL0P/Ur7f/1rO6/9az + uv/fusH/ooqQ/wgNE/89P0L/+vXx///8+P/8+fb//fr4//fy7P/s4dL/7+LS//Pk0v/559L/7+PS/6rA + 2f81h+T/C3Lo/xd45/8XeOf/F3jn/xd45/8XeOf/F3jn/xd45/8XeOf/F3jn/xd45/8Jcej/gKzd//nn + 0v/s4dP/9ubS/7HE2P8QdOj/F3jn/xd45/8XeOf/F3jn/xd45/8XeOf/F3jn/xd45/8Mcub/rsjl//// + +f/9+/n//fv5//37+f/9+/n//fv5//37+f/9+/n//fv5//78+////v3//////7Kysv8TExn/yre7//// + ///m0NT/1K+2/9azuv/ZuL7/wpWe/5tbaf+eX23/vpGZ/5pkaf+VXWL/ll5j/5ZeY/+WXmP/ll5j/5Ze + Y/+SWV7/tYaN/9m4v//Ws7r/1rO6/9ayuf+Rf4PkAAAApAAAAIMAAABbAAAANwAAAB0AAAALAAAAAgAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAOHX2Tfq2dz86NTY/9Svtv/Ws7r/1rO6/9y4v/+5m6L/GBsg/x0iJ//V2+L/+vz8//v4 + 9v/9+vb///v4//Ps4//f2tL/y9HW/5S23P9Gj+P/D3To/xB06P8XeOf/F3jn/xd45/8XeOf/F3jn/xd4 + 5/8XeOf/F3jn/xd45/8XeOf/EHXo/y2D5f/e2tT/8ePT/+zh0//559L/jLHc/wty6P8XeOf/F3jn/xd4 + 5/8XeOf/F3jn/xd45/8XeOf/E3bn/yiA5v/a19P/+/Tr//78+//9+/n//fv5//37+f/9+/n//fv5//37 + +f/9+/n//fv5///+/P//////0dHR/w4RFv+rmZ7//////+3d4P/Ur7b/1rO6/9i2vf/JoKj/nV9s/5tc + av+7jJX/om5z/5RcYf+WXmP/ll5j/5ZeY/+WXmP/ll5j/5JZXv+5jJL/2ri//9azuv/Ws7r/1bG4/4N6 + e9sAAAChAAAAfwAAAFYAAAA0AAAAGgAAAAkAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAybm8HObR1ffs297/1K+2/9az + uv/Ws7r/2ba9/8yrsv8qKC3/ERcd/6e81P/Y6///1ub5/9ro+f/c6fr/2un5/1qd6P8RdOb/DHLo/w50 + 6P8WeOf/F3jn/xd45/8XeOf/F3jn/xd45/8XeOf/F3jn/xd45/8XeOf/F3jn/xZ35/8Mc+j/n7va//nn + 0v/s4dP/7eHT//Pk0v9bmeH/DXPo/xd45/8XeOf/F3jn/xd45/8XeOf/F3jn/xd45/8PdOj/RI7j/+/i + 0v/v5Nf/+/j2//78+v/9+/n//fv5//37+f/9+/n//fv5//37+f/9+/n//vz6///////v7u3/IiUp/4Z2 + e///////9Ors/9Swt//Ws7r/17W8/9Cqsf+gZHD/mlpo/7eEj/+ren//k1pf/5ZeY/+WXmP/ll5j/5Ze + Y/+WXmP/klle/72SmP/auL//1rO6/9azuv/Vsbj/VVBRzAAAAJ0AAAB6AAAAUQAAADAAAAAXAAAACAAA + AAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAACyqqwL5M7S1u7e4f/VsLj/1rO6/9azuv/YtLv/2LW8/0A7QP8GCg7/jJyu/9nu + ///O4vr/zeL6/83i+v/U5vv/qc74/xp66P8Tdeb/F3jn/xd45/8XeOf/F3jn/xd45/8XeOf/F3jn/xd4 + 5/8XeOf/F3jn/xd45/8XeOf/CXHo/2Gc4P/05dP/7eLT/+zh0//t4tP/8OPT/0yS4v8Oc+j/F3jn/xd4 + 5/8XeOf/F3jn/xd45/8XeOf/F3jn/wxz6P9ZmeH/9OXS/+zg0f/y6uH//vz7//37+f/9+/n//fv5//37 + +f/9+/n//fv5//37+f/9+/n///79/////v86PkH/YVRa///7/f/58/X/1rS7/9ayuf/XtLv/1LC3/6Zs + eP+aWmj/sHqF/7OFi/+SWV7/ll5j/5ZeY/+WXmP/ll5j/5ZeY/+TWl//wJad/9q4v//Ws7r/1rO6/9e1 + vP9JQULHAAAAmQAAAHQAAABMAAAALAAAABUAAAAHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAALdxMm+7uDj/9e0 + u//Ws7r/1rO6/9a0u//fusH/W1BW/wEFCf9yhpz/2u///8/j+v/P4/r/z+P6/8/j+v/b6vv/hLjy/w1y + 5v8Wd+f/F3jn/xd45/8XeOf/F3jn/xd45/8XeOf/F3jn/xd45/8XeOf/F3jn/wty6P88i+P/4tzU//Lk + 0//s4dP/7OHT/+3i0//w49P/TpPi/w5z6P8XeOf/F3jn/xd45/8XeOf/F3jn/xd45/8XeOf/DHLo/2Se + 4P/15tL/7OHT/+zg0v/48+3//vz7//37+f/9+/n//fv5//37+f/9+/n//fv5//37+f/++/r//////2ls + bv85MTf/+O3v//79/f/ZuL//1bK5/9azuv/Ytbz/rHWA/5paZ/+ob3z/u4+V/5NbX/+WXmP/ll5j/5Ze + Y/+WXmP/ll5j/5RcYf/Em6H/2be+/9azuv/Vsrn/1bW8/jo3N78AAACUAAAAbgAAAEcAAAAoAAAAEgAA + AAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAeLO0pft3N//2bm//9ayuf/Ws7r/1rO6/+K9xP91Zmz/AgYK/1Rg + cf/X7f//z+P6/8/j+v/P4/r/z+P6/9Dk+v/W5/v/VJvt/wxy5v8XeOf/F3jn/xd45/8XeOf/F3jn/xd4 + 5/8XeOf/F3jn/xd45/8Mcuj/L4Tl/9LV1f/15tL/7OHT/+zh0//s4dP/7eLT//Dj0/9Ok+L/DnPo/xd4 + 5/8XeOf/F3jn/xd45/8XeOf/F3jn/xd45/8Mcuj/Y57g//Xm0v/s4dP/6+DS/+/l2f/8+vf//fz6//37 + +f/9+/n//fv5//37+f/9+/n//fv5//37+f//////kJKT/x8bIf/j09f//////92/xf/Vsbj/1rO6/9m3 + vv+zgIr/mlpo/6Nmc//AlJv/ll9k/5ZeYv+WXmP/ll5j/5ZeY/+WXWL/ll5j/8efpv/Zt77/1rO6/9Wy + uf/Gqa/5DAsLsQAAAJAAAABoAAAAQgAAACUAAAAQAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB28fLberX + 2//dwcb/1bG4/9azuv/Ws7r/4LvC/5J9g/8HCg3/PElZ/8/n///Q5Pr/z+P6/8/j+v/P4/r/z+P6/9Tm + +//C2/n/LITp/xB05v8XeOf/F3jn/xd45/8XeOf/F3jn/xd45/8XeOf/C3Ho/zOG5P/O0tb/9+bS/+vh + 0//s4dP/7OHT/+zh0//t4tP/7+PT/0uS4v8Oc+j/F3jn/xd45/8XeOf/F3jn/xd45/8XeOf/F3jn/w1z + 6P9PlOL/8+TS/+3h0//s4dP/6+DR//Ps5P/+/Pv//fv5//37+f/9+/n//fv5//37+f/9+/n//fv5//// + ///Av7//EBEW/8a1uf//////4snO/9Svt//Ws7r/2bi+/7yMlv+bW2j/nl9s/8GUnf+cZ2z/lVxi/5Ze + Y/+WXmP/ll5j/5VdYv+XX2T/y6Sq/9i2vf/Ws7r/1bG4/8assfYGBgasAAAAigAAAGIAAAA9AAAAIgAA + AA4AAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADg0dRR59PX/+HHzP/UsLf/1rO6/9azuv/eucD/rJKY/xAS + F/8nMDr/wtjx/9Pn/f/P4/r/z+P6/8/j+v/P4/r/z+P6/9rp+/+dxvX/E3bn/xV35/8XeOf/F3jn/xd4 + 5/8XeOf/FHfn/wlx6P9JkeL/2dfV//bm0v/r4dP/7OHT/+zh0//s4dP/7OHT/+zh0//05dL/YJzg/wxy + 6P8XeOf/F3jn/xd45/8XeOf/F3jn/xd45/8XeOf/Enbn/y2D5f/g29T/7+PT/+zh0//s4dL/7OHT//n1 + 8P/+/Pv//fv5//37+f/9+/n//fv5//37+f/9+/n//////9za2f8WGB7/n4+U///////n09f/1K+2/9az + uv/ZuL7/w5eh/5xcaf+bXGn/vY+Y/6Vyd/+UW2D/ll5j/5ZeY/+WXmP/lV1i/5liZ//PqrH/17W8/9az + uv/Ur7b/qJea6gAAAKUAAACEAAAAXAAAADgAAAAeAAAADAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANXD + xiPjy9D85MzR/9Swt//Ws7r/1rO6/9u3vv/Boqn/ICAl/xYcJP+wx+P/1en//8/j+v/P4/r/z+P6/8/j + +v/P4/r/0OP6/9rp+/9tqvD/C3Hm/xd45/8XeOf/Fnjn/wxz6P8Ud+f/eane/+vh0//05dL/6+HT/+zh + 0//s4dP/7OHT/+zh0//s4dP/7OHT//nn0v+QtNz/C3Lo/xd45/8XeOf/F3jn/xd45/8XeOf/F3jn/xd4 + 5/8WeOf/EHXo/7HE2f/35tL/7OHT/+zh0//r4NH/7+ba//37+P/9+/r//fv5//37+f/9+/n//fv5//37 + +f///vz/+Pb0/yktMf92aG7//////+3f4v/Ur7b/1rO6/9i2vf/Loqv/nmBt/5pbaP+4hpD/rn6D/5Na + X/+WXmP/ll5j/5ZeY/+UXGH/nWZs/9Kutf/XtLv/1rO6/9WyuP+XhYjjAAAAoAAAAH4AAABWAAAANAAA + ABoAAAAJAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0MTGF+LKz+rm0NT/1LC3/9azuv/Ws7r/2LW8/9Kw + t/8yLzT/CxEX/5itxP/Y7P//z+P6/8/j+v/P4/r/z+P6/8/j+v/P4/r/0uX6/8/j+v9AkOv/DHLm/w1z + 6P8Oc+j/SZHj/7zJ2P/459L/7+PT/+zh0//s4dP/7OHT/+zh0//s4dP/7OHT/+zh0//s4dP/9ebS/7bG + 2P8Rdej/Fnfn/xd45/8XeOf/F3jn/xd45/8XeOf/F3jn/xd45/8Mc+j/Wpnh//bm0v/t4dP/7OHT/+zh + 0//r4NH/9e7m//78+//9+/n//fv5//37+f/9+/n//fv5//78+v////7/UFNV/0tBSP//+Pn/9Ovt/9Sw + t//Ws7r/17W8/9Gss/+hZXL/m1to/7B6hf+3ipD/klle/5ZeY/+WXmP/ll5j/5RbYP+hbHH/1bG4/9e0 + u//Ws7r/1bG4/4Z7fdkAAACbAAAAdwAAAE8AAAAvAAAAFwAAAAgAAAABAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAD3sbLxubR1f/Vsrn/1rO6/9azuv/XtLv/27e+/0tESv8DBgr/gZGk/9nu///P4/r/z+P6/8/j + +v/P4/r/z+P6/8/j+v/O4/r/1ef7/6/R+P8kf+j/SZHh/6rA2f/v49P/9ubS/+zh0//s4dP/7OHT/+zh + 0//s4dP/7OHT/+zh0//s4dP/7OHT/+zh0//w49P/3dnV/ymB5f8Sduf/F3jn/xd45/8XeOf/F3jn/xd4 + 5/8XeOf/F3jn/xV45/8Sduj/scTZ//nn0v/s4dP/7OHT/+zh0v/s4tT/+vfy//78+//9+/n//fv5//37 + +f/9+/n//fv5//////94env/KSQq/+/h5P/79vf/1rO6/9ayuf/XtLv/1bG4/6duev+bW2j/p257/76S + mf+VXGD/ll5j/5ZeY/+WXmP/k1pf/6VyeP/Xtbz/1rO6/9azuv/Ws7r/VUxOyAAAAJUAAABwAAAASQAA + ACoAAAATAAAABgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAALgyc6x5tDV/9e1vP/Ws7r/1rO6/9az + uv/hvMP/ZVle/wIGCf9lc4P/1+3//8zi+v/N4vr/zeL6/83i+v/M4vr/zuL6/9Hk+v/Y6Pn/6fH6/97k + 6//t4dH/9+bS/+7i0//s4dP/7OHT/+zh0//s4dP/7OHT/+zh0//s4dP/7OHT/+zh0//s4dP/7OHT/+zh + 0//15tL/XJrg/wty6P8XeOf/F3jn/xd45/8XeOf/F3jn/xd45/8XeOf/F3jn/w906P8xheT/29nV//Xm + 0v/s4dP/7OHT/+vg0f/w6N3//fv5//37+f/9+/n//fv5//37+f/9+/n//////6mpqf8VFBr/1MPH///9 + /v/Yt77/1bK5/9azuv/Ytr3/r3iD/5tbaP+hZHH/wpae/5hhZv+VXWL/ll5j/5ZeY/+TWV7/rHuB/9m3 + vv/Ws7r/1bK5/9W0uv4+Oju9AAAAjwAAAGgAAABCAAAAJQAAABAAAAAEAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAd7JzHrkzNH/2bm//9ayuf/Ws7r/1rO6/+G8w/+Cb3X/AwgM/05VXf/m8/7/4Ov5/9/r + +f/f6/n/4Ov5/+jw+P/w8/f/9/b3//z59v//+vb///33//Pq4P/r4NH/7OHT/+zh0//s4dP/7OHT/+zh + 0//s4dP/7OHT/+zh0//s4dP/7OHT/+zh0//s4dP/7OHT//fm0v+mv9r/DXPo/xd45/8XeOf/F3jn/xd4 + 5/8XeOf/F3jn/xd45/8XeOf/F3jn/wxy6P9EjuP/4NvU//fm0v/s4dP/7OHT/+vg0f/28On//vz7//37 + +f/9+/n//fv5//37+f//////1NPR/xUXHP+vnKH//////9u8wv/Vsbj/1rO6/9m4vv+4hpD/m1to/51e + bP/BlZ7/oGtw/5RcYf+WXmP/ll5j/5JZXv+0hYv/2bi//9azuv/Vsrn/y66z+Q4NDasAAACHAAAAYQAA + ADwAAAAhAAAADQAAAAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA3cjMaOLJzv/cvsT/1bG5/9az + uv/Ws7r/37vC/56Gjf8IDRL/PD5A//n18f///fj//vr2//769v/++vb///r2//769v/9+vb//Pn2//z5 + 9v/8+ff/+/j0/+7k2P/r4NL/7OHT/+zh0//s4dP/7OHT/+zh0//s4dP/7OHT/+zh0//s4dP/7OHT/+zh + 0//s4dP/7+LT/+bf1P83iOT/EHTo/xd45/8XeOf/F3jn/xd45/8XeOf/F3jn/xd45/8XeOf/F3jn/wty + 6P86ieT/xM3X//ro0v/y5NP/7OHS/+3i1f/7+PT//fz6//37+f/9+/n//fv5///+/P/29PL/KCww/4Bv + df///f3/38TJ/9WwuP/Ws7r/2bi+/8GUnf+bXGn/m1tp/72Nl/+peH3/k1pf/5ZeY/+WXmP/klle/7uP + lf/auL//1rO6/9Swt/+8parxBQUFowAAAIAAAABYAAAANgAAABwAAAAKAAAAAgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAADf1dgy3sLI/t7Bx//Vsbj/1rO6/9azuv/duL//tZmf/xYZHv8gIyf/5uPg///+ + +//8+fb//Pn2//z59v/8+fb//Pn2//z59v/8+fb//Pn2//z59v/9+vj/+PPt/+zh0//s4dP/7OHT/+zh + 0//s4dP/7OHT/+zh0//s4dP/7OHT/+zh0//s4dP/7OHT/+zh0//s4dP/+efS/5W22/8Kcej/F3jn/xd4 + 5/8XeOf/F3jn/xd45/8XeOf/F3jn/xd45/8XeOf/F3jn/w506P8beub/fare/9jX1f/359L/9+XQ//nt + 3v///fr//vv5//77+f/++/n///z5//////9VWFr/TkJJ//rr7v/jy9D/1LC3/9azuv/Ytr3/yqGp/55f + bP+bW2j/toKN/7SHjP+SWV7/ll5j/5ZeY/+UW2H/xJuh/9m3vv/Ws7r/1bG4/52KjuQAAACbAAAAdwAA + AFAAAAAvAAAAFwAAAAgAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAM6/wiLew8j43sLI/9Wx + uP/Ws7r/1rO6/9q2vf/KqbD/JiYr/xIWG//Lycf////+//z59v/8+fb//Pn2//z59v/8+fb//Pn2//z5 + 9v/8+fb//Pn2//z59v/9+vj/9O3l/+vg0f/s4dP/7OHT/+zh0//s4dP/7OHT/+zh0//s4dP/7OHT/+zh + 0//s4dP/7OHT/+zh0//v4tP/6uDT/z+M5P8NdOj/F3jn/xd45/8XeOf/F3jn/xd45/8XeOf/F3jn/xd4 + 5/8XeOf/F3jn/xR25/8Kcuj/JX/m/2We4P+hvNr/xc3V/+vs7f///fv/+vr5//j5+v/z9vr/9Pz//4aS + n/8rJiv/4MfM/+PJzv/UsLj/1rO6/9e1vP/Rq7P/oWVy/5tbaf+tdYH/vpOZ/5NaX/+WXmP/lV1i/5dg + Zf/Np67/2LW8/9azuv/VsLj/gnh71QAAAJQAAABuAAAASAAAACkAAAATAAAABgAAAAEAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAmZOUCN3BxtLewsj/1bK5/9azuv/Ws7r/2LS7/9azuv89OD7/BAgO/6uq + qf///////Pn2//z59v/8+fb//Pn2//z59v/8+fb//Pn2//z59v/8+fb//Pn2//z59v/8+ff/8Ofc/+vg + 0f/s4dP/7OHT/+zh0//s4dP/7OHT/+zh0//s4dP/7OHT/+zh0//s4dP/7OHT/+zh0//25tL/uMfY/xR2 + 5/8Ud+f/F3jn/xd45/8XeOf/F3jn/xd45/8XeOf/F3jn/xd45/8XeOf/F3jn/xd45/8Tduf/C3Lo/w1z + 6P8Vdub/Nono/9Dj+v/o8fz/4O38/9/s/P/m9P//usnb/x0gJv+2mZ//3LnA/9azuv/Ws7r/1rS7/9az + uv+pcHz/m1to/6Vqdv/Em6L/l19k/5ZeY/+UXGD/n2tv/9SxuP/WtLv/1rO6/9e0u/9UTU/BAAAAigAA + AGUAAABAAAAAIwAAAA8AAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAC3MDFxN2/ + xv/Ws7r/1rO6/9azuv/WtLv/3rrB/1ZNUv8ABQr/jIyM///////8+fb//Pn2//z59v/8+fb//Pn2//z5 + 9v/8+fb//Pn2//z59v/8+fb//Pn2//369//69vH/7eLV/+zg0v/s4dP/7OHT/+zh0//s4dP/7OHT/+zh + 0//s4dP/7OHT/+zh0//s4dP/7OHT/+zh0//459L/f6ve/wlx6P8XeOf/F3jn/xd45/8XeOf/F3jn/xd4 + 5/8XeOf/F3jn/xd45/8XeOf/F3jn/xd45/8XeOf/F3jn/xV35/8JcOb/YKLv/+jy/f/h7fz/4O38/+Lv + /v/f7vz/MT1J/4Fscv/hvMP/1rO6/9azuv/Ws7r/2be+/7N/iv+bW2j/nmBu/8acpf+fa3D/lFxh/5JZ + Xv+tfYL/2be+/9azuv/Vsbn/0bS5+yAfH6sAAACBAAAAWwAAADcAAAAdAAAADAAAAAMAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHiz9KQ2rvB/9e1vP/Ws7r/1rO6/9azuv/ivMP/cWJo/wAF + Cv9lZmj///////z59v/8+fb//Pn2//z59v/8+fb//Pn2//z59v/8+fb//Pn2//z59v/8+fb//Pn2//36 + +P/28On/6+DS/+zh0//s4dP/7OHT/+zh0//s4dP/7OHT/+zh0//s4dP/7OHT/+zh0//s4dP/7OHT/+/i + 0//w49P/Wpnh/wlx6P8XeOf/F3jn/xd45/8XeOf/F3jn/xd45/8XeOf/F3jn/xd45/8XeOf/F3jn/xd4 + 5/8XeOf/F3jn/xZ35/8RdOb/osn1/+vz/f/g7fz/4e38/+j4//9PX3D/RjxB/924wP/XtLv/1rO6/9az + uv/ZuL7/v5Ca/5pbaP+bW2n/wZSd/6x7gP+TWl//k1pf/8GXnf/ZuL//1rO6/9WwuP+7parvAwMDmwAA + AHcAAABRAAAAMAAAABcAAAAIAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAd3H + zHXausH/2Le+/9ayuf/Ws7r/1rO6/+C7wv+OeYD/BAkP/0hJTP/9+/j//vv4//z59v/8+fb//Pn2//z5 + 9v/8+fb//Pn2//z59v/8+fb//Pn2//z59v/8+fb//Pn2//36+P/y6uD/69/R/+zh0//s4dP/7OHT/+zh + 0//s4dP/7OHT/+zh0//s4dP/7OHT/+zh0//s4dP/7OHT//Lk0//n3tT/TJLi/wlx6f8XeOf/F3jn/xd4 + 5/8XeOf/F3jn/xd45/8XeOf/F3jn/xd45/8XeOf/F3jn/xd45/8XeOf/F3jn/w905v8yh+r/1ef7/+Xw + /f/g7fz/6fn//1hmdv8fHSH/y6qx/9m2vf/Ws7r/1rO6/9i2vf/Jn6j/nV5r/5pbaP+4hpH/uYyS/5BW + W/+eaW7/1LC3/9e0u//Ws7r/1LC4/52Nkd8AAACQAAAAawAAAEYAAAAoAAAAEgAAAAYAAAABAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA49bXSdm4v//ZuL//1rK5/9azuv/Ws7r/37rB/6eN + lP8PExj/HiAl/9/d2////vz//Pn2//z59v/8+fb//Pn2//z59v/8+fb//Pn2//z59v/8+fb//Pn2//z5 + 9v/8+fb//Pr3//v49P/v5dj/6+DS/+zh0//s4dP/7OHT/+zh0//s4dP/7OHT/+zh0//s4dP/7OHT/+zh + 0//s4dP/6+HT//Pk0v/l3tT/VJbh/whx6P8Vd+f/F3jn/xd45/8XeOf/F3jn/xd45/8XeOf/F3jn/xd4 + 5/8XeOf/F3jn/xd45/8XeOf/F3jn/wpw5v9uqvD/6/P9/+Lv/f/j8///QE1c/xYWGv/Boqn/2re+/9az + uv/Ws7r/17S7/9Kutf+jaHT/m1to/6tzf//Hn6X/kVhd/72SmP/auMD/1rO6/9azuv/Vsbj/b2hpxQAA + AIUAAABfAAAAPAAAACEAAAANAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AADWwcYq2rm//9m5v//Wsrn/1rO6/9azuv/atr7/xaWs/yMjKf8GCxD/l5aW///////8+fb//Pn2//z5 + 9v/8+fb//Pn2//z59v/8+fb//Pn2//z59v/8+fb//Pn2//z59v/8+fb//fr4//j07v/s4dP/7OHT/+zh + 0//s4dP/7OHT/+zh0//s4dP/7OHT/+zh0//s4dP/7OHT/+zh0//s4dP/6+HT//Lk0v/s4tP/caTf/w5z + 6P8Qdej/F3jn/xd45/8XeOf/F3jn/xd45/8XeOf/F3jn/xd45/8XeOf/F3jn/xd45/8XeOf/FHfn/xV3 + 5/+u0Pf/9v///7LE2f8SGB//IiIn/8inrv/Ztr3/1rO6/9azuv/Ws7r/2Le9/696hf+bW2n/nV9s/8ab + pP/Jo6n/yqKq/9Outv/XtLv/1bK5/9a1u/04NjepAAAAeAAAAFIAAAAyAAAAGQAAAAkAAAACAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANHLzBTcv8Xk17S7/9azuv/Ws7r/1rO6/9az + uv/duL//T0dN/wYMEf8zNTn/8O7s///++//8+fb//Pn2//z59v/8+fb//Pn2//z59v/8+fb//Pn2//z5 + 9v/8+fb//Pn2//z59v/8+fb//fr4//Tt5f/r4NH/7OHT/+zh0//s4dP/7OHT/+zh0//s4dP/7OHT/+zh + 0//s4dP/7OHT/+zh0//s4dP/7OHT//Dj0//35tL/pb7a/yuC5f8Jcej/E3bn/xd45/8XeOf/F3jn/xd4 + 5/8XeOf/F3jn/xd45/8XeOf/F3jn/xd45/8XeOf/DXPm/z+U9v/K4PT/P0lV/wQIDP9NRUv/27e+/9a0 + u//Ws7r/1rO6/9azuv/ZuL//vpCZ/5pbaP+dXmv/pWt3/7qJk/+pcHz/0ay0/9e0u//Usbj/wqqv8AcG + B48AAABpAAAARQAAACcAAAASAAAABgAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAty/xczUsLj/1rO6/9azuv/Ws7r/1rO6/+C7wv+ag4n/DhMX/wkNEv91dXb////////+ + +//8+fb//Pn2//z59v/8+fb//Pn2//z59v/8+fb//Pn2//z59v/8+fb//Pn2//z59v/8+fb//Pr2//Do + 3f/s4NH/7eLU/+3i1P/u49T/7uPV/+7j1f/v49X/7+TV/+/k1v/w5df/8ebX//Lm2P/z59n/8+jZ//Xp + 2v//8Nn/5uLd/4Cw5/8phvD/FHvy/xZ88f8WffL/Fn3y/xZ98v8XffP/F37z/xh+9P8Zf/P/G3/y/xt/ + 8f8cf/H/H2zF/yg6Uf8MDhD/FBcd/6iOlf/eucD/1rO6/9azuv/Ws7r/1rO6/9i1vP/PqbD/oGNw/51f + bP+dXmv/mVhm/6dsef/Vsrn/17S7/9Swt/+ajY/UAAAAfgAAAFoAAAA4AAAAHgAAAA0AAAADAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB4czQqtSvt//Ws7r/1rO6/9az + uv/Ws7r/2LS7/9m1vP9KQ0j/CQ8T/w0RFv96env/8fDv//////////////////////////////////// + ///////////////////////////////////////////9//bs3v/x5db/7+TV/+3i1P/r4NL/6d7Q/+fc + zv/l2s3/4NbJ/9vRxP/WzMD/0ci8/8vCt//GvbP/wLiu/7qzqf+6sKT/u66e/4mSm/87a6L/JWGm/yhf + oP8nW5j/JFWO/yBOhP8ZRXf/Fz9u/xxBbP8gQmn/IkJm/yE7Wf8WGyD/CAsN/xUYHf+Md37/37vC/9az + uv/Ws7r/1rO6/9azuv/Ws7r/1rO6/9m3vv+3hY//m1tp/55gbf+cXGr/q3N+/9e1vP/Ws7r/17S7/1hV + VqkAAABsAAAASQAAACwAAAAWAAAACAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAHdxMl/1bG4/9azuv/Ws7r/1rO6/9azuv/Ws7r/3Li//8Kjqv8yMDX/CA4T/wgM + Ev81Nzv/gIGC/62rq/+ysbD/rqyr/6mop/+kpKP/n56e/5mZmP+TkpL/jIuM/4SEhf97e3z/b3By/2pr + bf9oamz/W1tc/01NTP9HR0j/QUJD/zo8Pf8zNTf/LS8y/ycqLP8iJin/HiIl/xoeIv8XGx//Exgc/xAV + Gf8MERb/CQ4T/wULEP8DCQ7/CQsN/w4ODf8NDg3/Dw8P/xIREP8UEhH/FhQS/xcVE/8ZFhX/GxcX/xwZ + Gf8eGxv/Ih8g/yYlKf9JQkj/rJGY/+C7wv/Xs7r/1rO6/9azuv/Ws7r/1rO6/9azuv/Ws7r/2La9/8yl + rf+eYG7/nV9s/5tcaf+xfIf/2Le9/9WxuP/Kr7TwDw8PfgAAAFgAAAA5AAAAIAAAAA8AAAAFAAAAAQAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAObV2GPWs7r/1rO6/9az + uv/Ws7r/1rO6/9azuv/Vs7r/3rnA/8WlrP9bUFb/HR4j/wcMEf8ABQr/AQYM/wEHDP8CBwz/AwgN/wQJ + Dv8GCg//BwsQ/wgMEv8KDRP/Cw4U/w0PFf8OERb/ERMY/xMVGv8XGR//Hh4k/yMiKP8oJy3/Lisx/zMw + Nv84NDr/Pjg+/0M9Q/9JQUf/TkZM/1RKUP9bUFb/YlZc/2pcYv9xYmj/eGdt/39tc/+Fcnj/jHh+/5N9 + g/+YgYf/nYaM/6OKkP+oj5X/rpOZ/7OXnv+5nKL/vqCn/8Skq//Hp67/yamw/9m1vP/eusH/1rO6/9az + uv/Ws7r/1rO6/9azuv/Ws7r/1rO6/9azuv/XtLv/1bK5/6duef+cXWr/m1to/7qKlP/ZuL//1LC3/56Q + ksIAAABiAAAARAAAACkAAAAWAAAACQAAAAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA49bYJ9m3vvzVsbn/1rO6/9azuv/Ws7r/1rO6/9azuv/Ws7r/27e+/965 + wP+8nqX/mYKI/4x3ff+OeX//kn2D/5eAhv+ag4n/nYaM/6GIj/+ki5H/qI6V/6uRl/+vlJr/s5ee/7ib + ov+9n6b/wqOq/8enrv/KqbD/zKuy/8+ttP/Rr7b/07G4/9Wyuf/YtLv/2ra9/924v//fusH/4LvC/+C7 + wv/gu8L/4LvC/+C7wv/hu8P/4bzD/+G8w//hvMP/4bzD/+C7wv/fusL/37rB/965wP/ducD/3Li//9y4 + v//bt77/2ra9/9q2vf/Ztr3/17S7/9azuv/Ws7r/1rO6/9azuv/Ws7r/1rO6/9azuv/Ws7r/1rO6/9az + uv/Zt77/s4CK/5tbaP+cXWr/xZqi/9i2vf/Wtr37TUpLewAAAEoAAAAwAAAAHAAAAA0AAAAFAAAAAQAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACloqMD4MbLytWw + uP/Vsbn/1bG4/9azuv/Ws7r/1rO6/9azuv/Ws7r/1rO6/9u3vv/gu8L/4bzD/+G7w//hu8P/4LvD/+C7 + wv/gu8L/37rB/9+6wf/eucH/3rnA/925wP/cuL//3Li//9u3vv/at77/2ra9/9m2vf/Ztbz/2bW8/9i1 + vP/Ytbz/2LS7/9e0u//XtLv/17O6/9azuv/Ws7r/1rO6/9azuv/Ws7r/1rO6/9azuv/Ws7r/1rO6/9az + uv/Ws7r/1rO6/9azuv/Ws7r/1rO6/9azuv/Ws7r/1rO6/9azuv/Ws7r/1rO6/9azuv/Ws7r/1rO6/9az + uv/Ws7r/1rO6/9azuv/Ws7r/1rO6/9azuv/Ws7r/1rO6/9m4v/+/kZr/mlpo/6BjcP/PqbH/1bG4/8Kw + tMYAAABHAAAAMgAAAB8AAAARAAAACAAAAAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADr299u2rrB//Lm6f/cvsT/0662/9azuv/Ws7r/1rO6/9az + uv/Ws7r/1rO6/9azuv/Ws7r/1rO6/9azuv/Ws7r/1rO6/9azuv/Ws7r/1rO6/9azuv/Ws7r/1rO6/9az + uv/Ws7r/1rO6/9azuv/Ws7r/1rO6/9azuv/Ws7r/1rO6/9azuv/Ws7r/1rO6/9azuv/Ws7r/1rO6/9az + uv/Ws7r/1rO6/9azuv/Ws7r/1rO6/9azuv/Ws7r/1rO6/9azuv/Ws7r/1rO6/9azuv/Ws7r/1rO6/9az + uv/Ws7r/1rO6/9azuv/Ws7r/1rK5/9ayuf/Vsrn/1bK5/9Wxuf/Vsbj/1bG4/9WxuP/VsLj/1bG4/9Wy + uf/Ws7r/2La9/8mgqP+aW2j/q3SA/9ezu//Xt736c3BwXQAAACwAAAAeAAAAEgAAAAgAAAADAAAAAQAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOjf + 4RLcvsTm+PLz//36+//kzdL/1LC3/9WwuP/Ws7r/1rO6/9azuv/Ws7r/1rO6/9azuv/Ws7r/1rO6/9az + uv/Ws7r/1rO6/9azuv/Ws7r/1rO6/9azuv/Ws7r/1rO6/9azuv/Ws7r/1rO6/9azuv/Ws7r/1rO6/9az + uv/Ws7r/1rO6/9ayuf/Wsrn/1bK5/9Wyuf/Vsbn/1bG4/9WxuP/Vsbj/1bC4/9Swt//UsLf/1LC3/9Sv + t//Ur7b/1K+2/9Outv/Urrb/1K+2/9Svtv/Ur7f/1K+3/9Swt//UsLf/1bC4/9Wxuf/Ws7r/17W8/9i2 + vf/ZuL7/2bnA/9q7wf/bvcP/3b/F/97Cx//cvsX/2La9/9WxuP/Xtbz/0auz/59hbv++kJn/17S7/8q4 + u5oAAAAiAAAAGAAAAA8AAAAIAAAABAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOnZ3GLfxMr///7////////w5Ob/273D/9Sw + t//Ur7b/0662/9Outv/Trrb/0662/9Sutv/Ur7b/1K62/9Sutv/Trrb/0662/9Outv/Trrb/0662/9Sv + tv/Ur7b/1K+2/9Svt//Ur7f/1LC3/9Swt//UsLf/1bC4/9WxuP/Vsrn/1rO6/9e1vP/Ytr3/2bi+/9m5 + wP/au8H/27zC/9y+xP/dwMb/38LI/+DFy//hyM3/48rP/+TN0v/m0NX/59PX/+nW2v/r2d3/7N3g/+/g + 4//w5Ob/8ufp//Tq7P/27u//9/Dy//jz9P/69fb/+/j4//z6+v/+/f3///////////////////////// + ///8+Pn/4MbM/9ayuf/PqLH/rniD/9Grsv/bxcm7MC8vGgAAABAAAAALAAAABwAAAAMAAAACAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAObQ1ZPiyc3/+/j5///////+/v7/8+nr/+3d4P/q2Nz/6dXZ/+jV2f/n09f/59LW/+bR + 1f/n0tb/59PX/+jU2P/o1Nn/6dXZ/+nW2v/q2Nz/69rd/+zc3//u3uH/7+Hj//Dj5f/x5ef/8ufp//Tq + 7P/17e7/9/Dx//jy8//59PX/+vb3//v4+f/9+vv//vz9//////////////////////////////////// + /////////////////////////////////////////v7+//38/P/8+vr/+/f4//n19v/48vT/+fT1//jx + 8v/27u//9Ovt//Po6v/x5Of/7+Hk/+3e4f/s29//69nd/+rZ3f/dv8X/1bK5/9azuv/Xtr3h4c7SjIJ/ + gBMAAAAIAAAABQAAAAMAAAACAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA9u7wAefS1oPcv8T869nd//jy + 8/////////////////////////////////////////////////////////////////////////////// + //////////////79/f/9+/z//Pn6//v3+P/69fb/+vf3//r29//58/T/9/Hy//bu7//06+3/8+jq//Hl + 5//w4+X/7uDi/+3e4f/s3N//7Nve/+va3f/r2dz/6tfb/+nW2vjn09fv5tLW5OTP09rew8jV3sPJ1eDH + zNThyc7U48vQ1OHM0MnjztK35NDTpuPQ1JbVtbuJ1LO6idm7wojcwcaI38fMiOLN0X/k0tZu5dTYXujc + 30zeys07zamwONS3vDnVub853cfMN8zAww4AAAACAAAAAQAAAAEAAAABAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAOTM0Tjewsej3b/G2uDFy//jy9D/5c/U/+bS1v/o1Nj/6NTY+efT + 1/Pn09fr59PX5efT197n09jW4cjN0t3Bx9HexMnR38XK0eDIzdHjy9DQ5M7SzePP08Dk0dWw5NLVo+XU + 2JHWuL2D1bS7gtm6wILcwMWC3sbKguHL0IHk0dVz5tXZZObX2VXr4ONE07e7Nc6qsTPRtLoz1rzBM9vE + yDPfzNAy4dLVKODV2B3Z09QRxsLCBQAAAAEAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AADv4eQH6tjbK+HHzC3excou4MvPLuPQ1C3fz9Mn4NPWId7T1Rno3eAS4trcC768vQQAAAABAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ///wAA////////////////4AAAAA/////////////+AAAAAAAAH//////////gAAAAAAAAAAP/////// + 4AAAAAAAAAAAAAf//////gAAAAAAAAAAAAAA//////wAAAAAAAAAAAAAAD/////4AAAAAAAAAAAAAAAH + ////+AAAAAAAAAAAAAAAAf////AAAAAAAAAAAAAAAAA////wAAAAAAAAAAAAAAAAD///8AAAAAAAAAAA + AAAAAAf//+AAAAAAAAAAAAAAAAAD///gAAAAAAAAAAAAAAAAA///4AAAAAAAAAAAAAAAAAH//+AAAAAA + AAAAAAAAAAAB///gAAAAAAAAAAAAAAAAAf//4AAAAAAAAAAAAAAAAAH//+AAAAAAAAAAAAAAAAAB///g + AAAAAAAAAAAAAAAAAf//4AAAAAAAAAAAAAAAAAH//+AAAAAAAAAAAAAAAAAB///gAAAAAAAAAAAAAAAA + Af//8AAAAAAAAAAAAAAAAAH///AAAAAAAAAAAAAAAAAB///wAAAAAAAAAAAAAAAAAf//8AAAAAAAAAAA + AAAAAAH///AAAAAAAAAAAAAAAAAB///4AAAAAAAAAAAAAAAAAf//+AAAAAAAAAAAAAAAAAH///gAAAAA + AAAAAAAAAAAB///4AAAAAAAAAAAAAAAAAf///AAAAAAAAAAAAAAAAAH///wAAAAAAAAAAAAAAAAB///8 + AAAAAAAAAAAAAAAAAf///AAAAAAAAAAAAAAAAAH///wAAAAAAAAAAAAAAAAB///8AAAAAAAAAAAAAAAA + Af///gAAAAAAAAAAAAAAAAH///4AAAAAAAAAAAAAAAAB///+AAAAAAAAAAAAAAAAAf///gAAAAAAAAAA + AAAAAAH///4AAAAAAAAAAAAAAAAB///+AAAAAAAAAAAAAAAAAf///wAAAAAAAAAAAAAAAAH///8AAAAA + AAAAAAAAAAAB////AAAAAAAAAAAAAAAAAf///wAAAAAAAAAAAAAAAAH///8AAAAAAAAAAAAAAAAB//// + AAAAAAAAAAAAAAAAAf///4AAAAAAAAAAAAAAAAH///+AAAAAAAAAAAAAAAAB////gAAAAAAAAAAAAAAA + Af///4AAAAAAAAAAAAAAAAH///+AAAAAAAAAAAAAAAAB////gAAAAAAAAAAAAAAAAf///8AAAAAAAAAA + AAAAAAH////AAAAAAAAAAAAAAAAB////wAAAAAAAAAAAAAAAAf///8AAAAAAAAAAAAAAAAP////AAAAA + AAAAAAAAAAAD////wAAAAAAAAAAAAAAAA////+AAAAAAAAAAAAAAAAP////gAAAAAAAAAAAAAAAD//// + 4AAAAAAAAAAAAAAAA////+AAAAAAAAAAAAAAAAP////gAAAAAAAAAAAAAAAD////4AAAAAAAAAAAAAAA + A/////AAAAAAAAAAAAAAAAP////wAAAAAAAAAAAAAAAD////8AAAAAAAAAAAAAAAA/////AAAAAAAAAA + AAAAAAP////wAAAAAAAAAAAAAAAD////8AAAAAAAAAAAAAAAA/////AAAAAAAAAAAAAAAAf////4AAAA + AAAAAAAAAAAH////+AAAAAAAAAAAAAAAB/////gAAAAAAAAAAAAAAAf////4AAAAAAAAAAAAAAAH//// + +AAAAAAAAAAAAAAAB/////gAAAAAAAAAAAAAAAf////8AAAAAAAAAAAAAAAH/////AAAAAAAAAAAAAAA + B/////wAAAAAAAAAAAAAAAf////8AAAAAAAAAAAAAAAP/////AAAAAAAAAAAAAAAD/////wAAAAAAAAA + AAAAAA/////8AAAAAAAAAAAAAAAP/////gAAAAAAAAAAAAAAD/////4AAAAAAAAAAAAAAA/////+AAAA + AAAAAAAAAAAP/////gAAAAAAAAAAAAAAH/////4AAAAAAAAAAAAAAB/////+AAAAAAAAAAAAAAAf//// + /wAAAAAAAAAAAAAAH/////8AAAAAAAAAAAAAAB//////AAAAAAAAAAAAAAAf/////wAAAAAAAAAAAAAA + P/////8AAAAAAAAAAAAAAD//////AAAAAAAAAAAAAAA//////wAAAAAAAAAAAAAAP/////+AAAAAAAAA + AAAAAH//////gAAAAAAAAAAAAAB//////4AAAAAAAAAAAAAAf/////+AAAAAAAAAAAAAAP//////gAAA + AAAAAAAAAAD//////4AAAAAAAAAAAAAA///////AAAAAAAAAAAAAAf//////wAAAAAAAAAAAAAH///// + /8AAAAAAAAAAAAAD///////gAAAAAAAAAAAAA///////4AAAAAAAAAAAAAf///////AAAAAAAAAAAAAP + ///////4AAAAAAAAAAAAH///////+AAAAAAAAAAAAP////////4AAAAAAAP/////////////gAP///// + //////////////////////////////////////////////////////////////////////////////// + ////////////////////////////////////////////////////////KAAAAGAAAADAAAAAAQAgAAAA + AACAlAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAQAAAAIAAAACAAAAAgAAAAMAAAAEAAAABQAAAAYAAAAHAAAABwAAAAcAAAAHAAAABwAA + AAYAAAAEAAAAAwAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAEAAAACAAAAAgAA + AAMAAAAEAAAABQAAAAYAAAAIAAAACQAAAAoAAAAMAAAADQAAAA8AAAAQAAAAEgAAABQAAAAVAAAAFwAA + ABkAAAAaAAAAGwAAABwAAAAcAAAAGwAAABkAAAAVAAAAEQAAAAwAAAAHAAAABQAAAAMAAAABAAAAAQAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAIAAAACAAAABAAAAAQAAAAFAAAABwAAAAgAAAAKAAAACwAA + AA0AAAAPAAAAEAAAABMAAAAVAAAAFgAAABkAAAAbAAAAHQAAACAAAAAjAAAAJgAAACgAAAArAAAALgAA + ADEAAAA0AAAANgAAADkAAAA8AAAAPwAAAEIAAABEAAAARgAAAEYAAABGAAAARQAAAEIAAAA8AAAANAAA + ACkAAAAhAAAAHAAAABcAAAAVAAAAEQAAAA0AAAAJAAAABQAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAABAAAAAgAAAAMAAAAFAAAABgAAAAcAAAAIAAAACgAAAAsAAAANAAAADgAAABAAAAATAAAAFQAA + ABcAAAAaAAAAHAAAAB8AAAAhAAAAJAAAACcAAAAqAAAALQAAADEAAAAzAAAANgAAADoAAAA9AAAAQQAA + AEQAAABJAAAATAAAAFEAAABUAAAAWAAAAFwAAABgAAAAYwAAAGcAAABsAAAAbwAAAHMAAAB1AAAAdgAA + AHcAAAB3AAAAdQAAAHEAAABqAAAAYAAAAFEAAABGAAAAPgAAADcAAAAzAAAALgAAACYAAAAeAAAAFwAA + AA4AAAAJAAAABQAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAQAAAAJAAAADgAAABMAAAAXAAAAGQAAABwAAAAeAAAAIAAA + ACMAAAAmAAAAKQAAAC0AAAAwAAAAMwAAADcAAAA6AAAAPgAAAEIAAABFAAAASQAAAE4AAABSAAAAVgAA + AFwAAABfAAAAYwAAAGgAAABsAAAAcAAAAHUAAAB5AAAAfgAAAIIAAACGAAAAiQAAAI0AAACQAAAAkwAA + AJcAAACaAAAAnAAAAJ8AAAChAAAAogAAAKMAAACiAAAAogAAAJ4AAACYAAAAjgAAAH8AAAB0AAAAawAA + AGQAAABeAAAAVwAAAEwAAABAAAAANQAAACgAAAAdAAAAFQAAAAwAAAAHAAAAAwAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAABwAAABIAAAAfAAAALAAA + ADgAAAA/AAAAQwAAAEcAAABLAAAATgAAAFIAAABXAAAAWgAAAGEAAABkAAAAaQAAAG4AAAByAAAAdwAA + AHwAAACAAAAAhQAAAIkAAACNAAAAkQAAAJUAAACYAAAAmwAAAJ8AAACiAAAApQAAAKkAAACrAAAArgAA + ALEAAACzAAAAtgAAALkAAAC7AAAAvgcGB78PDw7EEQ8QxhEOD8cQDw7IEhARyREPD8kQDw/JBQYGxgAA + AMIAAAC+AAAAuAAAAK8AAACnAAAAoQAAAJwAAACXAAAAkAAAAIUAAAB4AAAAagAAAFcAAABIAAAAOQAA + ACkAAAAdAAAAEwAAAAoAAAAFAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAGAAAAEQAAACcAAAA9AAAAUgAAAGYAAABuAAAAdAAAAHgAAAB7AAAAfwAAAIMAAACHAAAAjAAA + AJAAAACUAAAAmAAAAJwAAACfAAAAogAAAKYAAACpAAAArAAAAK4AAACxAAAAtAAAALYAAAC4AAAAuwUF + Bb8FBQXBEhISxSgnJsspJSbNNzQ10E5HSdhNQ0XaUkdK3GZZXOFuXWDkaldb5XplaeiLdXntkHV77otv + de6Ia3HuiWpw74Zmbe+Ia3HucVpe6U1BROAgHh3UAAAAzAAAAMYAAADCAAAAvgAAALwAAAC4AAAAtAAA + AKsAAACiAAAAlwAAAIYAAAB2AAAAZQAAAE8AAAA+AAAALwAAAB8AAAAVAAAADQAAAAYAAAADAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAMAAAAHgAAAEEAAABgAAAAfAAAAJMAAACbAAAAoAAA + AKMAAACmAAAAqQAAAKwAAACtAAAAsQAAALQAAAC2AAAAuQAAALwAAAC+AAAAvwwNDcUODQ7HIiMjzUVB + QtZEPT/XWVNV3Xpsb+R4ZWnmgm9z6Zl+hO+VdXvxm3eA9KR8hfahdX73onR++Kl5hPupd4H7qHWB/Kx3 + gv2ueIL+rXWB/qx0f/6rcX7/qW56/6Zrd/+kZ3P/oWNv/55fa/+eX23/oWNv/p9ndPyWbXb1XlRW5H1v + cuh6aGzoX1ZZ4jAsLNcCAwLOAAAAygAAAMUAAADAAAAAuQAAAK0AAACgAAAAkQAAAHwAAABpAAAAVwAA + AEIAAAAyAAAAJAAAABcAAAAPAAAACAAAAAMAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAWAAAAMQEB + AWIHBweKBgYFpxAQEL4VFBTGFRITxx0aG8wiHR7PIBkbzzAnKNVBMzfaQjQ23GpaXOR2XmPoe2Fn6qGD + ifKjf4b1qIGJ97uNlv63hZD+t4GM/7N7h/6xeIT+rXN//610f/6udoP+sHiE/7N/if64hpD+u4qU/7+R + mv7Dl6D+yJ2l/8qjqv7Op6/+0auy/9Ovtf7Usbj91bK5/9Wzuv3Ws7r91rO6/9Wyuf3Tr7f90Kuz/cqh + qv/Ak5z9s4CK/aBjcP+YWGX+rHN+/uLGy//Ztbz+wZ2p/q2Jmf6sjpr6kX2F8k5ERuQmIiPYDgwM0QAA + AMoAAADCAAAAuQAAAKwAAACdAAAAjQAAAHgAAABlAAAAUwAAAD0AAAAtAAAAHwAAABEAAAAIAAAAAwAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAkAAAAeQjw9YXBgZLJ5YWbRblJX3oFjaeuLaXDwiGNr8Jhye/Sme4P4o3Z/+K5/ + iPu0gIr+s32J/rN+if+0f4n+tX+K/rSAi/+3hI7+uYeQ/ryMlv/Akpv9w5mi/8iep/3LpKz90Kmx/9Ks + tP3UsLf91rO7/9e1u/3Xtbz92ba9/9i2vf3Xtrz917a9/9e0u/3WtLv91rS7/9azuv3Ws7r91rO6/9az + uv3Ws7r91rO6/9azuv3Ws7r+1rS7/de2vP/Ytr392LW8/cifp/+mbHn9llZk/cSYof/Zt7792LW8/dGu + tv+/m6b+romY/qeFlf6YfIn4fGhw70xEReAYFhfUAAAAywAAAMUAAAC8AAAAsQAAAKEAAACRAAAAgAAA + AGgAAABUAAAAPwAAACcAAAAWAAAACgAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAtIQUJRrIKK1aZrd/yqcHz/t4SO/sOV + n//Gm6T+yp+n/suiqv/MpK3+zaau/s+osP/PqrH90auz/dKutf/Ur7b91LG4/dayuf/Wsrr917O6/de0 + u//WtLv91rW8/9a0u/3WtLr91rS7/9azuv3Ws7r91bK5/9Syuf3Usbj91bG4/9SxuP3Ur7b91K+2/9Ou + tf3TrbX90qy1/9Gss/3SrLT90q20/9Outf3TrrX90662/9Ovtv3SrbT90q61/dWyuf/Usbj91rO6/de2 + vP/HnaX9nl9s/a55hP/Usrn91LG4/dazuv/YtLr91bK5/cuosf+3k6D+nHmL/opqfPuOdH71c2Zo6BQV + FNUAAADNAAAAyAAAAL4AAAC0AAAApwAAAJUAAACAAAAAaAAAAEYAAAArAAAAFQAAAAUAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACYl + JSHQuL23yZ+p/8ylrv/Vs7r/2bi//9e2vf/Xtbz/1rW8/9a1uv/Ws7r/1rO6/9azuv/Wsrr/1bK5/9ay + uf/Usbj/1LG4/9SxuP/UsLj/1LG4/9Wwt//VsLf/1bG4/9WxuP/Vsrn/1rO6/9e0u//Wtrz/2be+/9q6 + wf/cvcP/3cDG/+DFyv/iys//5M7T/+jU2P/r2t3/7uDj//Hk5//06uz/9+/w//nz9P/79vf//Pr5//v3 + 9//06+3/6dXZ/9e2vP/Usbj/1rO6/9Wyuf/Ytr3/uomT/6BjcP/JoKf/17W8/9e1vP/Ws7r/1rO6/9az + uv/Ztr3/3Lm//8imrv+jf5D/kGyB/6OCkvx+bHTvOTI03xQTEtQAAADNAAAAxgAAALsAAACsAAAAlQAA + AG8AAABKAAAAKAAAAA4AAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAGNaXD/bu8Hp17O7/9e0u/3Ws7r91LG4/dWxuP/UsLf907C3/dSu + tv/TrrX906+2/dOwt//Ur7f91LG5/da0vP/Xt7392rrA/dy+xP/ewsf94MbM/ePN0f/l0dX96NfZ/+ze + 4P3t4OP98OTm//Pp6v317e79+PHz//v29/3++vv9//////////3//v79/fn5//Pv7/3s5uj95t/g/9nT + 1v3SzM/9zMXI/8W+wf3FvsH90cfK/+jc3/388/X9/////fHn6f/ZusH91LG4/dayuv/Xtrv9yqKp/Z5f + bf+5jJP9vpSa/cigp//TsLf92LW8/da0u//Usbj91LG4/de0u//Ztr39z6y1/bKOnf+gfY7+mHiJ/HRf + avFSRUvlMS0t2QAAAMwAAADDAAAAsAAAAIoAAABhAAAAOAAAABUAAAAFAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL2rrmHXtLv/1rG4/9Sx + uP3Usbj91LG4/de1vP/bvcL93sLH/ePKz//m0NX96dba/e7g4v/y5uj99ezu/fny9P/58/X9+/b3/f36 + +f//+/z9//7//f/////////9///////5+/358PL97uTm/93S1f3OxMf9vbG2/6Oanv2QiIz9fnd8/2tk + af1ZVFr9TklP/0RARv09Oz/9Ojc8/zo5PP07Oj79Pjs//z08Pv0zMjf9JiQq/zgxOP2BcXb949DU/f// + ///s3N/91LG5/dayuf/WtLr90q61/aBkcf+vfYb9mGFl/ZZfZv+odHj9vZKW/dWxt//at8D917W8/daz + uv/Vsrr91rO6/di1u//Usbj9yaWv/q2JmP6RcIL8hWZ4+G9gZOkVFRTSAAAAwAAAAJ4AAAB0AAAARQAA + ABsAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAN3N0HjWsbj/1rO6/9azuv/Ws7r/1K+4/+LIzf/79/f//Pj5//bx8v/w7O7/6+jp/+Xh + 4v/e2tv/2dDT/8u/w/+9sLP/sKGm/5yNk/+MfoP/e250/2hcYf9YTlT/T0ZN/0I9Qf86Njz/PDk8/z49 + QP9BQkT/UVJT/2NkZP9xcnH/iYmH/5eUjv+noZn/uLGo/8nAtf/WzcD/4NfJ/+jdz//s4NP/7+XW//Lm + 1//s4dT/2tDE/4mEf/8iJyj/JiMo/9/P0//8+fn/3L7E/9Wxuf/Ws7r/2be9/6due/+ygYj/lF9n/2Yw + U/9zPFX/gEZX/5NdY/+seoH/xZyh/9Sxtv/XtLr/1rS7/9Wyuf/Ws7r/1rO6/9u4vf/buL3/yaav/41p + fv51YGvwExISzQAAAKkAAACAAAAAUAAAACEAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOTP04rUsbj/1rO6/9SxuP3Usbj91LG4/di0 + u//RtLr9k4OI/WVcYf9aUVj9VUxS/VBITP9LREn9SENG/U1JS/9XVVj9X11h/XFyc/95eXv9iImK/Z6f + nv+lqKn9uru8/8zNzf3T1NT93t3Z/+vn4P3z7ef9+fPt///48f3/+/T9//v0//337P306tv98+jZ//Hl + 1/3w5db97uPV/+3i1P3t4tT97eLU/+zh0/3t4tT98OXX//br2/3DurH9KCor/WxgZv/79fb948zQ/dSv + uP/Usbj92bi//bB7hv+zgIn9lmFr/WQuUv9mMFP9ZzJU/W02Vf92PlX9hE1d/aFudv+5jJH9zKar/de1 + vP/XtLv91bK5/dWyuf/Vsrn92ba9/cKfqv+GZXn8Qzw/2wAAAKwAAACFAAAAVAAAACQAAAAMAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOXU + 14HUsLf/1rO6/9SxuP3Usbj91bK5/di0u/97aG/9DQ8W/T4+QP+blo/9raee/by0qf/FvbL9z8e7/drQ + xf/p5eH97/Dw/ff3+P/7+/r9//78/f///f///v39//79//////3///79//77//jz7P348+z9+PLr//bx + 6v328er99vHq//bx6v3w6N796uDS/+rf0f3q39H97OHT/+rf0f3q39H97OHT/+rf0f3q39H96+DS/+vg + 0v336tz9kIyE/S8rMf/axMn93sHH/dSxuP/Usbj92bi+/bmHkf+yfYf9nmpz/WUvUv9oMlT9ZzFT/Wcx + U/9nMVP9ZzFT/Ww1U/94QVj9jVdl/bODif/Op6392bi+/dazuv/Usbj91LG4/dSxuf+VcYT+hHJ77QAA + AK0AAACHAAAAVgAAACUAAAAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAN/JzmPVsrn/1rO6/9azuv/Ws7r/17O6/7+gp/8mJSv/HSEk/+3h + 0//57N3/8eXX//Dk1f/u4tT/7eLU/+zh0v/v5dn//Pj1//37+f/9+/n//fv5//z6+P/9+/n//Pr4//79 + /P///v3///79//v49P/28er/9vLr//fy6//38uv/9/Lr//fy6//28ev/7uXa/+rf0f/s4dP/7OHT/+zh + 0//s4dP/7OHT/+zh0//s4dP/7OHT/+vg0v/z5tj/ycG3/x8gJf++nqX/2bS7/9Wzuv/Ws7r/17W9/8OW + nv+we4b/qnh+/2kyUv9nMVP/aTNV/2kzVf9pM1X/aTNV/2cxVf9mMFP/ZS9T/2ozUf9+R1n/pXN7/82o + r//Xs7v/1rO6/9e0u/+phZX/n4iT9gAAAK0AAACHAAAAVQAAACUAAAAMAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOHN0U/XtLv61LG4/9Sx + uP3Usbj92re+/aSLkf8OERj9ZGJg/fzw4f/q39H96t/R/ezh0//q39H96t/R/ezh0//q4ND98uvi/f37 + +v/7+ff9+/n3/f37+f/7+ff9/fv5//z6+f39/fz9//79//78+/349O799vHp//Xw6f318On99/Lr//Xw + 6f338uv99e/n/+vh1P3q39H97OHT/+rf0f3q39H97OHT/+rf0f3q39H97OHT/+rf0f3v49X93dTH/R8f + Jf+tkZj92ra9/dWyuf/Usbj91rO6/cifp/+ueoX9s4OI/W43Uv9mMFP9ZzFT/WcxVf9nMVP9ZzFT/Wcx + Vf9mMVP9ZjBT/WYwU/9jLVL9ajRR/Zxobv/Hn6X91rO6/di1vP+zkJ3+nISO9QAAAK0AAACHAAAAVQAA + ACUAAAAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAFZOUDLdvcPm1LG4/9SxuP3Usbj93bi//ZF8g/8KDxX9j4qE/ffr2//q39H96t/R/ezh + 0//q39H96t/R/ezh0//q39H969/S/fn38v/9+/n9+/n3/f37+f/7+ff9/fv5//z6+P3++/n9//78//7+ + /f38+/j99/Lr//Xw6f318On99/Lr//Xw6f318On99/Lr//Lq4P3r39L97N/R/+rf0f3q39H97OHT/+rf + 0f3q39H97OHT/+rf0f3t4tT97+PV/SgqLf+XgIf92ba9/dazuv/Usbj91bK5/c2nr/+veYX9uYuQ/XxD + Vf9oMlT9azRV/Ww2Vf9sNVX9bDVV/Ww2Vf9sNlb9bTdW/W85Vv9yPFf9fkdb/ZJaX/+1h4z91rO6/di1 + vP+7mKP+moOO9QAAAK0AAACHAAAAVQAAACUAAAAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAC8rLBvhxcq83L7E/9a0u//Vsbj/3bi//5B7 + gP8NEhj/n5mS//Tp2v/r4NL/7OHT/+zh0//s4dP/7OHT/+zh0//s4dP/69/R/+7m2v/7+Pb//fv5//37 + +f/9+/n//fv5//37+f/8+vj//v38///+/f///v3//Pn2//bw6f/38uv/9/Lr//fy6//38uv/9/Lr//fx + 6v/v5tz/6+DS/+zh0//s4dP/7OHT/+zh0//s4dP/7OHT/+zh0//r4NL/+u/f/0JDRP94aG7/2ba9/9az + uv/Ws7r/1rO6/9KttP+veoX/vZGX/5JZXf+VXWL/ll5i/5dfY/+XX2P/l19j/5dfY/+XX2P/l19j/5hg + Y/+YYGP/mGBj/5RcYP+0hoz/1rO6/9i1u/+/m6b/moGO9QAAAK0AAACGAAAAVgAAACUAAAAMAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADEv + LwriyM2X5tLV/97Bxv7UsLf92re+/Z2GjP8PExn9mZKM/fbp2//q39H96t/R/ezh0//q39H96t/R/ezh + 0//q39H96t/R/evh0//z7ub9/Pr4/f37+f/7+ff9/fv5//v59/37+ff9/Pr4//79/P39/Pv9/v79//j1 + 7/318On99/Lr//Xw6f318On99/Lr//fy6/317+f97ePX/+rf0f3q39H97OHT/+rf0f3q39H97OHT/+rf + 0f3q39H9+u/f/WBdW/9hVFv917O6/dazuv/Usbj91bK5/dSwt/+xfIf9v5Ga/ZVcYf+WXGH9ll5h/ZZe + Y/+UXGH9lFxh/ZZeY/+UXGH9lFxh/ZZeY/+UXGH9lFxh/ZRcYf+2h4/91rS7/di1u//Anaj+moON9AAA + AKwAAACFAAAAVAAAACUAAAAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACGdXlx6NPZ+OfU1/7SrrX92LW8/bKVnP8WGR79g4B6/fns + 3f/q39H96t/R/ezh0//q39H96t/R/ezh0//q39H96t/R/erf0f/t49X9+fXy/f37+f/7+ff9/fv5//z5 + 9/38+vf9/fv4//78+/3+/fz9//79//37+f358uz9+vPp//rz6f368+n9+fLq//fy6v338uv98+3k/+rf + 0P3r4NH97OHT/+rf0f3q39H97OHT/+rf0f3q39H9+Ozd/X16df9MQ0r91LG4/dazuv/Usbj91bK5/dWy + uf+0gIv9vZCa/Zpkaf+UXGH9lFxh/ZZeY/+UXGH9lFxh/ZZeY/+UXGH9lFxh/ZZeY/+UXGH9lFxh/ZRc + Yf+2iY/91rO6/de1u//Dnqn+m4OO9AAAAKwAAACFAAAAUwAAACQAAAALAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABtYGNG5czR5vPn + 6v/UsLj/1rK6/8qosP8wLTP/VFRS//zv4P/r4NL/7OHT/+zh0//s4dP/7OHT/+zh0//s4dP/7OHT/+vh + 0//r4NH/8+ja///9+f/9+/n//Pv4//v6+P/5+fj/+Pj6//b4+f/4+vz/+vv9//r7/f/x9Pf/1OHu/9Lf + 7f/U4e3/2uPt/+Lm7P/o6uv/7+/t/+zm3f/p39H/7+LS//Lj0f/v4tH/7eHT/+vg0//r4NL/8+jY/6Gc + lP87Njv/yqmw/9azuv/Ws7r/1rO6/9e0u/+7ipT/uYiT/6Rxdv+TWV7/ll5j/5ZeY/+WXmP/ll5j/5Ze + Y/+WXmP/ll5j/5ZeY/+WXmP/ll5j/5RcYf+3i5H/17O6/9e1u//Cnqj/mH+L9AAAAKsAAACEAAAAUgAA + ACQAAAALAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAABvZWcp4sbL1/jy8v7Wtb391bG4/dWyt/9USVD9Kiwu/fPn2v/r4dL96t/R/ezh + 0//q39H96t/R/ezh0//q39H96t/R/e/i0v/t4dL9yM3U/cXZ7//w9Pr96vH7/+bv+/3j7vv94u38/9/s + +v3l7/v98Pb+//D2/P3u9v39uNb5/4y88v2Tv/P9lMDz/5fB8/2bw/L9ocjy/6jK7/2BruH9g63b/6/C + 1/3R09X96+DT//Xl0f3w4tH98OXV/bqzqf80Mjf9vp+m/dezuv/Usbj91LG4/da0u//Ak5z9s3+K/ax8 + gf+RWV79lV1i/ZZeY/+UXGH9lFxh/ZZeY/+UXGH9lFxh/ZZeY/+UXGH9lFxh/ZRdYv+5jJL917O6/di1 + u/+/nKf+lX6K8wAAAKoAAACCAAAAUQAAACMAAAALAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABxa20O4cfNwPn19f/cvsT91LG4/di1 + vP96aW/9EBQa/d3Txv/w5NX96t/R/ezh0//q39H96t/R/ezh0//q39H98ePR/dnY1P9knt/9JX7k/TOG + 6P/C2/j94+/8/97r+v3e6/r93uv8/97r+v3f7Pz96vP9//H3/P3y9/797fT9/5vE9P2RvvL9k7/0/5O/ + 8v2Sv/L9kr/0/5TA9P1uqvD9GHjo/xp45f0tg+T9UJTh/5i32v3W1dT9+ejS/djLuv81NDj9rJCY/dm1 + vP/Usbj91LG4/de1vP/HnKX9rHWC/bWIjv+SWV39lF1i/ZZeY/+UXGH9lFxh/ZZeY/+UXGH9lFxh/ZZe + Y/+UXGH9lFxh/ZRdYv+5jJP917O6/di1u/++m6b+k3yI8wAAAKoAAACCAAAAUAAAACIAAAAKAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAApo+Vm/nz9P/iys//1LC3/9q2vf+fh43/Cw4U/7CpoP/16dr/6+DS/+zh0//s4dP/7OHT/+vg + 0//w4tL/3NrU/yR+5v8Jcef/FXbn/xB05v9WnO3/2un7/+Dt/P/g7fz/4O38/+Dt/P/g7fz/4Oz7/+71 + /f/x9/7/9Pn+/9np+/+YxPT/k7/z/5XB9P+VwfT/lcH0/5XB9P+bxPT/YqLv/w5z5f8Vduf/EHTn/wdv + 5/8RdOb/Qo3j/5iy0P85PkP/lH+D/9+7wv/Vsbj/1rO6/9a0u//Op67/qG98/7yQl/+UXGD/llxh/5Ze + Y/+WXmP/ll5j/5ZeY/+WXmP/ll5j/5ZeY/+WXmP/ll5j/5VdYv+6jpT/17S7/9i1vP+8maT/j3qG8QAA + AKgAAACAAAAATwAAACEAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAqJWYcvXr7v/p1dn91LG4/dm2vf+3mqD9GBkf/YN/ + ev/06dr96+DS/ezh0//q39H96t/R/ezh0//v4tL9cKPe/Qlx5/8Wd+X9Fnbl/RR25/8WeOb9k8D0/+ny + /P3e6/r94O38/97r+v3e6/r93uv8/+Xv+/3w9vz98ff+//H2/f3A2vf9k8Dz/5O/8v2Tv/L9lcH0/5O/ + 8v2VwfL9mML0/zSJ6f0RdOX9Fnjn/xZ35f0UduX9DXPn/RV25f8XOV39fmpt/ePByf/Usbj91LG4/daz + uv/SrrX9p256/b6Tmv+XYGX9lFxh/ZZeY/+UXGH9lFxh/ZZeY/+UXGH9lFxh/ZZeY/+UXGH9lFxh/ZVd + Yv+7j5X917S7/di1vP+8l6P+i3eB8AAAAKgAAACAAAAATgAAACEAAAAKAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAq56hRPHj + 5v/t3+L/1LK5/9i0u//KqbD/Lywy/1lZV//v49b/7OHT/+zh0//s4dP/7OHT/+/i0v/X1tT/MYTj/xR2 + 5/8XeOf/F3jn/xZ45/8SdOb/J4Lp/9vq+v/j7vz/3+z8/+Dt/P/g7fz/4O38/9/t/P/r8/3/8ff+//L3 + /v/q8v3/qc31/5G/8/+VwfT/lcH0/5XB9P+VwfT/l8L0/3yz8f8gfef/E3bm/xd45/8XeOf/F3jn/xZ5 + 6f8TQHP/YVNW/+fHzf/Vsrn/1rO6/9azuv/Vsrn/qnJ9/72Pl/+cZmv/lFxh/5ZeY/+WXmP/ll5j/5Ze + Y/+WXmP/ll5j/5ZeY/+WXmP/ll5j/5VeY/+8kJb/17S7/9i1vP+5laH/iHR+7gAAAKcAAAB/AAAATgAA + ACAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAopaYGuzb3vzy6Or+17S7/dWyuf/YtLv9UUhO/TM1N//e1Mf97+LU/evh + 0//q39H96t/R/fHj0f/CzNb9In3l/RZ35/8VduX9FXbl/Rd45/8Wd+X9CnDl/2Ok7v3g7Pv94e38/97r + +v3e6/r94O38/97r+v3h7fz97vX9//H3/P3z+P395/H8/5bB8/2Sv/L9lcH0/5O/8v2Tv/L9lcH0/5jC + 8/1op+/9F3jm/xV25f0VduX9FXbl/Rd56/8TUJb9QDk+/erK0P/Wtbz91LG4/dazuv/Xtbz9sXyH/baG + kP+ibnT9lFtg/ZZeY/+UXGH9lFxh/ZZeY/+UXGH9lFxh/ZZeY/+UXGH9lFxh/ZVeY/+8kZf917S7/di1 + vP+3k5/+gnB56wAAAKcAAAB/AAAATgAAACAAAAAJAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAO3a3eX28PD+2bi+/dWy + uf/duL/9cWFp/R4hJP/Lwrf97+TW/evg0v/q39H96t/R/e/i0f/O0tX9KYDk/RV35/8VduX9FXbl/Rd4 + 5/8VduX9FXbn/xx75/2gx/T95PD8/97r+v3e6/r94O38/97r+v3e6/r95e/9//H3/f3v9fz99fn+/8be + +f2TwPP9k7/0/5O/8v2Tv/L9lcH0/5XB9P2UwPP9R5Tr/w9z5f0Wd+b9FXbl/Rd66/8UXK39KSoy/eLE + yv/ausD91LG4/dazuv/Ytbz9uYiR/a97hf+odnz9lFpf/ZZeY/+UXGH9lFxh/ZZeY/+UXGH9lFxh/ZZe + Y/+UXGH9lFxh/ZVeY/+9kpj917S7/di1vP+3k6H+eWJu6gAAAKcAAAB/AAAATgAAACAAAAAJAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAO3X27/49PX/3L7D/9Wyuf/eucD/k36E/w4UF/+yq6L/8ebX/+vg0v/s4dP/7OHT/+3i + 0//q4NP/T5Lh/w5z5/8XeOf/F3jn/xd45/8XeOf/F3jn/xJ05f9CkOv/1OX6/+Dt/P/g7fz/4O38/+Dt + /P/g7fz/3+z7/+z0/f/x9/7/8ff+/+3z/f+w0Pb/kr7z/5XB9P+VwfT/lcH0/5XB9P+WwvT/jr3z/xx6 + 5/8SdeX/F3jn/xZ56/8YaMT/GSEs/9W3vf/fwcf/1LG4/9ayuf/Xtr3/wJWe/6pyff+ufYP/k1tg/5Ze + Y/+WXmP/ll5j/5ZeY/+WXmP/ll5j/5ZeY/+WXmP/ll5j/5VdYv++k5n/1rW8/9i1vP+5laL/dl5p6gAA + AKcAAAB/AAAATQAAACAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOzb34749PT/4MjN/dSwt//at779uJui/QsP + Ff+QioX97+TX/ezh0//q39H96t/R/evg0//y49H9zdHV/Rl45f8QdOf9FHbn/RZ45/8WduX9FHbn/xF1 + 5/0Hb+X9YKLw/+fx/P3f7Pr93+z8/9/r+v3f6/v94Oz6/+Hu/P3t9P398Pb+//H3/f3j7/z9oMj1/5G+ + 8v2Tv/L9lcH0/5S/8v2Tv/L9msP0/3Kt8P0aeub9FHbl/RV46v8Zcdb9Dx8z/bmgpP/lyc791bK5/dWy + uf/XtLv9y6Kq/aNodf+yg4r9ll1i/ZZeY/+UXGH9lFxh/ZZeY/+UXGH9lFxh/ZZeY/+UXGH9lFxh/ZZd + Yv+/lJz91rS7/di1u/+9mab+fWVv6wAAAKYAAAB+AAAATQAAACAAAAAJAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOnZ + 3Wb28PH/5tHV/tSutv/XtLv9z660/RUXHf9wbmr97uHU/ezh0//q39H96t/R/ezh0//r39H99eXR/ai/ + 2P87ieL9E3Xm/Qxz5/8Oc+f9F3nm/y2D5P1CjOH9XZng/+Lq8v3v9fr98PX5//H1+v3y9fj98vX6//D0 + +f32+Pr9+Pv9//X4/f33+/391uf6/5rD8v2UwPP9kL70/5C+8/2Uv/L9lcH0/5TB8/1PmOv9FHbl/RV4 + 6P8Yd+T9DCdE/Z6Giv/pztP91rO6/dWyuf/WtLv90Kux/aJnc/+0hY39ll9k/ZVdYv+UXGH9lFxh/ZZe + Y/+UXGH9lFxh/ZZeY/+UXGH9lFxh/ZZfY//Al5391rS7/de0u//HpK7+h3B46QAAAKYAAAB9AAAATAAA + AB8AAAAJAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAMO1t0T16+3269rd/9Kutf/Ws7r/37nA/yonLf9RUVD/593P/+zh + 0//s4dP/7OHT/+zh0//s4dP/6+DT//Di0v/Y2NT/pr3Z/4Cs3f+Msdz/s8TY/9PU1P/h29P/597R/+/m + 3f/9+vf//fv5//37+f/9+/n//fv4//37+f/9+/j//v37//79/f/+/f3//f39/+vu8v/a4+3/xNfw/6LI + 8v+Rv/P/jr30/5XB9P+Lu/L/LYTp/xJ25v8Ye+3/Djdj/4Ftbv/s09j/1rW8/9Wyuf/Ws7r/1LG4/6Nm + dP+1hY7/mWFn/5VdYv+WXmP/ll5j/5ZeY/+WXmP/ll5j/5ZeY/+WXmP/ll1i/5ZeY//BmJ7/1rW8/9az + uv/Xs7r/moOI6wAAAKUAAAB7AAAASgAAAB4AAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGJbXS316+3e8unr/tKt + tP/Usbj9477F/UxCSP8yNDX929LF/ezh0//q39H96t/R/ezh0//q39H96t/R/ezh0//s4dH98+TR/fnm + 0f/25tH98ePR/+3g0f3r4NH97OHT/+rg0f3z7OT9/Pr5//v59/37+ff9/fv5//v59/37+ff9/Pr4//79 + /P39/Pv9//79///8+/379e79/fXq//rz6v3q6+v9x9ru/6DG8v2YwvP9grXy/RZ35v8Ue+/9EUeF/WBP + Tf/o0df92bi//dWyuf/Us7r92La9/aZtef+0gov9nGds/ZVdYv+UXGH9lFxh/ZZeY/+UXGH9lFxh/ZZe + Y/+UXGH9lFxh/ZZeY//CmZ/91rW8/dazuv/Xs7r+noqO6gAAAKMAAAB4AAAARwAAABwAAAAHAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAACsmJyD05+nG9/Ly/9Outf/Usbj94rvD/WtdY/8eIiX9y8K3/e7j1P/q39H96t/R/ezh + 0//q39H96t/R/ezh0//q39H96t/R/evg0//q39H96+HT/+rf0f3q39H97OHT/+rf0f3t49X9+fTx//37 + +f37+ff9/fv5//v59/37+ff9/fv4//z8+/3+/fz9//79//79/f38+vf99vLr//by6f348un9+vPq/+vs + 6/3L3O/9q83y/VKa7v8Teu79FVqp/Uc6Nv/izNH93b/F/dWxuP/Usbj92Li+/ax1gP+xfYn9oGtx/ZRc + Yf+UXGH9lFxh/ZZeY/+UXGH9lFxh/ZZeY/+UXGH9lFxh/ZZeZP/Cm6H91rW8/dazuv/Xs7r+nIqO6QAA + AKEAAAB2AAAARQAAABsAAAAHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMS1uBLo2Nur/Pr5/9Wyuf/Usbj/3rrB/4t2 + fP8TFxv/ta2k//Hm1//s4dL/7OHT/+zh0v/t4dL/7eHS/+3h0v/s4dP/7OHT/+zh0//r4dP/6+DT/+zh + 0//s4dP/7OHT/+zh0//q39H/8Ojd//38+v/9+/n//fv5//37+f/9+/n//fv5//36+P/+/fz///79///+ + /f/+/vz/+/j0//bw6f/38uv/9vLr//jy6//58+r/7+7r/6zL8P8xi/H/F2bB/zYsKv/VwMX/48fM/9Sw + t//Ws7r/2bi//7J9if+veYT/pnJ4/5RbX/+WXmP/ll5j/5ZeY/+WXmP/ll5j/5ZeY/+WXmP/lV1i/5df + ZP/DnKL/1rW8/9azuv/XtLv/kYKF5AAAAKAAAAB1AAAARAAAABoAAAAHAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPTn + 6gbe0NKN/Pr6/tu7wv/UsLf92bW8/aqQlv8TFRz9kYuE/fjr2//n3tL94dvT/dvY1P/X19T919bU/dfX + 1P/c2dP9597S/e7i0v/x49H97+LR/+vg0f3q39H97OHT/+rf0f3r4NL96t7P//bw6f39+vr9/fv5//v5 + 9/37+ff9/fv5//v59/38+vn9//38//38+/39/Pz9//78//fz7v318On99/Lr//Xw6f318On99/Hp/f32 + 6v++1e/9MYLf/SMiJ//Aq7D96dTZ/dOutf/Usbj92ba9/bqLlP+qcXz9rXyC/ZJZXv+VXWL9lFxh/ZZe + Y/+UXGH9lFxh/ZZeY/+UXGH9lFxh/ZdfZf/FnaP91rW8/dazuv/YtLv+gHJ14AAAAJ8AAABzAAAAQwAA + ABoAAAAGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAC6qq5v+/j599/Gy//Trrf917S7/byepv8jICT9TVpq/Xqv + 6/9Vlt/9Ro/i/TqJ4/8yheP9M4Xj/TKF5P86ieL9VZbg/X2q3f+nv9j91NTU//Tl0f3w4tH96+DT/+rf + 0f3q39H97ODR/+3k1v359fL9/fv5//v59/37+ff9/fv5//v59/37+fj9/vz7//39/P39/Pv9//79//z6 + +P328uv99/Lr//Xw6f318On99fDp/fjx6//99uz9vNPs/SAmM/+olJj9797i/dKutf/Usbj92LW8/cGU + nf+mbHn9soOK/ZFYXf+VXWL9lFxh/ZZeY/+UXGH9lFxh/ZZeY/+UXGH9lFxh/ZhgZf/HnqX91rW8/daz + uv/ZtLz+cGVo3AAAAJ4AAAByAAAAQgAAABkAAAAGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB0aWtV/Pf47OXQ + 1P/Ur7b/1rO6/8upsP85MjL/GzZW/xN+9v8QdOb/EXTn/xJ15/8Sdef/EnXn/xJ15/8Qdef/EHTn/xJ1 + 5/8Zeeb/LoPk/32p3f/V1dX/+efR/+zh0//s4dP/7OHT/+vg0v/y6uH//Pr4//37+f/9+/n//fv5//37 + +f/9+/n//Pr4///9/P///v3///79//79/P/7+PT/9vHq//fy6//38uv/9/Lr//by6//48er////3/0BB + RP+KeID/9efq/9Outf/Ws7r/1rW7/8eep/+jaHb/uImS/5FXXP+WXmP/ll5j/5ZeY/+WXmP/ll5j/5Ze + Y/+WXmP/lV1i/5hhZv/In6b/17S7/9Wzuv/atb3/YVJV2QAAAJ0AAABxAAAAQQAAABgAAAAGAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAACGfH439+/w3u3f4v/Tr7b91bK5/dOxuP9USEv9FSIy/Rl88P8Vdub9Fnfl/Rd4 + 5/8Wd+X9Fnfl/Rd45/8Wd+X9Fnfl/Rd45/8VduX9FHbn/wlx5/0Udub9bKHe/9/a0/3w4tH96+HT/+rf + 0f3r4NH99fHp//37+f37+ff9/fv5//v59/37+ff9/fv5//z8+f39/fz9//79//38/f3+/fz9+PXw//Xw + 6f318On99fDp/ffy6//18On9///5/WdnZ/9pWmH99Onr/di2vP/Usbj91bO6/c2mrv+jZ3T9uouU/ZRd + Yv+UXGH9lFxh/ZZeY/+UXGH9lFxh/ZZeY/+UXGH9lFxh/ZhhZ//Ioaf91rS7/dazuf/at77+YVJV2AAA + AJsAAABuAAAAPgAAABcAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADs3+Ed7uLlz/Pp7P/UsLf91bK5/dez + u/9sW2D9FRoi/Rl35P8VeOj9FXbl/Rd45/8VduX9FXbl/Rd45/8VduX9FXbl/Rd45/8VduX9F3jn/xZ3 + 5f0Tdef9C3Hn/0WO4f25x9f98uPS/+rf0f3q39H97OLV//v59v39+/n9/fv5//v59/37+ff9/fv5//z6 + +P3++/v9//79//38+/39/v39/vz6//bx6/318On99fDp/ffy6//18On9//72/YaGhP9UR0797+Pl/d3A + xv/UsLf91bK5/dGstP+kanb9t4eR/ZtlaP+UXGH9lFxh/ZZeY/+UXGH9lFxh/ZZeY/+UXGH9lFxh/Zli + Z//Joqn91rS7/daxuf/atr7+YlRX1wAAAJkAAABqAAAAPAAAABUAAAAEAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AADc0NII49TXu/jx8//WtLz/1LG4/9q1vP+DcXb/FRUT/xpw0f8Veev/F3jm/xd45/8XeOf/F3jn/xd4 + 5/8XeOf/F3jn/xd45/8XeOf/F3jn/xd45/8XeOf/Fnfn/xB05/8pgeT/rMLY//vo0f/r4NP/6t/Q//Tr + 4//8+vr//fv5//37+f/9+/n//fv5//37+f/8+vj///38///+/f///v3///79//v59f/28er/9/Lp//fy + 6//28er///ny/6Skof9COUD/5tba/+TP0v/Trrb/1rO6/9Owt/+ocXz/tICK/6Ftc/+TW2D/ll5j/5Ze + Y/+WXmP/ll5j/5ZeY/+WXmP/lV1i/5pjaP/Lo6r/17S7/9Wyuf/bub//ZFhb1gAAAJYAAABpAAAAOgAA + ABQAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAxLa5lfv29//au8H91LC4/dq2vf+gh479GhcT/Rlc + qf8Ve+/9Fnbl/Rd45/8Wd+X9Fnfl/Rd45/8WduX9FXbl/Rd45/8VduX9F3jn/xV25f0VduX9F3jn/xZ3 + 5f0Rdef9C3Ho/6a+2f3x4tL97OHT/+vh0v328ev9/fv5//v59/37+ff9/fv5//v59/37+ff9/Pz5//79 + /P39/Pv9//79//79/P359/H99vHq/ffy6//18On9+vXu/cfEv/86NTr90L3B/e/g4//Ur7b91bK5/dWy + uv+veoX9q3N//ax7gf+TWV79lF1i/ZZeY/+UXGH9lFxh/ZZeY/+UXGH9lFxh/Zpkaf/Mpaz91rS7/dSx + uP/auL7+W1FT0gAAAJQAAABkAAAANwAAABIAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAApZeacfz4 + +P/dwcf91LC3/dq2vf+1mJ/9Ih0c/RtNif8Veu/9EXXm/RB05/8OdOf9DnTn/RB05/8Tdef9Fnfl/Rd4 + 5/8VduX9F3jn/xV25f0VduX9F3jn/xV25f0Wd+X9EnXn/yB95f2jvNn98ePS/+rf0f3u5dr9+/f1//z6 + +f37+ff9/fv5//v59/37+ff9/fr4//79+/39/Pz9//79//3+/f39+/r9+PPt/fbx6f/18On9+PLr/dnX + 0v88OT79uaSq/fbt7v/Usbn91LG4/dazuv+1g479pGh2/bOEiv+SWl/9lV1i/ZZeY/+UXGH9lFxh/ZZe + Y/+UXGH9lFxh/Ztlav/NqK/91rS7/dWyuf/Vs7r8RDw+zAAAAJEAAABiAAAANQAAABEAAAACAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA0sDERvjy8//hys7/1LC4/9m0u//Fpq3/MCor/xs+aP8Ueu3/Jn/l/zSG + 4/82h+P/Nofj/zGF5P8ceuX/CXHn/wxz5/8Vduf/F3jn/xd45/8XeOf/F3jn/xd45/8XeOf/F3jn/xF0 + 5/8ngOX/vMnX//Tk0f/r4NL/9O3l//37+//9+/n//fv5//37+f/9+/n//fv4//z6+v/+/fz///79///+ + /f///v3//Pr3//bx6v/38uv/9/Lr/+bm4P9GRUn/nYmP//z19//Xtr7/1LG4/9e0u/+8jZf/nmFv/7iK + kf+UXGH/lFxh/5ZeY/+WXmP/ll5j/5ZeY/+WXmP/lV1i/5xma//OqbD/1rS7/9ayuf/Qr7X8MCkqxwAA + AI8AAABfAAAAMwAAABAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA3M3QH/Tr6/7n1Nf+1LC3/dez + u//Vsrn9SEFF/S42Pv/Jy8398OPT/fjl0f/35tH99+bR/fbk0v/o39P9wszW/Wee3/8lfuX9EXXn/xZ3 + 5f0VduX9F3jn/xV25f0VduX9F3jn/xd35f0Pc+f9IXzm/+Hb0/3v4tH96d/R//n08f39+/n9/fv5//v5 + 9/37+ff9/fv5//v59/38/Pn9//78//38+/39/Pv9/v79/fv28v/28Or99/Lq/fTw6f9fYGH9e2hu/f/7 + /P/dwMX91LC3/da0u//Cl5/9m1xq/bmLk/+ZYWb9lFxh/ZZeY/+UXGH9lFxh/ZZeY/+UXGH9lFxh/Z5p + bf/PqrH91rO6/dayuf/PrrX6LCYnxQAAAIwAAABcAAAAMQAAAA8AAAABAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAwLK0BfHl5+3r3N/+1bG4/dWyuf/bt7/9Y1Zd/SQnKP/Uybr98eXW/evg0//r39H969/R/evh + 0//u4dH98+TR/fHj0v+9ydb9UZTh/wxy5/0Wd+X9F3jn/xV25f0VduX9F3jn/xV25f0Wd+X9CnHn/3Kj + 3v3v4tL96+DR/+/n3P37+Pb9/fv5//v59/37+ff9/fv5//v59/39+vj9/v37//78/P3+/fv9/v37/f79 + +//48+79+PHp/fv27f95eXf9XU5V/f/6/P/iys791LC4/da1vP/In6f9nF1r/baGjv+daG39lFxg/ZZe + Y/+UXGH9lFxh/ZZeY/+UXGH9lFxh/Z5qcP/Qq7L91rO6/dWyuf/Rsrj7LScowgAAAIkAAABZAAAALgAA + AA0AAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAO/g483w4+b/1rO6/9Wyuf/fusH/gnB3/xIX + HP+7s6j/8eXX/+vg0v/s4dP/7OHT/+zh0//r4dP/6+DT/+3h0//y49L/5t7T/1CU4f8Kcef/FXbn/xd4 + 5/8XeOf/F3jn/xd45/8XeOf/FXbn/yV/5P/Fzdb/8ePS/+vh0v/17+j//fv6//37+f/9+/n//fv5//37 + +f/9+/n//vz4//7+/f/8/f3/+vz9//n7/v/u8/n/vtXw/73W9f9vg5f/Qzo////y9f/o1dn/1LC3/9e0 + u//Np63/n2Jv/7J+iP+jb3P/lFxh/5ZeY/+WXmP/ll5j/5ZeY/+WXmP/lVxh/6Bscf/RrbP/1rO6/9Wy + uf/LrrP5KCQlvwAAAIYAAABWAAAALAAAAA0AAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOzb + 36Hy5+n/17W8/dWyuf/ducD9po2U/QkOFP+blY798OXV/ezh0//q39H96t/R/ezh0//q39H96t/R/ezh + 0//q39H97uHT/+/i0v16qN39Fnjm/xV25/0VduX9F3jn/xV25f0VduX9F3jn/xF05/17qd397uLS/+rf + 0f3s4tT9+PTv//37+f37+ff9/fv5//z6+P34+fj97vP5/+ry/f3v9f397/X8/e/2/v/x+P39x9/6/Y7A + +f9wlb79Kigw/fDf4v/u4OL91bK4/da0uv/RrbT9pWt2/at0f/+odnv9lFtg/ZZeY/+UXGH9lFxh/ZZe + Y/+UXGH9lFxh/aFtcv/RrrX91rO6/dayuv+5nqPyIB0eugAAAIMAAABSAAAAKQAAAAsAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAODP03nz6ev/2bm//dWyuf/atr39wKKo/QwRFf9/fXj97uPU/ezh + 0//q39H96t/R/ezh0//q39H96t/R/ezh0//q39H96+HT/+7h0f3r4NL9gazd/w5z5/0Wd+X9F3jn/xV2 + 5f0VduX9F3jn/xF05/1KkuH94tvT/+vg0f3q39H98Ofc//z7+f39+/n9/vv4//H1+v3j7vv93uv8/+Ds + +/3s9P3+8fb8/fH3/v/x9/z98/j9/a3S+v98pdT9ICUw/dvHy//z6Ov91bS7/dazuv/Usbj9qnR//aVq + d/+se4H9lVxh/ZZeY/+UXGH9lFxh/ZZeY/+UXGH9lFxh/aJvdP/Sr7b91rO6/dezuv+xl5zwHRkZtwAA + AH8AAABOAAAAJwAAAAkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANTHylX06ev9277D/tWy + uf/XtLv907G4/RgaH/9kYWD969/R/ezh0//q39H96t/R/ezh0//q39H96t/R/ezh0//q39H97OHT/+rf + 0f3u4tH98OPR/yqC5P0Rdef9F3jn/xV25f0VduX9F3jn/xJ15/0pgOT90NPU/+zg0f3q39H96uDQ//bx + 6/3+/Pn97fT5/97s+/3e6/r94O38/97r/P3k7vv98Pb9/fH3/v/v9fz98ff+/eHu/v+Ru+n9HCk5/cCt + sf/58/P92Li+/dWyuf/XtLv9sXyH/aBkcf+vf4b9ll1i/ZZeY/+UXGH9lFxh/ZZeY/+UXGH9lFxh/aRx + d//Usbj91rO6/dazuv+0m6DwHhsctgAAAHwAAABLAAAAJQAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAJqQkjj16uzr38XK/9WxuP/Vsrn/4bvC/zAtMv9EREX/49nL/+zh0//s4dP/7OHT/+zh + 0//s4dP/7OHT/+zh0//s4dP/7OHT/+zh0//r4NP//ejR/0eQ4v8Oc+f/F3jn/xd45/8XeOf/F3jn/xJ1 + 5/8ogOX/0NPV/+3h0v/s4dP/7eDS/+nh1v/c5/T/4O38/+Dt/P/g7fz/4O38/+Dt/P/f7Pz/5/D9//H3 + /v/x9/7/8ff+//T5/v/R5f3/LkNZ/5eFif//+/z/3b/F/9Wyuf/Yt7z/uYqU/51da/+ygYn/mGBm/5Vd + Yv+WXmP/ll5j/5ZeY/+WXmP/lFtf/6h0ev/Vs7r/1rO6/9izuv+mkJXsFxYXrwAAAHcAAABHAAAAIQAA + AAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACQgISj26OzW5M3S/tSvtv/Vsbj9477F/UxD + Sv8wMzT929LF/ezh0v/q39H96t/R/ezh0//q39H96t/R/ezh0//q39H97OHT/+rf0f3r39H9+ufR/0GL + 4v0Oc+f9F3jn/xV25f0VduX9F3jn/xJ15/0ngOT9z9LV/+zg0f3r39H99+bR/4eu2/1foO792un7/+Ds + +v3e6/r94O38/97r+v3e6/r93+z7/e71/v/x9/z97/X8/fL3/v/1/P/9YHB9/XFiZv//+Pr94cnO/dSv + uP/Ytrz9wZSe/ZpbaP+ygIn9mmRq/ZVdYv+UXGH9lFxh/ZZeY/+UXGH9klpf/ap3ff/Vs7r91rO6/di0 + vP+RfYHlDgwMqgAAAHIAAABCAAAAHwAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACEd + Hhry5ui66NTY/9Outf/Usbj94r3E/WpcYv8gJCj91dDL/ezh0f/q39L96t/R/ezh0//q39H96t/R/ezh + 0//q39H97OHT/+rf0f3t4dH98+PS/ymA5P0Rdef9F3jn/xV25f0VduX9F3jn/xJ15/0pgOT90dPU/+vg + 0f3y5NH90dTV/xV25v0Vduf9nMX0/+ny/P3e6/r94O38/97r+v3e6/r93uv6/eXv/f/w9v398fX8/fD2 + /v/7/v/9lJyk/UpBRv/37vD959PX/dOutv/Xtrv9yZ+o/ZlYZ/+wfYj9nWlu/ZVdYv+UXGH9lFxh/ZZe + Y/+UXWL9klle/ax7gf/WtLv91rO6/dm1vP+Pe3/jCwsLqAAAAG4AAAA/AAAAHAAAAAUAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAPDh5A7k1tmi7d/i/9Kutf/Ws7r/3bnA/455f/8SFhr/vby7//nw + 5//r39D/7OHT/+zh0//s4dP/7OHT/+zh0//s4dP/7OHT/+vg0//z5NH/wszX/wlx5/8WeOf/F3jn/xd4 + 5/8XeOf/F3jn/xB05/9MkeH/5NzT/+7h0//m3dP/SpDi/w5z5/8SdeX/Hnzo/9Pk+f/k7vz/3+z8/+Dt + /P/g7fz/3+z8/9/t/P/q8v3/8Pf+//H3/v/5/f//xc3U/y4qMP/k2tv/7+Ll/9KttP/XtLv/z6qy/5tc + af+ud4P/pXF3/5RcYf+WXmP/ll5j/5ZeY/+WXmP/klle/69/hf/Xtbz/1rO6/9e0u/6DcnbeBgcHoQAA + AGgAAAA6AAAAGQAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOXW2QPays2H8eTm/dKt + tP/Usbj92rW8/aeMk/8TFRr9nZyc/f///P/u5tn96t/R/ezh0//q39H96t/R/ezh0//q39H97OHT/+3h + 0f3v4tL9Z6Df/wxy5/0Wd+X9F3jn/xV25f0VduX9F3jn/xF15v1sot796+DS//Di0f2lvtj9GXjl/xV2 + 5v0Wd+b9DHLl/2up7v3h7Pv94e38/97r+v3f7Pv96PD7/fL2+f/2+Pn9+vv8/fv8/P/9/v/96uzu/Skn + LP/NxMf99/Dx/dKttP/Ws7r91bK4/Z5gbf+pcXz9qnmA/ZNZXv+VXWL9lFxh/ZZeY/+VXWL9kVhd/bGC + iP/XtLz91bO6/tWyuP1nWFvVAAAAmwAAAGMAAAA2AAAAFgAAAAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAACckJJp9Ons9NSwuP/Usbj917S7/bqcpP8bGyD9eHl6/f/////38uv97OLT/ezg + 0//q39H96t/R/ezh0//q39H96+DT//Tk0f2wwtf9H3vl/xV25f0VduX9F3jn/xV25f0VduX9Fnjn/xR3 + 5v2auNn98eLS/+jg0v1emt/9EXXn/xZ25f0VduX9FXbn/x585/2ny/X95PD8/9/t+/3v9Pr9/Pr4/f37 + +f/9+/f9/fz5/f/+/f/+/v39/////TEwNv+1qa39/vv7/dSwt//Usbj92La8/aRndf+jaXX9sYGI/ZFZ + Xv+VXWL9lFxh/ZZeY/+VXWL9kVhd/bOFi//Ytr391bG5/tWyuP1kVlnTAAAAlwAAAF8AAAAzAAAAFAAA + AAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABjWltQ9enr6ti3vf/Usbj/1rO6/8qp + sP8wLDL/TVBS///////8+fb/9fDo/+vg0P/s4dP/6+HT/+vg0//u4tP/9eXR/7LE2P8lfuX/EXbn/xd4 + 5/8XeOf/F3jn/xd45/8XeOf/E3bn/zGE4//W1tX/8+PS/8nP1v8jfuX/Enbn/xd45/8XeOf/F3jn/xF0 + 5f83iur/yN/5//j5+v/9+/j//fv5//37+f/9+/n//fr4//79/P///v3//////1JUV/+Pg4f///7//9i3 + v//UsLj/2rm//6t0gP+eYG7/t4eP/5JYXf+WXmP/ll5j/5ZeY/+WXmP/kVdc/7iLkv/Ytr3/1rO6/86t + s/pUS03LAAAAkQAAAFgAAAAuAAAAEQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AACjkpU07t/j3N3Axv/UsLf91bK5/dKvtv9HQEb9LTE0/f/////8+PX9+/j2/fDn3P/r39H97uLR/fXl + 0f/m3dL9n7vZ/yJ+5f0RdOf9F3jn/xV25f0VduX9F3jn/xV25f0Wd+X9CXHn/3io3f3x49L99ebR/5u4 + 2f0Rdeb9Fnbn/xV25f0VduX9F3jn/xZ35f0Oc+X9jrrt////+f37+ff9+/n3/f37+f/7+ff9+/n3/fz6 + +f/+/fz9/////XR2eP9yZ2z9+vf4/d7Bx//TsLf92bi+/bSAi/+aWmn9t4eQ/ZVeY/+UXGH9lFxh/ZZe + Y/+VXWL9kFdc/byQl//Ytr391bK5/siorvhGPkDFAAAAjQAAAFMAAAAqAAAADwAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADs4eMc6Njb0OLJzv/Trrf91bK5/dazuv9gVVv9FBke/e3w + 8v/9+/j9/fn2/fz27//s4tb94NrS/aG72f9NkuH9GXjm/xJ15/0Wd+X9F3jn/xV25f0VduX9F3jn/xZ3 + 5f0Tdef9FHbn/9nX1P3w4tH9++fR/3Cj3v0Mcuf9F3jn/xV25f0VduX9F3jn/xV25f0Tdeb9pLzZ///5 + 8v39+/n9+/n3/f37+f/7+ff9+/n3/f37+P/++/n9/////ZeZmv9YUFX98e7u/eXP0//TrrX92La9/byN + l/+ZWWb9tYON/Zxmav+UXGH9lFxh/ZZeY/+VXWL9j1dc/cCWnf/Ytr391bK5/sWnrfdBPDy/AAAAiAAA + AE0AAAAmAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADYys0H3cnNu+fR + 1f/Ur7b/1rO6/9m1vf+AbXP/Cw8T/7HG3f/W6P3/1OX4/9nn+v+hx/L/G3ro/wZv5/8QdOf/FXfn/xd4 + 5/8XeOf/F3jn/xd45/8XeOf/F3jn/xR25/8Sdeb/kbTa//nn0f/r4NP/+ObR/z2K4/8Pc+f/F3jn/xd4 + 5/8XeOf/F3jn/xJ25/8lf+X/y9DU//Lm2v/7+Pb//fv5//37+f/9+/n//fv5//37+f/8+vj//////8LC + wv9HQEX/4+Dg/+7f4f/Tr7f/1rW8/8abo/+aXGn/r3iE/6Z1ef+TWV7/ll5j/5ZeY/+WXmP/kFdc/8ad + o//Ytr3/17S7/7ibofMjIiGyAAAAgQAAAEYAAAAhAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAvamtmurW2//UsLf91LG4/du3vv+WgIb9CgsP/Zerv//V6v79zeH4/c7j + +v/N4/n9aajw/Qtw5f8Wd+X9F3jn/xV25f0VduX9F3jn/xV25f0VduX9F3jn/w905v1em9/95d3T/+zh + 0f3r4NH99uXS/zeH4/0QdOf9F3jn/xV25f0VduX9F3jn/xJ15/0whOT91NXU/+zg0f3z7ub9/Pr4/f37 + +f/7+ff9+/n3/f37+f/7+ff9//37/dbY2P9DP0P908vO/fTq7f/UsLf91rO6/cujq/+fYm79pmx6/a6A + hP+SWV79lF1i/ZZeY/+UXWL9kVhc/cmiqf/Xtr391rO6/rWaoPAbGRqrAAAAegAAAEAAAAAdAAAACAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAApZWYd+vW2v/Wsrn91LG4/dq2 + vf+qkZf9EhIV/XqKnf/X7P/9zeH4/c/j+v/Q5Pr9zeL5/S2E6f8Pc+X9F3jn/xV25f0VduX9F3jn/xZ2 + 5f0Wd+X9CnHn/z+M4v3V1tT98OPS/+rf0f3r4dH99uXS/zeH4/0QdOf9F3jn/xV25f0VduX9F3jn/xJ1 + 5/0yheP91dfU/+vg0f3t49X9+fXy/f37+f/7+ff9+/n3/f37+f/7+ff9/vr6/eTl5f9KSU79uayw/fnz + 8//WtLr91bK5/dCqsv+jaHT9oGJv/baIjf+TW2D9lFxh/ZZeY/+UXGH9klpe/cymrf/XtLv917O6/qCJ + jukFBQShAAAAcwAAADoAAAAaAAAABgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAsaKlSejT1//YuL7/1LG4/9m2vf/Boqj/JSEk/1hoef/S6f//z+L6/8/j+v/O4vr/0+X6/67P + 9v8lgOj/E3bm/xd45/8XeOf/F3jn/xR25/8RdOf/RI7i/+rf0//x5NH/6+DT/+zh0//r4NP/9ubS/ziI + 4/8Pc+f/F3jn/xd45/8XeOf/F3jn/xJ25/8kfuX/yc/V/+7h0//q39H/7uba//37+f/9+/n//fv5//37 + +f/9+/n//fv5//b29f9kZWf/joGF//34+f/au8H/1LG4/9Ovtv+rc37/mlln/7mLk/+XYGb/lFxh/5Ze + Y/+UXGH/k1tg/9Grsv/XtLv/17K6/5OBhOEAAACYAAAAagAAADQAAAAWAAAABAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA4NDTJ+TN0v/au8H91LG4/de0u//OrLP9ODM3/T9K + V//L4Pn90OT6/c/j+v/N4fj9zeH4/dLk+v9+s/H9Fnfm/xZ25f0Wd+X9D3Xn/xd45f1qot792tfU//Hj + 0f3q39H97OHT/+rf0f3q39H9+efR/1iY4P0Ncuf9F3jn/xV25f0VduX9F3jn/xV25f0Tdub9obvZ//Tk + 0f3q39L96t/Q/fbx6v/9+/n9+/n5/f37+f/7+ff9/Pr4/f3++/9/gYL9aF1i/f/9/f/dwcf91LC3/dWy + uP+wfIf9mFhm/biIkf+daG39lFxh/ZZeY/+UXGH9ll9j/dSxuP/Ws7r917O5/ndrbdUAAACQAAAAYgAA + AC4AAAASAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA3M7RDuPL + 0Pbcv8X+1LG4/dazuv/YtLv9UEdM/Sk0Pv++1Ov90ub8/c/i+v/N4fj9zeH4/dDj+v/L4Pj9Tpjs/wdv + 5f0HcOf9JX/m/6e/2f3p39L97+LR/+rf0f3q39H97OHT/+rf0f3q39H9+OfR/4St2/0Mcuf9Fnfn/xV2 + 5f0VduX9F3jn/xZ35f0Nc+f9U5Xh//zo0f3r39L96t/R/e3k1//69vP9/fv5/f37+f/7+ff9+/n3/f// + /f+goqL9Rj5F/f/+///iys/91LG4/dazuv+2hY/9mVln/bOBi/+icHT9lFtg/ZZeY/+TW2D9mWNo/de0 + u//Ws7r92bS7/2dfYMsAAACJAAAAWgAAACkAAAAOAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAObP1NPdwcf/1bK5/9Wyuf/ducD/c2Rq/xYcJP+sv9H/0eb9/83i + +v/N4fr/zeH6/87i+v/S5fr/yeD6/1CV5P+Yt9n/6+DT//Xl0f/s4dP/6+DT/+zh0//s4dP/7OHT/+zh + 0//s4dP/8OPS/7vJ1/8ceuX/FHbn/xd45/8XeOf/F3jn/xd45/8WeOf/CHHp/63C2P/15dH/6+DT/+vg + 0f/w6d///Pn4//37+f/9+/n//fv5///+/P/ExcX/Lisw//Xo6//p1tv/1bC3/9e0u/+/kZr/nF1q/6x1 + gf+qeX7/lFtg/5ZeY/+TWl//n2pw/9m4v//Wsbn/27i//zYxMrgAAAB/AAAATwAAACIAAAAKAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOfQ1LLewsj/1bK5/dWy + uf/eucD9j3qA/Q0UGP+erbr92er8/dTl+f/U5fn92Of5/d/q+P/m7fb98/X4//Pw6v3z5dL97uLR/+rf + 0v3q39H97OHT/+rf0f3q39H97OHT/+rf0f3q39H97OHT/93Z0/1BjOL9EXTn/xZ35f0VduX9F3jn/xV2 + 5f0Wd+X9EnXn/zOF4/3CzNb98+TR/evg0f/r4dL99vHq/f37+f/7+ff9+/n3/f79+//j4+L9MTI2/dbH + yv/u3eH91bG4/da1vP/Fm6T9n2Bt/aZtef+vfoX9lFxh/ZZeY/+TWV79pnR6/dq4v//Vsbj+2Le9/RUU + FKgAAAB2AAAARwAAABwAAAAHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAN/JzZLew8j/1bO6/dWyuf/cuL/9rZGY/QkOE/+cnp79+/v6/ff29f/39vX9+ff1/fv4 + 9f/7+PX9/Pn2//v49f3y6uH96uDS/+vf0f3q39H97OHT/+rf0f3q39H97OHT/+rf0f3q39H97OHT/+7h + 0v2Aq939EnXn/xV25f0VduX9F3jn/xV25f0VduX9F3jn/xF15/03h+P9u8jX/f3p0f/v4dH97ePV/f36 + 9//8+/n9+/n3/f37+v/9+vn9SUxP/ambn//y5Ob91rK5/da0u//Mpaz9oWVx/aNmdP+zg4v9ll9k/ZZe + Y/+RWV79rn6E/dm4v//Vsbj+y7C29gAAAJoAAABtAAAAPwAAABcAAAAFAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANrM0F/ewMf/1rS6/9Wyuf/atbz/yKiv/w4T + F/99fH3//Pr3//z59v/8+fb//Pn2//z59v/8+fb//Pn2//z59v/79/T/8Ofc/+rf0f/s4dP/7OHT/+zh + 0//s4dP/7OHT/+zh0//s4dP/6+DT/+/i0f/W1tT/NYbj/xN25/8XeOf/F3jn/xd45/8XeOf/F3jn/xd4 + 5/8QdOf/DXPm/3Kk3//Ezdb/4tvR//Ps4P///Pn//fv5//z6+P//////hImM/2pcYv/x3OD/1rS8/9az + uv/Srrb/qG97/59ibv+3ho7/mmNo/5VdYv+TWl//uo2T/9m2vf/Wsrr/q5SZ6QAAAI8AAABgAAAANAAA + ABEAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL2v + skbewsj01rS7/tWyuf/Xs7r92bS7/R0eI/9fYGL98vLx/fz59v/69/T9+vf0/fz59v/69/T9/Pn2//r3 + 9P38+fb9+fTx/+vg0/3q39H97OHT/+rf0f3q39H97OHT/+rf0f3q39H97OHT/+vg0f3y5NH9mrja/whw + 5/0Wd+X9F3jn/xV25f0VduX9F3jn/xV25f0Wd+X9FHfl/Q5z5/8jfuX9S5Hh/XKl3v+91vL98fX6/erx + +//r9v39tcPR/UE6P//avMP917S7/dazuv/Vs7r9r3mE/Zxdav+1hY79nmpv/ZRcYf+VXWL9xJuh/da1 + vP/YtLv+h3l91wAAAIQAAABVAAAALAAAAA0AAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAEM9PjHhw8rm1rS7/tWyuf/Vsrn94LzD/TQwNf9ERkn96enp/f35 + 9v/69/T9+vf0/fz59v/69/T9/Pn2//r39P369/T9/Pn3//Tu5f3r39H97N/R/+rf0f3q39H97OHT/+rf + 0f3q39H97OHT/+rf0f3t4dH98uPS/0eO4v0Lcuf9F3jn/xV25f0VduX9F3jn/xV25f0VduX9Fnbl/RZ3 + 5/8Sdef9EXTn/Q1y5f9CkOv91OX5/eDt/P/h7v393+7+/Tg7RP+7m6H92ba9/dWyuf/Ytbz9uYiU/ZlY + Zv+zgYz9p3R6/ZJZXv+bZmr9zaiu/dWyuv/Ytr3+VEpMwwAAAHgAAABKAAAAJAAAAAkAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACQgISDkys7F17W8/9Wy + uf/Vsrn/5L3E/1ZLUf8lKS3/29vb//369//8+fb//Pn2//z59v/8+fb//Pn2//z59v/8+fb//Pn2//v4 + 9f/x6eD/6+DS/+zh0//s4dP/7OHT/+zh0//s4dP/7OHT/+zh0//r4dP/7+HS/9vZ1P9FjeL/EHTn/xd4 + 5/8XeOf/F3jn/xd45/8XeOf/F3jn/xd45/8XeOf/F3jn/xZ35/8NceX/ZaXu/+vz/P/g7Pv/7fz//0NO + XP+IcXf/2ra9/9Wyuf/Xtr3/yJ2m/5dWZP+sdYH/tIWL/5BWW/+sfIL/1LK5/9Wyuf/JrLL2KCQlrAAA + AGkAAAA9AAAAGgAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAI2GhxXfxcuw17a9/9WxuP/Usbj94bvC/XVka/8TFxz9xMPC/f/9+//69/T9+vf0/fz5 + 9v/69/T9/Pn2//r39P369/T9/Pn2//z59v359fH97uTY/+rf0f3q39H97OHT/+rf0f3q39H97OHT/+rf + 0f3q39H96+HT//Hj0f3Iz9X9Qozi/wxy5/0Wd+X9F3jn/xV25f0VduX9FXbl/Rd45/8VduX9FXbl/Rd4 + 5/8TdeX9EnTm/bnV9//m8Pz96/v//TZCT/9sW2H917W8/dazuv/Ws7r90Kyz/Ztdaf+kanf9vpOZ/ZJZ + Xv/DmaD917S7/dazuv+xmZ7pHBobmwAAAFsAAAAxAAAAEwAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOrX2wnZv8SZ2bi+/9WxuP/Usbj927e//ZeA + hv8IDBL9gYGC/f/////69/T9+vf0/fz59v/69/T9/Pn2//r39P369/T9/Pn2//r59v38+fb99/Ls/+re + 0P3q39H97OHT/+rf0f3q39H97OHT/+rf0f3q39H97OHT/+vg0f3w49H92NfU/zuJ4v0IcOf9E3bn/xZ2 + 5f0WduX9FXbl/Rd45v8VduX9FXbl/Rd45v8Wd+X9DnPl/UmW7P/h7/391OX0/RAXH/9vX2X917W8/daz + uv/Wsrr92Le8/aVrd/+bXGn9vpGa/b+Vm//Oqa/91rK6/di0u/6PfYDXDAwMhwAAAEwAAAAmAAAADQAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAC7q6912La9+NWyuf/Ws7r/1rO6/8Okq/8tKzL/FBcd/+bk4/////v/+/j1//v49f/8+PX/+/j1//z4 + 9f/8+PX/+/j1//z49f/7+PX//Pn4//Lr4//r4NH/6+DS/+zh0//s4dP/7OHT/+zh0//s4dP/7eLU/+3i + 1P/t4tT/8uXU//Hk1P+Ls97/LITn/xN46v8VeOr/FXnq/xV56/8Veez/F3rs/xZ67P8Weuz/F3rr/xR5 + 7P9vpuL/TFVg/xQUGP+hiZD/2ba9/9Wyuf/Vsrn/2bi//7eHkP+aWmf/n2Nv/694hP+7jJb/1rO6/9Gw + tvpcUlW5AAAAbQAAADkAAAAZAAAABwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABkWFtc2re/79azuf/Usbj91bK5/dezuv9xYmf9BwwQ/Vtd + X//i4eD9///+/f/+/P///fz9//78///9/P3//v39///9///+/f3//v39///+/////P348Ob98+jY//Lm + 2P3x5tf98OXW/+/k1v3u4tX97ODT/+fd0P3m2sz94tjL/+DVx/3h1cT9tr3G/02Iyv0hcs/9HnDO/R5t + x/8cacH9F2O5/Rdfsv8bYbD9HmGu/R1Xm/8ULUr9BwwQ/WtdZP/Tsbj91rO6/dazuv/Usbj91rO6/cuj + qv+hZXH9nF1q/ZtbaP+/kZv92LW8/sKlq/A5NjeYAAAAWQAAACsAAAARAAAAAwAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABiV1lD27i/49az + uf/Usbj91LG4/di1vP/Fpqz9Pzs//QQJD/89P0P9kZKT/cjHxv/HxsX9wsHA/7y8vP22trX9sbCw/6in + qP2fn6D9lJSW/4yOkP2FhoX9dHNv/2tpZv1kY2D9W1tZ/1NTUf1LTEz9RkdG/z9AQf06PDz9NDY4/y0w + Mv0oKy39KCko/x4iJf0PGyf9DRoo/RAbJv8RGiT9EBkh/RIYIP8VGiH9Fhwi/RkdIf8kIyb9cGJn/dWx + uP/Xs7r91LG4/dazuv/Usbj91LK5/dWyuf+wfIj9m11q/Z5gbv/DmaD917S7/qeQlNsJCgpwAAAAQwAA + AB0AAAAKAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAADw4eQn2bvB1tWxuf/Ws7r/1rO6/9Wyuf/Ztr3/2LS7/2tdY/8wLDL/GRke/xcX + Hf8ZGB7/Gxog/x4dIv8hHyT/IyEn/yckKv8qJiz/Liou/zItM/82MTj/Pzg//0c+Rf9NREr/VEpQ/1tP + Vv9iVVv/aFth/3BgaP93Zmz/fmxz/4dze/+PeoD/l3+H/5+Gjf+njJP/rZCX/7KWnP+3mqH/vZ6l/8Ok + q//JqK//zquy/9Kwt//Ytbz/4LvC/9azuv/Ws7r/1rO6/9azuv/Ws7r/1rO6/9e0u//Akpv/nV9r/6Fl + cf/Lo6z/2re+/2dfYZoAAABLAAAAKwAAAA8AAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADZ0dMG1LvAsdSutv/Ur7j91LG4/daz + uv/Usbj917S7/du3vv/Ip679vJ2k/bydpP++oKf9waKp/8Okq/3Fpaz9x6eu/8mpr/3Lq7H9zq20/9Gv + tv3Usbj91rO6/9e0u/3Ztbz92ra9/9q2vv3bt7793bi//965wP3eucD937rB/924v/3euMD93rnA/925 + wP3ducD93bi//du3v//bt7792ra9/dq1vP/Ytbz92LS7/di0u//Ws7r91bK5/dazuv/Usbj91LG4/daz + uv/Usbj91LG4/da1u//JoKn9oGJv/adtef/RrLL+17vA6xQUFVUAAAAxAAAAGQAAAAc7OjoBAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAA59jcYdy9xP/iyc7906+2/dWyuf/Usbj91LG4/dazuv/XtLv92ba9/dm2vf/Ztb392ba9/9m0 + u/3ZtLv92bS7/9e0u/3XtLv917S7/9ezuv3Ws7r91rO6/9azuv3Ws7r91rO6/9azuv3Vs7n91bK5/9Sx + uP3Usbj91bK5/9SxuP3Usbj91bK5/9SxuP3Usbj91LG4/dWyuf/Usbj91LG4/dWyuf/Usbj91LG4/dWx + uP/Usbj91LG4/dSxuP/Ur7b91K+2/dSvtv/Ur7b91LG4/dazu//Qq7L9omdz/bF+if/atr7/oJSVmAAA + ACsAAAAbAAAACwAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA7+fpBOLKz9j59Pb/8OTn/9i2vv/VsLj/1LG4/9Sx + uP/UsLj/1LC4/9SxuP/UsLj/1LG4/9SwuP/UsLj/1LG4/9SwuP/Usbj/1LG4/9SxuP/Usbj/1LC4/9Sw + t//UsLf/1bC3/9Wwt//VsLj/1bG4/9WxuP/Vsbj/1bK5/9ayuf/Ws7n/1rS6/9W0u//Xtbv/17W8/9i2 + vf/ZuL7/2bm//9q6wf/avML/3L3D/92/xf/ewsf/38TK/+HIzP/hys//4szQ/+bP1P/lz9T/4sjO/9a1 + u//Usbj/qnF+/8qgqP3Fr7O2IB4dMAAAABEAAAAIAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAO3g + 4lTn0tfn+/n5//Xu8P/m1Nf94MXK/d3Axv/cv8X93L7E/dy+xP/cvsP93L7E/9y/xf3cv8X93cDG/93B + x/3ew8j938TJ/+DHzP3hyM394srO/+PM0P3kztL95dDU/+fU2P3o1tr96tjc/+vc3/3s3uH97d/i/+7g + 4/3w4uX98eXm//Lm6P7y6Ov+8+rs/vXu7//27/D+9/Hy/vfz8//48/P++PT0//j09v/69/f/+vX2//n1 + 9v/58/X/+PLz//fw8P/27vD/9e3v/9u9w//Srrb/xZqj99nAxa9iXFw4AAAACgAAAAUAAAACAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAPjz9AXq2t1h4snN6/Lo6v/8+/r//Pr6//v4+f/79/j/+vf4//v2 + 9//59vf/+/f4//v4+f/8+fn/+/j4//v5+f/8+Pn//Pj5//r39//59Pb/+fP1//r39//69fb/+PT1//fx + 8v/27u//9Ovt//Po6v/x5+n/8ufp//Hk5//v4+b/7+Hk/+7f4vzs3N/y69ve6ezX2+Lp1dnj59TY4ujW + 2uDm1djS6NbZwePR1a7bwMWn3sTJpuHKzqbiztKj5NLWluXV2YLk0tVx1bi9aNW3vWnYvMJo1sTISh4c + HBgCAQECAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA59LXGd/D + yIbgxMq54MbMzeHKz8zjztLM5M/TyOPQ077k0da05dPWrM28wKG9o6me273Dnd3AxZ3gx8yd48zQm+TR + 1Y3m1dh/6dveb9OzuGDVs7pf27zBX9/Hy1/jztJZ5tbaSure4Dniz9IpzqqwIdK1uiLZwMQi38vPIePU + 1xbh2dsMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD17vAI8eTmEu3h5BLw5ucS7uboEO7p6Qvv6+wG8u/vAgAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP////////////////// + /////////////////////////////////////////////////////gAA///////////gAAAAB/////// + /gAAAAAAAH/////4AAAAAAAAAA/////gAAAAAAAAAAP////AAAAAAAAAAAB////AAAAAAAAAAAAf//+A + AAAAAAAAAAAD//+AAAAAAAAAAAAB//+AAAAAAAAAAAAA//+AAAAAAAAAAAAA//+AAAAAAAAAAAAAf/+A + AAAAAAAAAAAAf/+AAAAAAAAAAAAAf/+AAAAAAAAAAAAAf/+AAAAAAAAAAAAAf/+AAAAAAAAAAAAAf/+A + AAAAAAAAAAAAf/+AAAAAAAAAAAAAf/+AAAAAAAAAAAAAf/+AAAAAAAAAAAAAf/+AAAAAAAAAAAAAf//A + AAAAAAAAAAAAf//AAAAAAAAAAAAAf//AAAAAAAAAAAAAf//AAAAAAAAAAAAAf//gAAAAAAAAAAAAf//g + AAAAAAAAAAAAf//gAAAAAAAAAAAAf//gAAAAAAAAAAAAf//wAAAAAAAAAAAAf//wAAAAAAAAAAAAf//w + AAAAAAAAAAAAf//wAAAAAAAAAAAAf//wAAAAAAAAAAAAf//wAAAAAAAAAAAAf//wAAAAAAAAAAAAf//w + AAAAAAAAAAAAf//wAAAAAAAAAAAAf//4AAAAAAAAAAAAf//4AAAAAAAAAAAAf//4AAAAAAAAAAAAf//4 + AAAAAAAAAAAAf//4AAAAAAAAAAAAf//8AAAAAAAAAAAAf//8AAAAAAAAAAAAf//8AAAAAAAAAAAAf//8 + AAAAAAAAAAAAf//8AAAAAAAAAAAAf//+AAAAAAAAAAAAf//+AAAAAAAAAAAA///+AAAAAAAAAAAA///+ + AAAAAAAAAAAA///+AAAAAAAAAAAA///+AAAAAAAAAAAA///+AAAAAAAAAAAA///+AAAAAAAAAAAA///+ + AAAAAAAAAAAA////AAAAAAAAAAAA////AAAAAAAAAAAA////AAAAAAAAAAAB////AAAAAAAAAAAB//// + AAAAAAAAAAAB////gAAAAAAAAAAB////gAAAAAAAAAAB////gAAAAAAAAAAB////gAAAAAAAAAAB//// + gAAAAAAAAAAB////wAAAAAAAAAAD////wAAAAAAAAAAD////wAAAAAAAAAAD////wAAAAAAAAAAD//// + wAAAAAAAAAAD////wAAAAAAAAAAH////wAAAAAAAAAAH////wAAAAAAAAAAH////wAAAAAAAAAAP//// + 4AAAAAAAAAAP////4AAAAAAAAAAP////4AAAAAAAAAAP////4AAAAAAAAAAf////4AAAAAAAAAAf//// + 8AAAAAAAAAA/////8AAAAAAAAAB/////+AAAAAAAAAD/////+AAAAAAAAAP//////gAAAAD///////// + /4B//////////////////////////////////////////////////////////////////////////ygA + AABIAAAAkAAAAAEAIAAAAAAAYFQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAABAAAAAQAAAAIAAAADAAAABAAAAAUAAAAGAAAACAAAAAkAAAAKAAAACgAA + AAkAAAAIAAAABQAAAAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAIAAAADAAAABQAAAAYAAAAIAAAACgAAAAsAAAAOAAAAEAAA + ABMAAAAVAAAAGAAAABsAAAAeAAAAIQAAACQAAAAnAAAAKgAAAC0AAAAuAAAALwAAAC4AAAAqAAAAIwAA + ABoAAAASAAAADAAAAAkAAAAGAAAAAwAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAIAAAAEAAAABQAAAAYAAAAIAAAACgAAAAwAAAAOAAAAEQAA + ABMAAAAWAAAAGQAAAB0AAAAgAAAAJAAAACgAAAAsAAAAMAAAADQAAAA4AAAAPQAAAEIAAABHAAAATAAA + AFEAAABWAAAAWwAAAF8AAABlAAAAaQAAAG0AAABvAAAAcAAAAG4AAABpAAAAXgAAAE0AAAA/AAAANQAA + AC8AAAAnAAAAHgAAABQAAAALAAAABQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAEAAAAIAAAAEQAAABkAAAAfAAAAIwAAACcAAAAqAAAALgAAADIAAAA3AAAAPAAAAEEAAABGAAAATAAA + AFEAAABXAAAAXAAAAGIAAABpAAAAbgAAAHQAAAB5AAAAfwAAAIQAAACJAAAAjgAAAJIAAACXAAAAmwAA + AJ8AAACjAAAApgAAAKkAAACqAAAAqgAAAKkAAACmAAAAnAAAAI0AAAB/AAAAdAAAAGwAAABiAAAAUgAA + AEIAAAAwAAAAIAAAABQAAAAKAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAoAAAAdAAAANQAA + AEkAAABUAAAAWgAAAF8AAABkAAAAawAAAHEAAAB3AAAAfQAAAIMAAACIAAAAjQAAAJMAAACYAAAAnQAA + AKEAAACmAAAAqQAAAK4AAACwAwQEtgYGBroKCgq8Dg0MwA4MDcMaGBjJHhkazCklJs5EPD7WRj1A2EQ5 + O9lGOz3aRDk82S8pK9UMCwrMAAAAxQAAALwAAAC0AAAArQAAAKgAAACfAAAAkgAAAIEAAABrAAAAUwAA + AD0AAAApAAAAGAAAAA0AAAAFAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAABkAAABBAAAAawAAAIgAAACWAAAAmwAA + AKAAAACkAAAApwAAAKwAAACvAAAAswAAALYAAAC6AAEBvggICcIeHh7JMi0u0D05OdRZTlHcWkxP33Je + YuV0W2Doim1z7o9tdPCbd370qYCI+ah+hvm2hZD9toON/bSAiv60fYn+sHaD/qxxfv6oanb+pml0/qlu + e/6fb3r4YlBV6FFLS99YTE/gNDAx2AMEA8wAAADGAAAAwAAAALUAAAClAAAAkgAAAHoAAABfAAAARgAA + AC8AAAAdAAAAEAAAAAcAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAADQAAAC0HCAhsDAwMoBoaGcApJSfNLSgp0EA3OddBNDbaWEVJ4F5E + SeR+YWbrgl9m7pp0fPWid4H4r3+J/LWAi/62f4r/tX+J/7V9if+3gYz+uoaS/76Mlv/ClJ3/xZmj/smg + qP/Npa3/0Kmx/9Kttf/UsLf+1bO5/9azu//WtLv/1rO7/dSxuf/RrbX/y6Sr/76Qmf2iZnP/oF9s/9Sv + t//at73/v5mm/q2Nm/2Jc3zzWEtP5SIgH9YAAADLAAAAwQAAALMAAACgAAAAiQAAAG8AAABUAAAAPAAA + ACUAAAASAAAABgAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAnKCgBAAAAF3ZkZoyqf4jqpXmB9qt9h/qxgoz7soKM+7iJk/26ipX9v4+Y/sKTnP7FmKH+yJ2m/8qh + qf/Npa3/0Kmx/tKstP/Ur7f/1bK4/9azu//Ws7r917S7/9a0u//Ws7r/1rO6/dazuv/Wsbj/1LG4/9Sv + uP/Ur7b91LC3/9Swt//TsLf/1a+3/dSwt//Usbj/1rO6/9e0u/3Trrb/o2l3/615hP/Ytbz/17S7/dWw + uP/Foav/q4iX/px8i/t8aHHvPTQ33g4NDNAAAADFAAAAuAAAAKcAAACSAAAAeAAAAFkAAAA0AAAAFwAA + AAYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAjIyMCZ19hT8yh + qvvAkpv/zaau/9SwuP/Ws7n/1rS6/te0u//XtLv/17W8/9a1vP/Ws7r91rO6/9azuv/Usbj/1LG4/dSw + t//Vsbj/1LG4/9Syuf/WtLr917W8/9i3vv/ausD/3L7E/d7Dyf/hx8z/5czR/+fS1v/r2Nz97t3h//Dj + 5P/y5un/8+jq/e3e4f/gxcr/1LG5/9SxuP3WtLv/x52l/6NndP/OqK//17a9/dazuv/Ws7r/17S7/82q + sv6zkZ7/nHuL/YRsePVVSU7mFxUV1AAAAMoAAAC+AAAArQAAAI8AAABhAAAAMQAAABAAAAABAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA4ODgDs5yhodizuv/Wtbz/1rO6/9Wy + uf/TsLf/06+2/dSvt//Usbj/1rO5/9e2vP/ZusH93L/E/+DFyv/jzNH/6dXZ/e7d4P/y5Of/9uvs//bs + 7v/37/D9+PHz//j09P/59vb/+fb4/fTw8v/q5ef/3tfZ/9HLzf/BvL/9t7G0/66nq/+upqn/xLi8/fHk + 5v////7/6tjb/9Ovt/3Ws7r/07C3/6duev+2h4//uo6U/c6pr//Xtbz/17S7/9azuv3Ytbz/1rO6/8Of + qv+ohZX+jW6A+WdVXuwxLC3bAAEBzAAAALYAAACHAAAATAAAAB0AAAAEAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABWVFUM17q/xtWxuP/Usbj91LG4/du9w/3y5ej99+3u/vv0 + 9f3/+vr9/////f////3/+/z++fHz/evi5f3d1Nb9yL/C/rStsP2gmJz9jISI/XxzeP1pYmf+X1hd/VhS + Vv1STVL9U09S/lJPUP1bV1b9ZWBe/W9raP17d3L+hH95/YqFf/18eXT9SklK/iMhJ/2klpr9//z9/dy+ + xP7Usbj91rS7/bB6hv2vfIP9fkVU/oVNW/2kcHb9wZab/dWxt/7Zt7791rO6/dazuv3at7z91bK6/rqW + ov6kgJL9cl1o7ggKCcoAAACfAAAAYQAAACcAAAAHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAABcWFkV3cDF0NSxuP/Ws7r/1bK5/9i0vP/Wu8H/joSI/XVqcf9pYGT/XlVa/1RM + Uf9STFD9U1FV/19dYP9mZWn/fXx9/YuMjv+lp6j/t7i5/8bFw//Y1s/95uHc//Hs5P/28+v/+fXt/fPp + 2//y59j/8ufY//Hm2P/x5tb98eTW//Dk1v/x5tf/9erb/bu0q/8nJir/xry//+zb3v3UsLf/17W8/7qJ + lP+0gon/dD1V/WUvU/9qM1T/dT5W/4pUYf2ufoT/yaOo/9e0u//Wtbz/1rO6/de0u//Ztrz/mXaI/k9E + SeEAAACnAAAAagAAAC0AAAAJAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AABbWloQ3sDGytSxuP/Ws7r/1rO6/9ayuf9RSE7/Jygr/aynnf/Buq7/zMO4/9bNwf/h2Mv98PDt//n5 + +P/+/fz////9/f///v////7//////////v/59O399/Lr//fy6//38uv/9/Lr/fPs4//r4NP/6+DS/+zh + 0//q39H97OHT/+vh0//s4dP/6t/R/ffs3P9zcW3/gnJ4/+TGzP3Usbj/1rW8/8KVn/+0gYv/fEZb/Wcx + U/9nMVP/ZzFT/2cxU/1rNFP/e0Ra/5pndP/Alp7/1rO5/dazuv/XtLr/wZyp/4ZufPMAAACoAAAAbAAA + AC4AAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABcV1gG3sDGvNSx + uP/Ws7r/17O6/76gpv8TFhv/pqCZ/fXp2v/u49X/7eLU/+3i0//r4NH98uvg//z7+f/9+/n/+/n3/f37 + +f/8+vj//v38///+/f/79/X99vHq//fy6//38uv/9fDp/ffy6//v59z/6+DS/+zh0//q39H97OHT/+zh + 0//s4dP/6t/R/fLm2P+clo//ZVde/964wP3Vsrn/1rO6/8qgqf+zf4r/ilVl/WYwU/9nMVX/ZzFV/2cx + U/1nMVX/ZjBT/2YwUv9wOVX/nWt1/c+rsP/Ws7r/z6yz/5h8i/gAAACoAAAAbAAAAC4AAAAKAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAtJ+jl9axuP/Vsrn/2bW8/6aN + lP8QFBr/3NHE/ezh0//s4dP/7OHT/+zh0//q39H969/S//fy7P/9+/n/+/n3/f37+f/9+/n//Pr5///+ + /P/+/fz9+PXv//bx6f/38uv/9fDp/ffy6//28Or/7ePX/+vf0f/q39H97OHT/+zh0//s4dP/6t/R/e/k + 1v+3saf/TkVK/965wP3Vsrn/1rO6/86psf+xfYj/nWpy/WcxU/9qM1X/ajRV/2o0Vf1qNFX/azRV/2w2 + Vf9vOFb/gklZ/a9+gv/WtLv/07C3/5qAjvgAAACoAAAAbAAAAC4AAAAKAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAm4yPW92/xf/WtLv92bW8/aWLkf0XGx/95NrM/uzh + 0/3q39H96t/R/erf0f3r4NL+6t/R/e3i1v37+fb9/Pr4/vv59/37+ff9/fv4/f77+f3+/fz+/fz7/ffy + 7P318On99fDq/vXw6f338uv99O7m/evg0v3q39H+6t/R/erf0f3q39H96t/R/u3i1P3Sybz9Pzs//di1 + vP7Vsbj91bK5/dOwtv2veYX9qnqA/pRcYf2WXmL9ll5i/ZZeYv6WXmL9ll5i/ZdfY/2YYGP9lFxg/q19 + g/3WtLv91LC4/p2BjvcAAACnAAAAbAAAAC4AAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAbmdnKefP1PrfxMn/17O6/7aZoP8WGh7/3dPH/ezh0//s4dP/7OHT/+zh + 0//q39H97OHT/+vg0v/x6uD//fz6/f37+f/9+/n//fv5//36+P/+/fz9//79//z69//38er/+fLp/fny + 6//38ur/9/Lr//Lq4f/q39H97OHT/+zh0//s4dP/6t/R/ezh0//i2Mr/QD5B/8yqsf3Ws7r/1rO6/9Wz + uf+we4b/sYKI/ZNbYP+WXmP/ll5j/5RcYf2WXmP/ll5j/5ZeY/+WXmP/k1pf/a5+hP/Wtbz/1bG4/5+D + kPcAAACmAAAAawAAAC4AAAAJAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAADgwND+fO1Nnp19r/1bG4/8qpsP8iISf/wbmv/e3i1P/s4dP/7OHT/+zh0//q39H97OHT/+vg + 0v/t4dL//fbu/f77+f/8+vj/+/r4//n5+P/4+fn9+/z9//v8/P/w8vP/2+Ps/d7l7P/j6Oz/6uvr//Dv + 6//r4tf97eLS//Hj0f/v4tH/7OHR/ezh0//r4dL/TU1N/7ebof3XtLv/1rO6/9azuv+0gY3/toaN/ZNb + YP+WXmP/ll5j/5RcYf2WXmP/ll5j/5ZeY/+WXmP/k1pf/a+Ahf/XtLv/1bG4/52CjfcAAACmAAAAagAA + AC0AAAAJAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEhERBefM + 0bPy5+n/1bG4/9e0uv9DPEL/j4qF/fDl1//s4dP/7OHT/+zh0//q39H97OHT//Dj0v/c2NP/n73f/ebw + +//m7/v/4+37/+Hs+//e7Pr96vL9//H3/v/s9P3/ncb1/ZG99P+UwPP/lcHz/5vE8v+exPD9ZJ7g/4yx + 2//Cy9b/6uDS/fPj0v/06Nf/Z2Vi/5yDiv3YtLv/1rO6/9e0u/+8jJb/t4eP/ZNbYf+WXmP/ll5j/5Rc + Yf2WXmP/ll5j/5ZeY/+WXmP/klpf/bCBh//Xtbz/1bK4/5h/i/YAAAClAAAAZwAAACwAAAAJAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK6bn4b38PL/1bK5/dq2 + vf1yY2j9VlVV/vPn2f3q39H96t/R/erf0f3q39L+8uPR/Z662f0Xd+b9AWzl/niw8f3k7/v93uv6/d7r + +v3e6/r+4O37/e71/f3y9/394O37/pO/8/2Tv/L9k7/y/ZO/8v2Xw/T+YKLv/Qhw5v0Lcuf9I33l/mWe + 3/2/zd39ioV//XpocP7buL/91LG4/da0u/3FmaH9tYSN/pVeY/2UXGH9lFxh/ZVdYv6UXGH9lFxh/ZRc + Yf2UXGH9klpf/rGCif3Xtbz91LG5/pV7iPUAAACjAAAAZgAAACsAAAAIAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHprblj68vT/2LnA/9m1vP+ehYz/Jyks/fDl + 1v/s4dP/7OHT/+zh0//t4dH9w83W/xp45f8Uduf/FXbl/Rd35/+11Pf/5O/8/+Dt/P/e6/r93uv8/+Tv + +//w9/7/9Pj+/cTd+f+Sv/P/lcH0/5XB9P+Vv/L9mMHz/0WT6/8SdeX/FXbn/RJ15/8Rduz/IWOt/2NT + VP3hvsX/1bG4/9azuv/MpKz/sn+J/Ztla/+UXGH/ll5j/5RcYf2WXmP/ll5j/5ZeY/+WXmP/klpf/bKE + iv/Xtbz/1LC4/5B3hPQAAACjAAAAZAAAACoAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAH50div27e//3sLI/9azuv++oKb/ERUZ/d/UyP/s4dP/7OHT/+vg + 0//05dH9fand/w5z5/8XeOf/Fnfl/RJ05v9Dkev/2un6/+Dt/P/e6/r94O38/9/s+//q8/3/8ff8/e/2 + /f+rzvX/kr/z/5XB9P+Tv/L9lcH0/4u68v8mgej/FXbl/Rd45/8VeOn/FmrK/0U9QP3mxMr/1bK5/9az + uv/SrbT/sHqE/aNvc/+UXGH/ll5j/5RcYf2WXmP/ll5j/5ZeY/+WXmP/klpf/bWHi//Xtbz/06+3/4py + gPIAAACiAAAAZAAAACkAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAGRcXgf05+n35c7S/9SxuP/TsLf/FBYd/cK6sP/w49X/6+DS/+vg0//25dH9bqPe/w5z + 5/8XeOf/FXbl/Rd45/8RdOb/grby/+fx/P/e6/r94O38/9/s/P/h7fv/7/b9/fL3/v/i7fv/msP0/5O/ + 9P+Tv/L9lcH0/5fC9P90rvD/EnTm/RV25/8XeOf/FXPd/youOv3mxs3/1bK5/9azuv/Vsrn/rHWC/ap5 + f/+UW2D/ll5j/5RcYf2WXmP/ll5j/5ZeY/+WXmP/klpf/bSIjv/Xtbz/06+3/4NrePEAAACiAAAAZAAA + ACkAAAAHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAD05ObW69ve/9Swt//bt77/LSow/ZuVjv/x5tf/6+DT/+vh0//x49H9nrrZ/w905/8XeOf/FXbl/Rd4 + 5/8VduX/HXrn/8jf+v/h7fv93+38/+Dt/P/e7Pz/5e/7/fH3/v/z+P7/zeH6/5C98/+UwPL9lcH0/5XB + 9P+Zw/T/S5br/RF15f8XeOf/Fnfn/xkqQP3ewMX/17S6/9ayuv/Wtbz/rHWA/bGBh/+TW2D/ll5j/5Rc + Yf2WXmP/ll5j/5ZeY/+WXmP/klhd/beJj//Xtbz/06+3/31ibvAAAACiAAAAYwAAACkAAAAHAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADw3+Km8ebp/9Sw + uP3cuL/9V0tT/m1saP3x5df96t/R/erf0f3r4NH+6t/S/VOV4P0KcOf9FHbm/hR25v0QdOf9B2/n/TWK + 6/3k8Pz+4Oz7/d/s+/3h7Pv93+z6/uzz/f3w9v398vj9/bLS+P2OvfL+k7/z/ZO/8v2VwfL9mMLz/imD + 6P0UduX9F3nq/Q8wVf7HrbD927nB/dSxuP3Xtbz9r3mE/rSGjf2UXWL9lFxh/ZVdYv6UXGH9lFxh/ZRc + Yf2UXWL9klhd/riLkf3XtLv91bG4/oVsd/AAAAChAAAAYgAAACkAAAAHAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADg0tV89ezu/9azu//atbz/f21z/UdH + R//t4dT/7OHT/+zh0//q39H97eHT/+Tc0/+Frtz/Povi/T6K4v9jnd//jrLc/63B1v/v7ev9+vr5//r5 + +P/6+fj/+vn4/fv6+f/8/Pz/+/z9//T5/P+/1vH9qszy/5jC8/+RvvP/lMH0/Xyy8f8aeuf/FXjr/w0/ + df2pkZT/38LI/9SxuP/XtLv/tYON/bWDjP+WX2T/ll1i/5RcYf2WXmP/ll5j/5ZeY/+WXmP/klhd/bmN + k//XtLv/17S7/6CFjfAAAACgAAAAYAAAACcAAAAHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACTiIpW+vP1+ti5v//YtLv/o4mP/SorLf/k2sz/7OHT/+zh + 0//q39H97OHT/+zh0v/x49L/6ODS/eje0v/w4tL/8uTR//Dj0f/t49X9+vj1//37+f/9+/n//Pn3/f37 + +P/+/Pn///79///+/f/++vf99vHr/+vr6//Q3u3/qMrx/ZjD8/9Yne7/Enjq/xBSm/2IcXH/5cvR/9Sx + uP/XtLv/vpCZ/bF+iP+aY2n/lV1i/5RcYf2WXmP/ll5j/5ZeY/+WXmP/klhd/bqOlP/XtLv/17S7/66W + mvAAAACdAAAAXQAAACUAAAAGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAABiWFo2+/T18t2/xf/Ws7r/v6Gn/RkdIf/Uyr//7eLU/+vg0//q39H96+DT/+vg + 0//r4NP/69/R/ezh0//s4dP/6+HT/+zh0//q39H98erg//z6+f/9+/n/+/n3/f37+f/8+vj//v38///+ + /f/+/v39+vXx//fy6v/68ur/9/Hq/dvk7f+myfH/M4rt/xFivv1kUlD/6dPY/9WxuP/Ws7r/xpyk/a13 + gv+eaG3/lFxh/5RcYf2WXmP/ll5j/5ZeY/+WXmP/kVhd/buQlv/Xtbz/2LO6/6uUmu4AAACbAAAAWgAA + ACMAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAD15egW8+rs6OHJzv7Usbj907G4/hocIf27sqb9+enV/ffl0f335tH++ObR/fjm0f335tH99OTR/u7i + 0f3r4NH96t/R/erf0f3q39H+69/R/ffy7P39+/n9+/n3/vv59/37+ff9/Pr4/f79/P3+/Pz+/v37/ffz + 7f318On99vHp/vjy6f358ur9uNLv/Rlz2v5HOjr96dba/dazu/3Ws7r9zqeu/qhvfP2jcHb9lFxh/ZVd + Yv6UXGH9lFxh/ZRcYf2VXWL9kVhd/r2RmP3XtLv917O6/p6LjeoAAACZAAAAWQAAACIAAAAFAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA5tvd0OfV + 2f/Ur7b/37rB/TAsMP9reo3/grDj/1+b4P9NkuH9SI/i/0aP4v9VluD/gqzc/bfH1//k3NP/9OTR/+3h + 0//q39H96+DR/+3k1v/7+fX/+/r4/f37+f/9+/n//Pr4//78+//9/fz9//79//37+P/28ev/9fDp/ffy + 6//38uv//PXr/7rS7v0qKjT/5dHU/9q5v//Wsrr/06+2/aZreP+pd37/lFpf/5RdYv2WXmP/ll5j/5Ze + Y/+WXmP/kVhd/b6Vm//Xtbz/2LS7/417f+YAAACYAAAAVwAAACEAAAAEAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0cXHrO/h4//Trrb/4LvC/VVH + Sf8VRHj/EXnv/xB05/8RdOf9EXTn/xF05/8QdOf/EHTm/RV25v8vhOP/fqrd/9nX1P/y49H97OHT/+vg + 0v/y6uH//fz6/f37+f/9+/n//fv5//z6+P/+/fz9//79//79/P/7+PT/9fDp/ffy6//38uv/9vHq//// + 9v07Oz7/1MDG/93Axv/Vsrn/1rS7/aZsef+vfYT/k1tg/5RcYf2WXmP/ll5j/5ZeY/+WXmP/kVhd/cGX + nf/Wtbz/2ba9/4Brb+IAAACWAAAAVQAAACAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA4NPWg/Ln6f/Ur7b/3bjA/XZjZv8VNVr/Fnrs/xd4 + 5/8WduX9F3jn/xd45/8XeOf/FXbl/RZ45/8Uduf/DnTn/yeA5P+rwNj97+LS/+zh0f/r4NL/+PTw/f37 + +f/9+/n//fv5//36+P/8/Pn9//z8///+/f/+/fz/9/Pu/fbx6v/38uv/9vHq///+9/1UVVb/vKmu/+XM + 0f/UsLj/2ba9/ahwfP+xf4f/lF1i/5RcYf2WXmP/ll5j/5ZeY/+WXmP/kFhd/cKZn//Wtbz/2bS9/4Bt + ceEAAACUAAAAUgAAAB4AAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA3c/SW/Xt7/7Vsrr/2bW8/ZZ/hP8UKD//GHbl/xd45/8VduX9F3jn/xd4 + 5/8XeOf/FXbl/Rd45/8XeOf/F3jn/xR25/8Mceb9gazd//Pk0v/s4NL/7ePX/fz6+P/9+/n//fv5//37 + +f/7+ff9/v37///+/f///v3//fz6/fbx6//38un/9vHq///68v11dnf/n46T/+zZ3f/Ur7b/2Le+/a95 + hP+xfof/mGJm/5RcYf2WXmP/ll5j/5ZeY/+WXmP/kFhd/cSbof/Wtbz/2bW8/4NydeEAAACQAAAATgAA + ABsAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAhX1+O/jw8vHZuL/+1rK5/rOXnv0aIi79F3DV/RV35v0Vdub+FXbl/RV25f0VduX9Fnfl/hV2 + 5f0VduX9FXbl/RV25f0Wd+X+C3Hn/Wig3/3x49L96t/Q/vTs5P38+vn9+/n3/fv59/37+ff+/Pr4/f79 + +/39/Pv9/v79/vv59f328er99fDp/fv17v6hoJ39eWxx/fXk5/3Trrf92La8/reFj/2teIL9nGds/ZRc + Yf6UXGH9lFxh/ZRcYf2VXWL9kFhd/sadpP3Ws7r92LW8/nhrbNwAAACNAAAASgAAABkAAAABAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgXd5I/bu + 7+Hdwcb/1bG5/ciorv8lJSv/FmW+/xV36f8aeuX9Gnnm/xl45v8Sdub/DnPn/RV25/8XeOf/F3jn/xd4 + 5/8VduX9FXbn/xF15v9vo97/9OXR/ezg0//59PH//fv5//37+f/7+ff9/fv5//z8+f/+/fz//vz7/f79 + /P/59fD/9vHp//ny6/3Dw7//W1FX//Pn6v/Ws7r/1rS7/cCSnP+pcH3/om5z/5RcYf2WXmP/ll5j/5Ze + Y/+WXmP/kVhc/cihpv/Ws7z/17O6/l1QVNUAAACJAAAARwAAABcAAAABAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA7NzfDu7i5M3iys//1LG4/day + uv8yLjX/YnqV/8HO3P/L0NX9zNHV/8nP1f+zxNf/c6Te/SR+5f8Sdef/FXbn/xd45/8VduX9F3jn/xV2 + 5/8QdOb/nrnZ/fHi0f/v59r//Pn4//37+f/7+ff9/fv5//z6+P/+/Pv//f38/f/+/f/9/Pr/9/Ls//jx + 6v3i4Nn/SEJH/+zi5f/au8H/1rO6/cadpv+la3j/p3V7/5RcYf2WXmP/ll5j/5ZeY/+WXmP/kVle/cmi + qf/Ws7r/2LS7/lJGSNEAAACGAAAARAAAABUAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANzR07Do1Nj/1LC3/d64v/9JQUf/d3Jr//ns + 2//t4NH97eHS/+3h0v/w49H/9eXR/dXW1f9QlOH/D3Pn/xZ35/8VduX9F3jn/xd45/8Vduf/HXrm/eHb + 0//s4NH/9e/n//37+v/7+ff9/fv5//37+f/8+vj//v38/f7+/f/+/v3/+/n3//Pv6v318er/RUFF/9/U + 1v/gxcv/1LG4/c2nrf+kZ3X/rXyB/5JaX/2WXmP/ll5j/5ZeY/+WXGP/klpf/cqkq//Ws7r/17S7/VNJ + S88AAACCAAAAQAAAABMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAKmdoInv3+P/0q+2/t65wP1qXGP9SkxL/fXq2/3q39H+6t/R/erf + 0f3q39H96t/S/u3h0f3w49L9b6Le/Qtx5v0Wd+X+FXbl/RV25f0Wd+X9CnHn/oWv3P3w49H97OHT/fr3 + 8/38+vj++/n3/f379/39+/f99/n7/vb6/f3y9/z98/j9/b7Y9/6ayP39Pklb/cq6vP3o09f91LG4/tGt + tf2jaHT9sH+H/ZJaX/6UXGH9lFxh/ZRcYf2UXWH9klpe/symrf3Ws7r+07G3/UU/QcgAAAB9AAAAPQAA + ABIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAOHR1F3w5ef/0q20/dy3vv+OeYD/LTAy/+/k1f/r4NL97OHT/+zh0//s4dP/6t/R/ezh + 0//s4dP/8ePS/4St3f8Pc+f9Fnjn/xd45/8XeOf/FHbm/T6M4v/o39L/7ODR/+/m2v/8+/n9/fv5//b3 + +P/l7/v/3ev6/ezz/f/x9/7/8ff+//H2/f2jzv7/R155/6qanf/v4OP/0q+2/dWyuf+mbHf/sX2I/5Rd + Yf2WXmP/ll5j/5ZeY/+UXGH/k1tf/c6or//Ws7r/0a+1/DgwMcMAAAB4AAAAOAAAAA8AAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANnN + 0Djz6Ov906+2/tm0u/+rkJb/ICEm/97Ux//r4NL97OHT/+zh0//s4dP/6t/R/ezh0//s4dP/7OHT//bl + 0f8mf+T9E3bn/xd45/8XeOf/FXbm/R985f/Z19T/7eHT/+rg0P/68ur98/f6/+Dt+//e6/z/3uv6/eLt + +//v9vz/8ff+//L3/v3g7///Wnmc/4h7f//47/H/0661/de1vP+rdH//rXmD/5pjaP2VXWL/ll5j/5Ze + Y/+UXGH/lFtg/dGrsv/Ws7r/0K+1/DgyM8AAAABzAAAANAAAAA0AAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHtycyL16u3p1bS6/tez + uv/Aoqj/ICEl/8jAtP/s4dP97OHT/+zh0//s4dP/6t/R/ezh0//s4dP/6+DT//ro0f81huP9E3bn/xd4 + 5/8XeOf/FXbm/R975f/Z1tT/7OHS//Hj0v+0xtr9yuD6/+Ht/P/g7fz/3uv6/d7r/P/m8P3/8Pf+/+/1 + /P32+///mKvB/2hfZf//+Pr/1LC3/di2vf+zf4n/qHB7/6Brcf2VXWL/ll5j/5ZeY/+UXGH/lV5h/dKt + tP/Ws7r/y6qx+iMjIrcAAABtAAAAMAAAAAsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFNOTxTz6OnQ2rrA/9Wxuf3OrLP9LCkv/bSw + rP3u4tP+6t/R/erf0f3q39H96+DS/urf0f3q39H97OHR/fXk0v0kfeX+FXbn/RV25f0VduX9FXbm/h98 + 5f3Z19T97eHR/ebe0v0TdOX+XaDt/eTv+/3e6/r93+z7/t7r+v3f7Pz97PT9/fH2/f7y9/790tfa/VJN + VP368vT917e9/ta1vP26i5X9omdz/aVzef6UXGH9lFxh/ZRcYf2UXGH9lmBl/tSvtv3Ws7r+yqqw+RcV + FLAAAABnAAAAKwAAAAkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAPHh5Afm2dy24MXK/9SxuP/XtLr/QzxB/46Qkf/48Of96t/Q/+zh + 0//s4dP/6t/R/ezh0//s4dP/7+LR/8rQ1v8Jcef9Fnjn/xd45/8XeOf/FHbm/TyK4//p39L/8ePS/1+b + 3/8Pc+f9EXTm/5vF9P/m8Pz/3uv6/d7r/P/e7Pr/5O/8//L3/f3z+P7/6u7y/0xLUv/p4OL/3sLH/daz + uv/DmKD/n2Bu/6x7gv2UWl//ll5j/5ZeY/+UXGH/mGJn/dWyuf/Wsrn/w6Wr9goLC6cAAABgAAAAJgAA + AAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAADLu76V5c3S/9Wwt//atr7/XlNY/2JlZv////797uXY/+vg0f/s4dP/6t/R/ezh + 0//s4dP/7+LS/1WW4P8Sdef9F3jn/xd45/8XeOf/EHTn/Wug3//z5NL/y9HV/xV25v8VduX9E3bm/y2F + 6f/R4/n/4O37/eXv+//19/r/+/r4//38+/3+/f3//////11cX//Qx8r/5tDV/dWyuf/Koan/nmBt/7B/ + h/2SWV7/ll5j/5ZeY/+UXGH/m2Rp/dayuv/Ws7r/tpqf8QAAAJ4AAABaAAAAIgAAAAYAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AACKfYBw69ba/9Swt//buL//fmxy/zo9QP/////9+PPt/+zi0//s4NP/6t/R/e7h0//w49L/ibDb/xB0 + 5v8VduX9F3jn/xd45/8WeOf/CnHn/bTF1//25dH/gKvd/wxz5/8Wd+X9F3jn/xF05v9ipO7/7PT8/fv5 + +P/9+/j//fv5//36+P3+/fz//////3h4ev+vpKj/7+Di/dSwt//PqbH/oGNv/7KAif2SWl//ll5j/5Ze + Y/+UXGH/nWds/dezu//Ws7r/rJOZ7AAAAJgAAABTAAAAHgAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAC+rbFI6tjc/9Sw + t//atr3/noaM/xsfI/////79/fr3//Tt5f/t4dD/9OTR/d/a0/9tot7/EnXm/xZ45/8VduX9F3jn/xd4 + 5/8Uduf/MYTj/e7h0v/r4NL/RY7i/xN15/8VduX9F3jn/xV25/8Tdeb/4erx/f78+f/9+/n//fv5//v5 + 9/38+vn//////5udnv+JfYL/9uvt/dOwt//Tr7b/o2h1/7F8iP2VXmP/lFxh/5ZeY/+UXGH/oGtx/de0 + u//XtLv/l4KG5QAAAJEAAABLAAAAGgAAAAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADj1tki6dfa/9Wxt/7YtLv9upyj/QwQ + Fv3W4/H+6vD4/e7y9/2zyuL9WZje/hp55f0Pc+f9FXbl/RV25f0Wd+b+FXbl/RZ25f0Mc+f9rMHY/vHj + 0f3Y1tT9Jn7k/RV25v0Wd+b+FXbl/RN25/0sgeT98+fW/vz6+P39+/n9+/n3/fz6+P77+ff9///9/cPD + w/1kW2D9/vn6/tSxt/3Vsrn9qnJ9/at0f/6daW39lFxh/ZRcYf2UXGH9pHF3/ti1vP3YtLv+gHJz2gAA + AIoAAABDAAAAFQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAChmJkM6tfb69ayuf/Ws7r/zKyy/xUUGf+swNP90OX7/87i + +v+92vn/HHvn/RR25/8WeOf/F3jn/xd45/8VduX9F3jn/w5z5/9knt//9eXS/e3h0v/K0NX/G3nm/xZ3 + 5/8VduX9F3jn/xF15/9CjuL/9+TQ/fPs5P/9+vn//fv5//v59/39+/n//vz7/+Dg4P9OR03//////da1 + u//Xs7r/s3+J/6NodP2mdHr/lFxh/5ZeY/+UW2D/qXd8/de1vP/Ztr7/aVtd0AAAAIEAAAA7AAAAEQAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAABWUVIE6tfby9i4vv/Wsbj/1rO6/yonKv+MnrL90uf9/87i+v/T5Pr/mMLz/RJ1 + 5v8Vduf/F3jn/xd45/8VduX9D3Tn/1CU4f/m3tP/7OHR/e3h0v/L0NX/G3nm/xZ35/8VduX9F3jn/xF0 + 5/9EjuL/9+bR/ezg0//59fH//fv5//v59/39+/n//fv5/+/v7/9JR0z/9u/x/du8wv/WtLv/vIyW/5xc + a/2ufoX/lVxg/5ZeY/+TW2D/rX2D/de1vP/XtLv+RTw+xAAAAHcAAAA0AAAADQAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AADEubsB49DUqty9w//Usbj/2bW8/0pARP9re4390+f+/8/j+v/O4/r/1+f6/V2h7f8RdOb/Fnjn/xV2 + 5/8PdOb9XJnf/+Hb0//t4dH/6t/R/e3h0//Q09T/IHzl/xZ35/8VduX9F3jn/xN25/8qgeT/7+LS/ezg + 0f/v5tz//Pr4//v5+f39+/n//fv5//38+v9bXF//1s7Q/eLHzP/Ws7r/xZmi/5hXZf20hIz/lFxh/5Ze + Y/+TW2D/soSK/de1vP/Qr7X7Mi0uuAAAAG0AAAAsAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA3cnNh97C + yP/Usbj92ra9/W1cYv1IVmX+0ub8/c7i+f3N4fj9z+L5/srf+P0xh+n9CW/n/RV35/2Wttr+8OPS/e3h + 0f3q39H96+DS/uvg0f3m3tP9N4jj/RR25v0Wd+b+FXbl/RV25f0QdOb9wsvW/u7i0f3q4ND99e/n/f37 + +v77+ff9+/n3/f///v2AgYP9raWp/ujV2f3Usbj9zKWt/ZhZZv61hI39lV5j/ZRcYf2TW2D9uYyS/ti1 + vP7Iqq/3JyMkrAAAAGIAAAAlAAAABwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAX1RXXeTKzv3Vsrn/2ra9/5J8 + gv8pMzv9zeP2/83h+v/M4fr/zOH5/dHk+v+41fb/i7Hc/+ne0v/z5NH97OHT/+zh0//s4dP/6t/R/ezh + 0//x49L/aqDe/w505/8Wd+X9F3jn/xd45/8Sdef/PIri/fHj0f/s4dH/7OHT//r38/39+/n//fv5///+ + /f+vsLH/enB2/fLj5v/VsLf/0a20/55hbf2xfoj/mmNn/5RcYf+TWl//v5ad/di1vP+3m6DwERAQmwAA + AFUAAAAdAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAinx/O+LHzfnVsrn/2LW8/7KWnP8VGyH93OTs/+bu + +P/m7fj/7fL3/fb19f/9+vb/+fHn/+zg0f/q39H97OHT/+zh0//s4dP/6t/R/evh0//w49H/tsfX/w5y + 5/8VduX9F3jn/xd45/8WeOf/D3Pn/WWe3//n3tP/8ePR/+/m2v39/Pn//fv5//78+//f3t3/U0xR/fPn + 6P/Vsbj/1bK5/6Vsd/2sdID/oGxy/5RcYf+SWl//yKGm/de0u/+giY3mAAAAiwAAAEkAAAAWAAAAAgAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA6t/iGd7Cx/XVs7r/1rO6/8uqsf8MEBX93NnW///8+P/8+fX//Pn0/fz5 + 9v/8+fb/+/j2//Do3f/q39H97OHT/+zh0//s4dP/6t/R/ezh0//s4dP/6+DT/0KM4v8Sdef9F3jn/xd4 + 5/8XeOf/Fnfl/RB05/9Gj+H/tMXY/+bc0P368+v///z5//36+f/3+Pf/RUFH/evZ3f/WtLv/1rS7/655 + hP2lanf/qnh+/5RaX/+UXGH/0Kqx/di1vP+EcnbYAAAAfAAAADwAAAAPAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAyL7AA9u/xOLWtLr/1rO6/9u3vv8UFRr9ubm5//78+v/8+fb/+vf0/fz59v/8+fb//Pn2//r3 + 9P/s4dT969/R/+zh0//s4dP/6t/R/ezh0//s4dP/7+LS/8DL1v8Lceb9FXbn/xd45/8XeOf/FXbl/Rd4 + 5/8Sdef/EXXm/zSG4/1enOL/2uj5/+ry+//p9f//W2Rv/caqr//XtLv/17S7/7mJk/2eYGz/sYKJ/5Nb + X/+aZWj/1rO6/du2vv9eVFbDAAAAbQAAADAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANG5 + vcHXtLz/1LK5/eK8xP0rKS7+kpOU/f/+/P369/T9+/j1/vr39P369/T9+vf0/fz59v328er+6+DR/erf + 0f3q39H96+DS/urf0f3q39H96t/R/ffl0f17qN3+DnPm/RV25f0VduX9Fnfm/hV25f0WduX9FXbl/RR2 + 5v4MceX9Wp7t/ePu+/3k8P/9j6Cs/ot0e/3atr391rO6/cedpv6XV2T9t4iQ/ZRdYf2peH792bi//tW0 + u/woJCSnAAAAXAAAACQAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANa/xJrYtbz/1bG4/+C7 + wv9QRU39aGps///++//8+fb/+vf0/fz59v/8+fb//Pn2//z59v/8+ff98urh/+vf0v/s4dP/6t/R/ezh + 0//s4dP/7OHT/+vh0//y49L9baLe/w905/8Vduf/Fnfl/Rd45/8XeOf/F3jn/xV25f0VeOf/EnTm/5vF + 9P/q9P//nKy5/VdKUP/Ztbz/1rO6/9Kutf2ZWGb/tYKM/5xnbP/FnaT/17S7/sCjqfAUExOQAAAASQAA + ABgAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANvFynPYtbz/1bG4/9u2v/9/bHP9Ki4x/+fm + 5f/9+vf/+vf0/fz59v/8+fX//Pn1//z59f/6+fb9+vj0/+7m2f/r39H/6t/R/ezh0//s4dP/7OHT/+zh + 0//s4dH97OHS/4Wu2/8ZeOf/EXTn/RV45/8XeOf/F3jn/xV35v0XeOf/E3bn/y6F6//W7P//VGBt/V5R + V//Ztbz/1rO6/9i3vv2kaXX/p215/76Smv/Npa7/17S7/pqFidwEBAR1AAAANwAAAA4AAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAHxxc07Ztr351rO6/9e0uv+/n6b9ExYb/4GCg/////z//vv5/f36 + +P/9+vj//vv5//77+f/++/n9//z6//v48//w5tj/8OTW/fHl1v/w5db/8OXX//Hl1//w5Nb98uXW//bo + 1v/Bzdr/R5Hm/Rh56v8Xeer/GHjo/xZ45v0XduT/Gnjj/xh03v8/ZJD/DhIV/aqQlv/Ztbz/1bK5/9i2 + vP23hpD/nF1q/6Fjcf/Dl6H/2ra9/2ddXrkAAABYAAAAJAAAAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAFBHSTTauL7t1LG4/tSxuP3duL/+c2Rq/QcNEf1oaW39ysnK/tfW1v3R0dH9zMzL/cXG + xf29vb7+s7S1/autrv2hn5z9j4uD/oaDff19enX9dXNv/WxrZ/1jYl/+WlpY/VJSUP1MTUj9R0VB/hct + RP0SKUP9Eyc9/REiNP4RHzD9FyIv/RggKf0fHSD9lX6F/tq2vf3Usbj91LG4/dWyuf7Qq7P9nmFv/Zxf + a/3In6f+27i//SAeH4MAAAA+AAAAFQAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPHk + 5hfYuL7g1LG4/9azuv/Usbj93Li//5yEiv9HP0X/MCsx/TQvNP85Mjj/PTU7/0I6QP9HPUP9TEJI/1JI + Tf9aTVX/ZVZc/WxdZP90ZGr/fGlx/4Rwd/+Nd379lH6E/52Ei/+lipH/rZGY/baYn/+8naP/waGo/8em + rP3MqrH/0a61/9WyuP/ct77/27a9/dWzuv/Ws7r/1rO6/9SxuP3Ytrz/qnN+/59hbv/Rq7P/rZec0gAA + AE4AAAAiAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADYwcao2rrB/9Sx + uP/Usbj91rO6/9i1vP/Ztbz/2bS7/di0vf/Ztbz/2bW8/9m1vf/atr392ra9/9q2vf/at77/2ra9/dq2 + vf/Ztr3/2bW8/9q1vP/atbz92ba9/9m2vf/Ztbz/2LW8/di1vP/Ytbz/2LO6/9azuv3Ws7r/1rO6/9ay + uf/Vsbj/1LG4/dSxuP/Usbj/1LG4/9SxuP3Ytrz/toWP/6ZreP/Ytbz7WFFTdgAAACcAAAAODw8PAgAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADp3N9H7Nzg9u3d4f/Ws7n91LC3/9Sw + uP/Usbj/1LG4/dSxuP/Usbj/1LG4/9SxuP/UsLj91LC4/9Swt//UsLf/1LC3/dSwt//UsLf/1bC3/9Sx + uP/Usbj91LC4/9Swuf/Usbn/1bK6/dWyuv/Vs7v/1rS8/9e1vf7ZuL7/2LnA/9q7wf/cvcP/3cDF/t7D + yP/fxcr/4MfM/97CyP7Xtbz/wJKb/7qJkv+/qa23BAUEHgAAAA0AAAADAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD58/UF6NbZj/Xt7//28PL+6NTY/+LKz//gyM3/4MbL/uDG + y//gx8z/4MfN/+LIzf/jy9D+5M3R/+XP1P/m0dX/59XX/+nY2//s297/7N3g/+/g4//w5Of/8efo//Lo + 6f/z6ev/8+vs//Ts7v/37/H++/P1/vjz8//38/T/9/Hz/ffx8/v48/P69vHy+vbv8fr17e/48uns+PLn + 6vbZucD20Kqx8cmus6s6NzghAAAABQAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA9e7wA+TM0HLkz9Ph7+Hk//Hn6v/06uz/9Ors/vLp6/jz6ezy9Ojr7e7h + 5Ovv4+Xr8OXo6/Dl5+Lv5ObV6tzgxufU2MLo19rC6dncwerb3rbq3d+n3sfLmtzDyJjgy8+Z49DUleHS + 1YK5rK5vbV5haOPIzmjkz9Rm6trdV+rb3kjTsblB277FQOLO0j/p2d0z7+bpI9e5vhfYu8AY4czREQAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAADw5ecI7+LkIenZ3CXs3uEl6eDiH+zk5hbp5OUOkIyNCefQ1Ajo19sI7uDjB/Pp + 6wf48/QF8+fpBObR1QTr2t0E8OTmA/Ts7wIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAD///////////8AAAD///////////8AAAD///////////8AAAD/////gAD///8A + AAD///wAAAAD//8AAAD/wAAAAAAAf/8AAAD/AAAAAAAAH/8AAAD+AAAAAAAAA/8AAAD+AAAAAAAAAP8A + AAD+AAAAAAAAAD8AAAD8AAAAAAAAAD8AAAD8AAAAAAAAAB8AAAD8AAAAAAAAAB8AAAD8AAAAAAAAAB8A + AAD8AAAAAAAAAB8AAAD8AAAAAAAAAB8AAAD8AAAAAAAAAB8AAAD+AAAAAAAAAB8AAAD+AAAAAAAAAB8A + AAD+AAAAAAAAAB8AAAD+AAAAAAAAAB8AAAD+AAAAAAAAAB8AAAD/AAAAAAAAAB8AAAD/AAAAAAAAAB8A + AAD/AAAAAAAAAB8AAAD/AAAAAAAAAB8AAAD/gAAAAAAAAB8AAAD/gAAAAAAAAB8AAAD/gAAAAAAAAB8A + AAD/gAAAAAAAAB8AAAD/gAAAAAAAAB8AAAD/gAAAAAAAAB8AAAD/wAAAAAAAAB8AAAD/wAAAAAAAAB8A + AAD/wAAAAAAAAB8AAAD/wAAAAAAAAB8AAAD/wAAAAAAAAB8AAAD/wAAAAAAAAB8AAAD/wAAAAAAAAB8A + AAD/4AAAAAAAAD8AAAD/4AAAAAAAAD8AAAD/4AAAAAAAAD8AAAD/4AAAAAAAAD8AAAD/4AAAAAAAAD8A + AAD/4AAAAAAAAD8AAAD/4AAAAAAAAD8AAAD/8AAAAAAAAD8AAAD/8AAAAAAAAD8AAAD/8AAAAAAAAD8A + AAD/8AAAAAAAAD8AAAD/8AAAAAAAAH8AAAD/8AAAAAAAAH8AAAD/8AAAAAAAAH8AAAD/+AAAAAAAAH8A + AAD/+AAAAAAAAH8AAAD/+AAAAAAAAH8AAAD/+AAAAAAAAP8AAAD/+AAAAAAAAP8AAAD//AAAAAAAAP8A + AAD//AAAAAAAAP8AAAD//AAAAAAAAf8AAAD//AAAAAAAAf8AAAD//AAAAAAAAf8AAAD//AAAAAAAA/8A + AAD//gAAAAAAA/8AAAD//gAAAAAAB/8AAAD//gAAAAAAD/8AAAD//wAAAAAA//8AAAD//8AAD/////8A + AAD///////////8AAAD///////////8AAAD///////////8AAAAoAAAAQAAAAIAAAAABACAAAAAAAABC + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAACAAAAAwAA + AAQAAAAGAAAACAAAAAoAAAAMAAAADgAAABAAAAASAAAAFQAAABYAAAAXAAAAFgAAABQAAAAOAAAACAAA + AAQAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAABAAAAAgAAAAMAAAAEAAAABgAAAAgAAAAKAAAADAAAAA8AAAASAAAAFQAA + ABgAAAAcAAAAHwAAACMAAAAnAAAALAAAADAAAAA1AAAAOQAAAD4AAABCAAAARwAAAEwAAABPAAAAUAAA + AE4AAABKAAAAPgAAAC8AAAAjAAAAHAAAABcAAAAQAAAACAAAAAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAQAAAAKAAAAEAAAABQAAAAXAAAAGwAAAB4AAAAiAAAAJwAAACsAAAAwAAAANgAA + ADsAAABAAAAARgAAAE0AAABTAAAAWQAAAF8AAABlAAAAawAAAHMAAAB5AAAAfwAAAIUAAACKAAAAjwAA + AJQAAACYAAAAmgAAAJsAAACaAAAAlQAAAIcAAAB0AAAAYwAAAFkAAABPAAAAQQAAADAAAAAgAAAAEgAA + AAgAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAAAAZAAAAMAAAAEIAAABLAAAAUQAAAFcAAABdAAAAYwAA + AGwAAAByAAAAeQAAAIAAAACGAAAAjQAAAJMAAACYAAAAnQAAAKIAAACnAAAAqwAAALAAAACzAAAAtgAA + ALkAAQC+AQICwRQVFcYnJSbOJiMjzycjJdAnIiPQFRUVzQAAAMQAAAC+AAAAswAAAKkAAACiAAAAmgAA + AIsAAAB3AAAAXQAAAEUAAAAtAAAAGgAAAAwAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAAAAXAAAAQQAAAHAAAACMAAAAlwAA + AJwAAACgAAAApQAAAKoAAACvAAAAswAAALYAAAC6BgYHwRAREMUsKCnONDAw0k5GR9lRREfda1hb5HBZ + XuiLbXTvj2518KmDi/ipf4j5uYyV/bmHkP65hJD/tn6J/7F4hP+scHv/qWx3/61yf/+fc3v4SkBC4U9F + R99DPD7bFRQU0QAAAMcAAADAAAAAtQAAAKMAAACMAAAAcAAAAFIAAAA3AAAAIQAAABEAAAAHAAAAAQAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJAAAALAoL + C3EODQ6pKCcoyS4nKdFEPD7XSTo+3F9KT+JmS0/nhGNq74ZgaPCid4D4pHV/+rR/i/61fon/tYCK/7eA + jP+7hZH/voyW/8KUnf/HmqP/yqCo/86mrv/QqrL/0661/9WxuP/Wsrn/1rS6/9a0u//Ws7r/07C3/86o + sP/Blp//omZ0/6NicP/hwcb/0ay1/7aTof+YfIn3alpg6ionKNgAAADKAAAAwAAAAK8AAACYAAAAfQAA + AF8AAABCAAAAKAAAABIAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAADZF4fKK2go38t4ON/8CNmP/BkZv/w5Oc/8SWoP/HmqL/yp+o/82krf/Rq7L/1K+2/9ay + uf/Xtbz/2Le+/9i3vv/Yt73/2LW8/9azuv/Ws7r/1rG4/9SxuP/Ur7f/1K+2/9Ottv/SrbX/0661/9Ov + tv/Tr7b/06+2/9Outv/Ws7r/17S7/9e2vf+fYnD/vY+Z/9e0u//Ytbz/1rO6/7iUof+lgZL/jXOA9lNJ + S+MEBQTQAAAAxgAAALcAAACjAAAAiQAAAGUAAAA6AAAAFgAAAAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAFxVV0XWrrb/0q21/9i3vv/Ytbz/1rS7/9azuv/Ws7r/1rG6/9Sx + uP/Ur7f/1K+2/9Kttv/SrbX/06+2/9Svt//WtLr/2Li+/9u+w//fxMn/5cvQ/+jT1//v3OD/8uPm//Xp + 7P/47/H//PT1//75+v///f3////////////06uv/2bnA/9SxuP/WtLv/x56l/6duev/Xtrv/2bi//9a0 + u//XtLv/27i+/8qnsf+mgpP/l3eJ/GVUXOsgHx7XAAAAywAAAL0AAACgAAAAbQAAADEAAAAMAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAqa2P1rK5/9azuv/Vsrn/17W8/9q6 + wP/ewcf/4sjN/+fS1v/t297/8ePm//Xp6//58PL//ff5///+/v////////3+//fy8//o4eP/1tDS/8G7 + vf+sqKv/mpSY/4V/hP90bnP/ZmFl/1xYXP9XUVb/UEpO/0hAR/9wYWj/5dXY///////Wsrn/1rO6/9Ow + t/+mbHj/oGxw/6Rxdv/FnKH/2La8/9i2vf/WtLr/2ba8/9m2vf+7l6P/oH6P/oJqd/Q6NDXeAAAAwgAA + AJIAAABMAAAAFgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA28TIq9ay + uf/Ws7r/1LC3/+TM0f/88vP/5dve/9LJzP+/trv/q6Gm/5OHjf95b3T/Z15j/1dQVf9RS0//Uk5S/1hW + Wf9fXV7/bWxs/4GAfv+XlpT/rayo/7q0rP/Lw7f/2s/D/+Xbzf/s4NP/7+XW//Lm2P/n3c//nZeQ/w4P + FP/e1Nf/6dTY/9Swt//Zt73/qXB8/6Jvdv9kLlL/dTxU/41WYf+yhIn/0Kuw/9q5v//WtLv/17S6/9q3 + vv/Vsbn/k2+E/zYxM9gAAACjAAAAWgAAAB0AAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAN/Gy7DVsrn/1rO6/9azuv/Zs7r/KSUr/zc3OP91cW3/h4R9/52Xj/+4s6r/1tjY/+7t + 7P/7+/j////////////////////////58v/99/D/+vXu//r07f/38uv/7OHS/+zh0//s4dP/7OHT/+zh + 0//s4dP/7OHT//Tp2v+jnpX/YlZd/+3Y2//UsLf/2Le+/654g/+reoL/ZS5S/2cxVP9mMFP/ZzFS/3U9 + VP+YZG//xZug/9m3vv/Ws7r/1rO6/8qmsP93YW/xAAAApwAAAF8AAAAfAAAAAgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADewsmY1LG4/9azuv/Ytbz/knyD/xUaHf/67t//8ufY//Hk + 1v/v49X/7OHS//nz7f/+/Pr//fv5//z6+P/8+vj//v38///+/f/59vL/9vDp//fy6//38uv/9/Lr//Lr + 4v/q39D/7OHT/+zh0//s4dP/7OHT/+zh0//s4dP/3dPG/0A5QP/fucD/1bK5/9e1vP+2hI//tIWL/2cw + Uf9oMlX/aDJV/2gyVP9nMVT/ZS9S/2gxUf+MV2X/yqKp/9azuv/Ztrz/lXmI+QAAAKYAAABfAAAAHwAA + AAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAn5CTataxuP/Vsrn/3Li//2VZ + X/9aWVf/9+vc/+vg0v/r4dP/7OHT/+zh0v/s4NL/+/r4//37+f/9+/n//fv5//z6+P///vz//v38//fz + 7P/28er/9/Lr//fy6//38uz/7uXZ/+vf0f/s4dP/7OHT/+zh0//s4dP/7OHT/+/l1v8wLjP/4LvC/9Wy + uf/WtLv/wJOd/7iIjv9xOlT/aDNV/2o0Vf9qNFX/ajRV/2o0Vf9sNlX/cTpX/5JaX//WtLv/2re+/5p+ + jPkAAACmAAAAXwAAAB8AAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGxi + ZDHfv8f/1rS7/9y4v/9iVVv/bWto//To2v/r4NL/7OHT/+zh0//s4dP/69/R//Do3v/9/Pr//fv5//37 + +f/8+vj//vv5///+/f/9/Pr/9vHp//by6//28ev/9/Lr//by6v/r4dL/7OHT/+zh0//s4dP/7OHT/+vg + 0v/47d3/MjM2/9i0vP/Ws7r/1rO6/8qhqv+1hI3/k1tf/5ZeYv+XX2P/l19j/5dfY/+XX2P/l19j/5hg + Y/+UXGD/1rO6/9u4vv+dgo74AAAApQAAAF8AAAAfAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAArKSoC6NDV9uDFyv/atr3/gG1z/1dXVf/36tz/6+DS/+zh0//s4dP/7OHT/+zh + 0//q3tD/+PPu//37+f/9+/n//fv5//37+P/+/fz///79//v49f/58un/+vTq//rz6v/48+v/9e7k/+zf + 0P/s4dP/6+DT/+vg0//r4NL/9+zc/0pLSv/Gpaz/1rO6/9azuv/SrbT/sn+K/5ZgZf+VXWL/ll5j/5Ze + Y/+WXmP/ll5j/5ZeY/+VXWL/lVxh/9a0u//at77/oYSR+AAAAKUAAABeAAAAHgAAAAIAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOnP08Xq2dz/1bG4/7GVm/8pLC7/+e7e/+vg + 0v/s4dP/7OHT/+zh0//r4dP/7eHS//fm0/////j/+vn4//f4+P/z9vn/7/T6//f6/f/4+/3/zN/y/7zT + 7//C1+7/zdzv/9vk7v/e393/6d/R//nn0f/05NH/7eHS//Ln2f9vbmr/p4yU/9e0u//Ws7r/1rS7/7F7 + hv+eam//lV1i/5ZeY/+WXmP/ll5j/5ZeY/+WXmP/lV1i/5VdYv/XtLv/27i+/5yAjfgAAACkAAAAXAAA + AB4AAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADo0daR8+jq/9Su + tv/Ws7r/EBMZ/+rf0v/s4dP/7OHT/+zh0//r4dP/7+LR/9bW1f9QlN//bKft/+jy/P/d6/z/3uv8/93r + /P/n8f3/8ff+/+rz/f+QvfP/kb70/5C+9P+PvfT/jr71/x176P81h+P/dqfe/8XO1v/66NT/opmP/4Bs + dP/atbz/1bK5/9i3vv+veYX/qHZ7/5VdYv+WXmP/ll5j/5ZeY/+WXmP/ll5j/5VdYv+WXmP/17W8/9u4 + vv+ZfYv3AAAAogAAAFoAAAAdAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAaFpeX/v09f/TrrX/4bzD/yQjKP/EvLL/7eLU/+zh0//s4dP/7OHS/9rY1P8Ncuf/EnXn/wlv + 5v+51vf/4u78/+Dt/P/g7fz/3+z7/+71/f/y+P7/0uX6/4+98/+VwfT/lcH0/5bB9P+CtvH/DXPm/xF1 + 5/8IcOf/JH/m/2WOu/9iUlX/3rvC/9Wyuf/Yt73/sXyI/7CAhv+TW2D/ll5j/5ZeY/+WXmP/ll5j/5Ze + Y/+VXWL/l19k/9e1vP/cuL7/lHmH9gAAAKEAAABZAAAAHAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAG5kZjL68/T/1rO6/9+6wf9RSE7/j4qE//Dl1//r4NL/6+DT//Xl + 0f9jnd//EnXn/xd45/8Ud+b/J4Hp/+jx/P/g7fz/4O38/9/s/P/i7vv/8ff+//b5/v+w0fb/kr7z/5XB + 9P+UwPT/msT0/1ed7P8Pc+X/F3jn/xZ35/8TdOL/SDw+/+TCyP/Vsrn/17S7/7aFj/+1ho3/klpf/5Ze + Y/+WXmP/ll5j/5ZeY/+WXmP/lV1i/5hgZf/Ytr3/3Le+/450gfQAAACgAAAAWAAAABsAAAABAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABkW10K9+zu/Ny+xf/atr3/gW10/1pZ + V//26tv/6+DS/+vg0//559H/QI3i/xV35/8XeOf/F3jn/w5y5f91r/H/6fL8/9/s/P/g7fz/3uv7/+nz + /f/x9/7/8ff9/5fB9P+UwPP/lcH0/5TA9P+cxPT/K4Po/xR25v8XeOb/F3vw/youOv/nxs3/1LG4/9a0 + u/+/kZv/t4aP/5JZXf+WXmP/ll5j/5ZeY/+WXmP/ll5j/5VdYv+YYmb/2La9/9u4vv+HbXvzAAAAoAAA + AFgAAAAbAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPbo + 693kzdH/17O6/6uQl/8sLjD/+e3d/+vg0v/r4NP/9OTR/3Kk3v8OdOf/F3jn/xd45/8XeOf/DHHl/8fe + +P/h7fz/3+z8/9/t/P/e7Pv/7/b9//L3/v/c6/v/j73z/5XB9P+VwfT/lcH0/4y98v8SdOb/F3fm/xZ9 + 8v8ZLUf/4MPH/9SxuP/Ws7r/yJ+n/7OBi/+TW2D/ll5j/5ZeY/+WXmP/ll5j/5ZeY/+VXWL/mWNo/9i3 + vv/buL//f2Rx8gAAAKAAAABXAAAAGwAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAADy4eWv7N3f/9SwuP/LqrH/DxUZ//Hm2P/s4dP/7OHT/+zh0//o39L/H3vm/w1z + 5/8Tduf/EHTn/wdw5/8ogur/5fD9/9/t/P/g7fv/4e37/+Tw/P/y9v7/9Pn+/7nX9/+NvPP/ksD0/5TA + 9P+YwvT/Z6bv/w5y5f8Ve+//EDZh/82ytv/Xtbv/1rO6/9Cqsv+veoT/mWNo/5VdYv+WXmP/ll5j/5Ze + Y/+WXmP/lV1i/5pkaf/Yt77/3Li+/4ltevIAAACfAAAAVgAAABsAAAABAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA3M3Qg/Po6v/TrrX/3rnA/xIUGv/YzsL/7eLT/+zh + 0//s4dP/7eHS/+vg0/+Aq93/VJbg/3qp3f+xw9j/0dLT//Lv6P/+/Pn//vv4//77+P/9+/j//v36//39 + /f/8/f3/0+Dw/7TR8f+XwfP/jr30/5zF9P85i+r/FHfr/w5Ih/+tlZf/3LzC/9Wyuf/Vsrn/qnF+/6Bt + cv+VXWL/ll5j/5ZeY/+WXmP/ll5j/5VdYv+bZWv/2be+/9e0u/+rj5fyAAAAnQAAAFQAAAAZAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIF1d1f89vf/0661/+K8 + w/8tKjD/s6yj/+7j1f/s4dP/7OHT/+zh0//s4dP/8uTR//fm0f/y5NH/7uLS/+3h0v/r39H/+/j1//37 + +f/9+/n//fv5//z6+P/+/fz///79//78+v/78+n/+vPq/9/m7P+szPH/jr30/xd56P8SXbD/iHFx/+TJ + z//Vsrn/17a9/6Ztev+peH3/lV1i/5ZeY/+WXmP/ll5j/5ZeY/+VXWL/nWZs/9m4v//XtLv/tJqf8QAA + AJoAAABQAAAAFwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AACtnqEt/Pf4/9Swt//eusH/VUtS/4aDff/x5tf/7eHS/+7i0v/u4tL/7uLS/+3h0v/s4dP/6+DT/+zh + 0//s4dP/6+DR/+/n2//9/Pr//fv5//37+f/9+vj//Pv5///+/f///v3/+vj0//bw6f/48ur//fXq/+nr + 7P99s/H/DGfP/2FOTv/u1tv/1LC3/9i3vv+ob3z/sICF/5NbYP+WXmP/ll5j/5ZeY/+WXmP/lV1i/55o + bf/ZuL//17S7/6yVme8AAACYAAAATQAAABUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA5tbZCPfv8fzYuL//2ra9/4Fvdf9YV1T/7ebc/8jP1v+2xtf/scTY/7DE + 2P/Q09X/7uLS//jm0f/u4tL/6+DT/+zh0//q3tD/9/Hr//37+f/9+/n//fv5//z6+P/+/fz///79///+ + /f/38+7/9vHq//bx6//38ur///fr/2aj6P84Mzn/9eHl/9Ovtv/Ytr3/r3mE/7OCiv+SWl//ll5j/5Ze + Y/+WXmP/ll5j/5VdYv+fam//2bi//9i0u/+eiIzrAAAAlwAAAEwAAAAVAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD06+3f3sPI/9ezu/+qjpX/ECM3/xB6 + 9P8JcOf/CnHn/wpx5/8Kcef/CHDn/xV35v9NkuH/tcXX//nm0P/t4dL/6+DT/+zg0v/9+vj//fv5//37 + +f/9+/n//Pr4///9/P///v3//vz8//bx6f/38uv/9/Lr//bx6v////T/MTA2//Th5f/Tr7b/17S7/7mH + kf+zgYr/klld/5ZeY/+WXmP/ll5j/5ZeY/+VXWL/oGxx/9q4v//Ztbz/jXd75wAAAJUAAABKAAAAFAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA7uTmtebQ + 1f/Wsbj/yKet/w4WH/8YfPD/F3jm/xd45/8XeOf/F3jn/xd45/8Wd+f/E3Xn/whw5/82h+P/1NXV//Lk + 0f/r39H/8One//38+v/9+/n//fv5//36+P/8+/n///79///+/f/8+fb/9vDp//fy6//28er////4/0VG + SP/l09f/17a8/9a0uv/DlaD/r3uF/5VdYv+VXWL/ll5j/5ZeY/+WXmP/lV1i/6Juc//at7//2bS8/4t2 + euYAAACSAAAARwAAABIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAODT1ort3uL/1LC3/9q3vf8ZGBf/GHXf/xZ45/8XeOf/F3jn/xd45/8XeOf/F3jn/xd4 + 5/8XeOf/FHbn/wtx5/+rwNj/9eXR/+ne0P/48+///fv5//37+f/9+/n//Pr4//79/P///v3///79//j0 + 7//28en/9vHq///68/9naGj/yba7/97ByP/Ws7r/yqOr/6pxfP+bZmv/lV1i/5ZeY/+WXmP/ll5j/5Vd + Yv+jcXb/2re+/9e0u/+Oe33lAAAAjgAAAEMAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACJfoBe9uzt/9Outf/iu8T/Mioo/xdmwf8WeOj/Fnfn/xZ3 + 5/8Wd+f/F3jn/xd45/8XeOf/F3jn/xd45/8XeOf/CHDo/6G82f/15dH/6+HT//z7+f/9+/n//fv5//37 + +f/8+vj///78///+/f/+/f3/9vHq//by6//79e7/lJSR/52Lkv/p1Nf/1bG5/9Kttf+jZ3T/pHB2/5Vd + Yv+WXmP/ll5j/5ZeY/+VXWL/pXN5/9q3vv/YtLv/g3N24QAAAIoAAAA/AAAADgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAo5aYM/jx8v/TrrX/37rB/1NF + R/8VUpj/F3rr/yV+5f8kfuX/IHzl/wxy5/8Pc+f/Fnjn/xd45/8XeOf/F3jn/xd45/8Icej/sMPY//Hi + 0P/y6uH//fv6//37+f/9+/n//Pr4//77+////v3///79//36+P/28en/+fTt/7/AvP9tYGb/8uTo/9Ov + tv/XtLr/n2Jv/6x7gP+UW2D/ll5j/5ZeY/+WXmP/lVxh/6d2e//Yt77/2bW8/2RXWtgAAACGAAAAOwAA + AA0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOLS + 1A737/D/1LC3/9q3vv93Zmz/Vlpf//nr2//35tD/9+bR//Xl0v/e2tT/ha3d/xF05/8Uduf/F3jn/xd4 + 5/8XeOf/Fnfn/w9z5//e2tT/6uDP//n28f/9+/n//fv5//37+f/8+vj//v38///+/f///v3/+vbx//jz + 6v/p5N3/ST5F//v09v/TrrX/2be+/6Fkcv+xgYj/k1pf/5ZeY/+WXmP/ll5j/5VcYf+reX//2Le+/9m1 + vf9gUlXVAAAAggAAADgAAAALAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA9u3v5Ni3vv/YtLv/noeN/zM1N//67d7/6+DS/+vg0//s4dP/7OHS//Tk + 0f/e2dP/I37l/xJ15/8XeOf/F3jn/xd45/8Sdef/VJbg//fm0f/t49b//Pv6//37+f/9+/n//fv5//37 + +P/+/v3//Pz8//z9/f/X4+//0uP1/zYxOP//+Pn/06+2/9i3vv+ob3v/s4KK/5JaXv+WXmP/ll5j/5Ze + Y/+VW2D/rX2D/9i2vf/ZtLv/XFJV0QAAAH0AAAA0AAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAO7i5Lzdwcf/1rO6/8ChqP8TGBz/9Ona/+zh + 0//s4dP/7OHT/+zh0//r4NP/7eHS/+3h0v8zheP/EnXn/xd45/8XeOf/Fnjn/w5z6P/n3tP/69/Q//Ts + 5P/9+/r//fv5//z6+P/r8vn/6fL9/+/3/v/w9/7/3+38/5LG//8vNkT/9urt/9i3vf/Ytbz/sn2J/7F9 + h/+TW2D/ll5j/5ZeY/+WXmP/k1tg/69/hf/Ytr3/2rW8/0Q9P8gAAAB4AAAAMAAAAAgAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADi1tiS5M3S/9Wy + uf/WtLv/CxAV/+LYy//s4dP/7OHT/+zh0//s4dP/7OHT/+zh0//s4dL/7+LS/xl55v8Wd+f/F3jn/xd4 + 5/8Kcef/qsDY/+7i0v/r39D//Pnz//f4+f/f7Pv/3uv8/9/s+//v9v3/8ff+//T4/v/L5P//Mklk/9zP + 0f/fxMn/1rO6/7yNl/+sdID/mWJn/5VdYv+WXmP/ll5j/5NbYP+yhIr/17a9/9q2vv9COzzFAAAAcgAA + ACwAAAAGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAmI2PZezb3//TsLf/4LzD/xobIf/FvbH/7eLU/+zh0//s4dP/7OHT/+zh0//s4dP/6+DT//ro + 0f8whOT/FXfn/xd45/8XeOf/DHHn/6O92f/v4tL/7+HS/8/U3P/g7f3/4O38/+Dt/P/f7Pz/4+77//H3 + /v/w9v7/+f7//152kP+2qKr/6dba/9SxuP/Fm6P/o2h1/6Ftcv+VXWL/ll5j/5ZeY/+TW2D/tomP/9e0 + u//bt77/Ly4uvAAAAGwAAAAnAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAF5WWD7z4+b/0662/+G8w/87NDr/qaai/+7j0//s4dP/7OHT/+zh + 0//s4dP/7OHT/+vh0//25dL/IXzl/xZ35/8XeOf/F3jn/wpx5/+kvdj/7+LS/+vg0v8Qc+X/h7ny/+fw + /P/f7Pz/4O38/97s+//r8/3/8ff+//P5//+zur//gnV6//Pn6P/Ur7b/zqev/5xea/+pdn3/lV1i/5Ze + Y/+WXmP/k1le/7qNlP/XtLv/3brA/xoXGLMAAABlAAAAIwAAAAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADo2t0Y7+Hk/9Kttv/cuL//ZFZb/3+B + gv/58Of/6t/R/+zh0//s4dP/7OHT/+zh0//t4dL/ztLV/wpx5/8XeOf/F3jn/xd45/8IcOf/0NPV//jn + 0f9lnt//EHTn/w9z5f/T5fr/4O38/9/t/P/d6/z/4u76//P4/f/0+P//3uPn/1dNUv/79PX/0661/9Sx + uP+ZWmf/rn6F/5NbYP+WXmP/ll5j/5JZXv+9kpf/17S7/9m3v/4MDAypAAAAXQAAAB4AAAACAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPDh + 5O/Vr7f/2LW8/4x2fv9OUVP//////+3i1P/r4NL/7OHT/+zh0//r4NP/++nQ/0WP4f8Tdef/F3jn/xd4 + 5/8Wd+f/G3rl//Pj0v/i3NP/DXLm/xd45/8Tdeb/QpHr/+vz/f/g7fv/9/f5//77+P/+/Pn///79//// + //8+OD3//////9Outv/Ytbz/nl9s/7GAiP+SWl//ll5j/5ZeY/+SWV7/wJad/9e0u//Us7n8AAAAnwAA + AFYAAAAaAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAADv3+PN17a8/9e0u/+vlJr/Jiot///////59vD/69/R/+zh0//u4tL/+ujQ/22i + 3/8Ncuf/F3jn/xd45/8XeOf/EXXn/2af3//659H/kbTa/w1z5/8XeOf/F3jn/wtw5f+VwvT//vz5//37 + +P/9+/n//Pr4//79/P//////QD9D//32+P/Xtb3/2Le+/6Vqdv+xfof/k1tg/5ZeY/+WXmP/kVhd/8Sc + ov/XtLv/wqWs9QAAAJgAAABOAAAAFgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA5NTYptu+xP/Ws7r/y6qx/w0TGP/8+/n//vr3//fv + 5v/q39H/tsbX/zaG4/8Oc+f/F3jn/xd45/8XeOf/F3jn/wty6P/b2NT/+ObR/1GT4f8Uduf/F3jn/xd4 + 5/8Sdef/aaDf///+9//9+/n//fv5//37+f/8+vj//////11dYP/h2Nr/3sHH/9i2vP+ueIP/rHaC/5hh + Zf+VXWL/ll5j/5FYXP/Joqn/2LS8/7WcoPAAAACQAAAARgAAABEAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANLBxHzhx8z/1bK5/9y4 + v/8RExf/vdHn/9Hk+v/Z6fv/PI7r/wdu5/8Ud+f/F3jn/xd45/8XeOf/F3jn/wty5/9/qt3/9OTR//bl + 0f8nf+T/FXfn/xd45/8XeOf/C3Hn/6S82f/06d3//fz6//37+f/9+/n//Pr4//////+Ljo//ubG0/+fS + 1v/Ws7r/uYmT/6VqeP+gbHH/lV1i/5ZeY/+RV1z/zaiu/9m1vf+Vf4PlAAAAiAAAAD0AAAANAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AABeVFZU58/U/9Wwt//ivcT/KCQo/5+zxf/Q5fz/z+P6/8vh+f8Vdub/Fnfn/xd45/8XeOf/F3jn/w5z + 5/9KkeH/+ObS/+vg0//25tL/Jn/l/xZ35/8XeOf/F3jn/wpx5/+xxNj/7ODP//jz7//9+/n//fv5//37 + +f///fv/vL+//4V8gP/x4eX/1LG4/8SZov+cXmz/qnl9/5VdYP+WXmP/klle/9Gssv/Ztbz/eWls2gAA + AH0AAAA0AAAACQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAppqcK+XP1P/Ur7b/37rB/01CRv97jZ//0+f9/87i+v/T5Pr/nsb0/wpw + 5f8XeOf/Fnfn/wlx5/9Rk+D/9eTR/+rh0//r4NP/9+XR/yh/5P8Vd+f/F3jn/xd45/8Nc+f/lrba//Di + 0v/s4dP//Pv5//37+f/9+/n//fv5/+vq6v9VTlP/+O7v/9Svtv/Npq7/mVdk/7CCiP+TWmD/ll5j/5Na + X//Usbj/2rW8/1tRU8wAAAByAAAALAAAAAYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOXW2AjjzNL+1K+2/9q3vv92ZGr/U2Jz/9fr + ///O4vn/zuL6/9np+v9eoe3/B3Dn/xJ15/+Stdr/+OfQ/+rh0//s4dP/6+DT//fm0f9TleH/E3Xn/xd4 + 5/8XeOf/E3fn/0OO4v/76NH/6t/R//Lq4f/9+/r//fv5//37+P//////Pjo////6+v/TrrX/1LG4/5lY + Zv+1hY3/klld/5VdYv+WXmP/17S7/9q2vv9EPj+9AAAAZQAAACQAAAADAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA5tDU4dWx + uf/YtLv/nISK/y86Q//X7v//zOH6/8vh+v/N4vr/1uf6/4ix3//p3tL/8uTR/+vg0//s4dP/7OHT/+vh + 0//w4tL/lrba/wxz5/8XeOf/F3jn/xd45/8Kcef/s8XY//Pk0f/p39D/+fbx//37+f/8+vj//////0hH + TP/37vD/1LC4/9i2vf+gYm//s4CK/5RcYP+VXWL/mmVq/9m3vv/cub//HhwdqgAAAFcAAAAbAAAAAQAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAOLLz7rXtbz/17O6/72epf8WHCD/+P3//+7y9v/x8/b/+ff1//769v/++fH/69/Q/+vh + 0//s4dP/7OHT/+zh0//s4dP/7OHS/+Xd0/8Oc+f/F3jn/xd45/8XeOf/Fnjn/xB05/+9yNf/+efQ/+7j + 1f/9+/r//fv4//////94eXr/zsTH/9m3vf/Yt77/qHF8/612g/+bZWr/lVxh/6JudP/ZuL//1LS6/AAA + AJQAAABJAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADbx8uS2bi+/9azuv/Usbf/Cg8T//Ty8P/9+fb//Pn1//z5 + 9v/8+fb//Pn2//Xu5//q39D/7OHT/+zh0//s4dP/7OHT/+vg0//25dH/b6Le/w905/8XeOf/F3jn/xd4 + 5/8Wd+f/C3Ln/12a4P/Ey9X/8+zl///9+f/9/Pv/sbi8/4+Bhv/ewMb/17W8/7WCjf+laXX/pXR4/5Na + X/+ufYP/2re+/7idpO4AAACEAAAAOwAAAA0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAjH1/Zty7wv/Vsrn/37vC/xYW + HP/S0tH//fr3//z59v/8+fb//Pn2//z59v/8+vf/7+ba/+vf0f/s4dP/7OHT/+zh0//s4dP/7OHT/+/i + 0f8fe+b/FXfn/xd45/8XeOf/F3jn/xd45/8Tdef/CXHn/wtw5f/I3/n/4Oz8/93t/P9WTFT/37nA/9a0 + uv/Cl6D/m1xp/7KDiP+RVlv/vpWZ/9m1vv+Jd3raAAAAcQAAACwAAAAHAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAF5W + Vz7cu8L/1bG4/+G8w/80LzX/rKys///8+f/8+fb//Pn2//z59v/8+fb//Pn2//v49P/s4NP/7OHS/+zh + 0//s4dP/7OHT/+zh0//t4dL/0tTV/w905/8Wd+f/F3jn/xd45/8XeOf/F3jn/xd45/8Udeb/NIjo/+vy + /f/r+v//NjxH/9y3vv/Ws7r/0Kmx/5dVY/+5jJT/j1RZ/9Ovtv/atb3/VEtNvgAAAF0AAAAfAAAAAwAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAADs3N8X2Le+/9WxuP/duL//YVRa/2BhY///////+/j1//z59v/8+fb//Pn2//z5 + 9v/8+fb/9/Lt/+re0P/s4dP/7OHT/+vg0v/r4NL/6+DT//Di0f/P09T/Gnjm/xB05/8Xd+b/F3fm/xd3 + 5v8Xd+b/F3jm/wxw5f+IuvL/6/j//xAXH//Vsbj/1rO6/9e2vP+eYW3/toWP/7mMk//Xtbz/3Li//yMi + I5kAAABGAAAAEwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANm4wO/Vsrn/17S7/66Tmf8ABQr/5OTj///+ + +//9+vf//fr3//369//++vf//vv4///8+f/07eT/7uPT/+/k1f/w5df/8ebX//Hm1//z59n/9+ra//bq + 2v9npOn/FHvy/xV88v8VffL/Fn30/xZ+9P8YfvP/G37v/0xXYv84Mjf/37rB/9Wyuf/Ytr3/r3uG/51d + a/+ma3j/17S6/8mus/IAAAByAAAALwAAAAkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADdv8XM1bK5/9Wy + uf/fu8L/SkNI/xIYHP+tra7/3dzc/9nY2P/T1NL/zM3N/8XFxf+6u7z/tba3/6Gdlf+WkYv/jIiC/4N/ + ev94dnH/b21p/2VkYP9aWlj/XFdP/zE+S/8SL0//FSxH/xImPP8RIjX/GCY0/xYbIf85Mzf/0bC3/9az + uv/Ws7r/1rO6/8+osP+aWmj/oWVy/9u6v/+Ec3fGAAAATwAAABsAAAADAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAA3sTJo9Swt//Ws7r/1LK5/925wP+DcHb/PjY9/zs0Ov9BOT//Rz1E/0tCSP9RRk3/WEtR/2BS + WP9qW2L/c2Np/3xpcf+EcHj/jXh//5Z/hf+ehoz/po2T/6+Smv+3mqH/wKCl/8Skqf/Kqa7/z6yz/9Ox + t//WtLv/37rB/9azuv/Ws7r/1rO6/9azuv/Yt77/oWVx/6t0f//fvcT/NTIzeAAAACwAAAALAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAANfMz0vdv8X/1LG4/9Wyuf/Ws7r/2ra9/+G8w//hvMP/4bzD/9+6 + wf/fusH/3rrB/965wP/cucD/27e+/9u3vv/at77/2bW8/9i1vP/Ytbz/2LS7/9e0u//XtLv/17O6/9az + uv/Ws7r/1rK5/9ayuf/Vsrn/1bC3/9Owt//UsLf/1LC3/9Out//TsLf/2Le+/6x1gP+8i5b/w62xygAA + ACwAAAARAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA5dDU1/r4+P/bvcP/0620/9Kt + tf/SrbX/0621/9Ottf/SrbX/0q21/9Kttf/TrrX/0661/9Outf/TrrX/06+2/9Swt//Usbj/1bK5/9a0 + u//Xtb3/2bm//9q7wf/cvsX/3sLH/9/Fy//hyc7/5M7S/+bR1v/q19r/7Nve/+3f4f/v4eT/7d3h/9i3 + vv+4hpD/3Li+9Tg0NTQAAAAMAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPTs + 7R7m0NTm+vb3//n19v/27e//9Ozu//Pr7P/06+z/9+7w//bu7//28PD/9/Dy//fx8v/38PH/+fb2//n1 + 9v/58/X/+PL0//fx8v/38vP/9/Dx//Xu8P/06+398+nr8/Pn6e7w5eft7+Tm6u7i5Nnq2t7J5tPXxejW + 2sbo2Nu86Nncq9/IzJzVtryd2sHGi0pHSCMAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA69rdCOHIzmDhx8yW38jMl+LO0pTh0NOG59fad5SIi2nZt71m3MDGZuPM + 0Wbo19xa7+TmStOxuD7au8E+4srOPenY3THx6esh0a+2Fda5vhTgys8U59rcDAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAP///////////////////////////////////4AAB/////gAAAAA + f///AAAAAAAP//4AAAAAAAP//AAAAAAAAH/8AAAAAAAAP/wAAAAAAAAf/AAAAAAAAB/8AAAAAAAAH/wA + AAAAAAAP/AAAAAAAAA/8AAAAAAAAD/wAAAAAAAAP/AAAAAAAAA/8AAAAAAAAD/4AAAAAAAAP/gAAAAAA + AA/+AAAAAAAAD/4AAAAAAAAP/gAAAAAAAA//AAAAAAAAD/8AAAAAAAAP/wAAAAAAAB//AAAAAAAAH/8A + AAAAAAAf/wAAAAAAAB//gAAAAAAAH/+AAAAAAAAf/4AAAAAAAB//gAAAAAAAH/+AAAAAAAAf/4AAAAAA + AB//wAAAAAAAH//AAAAAAAAf/8AAAAAAAB//wAAAAAAAH//AAAAAAAAf/8AAAAAAAB//4AAAAAAAH//g + AAAAAAA//+AAAAAAAD//4AAAAAAAP//gAAAAAAA//+AAAAAAAD//4AAAAAAAP//wAAAAAAA///AAAAAA + AH//8AAAAAAAf//wAAAAAAB///AAAAAAAH//8AAAAAAA///4AAAAAAD///gAAAAAAP//+AAAAAAB///4 + AAAAAAH///wAAAAAA////AAAAAAP///+AAAH////////////////////////////////////KAAAADAA + AABgAAAAAQAgAAAAAACAJQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAABAAAAAgAAAAMAAAAFAAAABQAAAAgAAAAKAAAADAAAAA8AAAAQAAAAEAAA + AA0AAAAHAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAgAAAAQAAAAFAAAABgAA + AAkAAAAMAAAADwAAABMAAAAYAAAAHQAAACIAAAAnAAAALQAAADMAAAA7AAAAQQAAAEgAAABOAAAAVQAA + AFsAAABeAAAAXQAAAFYAAABDAAAALwAAACQAAAAbAAAADwAAAAUAAAABAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAABAAAAAgAAAALQAA + ADIAAAA5AAAAQAAAAEgAAABQAAAAWAAAAGAAAABpAAAAcQAAAHoAAACCAAAAiQAAAJEAAACYAAAAngAA + AKQAAACqBAUFsAQFBbQFBQW1AgIDtQAAAK4AAACdAAAAigAAAH4AAABuAAAAVQAAADkAAAAgAAAADQAA + AAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwAA + AEEAAAByAAAAhwAAAI8AAACWAAAAnQAAAKQAAACqAAAAsAECA7cVFRXAIyAhxjgxMs9EOTzVUUBD22VO + U+N1Wl/ofF5k7I1qcvGQaXLznnR895lsdfeVZG/4kGJs9mhNU+kxLi7YMiwt0wcIB8cAAAC8AAAArAAA + AJIAAABxAAAASwAAACkAAAASGhoaBQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAVFhYCCQgJLzsxM50/MTTNTzw+3F9JTeNoTVPne1ph7ZNtdfOjeoP3sYWN+7+PmP/Aj5n/wo+a/8SU + nf/ImqP/zKGq/s+nr//TrLP/1bC3/tazuv/Xs7r/1rO6/tWyuf/Trrb/yqKp/qpvfP++jJf/2bW9/76c + p/6PdYD1UERJ5BQSE9EAAAC9AAAApwAAAIMAAABdAAAAOAAAABQAAAAEAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAbGxsJp4mPucCPmf/Opa3/0qu0/tSutf/Urrf/1rC3/9awuP7Wsbj/1bK5/tay + uf/Vsrn/1rO6/de1vP/Zt73/2rnB/d2+xP/fw8n/48jN/ebN0v/p09f/7Nfb/ejU1//ausD/1bG5/dSy + uf+mbXr/1LC3/9i2vf3Ws7r/xaGs/6SCkfxvW2TuKCMm2QABAMUAAACvAAAAiwAAAEoAAAAUAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABdVlgm3LnA/Ne0u/7Ws7r92bm//t7Bx/3jx8396NDU/evX + 2/7u3d/98uPm/vbr7f347vD98+fp/uXb3v3Uzc/9wr3A/rCsr/2emp39j4uP/oWChv2AfH/9dnJ3/qWa + n/389vf93L7E/te0u/23hI79rn6D/beJjv7TrrT92bi//dm2vf7Pq7T+uZWj/oJpdfRGO0HiAAEBwgAA + AH8AAAArAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACFfX8+17O7/9Wyuf/ZuL//287R/aag + pf+alZj/j4mN/4eAhP2De4D/fXd7/Xx4e/+Bf4L/hoSF/ZORkP+opaL/u7u2/crEuv/Yz8L/5NrN/ezh + 0v/v5NX/6+DS/ZSPif9fWF3/8uTm/dSxuP/DlqD/o254/2QuUP13QFb/mmd0/8OZoP3XtLr/2ba9/9u4 + v/7Bnan/U0RO5gAAAJcAAAA6AAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACGfoA22bO8/9az + uv/Usbn/KCUr/a6onv/TyL3/3NHE/+jg1P35+ff///79/f///f///////////fv38P/69O3/+fTt/fbx + 6f/s4tT/6+DS/ezh0//s4dP/6+DS/ffr3P9jYWD/1La8/dayuf/Mo6z/q3Z+/2UvUv1nMVP/ZjBS/2kz + Uv2DTWL/s4eQ/9Wyuf3Ytbz/m36N+QAAAJoAAAA9AAAABgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AABiXV0c2ra++tezuv+7naT/PD4//frt3v/t4tP/7OHT/+rg0f318On//fv5/f37+f/8+vj//v38/fz6 + +P/28er/9fDp/ffy6//y6+L/69/Q/ezh0//s4dP/6t/R/fHm1/+BfXj/vZ6l/de0u//RrLP/s4GI/2w1 + U/1pMlT/aTNU/2kzVP1nMVT/azVS/6t5fv3Zt73/rI6b+gAAAJkAAAA9AAAABQAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAArKisG5svQ1ti3vf64mqL9UVBP/vTo2v3q39H96t/R/erf0f7r4NP9+vj0/vz6 + +P37+ff9/fr4/v7+/f369vL99vDp/vbx6f328er97+ba/urf0f3q39H96t/R/u7j1f2jnpb9oIaN/tez + uv3Vsbj9t4aQ/ZRcYP6WXmL9ll5i/ZZeYv6XX2P9ll5i/aRwdf7Zt77+sJGd+gAAAJgAAAA8AAAABgAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAsZ2ipuTKz//MqbD/QEBB/ffq3P/r4NL/7OHT/+rf + 0f3s4NH/9Onb/f/9+v/9+vj/+vr4/fv7+v/9/fz/7e7u/ejq6//s7Ov/8u/r/e3i1P/y5NL/7+PR/e7j + 1P/Buq//hXF4/dm1vP/Ws7r/uoiT/5hiZ/2VXWL/ll5j/5RcYf2WXmP/lV1i/6RyeP3Zt77/sJKd+gAA + AJcAAAA7AAAABgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAqpqdc+va3f/ZtLv9OzU7/u7j + 1f3r4NL96t/R/evg0f7u4tL9jLDZ/qrM8/3n8Pv93+z7/t/t/P3w9f394u78/o688/2Sv/P9l8Hz/oq5 + 7f1TlN/9jrLa/trY1P3l1sP9cWFm/tm1vf3XtLv9uomT/aFtcv6UXGH9lFxh/ZVdYv6UXGH9lFtg/aVz + ef7Zt77+rI+a+QAAAJUAAAA5AAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAASkBCQPTl + 6f/btbz/WE1U/ci/tP/t4tT/7OHT//Lk0v1bmeD/DHLn/R176P/T5fn/3+z7/d/s/P/k7/v/9Pj9/crf + +f+Rv/P/k7/y/ZjD9P9Ml+3/DHLn/Qty6P89iuL/V1Vg/d66wf/WtLv/vI2W/6l3ff2UW2D/ll5j/5Rc + Yf2WXmP/lV1i/6Z0ev3bt77/p4qW+AAAAJMAAAA4AAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAATkhJFPXm6f/ZtLv/hXF3/ZOPiP/v5NX/7OHT/+Dc0/0ZeeX/FXbl/RJ05v9anu3/5vD7/eDt + /P/f7Pz/6/P9/fP4/f+szvX/kr/y/ZXB9P+TwPP/KYPo/RR25v8UeOv/LkNi/eTBxv/Ws7r/wZWf/6x6 + gf2UW2D/ll5j/5RcYf2WXmP/lVxh/6l2fP3buL7/oYSP9gAAAJMAAAA2AAAABQAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAPfr7uvYt73+r5Oa/mVkYf3y59j96+DR/enf0v4hfOb9FHbm/hV2 + 5f0Qc+b9qMz1/uLu+/3e6/r93+z8/vH2/f3p8vz9l8Lz/pO/8v2WwfT9g7fx/hFz5v0Weuz9GEBv/uC/ + w/3Vsrn9yqOr/at3gP6UW2D9lFxh/ZVdYv6UXGH9lFtg/al3ff7auL7+mHuH9QAAAJIAAAA3AAAABAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPjt777cvsT/0K62/UFCQ//x5tf/7OHT//Di + 0f2jvNn/FXfm/Q1z5/8Wd+b/Oonl/enx+v/n8Pv/6PD5/e3z/P/1+v3/1ef6/ZG+8v+RvvT/l8L0/Vyg + 7v8Rd+r/D0mJ/c6xs//Ws7r/0q+2/6t1fv2VXmL/ll5j/5RcYf2WXmP/lVxh/6p5fv3at77/pYeQ9QAA + AJEAAAA2AAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMa8vpHiyc7/3rm//Tc1 + OP/q39H/7OHT/+rf0f3w49L/29jU/cDL1v/d2dT/69/R/fLs4v/++/r//fr3/f37+P/+/fv///79/fHx + 8f/Y4u3/s9Dx/ZfC8/8yiOv/DFmv/bCYmP/Ytr3/1rS7/612gf2YYWX/lV1i/5RcYf2WXmP/lVxh/6x6 + gP3Ztr3/vaCm9QAAAI4AAAAyAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAALWo + qmnp1tr/3bi//kM9Q/3b0MP97+LS/e/i0f7v4tH97+LR/u7h0f3s4NH96+DR/uvf0f359PH9/Pr4/vv5 + 9/38+vj9/v38/v79+/358+z9+vPp/u7t6/2oyfD9EmzS/o57ev3dvML917a9/a96hP6bZWr9lFxh/ZVd + Yv6UXGH9k1tg/ax9g/7Ztr3+up+k8wAAAIoAAAAuAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAOLU1j/t3uH/2bO6/mNVW/+UoK3/nLrb/4iw3P2Erdz/lbbb/cTN1v/u4tL/8ePR/ezg + 0v/u49f//Pr4/f37+f/9+vj//Pv5/f/+/f/8+vj/9vHq/ffy6//99ev/qcnr/WVdY//kx8z/17W8/7N+ + iv2ga3H/lV1i/5RcYf2WXmP/lVxh/65/hP3Ztr3/qpKX7wAAAIgAAAAtAAAAAgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAKCVmCDz6Or11rK5/otzdf8PUJr/D3Xq/xB05/0QdOf/D3Tn/RF1 + 5v8tguT/lLXa/fDi0v/s4NH/8+zk/f37+v/9+/n//fr4/f79/P///v3/+fby/fbx6f/28er///70/WFa + Xv/o0NX/1rO6/7eEkP2lcnn/lVxh/5RcYf2WXmP/lFxh/6+Bhv3at77/n4WL7QAAAIUAAAAqAAAAAgAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPjq7Qbw5ufl1rO6/qmNkf0UQXf9FXrs/RZ3 + 5f4Wd+X9Fnfl/hV25f0Udub9DXPn/kmQ4f3o3tL97ODQ/vr39P38+/n9+/n3/vz6+P3+/fz9/v38/vfy + 7f318On9/vny/mtmaP3n09j91bK5/byNl/6qdn39lFtg/ZVdYv6UXGH9k1tg/bGCiP7Ztr7+oYmO7AAA + AIAAAAAnAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADXztDD2rm//8ak + qv8ZM1P/EXjv/w5z5/0Oc+f/EnXn/RZ35/8XeOf/Fnbl/RF05/8zhuP/49zS/e/m2f/8+/n/+/n3/f37 + +f/+/Pn//v38/f37+f/28er/+/bv/YB+fv/dzND/1rG6/8SYof2qdoD/lFtg/5RcYf2WXmP/lFxh/7OF + i/3at77/lYCE5wAAAHsAAAAjAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AADo3d+b3cDF/9ayuf8rMz//fqzg/5m32f2Wttr/dKbe/SZ+5P8RdOf/Fnbl/Rd45/8Sdef/QIvi/fHj + 0P/17+j//fv6/f37+f/8+vj//v38/f/+/f/7+PT/+/Ts/Zycmf/DuLz/2bi+/8ujq/2qdH7/ll5i/5Rc + Yf2WXmP/lFxh/7aJj/3at77/gGtv4QAAAHUAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAC3rK5v4srQ/9y3v/1BO0D949XF/fDi0v7v4tH98uPR/urf0/1jnd/9DXPm/hZ2 + 5f0WduX9DXPm/pS12v3x49L9+vj0/vz6+P38+ff9/fv4/v79/P39/fz96O3y/qWwuf2nmp/938PI/dGr + s/6pcHv9mmNo/ZRcYf6UXGH9k1tg/biLkf7bt77+fmtw3gAAAHAAAAAcAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADEtrlD5tLW/9y2vf9aTlX/v7es/+zh0/3s4dP/6t/R/ezh + 0//05NL/f6rd/RB05/8XeOf/FHbm/TaH4//t4dH/7+fb/f78+v/7+fj/6vH5/eny/f/w9/7/6PP+/YOv + 4v+Cen//59DU/9WxuP2nbnn/oGtw/5RcYf2WXmP/k1pf/7qOlP3buL//aVpd1gAAAGkAAAAYAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADWys0f6dXZ/Ni0u/97aW//mpWO/+7i + 1P3s4dP/6t/R/ezh0//s4dP/+efQ/SF85f8Wd+f/FXbl/Rh45v/h3NP/7ODQ/fLw7P/i7/v/3uv7/eDs + /P/u9f3/8/j+/c/j+v9jYm7/8N3g/9e0u/2pcX3/pG92/5RcYf2WXmP/k1pf/72SmP3buL//ZVda0QAA + AGEAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACGf4AN7dzh5dax + uP6dhIr9fHp4/fDk1P7q39H96+DS/urf0f3q39H99+bR/h975f0VduX9FXbm/hh45v3h3NP97+LR/jqK + 5f3U5fv93+z7/t7r+v3k7/z98Pb9/vj+//1mZm798+Pm/dazuv6ueoX9p3J6/ZRcYf6UXGH9k1pf/cCX + nf7cuMD/TUNFyAAAAFgAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AADu3uEB6dvdy9Wwt/+7nKP/Wl1f//ny5/3r4NH/6t/R/ezh0//u4tL/yM/W/Qxx5/8XeOf/FHbm/TOF + 4//05dH/e6nd/Qtx5/9Xne3/5/D7/d/s/P/m7/r/8/f8/fz///98foP/5t3f/9Wyuf23hpD/qXR9/5Rc + YP2WXmP/k1le/8Sbov3buL7/OTMzvAAAAE8AAAAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAtqyup9e0u//PrLP/PT5C//////3t49b/69/R/e/i0v/o39L/PYri/RR2 + 5/8XeOf/EnXm/Wyh3v/u4dL/JH7k/RZ35/8QdOb/o8n1/fT2+v/9+vj//fv4/f////+fn6H/0cnL/9e0 + u/3AkZv/qnN+/5RaX/2WXmP/kVle/8efp/7Ytbz+KCUlsgAAAEUAAAAJAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA2szPgNq6wP/XtLv/MzA1///+/P369O//7OHR/bbG + 1/83h+P/EnXn/Rd45/8XeOf/CnHn/dTV1f/DzNb/DXPn/Rd45/8Tdef/UJTj/f//+P/9+/n/+/n3/f/+ + /P/CxMP/qqSn/92/xf3Inqf/p257/5ZfY/2WXmP/kVhd/82mrf7Tsbj8HRobpgAAADsAAAAGAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAw7S3Vt/CyP/bt779RTxA/b3S + 5/7U5vr9ebLx/gRt5/0Udub9Fnfl/hV25f0Oc+b9eafd/vjn0f2Yt9n9DnPn/hZ25f0QdOf9farc/vfs + 4v39+vn9+/n3/v78+f3n5ub9jYeK/ebO0v7QqbH9o2d0/Z9qb/6UXGH9kVhd/dGss/7Lq7H4CwsLlgAA + ADAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAj4SHLeLH + zf/btb3/ZFRa/56xxv3R5fz/1ef5/UCP6/8Tdeb/FXbl/Q5z5/9bmeD/7uLS/e/i0v+Xt9v/DnPn/Rd4 + 5/8QdOf/fqrc/e/i0f/49PH//fv5/f37+f/39vX/eHJ3/+3a3v3Ur7b/oWRx/6Z0ev2UXGH/k1le/9Wx + uP67n6TzAAAAhQAAACYAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAA69zfCd/Fyv/YtLv/iXN5/3qKnP3S5v3/zuL5/cDZ9/8Zeef/DXLn/YSu2//w4tL/6+DR/e7i + 0v+1xdf/DHLn/Rd45/8Tdef/Q43i/fnm0P/u5dj//Pr4/f37+f////7/bmtu//Pk5/3Vsbj/pWt4/6t4 + f/2TW2D/lVxh/9i2vf6njpPpAAAAdQAAAB0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAOLIzuPXs7r+rpOZ/VZibf7W6f/90OP5/tvp+f3A1/D93NjS/vLj + 0f3r4NH96+DS/uvg0f3h29P9G3nl/hV25f0WduX9C3Pn/qm/2P3z49D99O3k/v37+v3///39e3x+/enb + 3f7Ws7r9r3mE/at2f/6UXGH9mWJo/dy6wf6AbnHYAAAAYwAAABMAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAN7HzL3Wsrn/y6qx/0ZJTP3//vv/+vf1/fz4 + 9f//+/X/8uvg/evg0f/s4dP/6t/R/ezh0//y5NL/ZZ7f/RJ15/8XeOf/FXbl/RV35v+Ps9v/5t3S/f/6 + 8////vz/sbKy/7ussP3Ztr3/uYmT/6t0f/2VXmP/om50/925wv9aTlHDAAAATwAAAAsAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK6anpTXtLz/3Li//zU2 + Ov35+Pb/+/j1/fz59v/8+fb/+/n1/e3i1v/r4NL/6t/R/ezh0//s4dP/4dvS/RR25/8Wd+f/FXbl/RZ3 + 5/8PdOf/H3vl/V2d6P/p8vv/2ef1/39udf3bt77/xZuj/6dtev2aZGj/sICG/926wv8xLC6mAAAAOwAA + AAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJiJ + jGnZtbz/37vC/Tk1Ov7q6ef9+/j1/vr39P369/T9+/j1/vj18P3r4NL96t/R/urf0f3q39H97+LR/rvI + 1/0Vd+f9FHbm/hV25f0WduX9FXbl/g1y5f2HuPL98fz//VVRXP7btr390621/Z9jb/6kcXf9x6Cn/s+v + tfgLCguCAAAAJgAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAANrJzETXtLr/27a9/15RV/2fn6D////8/f369//9+vf//Pn2/f77+P/28Oj/7eLT/e7j + 1f/v49X/7+TV/fXn1f/G0Nr/M4jo/RR47P8Veuz/FXrs/RZ67f8dfu//n7fQ/0U+Q/3bt77/2Le+/6Jn + c/2ygYr/0Kmx/6iQleQAAABdAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAIJ4eiXYtb3317S7/72epP0dISX/q62t/eXk4//g4N3/2dnY/dHR + 0f/IyMj/uLOq/aqlm/+hnJT/mJSM/Y6KhP+Hg3z/e3l0/SJKdv8SQHX/Ejxs/RI5ZP8WOV//Iycw/7+g + p/3XtLv/17S7/7yNl/2ZWWf/0Kmx/2xeYbYAAAA4AAAABwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAO3i5QjUtLrl1LC3/ti1vP7AoKf9bVxi/mVV + Xf1qWmD9cF5l/nRiav17aG79hG93/o54fv2Vfob9n4WM/qaMlP2uk5n9uJmg/sOhpv3Jp6v9zaqv/tKu + tP3Ys7j93Li+/dWyuf7Usbj91bG4/c6osP6eYW7+2ra9/hgXGFkAAAAWfnl6AQAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADl0dWR6NXa/9Sw + t/3Vsbj/2bS7/dq0vP/ZtLv/2bS7/di0u//YtLv/2LK6/deyuv/Xs7r/17K6/dayuf/Wsrn/1rO5/dey + uv/Ws7v/17S8/te2vP/Yt77/2bnA/9q8wv7cvsT/3L3D/9WxuP+0fon/nIuNoAAAABUODQ0EAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAD28PES69ve0PPq7f/u3uH/69vf/+va3v/s3N//7d7g/+3d4f/u3+L/7d/i/+/i5f/w4+b/8OLl//Dj + 5f/w4+b/8OTm//Dj5v7w4+b08OTm8u/l5+7v5Ofd693g1e3h5NTu4+bH6drduNe3vrelj5ODBwcIDllX + VwEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA8eboAenX2lDn1Nlw6drdbend4GDYz9JRyrS5S+fT1kvs3uBG8ursN9/G + yizm0tUs7eHkJvDm6BXdw8kO5tTZDe/m6AYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAP///////wAA////////AAD//+AAf/8AAP4AAAAD/wAA+AAAAAD/AAD4AAAAAD8AAPAA + AAAADwAA8AAAAAAPAADwAAAAAAcAAPAAAAAABwAA8AAAAAAHAADwAAAAAAcAAPAAAAAABwAA+AAAAAAH + AAD4AAAAAAcAAPgAAAAABwAA+AAAAAAHAAD8AAAAAAcAAPwAAAAABwAA/AAAAAAHAAD8AAAAAAcAAPwA + AAAABwAA/AAAAAAHAAD8AAAAAAcAAP4AAAAADwAA/gAAAAAPAAD+AAAAAA8AAP4AAAAADwAA/gAAAAAP + AAD+AAAAAA8AAP4AAAAADwAA/wAAAAAPAAD/AAAAAA8AAP8AAAAADwAA/wAAAAAPAAD/AAAAAB8AAP+A + AAAAHwAA/4AAAAAfAAD/gAAAAB8AAP+AAAAAHwAA/4AAAAA/AAD/gAAAAD8AAP+AAAAAPwAA/8AAAAB/ + AAD/wAAAAP8AAP/gAA///wAA////////AAD///////8AACgAAAAgAAAAQAAAAAEAIAAAAAAAgBAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAEAAAABgAAAAkAAAAJAAAABgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAHAAAACwAA + AA4AAAAUAAAAGwAAACIAAAAsAAAANgAAAD8AAABLAAAAVgAAAGAAAABqAAAAcgAAAHUAAABpAAAASAAA + ADUAAAAgAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGAAAAPAAA + AG0AAAB5AAAAhAAAAJAAAACbAAAApw8QD7QgHB2/LycoyUAxNNJOOz/aXENI4WtPVOdrSlLqZUVL6TMn + KtkdGxvIAAAAtgAAAJ8AAAB1AAAAQAAAABcSEhIEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0J + CTZjR0zKd1xh6YZobu+Yc3vzroaO+sKWn/3Mnaf/zZ6o/9Ciq//VqbL/2bC3/921vP/duL//3rnA/9u1 + vP/Urrb/sXWD/922vv/JprH/fmdw8jAoK9sAAAC4AAAAjgAAAFUAAAAYAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAs5idu964wf/fvMP/5MPJ/+XKz//pz9T/6tTZ/+7b3//s2t7/4M7T/87Axf++s7j/rqeq/6ei + pv+gnaD/1MvO/+XL0P/Tr7b/rXqC/8ujp//iwMb/0663/6qLmPtLPEXnBQUEwgAAAGAAAAAGAAAAAAAA + AAAAAAAAAAAAAAAAAADbvcPc1rK5/7qnrP+QjY7/npiX/6Kcnf+koaP/pqKl/6qqqv+2s6//y8nE/9rR + xv/m283/7eLT//Hm1v+Df3n/x7i8/9q3vv+oc3v/YClM/4BJYP+xhI7/27e8/+S/xv+HbHr1AAAAgQAA + AA4AAAAAAAAAAAAAAAAAAAAAAAAAAMqtssTduMD/SUNH//vv3//w5NX/8eja//////////3///////35 + 9f/59Oz/9vLq/+vg0v/s4dP/7OHT/+/k1v+DbXX/3LnA/7uKkv9lLlD/ZS9S/2IrUP9sNFD/xpyi/8Oj + rf4AAACCAAAADQAAAAAAAAAAAAAAAAAAAAAAAAAAkoGEi+PAxv9fWFr/9una/+vh0//r3tD/9u/l///9 + +v/9+/j///79//jy6//79Ov/9+7j//Dhz//w4tL/9erb/39ucv/cuL//wpWf/5VcX/+YYGP/mGBj/5Vc + YP+2iI7/xqav/gAAAIEAAAANAAAAAAAAAAAAAAAAAAAAAAAAAABjV1lR79TZ/2VXXv/06dn/7OHT//Dj + 0f/EzNP/2ef3/+rx+//s8/z/6vL6/6DF8f+x0PL/mbvi/6W91//16df/jHx5/9u3vv/FmaL/mWRo/5Vd + Yv+WXmP/k1pf/7iLkf/Do639AAAAfwAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAACEcHR/13uP/hm93/8vE + t//w5NT/zNHV/wBr5/82iun/7fT8/97s/P/x9v3/wNr5/4688/+TwPT/E3Xn/wt07P9EX4b/47zB/8ab + pP+hbXP/lFxh/5ZeY/+TWl//uoyS/76fqvwAAAB8AAAACwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPbj + 5/q0lZ3/l5OM//Xn1v+mvtn/B2/o/wlv5P+Ju/P/5O/8/9/s/P/2+v3/oMj1/5TA9P9/tPH/DHPq/xNO + lP/lv8P/zqiu/6JtdP+UXGH/ll5j/5NaX/+7jpT/tpWg+wAAAHwAAAAMAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAA9+jrz9WwuP9xb2v/8ufY//Pk0f9gm9//MYTk/2Kc3f/y9vj/8PP6//X4+//u9fz/pcfw/5TA + 8/9OmvD/BFSt/9Owsv/XtLv/o2x0/5RcYf+WXmP/k1pf/7yQlv/Coar7AAAAeQAAAAsAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAADPxsik37e//2VgYP/77Nj/9OXS//zo0P//6ND/8+TR//Dm3P/+/Pv//fv4///+ + /P///PT/9vHp/9Df8f8Zctf/sZeV/9u4v/+pc3z/k1tg/5ZeY/+TWl//vJCX/82vtfoAAAB0AAAACQAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAOLY2nffvML/XlVc/3Oq6f9bmOD/X5vf/5K12//s4dL/8OHO//fy + 7P/9+/n//Pr4///9/f/59O7/+/Tq/97n7/+Ng4f/27a9/7SAi/+SWl3/ll5j/5NaX/++k5r/vqGn9gAA + AHAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA6+DiS+XJz/9wXF7/C3Tr/xF15/8Rdef/DXLn/w1y + 5/+kvdn/9+bQ//z6+f/9+/n//vz7//78/P/18Or///vz/5CIi//du8L/uomT/5RcYf+VXWL/k1pf/8GW + nf+6naL0AAAAaQAAAAYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADQw8Ue69PX/5J1dP8LZsz/FXjp/w1y + 5v8Ncuf/Fnfn/wVu6P+Vttn/+e3d//38+//8+vj//v38//z69//89+7/kouL/+XK0P+6iZP/nGds/5Vd + Yv+TWl//xJqg/6ySmPAAAABiAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADp1Nj+r5GY/6Ca + jv//7NT/9ubR/5252f8Kcef/Fnfn/wVu5//Lz9L/+/bv//37+f/9+/n///7+//X39v+Hho3/7tfa/72O + mf+gbXL/lVxh/5JYXf/HnKT/oYiN7AAAAFoAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOjV + 2dfRrbX/dXJu//Ln2P/s4dP/9OXS/8nP1f8Oc+b/EXTn/2Se3v/05dP///75/+jv+f/o8v3/8vr//2GA + pf/o0dP/x52m/6Fpcf+VXGH/kVhd/8qhqP+TfYLmAAAAUAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAArqOkq+C5wf9nY2T/8ufW/+zh0//r4dP//+rQ/xh45f8Rdef/UpTg//znz/+LuOz/5vH9/9/r + +//y+f//vsjT/8S1uP/SrLP/oGdx/5VdYf+RWF3/zqat/4Nwdd4AAABFAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAADg09aD27W8/2VfZP/58+j/6+DR//Lk0v/Iz9X/CXDo/xB05/97qdz/m7nZ/wBp + 5v+/2vj/5+/7//T3+//4+/z/npmc/9m1vf+la3X/k1tg/5FYXf/Tq7P/bV1f0wAAADkAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAMm9wFneu8H/YFRZ///////y5NP/vcjW/xt65v8Vd+f/BG7o/97Z + 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 + AADw/wAA + + + \ No newline at end of file diff --git a/SOLVER/RouteServiceState/Program.cs b/SOLVER/RouteServiceState/Program.cs new file mode 100644 index 0000000..bd5f990 --- /dev/null +++ b/SOLVER/RouteServiceState/Program.cs @@ -0,0 +1,20 @@ +using System; +using System.Collections.Generic; +using System.Windows.Forms; + +namespace RouteServiceState +{ + static class Program + { + /// + /// The main entry point for the application. + /// + [STAThread] + static void Main() + { + Application.EnableVisualStyles(); + Application.SetCompatibleTextRenderingDefault(false); + Application.Run(new RMSVForm()); + } + } +} \ No newline at end of file diff --git a/SOLVER/RouteServiceState/Properties/AssemblyInfo.cs b/SOLVER/RouteServiceState/Properties/AssemblyInfo.cs new file mode 100644 index 0000000..656a4cf --- /dev/null +++ b/SOLVER/RouteServiceState/Properties/AssemblyInfo.cs @@ -0,0 +1,33 @@ +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +[assembly: AssemblyTitle("RouteServiceState")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("Milok Zbrozek ")] +[assembly: AssemblyProduct("RouteServiceState")] +[assembly: AssemblyCopyright("Copyright © Milok Zbrozek 2021")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// Setting ComVisible to false makes the types in this assembly not visible +// to COM components. If you need to access a type in this assembly from +// COM, set the ComVisible attribute to true on that type. +[assembly: ComVisible(false)] + +// The following GUID is for the ID of the typelib if this project is exposed to COM +[assembly: Guid("1978d4f7-2dbb-4359-8127-883137dc3c9f")] + +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +[assembly: AssemblyVersion("21.12.21.2")] +[assembly: AssemblyFileVersion("21.12.21.2")] diff --git a/SOLVER/RouteServiceState/Properties/Resources.Designer.cs b/SOLVER/RouteServiceState/Properties/Resources.Designer.cs new file mode 100644 index 0000000..2138a5c --- /dev/null +++ b/SOLVER/RouteServiceState/Properties/Resources.Designer.cs @@ -0,0 +1,63 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version:2.0.50727.3662 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +namespace RouteServiceState.Properties { + using System; + + + /// + /// A strongly-typed resource class, for looking up localized strings, etc. + /// + // This class was auto-generated by the StronglyTypedResourceBuilder + // class via a tool like ResGen or Visual Studio. + // To add or remove a member, edit your .ResX file then rerun ResGen + // with the /str option, or rebuild your VS project. + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "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() { + } + + /// + /// Returns the cached ResourceManager instance used by this class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Resources.ResourceManager ResourceManager { + get { + if (object.ReferenceEquals(resourceMan, null)) { + global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("RouteServiceState.Properties.Resources", typeof(Resources).Assembly); + resourceMan = temp; + } + return resourceMan; + } + } + + /// + /// Overrides the current thread's CurrentUICulture property for all + /// resource lookups using this strongly typed resource class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Globalization.CultureInfo Culture { + get { + return resourceCulture; + } + set { + resourceCulture = value; + } + } + } +} diff --git a/SOLVER/RouteServiceState/Properties/Resources.resx b/SOLVER/RouteServiceState/Properties/Resources.resx new file mode 100644 index 0000000..af7dbeb --- /dev/null +++ b/SOLVER/RouteServiceState/Properties/Resources.resx @@ -0,0 +1,117 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 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 + + \ No newline at end of file diff --git a/SOLVER/RouteServiceState/Properties/Settings.Designer.cs b/SOLVER/RouteServiceState/Properties/Settings.Designer.cs new file mode 100644 index 0000000..8721b7e --- /dev/null +++ b/SOLVER/RouteServiceState/Properties/Settings.Designer.cs @@ -0,0 +1,26 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version:2.0.50727.3662 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +namespace RouteServiceState.Properties { + + + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "8.0.0.0")] + internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase { + + private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings()))); + + public static Settings Default { + get { + return defaultInstance; + } + } + } +} diff --git a/SOLVER/RouteServiceState/Properties/Settings.settings b/SOLVER/RouteServiceState/Properties/Settings.settings new file mode 100644 index 0000000..3964565 --- /dev/null +++ b/SOLVER/RouteServiceState/Properties/Settings.settings @@ -0,0 +1,7 @@ + + + + + + + diff --git a/SOLVER/RouteServiceState/RouteServiceState.csproj b/SOLVER/RouteServiceState/RouteServiceState.csproj new file mode 100644 index 0000000..af3dab1 --- /dev/null +++ b/SOLVER/RouteServiceState/RouteServiceState.csproj @@ -0,0 +1,90 @@ + + + Debug + AnyCPU + 8.0.50727 + 2.0 + {A1A4A3F7-C9AB-40A9-9DAF-ED38AB9FF6D5} + WinExe + Properties + RouteServiceState + RouteServiceState + mirror.ico + + + true + full + false + ..\..\READY\TOOLS\ + DEBUG;TRACE + prompt + 4 + + + pdbonly + true + ..\..\READY\TOOLS\ + TRACE + prompt + 4 + + + + + + + + + + + + False + ..\..\READY\MAIN_DLLs\XMLSaved.dll + + + + + Form + + + Form1.cs + + + + + Designer + Form1.cs + + + ResXFileCodeGenerator + Resources.Designer.cs + Designer + + + True + Resources.resx + True + + + SettingsSingleFileGenerator + Settings.Designer.cs + + + True + Settings.settings + True + + + + + + + + + \ No newline at end of file diff --git a/SOLVER/RouteServiceState/SYSID.cs b/SOLVER/RouteServiceState/SYSID.cs new file mode 100644 index 0000000..4b9803b --- /dev/null +++ b/SOLVER/RouteServiceState/SYSID.cs @@ -0,0 +1,327 @@ +using System; +using System.Collections.Generic; +using System.Text; +using System.IO; + +using System.Management; +using System.Security.Cryptography; +using System.Security; + +namespace System +{ + internal static class SYSID + { + private static byte[] _salt = Encoding.ASCII.GetBytes("a25052017pxko7"); + + public static string _BIOSID + { + get + { + ManagementObjectSearcher mos = new ManagementObjectSearcher("SELECT * FROM Win32_BIOS"); + ManagementObjectCollection moc = mos.Get(); + string motherBoard = ""; + foreach (ManagementObject mo in moc) + motherBoard = (string)mo["SerialNumber"]; + return motherBoard; + } + } + + public static string _MotherBoardID + { + get + { + ManagementObjectSearcher mos = new ManagementObjectSearcher("SELECT * FROM Win32_BaseBoard"); + ManagementObjectCollection moc = mos.Get(); + string motherBoard = ""; + foreach (ManagementObject mo in moc) + motherBoard = (string)mo["SerialNumber"]; + return motherBoard; + } + } + + public static string _ProcessorID + { + get + { + ManagementObjectSearcher mos = new ManagementObjectSearcher("SELECT * FROM Win32_processor"); + ManagementObjectCollection moc = mos.Get(); + string motherBoard = ""; + foreach (ManagementObject mo in moc) + motherBoard = (string)mo["ProcessorID"]; + return motherBoard; + } + } + + public static string _DiskCID + { + get + { + ManagementObject dsk = new ManagementObject("win32_logicaldisk.deviceid=\"C:\""); + dsk.Get(); + return dsk["VolumeSerialNumber"].ToString(); + } + } + + public static string _CurrentDiskID + { + get + { + ManagementObject dsk = new ManagementObject("win32_logicaldisk.deviceid=\"" + AppDomain.CurrentDomain.BaseDirectory.Substring(0, 1) + ":\""); + dsk.Get(); + return dsk["VolumeSerialNumber"].ToString(); + } + } + + public static bool _IsVirtual + { + get + { + { + ManagementObjectSearcher mos = new ManagementObjectSearcher("SELECT * FROM Win32_processor"); + ManagementObjectCollection moc = mos.Get(); + string val = ""; + foreach (ManagementObject mo in moc) + val = (string)mo["Manufacturer"]; + if (val.Contains("VBoxVBoxVBox")) return true; + if (val.Contains("VMwareVMware")) return true; + if (val.Contains("prl hyperv")) return true; + }; + { + ManagementObjectSearcher mos = new ManagementObjectSearcher("SELECT * FROM Win32_BaseBoard"); + ManagementObjectCollection moc = mos.Get(); + string val = ""; + foreach (ManagementObject mo in moc) + val = (string)mo["Manufacturer"]; + if (val.Contains("Microsoft Corporation")) return true; + }; + { + ManagementObjectSearcher mos = new ManagementObjectSearcher("SELECT * FROM Win32_DiskDrive"); + ManagementObjectCollection moc = mos.Get(); + string val = ""; + foreach (ManagementObject mo in moc) + val = (string)mo["PNPDeviceID"]; + if (val.Contains("VBOX_HARDDISK")) return true; + if (val.Contains("VEN_VMWARE")) return true; + }; + return false; + } + } + + public static string GetSysID() { return SYSID.GetSystemID(true, true, false, true, false); } + + public static string GetSystemID(bool BIOS, bool MotherBoard, bool CPU, bool DiskC, bool CurrDisk) + { + string code = ""; + try + { + if (BIOS) code += "/" + _BIOSID; + } + catch { }; + try + { + if (MotherBoard) code += "/" + _MotherBoardID; + } + catch { }; + try + { + if (CPU) code += "/" + _ProcessorID; + } + catch { }; + try + { + if (DiskC) code += "/" + _DiskCID; + } + catch { }; + try + { + if (CurrDisk) code += "/" + _CurrentDiskID; + } + catch { }; + + int codeType = (BIOS ? 1 : 0) + (MotherBoard ? 2 : 0) + (CPU ? 4 : 0) + (DiskC ? 8 : 0) + (CurrDisk ? 0x10 : 0); + + //return codeType.ToString("X2") + "-" + + + return GetHash(code); + } + + private static string GetHash(string s) + { + MD5 sec = new MD5CryptoServiceProvider(); + ASCIIEncoding enc = new ASCIIEncoding(); + byte[] bt = enc.GetBytes(s); + return GetHexString(sec.ComputeHash(bt)); + } + + private static string GetHexString(byte[] bt) + { + string s = string.Empty; + for (int i = 0; i < bt.Length; i++) + { + byte b = bt[i]; + int n, n1, n2; + n = (int)b; + n1 = n & 15; + n2 = (n >> 4) & 15; + if (n2 > 9) + s += ((char)(n2 - 10 + (int)'A')).ToString(); + else + s += n2.ToString(); + if (n1 > 9) + s += ((char)(n1 - 10 + (int)'A')).ToString(); + else + s += n1.ToString(); + if ((i + 1) != bt.Length && (i + 1) % 2 == 0) s += "-"; + } + return s; + } + + public static string Encrypt(string plainText, string sharedSecret) + { + if (string.IsNullOrEmpty(plainText)) + throw new ArgumentNullException("plainText"); + if (string.IsNullOrEmpty(sharedSecret)) + throw new ArgumentNullException("sharedSecret"); + + string outStr = null; // Encrypted string to return + RijndaelManaged aesAlg = null; // RijndaelManaged object used to encrypt the data. + + try + { + // generate the key from the shared secret and the salt + Rfc2898DeriveBytes key = new Rfc2898DeriveBytes(sharedSecret, _salt); + + // Create a RijndaelManaged object + aesAlg = new RijndaelManaged(); + aesAlg.Key = key.GetBytes(aesAlg.KeySize / 8); + + // Create a decrytor to perform the stream transform. + ICryptoTransform encryptor = aesAlg.CreateEncryptor(aesAlg.Key, aesAlg.IV); + + // Create the streams used for encryption. + using (MemoryStream msEncrypt = new MemoryStream()) + { + // prepend the IV + msEncrypt.Write(BitConverter.GetBytes(aesAlg.IV.Length), 0, sizeof(int)); + msEncrypt.Write(aesAlg.IV, 0, aesAlg.IV.Length); + using (CryptoStream csEncrypt = new CryptoStream(msEncrypt, encryptor, CryptoStreamMode.Write)) + { + using (StreamWriter swEncrypt = new StreamWriter(csEncrypt)) + { + //Write all data to the stream. + swEncrypt.Write(plainText); + } + } + outStr = Convert.ToBase64String(msEncrypt.ToArray()); + } + } + finally + { + // Clear the RijndaelManaged object. + if (aesAlg != null) + aesAlg.Clear(); + } + + // Return the encrypted bytes from the memory stream. + return outStr; + } + + public static string Decrypt(string cipherText, string sharedSecret) + { + if (string.IsNullOrEmpty(cipherText)) + throw new ArgumentNullException("cipherText"); + if (string.IsNullOrEmpty(sharedSecret)) + throw new ArgumentNullException("sharedSecret"); + + // Declare the RijndaelManaged object + // used to decrypt the data. + RijndaelManaged aesAlg = null; + + // Declare the string used to hold + // the decrypted text. + string plaintext = null; + + try + { + // generate the key from the shared secret and the salt + Rfc2898DeriveBytes key = new Rfc2898DeriveBytes(sharedSecret, _salt); + + // Create the streams used for decryption. + byte[] bytes = Convert.FromBase64String(cipherText); + using (MemoryStream msDecrypt = new MemoryStream(bytes)) + { + // Create a RijndaelManaged object + // with the specified key and IV. + aesAlg = new RijndaelManaged(); + aesAlg.Key = key.GetBytes(aesAlg.KeySize / 8); + // Get the initialization vector from the encrypted stream + aesAlg.IV = ReadByteArray(msDecrypt); + // Create a decrytor to perform the stream transform. + ICryptoTransform decryptor = aesAlg.CreateDecryptor(aesAlg.Key, aesAlg.IV); + using (CryptoStream csDecrypt = new CryptoStream(msDecrypt, decryptor, CryptoStreamMode.Read)) + { + using (StreamReader srDecrypt = new StreamReader(csDecrypt)) + + // Read the decrypted bytes from the decrypting stream + // and place them in a string. + plaintext = srDecrypt.ReadToEnd(); + } + } + } + catch + { + plaintext = "DECRYPT_ERROR"; + } + finally + { + // Clear the RijndaelManaged object. + if (aesAlg != null) + aesAlg.Clear(); + } + + return plaintext; + } + + private static byte[] ReadByteArray(System.IO.Stream s) + { + byte[] rawLength = new byte[sizeof(int)]; + if (s.Read(rawLength, 0, rawLength.Length) != rawLength.Length) + { + throw new SystemException("Stream did not contain properly formatted byte array"); + } + + byte[] buffer = new byte[BitConverter.ToInt32(rawLength, 0)]; + if (s.Read(buffer, 0, buffer.Length) != buffer.Length) + { + throw new SystemException("Did not read byte array properly"); + } + + return buffer; + } + + //public static void SaveFileDate(string filename, string cryptData) + //{ + // cryptData += '\0'; + // byte[] toSave = System.Text.Encoding.ASCII.GetBytes(cryptData); + // FileStream fs = new FileStream(filename, FileMode.Create, FileAccess.Write); + // fs.Write(filedata, 0, filedata.Length); + // fs.Position = 0x0200; + // fs.Write(toSave, 0, toSave.Length); + // fs.Close(); + //} + + //public static string LoadFileDate(string filename) + //{ + // FileStream fs = new FileStream(filename, FileMode.Open, FileAccess.Read); + // byte[] rb = new byte[1024]; + // int rt = 0; + // int rc = 0; + // fs.Position = 0x0200; + // while ((rc = fs.ReadByte()) > 0) rb[rt++] = (byte)rc; + // fs.Close(); + // return System.Text.Encoding.ASCII.GetString(rb, 0, rt); + //} + + //internal static byte[] filedata = new byte[] { 77, 90, 144, 0, 3, 0, 0, 0, 4, 0, 0, 0, 255, 255, 0, 0, 184, 0, 0, 0, 0, 0, 0, 0, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 0, 0, 0, 14, 31, 186, 14, 0, 180, 9, 205, 33, 184, 1, 76, 205, 33, 84, 104, 105, 115, 32, 112, 114, 111, 103, 114, 97, 109, 32, 99, 97, 110, 110, 111, 116, 32, 98, 101, 32, 114, 117, 110, 32, 105, 110, 32, 68, 79, 83, 32, 109, 111, 100, 101, 46, 13, 13, 10, 36, 0, 0, 0, 0, 0, 0, 0, 80, 69, 0, 0, 76, 1, 3, 0, 124, 13, 39, 89, 0, 0, 0, 0, 0, 0, 0, 0, 224, 0, 2, 33, 11, 1, 8, 0, 0, 16, 0, 0, 0, 32, 0, 0, 0, 0, 0, 0, 110, 35, 0, 0, 0, 32, 0, 0, 0, 64, 0, 0, 0, 0, 64, 0, 0, 32, 0, 0, 0, 16, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 128, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 3, 0, 64, 133, 0, 0, 16, 0, 0, 16, 0, 0, 0, 0, 16, 0, 0, 16, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 20, 35, 0, 0, 87, 0, 0, 0, 0, 64, 0, 0, 160, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 96, 0, 0, 12, 0, 0, 0, 148, 34, 0, 0, 28, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 32, 0, 0, 72, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 46, 116, 101, 120, 116, 0, 0, 0, 116, 3, 0, 0, 0, 32, 0, 0, 0, 16, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 0, 0, 96, 46, 114, 115, 114, 99, 0, 0, 0, 160, 2, 0, 0, 0, 64, 0, 0, 0, 16, 0, 0, 0, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 0, 0, 64, 46, 114, 101, 108, 111, 99, 0, 0, 12, 0, 0, 0, 0, 96, 0, 0, 0, 16, 0, 0, 0, 48, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 0, 0, 66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 80, 35, 0, 0, 0, 0, 0, 0, 72, 0, 0, 0, 2, 0, 5, 0, 80, 32, 0, 0, 68, 2, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66, 83, 74, 66, 1, 0, 1, 0, 0, 0, 0, 0, 12, 0, 0, 0, 118, 50, 46, 48, 46, 53, 48, 55, 50, 55, 0, 0, 0, 0, 5, 0, 108, 0, 0, 0, 180, 0, 0, 0, 35, 126, 0, 0, 32, 1, 0, 0, 192, 0, 0, 0, 35, 83, 116, 114, 105, 110, 103, 115, 0, 0, 0, 0, 224, 1, 0, 0, 8, 0, 0, 0, 35, 85, 83, 0, 232, 1, 0, 0, 16, 0, 0, 0, 35, 71, 85, 73, 68, 0, 0, 0, 248, 1, 0, 0, 76, 0, 0, 0, 35, 66, 108, 111, 98, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 1, 7, 20, 0, 0, 9, 0, 0, 0, 0, 250, 1, 51, 0, 22, 0, 0, 1, 0, 0, 0, 4, 0, 0, 0, 1, 0, 0, 0, 3, 0, 0, 0, 3, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 10, 0, 1, 0, 0, 0, 0, 0, 6, 0, 49, 0, 30, 0, 7, 0, 69, 0, 0, 0, 6, 0, 122, 0, 90, 0, 6, 0, 154, 0, 90, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 1, 0, 9, 0, 84, 0, 10, 0, 25, 0, 84, 0, 16, 0, 33, 0, 84, 0, 21, 0, 46, 0, 11, 0, 25, 0, 46, 0, 19, 0, 34, 0, 46, 0, 27, 0, 43, 0, 4, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 184, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 21, 0, 0, 0, 0, 0, 0, 0, 0, 60, 77, 111, 100, 117, 108, 101, 62, 0, 98, 105, 111, 115, 105, 100, 46, 100, 108, 108, 0, 109, 115, 99, 111, 114, 108, 105, 98, 0, 83, 121, 115, 116, 101, 109, 46, 68, 105, 97, 103, 110, 111, 115, 116, 105, 99, 115, 0, 68, 101, 98, 117, 103, 103, 97, 98, 108, 101, 65, 116, 116, 114, 105, 98, 117, 116, 101, 0, 68, 101, 98, 117, 103, 103, 105, 110, 103, 77, 111, 100, 101, 115, 0, 46, 99, 116, 111, 114, 0, 83, 121, 115, 116, 101, 109, 46, 82, 117, 110, 116, 105, 109, 101, 46, 67, 111, 109, 112, 105, 108, 101, 114, 83, 101, 114, 118, 105, 99, 101, 115, 0, 67, 111, 109, 112, 105, 108, 97, 116, 105, 111, 110, 82, 101, 108, 97, 120, 97, 116, 105, 111, 110, 115, 65, 116, 116, 114, 105, 98, 117, 116, 101, 0, 82, 117, 110, 116, 105, 109, 101, 67, 111, 109, 112, 97, 116, 105, 98, 105, 108, 105, 116, 121, 65, 116, 116, 114, 105, 98, 117, 116, 101, 0, 98, 105, 111, 115, 105, 100, 0, 0, 0, 3, 32, 0, 0, 0, 0, 0, 223, 30, 56, 46, 119, 46, 132, 70, 148, 33, 45, 14, 215, 192, 200, 249, 0, 8, 183, 122, 92, 86, 25, 52, 224, 137, 5, 32, 1, 1, 17, 9, 4, 32, 1, 1, 8, 3, 32, 0, 1, 8, 1, 0, 7, 1, 0, 0, 0, 0, 8, 1, 0, 8, 0, 0, 0, 0, 0, 30, 1, 0, 1, 0, 84, 2, 22, 87, 114, 97, 112, 78, 111, 110, 69, 120, 99, 101, 112, 116, 105, 111, 110, 84, 104, 114, 111, 119, 115, 1, 0, 0, 0, 0, 0, 0, 124, 13, 39, 89, 0, 0, 0, 0, 2, 0, 0, 0, 97, 0, 0, 0, 176, 34, 0, 0, 176, 18, 0, 0, 82, 83, 68, 83, 179, 188, 25, 25, 52, 193, 211, 78, 185, 209, 210, 17, 217, 107, 18, 75, 2, 0, 0, 0, 67, 58, 92, 68, 111, 119, 110, 108, 111, 97, 100, 115, 92, 67, 68, 45, 82, 69, 67, 92, 84, 69, 83, 84, 92, 67, 111, 110, 115, 111, 108, 101, 65, 112, 112, 108, 105, 99, 97, 116, 105, 111, 110, 49, 92, 98, 105, 111, 115, 105, 100, 92, 111, 98, 106, 92, 68, 101, 98, 117, 103, 92, 98, 105, 111, 115, 105, 100, 46, 112, 100, 98, 0, 0, 0, 0, 60, 35, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 94, 35, 0, 0, 0, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 80, 35, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 95, 67, 111, 114, 68, 108, 108, 77, 97, 105, 110, 0, 109, 115, 99, 111, 114, 101, 101, 46, 100, 108, 108, 0, 0, 0, 0, 0, 255, 37, 0, 32, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 16, 0, 0, 0, 24, 0, 0, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 48, 0, 0, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 72, 0, 0, 0, 88, 64, 0, 0, 68, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 2, 52, 0, 0, 0, 86, 0, 83, 0, 95, 0, 86, 0, 69, 0, 82, 0, 83, 0, 73, 0, 79, 0, 78, 0, 95, 0, 73, 0, 78, 0, 70, 0, 79, 0, 0, 0, 0, 0, 189, 4, 239, 254, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 0, 0, 0, 1, 0, 86, 0, 97, 0, 114, 0, 70, 0, 105, 0, 108, 0, 101, 0, 73, 0, 110, 0, 102, 0, 111, 0, 0, 0, 0, 0, 36, 0, 4, 0, 0, 0, 84, 0, 114, 0, 97, 0, 110, 0, 115, 0, 108, 0, 97, 0, 116, 0, 105, 0, 111, 0, 110, 0, 0, 0, 0, 0, 0, 0, 176, 4, 164, 1, 0, 0, 1, 0, 83, 0, 116, 0, 114, 0, 105, 0, 110, 0, 103, 0, 70, 0, 105, 0, 108, 0, 101, 0, 73, 0, 110, 0, 102, 0, 111, 0, 0, 0, 128, 1, 0, 0, 1, 0, 48, 0, 48, 0, 48, 0, 48, 0, 48, 0, 52, 0, 98, 0, 48, 0, 0, 0, 44, 0, 2, 0, 1, 0, 70, 0, 105, 0, 108, 0, 101, 0, 68, 0, 101, 0, 115, 0, 99, 0, 114, 0, 105, 0, 112, 0, 116, 0, 105, 0, 111, 0, 110, 0, 0, 0, 0, 0, 32, 0, 0, 0, 48, 0, 8, 0, 1, 0, 70, 0, 105, 0, 108, 0, 101, 0, 86, 0, 101, 0, 114, 0, 115, 0, 105, 0, 111, 0, 110, 0, 0, 0, 0, 0, 48, 0, 46, 0, 48, 0, 46, 0, 48, 0, 46, 0, 48, 0, 0, 0, 56, 0, 11, 0, 1, 0, 73, 0, 110, 0, 116, 0, 101, 0, 114, 0, 110, 0, 97, 0, 108, 0, 78, 0, 97, 0, 109, 0, 101, 0, 0, 0, 98, 0, 105, 0, 111, 0, 115, 0, 105, 0, 100, 0, 46, 0, 100, 0, 108, 0, 108, 0, 0, 0, 0, 0, 40, 0, 2, 0, 1, 0, 76, 0, 101, 0, 103, 0, 97, 0, 108, 0, 67, 0, 111, 0, 112, 0, 121, 0, 114, 0, 105, 0, 103, 0, 104, 0, 116, 0, 0, 0, 32, 0, 0, 0, 64, 0, 11, 0, 1, 0, 79, 0, 114, 0, 105, 0, 103, 0, 105, 0, 110, 0, 97, 0, 108, 0, 70, 0, 105, 0, 108, 0, 101, 0, 110, 0, 97, 0, 109, 0, 101, 0, 0, 0, 98, 0, 105, 0, 111, 0, 115, 0, 105, 0, 100, 0, 46, 0, 100, 0, 108, 0, 108, 0, 0, 0, 0, 0, 52, 0, 8, 0, 1, 0, 80, 0, 114, 0, 111, 0, 100, 0, 117, 0, 99, 0, 116, 0, 86, 0, 101, 0, 114, 0, 115, 0, 105, 0, 111, 0, 110, 0, 0, 0, 48, 0, 46, 0, 48, 0, 46, 0, 48, 0, 46, 0, 48, 0, 0, 0, 56, 0, 8, 0, 1, 0, 65, 0, 115, 0, 115, 0, 101, 0, 109, 0, 98, 0, 108, 0, 121, 0, 32, 0, 86, 0, 101, 0, 114, 0, 115, 0, 105, 0, 111, 0, 110, 0, 0, 0, 48, 0, 46, 0, 48, 0, 46, 0, 48, 0, 46, 0, 48, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 0, 0, 12, 0, 0, 0, 112, 51, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }; + } +} diff --git a/SOLVER/RouteServiceState/mirror.ico b/SOLVER/RouteServiceState/mirror.ico new file mode 100644 index 0000000000000000000000000000000000000000..31253584c6e4e3bb8733f0046c9fd75549d01d3b GIT binary patch literal 174246 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 Hvb+BRX@WiE literal 0 HcmV?d00001 diff --git a/SOLVER/RouteServiceState/obj/Debug/RouteMemoryStateViewer.csproj.GenerateResource.Cache b/SOLVER/RouteServiceState/obj/Debug/RouteMemoryStateViewer.csproj.GenerateResource.Cache new file mode 100644 index 0000000000000000000000000000000000000000..2d6d55f978861127f0f95ae9212c61cb788e598d GIT binary patch literal 842 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�xAM;0-pf<9nFB&!0&)LJ^6e4 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 Tz}+6W+XHud;BF7xMi2ad5-?gZ literal 0 HcmV?d00001 diff --git a/SOLVER/RouteServiceState/obj/Debug/RouteMemoryStateViewer.pdb b/SOLVER/RouteServiceState/obj/Debug/RouteMemoryStateViewer.pdb new file mode 100644 index 0000000000000000000000000000000000000000..71c4e0022c1a16d1add9d7465dcb56868f114ff7 GIT binary patch literal 52736 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 Hvb+BRX@WiE literal 0 HcmV?d00001 diff --git a/SOLVER/RouteServiceState/obj/Debug/RouteServiceState.csproj.GenerateResource.Cache b/SOLVER/RouteServiceState/obj/Debug/RouteServiceState.csproj.GenerateResource.Cache new file mode 100644 index 0000000000000000000000000000000000000000..f5ab612087644faa959753da1f9fff2cb02c26a7 GIT binary patch literal 842 zcma)4%}N|W5T42IjQgXo9>j#?u!I}}F2im_^s)q8StDxDDB>ZP-su|BZ142a)f3!+ zcOM|+UEJkVRmZ9koQO3^=u>C%z8b! z(G}|=;%i=)vL_z^cOl<_DdZCJQ~|P-x&=HRDh;?g5(oz>AA{uY9c3YP#?GqY%W}eb zDo#8V5$m zq2MMK?j~Csn8{RFuq`GX7zsz#d{z={jTcVT7pT&3F+LNz01SdkC5WPCt?aJ7zg(|M zH19p&|8czaw#KR&O~QJ_5EHaGJ5U3vtGGb58Yp*CGR{Bv#IZm$JKjdXZ$0qWdymH!1K9vEzlhrsWJs}Wo{2H y6grH_;HA)u^i6YzPk;V;zjb|k6^1O?YhU7o+xxbC`Tgq+?Je_hj%D8CX#N2UmGZ9u literal 0 HcmV?d00001 diff --git a/SOLVER/RouteServiceState/obj/Debug/RouteServiceState.exe b/SOLVER/RouteServiceState/obj/Debug/RouteServiceState.exe new file mode 100644 index 0000000000000000000000000000000000000000..962e8cae025bf4fcf9ebe2a240d85fb2103a51b9 GIT binary patch literal 417792 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 z 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 qF}Mg%$)4dEf;pFT4T|t%QWckHn9}1K~S&W_H(B z)KaN$>0RG*&)+@woOACzcRc&h)082iEc&%;M6Y4wR?+a^gLR09e*E_#y1ez>J+FzA z@9tSxaYM7Mf~K-trephl5Sevps*Z2EzFD2CnXRB9t--QmBB8neJs34cuw%S&qjb|) zhJFDIwo3FEVD{z_m@e-4Rtyvl?j;3Q`zjnYMv#SKuoWQ0)M7EW&f4*uZ3igNwghd1 zEoj3QV77RGa-)06SZ881m17Gb2aM&5A-u_rAS=ZPOkfcJDp+f)}6<-;e= z%v3Q}L7zh)!;@Z62h9y8#MxW^BoHgnH{vkuh;#h|kT9(~a-=jq_QRy6 z5klg5jsjW%^#@wTg}F>G0sf1w0zNL5M2=nnEYervec+}sXyoXa!Tc3t1v)JaUoxIC ziu9iG7T_lu7Bj0@DPE5uue+V@rlZJRY(61zaXl~8vI6VyAJdcN?07)P96YU)XC#h?!~^~}ypX0PC! z2zuSvPeR;BhXBj)Mu;hz(D;moTN8NBc#0mR$BpLzUokGxt>C{%F5q8ijeeN9LzJ}U zetMYxK^9KiL1EEN^i$Y7K)j-&Yw_*dvvwQC%hFpf%4os)z-pD zwrH;YE9pcDWlaVCvfJz^J8}b`CfaS!bu^yNpR_}nD)%j&xHoJ2c2g=+JvvoBfg59c z?#0;hRL6@tO3wJpL0389k>x~zqNa?N(gjkp%uBVxK0M_$x2lT-f1Gqrvm>>DAh*&G@P!vo~e1c zER{rBrhnbBy^t2x+TCavzu)#7o`fS2Q^!@%N;ql8(+wA!I;nz3L%Z(v1-MC|&n-@XJ_4K0obRltz;`do2GQ(1>SKo@ z!h+}uRnjF#QxVykZ=s4SXtlLGf?QIFDlo4{o~`r@F8YnXKK;hz?hh(|9QgFlUw>>| zqr%@VKC*c0_=msCakM76PZ|-=gr!#Pr7_bsY@SAuiZ{&C06@CyiNv$ z{(jjRe?|AnOly@oqc05-hysDbi;1y#W<09_c65urMQ4O!=9GwC^19&|C z>ZUidpMIO#>CGnn-N-cV$%faEc~x`)t2XZBaoki7cXWn)TE_k5wolJmfYb&zgq-iV z3#qT=M6YHC;H!X75wu+Jo7b`Q5yBHR*8PoB9XQcl@JMv^tGYrs+D?1JIwo|-aN2vi zi_lf@sOQTVYD}*ae7zm|91T}1h0zA@6krQ9e`|ifDrF%{T)|vK=4(q9>K9kE2JG=y zEzyXM<0Pa_y~>oXe``9DCcY>6{}U5E(mu^4e9jj8lxCi(|GjVHI&X2b4OCwTUTn@@ rFK?Vfq9c0F1fmQPQwzK0;mgkakMl6~#%*T&KjUXdZrl{y$dP{s6 + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(Form1)); + this.panel1 = new System.Windows.Forms.Panel(); + this.button1 = new System.Windows.Forms.Button(); + this.txtBox = new System.Windows.Forms.TextBox(); + this.panel1.SuspendLayout(); + this.SuspendLayout(); + // + // panel1 + // + this.panel1.Controls.Add(this.button1); + this.panel1.Dock = System.Windows.Forms.DockStyle.Bottom; + this.panel1.Location = new System.Drawing.Point(0, 280); + this.panel1.Name = "panel1"; + this.panel1.Size = new System.Drawing.Size(740, 28); + this.panel1.TabIndex = 0; + // + // button1 + // + this.button1.Dock = System.Windows.Forms.DockStyle.Right; + this.button1.Location = new System.Drawing.Point(665, 0); + this.button1.Name = "button1"; + this.button1.Size = new System.Drawing.Size(75, 28); + this.button1.TabIndex = 0; + this.button1.Text = "New"; + this.button1.UseVisualStyleBackColor = true; + this.button1.Click += new System.EventHandler(this.button1_Click); + // + // txtBox + // + this.txtBox.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + this.txtBox.Dock = System.Windows.Forms.DockStyle.Fill; + this.txtBox.Location = new System.Drawing.Point(0, 0); + this.txtBox.Multiline = true; + this.txtBox.Name = "txtBox"; + this.txtBox.Size = new System.Drawing.Size(740, 280); + this.txtBox.TabIndex = 1; + // + // Form1 + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(740, 308); + this.Controls.Add(this.txtBox); + this.Controls.Add(this.panel1); + this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); + this.Name = "Form1"; + this.Text = "Routes Key Generator"; + this.panel1.ResumeLayout(false); + this.ResumeLayout(false); + this.PerformLayout(); + + } + + #endregion + + private System.Windows.Forms.Panel panel1; + private System.Windows.Forms.Button button1; + private System.Windows.Forms.TextBox txtBox; + } +} + diff --git a/SOLVER/RoutesKeyGen/Form1.cs b/SOLVER/RoutesKeyGen/Form1.cs new file mode 100644 index 0000000..cabb3e6 --- /dev/null +++ b/SOLVER/RoutesKeyGen/Form1.cs @@ -0,0 +1,209 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.Text; +using System.Windows.Forms; + +namespace RoutesKeyGen +{ + public partial class Form1 : Form + { + public Form1() + { + InitializeComponent(); + Gen(); + } + + private void button1_Click(object sender, EventArgs e) + { + Gen(); + } + + private void Gen() + { + txtBox.Clear(); + CRC32 crc32 = new CRC32(); + Random rnd = new Random(); + + for (int x = 0; x < 5; x++) + { + byte[] ba = new byte[8]; + for (int i = 0; i < ba.Length; i++) ba[i] = (byte)rnd.Next(0, 255); + string key = Base58.GetString(ba).ToUpper(); + + ba = crc32.CRC32Arr(ba, true); + key += BitConverter.ToString(ba).Replace("-", ""); + if (char.IsDigit(key[0])) key = "R" + key.Substring(1); + txtBox.Text += + String.Format("\r\n\r\n", key, DateTime.Now.AddYears(1)) + + String.Format("\r\n\r\n", key, DateTime.Now.AddYears(1)); + }; + } + } + + public class Base58 + { + // + // Max 8 bytes (CRC64 or 2xCRC32) + // https://ru.wikipedia.org/wiki/Base58 + // Check: https://incoherency.co.uk/base58/ + // Check: https://www.browserling.com/tools/base58-encode + // + public static string GetString(byte[] data) + { + string digits = "123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz"; + + ulong numberValue = 0; + for (int i = 0; i < data.Length; i++) + numberValue = numberValue * 256 + data[i]; + + string result = ""; + while (numberValue > 0) + { + int remainder = (int)(numberValue % 58); + numberValue /= 58; + result = digits[remainder] + result; + }; + + // Append `1` for each leading 0 byte + for (int i = 0; i < data.Length && data[i] == 0; i++) + result = '1' + result; + + return result; + } + + // + // Max 8 bytes (CRC64 or 2xCRC32) + // https://ru.wikipedia.org/wiki/Base58 + // Check: https://incoherency.co.uk/base58/ + // Check: https://www.browserling.com/tools/base58-encode + // + public static string GetString(ulong numberValue) + { + string digits = "123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz"; + + ulong original = numberValue; + string result = ""; + while (numberValue > 0) + { + int remainder = (int)(numberValue % 58); + numberValue /= 58; + result = digits[remainder] + result; + }; + + // Append `1` for each leading 0 byte + for (int i = 0; i < 8 && (((byte)(original >> 56 - 8 * i) & 0xFF) == 0); i++) + result = '1' + result; + + return result; + } + } + + public class CRC32 + { + private const uint poly = 0xEDB88320; + private uint[] checksumTable; + + public CRC32() + { + checksumTable = new uint[256]; + for (uint index = 0; index < 256; index++) + { + uint el = index; + for (int bit = 0; bit < 8; bit++) + { + if ((el & 1) != 0) + el = (poly ^ (el >> 1)); + else + el = (el >> 1); + }; + checksumTable[index] = el; + }; + } + + public uint CRC32Num(byte[] data) + { + uint res = 0xFFFFFFFF; + for (int i = 0; i < data.Length; i++) + res = checksumTable[(res & 0xFF) ^ (byte)data[i]] ^ (res >> 8); + return ~res; + } + + public byte[] CRC32Arr(byte[] data, bool isLittleEndian) + { + uint res = CRC32Num(data); + byte[] hash = new byte[4]; + for (int i = 0; i < 4; i++) + { + if (isLittleEndian) + hash[i] = (byte)((res >> (24 - i * 8)) & 0xFF); + else + hash[i] = (byte)((res >> (i * 8)) & 0xFF); + }; + return hash; + } + + public ulong CRC32mod2Num(byte[] data) + { + uint res1 = 0xFFFFFFFF; + uint res2 = 0xFFFFFFFF; + + for (int i = 0; i < data.Length; i++) + { + if (i % 2 == 0) + res1 = checksumTable[(res1 & 0xFF) ^ (byte)data[i]] ^ (res1 >> 8); + else + res2 = checksumTable[(res2 & 0xFF) ^ (byte)data[i]] ^ (res2 >> 8); + }; + + res1 = ~res1; + res2 = ~res2; + + ulong res = 0; + for (int i = 0; i < 4; i++) + { + ulong u1 = ((res1 >> (24 - i * 8)) & 0xFF); + ulong u2 = ((res2 >> (24 - i * 8)) & 0xFF); + res += u1 << (56 - i * 16); + res += u2 << (56 - i * 16 - 8); + }; + + return res; + } + + public byte[] CRC32mod2Arr(byte[] data, bool isLittleEndian) + { + uint res1 = 0xFFFFFFFF; + uint res2 = 0xFFFFFFFF; + + for (int i = 0; i < data.Length; i++) + { + if (i % 2 == 0) + res1 = checksumTable[(res1 & 0xFF) ^ (byte)data[i]] ^ (res1 >> 8); + else + res2 = checksumTable[(res2 & 0xFF) ^ (byte)data[i]] ^ (res2 >> 8); + }; + + res1 = ~res1; + res2 = ~res2; + + byte[] hash = new byte[8]; + for (int i = 0; i < 4; i++) + { + if (isLittleEndian) + { + hash[i * 2] = (byte)((res1 >> (24 - i * 8)) & 0xFF); + hash[i * 2 + 1] = (byte)((res2 >> (24 - i * 8)) & 0xFF); + } + else + { + hash[7 - i * 2] = (byte)((res1 >> (24 - i * 8)) & 0xFF); + hash[7 - i * 2 - 1] = (byte)((res2 >> (24 - i * 8)) & 0xFF); + }; + }; + return hash; + } + } +} \ No newline at end of file diff --git a/SOLVER/RoutesKeyGen/Form1.resx b/SOLVER/RoutesKeyGen/Form1.resx new file mode 100644 index 0000000..a012a06 --- /dev/null +++ b/SOLVER/RoutesKeyGen/Form1.resx @@ -0,0 +1,3030 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 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 + + + + + AAABABAAEBAQAAEABAAoAQAABgEAABgYEAABAAQA6AEAAC4CAAAgIBAAAQAEAOgCAAAWBAAAMDAQAAEA + BABoBgAA/gYAABAQAAABAAgAaAUAAGYNAAAYGAAAAQAIAMgGAADOEgAAICAAAAEACACoCAAAlhkAADAw + AAABAAgAqA4AAD4iAAAQEAAAAQAgAGgEAADmMAAAGBgAAAEAIACICQAATjUAACAgAAABACAAqBAAANY+ + AAAwMAAAAQAgAKglAAB+TwAAQEAAAAEAIAAoQgAAJnUAAEhIAAABACAAiFQAAE63AABgYAAAAQAgAKiU + AADWCwEAgIAAAAEAIAAoCAEAfqABACgAAAAQAAAAIAAAAAEABAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAACAAACAAAAAgIAAgAAAAIAAgACAgAAAgICAAMDAwAAAAP8AAP8AAAD//wD/AAAA/wD/AP// + AAD///8AAAAAAAAAAAAAAAAAB3d3cAB3d3d3dweAAHB3d3cHFwAAB4d3B3ZwAAAHd1eHcXAAAAd3+P+H + cAAABwj4//dwAAAAd4+IdwAAAABXiHcHAAAAACcHd3cAAAAIV3JTZwAAAAcAd4B3cAAABwAAAAdwAAAA + AAAAAHAAAAAAAAAAAAD//wAA/4EAAMABAADAAwAA4AcAAOAHAADgBwAA4AcAAPAPAADwDwAA8A8AAOAP + AADsRwAA7+cAAP/3AAD//wAAKAAAABgAAAAwAAAAAQAEAAAAAAAgAQAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAIAAAIAAAACAgACAAAAAgACAAICAAACAgIAAwMDAAAAA/wAA/wAAAP//AP8AAAD/AP8A//8AAP// + /wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAd3cHcHdwAAd3d3d3d3d3dSdQAABwd3B3cHcHNH + dwAAB3B3h3d3dWc3cAAAAHeId3UlJxZSAAAAAAd3dwd3V3cQAAAAAAdXd4iIdwdwAAAAAAN2eP///3dw + AAAAAAYXj/j//4ZwAAAAAAcF/4f//3NwAAAAAAdyj///93RwAAAAAAdweHh3dwcAAAAAAAd1eIh3dxcA + AAAAAAcnB3d3cncAAAAAAAhXcHFhR3UAAAAAAAcHd3Z3N3cAAAAAAAdwBwcXB3dwAAAAAHAAAAAAAHdw + AAAAAHcAAAAAAHd3AAAAAHAAAAAAAAd3AAAAAAAAAAAAAAB3AAAAAAAAAAAAAAAAAAD///8A////AP/g + AwDAAAMA4AADAOAABwDwAA8A+AAfAPgAHwD4AB8A+AAfAPgAHwD4AB8A+AA/APgAPwD4AD8A+AA/APgA + PwD5gh8A8/8fAPP/DwD3/48A///PAP///wAoAAAAIAAAAEAAAAABAAQAAAAAAAACAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAAICAAIAAAACAAIAAgIAAAICAgADAwMAAAAD/AAD/AAAA//8A/wAAAP8A + /wD//wAA////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHd3AAAAAH + d3gAAAd3cWcXcHB3eAAAB3dwd3d3d3cHdndSd3AAAAd3cId3d3dHdxdzQ3dAAAAAcHV3cHB3N3dnB0F3 + cAAAAAdyd4d3d3VyVwd2dwAAAAAHB4h4d3UndSdxcXAAAAAAAHh4h3F3R3JXdnYAAAAAAAB3V3dHYTYX + dwdwAAAAAAAAdzZTd///h3B3gAAAAAAAAHd3d//////4cXAAAAAAAAAAdS//f////3dwAAAAAAAABwd/ + //////8HcAAAAAAAAAcHD/93j//3d3AAAAAAAAAHcH//////gHdwAAAAAAAAB3B4iIiIh3dwAAAAAAAA + AAcHCHeId3hwVwAAAAAAAAAHcWiIiId3BycAAAAAAAAABwcHF3dSd3V3AAAAAAAAAAdHcHRzdXB3dwAA + AAAAAAAHN3dydDYWByUAAAAAAAAABwcHdTRwd3d3cAAAAAAAAHVwB3BzdXd3d3AAAAAAAAAncAAAAAAA + B3d3AAAAAAAHUgAAAAAAAAd3cQAAAAAAB3cAAAAAAAAAd3cAAAAAAAdwAAAAAAAAAAd3cAAAAAAAAAAA + AAAAAAAACHAAAAAAAAAAAAAAAAAAAAcAAAAAAAAAAAAAAAAAAAAAAAAA//////////////4f4PgAA+AA + AAfgAAAH8AAAB/gAAA/4AAAf/AAAP/wAAH/8AAB//AAAf/4AAH/+AAB//gAAf/4AAH/+AAD//gAA//4A + AP/+AAD//gAA//4AAP/+AAB//GAAf/x/+D/4//g/+P/8P/n//h////8f////v/////8oAAAAMAAAAGAA + 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 + dQB1dHYAeHd5AHt5ewB8e30AfXx+AIF/gQCCgYIAhIKEAIeFhwCJh4kAiomKAI2MjgCSkZIAk5KUAJST + lACWlJYAmZeZAJmYmgCbmpwAnZyeAKSjpACnpqcAq6usAK+urwCwr7AAt7e4ALu6uwDHx8gAzMzNAN3d + 3QDh4eEA5OPkAOjn6AD5+fkA/v7+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAADApGhcfNgAAABoOKRYmJR8OFhcCJTIAAAAdCR8rGB8WIgwOAx8AAAAA + AB87MhoeDhYWDhIAAAAAAAAaFh8YNjcpFhYwAAAAAAAAHxowQkBCQkEaKwAAAAAAAC0CN0I7QkJAETIA + AAAAAAAADDBAQEA9FxgAAAAAAAAAAAQfOTwlKwQWAAAAAAAAAAAJCQQWEhoWGgAAAAAAAAAyDRYOCQkO + GBgAAAAAAAAADQAAMiwyACklKQAAAAAAABgAAAAAAAAAJRYAAAAAAAAAAAAAAAAAAAAiAAAAAAAAAAAA + AAAAAAAAAAAAAP//AAD/gQAAwAEAAMADAADgBwAA4AcAAOAHAADgBwAA8A8AAPAPAADwDwAA4A8AAOxH + AADv5wAA//cAAP//AAAoAAAAGAAAADAAAAABAAgAAAAAAEACAAAAAAAAAAAAAAABAAAAAQAAAAAAADw6 + PQA+PD8AQD5BAENBRABEQ0UASEZJAEpISwBLSUwATEtNAE5MTwBPTVAAUE5RAFJQUwBTUVQAVFJVAFVU + VgBXVVgAWFZZAFlYWgBbWVwAXFpcAF1cXgBfXWAAYF5hAGJgYgBjYmQAZGJlAGZkZgBnZWgAaGZpAGpo + agBraWwAbGttAG1sbgBvbXAAcG9xAHJwcgBzcnQAdHJ0AHV0dgB3dngAeHZ5AHl4egB7enwAfHt9AH58 + fgB/foAAgH6AAIGAggCDgoQAhIOEAIWEhgCLiosAjIuMAI6NjwCPjpAAkI+QAJKRkgCTkpQAlJOVAJWU + lgCZmJoAm5qcAJybnQCdnJ4AoJ+hAKemqACop6gAqaiqALe2twC3trgAvr2+AMTDxADHxscAycnJAMvL + zADNzc4A0tLSAN7e3wDk4+QA6urqAO/u7wDw7/AA8vHyAPb29gD5+fkA/v7+AAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANy0l + HQcaFgQPGiIAAAAAJSUPGiUtEj0aLRYiHw8qJAcRMBYAAAAAACkYB0EqFioSJQctMAcjGAMSNykAAAAA + ADQfAjQtPTQ0Ih8fIg8PGg8aGgAAAAAAAAAtGkhJOSUlGhwYGCIWByQPAAAAAAAAAAAAJS1BPRgSGgsY + CyUPJQcAAAAAAAAAAAAAEhgaFhhFTU9JPSIELT0AAAAAAAAAAAAAESUfPVVVVVdXV1clGiIAAAAAAAAA + AAAADwsHUldSUldXV1dHGiIAAAAAAAAAAAAAFgMBUFdMN1VXV1UlHzQAAAAAAAAAAAAALRoBTFdXV1dX + Vz4fB0EAAAAAAAAAAAAAOAwEN0JDRT00Nw8HHQAAAAAAAAAAAAAANw8HPUZMTjcaLQsHJQAAAAAAAAAA + AAAANwcHBwcSGB8YJRoWFgAAAAAAAAAAAAAAQQQ0FgcaFhIHDwstHQAAAAAAAAAAAAAAFgcYIhYaByIP + HyItJQAAAAAAAAAAAAAAFi0AACUSFh8vACVDGh0AAAAAAAAAAAAiEgAAAAAAAAAAAAAWQRoAAAAAAAAA + AAAaLQAAAAAAAAAAAABCNColAAAAAAAAAAAlAAAAAAAAAAAAAAAAKhY0AAAAAAAAAAAAAAAAAAAAAAAA + AAAAACIvAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP///wD///8A/+ADAMAAAwDgAAMA4AAHAPAA + DwD4AB8A+AAfAPgAHwD4AB8A+AAfAPgAHwD4AD8A+AA/APgAPwD4AD8A+AA/APmCHwDz/x8A8/8PAPf/ + jwD//88A////ACgAAAAgAAAAQAAAAAEACAAAAAAAAAQAAAAAAAAAAAAAAAEAAAABAAAAAAAAOjg7ADs5 + PAA8Oj0APjw/AD89QABAPkEAQUBCAENBRABEQkUARkRHAEdFSABIRkkASUhKAEtJTABMS00ATUxOAE9N + UABQTlEAUVBSAFNRVABUUlUAVVRWAFdVWABYVlkAWVhaAFtZXABcWl0AXlxeAF9dYABgXmEAYWBiAGNi + ZABkYmUAZmRmAGdlaABoZmkAamhqAGtpbABsam0AbWxuAG9ucABwbnAAcXByAHNxdAB0cnUAdXR2AHd1 + eAB4dngAeXh6AHt6fAB8enwAfn1/AH9+gACAfoAAgYCCAIOChACEg4QAhYSGAIeGiACIhogAiYiKAIuK + jACMi40Ajo2OAI+OkACQj5EAkpCSAJOSlACUkpQAlpWXAJeWmACYlpgAmZiZAJybnACenJ4AoJ+gAKGg + oQCjoqQApKOkAKalpwCop6gAqqmqAKuqrACsq60Arq2uALKxsgC4t7gAubi5ALy7vQC9vL0AwsHCAMbG + xwDKycoAzMvMAM/OzwDR0NEA2dnZAN/f4ADm5uYA6OjpAO7u7gDx8PEA9fX1APv7+wD+/v4AAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAFUE7GgAAAAAAAAAAQDs1QEoAAAAAAEAuJR4TCCIIKSoTCAgiNkRS + AAAAAAAIHiQlECIyGh47LiVAJDIDMBouKiQQBiJAIgAAAAAAADsuLi4DQEguKUolLkAaRAgqGCoaJQgF + LkAFAAAAAAAAAB4lJQNKIiUiFRgyGhEXMkAQIhUkCAM7KTYAAAAAAAAAABUkAzUiYTA2KTsuJS5AEA0d + Bi8dA0AaAAAAAAAAAAAAOwgaYGYyUTsdLiQYIkEGFTIVEDsDGgAAAAAAAAAAAAAAQE4yVmElIhoyIhAi + NgMdJBUlGCIAAAAAAAAAAAAAAAA7FSIiLkQTDSIIGBgRAyIuCEAlAAAAAAAAAAAAAAAAAEAaJRoeFRpS + ZGlpaWJRKRAQMlgAAAAAAAAAAAAAAAAAQCUlOx07ZmlpaWlpaWlpTi4QLgAAAAAAAAAAAAAAAAAABRok + ImlpaVJjaWlpaWlpIjZEAAAAAAAAAAAAAAAAAAAeCwYkaWlpaWlpaWlpaWUQESIAAAAAAAAAAAAAAAAA + ABUIBRVpaWkuJWVpaWlpPSQyIgAAAAAAAAAAAAAAAAAAFyUQA2lpaWlpaWlpaV4DMhcqAAAAAAAAAAAA + AAAAAAAlJAYGYF5YWF5eWFJAGgMaJQAAAAAAAAAAAAAAAAAAAC4DAxFKSkpgW0AaRFspCAguAAAAAAAA + AAAAAAAAAAAAJBgaBlJgWF5bRyUuGhADJSUAAAAAAAAAAAAAAAAAAAAYFRADEA0VERolGkAiIhoiGgAA + AAAAAAAAAAAAAAAAADsDKjIGDRUwLiUXGhUQMjU1AAAAAAAAAAAAAAAAAAAAJBUeGj0TECoVFQgXBQYa + JRUAAAAAAAAAAAAAAAAAAAATCCUQJSUeCAg7AyQuJUoiMkoAAAAAAAAAAAAAAAAAGiIdAABEFQgLFR0I + LkAlRE4eDQAAAAAAAAAAAAAAAAANGkQAAAAAAAAAAAAAAAAyJD0yMgAAAAAAAAAAAAAAOxEYAAAAAAAA + AAAAAAAAAD0iUi4RAAAAAAAAAAAAAAAkJUQAAAAAAAAAAAAAAAAAACQ7JCoAAAAAAAAAAAAAACUlAAAA + AAAAAAAAAAAAAAAAACIlQEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABBKRwAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAABoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP// + ///////////+H+D4AAPgAAAH4AAAB/AAAAf4AAAP+AAAH/wAAD/8AAB//AAAf/wAAH/+AAB//gAAf/4A + AH/+AAB//gAA//4AAP/+AAD//gAA//4AAP/+AAD//gAAf/xgAH/8f/g/+P/4P/j//D/5//4f////H/// + /7//////KAAAADAAAABgAAAAAQAIAAAAAAAACQAAAAAAAAAAAAAAAQAAAAEAAAAAAAA6ODsAOzk8ADw6 + PQA+PD8APzxAAEA+QQBCQEMAQ0FEAERCRQBFREYAR0VIAEhGSQBKSEoAS0lMAExKTQBNTE4AT01QAFBO + UQBRUFIAU1FUAFRSVQBVVFYAV1VYAFhWWQBZWFoAW1lcAFxaXQBdXF4AX11gAGBeYQBiYGIAY2FkAGRi + ZQBmZGYAZ2ZoAGhmaQBqaGoAa2lsAGxqbQBtbG4Ab21wAHBucABxcHIAc3F0AHRydAB1dHYAd3V4AHh2 + eAB5eHoAe3l8AHx6fAB9fH4Af36AAIB+gACCgIIAg4KEAISChACFhIYAh4aIAIiHiQCKiIoAi4qMAIyL + jQCOjY4Aj46QAJCPkQCRkJIAk5KUAJSTlACVlJYAl5aYAJiWmACZmJoAnJucAJ2dngCfnqAAoJ+gAKGg + oQCjoqQApKOkAKalpgCop6gAqaiqAKyrrACtrK4Ar6+wALGwsgC0s7QAtbW2ALe3uAC5uboAu7q8ALy7 + vAC+vb4Av77AAMC/wADDwsMAxMPEAMbGxgDIx8gAycjJAMvLzADOzc4A1NPUANbW1gDZ2dkA29vcAN/e + 3wDh4OEA5OPkAOXl5QDn5+gA6OfoAOjo6QDu7u4A8fHxAPX19QD5+fkA/v7+AAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + 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 + AAAAAAAAAAAAACQQJwQAAAAAAAAAAAAAAAAAAAAAAAAAABMQTlQZJwcAAAAAAAAAAAAAAAAAAAAAABMT + OSAAAAAAAAAAAAAAAAAAAAAAAAAAAAAZXBk8LTMAAAAAAAAAAAAAAAAAAAAASjknFgAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAzB1wQRAczAAAAAAAAAAAAAAAAAAAAABkgRAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + GScwFlkgAAAAAAAAAAAAAAAAAAAAAEJHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABkgBk4eAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHI2UnAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFhZEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAD///////8AAP///////wAA////////AAD/////zn8AAP///8AADwAA8AeAAAAP + AADwAAAAAA8AAPgAAAAADwAA+AAAAAAPAAD8AAAAAB8AAPwAAAAAHwAA/gAAAAA/AAD/AAAAAH8AAP+A + AAAA/wAA/8AAAAH/AAD/gAAAA/8AAP/AAAAD/wAA/8AAAAP/AAD/wAAAA/8AAP/AAAAD/wAA/8AAAAP/ + AAD/wAAAA/8AAP/AAAAD/wAA/8AAAAf/AAD/wAAAB/8AAP/gAAAH/wAA/+AAAAf/AAD/4AAAD/8AAP/g + AAAP/wAA/+AAAA//AAD/4AAAD/8AAP/gAAAP/wAA/+AAAB//AAD/4AAAD/8AAP/AAAAP/wAA/8AAAAf/ + AAD/g4AAA/8AAP+H4BwD/wAA/4f//gH/AAD/D///Af8AAP8P//+B/wAA/h///4D/AAD/H///wP8AAP8/ + ///g/wAA//////D/AAD/////+P8AAP///////wAA////////AAAoAAAAEAAAACAAAAABACAAAAAAAEAE + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + 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 + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADOzs8HAAAAAAAAAADOzs8MAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAPjw/AT48PwI+PD8bPjw/ND48P0o+PD9fPjw/ez07PuA+PD+TPTs+nj07Ptc+PD9/PTs+fG5s + b04AAAAAAAAAAAAAAAAAAAAAnp2fKz48P5Q+PD+jPTs+pT07Ppg9Oz6CPTs+Yj48P0Y+PD9CPTs+WT48 + P3g/PUCZQ0FEuFBPUdlXVVjxUU9S/0NBRP5mZGf/QkBD/29ucP9wb3H/UU9S/0ZER/9FQ0b/YF9h/4KA + gv+TkpP/bWtulAAAAAAAAAAAAAAAAAAAAACenZ8TPTs+82FfYv9pZ2r/cG5w/0tJTP9mZWf/e3p8/15c + Xv9gXmH/hIOF/3V0dv9ramz/iYiK/2ppa/97enz/PDo9/3h3ef9aWVv/dHN1/3Bvcf9nZWj/S0pM/0A+ + Qf9mZGf/j42P/2VkZv9ubG5uAAAAAAAAAAAAAAAAAAAAAAAAAAA8Oj2fdnV3/3Bvcf9zcnT/Ozk8/4yL + jf+Ylpj/dXN2/3Bucf+gn6D/aWhq/3V0dv+Mi43/W1pc/5SSlP9EQ0X/cG5w/1hWWf9xb3H/XFpd/2po + av9FQ0b/Pjw//3Jxc/+OjY//Pz1A/W5sbyQAAAAAAAAAAAAAAAAAAAAAAAAAAD48PzJgXmD7a2ps/2xq + bP89Oz7/nJuc/2FgYv9ubG//YV9i/1ZUV/9ZV1r/enl7/19dX/9OTE//V1VY/3x6fP+KiYv/TkxP/2Ni + ZP9VVFb/aGZo/0FAQv89Oz7/h4aH/3Bvcf88Oj2mAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD07 + Pm5TUVT+aGdp/z48P/9/foD/Z2Vn/9ra2v96eHr/gX+B/29ucP+DgoT/c3F0/21sbv9wb3H/jYuN/09N + UP9LSUz/YF5h/0E/Qv93dnj/X11g/zw6Pf+KiYv/PTs+1D48PxMAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAD07Pp5HRUf+WVha/9DQ0P/x8PH/fXt9/6alp/+GhYf/YF9h/3Vzdf9qaGr/WFZZ/2Zk + Z/+Qj5H/Q0FE/1RSVf98e33/U1FU/0pIS/+Eg4X/QD5B/z48P9Y+PD8XAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAD07Ppmko6T/eXh6/7Kxsv/Y2Nj/bWtt/2RjZf9bWlz/fn1//2Jg + Y/9LSUz/Z2Vn/4B/gf87OTz/Xl1f/2dmaP9XVVj/bWxu/1hWWP88Oj3KPjw/FgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUE5QsVhWWf9jYmT/YmFj/3V0dv+Uk5X/T01Q/0pI + S/9hYGL/RkRH/1lXWv9YVln/T05Q/zw6Pf9mZGb/cnFy/0E/Qv+Pjo//amlr/z48P2IAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABBP0KeXlxf/25sb/9eXV//X11g/1VU + Vv9dW17/rKut/+jo6f////////////7+/v/f3+D/qKeo/3Bucf9OTU//SkhK/399f/+5uLn/Pjw/cgAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD07PpJraWv/amlr/4OC + hP9fXmD/hIOE//X19f///////////////////////////////////////////6OipP91c3b/TkxP/3Bv + cf8+PD95AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPTs+dT89 + QP9bWlz/Z2Vn/2ZlZ//+/v7///////////+rqqz/5ubm/////////////////////////////v7+/2dl + aP+AfoD/lpWX/z48P2QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAA9Oz5TX15g/0ZER/9CP0P/aWdq//////////////////////////////////////////////////// + ///u7u7/TEtN/09NUP9kY2X/Pjw/PAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAD48Py9UUlX/Q0FE/z48P/9VU1b//v7+////////////dXR2/2xrbf/p6en///////// + /////////////4mHif9oZ2n/eXh5/2JgY/Y+PD8HAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAPjw/DFVTVvtvbW//R0ZI/z89QP/7+/v///////////////////////// + ///////////////////Lysv/PTs+/3x7ff9YV1n/QD9BvgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVlRX3GRiZf9BQEL/QT9C/9PS0//Kycr/vby9/7y7 + vf/My8z/zMvM/728vf+qqar/i4qM/1taXP89Oz7/Xlxe/21sbv8+PD94AAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/PUC9PTs+/z48P/9NS07/m5qb/52c + nv+cm5z/0NDQ/7++v/+Lioz/XFpd/5ORk//Gxsf/bWxu/0RCRP9EQkX/bm1v/z48PzgAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPjw/Cj48P8dYVln/Wllb/0E/ + Qv+trK3/z87P/7i3uP/My8z/wsHC/5mYmf9ramz/cG5w/15dX/9JR0r/Pjw//21sbv9tbG7+Pjw/FAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+PD8DPTs+2lRS + VP9NTE7/PDo9/0tJTP9JR0n/U1JU/09NUP9eXF//bWtt/1tZXP+OjI7/ZWNm/2VkZv9ZV1r/Xl1f/1hW + WPk+PD8BAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAA+PD+ePjw//3BucP97enz/QD5A/0lHSv9WVFb/eHZ4/3Rydf9sa23/VFNV/1xaXf9TUVT/TkxP/3x7 + ff+BgIL/Pjw/qAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAD48P8dRT1L/YV9h/1xaXf+Ih4n/UU9S/05NT/9wb3H/UVBS/1FQUv9HRUj/VlRX/z89 + QP9APkH/WVha/21rbv9OTE/3Pjw/HgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAA+PD9VUU9S/0ZER/9APkHFQ0FE821sbv9paGr/YF9h/0ZER/9CQEP/hIOF/zo4 + O/9pZ2r/dnV3/2xqbP+ZmJn/ZGNl/3x7ff9BP0KHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAPjw/AT89QNlmZGb/TkxP6T48Pxo+PD8dPz1AkURCRelFQ0b/RUNG/1dV + WP9gX2H/Q0FE+01LTso9Oz6UZ2Vo8pKRk/+hoKH/YV9h/0dFSPs+PD8jAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+PD8tSEZJ/1xbXf8+PD+OAAAAAAAAAAAAAAAAPjw/Az48 + Pyo+PD84Pjw/OD48PzE+PD8OAAAAAAAAAAA9Oz5ufHp8/2hmaf+Ihoj/fHp8/0E/QrEAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD07PqBQTlH/VlRW+z48Px4AAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/PUCeZ2Zo/6+ur/9xcHL/TkxP+z48 + PxYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+PD8DZGJl925tb/9APkGSAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD48PwhLSUzYg4KE/2pp + a/9wb3H/Pjw/agAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABKSEvRT01P1T48 + Pw4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD48 + Pz9eXV/3cG5w/4mIiv9BP0KVAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD48 + Pw4+PD8MAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAD48P25JSEr/n52f/z07PogAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAD07PlJJR0rjPjw/RgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAM7OzwIAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAD////////+3///AAPAAAADwAAAA+AAAAPgAAAH8AAAB/gAAA/8AAAf/AAAP/wAAD/8AAA//AAAP/wA + AD/8AAA//AAAf/4AAH/+AAB//AAAf/wAAH/+AAD//gAAf/wAAH/4AAA/+HAwP/h/+B/w//gf+P/8H/n/ + /h////8f////vygAAAAwAAAAYAAAAAEAIAAAAAAAgCUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAtrW2B7a1tgoAAAAAAAAAAAAAAAC2tbYNtrW2DwAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAD07PgE+PD8LPjw/FT48PyI9Oz45Pjw/nD48P7w9Oz5cPjw/ZD48 + P289Oz6sPjw/oj48Pzs9Oz47Pjw/SYaFhxkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPjw/BT07 + Pgs+PD8QPjw/FT07PhE+PD8OPjw/Bz48PwEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPjw/Bj07 + Pg8+PD8bPjw/Mj07Pk09Oz5oPTs+fT07PoM+PD+gPjw/vz89QM8+PD/gPjw/6UlHSvBBP0L7SUdK/0ZE + R/5APkH+Pjw//0lHSv9aWFv+R0VI/ktKTPtYVln8U1FT/YaFh2IAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AADOzs4RPTs+tj07PtY+PD/gPTs+6j07PuM9Oz7cPTs+yz07Prw9Oz6ePTs+dT07PmY9Oz5gPTs+cD07 + Po09Oz6rPz5AyEA+Qd1DQUTwRkRH/GdlZ/5PTlH+YmBj/m1rbf5IRkn+WVda/n18fv5HRUj+Pjw//qKh + ov5WVFf+hYSG/mRiZf5OTE/+QD5B/kE/Qv5ubG/+bGps/pKRk/6ZmJn+cG5w/oaFh1wAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAPjw/pj07PvpqaGv/bm1v/1JQU/5HRUj/kI+R/z07Pv9lY2b+VFNV/3Jx + c/5kY2X/PTs+/21rbv5zcXT/qKeo/1hWWf5+fH7/RENF/6qpqv5QTlH/cXBy/5eWl/46ODv/VVNW/4KB + g/5jYWP/Pz1A/5GQkf9eXV/+cG9x/3NydP9WVFf+Q0FE/z07Pv9nZmj+Y2Fj/6OipP91dHb+T01Q+YaF + hzsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPjw/QTs5PPlkY2X/kZCS/1ZVV/5aWVv/f36A/z07 + Pv+fnqD+cnFz/5iXmf6DgoP/REJF/3RydP6FhIb/tLS1/z48P/53dnj/VFNV/6uqq/5VVFb/WFZZ/6yr + rP4+PD//TEpN/4F/gf5wb3H/PTs+/5SUlf9eXV/+YmFj/3p4e/9NS07+Pjw//z48P/95eHr+V1VY/6Kh + ov9MSkz+REJF5IaFhw4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPTs+Cjw6Pc9PTVD+qKeo/l9d + X/5ZWFr+bWxu/jo4O/63t7j+f36A/oB+gP6Ylpj+SEZJ/oSDhf6cm53+u7q7/kZER/5UUlX+jYuN/qWk + pv5IRkn+YmFj/sPCw/5LSkz+T01Q/nNxdP5fXmD+PTs+/oOChP5eXF7+VFJU/nJwc/5GREf+PTs+/j07 + Pv5vbXD+YV9i/re2t/49Oz7+PTs+ngAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD07 + Pmo8Oj3/oJ+g/1dVWP51dHb/TkxP/zw6Pf/IyMn+cnBy/1lXWf5ycHP/Pjw//15cXv5IRkj/SUdJ/1dV + WP5ycHP/XFpd/0NBRP5DQUT/SkhL/2FgYv5sa23/zs7O/3V0dv5UUlX/REJF/3l4ev9eXF/+VlRX/2Ni + ZP9APkH+PTs+/z48P/95eHr+bm1v/6Wkpv86ODvzPjw/IwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAD07Pgc8Oj3HfHt9/lpYWv54dnj/QD5B/z07Pv+FhIb+SEZJ/0tJS/61tLX/l5aX/4qI + iv5qaGv/eHd5/2hnaf6vrq//h4aI/2NhZP5sa23/WFZY/2xrbf5XVVj/rayt/z89QP5HRUj/QkBD/1dW + WP9ZV1n+aGZp/2FfYf9NS07+RURG/z48P/+Jh4n+amhr/0hGSf89Oz6EPjw/AQAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+PD8dPjw/zE1LTv6BgIL/Pjw//z89QP99fH7+ysrL/0tK + TP6wsLH/5eXl/1VTVv6sq63/fnx+/0lHSv6npqf/XVxe/2NiZP59fH7/Z2Vn/2JgY/57eXz/j46Q/z48 + P/5aWFv/bm1v/1ZUV/89Oz7+b21v/2NhZP9CQEP+cG5w/z48P/+OjY7+WVdZ/z48P549Oz4EAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPTs+PT07PvFSUFP+Pjw//ltZ + XP7p6er+/v7+/t/f3/5oZmj+vLu8/o2Mjf6dnZ7+ZWRm/mJgY/6LiYv+TEpN/nFvcv5vbnD+b25w/kdF + SP53dXf+iomK/j89QP5cW13+gH6A/l1bXv5WVFf+QT9C/ltaXP5ZV1r+gX+B/j48P/4/PUD+PTs+mz07 + PgUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPjw/AT07 + PjU+PD+tUE5R/6emp/9RT1L+v7/A//7+/v7Ly8z/TUtO/6mpqv5fXmD/fXt9/1xbXf5/foD/V1VY/4GA + gv5cWl3/XFpd/1FPUv50cnT/e3l7/z48P/5oZmn/cG9x/1lXWv9eXV/+QkBD/0lHSv90cnT+eXd6/0VD + Rf49Oz6fPjw/CQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAA9Oz5qRkVH/sC/wP60s7T+U1FU/re2t/76+vr+np2e/mBeYf5GREf+gH+B/lFQ + Uv5wb3H+b25w/m9tcP5RT1L+UVBS/mlnav5ramz+bGpt/j07Pv53dXj+amhq/kVERv5lY2b+Pz1A/pyb + nf4/PUD+QkBD+z07PosAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8Oj2PgH+B/0lISv9YV1n+kZCS/1ZUV/5raWz/39/f/3Rz + df5fXWD/VlRX/z48P/5fXWD/b21v/0xKTP5HRUj/S0lM/1pZW/5PTVD/VVNW/z07Pv5/fX//cG9x/1xa + Xf9GREf+TEpN/6qpq/9eXV/+Q0FE8D48PyIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA9Oz56cW9x/0xKTf9bWlz+WVda/1JQ + U/5CQEP/TEpN/3t5e/5KSEv/Pz1A/0tJTP5vbXD/lJOU/6moqf7Ew8T/ubi5/6Khov58e33/UlBT/zw6 + Pf5XVVj/a2ls/1VTVv89Oz7+dXR2/4B/gf+8u7z+UlBT8j48PyYAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA9Oz5pRUNG/lxa + Xf6DgoT+TEtO/nJxc/6DgoP+REJF/l5cX/5VU1b+qqmq/ufn6P7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+ + /v7+/v7+8vLy/s7Nzv6Yl5n+UlBT/kZER/48Oj3+pqWn/kVDRv7u7u7+TkxP+j07PjcAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAA+PD9iWlhb/n18fv9RT1L+l5aY/3Z0dv5RT1L/XFpc/21rbv7p6en///////7+/v7///////////7+ + /v7///////////7+/v7///////////7+/v7/////6Ojo/2JgYv9TUVT+mpma/1JRU/+pqKr+SEZJ/D48 + PzsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAA+PD9GQD5B/UdFSP9/fX/+cW9x/3Z0dv5eXV//iYiK//n5+f7///////////7+ + /v7b29z/w8PD//7+/v7///////////7+/v7///////////7+/v7//////////+Tj5P9IRkn+Y2Fk/0NB + RP96eHr+REJF+D48PzQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA9Oz4xPjw/9z48P/5CQEP+YV9h/mRjZf5DQkT+5eXl/v7+ + /v7+/v7+/v7+/v7+/v6/vr/+rayu/vz8/P7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+ + /v6JiIn+SUdK/r69vv63t7j+RUNG7T07Ph0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+PD8bT05Q7Hd2eP9IRkn+S0lM/0E+ + Qv5APkH/4eDh//7+/v7///////////7+/v7///////////7+/v7///////////7+/v7///////////7+ + /v7///////////b29v9gXmH+Q0FE/0dFSP9jYWP+Pjw/3z48PwUAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+PD8EQD5B21lX + Wv9BP0L+PTs+/z07Pv46ODv/1tbW//7+/v7///////////7+/v7Jycr/r6+w/7u6vP719fX///////7+ + /v7///////////7+/v7//////////66trv9QTlH+QkBD/1tZXP9xb3L+Pz1AsQAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAPjw/vlJQU/5HRkj+PTs+/j07Pv48Oj3+vLu8/v7+/v7+/v7+/v7+/v7+/v5ta23+bm1v/mln + av7Y2Nj+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+29vc/k1LTv6EgoT+S0lM/rSztP6Mi43+PTs+bQAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAPTs+k1JRU/88Oj3+cXBy/zw6Pf4+PD//oaCh//7+/v7///////////7+ + /v7///////////7+/v7///////////7+/v7///////////7+/v78/Pz/aGZp/z07Pv+hoKH+QT9C/1hW + Wf9DQkT8Pjw/KAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPTs+cn17ff+CgYP+YV9h/z07Pv4+PD//h4aI//7+ + /v7///////////7+/v7///////////7+/v7///////////7+/v7//////f39//T09P6+vb7/Q0FE/zo4 + O/+Eg4X+RUNG/1pYW/8+PD/ePjw/EAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPTs+PlVTVv5ubG7+WFZY/j48 + P/5HRUj+aWdp/t/e3/62tbb+oJ+h/pqZmv6XlZf+qaip/rW0tf63trf+pqWm/pmZmv6Hhoj+aWdq/lVT + Vv5BP0L+TkxO/j07Pv5mZGf+amhr/np4ev49Oz6mAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPjw/JkE/ + Qv08Oj3+Pjw//z89QP5QTlD/Wllb/5mYmv6ZmJr/kZCR/66ur/6+vb7/rKut/5qZm/6KiYr/a2lr/2lo + av6Fg4X/v77A/8bFxv5IRkn/cnBy/0xKTf9LSUv+VlRX/1pYW/89Oz5eAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAPjw/FD48P+RHRUj+Pz1A/0RCRf5HRUj/SUdK/+jo6P7Ozs7/VVNW/7++v/7///////////7+ + /v7h4eH/cXBy/3h3ef6OjY//6Ofo/5KRkv5zcnT/UE5R/z48P/9lZGb+oqGi/3Rzdf89Oz40AAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAPTs+dT48P/FKSEv+hYSG/lNRVP5BP0L+R0VI/tra2/7x8fH+x8fH/rq6 + u/62tbb+p6an/qWkpf6DgoT+Wllb/klHSv5HRkj+Pz1A/kE/Qv47OTz+PTs+/j07Pv5IR0n+amhq/lRS + Vf49Oz4cAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPjw/aD07Pv9raWz+SEZJ/1tZXP49Oz7/Pjw//09O + UP48Oj3/REJF/0pIS/5CQEP/R0VI/2FfYv5/foD/X15g/1pZW/6GhYf/srGz/1RSVP6WlZb/Pz1A/21s + bv9ZV1r+cnFz/05NT/s9Oz4CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPjw/Ej48P+A9Oz7+Pjw//z88 + QP5dXF7/UE5R/0tJTP5TUVT/UlBT/3Z0d/5iYGP/UlBT/4qJi/56eXv/TUxO/0xKTf5WVVf/fXx+/0RC + Rf5BP0L/cG9x/1FQUv9dXF7+REJF/j07PrwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPjw/FT48 + P+c9Oz7+QD5B/6uqq/6OjY//REJF/z89QP5IR0n/Q0JE/1RSVf6Pjo//XVte/4OChP6Eg4X/T05Q/1JR + U/5LSkz/S0lM/3Fvcf5KSEv/UE5R/5STlf/Ix8j+SUdK/j48P3UAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAPTs+Hz07PupLSkz+SUdK/oKAgv5TUVT+U1JU/pybnP5dXF7+QkBD/k5NT/5cW13+SEZJ/k9N + UP5MSk3+QkBD/kVDRv5APkH+U1FU/j07Pv49Oz7+aGZo/lBOUf5NS07+ZmVn/j48P+09Oz4WAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAPjw/kz89QP9PTlD+Wlhb/z07Pv1TUVT/hoWH/4aFh/5cW13/Pz1A/19d + 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 + p/89Oz7SPjw/CQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPjw/AT07 + PnhDQUT+ZmVn/8fGx/89Oz7DPjw/AgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAA9Oz5QQT9C4lVTVf49Oz6NAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVlRXH1ZUV25WVFcSAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///////8AAP///////wAA/////85/AAD////4AAcAAPAP + 4AAABwAA4AAAAAAHAADwAAAAAAcAAPAAAAAABwAA8AAAAAAPAAD4AAAAAA8AAPgAAAAADwAA/AAAAAAf + AAD+AAAAAD8AAP4AAAAAfwAA/4AAAAH/AAD/gAAAAf8AAP+AAAAB/wAA/4AAAAH/AAD/gAAAAf8AAP+A + AAAB/wAA/4AAAAH/AAD/gAAAAf8AAP+AAAAD/wAA/8AAAAP/AAD/wAAAA/8AAP/AAAAD/wAA/8AAAAf/ + AAD/wAAAB/8AAP/AAAAH/wAA/8AAAAf/AAD/wAAAB/8AAP/AAAAP/wAA/8AAAA//AAD/wAAAB/8AAP/A + AAAH/wAA/4AAAAP/AAD/gAAAA/8AAP8DgAAB/wAA/wP6/AH/AAD+B//+AP8AAP4H//8A/wAA/g///4B/ + AAD+H///gH8AAP4f///AfwAA/////8B/AAD/////8P8AAP/////4/wAA////////AAAoAAAAQAAAAIAA + AAABACAAAAAAAABCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAJ6dnxuenZ8EAAAAAAAAAAAAAAAAAAAAAJ6dnweenZ8rAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+PD/6Pjw/iT48PyU+PD8pPjw/PT48 + Pz4+PD9rPjw/9T48PxE+PD8GAAAAAD48PwQ+PD8cAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD48 + PwE+PD8EPjw/BT48PwY+PD8nPjw/Rj48P18+PD9xPjw/ij48P6A+PD+zPjw/yT48P+4+PD//Pjw//z07 + Pv4+PD//Pjw//z48P/88Oj3/PTs+/z48P/8+PD/6Pjw/7Tw6PfU8Oj32Pjw/+J6dnyUAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+PD8JPjw/IT48PzQ+PD8/Pjw/UT48P1Q+PD9FPjw/Pj48 + PyY+PD8VAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPjw/AT48Pw8+PD8lPjw/Qj48 + P18+PD+CPjw/pTw6PcI+PD/cPDo96T48P/87OTz/QD5B/j48P/9BP0L/QkBD/0A+Qf89Oz7/Pz1A/3d2 + eP89Oz7/jIuN/zc0OP9dXF7/RUNG/0A+Qf89Oz7/WVha/4+OkP85Nzr/jYuN/1BOUf9ubW//sLCw/zs5 + PP+enZ8wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPjw/pj48P/0+PD//Pz1A/z48 + P/88Oj3/PTs+/z07Pv8+PD//PTs++j48P/c+PD/bPTs+rD48P5I+PD+GPjw/fT48P4s+PD+lPDo9wTw6 + Pd5APkHyPz1A/0JAQ/9HRUj/S0lM/z89QP+JiIr/ODY6/6qpqv82NDf/lZSW/0hGSf9HRUj/qaiq/2xr + bf9NS07/Pjw//0A+Qf/IyMj/NTM2/8TExf9APkH/cG5w/1RTVf9BP0L/QD5B/z48P/9ramz/TkxP/7W0 + tf91dHb/cXBy/7y7vP89Oz7/np2fIwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD48 + P0Y+PD/2Pjw//YF/gf80Mjb/eHd5/11cXv9GREf/enl7/2loav8+PD//U1JU/1FQUv9oZmn/VFNV/2Ri + ZP87OTz/Pjw//3V0dv9/foD/dHN1/5CPkf9iYWP/kpGT/0JAQ/9EQkX/zczN/zEvMv+srK3/Ojg7/7Cv + sP84Njn/QD5B/5mYmf9hYGL/ZGJk/0ZER/88Oj3/sbCx/zY0N/+1tbb/RkRH/3p5ev9iYGL/OTc6/0hG + Sf8+PD//VlRX/2poav+dnJ7/joyO/1dWWP+TkpP/PTs++Z6dnwoAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAA+PD8IPjw/3D07Pv9tbG3/YmFj/3d2eP9XVlj/YF5h/56en/9JR0r/PTs+/5aU + lv9gXmH/tbS1/3x6ff+Ylpj/QT9C/z07Pv+Qj5D/o6Kk/3p5e/+VlJX/TkxP/5WUlf9EQkX/Pjw//9bV + 1v9APkH/jYyO/zk3Ov/My8z/OTY6/z48P/+Hhof/YV9i/39+gP9APkH/Ozk8/6uqq/9APkH/lZSW/2dl + aP91c3b/U1FU/0E/Qv8+PD//Pjw//1FQUv+HhYj/dnR2/5qZmv87Ojz/cG5x/z48P7UAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD48P2c5Nzr/fn1//4B+gP92dXf/a2ps/11c + Xv+LiYv/Pz1A/z07Pv/DwsP/TkxO/8bGx/9vbW//oqGj/z07Pv9VVFb/dHJ0/5aVl/+FhIb/mpmb/zg2 + Of99e33/bGpt/0NBRP/Q0ND/SkhL/2tqa/82NDf/397f/0ZER/8+PD//hYSG/2BfYf97enz/QT9C/z07 + Pv+3trf/MS8y/4yLjP93dXf/X11g/1RSVf87OTz/Pjw//z48P/9NS07/lpSW/15cXv+ysrP/PDo9/0dF + SP8+PD98AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+PD8dPTs+90hG + Sf+SkZP/dXN1/2tqbP9gXmD/hYSF/zk3Ov84Njn/4eHh/0A+Qf/Z2dn/UE5R/7++v/82NDf/b21v/4iG + iP++vb7/pqan/42Mjf9IRkn/TkxO/6CfoP9XVlj/xsXG/0ZER/9zcnT/S0lM/+/v7/9UU1X/Ojg7/42M + jf9MS03/aWhq/zo4O/89Oz7/k5KU/0tKTP9nZWj/eXd5/1lXWf9HRUj/PTs+/z48P/8+PD//PTs+/6mo + qf9XVVf/09LT/zw6Pf8+PD/6Pjw/FgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAPjw/AT48P6k+PD//jIuN/25tb/9gX2H/fn1//1xbXf8+PD//Ozk8/+no6f9VU1X/t7e4/zUz + Nv+amZr/QT9C/05MT/9cW13/TEpM/z48Pv87OTz/R0VI/01LTv8xLzL/QT9C/0A+Qf9BP0L/QUBD/2Ff + Yf9wbnD/cXBy/7S0tf/s6+z/WFZZ/1FPUv8/PUD/Ojg7/5CPkP9PTVD/W1pc/4uKjP85Nzr/QD5B/z48 + P/8+PD//Pjw//0pIS/+8vLz/R0VI/9nZ2v84Njn/Pjw/iwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+PD8gPjw/8nh2eP95eHr/ZmRm/42Mjv9IRkn/PTs+/z07 + Pv/d3d3/VVNV/1lXWf9APkH/V1VY/4eGh/9APkH/mpma/1pZW/90c3X/SUdK/5mXmf/h4OH/jIqM/5SS + lP9lZGb/ZWNl/1BPUf88Oj3/T01Q/0E/Qv+Ih4n/paSm/z89QP9TUVT/VlRX/0E/Qv+Eg4T/cnFy/zk3 + Ov+ZmJr/QT9C/0lHSv9APkH/PTs+/z48P/9WVFf/wL/A/zg2Of9oZ2n/Pjw/8z48PxwAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD48P2Y8Oj38YV9i/15c + X/+KiYr/Pz1A/z89QP8/PUD/SUdK/0xKTf9KSUv/TUtN/+7u7v//////XVtd/5KSk/+bmpz/UU9S/399 + f/9bWVv/zs7O/zs5PP+Qj5D/aGZp/4uKjP9aWFv/SkhL/5mYmv+FhIb/jo2P/2lnaf8+PD//TUtO/0VD + Rv9APkH/PTs+/1FPUv88Oj7/q6qs/0A+Qf9WVVf/VVNV/z89QP8+PD//cnFz/7u6u/89Oz7/PTs+/z48 + P08AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAPjw/Vz48P/5QT1H/m5qc/z48P/8/PUD/PDo9/3p4ev/u7u7/ysnK/zo4O/99fH7//////7a1 + tv9CQEP/4eDh/zYzN/+mpab/Pjw//87Nzv81Mzb/iIeJ/0tJTP+TkpT/PTs+/3h2eP9mZGf/lJOU/4yK + jP9XVlj/Pz1A/2dmaP8yMDP/xcXG/z07Pv88Oj3/Ozk8/358fv90cnT/Pz1A/5OSk/83NTj/Pjw//359 + f/99fH7/Pjw//z48P1QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAD48PwE+PD+6PTs+/2JgYv8+PD//Pjw//3Rydf////////////// + ///Hxsf/S0lM/52cnf/8/Pz/WFZZ/6Ggov93dnj/l5aX/zQxNf+joqP/Q0FE/3p5e/9RUFL/hIOF/zUz + Nv+GhYf/VFJV/4qJiv+VlZb/TUtO/0A+Qf9eXF//RUNG/8zLzP83NTj/XVte/z48P/87OTz/dHJ1/zo4 + O/+7urv/Ojg7/z48P/9BP0L/PTs+/z48P1wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPjw/Ez48P60+PD/8Pjw//19e + YP9VU1X/ZGJl/9/f4P///////////9DQ0P87OTz/n5+g/6alpv9LSUz/trW2/2ZkZ/9RUFP/e3p8/3Ny + dP9eXF//fXx+/25sb/85Nzr/dnV3/0hGSf+RkJL/kZCR/z89QP9BP0L/d3V3/zY0N/+2tbb/Ojg7/2Vk + Zv9NS07/PDo9/z07Pv9CQEP/29vb/z89QP9KSEv/Pjw//z48P1wAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAPjw/Ij07Pv+cm5z/4eHh/0xKTf9CQEP/x8fI////////////dXR2/z06Pv+1tLX/NTM2/7Kx + s/9KSEv/YF5h/01MTv+lpKX/QkBD/5KRk/9jYmT/Ojc7/2JhY/9jYWT/enl7/5KQkv86ODv/Pjw//3p5 + e/82Mzf/p6an/zo4O/9tbG7/PTs+/zk3Ov94d3n/SUdK/6Ggof87OTz/PDo9+z48P1oAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAD48P0U9Oz7/UE5R/8LCwv/s7Oz/bGpt/0pIS/+4uLn/+Pj4//T0 + 9P9oZmj/Wlhb/1BOUf9bWlz/b25w/1VUVv9CQEP/xcTF/zo4O/97eXv/V1ZY/zg2Of9dXF7/eHZ4/25s + b/+Ih4j/OTc6/zw6Pf+Qj5H/Ojg7/399f/89Oz7/dHN1/z48P/9GREf/v76//zo4O/87OTz/Pjw/7T48 + P0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+PD9tXVte/4aFh/8/PUD/V1VY/5iY + mf+jo6T/NzU4/2BeYf/n5uf/5ubm/0VERv9ubW//NzU4/2xrbf9BP0L/Q0FE/9PT1P83NTj/V1ZY/1BO + Uf8+PD//V1ZY/3NxdP9UUlX/cXBy/z07Pv8+PD//lZSV/zc1OP+Ihof/X15g/05MT/8+PD//c3Fz/6yr + rP9KSEv/QT9C/z48P8UAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPjw/WGZl + Z/9TUVP/SEZJ/19eYP8+PD//R0VI/2dmaP9EQkX/S0lM/52cnv+KiIr/VlVX/0A+Qf8+PD//Pjw//z07 + Pv8zMTT/ODY5/1JQU/9vbW//aWdp/1pYW/87OTz/PDo9/zw6Pf8+PD//ODY5/4iGiP9EQkX/enh7/2hm + aP87OTz/PTs+/6Ggov98e33/kZCR/42Mjv8+PD/EAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAD48P0VKSEv/j42P/2JgYv9BP0L/c3J0/2VkZv9WVFf/Pz1A/z48P/8+PD//fnx+/0dF + SP89Oz7/RUNG/4B/gP+5uLn/7Ozs///////////////////////+/v7//v7+/9ra2v+npqj/cG5x/zo5 + PP8+PD//S0lM/29tcP9SUVP/Pjw//0VDRv/h4eH/PTs+/8/Oz/+QjpD/Pjw/1gAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+PD82Pz1A/z06Pv9MSk3/paSl/19eYP88Oj3/g4KE/6mo + qf9XVVj/REJF/1ZUVv9JR0r/pqWm/+3t7f////////////////////////////////////////////// + ///////////////////39/f/ycnK/29tb/88Oj3/PTs+/z48P/9nZWf/qKeo/zUzNv/z8/P/k5KU/z48 + P/QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPjw/Mzw6Pf6Pjo//bWtt/zk3 + Ov+SkpP/ubi5/0hGSf9FQ0b/jIuN/zg2Of9QTlD/2NjY//////////////////////////////////// + ////////////////////////////////////////////////////////sLCw/z07Pv9DQUT/t7a3/11c + Xv9kY2X/2dna/3h2eP8+PD/5AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD48 + Pxs+PD/7PDo9/3NydP+ZmJn/RUNG/1VTVv+3trf/cG9x/zw6Pf+NjI7/+vr6//////////////////// + //////////////////////////////////////////////////////////////////////////////// + //+hoKL/PDo9/5+en/86ODv/PTs+/zUzNv87OTz/Pjw/5z48PwUAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAA+PD8CPTs+80JAQ/8+PD//RUNG/6alpv+Hhoj/TEpN/0lHSv9iYGP//f39//// + ////////////////////////v76//1hWWP+1tbb///////////////////////////////////////// + /////////////////////////v3+/2JgY/9NTE7/Q0FE/2FfYf/Ozs7/fXt9/z48P98AAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD48P90/PUD/Pjs+/0ZER/88Oj3/YF5h/2hm + af88Oj3/srGz/////////////////////////////////+Hg4f+3trf/5ubm//////////////////// + //////////////////////////////////////////////////+wr7D/PTs+/3d2eP/k5OT/urq7/1RS + Vf8+PD+yAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA9Oz6+kZCR/3Fv + cf9GREf/UU9S/1FPUv87OTz/Pjw//5ybnP////////////////////////////////////////////// + ///////////////////////////////////////////////////////////////////9/f3/fHp8/z07 + Pv9JR0r/NjQ3/0dFSP8+PD//Pjw/jwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAPjw/kTw6Pf8/PUD/Q0FE/z07Pv89Oz7/Pjw//z48P/+NjI7///////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ////////vr2+/zo4PP8/PUD/RUNG/3p4e//FxcX/R0VI/z48P2MAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAD48P3VPTVD/fXt+/0pIS/89Oz7/Pjw//z48P/8+PD//enh6//// + /////////////////////////////4GAgv9XVlj/VFNV/2hmaf/V1NX///////////////////////// + /////////////////////////////2NhZP9lZGb/VFJV/0E/Qv9eXF//V1VY/z47P/8+PD8eAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+PD9JPTs+/0hGSP9IRkn/PTs+/z48 + P/8+PD//Pjw//2BeYf/+/v7///////////////////////////98en3/gH6A/359f/92dXf/09PU//// + /////////////////////////////////////////////4WEhv88Oj3/mZiZ/1BOUf96eXr/zMvM/7e2 + uP89Oz7cPjw/AQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPjw/IT07 + Pv1lZGb/RUNG/2JgYv9VU1b/Pjw//z48P/9JR0r/+vr6//////////////////////////////////// + /////////////////////////////////////////////////////////////8LBwv89Oz7/PTs+/8LB + wv9CQEP/PDo9/zg2Of9EQkX/Pjw/jwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAD48Pw4+PD/wdHN1/4uKi/+JiIr/TkxP/z48P/8+PD//OTc6//Pz8/////////////// + //////////////////////////////////////////////////////////////////////////////7+ + /v9sa23/Pjw//zw6Pf+0tLT/Ojg7/2RjZf+KiYv/Q0FE/z48P2oAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+PD8BPTs+2nV0dv9ZV1n/TEpN/0lHSf8+PD//Pz1A/zk2 + Ov/T0tP///////////////////////////////////////////////////////////////////////7/ + /v/8/Pz/8fHx/83Mzf+cm53/QkBD/z48P/84Njn/hoWH/z07Pv9YVlj/TUtO/z48P/s+PD8TAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD48P5toZmj/f36A/2xq + bP9CQUP/Pjw//0hGSf9EQkX/s7Kz/8jHyP+ko6T/hoWH/39+gP93dXf/cW9y/4OChP+UkpT/n56g/6Kh + o/+Qj5H/gYCC/3d1d/9mZGf/R0VI/zUyNv86ODv/PTs+/1NRU/9BP0L/Pjw//3Fvcf9DQUT/np6f/3Jw + cv8+PD/UAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAA+PD+KQ0FE/zw6Pf8+PD//QD5B/z48P/9JSEr/TUtO/6Ggof9VU1b/dXR2/5OSlP+Yl5n/pqWm/6+u + r/+VlJX/i4qM/3Rydf9nZWf/fHt9/2poav9ycHL/jo2P/5mYmf+7u7z/zMvM/z07Pv+Qj5D/Ojg7/1VT + Vv9VU1b/QT9C/19dX/9CQEP/Pjw/hAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAPjw/bj48P/88Oj3/Pjw//z48P/8+PD//S0lM/1JQU/93dnj///////r6 + +v9ycXP/TUtO/+Tk5P///////////////////////Pz8/01LTv9QTlH/REJF/y0rLv/39/f//////5ST + lf9HRkj/oqGj/z07Pv9CQEP/QT9C/zk3Ov/Av8D/WVha/z48P14AAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD48PyU/PUD/XFpd/z06Pv9bWVz/VVNW/z07 + Pv89Oz7/ZGJk///////29fb/dHN1/5eWmP/z8/T///////////////////////39/f+/vr//m5mb/6Cf + of+ioaP/qqmq/6yrrP9TUVT/Wllb/1JRU/8+PD//Pjw//2NiZP+sq6z/0dDR/0A+Qf8+PD8vAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD48Pyk+PD/7PTs+/zs5 + PP+Mi43/enl7/0A+Qf89Oz7/TUtO/1NRVP/9/f3/+fn5/9jY2P+zsrP/oqGi/5+eoP+Uk5T/hIOF/4eG + h/9mZGf/QT9C/zg2Of86ODv/Pz1A/zQyNf89Oz7/PTs+/zk3Ov89Oz7/Pjw//z48P/8+PD//Z2Zo/2Zl + Z/8/PUD+Pjw/JAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAA+PD8NPjw/7Dw6Pf9+fX//WFZY/1RTVf9kYmT/PTs+/z07Pv9BP0L/W1lc/zk3Ov87OTz/PDo9/z48 + P/8+PD//QUBC/z07Pv9WVFb/fn1+/1pYW/+Uk5T/Pj0//5STlP+ysLL/oJ+g/0ZER//Q0ND/OTc6/0dG + SP9hYGL/PDo9/1FPUv+rqqz/OTc6/j48PwEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAD48P34+PD//PDo9/z07Pv9APkH/Pjw//z07Pv84Njn/Pjw//1JQ + U/9hX2H/TkxP/1BPUf+DgoT/NjQ3/4eGiP8+PD//qKep/3Fwcv9paGr/YF9h/zk3Ov9oZmj/ioiK/1NR + VP9bWlz/TkxP/z07Pv9EQkX/d3V3/5WUlv9XVlj/PTs+/z48P+k+PD8EAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+PD8aPjw//j48P/8+PD//Pjw//0dE + R/+TkpT/lpWW/zw6Pf9CQEP/Q0FE/1ZVV/87OTz/iIaI/0pIS/+Hhoj/UU9S/5WUlf+PjpD/R0VI/2Vj + Zf89Oz7/Wllb/4aFhv84Njn/PTs+/0JAQ/9pZ2r/qaip/11bXf9LSUz/Pz1A/z48P/0+PD9HAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPjw/Yz48 + P/8+PD//Pjw//0tJS//w7/D/iIeJ/z48P/9APkH/QD5B/1BPUf88Oj3/T01Q/0VDRv+DgoT/iomK/359 + f/9sa23/mpma/0JAQ/95eHr/NzU4/0pIS/9GREf/Pz1A/5eWmP9RT1L/PTs+/0NBRP+pqKr//////358 + fv8+PD//Pjw/XgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAD48P0k+PD//RURG/z07Pv99fH3/jo2P/z06Pv9ubG7/ODY5/6uqq/92dHf/QT9C/0JA + Q/8/PUD/UE9R/1JQU/9nZWf/QkBD/1hWWf88Oj3/QT9C/0A/Qf89Oz7/TUtO/zs5PP89Oz7/PTs+/0lH + Sv9/foD/PDo9/1pYW/86ODv/SklL/z48P98+PD8JAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAD48PwM+PD/YPjw//1dVWP9sam3/Ojg7/z07Pv9ramz/W1lb/42M + jf+ysbL/SUdK/0RCRf9HRkj/cnBy/5KRk/+Ni43/YV9i/z07Pv9EQkX/bWxu/1VUVv9EQ0X/SkhL/4WD + hf9IRkn/Pjw//z48P/89Oz7/amhq/0E/Qv9paGr/uLe4/3Jxc/89Oz7/Pjw/cQAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+PD9YRUNG/z89QP89Oz7/UU9R/0hG + Sf8+PD/1Ozk8/1dVWP/R0NH/QD5B/3l4ev87OTz/Pz1A/3Vzdf9TUVT/S0lL/0lHSv88Oj3/Xl1f/6Ki + o/81Mzb/PDo9/3Bucf9JR0r/trW2/zk3Ov8+PD//Pjw//2NhZP/Hxsf/k5KU/0E/Qv8/PkD/cW9y/z07 + PswAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+PD8PPjw/70lH + Sv94dnj/RENF/0dFSP8+PD/3Pjw/LD48P9E8Oj3/Tk1P/1VUVv+1tLX/PTs+/0E/Qv+NjI7/ODY5/0RC + Rf9EQ0X/Pjw//2ppa/+npqj/OTc6/z48P/+TkpT/WFZZ/56dn/9MSk3/a2lr/8nJyf/j4+P/WFZY/z48 + P/9/foD/tLO0/46Njv9NS079Pjw/VAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + 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 + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAA+PD9BPz1A+j88QP9RUFL/NjQ3/9/e3/88Oj3+Pjw/HwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAD48P349Oz7/WVda/52cnf/IyMj/PDo9/D48PwcAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPjw/RT07Pu5QTlH/Wllb/z48 + P88AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAA+PD8YPjw/rj48P+M+PD9MAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACenZ8HAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP////////////////////////////////// + /////PP////////8AJ//////AAAAD/gB/wAAAAAP+AAAAAAAAA/4AAAAAAAAD/gAAAAAAAAf/AAAAAAA + AB/8AAAAAAAAH/wAAAAAAAA//gAAAAAAAD//AAAAAAAAf/+AAAAAAAD//4AAAAAAAf//wAAAAAAD///w + AAAAAAf///AAAAAAD///8AAAAAAf///wAAAAAB////AAAAAAH///8AAAAAAf///wAAAAAB////AAAAAA + D///8AAAAAAf///4AAAAAB////gAAAAAH///+AAAAAAf///4AAAAAB////gAAAAAH///+AAAAAA////4 + AAAAAD////gAAAAAP////AAAAAB////8AAAAAH////wAAAAAf////AAAAAB////4AAAAAH////gAAAAA + f////AAAAAB////8AAAAAP////wAAAAA/////AAAAAB////4AAAAAH////gAAAAAf///8AAAAAA////w + EAAAAB///+A8AAAAH///4D+ADwAP///gP///gA///8B///+AD///wH///8AH///A////4Af//4D////w + A///wf////AD///D////+AP//+f////8A/////////4D/////////wf/////////h//////////v//// + ////////KAAAAEgAAACQAAAAAQAgAAAAAABgVAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADy8vMDAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAA8vLzA/Ly8wMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAD07PiA9Oz6YPTs+NwAAAAAAAAAAAAAAAAAAAAAAAAAAPTs+dj07 + Pno9Oz4EAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPTs+Az48Pw4+PD8XPjw/Iz48 + Py89Oz5EPjw/Wz48P4c+PD/+PTs+tz48P4o+PD+MPjw/nD48P6o9Oz6bPjw/3D48P9c+PD9kPTs+WT48 + P1k+PD9bPjw/dUpISzgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPjw/Aj48Pwo+PD8VPjw/Ij07 + Pi8+PD84Pjw/Rj48P0A9Oz5YPjw/eT07Ppo9Oz6tPTs+vD07Psw9Oz7aPjw/4D48P+Y9Oz7xPTs+/D89 + QP8+PD//QT9C/j48P/8+PD//PTs+/0A+Qf9MSk3+SUdK/z48P/9EQkX8Pjw/+EE/QvxPTVD7QT9C/UpI + S5EAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAtrW3BD48Py4+PD9HPTs+Wz48 + P2c+PD92Pjw/gT48P3Y9Oz5mPjw/Xz48P0I+PD8zPjw/HT07Phc+PD8NPjw/Bj48PwQAAAAAPjw/Aj48 + PwU+PD8KPjw/ED07Phg+PD8qPjw/Qj48P1w9Oz57Pjw/lz48P7M9Oz7JPz1A2T07PulGREfvPz1A/UJA + Q/9DQUT+REJF/kA+Qf9SUVP/R0VI/kFAQv8+PD//Pjw//3t6ff9bWVz+XFpd/5OSlP9APkH/Xlxf/kVD + Rv9DQkT/PTs+/0hGSf9gXmH+gYCC/0hGSf+lpKX/VFJV/m1sbv/Dw8P/UlBT/0pIS5IAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAtrW2Ij07Ptg9Oz79PTs+/j89QP4+PD/+PDo9/j07 + Pv48Oj3+PTs+/j07Pv49Oz77PTs+9z07Pt89Oz6+PTs+oz07Ppo9Oz6PPTs+jz07Ppw9Oz6zPDo9yjw6 + PeE/PUDxQT9C/T48P/5QTlH+PTs+/lBOUf5HRUj+kZCR/jc1Of6fnqD+UlBT/m9ucP5raWv+UE9R/kdF + SP68u7z+ZmRm/ktJTP5CQEP+Pjw//pubnP52dXf+ZmVn/qWkpv5QT1H+aGZp/lJQU/5HRUj+QT9C/j07 + Pv48Oj3+f36A/k9NUP7Gxcb+bm1v/mpoav7Jycr+S0pM/kpIS4cAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAD48P5A+PD/zPTs+/Xl4ev9EQkX/fHt9/0A+Qf9lZGb+Ozk8/5aV + l/9XVlj/Pjw//05NT/5XVVj/SklL/3Fvcv9BP0L+XVtd/z07Pv88Oj3/eXh6/4SChP5cW13/tLS1/0RC + Rf/DwsP+Pjw//0ZER/9RT1L/z87P/zAuMf6enZ7/V1VY/3p5e/94d3j+QD5B/0E/Qv+sq6z/XFpd/l1c + Xv9RT1L/PTs+/3Z0dv+Fg4X+a2ps/46Nj/9XVlj/cXBy/l1cXv9CQEP/S0lM/z07Pv87OTz+fXx9/1JR + U/+7urv/gX+C/lVTVv+npqj/Ozk8/UpIS2gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAD48P0Y+PD/vPTs+/m9ub/9WVVf/lpWX/zs5PP95eHr+RUNG/7Cvsf9KSEv/Pjw//4OB + hP55eHr/d3Z4/8vKy/9BP0L+nZye/z48P/87OTz/np2f/6yrrf5kYmX/wsHC/z07Pv+ura7+REJE/0VD + Rv9LSkz/2NfY/z07Pv6Ih4j/T01Q/4SDhf+Ni43+PTs+/zs5PP+enZ7/XFpd/nNxc/9TUlT/PDo9/2Nh + Y/+SkZP+dHN1/21sbv92dHf/b25w/lNRU/9GREf/Pjw//z48P/88Oj3+jIuN/1JQU/+dnJ3/i4qL/j49 + P/9+fH7/PDo950pISzAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD48 + Pw0+PD+sOTc6/nx7ff9hYGL/nZyd/z48P/+NjI3+QkFD/5mXmf8+PD//PTs+/6+ur/5wb3H/h4aH/8nJ + yv85ODr+pKSl/0RCRf9JR0r/h4aI/6emp/5mZWf/yMjJ/zo4O/+GhYf+REJF/2hnaf9KSUv/1tbW/0xK + TP5ubG7/RkRG/4+Nj/+amZr+Pjw//zo4O/+bm5z/Xlxe/nh3ef9QTlH/PTs+/2loav+Uk5T+b21w/2Be + YP+Jh4n/X11g/k9NUP9CQEP/Pjw//z48P/89Oz7+mZia/1ZUV/+Af4D/oJ+g/js5PP9WVFf/PTs+0kpI + Sw0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+PD9cOzk8/Wtq + bP9ta23/qqiq/0A+Qf+QjpD+Pjw//5ORk/87OTz/Ozk8/8/Pz/5ZV1r/npye/6uqrP9XVVj+p6an/z07 + Pv9hYGL/a2ls/6Wkpf5zcXP/0M/Q/0NBRP9oZmj+PTo+/5uanP9VU1b/09LT/0dFSP5cW13/S0lM/56d + n/+rq6z+Pz1A/zw6Pf+WlZf/TkxP/mhnaf9MSk3/PTs+/2RiZf+EgoT+cnFz/01LTv+GhYb/WVdZ/kpI + S/9APkH/Pjw//z48P/89Oz7+jIqM/2RiZf93dnj/vr6//j07Pv89Oz7+Pjw/iQAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA9Oz4iPTs+4zw6Pf5zcXP+paSm/j07 + Pv6Xl5j+UVBS/mRjZf48Oj3+NTM2/ufn5/5pZ2r+m5qb/oSDhf5gXmH+r66w/jw6Pf6Af4H+n52f/qGg + of57enz+a2lr/kA+Qf5GREf+RkRG/nh2ef5MSk3+h4aH/kdFSP5XVVj+cXBy/q6trv65uLn+ZWNl/nBu + cP69vL3+UE5R/lFQUv5BP0L+PTs+/mFgYv5zcXP+aGZp/kZER/6SkZL+REJF/kNBRP4+PD/+PTs+/j07 + Pv49Oz7+hoWH/nt5fP5pZ2r+4ODg/jg2Of49Oz7cPTs+JQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+PD8DPTs+dz48P/9qaWv/n56f/z07Pv+xsLH+R0RH/1ZU + V/89Oz7/Pz1A/+Hh4f5wb3H/fHt9/2FfYv9MSkz+VFJU/zk3Ov8+PD//T05Q/0RCRf5KSUv/TEpN/0tJ + S/+bmpz+hYSF/3Bvcf9VU1b/Q0FE/0VDRv49Oz7/Pjw//0JAQ/8/PUD+Wlhb/9TU1f/Ozs//TUtO/l1b + Xv9VU1b/QUBC/4eFh/9JR0r+eXh6/0RCRf+VlJb/PTs+/kJAQ/89Oz7/PTs+/z48P/89Oz7+nZyd/4eG + h/9UUlX/qaiq/jo4O/8+PD+NPjw/AQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAPTs+ED48P9JSUFP/mpma/z89QP/Av8D+Pz1A/0JAQ/89Oz7/PDo9/7i4 + uf5jYWP/Q0FE/0JAQ/9paGr+o6Kk/6yrrP9EQ0X/tbS1/3V0df5XVVf/cnBy/0lHSv/i4uL+jYyO/4OB + g/9ubG//enl7/318fv5QTlH/TkxP/0hGSf98e33+Ozk8/7++wP9ycXP/Pjw//kRCRf9IRkn/QT9C/3Z0 + d/8+PD/+b21v/0ZER/+npqj/PDo9/lJQU/9BP0L/QD5B/z48P/88Oj3+qKeo/4KBg/9APkH/UU9S/j48 + P9k+PD8hAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAD48P0U8Oz7eWFZZ/kA+Qf+trK3+REJF/z48P/9BP0L/QD1B/0VERv5ZWFr/amhq/z48 + P/+KiYr++vr6/+jo6P9XVVj/kpGS/6+usP5HRUj/nJud/z07Pv+vrrD+g4KE/15cX/95eHr/aGZo/5qZ + m/5KSUv/X11g/0VDRv/d3N3+SEZJ/6yrrf9UUlX/PTs+/lBOUf9KSUv/TUtN/0NCRP89Oz7+TEpN/19d + YP+Qj5H/TEpN/lRSVf9QT1H/Tk1P/z48P/84Njn+zMzM/4B/gf89Oz7+PTs+7j48Pz0AAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAA+PD83Pjw/4j48P/+rqqv+TkxP/z07Pv8/PUD/Ozk8/3x6ff7j4+T/6urq/2BeYf8+PD/+ycjJ//// + //+WlZf/QT9C/+bl5v5JR0r/nJuc/1BOUf97eXv+nZ2e/0E/Qv+JiIr/TEpN/5+eoP47OTz/gYCC/z89 + QP/Fxcb+PDo9/6elpv9OTE//Pz1A/mFgYv9APkD/oqGi/29tb/88Oj3+PTs+/1hWWf9jYmT/fHp8/j89 + QP91dHb/YF5g/z48P/89Oz7+qqmr/1lYWv8+PD/wPTs+RQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA9Oz4BPTs+ej07 + PvxhYGL+R0VI/j07Pv49Oz7+enl7/v7+/v7+/v7+/v7+/vT09P5ta23+W1lc/sjHyP7r6uv+T05Q/pqa + m/6SkZP+YmFk/nJwcv5FQ0b+rKus/jw6Pf6Liov+Tk1P/oqJi/48Oj3+kZCR/js5PP6lpKX+PTs+/q2t + rv5HRUj+QD5B/lpYW/5OTE/+paSm/m1rbf5MSk3+U1FU/j07Pv5APkH+eXh6/jk3Ov6ko6X+Xlxf/j07 + Pv49Oz7+QkBD/j07Puk9Oz5HAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPjw/Ej48P5A9Oz7sPTs+/j07 + Pv9aWFr/UE9R/359f/7c3Nz///////7+/v/09PT+c3J0/09NUP/Ly8v/kpGS/1JQU/67urv/V1VY/3d2 + eP84Njn+sK+w/0xKTf94d3n/bWxu/25sbv5DQkT/goGD/zo4O/+cmpz+SklL/5ybnf8+PD//QT9C/mln + av9JR0r/k5KT/25sbv9VU1b+TUxO/09NUP89Oz7/QD5B/j48P//My8z/Xlxf/0hGSf89Oz7+PTs+5j48 + P0s+PD8CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD48Pwk9Oz4wPjw/qz48P/+xsbL/tbW2/0A+ + Qf5YV1n/wcHC//39/f/+/v7+xsbH/0dFSP9jYWT/t7a3/zUyNv6pqKn/ZWNm/2ppa/85Njr+np2e/2Rj + Zf9gX2L/hIOE/19eYP5FQ0b/ZGNl/0ZER/+mpaf+PTw+/5mYmf8+PD//Pjw//nNydP9EQUX/jYuN/2Zl + Z/9pZ2r+REJF/0A+Qf9BP0L/VFNV/kxKTf++vb//UVBS/0RCRP49Oz7mPjw/VT48PwIAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPjw/kT07Pv+Yl5j/8vLy/7SztP5KSEr/VFNV/9TU + 1f/7+/v+/Pz8/5qZm/9BQEL/goGD/0E/Qv5pZ2n/gYCC/1pYWv9GRUf+jYyO/4GAgv9QTlH/fXt9/1VT + Vv5APkH/XVxe/0pIS/+lpKb+SUdK/5COkP85Nzr/PTs+/n17fv9KSEv/iIeJ/0xKTf9vbW/+RkRH/z48 + P/9XVVf/sbCx/jo4O/9NTE7/Pz5A/j48P+I9Oz41AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAPTs+xkhGSf4/PUD+Z2Zo/rW1tv7IyMn+hYSG/kNBRP6CgYP+6Ofo/v39 + /f6TkZP+REJF/mppa/49Oz7+hYSF/j49P/5GREf+hIOF/qCfoP5CQEP+aWdp/lZUV/5DQUT+ZWRm/kE/ + Qv7Dw8T+UlBT/nRzdf49Oz7+Ozk8/p6cnv5DQUT+eHZ4/khGSf53dnj+PjxA/j07Pv5vbnD+rq2u/jw6 + Pf49Oz7+PTs+7T07Pj4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAOzk82pSTlf+CgYL/SkhL/0JAQ/5HRUj/gH6A/3Bucf9CQEP+VVNW/8fHyP/j4+P/Wllb/2hm + aP5APkH/V1ZY/zw6Pf8+PD/+ZWNm/3x7ff88Oj3/R0VI/0JAQ/48Oj3/R0VI/0E/Qv9KSEv+QkBD/1hW + Wf89Oz7/PDo9/pmXmf89Oz7/l5WX/0A+Qf9vbnD+Pz1A/z07Pv+pqKn/k5GT/mFgYv9wbnH/PTs+6D48 + PzIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPTs+u3Ry + dP9TUVP/QT9C/2RjZf5bWVz/RkRH/05MT/9TUVT+Pz1A/0pIS/9zcnT/hIKE/05MT/5FQ0b/Pjw//z07 + Pv9CQEP+UU9S/19dYP9raWv/hoWH/6alpv6ko6X/kZCS/318fv9eXWD+U1FU/z89QP89Oz7/ODY5/nV0 + dv9IRkn/fXt9/0ZER/9YVlj+PTs+/0lHSv/CwcL/YmBj/piXmP+ura7/Pjw/6j48PzYAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPjw/qVNRVP+Fg4X/a2ls/0tJ + TP5aWFv/aGdp/3d2eP9OTE/+Pjw//z07Pv9DQkT/h4aH/0dFSP5APkH/UU9S/4OChP+7urv+39/f//r6 + +v////////////7+/v7//////v7+//7+/v/19fb+39/f/7SztP+DgoT/UE9S/klHSv9DQUT/ZmRn/2Be + Yf8+PD/+PTs+/3d2eP/Dw8P/Ojg7/s7Oz/+0s7X/Ozo88T48P0QAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPjw/nEE/Qv89Oz7/SkhL/6OipP53dnj/PDs+/1VU + Vv+lpKX+mJeZ/0lHSv9JR0r/UE5R/0hGSf6enZ//4eHh//z8/P/+/v7+//////////////////////7+ + /v7////////////////+/v7+////////////////9/f3/tPS0/+DgYP/Q0FE/z48P/89Oz7+Ojg7/5+e + n/+GhIb/NDI1/vLy8v+7urv/OTc6+z48P1gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAPTs+mVFPUv6SkZL+Y2Fk/jk3Ov6JiIr+vLu8/mxrbf42NDf+aGdp/oF/ + gf45Nzr+T01Q/s7Ozv7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+ + /v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+zc3N/lZVV/49Oz7+V1VX/r++v/5SUFP+Z2Vn/t/f + 3/6XlZf+PTs+/D07PlsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAPjw/gT07Pv1IR0n/i4qM/4mIiv5JR0n/V1VY/6inqP+Ojo/+RUNG/0NBRP+KiYv/6ejp//7+ + /v7////////////////+/v7+//////////////////////7+/v7////////////////+/v7+//////// + /////////v7+/v///////////v7+/8nIyf9OTE/+XFtd/56dn/88Oj3/RUNG/kVDRv8/PUD/PTs+9j48 + P1QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPjw/YkA+ + QftBP0L/PDo9/2RjZf6gn6H/enl6/0dFSP+OjY/+QT9C/3h2ef/09PT///////7+/v7///////////// + ///+/v7+sK+w/5STlP/i4eL///////7+/v7////////////////+/v7+/////////////////v7+/v// + //////////////z8/f+ko6T+PDo9/2dmaP9APkH/SkhL/pKRkv+Ihoj/Ozk89T48P00AAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPjw/Tj07PvY9Oz7/Pjw//0JA + Q/5GREf/hIOF/4eHiP8/PUD+RUNG/9XV1f////////////7+/v7////////////////9/f3+cW9y/29u + cP/T0tP///////7+/v7////////////////+/v7+/////////////////v7+/v////////////////// + ///v7+/+TUtO/z07Pv9bWVz/z87P/vX19f+Eg4X/PTs+6D48PzIAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPTs+O0A/QextbG7+PTs+/kRCRf5NTE7+Pz1A/kRC + Rf5APkH+SUdK/tjY2P7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+ + /v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v76+vr+ZmRm/kNB + RP6IiIn+fn1+/ltZXP5DQUT+PTs+3D07PhwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAPjw/Iz89QN99fH7/dnR2/0pIS/5CQEP/TkxP/0ZDR/89Oz7+Pz0//9LR + 0v////////////7+/v7////////////////+/v7+//////////////////////7+/v7///////////// + ///+/v7+/////////////////v7+/v////////////////z8/P+cmpz+QD5B/z07Pv8/PUD/WFZZ/oaF + h/9LSUz/Pjw/yj48PwEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAPjw/Cj07Ps1IRkn/SUdK/0A+Qf4+PD//PTs+/z07Pv89Oz7+ODY5/8fGx/////////////7+ + /v7////////////////7+/v+5eXl/9ra2v/c3Nz/5OTk//z8/P7////////////////+/v7+//////// + /////////v7+/v///////////////+3s7f9MSUz+S0lM/0E/Qv9LSUz/aGZp/pOSlP9VU1b/Pjw/nAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD07 + Pr9UU1X/dXR2/0xKTf4+PD//Pjw//z48P/89Oz7+OTc6/7Gwsv////////////7+/v7///////////// + //+6urr+WVdZ/0lHSv9MSk3/V1VY/8HAwf7+/v7////////////+/v7+/////////////////v7+/v// + ////////+vr7/5uam/88OT3+hoWH/0NBRP9TUlT/e3l7/mxqbf9DQUT9Pjw/VQAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD48P48/PUD/SUdK/0lI + Sv4+PD//Pjw//z48P/89Oz7+PTs+/5SSlP/+/v7///////7+/v7////////////////JyMn+fHp9/4uK + i/+GhYf/fnx+/9PT1P7////////////////+/v7+/////////////////v7+/v//////////tLO0/0E/ + Qv88Oj3+tLS1/0E/Qv+Uk5X/xcTF/r69vv9EQkXoPjw/LwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD07PmVEQkX+aWdp/kZER/5RT1L+amhq/jw6 + Pf49Oz7+PTs+/np4ev78/Pz+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+ + /v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7a2tr+UU9S/j07Pv5fXmD+srGy/kA+ + Qf46ODv+ODY5/kdFSP49Oz66PTs+CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAD48P01APkH3YF5h/2poa/5ycHL/dXR2/zw6Pf89Oz7+Pjw//2Zk + Z//5+Pn///////7+/v7////////////////+/v7+//////////////////////7+/v7///////////// + ///+/v7+/////////////////v7+/v7+/v+bmpv/PTs+/z07Pv9ubW/+lJOU/z07Pv9wbnD/jYuN/kRC + Rf8+PD+bPjw/AQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAD48PzVEQkXtnp2e/4mIiv5dW17/TkxP/z48P/89Oz7+Pjw//1hWWP/s7Oz///////7+ + /v7////////////////+/v7+//////////////////////7+/v7////////////////+/v7+/v/+//39 + /f/4+Pj/6+vr/tHQ0f9SUFP/QD5B/z07Pv92dHb+X15g/0A+Qf9NS07/RkRH/j07Pv4+PD9QAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD48 + Pxk9Oz7PRUNG/2ZkZv5+fX//XFtd/z48P/89Oz7+SUdK/0tJTP/T09P/9/f3/+vr6/7b29v/1tbX/87N + zv/DwsP+zMvM/+Hg4f/k5OX/8/Lz//Dv8P7h4eH/2dna/9LS0//AwMH+paSl/4aFh/9wb3H/W1lc/kdF + SP9IRkn/R0VH/z07Pv92dXf+QD9B/2VjZv+/vr//cG5w/j48P+s+PD8dAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD07Pgk8Oj26c3J0/l1c + Xv48Oj3+PDo9/j07Pv48Oj3+VFJV/klHSv64t7j+X15g/kxKTf4+PT/+MjE0/jg2Of5PTVD+Pz0//jY0 + Nv5BP0L+ODY5/kRCRf5BP0L+NjM3/jQyNf46ODv+NDI1/kE/Qv5dXF7+gYCC/j07Pv5XVVj+WFZZ/j48 + P/51c3b+Q0FE/jk3Ov5EQkX+SEZJ/j07Prg9Oz4LAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD48PwM9Oz6uPjw//z07Pv4+PD//Pjw//0A+ + Qf88Oj3+W1pc/0RCRf+lpab/pqWm/8PCw/7My8z/ubm6/9ra2v/x8fH+8/Pz/+no6f/b29v/ycjJ/7W0 + tf6bmpz/gYCC/4B/gP+KiYv+vr2+//Py8//39/f/vLu8/jw6Pf+MjI3/WFZZ/0A+Qf9cWlz+PTs+/09O + UP+TkpT/UE5Q/j48P34+PD8BAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAD48PwE+PD+HPTs+/0NBRP4+PD//PTs+/zs5PP89Oz7+VFJV/0A+ + Qf+TkpP///////b29v5jYmT/REJF/4+OkP/+/v7+//////////////////////z8/P53dnf/VlRX/2Jg + Y/9aWFv+jo2O//z8/P/49/j/enh6/lRSVf+ioqP/QD5B/z48P/89Oz7+ZmRn/3Vzdf/Pz8//S0pM/j48 + P1oAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAD48Pwo+PD9aPz1A/1pYW/4/PUD/Wlhb/3h3ef87OTz+Pjw//z07Pv+AfoD///////r5 + +v6hoKL/r66v/9/f3//+/v7+/Pz8//r6+v/6+vr/+vr7//Dv8P6/v7//lZSW/4OChP+NjI7+iomL/4OC + hP+FhIX/SUhK/k1LTv9QT1H/PTs+/z48P/86ODv+gYCB/4uKjP+qqar/QT9C/j48PzIAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD07 + Pm89Oz78PTs+/js5PP6AfoD+lZSW/kNARP5BP0L+RURG/kVDRv5tbG7+/f39/vn5+f7a2dr+tbS1/peW + l/6bmpv+kI+Q/oOChP57eXv+e3p8/mJgY/5DQUT+Ojg7/jg2Of4+PD/+OTc6/jY0N/4+PD/+PTs+/jg2 + Of49Oz7+PTs+/j07Pv49Oz7+SkhL/mxrbf5ta23+Pjw//j07PigAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD48P0g+PD/1PDo9/3t6 + e/5samz/RUNG/3Fvcv9KSEv+PTs+/z07Pv9IRkn/Xlxf/zk3Ov46ODv/PDo9/z48P/8+Oz/+Pz1A/0A+ + Qf8+PD//VFJV/3NydP5jYWT/amhr/3Nyc/9ZV1r+rq2u/8rKyv+Hhof/R0VI/tXV1f9FREb/QT9C/2Be + Yf9DQUT+PTs+/3Z0dv+ioaL/OTc6/j48PwEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD48Pwo+PD+1PTs+/0NCRP49Oz7/REJF/0A+ + Qf89Oz7+PDo9/zs5PP89Oz7/TEpM/1lYWv5GREf/WVha/05MT/9sa23+XVtd/2RjZf9OTE//oJ+h/3h2 + eP6CgIL/VFJV/1VTVv9lY2b+Pjw//6OipP9RT1H/ZGNl/mhnaf8+PD//QT9C/2dlaP+gn6D+fn1//0RC + Rf9BP0L/PTs+6j48PwYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+PD9RPjw//j07Pv4+PD//PTs+/z07Pv9KSEv+fn1//2po + av89Oz7/T01P/1ZVV/5LSkz/SkhL/4yLjf9GREf+fXx+/1RTVf9jYWP/jo2P/3h3ef5mZWf/SkhL/1dV + V/9fXWD+QD5B/5eWl/87OTz/Pjw//j48P/9bWVz/kZCS/01LTv9JR0r+S0lM/0VDRv8+PD/2PTs+fgAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAD48PwE+PD9+Pjw//j07Pv4+PD//Pjw//3Z0dv/Y2Nj+k5KT/0hGSf8+PD//Pjw//z89 + QP5CQEP/RkRH/25sbv84Njn+qKip/1dWWP+Fg4X/dXR2/4yLjP5ZWFr/T05Q/15dX/9TUVT+Q0FE/1xb + Xf8/PUD/X11f/lNRVP8+PD//aGdp/6Oio//IyMn+s7Kz/1BOUf8+PD/oPTs+JgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAA9Oz5iPTs+/j07Pv49Oz7+UlFT/tva2/6JiIr+Ojg7/lFQUv49PD7+amlr/oGAgv49Oz7+Pjw//kJA + Q/49Oz7+s7O0/lVTVf6amZr+T01Q/oOCg/5NTE7+VFNV/k5MT/5APkH+Pjw//jw6Pf5KSEv+gH+B/kRC + RP5DQUT+TUtO/jk3Ov6hoKH+kpCT/kRCRf49Oz7+PTs+mwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD48Pwk+PD+pPjw//1ZV + V/5EQkX/SEZJ/3BvcP89Oz7+cnBz/1xbXf9SUFP/1tXV/1hWWf4/PUD/R0VI/1FQUv9cWl3+UE5R/zw6 + Pf9DQUT/Pjw//z48P/4+PD//REJF/0VERv9JSEr+QD5B/3NydP86ODv/PTs+/j07Pv8/PUD/hIOF/2ln + av8+Oz/+Pz1A/3l4ef9hX2H/PTs+9T48PzIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD48P0s9Oz71PTs+/0ZER/57eXv/TEpN/z07 + Pv9GREf+aGZp/1lYWv/Dw8P/fXx+/1ZUV/5LSUz/Pjw//0dGSP+joqP+c3J0/5+eoP9fXWD/PDo9/05M + T/5vbnD/bmxv/0NBRP9PTlD+Pz1A/46Mjv9TUlT/PTs+/j48P/89Oz7/RUNG/1FPUf92dHb+rKus/5OS + lP9KSEv/PTs+/j48P5c+PD8GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAPjw/Cz48P7RLSUz/REJF/z89QP5EQkX/SklL/z48P+c9Oz7yOzk8/4eG + iP+enZ//Pjw//3t5e/5HRkj/QD5B/0E/Qv+Uk5X+Pz1A/0tJTP9CQEP/PTs+/2hmaP6Af4H/YmBj/z07 + Pv9IRkn+dXN1/2xqbf+sq6z/PDo9/j48P/9GREf/aWdp/7W0tf+npqf+WVdZ/0A+Qf9jYmT/g4GD/j07 + Ptw+PD8cAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAPTs+aD07PvlXVVj+c3F0/kJBQ/5MSk3+PTs++z07PnE9Oz5iPjw/9UNBRP5GRUf+XFtd/ry7 + vP5FQ0b+QkBD/lNRU/56eXv+QkBD/j89QP5HRUj+Pjw//m9ucP6Eg4X+aWdp/j07Pv4zMTT+vr2+/lVU + Vv6amZv+SEZJ/mlnaf7Gxcb+6Ojo/pCPkP45Nzr+TkxP/qSjpf6ko6T+h4aH/lFQUv49Oz5/PTs+BAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA9Oz4KPjw/3kA+ + Qf9HRUj/rq2u/1BOUf48Oj3/Pjw/sj48PwYAAAAAPjw/Lz48P5Y+PD/qREJF/1lXWv5APkH/Pz1A/09N + UP9QTlH+U1FU/1JQU/97enz/OTc6/0VDRv6DgoT/gYCC/z48P/84Njn+h4WH/0pIS/87OTz/PTs+/V9e + YP/IyMn/amhq/0xKTf+gn6D+7Ozs/5OSlP9BP0L/g4KE/kpIS/89Oz70Pjw/RwAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA9Oz5dPDo9+lhXWf9PTVD/Y2Jk/358 + f/49Oz7VPjw/KgAAAAAAAAAAAAAAAD48PwU+PD8zPTs+jD07Psc9Oz75PTs+/0A+Qf89Oz7+SUdK/0lH + Sv9vbXD/PDo9/zw6Pf5hYGL/WVda/j48P/s9Oz7lPTs+vT07PqA+PD9aPTs+Oj89QN1FQ0b+W1lc/83N + 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 + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPjw/BT48P0k9Oz6YPjw/QT48PwMAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAD48Pwo+PD+VT01Q/VdVWP9DQUT/QD5B/4KAgv+ZmJr+PTs+uj48Pw0AAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAA+PD8dPTs+zz07Pv9iYGL/VVNW/8jHyP+Fg4X+Pjw/qT48PwYAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPTs+JT07 + Prk9Oz79c3J0/szLzP5FQ0X+PTs+jQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD48Pww+PD+EPjw/6T48 + P/89Oz76Pjw/QwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+PD8FPjw/QT48P6k9Oz5rPjw/BwAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMLCwwQAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAP///////////wAAAP///////////wAAAP///////////wAAAP// + //////fn/wAAAP///////+Pj/wAAAP//////8AAAHwAAAP////8AAAAAHwAAAPgAAgAAAAAAHwAAAPgA + AAAAAAAAHwAAAPwAAAAAAAAAHwAAAPwAAAAAAAAAHwAAAPwAAAAAAAAAHwAAAP4AAAAAAAAAPwAAAP4A + AAAAAAAAPwAAAP4AAAAAAAAAPwAAAP8AAAAAAAAAfwAAAP+AAAAAAAAA/wAAAP/AAAAAAAAB/wAAAP/A + AAAAAAAD/wAAAP/gAAAAAAAD/wAAAP/wAAAAAAAH/wAAAP/8AAAAAAAf/wAAAP/8AAAAAAA//wAAAP/8 + AAAAAAA//wAAAP/8AAAAAAA//wAAAP/8AAAAAAA//wAAAP/8AAAAAAA//wAAAP/8AAAAAAA//wAAAP/8 + AAAAAAA//wAAAP/8AAAAAAA//wAAAP/8AAAAAAA//wAAAP/8AAAAAAA//wAAAP/8AAAAAAA//wAAAP/8 + AAAAAAB//wAAAP/+AAAAAAB//wAAAP/+AAAAAAB//wAAAP/+AAAAAAB//wAAAP/+AAAAAAB//wAAAP/+ + AAAAAAD//wAAAP/+AAAAAAD//wAAAP/+AAAAAAD//wAAAP/+AAAAAAD//wAAAP/+AAAAAAH//wAAAP/+ + AAAAAAH//wAAAP/+AAAAAAH//wAAAP/+AAAAAAH//wAAAP/+AAAAAAH//wAAAP//AAAAAAP//wAAAP/+ + AAAAAAP//wAAAP//AAAAAAP//wAAAP/+AAAAAAH//wAAAP/+AAAAAAD//wAAAP/8AAAAAAD//wAAAP/8 + AAAAAAB//wAAAP/4AgAAAAB//wAAAP/4BwAAAAA//wAAAP/wD+AAOAA//wAAAP/wD/5P+AAf/wAAAP/w + D////AAf/wAAAP/gH////gAP/wAAAP/gH////wAP/wAAAP/AP////wAP/wAAAP/AP////4AH/wAAAP/g + f////8AH/wAAAP/g/////8AH/wAAAP/g/////+AH/wAAAP////////AH/wAAAP////////gP/wAAAP// + //////wP/wAAAP////////4P/wAAAP////////+//wAAAP///////////wAAACgAAABgAAAAwAAAAAEA + IAAAAAAAgJQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AABubG8dbmxuJm5sbgMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABubG8FbmxuMG5sbjxubG8BAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+PD/1Pjw/9z48P0c+PD8UPjw/Ej48PxQ+PD8dPjw/IT48 + Px4+PD86Pjw/0D48P+8+PD8VPjw/Az48PwIAAAAAAAAAAD48PwM+PD8NPjw/BwAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAD07PgY+PD8RPTs+HD07PiE+PD8zPTs+PD07Pk0+PD9pPTs+ez07Pn8+PD/+PTs+/j07 + PrU+PD+oPTs+pD07Pqg+PD+6PTs+wj07Prs+PD+6PTs+6z07Pvk+PD+MPTs+dj07PnQ+PD96PTs+cT07 + Pn8+PD+VPTs+Vs7OzwYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPTs+BD48 + Pwc9Oz4LAAAAAD48Pw49Oz40PTs+UT07PnA+PD+PPTs+lz07Pqk+PD+3PTs+yj07PtA+PD/ZPTs+3T07 + PuU+PD/0PTs+/T07Pv4+PD//PTs+/j07Pv4+PD//PTs+/j07Pv4+PD//PTs+/js5PP49Oz7/PTs+/j48 + P/4+PD/9PTs+9z07PvY9Oz78Ojg79zw6Pfs+PD/8PTs+qM7OzxUAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD48PwY+PD8QPjw/FD48Pxs+PD8fPjw/Ij48 + Pyo+PD8rPjw/Jz48PyA+PD8fPjw/Gz48PxA+PD8LPjw/BAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPjw/Az48Pwk+PD8RPjw/GT48PyM+PD8uPjw/Pj48 + P1U+PD9zPTs+jT07Pqo+PD/IPTs+0j07PuU+PD//PTs+/z07Pv8+PD/+Pz1A/j07Pv8/PUD/QT9C/z89 + QP8+PD//Pjw//z07Pv8+PD//UVBT/1dVWP88Oj3/S0lM/29tcP86Nzv/U1FU/0pIS/9APkH/REJF/z48 + P/89Oz7/RkVH/2VkZv+EgoT/amlr/zo4O/9mZGb/b25w/0NBRP9NS07/nZyd/5mYmf84Njn/Pjw/sc7O + zxgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAnp2eFz07 + PnA+PD+dPTs+qD48P7Y9Oz6+PTs+xD07PtU+PD/VPTs+zT07PsE+PD++PTs+tj07Pp8+PD+TPTs+hT07 + PnQ+PD9dPTs+Sj07Pic+PD8VPTs+FD07PgQAAAAAPTs+Cj48PxM9Oz4iPTs+Mj48P0Y9Oz5cPTs+cD48 + P4c9Oz6iPTs+sj06PsY8Oj3bPTs+6T89QPQ9Oz7+QT9C/khHSf88Oj3+UVBS/mxqbP84Njn+UE9R/mhn + af9DQUT+TUtO/j89QP5lY2b/i4qM/ktJTP5CQEP/R0VI/j07Pv4/PUD/jIuN/rKys/43NTj/eHd5/uHh + 4v4xLjL/cG5x/lFOUf5DQUT/T05Q/kA+Qf49Oz7/QkBD/kZFR/5pZ2n/f31//js5PP6gn6D/xcTF/lFQ + Uv5YV1n/5ubm/rCvsP48Oj3/PTs+p87OzxMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAnp2fLT48P88+PD/9Pjw//z48P/8/PUD/Pz1A/z48P/86ODv/Pjw//zw6 + Pf89Oz7/Pjw//z48P/89Oz79Pjw//T48P/k+PD/tPTs+5D07PtM+PD/HPjw/wT48P8A+PD+8Pjw/uT48 + P70+PD/QPjw/2Ds5POI6ODvtPjw/9EJBQ/pBQEL/PTs+/0lISv9WVVf/Ozk8/1lYWv9EQkX/aWhq/6mo + qv80Mjb/fHt9/62srv83NTj/YmFj/5iXmP9APkH/T05Q/0JAQ/9/fX//zczN/1JQU/9FQ0b/TkxP/z48 + P/8/PUD/iIeJ/8HBwf8zMTT/d3Z4/8TDxP9APkH/fHt9/1NQU/9JR0r/XVtd/z48P/9DQUT/PTs+/z48 + P/9RUFL/f36A/0dFSP+OjY7/2tna/1hWWf9UU1X/0dDR/5aVl/88Oj3/Pjw/o87OzxEAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD07PnM+PD/4PTs+8D48 + P/5iYGP+dXR2/jc1OP6GhYb/PDo9/mlnaf5IRkn/OTc6/oeGiP5zcnT/PTs+/j48P/5DQkT/VVRW/kJA + Q/5JSEr/YWBi/kNBRP5IRkn/S0lM/j07Pv89Oz7+Ozk8/nx7ff+Lioz+NzU4/pSTlP+ysrP+QT5C/nl4 + ev/Fxcb+NDI1/kZER/9IRkn+fXx9/tTT1P8vLTD+c3F0/qurrP87OTz+aWhq/rKxs/82NDf+Q0FE/kA+ + Qf5zcXP/vLu8/kxKTf5MSk3/amlq/kE/Qv49Oz7/amhr/sC/v/43NTj/fHp8/q6trv4/PUD/g4KD/lpZ + W/5OTE//Y2Jk/jk3Ov5WVFf/PDo9/j07Pv5IRkn/hIKE/lFQUv57enz/6urq/lxbXf5MSk3/uLe4/mRi + Zf49Oz79PTs+is7OzwcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAD07Pjc+PD/2PTs+/j48P/9ubW/+Y2Jk/k5MT/6ura//NzU4/m1rbf5eXV//PDo9/snJ + yv5+fX//PDo9/j48P/5aWFv/oqGi/k5MT/54d3n/zczN/ldVWP51c3X/iYiK/jw6Pf89Oz7+MzE0/snJ + yf/MzM3+PDo9/pmYmf/Av8D+Pzw//mdmaP/Jycn+NTI2/j89QP9FQ0b+d3V4/uDf4P82NDf+Z2Zo/qWk + pv85Nzr+c3F0/s3Nzf8zMTT+PTs+/j07Pv5lZGb/s7Kz/k1MTv5SUVP/goGC/kE/Qv48Oj3/WFZY/sLB + wf4/PUD/h4aH/pOSk/5CQEP/l5aX/lpYW/5LSUz/W1pc/j48P/4/PUD/PTs+/j07Pv5EQ0X/jo2O/lZU + V/5pZ2n/6Ojo/l9dYP5CQEP/jo2O/l5cXv4+PD/sPTs+WgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD07Pgc+PD+5PTs+/jw6Pf9nZmj+WFZY/nx7 + ff6WlZb/NzU4/mdmaP50cnX/RkRH/sbFxv5FQ0b/PTs+/j07Pv5sam3/vLu8/k5MT/6Uk5T/4N/g/ldV + WP5samz/lZSW/kA+Qf88Oj3+NDI1/sC/wP/Kysv+SUhL/pqZmv/Hx8j+NTM2/lNRU//Av8D+PTs+/ktJ + TP9EQ0b+eXd5/uHg4f9GRUf+ZGNl/oOChP84Njn+cW9x/t7d3v84NTn+PTs+/j07Pv5bWVv/sbCx/lBO + Uf5aWFv/iIaI/j48P/48Oj3/VVRW/svLy/5BP0L/hYSG/nJyc/5SUFP/qqiq/lNRVP5HRUj/U1FU/j89 + QP4+PD//PTs+/j07Pv5HRUj/rKut/lxZXP5UUlX/09LT/mtpa/48Oj3/bGps/lNRU/4+PD/XPTs+MQAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAA+PD9EPjw/6TY0N/+ZmJn/OTc6/5+en/+Uk5T/OTc6/4KBgv9zcnT/PTs+/7Gwsf9BP0L/Pjw//z07 + Pv+gn6D/tbS1/0RCRf+lpKX/2djZ/1JRU/9vbnD/m5qc/z89QP9WVVf/QT9C/5qZm//Ix8j/ODY5/6io + qf/IyMj/Ozk8/zUzNv+npqf/Ojc7/359f/9EQkX/cG9x/+Tj5P9TUVP/WFZZ/2xqbP85Nzr/fXx+/+Xk + 5f9HRUj/Pjw//z48P/9aWVv/tLS0/05MT/9eXV//goGD/z48P/89Oz7/W1lc/9fW1/8yMDP/gYCB/2xr + bf9aWFv/nZ2e/01LTv9GREf/VFNV/zw6Pf8+PD//Pjw//z48P/9GREf/rayu/2JgY/9KSEv/w8LD/4aF + h/88Oj3/S0lM/0NCRP8+PD+9Pjw/CQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+PD8ePTs+uzo4O/+JiIr+Mi8z/r28vv6TkpP/OTc6/omI + iv5raWv/OTc6/rSztf45Nzr/PTs+/js4PP67urv/paSl/jk3Ov6/vr//wsLD/k1LTv6TkpT/lZSV/jk3 + Ov9UUlX+VVNV/nZ1dv/Gxcb+Liww/sTExP/Hx8f+REJF/kNBRP96eHr+NjQ4/qalpv9aWFv+bWxu/ubl + 5v9LSUz+SUhK/mtqbP85Nzr+hYSF/uzs7f9XVVj+PTs+/j07Pv5eXV//oJ+h/kZER/5VU1X/dXN1/j89 + QP4+PD//WVda/r69vv43NTj/hYSG/ldVWP5VU1X/mJeY/k1LTv5EQkX/TUtO/j07Pv4+PD//PTs+/j07 + Pv5CQEP/o6Kk/m9ucP5JR0r/v76//qSjpf4+PD//PTs+/j07Pv0+PD9zAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+PD8LPTs+iz07 + PvlEQkX+Pjw+/ry7vP6Vk5X/ODY5/oB/gf54d3j/SkhL/pKRkv43NTj/PTs+/jQyNf7Z2dn/paSm/j48 + P/7Hx8f/q6qs/kRCRf6fnp//mJeY/jo4O/9YVlj+ioiK/r29vv/k5OT+mpma/sDAwf+fnp/+RUNG/kpJ + S/9TUVP+TUtO/szLzf9nZmj+YmBj/uHg4f9LSkz+QT9C/pSTlf9RT1H+o6Kj/vf39/9jYmT+NjM3/js4 + PP5nZmj/oJ+g/kVDRv5NS07/Z2Vo/jw6Pf49Oz7/U1JU/qSjpP5GREf/dnR2/k5MTv5VVFb/mpmb/klH + Sv5EQkX/REJF/j07Pv4+PD//PTs+/j07Pv48Oj3/m5qb/oOChP5IRkn/trW2/sTDxP47OTz/PTs+/j07 + PvU+PD8RAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAPjw/QT48P9o+PD//Pz0//7W0tf+Mi43/NjQ3/3Jxc/+cm53/TUxO/15d + X/8+PD//Pjw//zY0N//i4eL/tLO0/0lHSv+sq6z/i4qL/zUzNv+cmpz/kI+R/0A+Qf9HRUj/eXh6/2ln + av9VU1b/SUdJ/zw6Pf84Njn/PTs+/0RCRf9HRUj/Ojg7/zAuMf9EQkX/Pjw//0VDRv9HRUj/Pz1A/0RC + Rf9ubW//hYSF/4uKi/+TkpT/j46P/62trv/X19f/uLe4/0tJTP9JR0r/SEZJ/z48P/88Oj3/YF9h/5OS + k/9BP0L/bmxu/05MT/9gXmH/iomL/zs5PP9APkH/Pz1A/z48P/8+PD//Pjw//z48P/9BP0L/p6eo/5qZ + mv9DQUT/oqGj/9zc3P80MjX/Pjw/+z48P2EAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPTs+CT48P4Y9Oz7+ODY5/rSy + tP6Lioz/OTc6/nl4ev6ura//PTo+/l1bXv49Oz7/PTs+/kA+Qf7W1tf/t7a3/kZER/6Mi43/aGdp/jo4 + O/5VU1b/RkRH/jUzNv88Oj3+Pz1A/lVUVv9GREf+Ojg7/m1rbv9CQEP+RkRH/paVlv+vrq/+mJeY/n58 + f/9/fn/+QD5B/khGSf9KSEr+PTs+/js5PP87OTz+PDo9/jo4O/89PD/+UlFT/sbFxv7u7u7/jo2O/kVD + Rv5XVlj/aGZp/lhXWf48Oj3/gX+B/nFwcv5PTVD/eXh6/kFAQ/5pZ2n/iomL/j48P/5FQ0b/PTs+/j07 + Pv4+PD//PTs+/j07Pv5IR0n/tLO0/qOio/46ODv/joyO/omIiv47OTz/PTs+1j07Pi0AAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAD48Px09Oz7jNzU4/o6Mj/6amZv/Ojg7/n99f/7Av8D/NTM2/kVDRv49Oz7/PTs+/js5 + PP7R0dH/sbCx/kdFSP5JR0r/REJF/kNBRP5bWVz/jYuN/rq6u/9IR0n+XVtd/sjIyP96eHr+MzE0/pGQ + kv9TUlT+QT9C/rSztP/o6Oj+hYOF/mtpbP/BwMH+MzA0/pKQkf+KiYv+Ozk8/mtqbP87OTz+QT9C/mNi + ZP9GREf+NDI2/rm4uf66urv/R0VJ/j48P/5CQUP/TUtO/klHSv5APkH/goGD/mFfYv5TUlT/a2lr/js5 + PP56eHr/lZSW/j89QP5RUFL/Pjw//kJAQ/49Oz7/PTs+/j07Pv5JR0r/t7a3/pybnP44Njn/W1lb/kxK + Tf4+PD/2PTs+fD07PgcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+PD9RPTs+6zs5PP6Ni43/Ojg7/3Rz + dP+zsrP/NzU4/0E/Qv8+PD//QD5B/zs5PP9UUlX/QT9C/0hGSf9HRkj/Ojg7/2poav/u7u7///////// + //9ZV1r/Ojg6/8jIyP/AwMD/Ojg7/2dlZ/+WlZb/OTc6/3Rydf/k5OT/amlr/z89QP+ysbP/PDo9/4yK + jP+1tLb/NzU4/21rbv9LSUz/QT9C/83Mzf+ko6X/Pjw//7a2t/+KiYr/OTc6/z48P/9BQEL/TEtN/0A+ + Qf8/PUD/PTw+/z07Pv9LSUz/WVda/zs5PP+xsLH/cnFz/zw6Pf9paGr/PDo9/1hXWf8/PUD/Pjw//z48 + P/9QT1H/09LT/5iXmf88Oj3/PDo9/z07Pv8+PD+bPjw/BQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAA9Oz4NPTs+Yjw6Pd5BP0L/PDo9/mJhY/69vL3/Pz1A/j07Pv4/PUD/RUNG/j89QP49Oz7/YWBi/qyr + rf6Xlpj/REJF/jY0N/6ioaP/+fn5/v////+4t7j+MzE0/oyKjP/d3d3+WVda/kA+Qf/Jycn+PTs+/k1L + Tv/d3N3+dnV3/jo4O/+Yl5n+YV9i/mRiZf/Gxcf+NDI1/lJQU/9ycXP+NzU4/qCeoP+5ubr+PDo9/rSz + tP5paGr/PDo9/j07Pv5MSk3/ZmVn/jo4O/6Eg4X/XVxe/j48P/49Oz7/Pjw//js4PP7Av8D/S0lM/nBu + cf5KSUv/OTc6/pCPkP47OTz/PTs+/j07Pv5bWVz/5OTk/pKRk/4+PD//PTs++j07Pqs+PD8RAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPTs+BD07PlY+PD/+Ozk8/llXWv7Hx8j/Q0FE/j07 + Pv4+PD//Pz1A/jk3Ov59fH7/2tra/vr6+v7r6+z/eHd5/js5PP5WVVf/0NDR/v/////f3+D+Wllb/jw6 + Pf/y8fL+iYiK/jQyNf+5uLn+XVte/j48P/+5t7n+jo2P/jk3Ov9paGr+fHt9/k1LTv/DwsP+ODY5/jk3 + Ov+enZ7+Ojc7/nh3ef/Ix8j+Liwv/rq4uf5nZWf/Pz1A/j89QP5QT1H/ZmRm/jEvMv7JyMr/gH+B/jw6 + Pf47OTz/PTs+/js5PP6GhIb/Ozk8/paUlv5BP0L/REJF/sHBwf4yMDP/PTs+/j07Pv5cWl3/nJud/lVU + Vv4+PD//PTs+sz07PiEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD48 + PwM+PD+0PTs+/Tw7Pf+Mi4z/REJF/z48P/8+PD//Ozk8/42Mjv//////////////////////+/v7/46N + j/9EQkX/b21v/83Nzv/9/f3/qqmr/z07Pv+KiYv/ysrL/1JRU/92dHf/h4aI/zk3Ov96eXv/np2e/z48 + P/9YV1n/lpWW/0dFSP+ko6X/SUdK/zAuMf+zs7P/NjQ3/2NhY/+zsrP/Ly4x/8jHyP9aWVv/Pjw//0E/ + Qv9OTE//Z2Vo/zs5PP/Ozc7/f35//zo4O/9eXF//TEpN/z48P/87OTz/T05Q/4+Nj/85Nzr/amlr/8fG + x/82NDf/Pjw//z48P/9APUH/Q0FE/z07Pv8+PD+lPjw/FgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+PD8+PTs+yz07Pv07OTz/PTs+/j07Pv4+PD//Ojg7/mlo + av67urv/7u7u/v7+/v7//////v7+/vT09P6ioKL/SkhL/lJRU//U1NT+7+/v/l1cXv9PTVD+09LT/nNx + c/9bWVz+ioqL/j48P/9mZGb+rKyt/ktJTP9PTU/+mJeY/k9NUP9zcnT+XVte/jMxNP+op6j+NTM3/k9N + UP+5uLn+QD5B/sTExf5BP0L/PTs+/kFAQv5PTE//bm1v/kA+Qf63trf/gYCC/jk3Ov5eXF//UE5R/k5M + T/48Oj3/RkRH/kpIS/47ODz/iIaI/sjIyf4+PD//Pjw//j07Pv49Oz7/PTs+/D07PrY+PD8UAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+PD8EPTs+Oj07 + Ppo+PD/4PTs+/j07Pv5XVVf/mZiZ/k1LTv5JR0r/fXx+/ufn5/7//////v7+/v7+/v7t7e3/fHt8/jw6 + Pf9paGr+6Ojo/oOCg/88Oj3+paSm/pqZm/9MSk3+eHd4/kZFR/9WVFf+uLe4/lpZW/9JRkn+qKeo/ltZ + XP9ZV1r+ZWRm/jk3Ov+TkpP+OTc6/lJQU/+8vL3+Pjw//rGxsv5CQEP/Pz1A/j89QP5WVFf/e3l7/jUy + Nv6vrq//fn1//jo4O/50c3X/QkFD/lNRVP48Oj3/PDo9/j07Pv5DQET/paSm/svKy/48Oj3/VVNV/kdF + SP4+PD//PTs+tD07PiYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+PD8VPjw/qj07Pv9ubG//9vb2/769vv9FQ0b/OTc6/0xK + Tf/Ly8z//Pz8////////////xcXG/1BOUf89Oz7/h4WH/7W0tf80Mjb/aWdq/8XExf9HRUn/Z2Zo/0xL + Tf9FQkb/q6qr/3h3ef9APkH/oqKj/15dX/9MSk3/ZmRm/zw5Pf9oZmj/R0VI/3RydP+ioaL/MjAz/7u6 + u/88Oj3/Pjw//z48P/9fXWD/cnFz/zQxNf+pqKn/cnBy/zo4O/+FhIb/Pjw//zw6Pf88Oj3/WVha/1JR + U/9GREf/oaCh/6Sjpf85Nzr/Ozk8/zw6Pfw+PD+jPjw/JQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+PD8SPTs+pT07 + Pv5hYGL/4ODg/vr6+v6xsLH/WVdZ/jk3Ov5jY2T/2NjZ/v7+/v7/////+vr6/qalpv86ODv+S0lM/pyb + nf8+PD/+Pz1A/q+vsP9jYWT+WVha/ldWWP9BP0L+pqWm/pSTlf88Oj3+kI+R/l5cX/9JR0r+Wllb/jk3 + Ov9paGr+SEZJ/oKBg/+RkJH+Q0FE/rW0tf4zMTT/PTs+/j07Pv5mZWf/eXh6/jc1OP6mpaf/VlRX/jk3 + Ov6JiIr/QT9C/j07Pv4+PD//mJeZ/peWl/45Nzr/TkxP/lBOUf49Oz7/PTs++D07Pp8+PD8CAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAA+PD8lPTs+yj07Pv4/PUD/YWBi/sPCw/749/j/zs3O/nNxdP49Oz7/YF5h/qWk + pf7w8PD//v7+/vf39/+gn6D+Ozk8/l1bXv9iYWP+OTc6/l1cXv+SkZL+Q0FE/lNSVP8/PkH+m5uc/rSz + tP84Njn+cG5w/mBeYP9JSEr+V1ZY/jg2Of9ramz+OTc6/qGgof+GhYf+VFJV/pGQkv44Njn/PTs+/jo4 + O/6Ihon/dHJ1/jo4O/6QjpD/RkRH/kE/Qv6RkJH/OTc6/j07Pv5CQEP/paSm/p2cnf45Nzr/PDo9/jw6 + Pf4+PD/yPTs+gj07PhMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+PD80PDo96WFfYv9zcnT/SkhL/zY1 + N/9hX2H/iYmK/83Mzf+ysrP/Tk1Q/zg2Of9gX2H/w8LD//n5+f/t7e3/fXx+/0A+Qf+CgYL/Q0FE/zMx + NP+TkpP/Ojg7/0VCRv9BP0L/l5aY/87Nzv8zMTT/T01P/11cXv9JR0r/V1VY/zs5PP9ycXL/OTc6/62s + rf90c3X/SklL/4GAgv89Oz7/Pjw//z07Pv+zs7P/T01P/zY0N/+amZn/SUdJ/3Jxc/9YVln/PTs+/z48 + P/9QTlH/zczN/4mIif9BP0L/RUNG/z48P/8+PD/iPjw/RgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAA+PD82Ozk864iGiP6npqf/V1ZY/k5MT/5BP0L/NjQ3/kpIS/59e33/f31//lFPUv47OTz/T01Q/qqp + q//s7O3+w8LD/lFQUv9hYGL+VVRW/jk3Ov9ZV1r+PDo9/j48P/8+PD/+ZmRn/oF/gf85Nzr+Pz1A/kRD + Rf8+PD/+PTs+/jo4O/9FREb+QD5B/kRCRf88Oj3+QkBD/llYWv49Oz7/PTs+/js5PP6ura7/SkhL/jUy + Nv68u7z/ODY5/n18fv5HRUj/PTs+/j07Pv5nZWf/5OTk/nBucP5UU1X/n56g/lFPUv4+PD/hPTs+QwAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+PD8pPTs+03h2eP9WVFb/PTs+/0ZER/9vbW//WVha/zs5 + PP8+PD//UE5R/2FgYv9LSUz/Pjs//0dFSP9sa23/qqmq/3d1eP9HRUj/V1VY/0A+Qf8+PD//Pjw//z48 + P/89Oz7/ODY5/y4sL/8yMDP/REJF/2NhZP+Ihoj/jIqN/35+f/9paGr/WFdZ/zMxNP87OTz/Ozk8/zw6 + Pf8+PD//Pjw//zQyNf+cm5z/RUNG/09NT/+Mi43/PDs9/3Vzdf86ODv/Pjw//zw6Pf99fH7/1tXW/1RT + Vf9mZWf/5+fn/2VkZv8+PD/iPjw/RQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+PD8lPTs+yFhW + Wf6dnJ3/YF5g/k5MTv49Oz7/aWdq/pSUlf5WVVf/VlRX/kA+Qf5BP0L/Pjw//j48P/89Oz7+PTs+/o2L + jf9NS07+PDo9/j07Pv9APkH+TkxP/mJgY/+OjY7+ubi5/vHx8f/+/v7+/v7+/v/////+/v7+/v7+/v// + ///+/v7+/f39/v7+/v/Nzc7+rq2u/nJwc/5aWFv/REJF/j07Pv4+PD//PTs+/lhWWf56eXv/V1VY/kxK + Tf4+PD//PTs+/kE/Qv7c29z/l5aY/j89QP6ysbP/8O/w/mdmZ/4+PD/pPTs+VQAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAA+PD8dPTs+uj48P/5SUFL/e3l8/nRydf5+fX7/QT9C/j07Pv5gX2H/f36A/piX + mf5mZGf/PTs+/j07Pv9CQEP+YmBi/oeGh/9EQkX+Pz1A/lZVV/+Mi43+vby9/ubm5v/8/Pz+/v7+/v// + ///+/v7+/v7+/v/////+/v7+/v7+/v/////+/v7+/v7+/v/////+/v7+/v7+/vX19f7X1tf/rq6v/pGQ + kv53dXf/Q0FE/kA+Qf5UU1X/W1pc/kE/Qv4+PD//PDo9/mFfYv7k5OT/Z2Zo/jUzNv7Qz9D/+vr6/l9d + YP4+PD/xPTs+YwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+PD8aPjw/tEA+Qf9EQkX/Pjw//0JA + Q/+SkZP/u7u8/1pYWv88Oj3/RUNG/25sb/+9vL3/rayt/1JQU/8+PD//TEpN/0VDRv9FQ0b/i4qM/9LS + 0v/z8/T//f39//////////////////////////////////////////////////////////////////// + //////////////////////////////n5+f/r6+v/vb2+/3x6fP84Njn/Pjw//z07Pv8+PD//ODY5/4mI + iv/Ly8z/R0VI/zEuMv/09PT//f39/2BeYf8+PD/7Pjw/eAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAA+PD8aPTs+szo4O/6pqar/enl7/kxKTf46ODv/aWdp/sbFxv6rq6z/X11g/j48P/49PD7/hIOF/rW0 + tf80MjX+Ozk8/kdFSP+pqan+/f39/v/////+/v7+/v7+/v/////+/v7+/v7+/v/////+/v7+/v7+/v// + ///+/v7+/v7+/v/////+/v7+/v7+/v/////+/v7+/v7+/v7+/v7//////v7+/v7+/v7//////v7+/v7+ + /v6qqqr/UE9R/j07Pv4/PUD/TUxO/sbGxv6GhYf/OTc6/mppa/7u7u7/3t3e/mFgYv4+PD/9PTs+ewAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+PD8VPTs+qD07Pv5GRUf/iomK/qWkpv5mZGf/PDo9/kVE + R/6lpab/xsbG/nRydP5FQ0b/PDo9/kNBRf9CQEP+cnFz/r++v//+/v7+/v7+/v/////+/v7+/v7+/v// + ///+/v7+/v7+/v/////+/v7+/v7+/v/////+/v7+/v7+/v/////+/v7+/v7+/v/////+/v7+/v7+/v7+ + /v7//////v7+/v7+/v7//////v7+/v7+/v76+vr/r66v/ktJTP4+PUD/g4GD/tzc3P4/PUD/PDo9/mln + av57enz/XVte/kNBRP4+PD/2PTs+cT07PgEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+PD8LPjw/kj48 + P/w8Oj3/QkFD/1xaXf+4t7j/d3Z4/zw6Pf9CQEP/a2ls/8fHx/+hoKH/Q0FE/zo4O/+Qj5D/6+vr//7+ + /v////////////////////////////////////////////////////////////////////////////// + ////////////////////////////////////////////////////////////////////////8vLy/6Kh + o/8+PD//R0VI/6inqP82NDf/PTs+/z07Pv83NTj/NjQ3/zw6Pf8+PD/zPjw/bD48PwIAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAA+PD8CPTs+ej07PvpHRUj/Pjw//j48P/5BP0L/jIqM/srJyv57enz/QD5B/mVj + Zv5bWlz/Ojg7/l9dYP/6+vr+/v7+/v/////+/v7+/v7+/v/////+/v7+/v7+/v/////o6On+iIeJ/mdl + Z/+pqar++/v7/v/////+/v7+/v7+/v/////+/v7+/v7+/v/////+/v7+/v7+/v7+/v7//////v7+/v7+ + /v7//////v7+/v7+/v7//////v7+/vz8/P5iYGL/Ojg7/mVjZv5JR0r/Pz1A/lJQU/6fnqD/2tra/lhX + Wf4+PD/xPTs+ZAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPTs+aj07PvQ9Oz7/PTs+/j48 + P/5DQUT/PDo9/l1bXv6joqP/i4qM/k9NT/47OTz/RUNG/sLBwv/+/v7+/v7+/v/////+/v7+/v7+/v// + ///+/v7+/v7+/v/////U09T+VVNW/lhWWf+VlJX+9/f3/v/////+/v7+/v7+/v/////+/v7+/v7+/v// + ///+/v7+/v7+/v7+/v7//////v7+/v7+/v7//////v7+/v7+/v7//////v7+/v7+/v6ysbL/QD5B/j07 + Pv5BP0L/dXN1/tHR0f7+/v7/zczN/lNRVP4+PD/jPTs+SAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAPjw/Wj48P+xBP0L/Pjs+/z47Pv9EQkX/REJF/zw6Pf9HRUf/ZWNm/1NRVP89Oz7/UlBT/9bV + 1v/////////////////////////////////////////////////39/f/3dzd/9zc3f/t7e3//v7+//// + //////////////////////////////////////////////////////////////////////////////// + ///////////////////a2tv/WFZZ/z07Pv9ramz/4ODg/9LS0v+hoKL/cnFz/0RDRf8+PD/WPjw/LgAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPTs+Qj07PuBxcHL/nJud/lFQUv5DQkT/UU9S/lJR + U/5GREf/QkBD/jw6Pf4+PD//RkRH/sTDxP/+/v7+/v7+/v/////+/v7+/v7+/v/////+/v7+/v7+/v// + ///+/v7+/v7+/v/////+/v7+/v7+/v/////+/v7+/v7+/v/////+/v7+/v7+/v/////+/v7+/v7+/v7+ + /v7//////v7+/v7+/v7//////v7+/v7+/v7//////v7+/v79/v6vrq//SkhL/jw6Pf5WVFf/OTg6/jQx + Nf4+PT//QkBD/j48P/4+PD/KPTs+FwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPTs+LD07 + PtJSUVP/iIeI/mhmaP5OTE//PTs+/kVDRv5NS07/SEVJ/j07Pv4+PD//PTs+/sPCw//+/v7+/v7+/v// + ///+/v7+/v7+/v/////+/v7+/v7+/v/////+/v7+/v7+/v/////+/v7+/v7+/v/////+/v7+/v7+/v// + ///+/v7+/v7+/v/////+/v7+/v7+/v7+/v7//////v7+/v7+/v7//////v7+/v7+/v7//////v7+/tzc + 3P5JR0v/PTs+/j07Pv48Oj3/RUNG/mlnav6Yl5j/c3J0/j89QP4+PD+1AAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAPjw/ET48P8A9Oz7/PTs+/z07Pv9BP0L/Pjw//z07Pv89Oz7/PTs+/z48 + P/8+PD//NzU4/7i3uf////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////////////////////46Mjv86ODz/Pjw//z89QP9CQEP/X11g/3x6fP+qqar/kZCR/0NB + RP8+PD+JAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD07PrFHRUj/g4KD/mZk + Z/5FQ0b/Pz1A/j07Pv4+PD//PTs+/j07Pv4+PD//NjQ3/qOipP/+/v7+/v7+/v/////+/v7+/v7+/v// + ///+/v7+/v7+/v////+tra7+e3p7/mFfYv9fXmD+bm1v/oKAg//Y2Nn+/v7+/v/////+/v7+/v7+/v// + ///+/v7+/v7+/v7+/v7//////v7+/v7+/v7//////v7+/v7+/v7/////09PU/ldWWP5LSUz/fHt9/kpI + S/4/PUD/R0ZI/kpJS/5CQEP/SEZJ/j48P/4+PD9AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAD07Ppo/PUD/TEtN/mNiZP5MSk3/QD5B/j07Pv4+PD//PTs+/j07Pv4+PD//OTc6/oiH + iP/+/v7+/v7+/v/////+/v7+/v7+/v/////+/v7+/v7+/v////9DQkT+NzU4/jUzNv85Nzr+Ozk8/jg2 + Of+KiYv+/f39/v/////+/v7+/v7+/v/////+/v7+/v7+/v7+/v7//////v7+/v7+/v7//////v7+/v7+ + /v7p6en/eXh6/j48P/5hX2L/lJOV/kNBRP5NTE7/qaiq/sC/wP6op6j/YmBj/jw6Pe8+PD8FAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD48P2E9Oz7/SkhL/01LTv9PTlD/QkBD/z07 + Pv8+PD//Pjw//z48P/8+PD//PTs+/21rbv/8/Pz///////////////////////////////////////// + //+joqT/lZOV/6yrrf+gn6D/nZye/5WTlf/b29v///////////////////////////////////////// + //////////////////////////////////+Ih4n/Pz1A/z07Pv9paGr/sK+x/0hGSf9SUVP/trW2/7Gw + sf/T0tT/VVNW/z07PsE+PD8BAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD07 + PjY9Oz7+YmFj/nJwcv5NS07/PDo9/mVjZv5aWFr/PDo9/j07Pv4+PD//PTs+/lNRVP/5+fn+/v7+/v// + ///+/v7+/v7+/v/////+/v7+/v7+/v/////+/v7+/v7+/v/////+/v7+/v7+/v/////+/v7+/v7+/v// + ///+/v7+/v7+/v/////+/v7+/v7+/v7+/v7//////v7+/v7+/v7//////v7+/rW0tf49Oz7/PTs+/jw6 + Pf6cm5z/pqWn/kJAQ/48Oj3/ODY5/jg2Of5PTVD/PTs+/j07PmMAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAD07PiI+PD/1PDo9/jo4O/40MjX/NDI1/p6cnv5qaGv/Ozk8/j07 + Pv4+PD//PTs+/kE/Qv/19fX+/v7+/v/////+/v7+/v7+/v/////+/v7+/v7+/v/////+/v7+/v7+/v// + ///+/v7+/v7+/v/////+/v7+/v7+/v/////+/v7+/v7+/v/////+/v7+/v7+/v7+/v7//////v7+/v7+ + /v7/////9PT0/nBucf4+PD//PTs+/j07Pv6xsbL/kI6Q/js5PP5LSUz/eHd5/nd2eP5EQkX/PTs+9j07 + Pj4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD48PxI+PD/mVVRW/6Wk + pf/CwcL/jIuN/6Khov9UU1b/PTs+/z48P/8+PD//Pjw//zUzNv/q6ur///////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////////////////////////////v7/wMDA/01MTv8+PD//Pjw//zo4O/+rqqv/eXh6/zs5 + PP9UUlX/cW9y/3Fwcv9APkH/Pjw/5D48PzQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAD07PgI9Oz7PV1VY/qKgov5ubG7/T05Q/khGSP5FQ0b/Pjw//j07Pv4+PD//Pjw//jUy + Nv/Lysv+/v7+/v/////+/v7+/v7+/v/////+/v7+/v7+/v/////+/v7+/v7+/v/////+/v7+/v7+/v// + ///+/v7+/v7+/v/////+/v7+/v7+/v/////+/v7+/v7+/v39/f75+fn/8PDw/uPi4/7MzM3/bmxv/kE/ + Qv5APkH/PTs+/jUzNv6lo6X/SUhK/j07Pv5JR0n/SEZJ/j89QP4+PD/+PTs+lj07PgwAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+PD+VPTs+/j89QP5XVVj/d3Z4/nl4 + ev5WVVf/Pjw//j07Pv5BP0L/R0VI/jw6Pf+bmpv+/v7+/v/////4+Pj+7+/v/uXk5f/o5+j+4N/g/tva + 2//R0NH+397f/vDw8P/v7u/+9/f3/v/////9/P3+8/Pz/uvr6//o6Oj+4+Pk/tnZ2f/Ly8v+tra3/qGg + of6Ni43/e3p7/mNhY/5OTE//Pjw//ldVWP48Oj3/PTs+/jk3Ov6Xlpj/OTc5/kdFSP65uLn/ubm5/lZU + V/4+PD/2PTs+cT07PgEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAA+PD9lODY5/6CfoP+KiYv/X11g/09NT/9BP0L/PTs+/z48P/9CQEP/UE5R/0E/Qv+Lioz/4N/g/5+e + n/+CgIL/cG5x/19dX/9XVVj/VVNW/1hWWf9WVFb/VVRW/1hXWf9ta27/bGpt/3Jwc/93dnj/dXR2/2ln + av9cWVz/VlRX/1RSVf9SUVP/SkhL/0A+Qf83NTj/NzU4/z8+QP88Oj3/PTs+/15cX/9FQ0b/Pjw//z89 + QP+Lioz/Pjw//0E/Qv9oZ2n/iomK/05MTv8+PD/mPjw/TgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+PD9SOzk8/k5MT/45Nzr/PTs+/j07Pv4+PD//Pz1A/j07 + Pv5CQEP/WVha/kRDRf97enz+nZyd/kVDRv9XVlj+YV9i/mhnaf9lZGb+bGps/n99f/+Mi4z+cnBy/mVj + Zv9oZ2n+W1pc/lBOUf9QTlH+WFZZ/llXWf9PTVD+UE9R/lpZW/9hX2L+Xl1f/mtpa/6WlZf/tbS1/sbG + xv49Oz7/PTs+/quqq/48Oj3/PDo9/lRSVf52dHf/PDo9/j89QP5MSk3/SEZJ/j48P/4+PD/BPTs+EgAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+PD9GPTs+9zw6 + Pf4+PD//PTs+/j07Pv4+PD//QT9C/j07Pv5DQUT/YF5h/kVDRv9kY2X+y8rL/rm4uv/R0dL+3Nzc/sXE + xf+wr7H+1NTU/vv7+//8/Pz+/v7+/vn5+f/r6+v+6Ofn/tbW1//Hx8f+uLe4/oKBg/+Af4H+f36A/nx7 + fP+KiYv+ycjJ/v79/v7//////v7+/p6dnv48Oj3/aGdp/qioqf43NTj/PDo9/mRiZf48Oj3/PTs+/kFA + Qv6Liov/mZiZ/klHSv4+PD+hPTs+AwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAA+PD84PTs+5D07Pv48Oj3/PDo9/j07Pv4+PD//PTs+/j07Pv5EQkX/YF9h/kZE + R/9VU1b+2tra/v/////7+/v+p6en/lBPUf9FQ0b+eXd5/uzr7P/+/v7+/v7+/v/////+/v7+/v7+/v// + ///9/f3+qKeo/j07Pv9EQkX+RUNH/jo4O/8sKi3+iIaI/vr5+v7/////6+vr/mVkZv5EQkX/qqmr/nl4 + ev49Oz7/Pjw//kA+Qf5APkH/Pz1A/jg2Of6mpqf/tbW2/kZFSP4+PD+FAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+PD8YPjw/sD48P/9dW17/SUdK/z07 + Pv9EQkX/U1FU/0E/Qv89Oz7/Ozk9/z07Pv9NS07/y8rL///////4+Pj/np2f/1ZUV/9qaGv/oqGj//b2 + 9//////////////////////////////////+/v7/4+Li/6qqq/+bmZv/qKeo/7q5u/+5uLr/zMvM/9LS + 0//U1NT/qqmq/01LTf9SUFP/jYyN/0tKTP8+PD//Pjw//z48P/9RUFL/xsXG/8bGxv/j4uP/mJeZ/z48 + P/8+PD9LAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD07 + Pg0+PD9+PTs+xz89QP5UU1X/PTs+/kpHS/6Uk5T/f32A/khGSf49Oz7/RUNG/kNBRP9KSEv+v76//v// + ///+/v7+7Ozs/tbW1v/29fb+/v7+/v/////8/Pz+9PP0/u3t7f/n5+f+8PDw/u3t7f/Ozc7+pqWm/oeG + h/9sam3+V1ZY/llYWv9XVVj+UU9S/kZER/5HRUj/SEZJ/j48P/4+PD//PDo9/j07Pv4+PD//PTs+/j07 + Pv4/PUD/UVBS/k5MT/5gX2H/ZGJl/kA+Qf0+PD89AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAD07Pk8+PD/8PTs+/j07Pv48Oj3/XVtd/sHAwf52dXb/QT9C/kVD + Rv48Oj3/R0VI/khGSf9GRUf+sK+w/v7+/v/6+vr+4ODg/r69vv+Uk5T+dnV3/nd1eP92dXf+cXBy/mtq + bP9bWVz+Wllb/ltaXP9TUlT+RkRH/j89QP84Njn+NzU4/jw6Pf9BP0L+NTM2/jEvMv49Oj7/QD5B/j07 + Pv4zMTT/Pjw//j07Pv4+PD//PTs+/j07Pv4+PD//VFJV/oeGiP5xb3L/bmxu/j48P/4+PD8yAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD48Px0+PD/xPjw//z07 + Pv9qaWv/oJ+h/1NRU/9DQUT/dnV3/25sbv88Oj3/PTs+/z07Pv9APkH/ZWNm/2NiZP86ODv/NTM2/zs5 + PP89Oz7/Pjw//z07Pv89Oz7/Pjw//z89QP89Oz7/QD5B/01LTv9YVlj/XVte/0JAQ/97enz/g4GD/0A+ + Qf+SkZP/zczN/9TT1P/CwsL/W1pc/0lHSv/k5OT/a2ls/zs5PP9APkH/T05Q/0lHSv88Oj3/Pjw//2xr + bf/R0dH/e3p8/zo4O/4+PD8CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAA+PD+RPTs+/jw6Pf5eXV//Q0JE/js5PP5PTVD/TUxO/js5PP4+PD//PTs+/j48 + P/89Oz7+Ojg7/jw6Pf9EQkT+PTs+/kpIS/9PTlD+Ozk8/nFwcv86ODv+U1JU/mVkZv87OTz+YWBi/paV + lv+Liov+vb29/lZUV/9qaGv+cG5w/jg2Of90c3X+REJF/qCfoP6Uk5X/OTc6/nJwcv6ysrL/VVRW/jw6 + Pf5EQkX/e3l7/qKhov6Mi4z/XVte/jk3Ov5SUFP/R0VI/j07PvA+PD8IAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+PD8+PTs+7z07Pv49Oz7/PTs+/j07 + Pv4/PUD/PTs+/j48P/49Oz7/NzU5/jY0OP89Oz7+PTs+/mxqbP+MjI3+ODY5/lRSVf9VVFb+WVda/o6N + j/83NTj+eXh5/mppa/8/PUD+mZia/nt5fP9QTlH+nJqc/lBOUf9VU1b+V1ZY/jg2Of9/fn/+MS8y/r++ + v/5SUFP/PDo9/llYWv5HRUj/PDo9/j06Pv5EQkX/RUNG/lxbXf51dHb/f36A/lNSVP49Oz7/PTs+/j07 + Pto+PD8DAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAA+PD8LPjw/lj48P/4+PD//Pjw//z48P/8+PD//PDo9/0NBRP9eXV//o6Kj/5CPkf87OTz/Pjw//0hG + SP9KSEv/PDo9/2dmaP84Njn/i4qM/2ZkZ/9BP0L/l5aX/1tZXP9EQkX/pqWm/25tb/9iYGP/nJud/0NB + RP9PTE//Y2Fj/z89QP9qaWv/Pz5A/7Kys/8zMDT/Pjw//zw6Pf9BP0L/Pjw//5qZmv+npqj/V1VY/01L + Tv9FQ0b/PDo9/0E/Qv8+PD/+Pjw/1D48P0MAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+PD8oPTs+yT07Pv4+PD//PTs+/j07Pv49Oz7/W1lc/qmn + qf7f4N//l5aY/k9OUP89Oz7+PTs+/j07Pv88Oj3+QD5B/khGSf9FREb+dXN1/kxKTf9NS07+sLCw/mJg + Yv9PTVD+srKz/l1cXv9sa23+mZiZ/kA+Qf9SUVP+bGps/js5PP9hX2L+QkBD/m9ucP48Oj3/QD5B/llX + Wf5ZV1r/Ozk8/kJAQ/6Hhoj/qKeo/rm4uf6ysbL/nJqc/lJQU/4+PD/+PTs+nz07PhAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+PD8vPTs+1z07 + Pv4+PD//PTs+/j07Pv5GREf/raut/vv7+/5/foD/Q0FE/j48P/9DQUT+PTs+/kNBRP9oZ2n+PTs+/j07 + Pv9EQkX+T01Q/kA+Qf9iYGP+3Nvc/mZkZv9fXWD+sbGy/k1LTv9vbnD+nJuc/j89QP9sa23+aWhq/jk3 + Ov9NS07+Pjw//kJAQ/4/PUD/f36A/qqpqv5WVFb/PTs+/js5PP48Oj3/TkxP/qKgov7/////1NPU/lhX + Wf4+PD//PTs+6D07Pj4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAA+PD8cPjw/uD48P/9BP0L/QD5B/z07Pv9kYmX/1dTV/4uJjP87OTz/REJF/3Fw + cv83NTj/R0VI/7y8vP+pqKn/OTc6/0A+Qf9APkH/QD5B/z06Pv9OTE//eXh6/01LTv9dW17/gH6A/0A+ + Qf9bWVz/XVte/z07Pv9CQUP/QD5B/0A+Qf89Oz7/Pjw//0ZER/88Oj3/QT9C/zk3Ov88Oj3/Pjw//1RT + Vf90cnT/REJF/z07Pv96eHr/QkBD/zs5PP9GRUf/PDo9/z48P78+PD8HAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+PD9iPTs+9T07Pv5RUFL/XVte/jw6 + Pf5IRkn/ZGJk/kNBRP5GREf/h4WH/mVjZf9APkH+jo2O/uDg4P9YVln+Ozk8/kJAQ/9IRkn+VFJV/mpo + a/9aWVv+T05Q/jw6Pf85Nzr+Pz1A/j48P/87OTz+PDo9/kA+Qf9IRkn+SUdK/ktKTP9GREf+QD5B/peW + l/4zMTT/PTs+/j07Pv4+PD//PTs+/j89QP6Xlpf/gH6A/j48P/45Njr/QD5B/nd2eP6goKH/Pz1A/j07 + Pvc+PD9RAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD07 + Pgc+PD/fPTs+/j07Pv5EQkX/goCD/m1rbv45Nzr/PDo9/j07Pv5jYWT/dHN1/kNBRP+SkZL+0tHS/n59 + fv9FQ0b+V1VY/kJAQ/8/PkD+RkRH/nt6fP+6ubv+hIKE/ru6u/+Ih4n+R0VI/jw6Pf9OTU/+PTs+/qWl + pv9WVFf+RkRH/kE/Qv9RUFL+Ozg8/p2cnv5gX2H/OTc6/j07Pv4+PD//PTs+/j07Pv5LSUz/UU9S/j89 + QP5vbXD/urm6/sfGx/5iYGL/Pz1A/j07Pv4+PD+tPTs+DQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAPjw/AT48P2g/PUD/QkBD/z48P/89Oz7/Ozk8/21rbf9VVFb/Pjw/+z48 + P/s7OTz/Ojg7/1dVWP/s7Oz/ioqL/0A+Qf9hX2H/dXN1/zw6Pf8/PUD/Ozg8/4F/gf9jYmT/Ozk8/1tZ + XP9TUVT/QT9C/zo4O/9ubW//QkFE/8nIyf8yLzP/Pjw//zo4O/9pZ2r/UU9S/1hWWf/Ew8T/UE5R/zw6 + Pf8+PD//Pjw//z48P/9LSUz/c3Fz/8fHyP/Ix8j/eHd5/z07Pv89Oz7/VlVX/0tJTP89Oz7gPjw/QgAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPTs+Mz07PtBGREf/ZmRm/khG + Sf5AP0H/Q0FE/jo4O/49Oz7/PTs+yj07PqM+PD/+PDo9/l1bXv+ioaL+RENF/jo4O/+UlJX+ZGNl/j07 + Pv9EQkX+Ojg7/sbFxv9BQEL+Pjw//kA+Qf89Oz7+PDo9/kE/Qv+CgYL+Q0FE/tHR0v8vLTD+PTs+/j07 + Pv9jYWT+j46Q/kJAQ/7BwMH/oaCh/kE/Qv4/PUD/T01P/nNxdP6zsrP/29vb/puam/5EQkX/OTc6/j48 + P/59fH7/yMjI/p+en/45Nzr3PTs+hT07PgoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAA+PD8LPTs+jj07PvtBP0L/goGD/mRiZf4+PD//U1FU/kRCRf4+PD/5PTs+gD07Phc+PD+bPjw/+zw6 + Pf9KSEv+PTs+/nd2eP/W1db+Wlhb/j89QP9DQUT+TEpN/piXmf84Njn+R0VI/kE/Qv9BP0L+SUhK/j07 + Pv9/fn/+RkRH/tPS0/85Nzr+PTs+/j48P/9eXF/+wMDB/k5NT/55d3r/e3p8/kA+Qf5cWl3/zMvM/ujo + 6P7o6Oj/iomK/kE/Qv4+PD//W1lc/rW0tv68u7z/bGps/nZ1d/5kYmX+PTs+2z07PkEAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+PD89Pjw/6T07Pv9DQUT/WVdZ/8LCwv9KSEv/Ozk8/z07 + Pv8+PD+sPjw/CwAAAAA+PD8BPjw/Uz48P64+PD/lPjw//ktJTP9sam3/REJF/0NBRP89Oz7/SUdK/2Vj + Zv9APkH/UlBT/0RCRf94d3n/Wllb/zk3Ov9NS07/QkBD/9HQ0f9TUlT/Pjw//z48P/9TUVP/paWm/1VU + Vv87OTz/Ojg7/z07Pv1SUFL/zMvM/9bV1v9aWFv/Qj9C/2VkZv+xr7H/8PDw/8vKy/9APkH/SUdK/4aE + hv9VU1b/PTs+/z48P94+PD8OAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD07PgE+PD+QPDo9/ktJ + TP5oZmj/QD1A/p+en/6hoKL/OTc6/j07Ptw+PD8xAAAAAAAAAAAAAAAAAAAAAD48Pwo9Oz5SPTs+qTw6 + Pes7OTz9PTs+/j07Pv89Oz7+RkRH/kdGSP9CQEP+VVRW/kNBRP+KiYv+b21v/jw6Pf87OTz+Tk1P/q+u + r/9YV1n+PTs+/j48P/88Oj3+OTc6/jw6Pfo+PD/LPTs+mD07PplAPkH+Y2Fj/lVTVf5CQEP/hoWH/t/f + 3/74+Pj/uLe4/kxKTf5HRUj/hYOF/m1sbv48Oj3/PDo9/j07Pv4+PD9fAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAD07Pgk+PD/vPDo9/kNBRP5jYmT/PTs+/k9NUP5raWz/PTs++z07PmQAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAA9Oz4DPTs+FT48PzY9Oz50PTs+zT48P/49Oz7+PTs+/j07Pv8+PD/+QD9B/j07 + Pv9LSUz+R0VI/j07Pv89Oz7+QT9C/k5MT/9BP0L+PTs++D48P+U9Oz6VPTs+WD07Pj0+PD8lPTs+DD07 + Pg4+PD+WPTs++zo4O/6RkJL/7e3u/v7+/v6ysbL/UU9R/js5PP52dXf/amhq/j89QP5JSEr/Z2Vo/kZE + R/4+PD+9PTs+FAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD48P1A9Oz7/TEpN/0JAQ/9ZV1r/bWtt/zs5 + PP8+PD//Pjw/zj48PycAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD48 + Px8+PD9LPjw/iD48P6s+PD+kPjw/nj48P64+PD+yPjw/pD48P5Y+PD+nPjw/jz48P4o+PD9XPjw/Ij48 + PwUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+PD8cPjw/tTw6Pf2kpKX/9/f3/8fGx/8zMTT/PDo9/2ln + af9zcXP/PDo9/1JQU/+/v8D/s7K0/0tJTP8+PD/1Pjw/hD48PwwAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD07 + PoE9Oz7/U1FU/kZER/5VU1X/iYiK/kE/Qv4+PD/+PTs+nz07PhAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA9Oz4HPTs+AQAAAAA9Oz4BPTs+Bj48 + PwEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+PD8FPTs+cD07 + PvJMSk3/kpGT/llXWv5HRUj/eHd4/ouKjP5APkH/dXN2/s3Mzf7Kycr/XFpd/jw6Pf4/PUD/PTs+7z07 + PkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAPTs+CD07Pro9Oz7/SUhK/l1bXv5CQEP/i4qM/lNRU/4+PD/yPTs+aj07 + PgIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAPTs+GT07Po49Oz7/Pz1A/kRCRf7CwsP/f35//kRCRf5kYmX/5+fn/vn5 + +f5cWl3/Ojg7/qSjpP5bWlz/PTs+/j07PogAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+PD8EPjw/YD07PutFQ0b/PDo9/3p5 + ev9HRkj/OTc6/z07Pv8+PD+wPjw/BAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD48PwI+PD+kPjw/+k1L + Tv97eXv/PTs+/0E/Qv/CwsL/+/v7/5WUlv88Oj3/YWBi/7u7u/88Oj3/Pjw//z48P+MAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + 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 + PgUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAA+PD/hQT9C/5qZmv+8u7z/QT9C/z07Pv8+PD95AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+PD8HPjw/fj48P/ZLSUz/oJ+g/1VTVv9CQEP/iYiJ/4CA + gf9BP0L/eHZ5/8/P0P9MSk3+Pjw/pz48PxQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+PD+JPTs+/kxKTf5ZV1r/Ozk8/j07Pq8+PD8HAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPTs+Hj07 + Po0/PUD/VlRX/mtpa/6Ih4n/joyO/khGSf5GREf/m5qc/u7u7/5NTE7/PTs+rz07PhgAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+PD8sPTs+yz07 + Pv48Oj38PTs+sz07PiQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAD07Pg8+PD+7Q0FE/pGQkv7Av8D/SEZJ/jw6Pf49Oz7/Xlxf/t/e + 3/5BP0P/PTs+qj07PhUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAPjw/FD48P2g+PD9cPjw/EwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+PD8vPjw/z0A+ + Qf1BPkL/PTs+/1JQU/86Nzv/dnR3/+jn6P85Njr/Pjw/oj48PxEAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAA+PD8GPTs+ZD07Pus9Oz7/TUtO/nBvcf5BP0L/sK6w/uDf4P4+PD/+PTs+jz07 + PgkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPTs+Dj07PoE9Oz7/RkRG/khG + Sf6gn6H/8vLy/pmYmf48Oj39PTs+gD07PgEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAA+PD88Pjw/zz07PvpMSk3/iYiK/1VTVv8+PD/rPjw/WAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+PD8CPTs+ND07Pps9Oz7zODY5/jw6 + Pf4+PD/JPTs+JgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAD07PhE+PD9rPTs+2z07Pss+PD9FPTs+AwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAbmxvCm5sbwYAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///////////// + //////////////////////////////////////////////////////////////////////////////j8 + P/////////////gADH//////////4AAAAD////////+IAAAAAD//AAH/+AAAAAAAAD/+AAACAAAAAAAA + AD/+AAAAAAAAAAAAAD//AAAAAAAAAAAAAD//AAAAAAAAAAAAAH//AAAAAAAAAAAAAH//gAAAAAAAAAAA + AH//gAAAAAAAAAAAAP//gAAAAAAAAAAAAP//wAAAAAAAAAAAAf//wAAAAAAAAAAAAf//4AAAAAAAAAAA + Af//8AAAAAAAAAAAA///8AAAAAAAAAAAB///+AAAAAAAAAAAD////AAAAAAAAAAAH////gAAAAAAAAAA + P////gAAAAAAAAAAf////8AAAAAAAAAA/////8AAAAAAAAAB/////8AAAAAAAAAD/////8AAAAAAAAAH + /////8AAAAAAAAAH/////8AAAAAAAAAH/////8AAAAAAAAAH/////8AAAAAAAAAH/////8AAAAAAAAAH + /////8AAAAAAAAAH/////8AAAAAAAAAD/////8AAAAAAAAAD/////8AAAAAAAAAH/////+AAAAAAAAAH + /////+AAAAAAAAAH/////+AAAAAAAAAH/////+AAAAAAAAAP/////+AAAAAAAAAP//////AAAAAAAAAP + //////AAAAAAAAAP//////AAAAAAAAAP//////AAAAAAAAAf//////AAAAAAAAAf//////AAAAAAAAAf + //////AAAAAAAAAf//////gAAAAAAAAf//////gAAAAAAAA///////gAAAAAAAA///////gAAAAAAAA/ + //////gAAAAAAAB///////gAAAAAAAB///////AAAAAAAAB///////AAAAAAAAB///////AAAAAAAAB/ + //////gAAAAAAAB///////gAAAAAAAB///////gAAAAAAAD///////gAAAAAAAD///////gAAAAAAAD/ + //////gAAAAAAAB///////gAAAAAAAB///////AAAAAAAAA//////+AAAAAAAAA//////+AAAAAAAAAf + /////8AAAAAAAAAf/////8AEAAAAAAAP/////4APAAAAAAAP/////4AfgAAAAAAH/////4Af/AAD8AAD + /////4Af/8j/8AAD/////wAf////+AAD/////gA//////AAD/////gB//////gAB/////gB//////gAB + /////gD//////4AA/////AD//////4AA/////AH//////8AAf////gP//////8AAf////gP//////+AA + f////gf///////AAf////w////////gAf/////////////gAf/////////////wAf/////////////8A + //////////////8A///////////////A///////////////z//////////////////////////////// + //8oAAAAgAAAAAABAAABACAAAAAAAAAIAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD48Pxk+PD9TPjw/EwAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+PD8ePjw/Yz48P0s+PD8DAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAPjw/7j48P/8+PD/rAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD48 + P5w+PD//Pjw/5z48PxkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAPjw/AQAAAAAAAAAAAAAAAAAAAAA+PD/+Pjw//z48P/0+PD8+Pjw/Vz48 + P0A+PD9UPjw/UD48P3A+PD+FPjw/hz48P3Q+PD9hPjw/sT48P/8+PD/xPjw/Jz48Pwc+PD8RPjw/BwAA + AAAAAAAAAAAAAD48PxM+PD80Pjw/PQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAPjw/ED48Px8+PD8xPjw/QT48P0Q+PD9mPjw/aD48P4g+PD+hPjw/yj48 + P/A+PD//Pjw//z48P/8+PD//Pjw//z48P/0+PD//Pjw//z48P/8+PD//Pjw//z48P/8+PD//Pjw//z48 + P/8+PD//Pjw//z48P/8+PD//Pjw/7D48P9U+PD/iPjw//j48P9s+PD/rPjw/8j48P/c+PD/uPjw/MQAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPjw/BT48 + Pwc+PD8LPjw/FAAAAAAAAAAAPjw/GT48Pz4+PD9fPjw/eT48P6A+PD+/Pjw/wD48P9M+PD/hPjw/5T48 + P/Y+PD//Pjw//z48P/8+PD//Pjw//z48P/8+PD//Pjw//z48P/8+PD//Pjw//z48P/89Oz7/Pjw//z48 + P/8+PD//Pjw//z48P/8+PD//Pjw//zw6Pf86ODv/Pjw//zs5PP8/PUD/Pjw//z48P/8+PD//Pjw//z48 + P/8+PD//OTc6/zk3Ov89Oz7/Pjw//z48P/8+PD9jAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPjw/BT48 + PxY+PD8pPjw/Pz48P1g+PD92Pjw/lj48P7I+PD/DPjw/xD48P+U+PD//Pjw//z48P/8+PD//Pjw//z48 + P/0+PD//Pjw//z07Pv8+PD//Pjw//z48P/8+PD//PTs+/z48P/8+PD//Pjw//z48P/9DQkT/PTo+/z48 + P/8+PD//Ojg7/0xKTf8+PD//PTs+/1hXWf9DQUT/Pjw//0RCRf9APkH/Pjw//z48P/89Oz7/UVBS/3Z1 + d/+EgoT/kJCR/zUzNv8+PD//SEZJ/2dlZ/9HRUj/Pjw//zs5PP9wb3H/kpGT/4yLjP81Mzb/Pjw//z48 + P2gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAPjw/Aj48PyM+PD9APjw/RD48P14+PD9yPjw/ez48P4M+PD+RPjw/tD48 + P7A+PD+gPjw/mD48P3w+PD9/Pjw/eT48P2Q+PD81Pjw/Mz48PyQAAAAAAAAAAD48PwE+PD8CAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPjw/BT48 + PxY+PD8pPjw/Pz48P1c+PD90Pjw/lT48P7E+PD/JPjw/3T48P+4+PD//Pjw//zw6Pf87OTz/Pjw//z48 + P/89Oz7/OTc6/z89QP8/PUD/NTM2/z07Pv8+PD//RkRH/z89QP89Oz7/RkRH/0RCRf9RT1L/Pjw//z07 + Pv9JSEr/PDo9/z48P/8+PD//REJF/8jIyv+Wlpf/NzU4/0E/Qv+1tLX/+Pf4/y0qLv80MTX/p6an/zQy + Nf8+PD//VVNW/0RDRf8+PD//Pjw//z48P/9PTVD/UE9R/2BfYf/Kycr/Ozk8/zY0N/+OjI7/+Pj4/318 + fv8+PD//Liwv/+Li4v//////pqWl/zs5PP8+PD//Pjw/WAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+PD9bPjw/6j48 + P/c+PD//Pjw//z48P/8+PD//Pjw//z48P/8+PD//Pjw//z48P/8+PD//Pjw//z48P/8+PD//Pjw//z48 + P/8+PD/4Pjw/9D48P/8+PD/iPjw/uj48P7U+PD9xPjw/Qz48Pyg+PD8xPjw/IgAAAAAAAAAAPjw/Bz48 + PyQ+PD8oPjw/Pz48P1c+PD90Pjw/lT48P7E+PD/JPjw/3T48P+4+PD//Pjw//z48P/88OT3/Ozk8/z48 + P/8+PD//QkBD/z07Pv88Oj3/T05Q/1hXWf87OTz/Pjw//42Njv+koqT/MjAz/zY0N/+ZmJr/lZSW/z48 + P/9gX2H/UU9S/zw6Pf9eW17//////5uam/88Oj3/PTs+/11cXv88Oj3/Pjw//z48P/9EQ0b/4uLi/7e3 + uP8yMDP/PTs+/6+usP/s7Oz/MjAz/zc1OP+wr7D/Mi8z/zw6Pf9ZWFr/TkxP/z48P/89Oz7/Pjw//z48 + P/8+PD//PTs+/6emp/9SUFP/Ojg7/3Z0dv//////oqGi/z07Pv81Mzb/urq6//////+GhYf/Pjw//z48 + P/8+PD9IAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAD48P1s+PD/6Pjw//z48P/8+PD//Pjw//z48P/9DQUT/Pjw//z48 + P/84Njn/Pjw//z48P/87OTz/PTs+/z48P/8+PD//Pjw//z07Pv8+PD//Pjw//z48P/8+PD//Pjw//z07 + Pv8+PD//Pjw//z48P/I+PD/3Pjw//z48P/8+PD/uPjw/8z48P+4+PD//Pjw//z48P/85Nzr/ODY5/z48 + P/8+PD//RkVH/0RDRf8+PD//PTs+/1RTVf9tbG7/ODY5/z48P/9ubW//TEpN/zg2Of+zsrP/zMvM/zAu + Mv86ODv/z87P/6moqv85Nzr/NzU4/4uKi/+enZ7/Ozk8/0dFSP9TUlT/Pjw//1RSVf/29vb/pKOk/zc1 + OP8+PD//XVte/0E/Qv8+PD//Pjw//0JAQ//IyMn/v7+//zIwM/80MjX/vLy8/7y7vP89Oz7/Wlhb/6al + p/84NTn/NzU4/4eGh/86ODv/Pjw//0lHSv88Oj3/Pjw//z48P/86ODv/kZCS/29ucP89Oz7/ZmRm//r6 + +v/BwMH/NzU4/zw6Pf+cm53//v7+/25tb/88Oj3/Pjw//z48P0cAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPjw/AT48 + P6Y+PD//Pjw/3T48P/k+PD//PDo9/8C/wf8wLjL/PDk9/4WEhv9APkH/PTs+/3Jxcv9JR0r/PTs+/zo4 + O/+Eg4T/dXR2/z07Pv8+PD//Pjw//z48P/8/PkD/RENG/z07Pv8+PD//SkhL/z48P/8+PD//PDo9/zg2 + Of89Oz7/Pjw//z48P/8+PD//Pjw//29ucP+Ih4n/Pjw//zMxNP+zs7T/0tLS/0hHSv86Nzv/k5KU//j4 + +P8rKSz/Pjw//0tJTP9OTE//Pjw//7+/v//X1tf/Liwv/zMxNf+5uLn/p6an/z48P/82NDf/mZeZ/7W0 + tf81Mzb/QD5B/0pIS/8+PD//TkxP/+3t7f+OjY//NjQ3/zs5PP99fH3/TEpN/z48P/8+PD//Ozk8/6Gh + ov/Kycn/ODY5/zAuMf/CwcL/rayu/zk3Ov9WVFf/q6qr/z49P/83NTj/mpma/zQyNf85Nzr/aWhq/zo4 + O/8+PD//Pjw//zk3Ov98e33/ioiK/z48P/9ZWFr/7u7u/+Tk5P8vLTH/Pjw//4F/gf//////MS8z/z07 + Pv8+PD/8Pjw/KAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPjw/dD48P/4+PD//Pjw//z48P/9eXF//qqmq/zMx + NP80MjX/6+vr/zIwM/8+PD//ioiK/1dVWP8+PD//LSsu//////+3trf/PTs+/0A+Qf8/PUD/Pz1A/5OS + lP+NjI3/ODY5/zs6PP/d3d7/mZia/z48P/9SUFP/ysrK/zMxNP8+PD//Pjw//z48P/8qKCv///////// + //86ODv/MzE0/7i3uP/j4+T/RkNG/z07Pv+BgIL//////ykmKv8+PD//QkFD/0hGSf89Oz7/tbS2/+vq + 6/8wLjH/MzE0/6Khov+xsbL/Ozk8/zk3Ov+pqKr/ysrK/y8uMP8+PD//PTs+/z48P/9BQEL/6Ofo/4mI + iv86ODv/MjAz/6emp/9TUVP/Pjw//z48P/85Nzr/g4KE/9bV1f9APkH/MzE0/9jY2P+Qj5H/NjQ3/1NS + VP/FxMX/Ozk8/zs5PP98e33/Ojg7/z48P/9BP0L/Pjw//z48P/8+PD//OTc6/2ppa/+mpab/Ojg7/0xK + Tf/j4+P//Pv8/yknKv8+PD//YmFj/+Tk5P85Nzn/Pjw//z48P+oAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAA+PD8gPjw/6D48P/8+PD//Pjw//2lnaf93dnj/Ozk8/3h3ef/Gxcb/MS8y/zw6Pf9xcHL/fHt9/z48 + P/9IR0n/9PT0/3NydP85Nzr/Pjw//z48P/81Mjb/4+Lj/4aFh/89Oz7/aWdp//v7+//Ew8T/NzU4/1RS + VP/r6uv/QD5B/z48P/8+PD//Pjw//ygmKf//////9vX2/09NUP82NDj/vb29//Py8/88Oj3/Pjw//2po + av/+/v7/Ly0w/z48P/8+PD//S0lM/zMxNf+4t7f/8/Lz/z48P/83NTj/kpGS/6Ggov82NDf/PTs+/62t + rv/p6ej/MC0x/z48P/8+PD//Pjw//zUzNv/g39//f31//z48P/8xLzL/x8bH/0lISv89Oz7/Pjw//zk3 + Ov9ramv/4ODg/0VDRv87OTz/1tbX/2loav8zMTT/hIOF/8HAwf81Mzb/Pjw//3Z0dv9EQkX/Pjw//z48 + P/8+PD//Pjw//z48P/87OTz/YWBi/8fGyP8zMDT/Pz1A/8TExP//////LSsu/z48P/8/PkD/tLK0/zs4 + PP8+PD//Pjw/fwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD48PwM+PD+MPjw//j48P/88Oj3/YmFj/3Ny + c/89Oz7/m5qc/7Gxsv83NTj/ODY5/3l4ev+KiYv/PDo9/1NSVP/s6+z/Ojg7/z48P/8+PD//PTs+/0E+ + Qv//////f36A/z48P/90c3X//f39/8TDxP8zMDT/Pjw//+Pj4/9JR0r/Pjw//zs5PP8+PD//LSsu/+3s + 7f/w8PD/Wllb/z89QP+4t7j//////yclKP8+PD//VVNV/+bm5v9CQEP/Pjw//1ZUV/9MS03/MC4x/8XE + xf/p6en/T05Q/zw6Pf+OjY//dXR2/zk3Ov84Njn/qKeo//Ly8v84Njn/Pjw//z48P/8+PD//Ly0w/9nZ + 2f+Lioz/Pjw//zQyNf/S0dL/Pz1A/z07Pv8+PD//OTc6/3V0dv/s7Oz/QkBD/0E/Qv/Ix8j/T05Q/zg2 + Of+vra//q6qs/zQyNf8+PD//XFpd/0RDRf8+PD//Pjw//z48P/8+PD//Pjw//zw6Pf9ubW//+/v7/ykm + Kv83NTj/n5ye//////8+PD//Pjw//zQyNf+cm5z/ODY5/z48P/4+PD9aAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAD48Pxw+PD/lPjw//zQyNf+qqqr/RURH/zUzNv+4t7j/srGy/z07Pv82NDf/mJeY/4uK + i/84Njn/R0VI/9TT1P9FQ0b/Pjw//z48P/89Oz7/e3l7//////9wb3D/OTc6/39+f///////vby9/zAv + Mf84Nzr/8/Pz/0dGSf8+PD//XVxe/0VDRv81Mzb/yMjJ//b29v9DQUT/ODY5/8XFxf/5+fn/NTM2/z48 + P/8yMDP/1tXW/zg2Of88Oj3/jYyO/0JAQ/81Mzb/rayt//X19f9fXF7/Pjw//3h2eP9ramv/PDo9/zEu + Mv/Hxsf/7ezs/0dFSP8+PD//Pjw//z48P/8uLC//3d3d/5KRkf86ODv/PDo9/9DQ0f88Oj3/Pjw//z48 + P/86ODv/e3p8//r6+v8zMTT/NzU4/8TExP9WVVf/PTs+/7W1tv+Mi43/OTc6/zg2Of9xcHL/Ojc7/z48 + P/8+PD//Pjw//z48P/8+PD//Pjw//2BeYP//////LCkt/zY0N/+KiIn//////1dVWP8+PD//ODY5/2dm + aP87OTz/Pjw//z48PxoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPjw/Aj48P5w+PD//NTM2/9/e + 3/8tKi7/LSsu/+fm5/+vrrD/PTs+/zg2Of+op6j/fHp9/zg2Of8zMTT/3t7f/z07Pv8+PD//Pjw//z48 + P/+Tk5T//////11cXv8yLzP/np2f//////+Yl5j/NzU4/2FgYv/9/f3/Mi8z/z48P/9TUlT/YmFj/z48 + P/+VlJX/+vr6/ygmKv8rKSz/7u7u//b29v9GREf/Pjw//zMwNP+wsLD/NjM3/z48P/+qqar/Xlxf/zo4 + O/+lpKX//Pz8/09OUf8+PD//ZGNl/2dlZ/8+PD//Ly0w/9fW1//x8vL/V1VY/z48P/8+PD//Pjw//zIw + M//a2tv/fn1//zg2Of8/PUD/oqGi/01LTv8+PD//Pjw//z48P/9+fX//6ejp/y4sL/8uLDD/6enp/y4s + L/85Nzr/sbCx/3t5e/8+PD//Ojc7/21sbv85Nzr/Pjw//z48P/8+PD//Pjw//z48P/8+PD//Wllc//b1 + 9v84Njn/NzU4/4OCg///////dnV3/z48P/8+PD//PTs+/z48P/8+PD/aAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAPjw/VT48P/49Oz7/bm1v/zw6Pf8zMTT/8/Pz/7Oys/83NTj/PDo9/6Cf + of99e33/NzU4/0NBRP/c29z/MjAz/z48P/8+PD//NzQ4/7a1tv//////Ozk8/zUzNv+2tbb//v7+/3d1 + eP8+PD//f31///////8oJin/Pjw//0NBRP9+fH7/NzU4/39+gP/5+fn/MzE0/zUzNv/+/v7/7Ozs/1FP + Uv89Oz7/WVha/3Fvcf84Njr/MC4x/+zs7P9samz/PTs+/5qZmv//////UVBS/zs5PP9LSUz/fn1//zw6 + Pf8zMTT/3Nzc//X19f9paGr/Pjw//z48P/8+PD//PDo9/9DQ0f9aWVv/PTo+/zQyNf+trK3/OTc6/z48 + P/8+PD//Pjw//2poa//GxMb/Ozk8/09OUP+vrq//MzA0/zIwM/+3trf/gH6A/z48P/8+PD//UlFT/z07 + Pv8+PD//Pjw//z48P/8+PD//Pjw//z48P/9GREf/+fn5/01LTv85Nzr/e3l7//////+Xlpj/Pjw//z48 + P/8+PD//Pjw//D48P1sAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+PD8iPjw/4j48 + P/85Nzr/Pjw//0NBQ//i4uL/t7W3/zMxNP8+PD//k5OU/5OSk/86ODv/ZGNl/5KRkv82NDf/Pjw//z48 + P/8vLTD/1tbW//r6+v9YVln/OTc6/7a1tv/8/Pz/UlBT/zw6Pf9/foD//////zUzNv8+PD//NjQ3/8fG + xv9ubG///Pz8//b29v/W1db/oqKj/8bFxv+rqqv/TEtN/z48P/9MSk3/VVNV/zo4O/9zcXP/8fHy/3l4 + e/89Oz7/goCC//////9SUVP/Ojg7/0dFSP++vb7/UlBT/21rbf/s7O3//////3Z1d/81Mzb/Mi8z/z07 + Pv8/PUD/6unp/15dX/8+PD//NDI1/5GQkv82NDf/Pjw//z48P/87OTz/bGxt/7Kxsv8+PD//Z2Vn/39+ + gP88Oj3/MC4x/8vKy/9qaWv/PDo9/0RCRf9JR0r/Pjw//z48P/8+PD//Pjw//z48P/8+PD//Pjw//zQy + Nf//////YF5h/z07Pv9raWv//f39/7q5uv85Nzr/Pjw//z48P/8+PD/wAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAD48PwQ+PD+ePjw//z48P/8+PD//Q0FE/93c3f+tra7/NDI1/zk3 + Ov+CgYP/t7e4/z8+QP9kYmT/XVxe/z48P/8+PD//Pjw//y8tMP/c29z/+vr6/25sbv8+PD//mJeY//X2 + 9f8vLTD/NzU4/5COkP//////SkhL/z48P/81Mzb/jo2P/5OSk/9ycHL/YV9h/1RSVP9GREb/OTc6/zQy + Nf89Oj7/Pjw//z07Pv8+PD//PTs+/zg2Of8sKi3/RkRH/z48P/8/PUD/TEtN/1FPUv87OTz/RENG/0dF + SP93dnj/m5qb/6Khov+npqf/ycjJ/2ZlZ//NzMz/jo2P/7q5uv/+/v7/c3J0/z48P/9BP0L/T05Q/z07 + Pv8+PD//Pjw//zg2Of98e33/pKOk/zo4O/9SUFP/hYOF/z48P/8xLjL/5ebl/zMxNP8+PD//Pz1A/0NB + RP8+PD//Pjw//z48P/8+PD//Pjw//z48P/88Oj3/SkhL//////93dXj/Pjw//1tZXP/u7u7/6Ojo/y8t + MP8+PD//Pjw/+j48Pz0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD48 + PyU+PD/jPjw//z48P/83NTf/3Nrc/52dnv87OTz/NTM2/5OSlP/Kycr/OTY6/01LTv9lY2b/Pjw//z48 + P/8+PD//Q0FE/9PT0//7+/v/bmxu/zs5PP+enZ//tLO0/zo4O/83NTj/b21v/2xqbf8/PUD/Pjw//z89 + QP82NDf/NTM2/zk3Ov8+PD//Pjw//z48P/87OTz/Pjw//z48P/9APkD/YmFj/21rbv9NS07/JyUo/zk3 + Ov9HRUj/PDo9/z48P/85Nzr/PTs+/z48P/8+PD//Pjw//zk3Ov85Nzr/PTs+/zs5PP8wLjL/aGdp/3l4 + ev////////////n5+f90cnT/PTs+/1RTVf9hX2L/Pjw//0NBRP8+PD//NTM2/7Sztf9sa23/NTI2/359 + f/9vbnD/PTs+/0RCRf/V1dX/NzU4/z48P/9EQkX/PTs+/z48P/8+PD//Pjw//z48P/8+PD//Pjw//z48 + P/9kY2X//////319ff86ODv/SkhL//Dw8P+hoKL/NjQ3/z48P/8+PD/vPjw/BgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD48P3Y+PD//Pjw//y4sMP/j4uL/rq6v/z48 + P/83NTj/jo2O/+Xl5f8wLjH/Pz1A/2dlaP89Oz7/Pjw//z48P/9BP0L/wMDC//////92dXb/NTM2/3Vz + df94d3n/Pjw//z48P/8+PD//PDo9/zQyNf8rKSz/Ozk8/z07Pv9XVVj/fXx+/1dVWP87OTz/MzE0/8PC + w/9KSEv/Pjw//15cX//6+vr/+Pj4///////u7u7/vLq8/97e3v9QTlH/Ojg7/2BfYf9gXmD/Pjw//z48 + P/83NTj/Pjw//z48P/89Oz7/NzU4/z48P/89Oz7/Liwv/9va2//9/f3/iIeJ/0VDRv8+PD//REJF/5OS + lP9vbXD/cG9x/zw6Pf8+PD//3d3d/z48P/8yMDP/ysnK/zAuMv8+PD//RUNG/9jX2P9IRkj/Pjw//0xK + Tf89Oz7/Pjw//z07Pv8+PD//Pjw//z48P/8+PD//Pjw//25tb///////jIuM/zY0N/87OTz/w8LD/z07 + P/8+PD//Pjw//z48P20AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAPjw/DT48P84+PD//MzE0/5yanf+/vr//Ojg7/zo4O/+amJr/9vb2/yspLP8+PD//PTs+/z48 + P/8+PD//Pjw//zk3Ov/Jycn/7e3t/29ub/87OTz/Ojg7/z07Pv8+PD//R0VI/1lXWv+LiYv/yMjJ//X1 + 9f9XVlj/MS8y/5aVlv//////pKOk/zUzNv8xLzL/rKus/2FgYv8+Oz//Pjw//87Nzv//////jo2P/zEu + Mv9VU1b/9/f3/ysoLP8wLjH/zczM/7y8vf86ODv/Ozk8/5OSk/86ODv/PTs+/0lHSv+Af4H/TUtO/z48 + P/8rKS3/7u3t/9TU1f89Oz//Pjw//z48P/89Oz7/OTc6/z89QP88Oj3/Pjw//01LTv+xsLH/RUNG/z49 + P/+Pjo//PDo9/zw6Pf9aWFv/8O/w/0A+Qf8/PUD/XFtd/z89QP8+PD//R0VI/z07Pv8+PD//Pjw//z48 + P/88Oj3/cG5x//////92dXf/OTc6/zg2Of9mZWf/PDo9/z48P/8+PD/QPjw/AwAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPjw/Lz48P/89Oz7/Ojk8/8vK + y/82NDf/PTs+/46Njv/d3N3/Ly0w/z07Pv9EQkX/Pjw//z48P/8+PD//OTc6/2JhY/9JR0r/Ozk8/z48 + P/8+PD//Pjw//zY0N/+VlJX/8/Pz/////////////////0RCRf86ODv/Q0JD///////m5+b/NzU4/zY0 + N/+DgYP/o6Kj/zg2Of88Oj3/lZOV//////+Wlpf/Ojg7/0JAQ//d3d7/Ozk8/zMxNP+3trf/29vc/zIw + M/8+PD//hIKE/0pIS/88Oj3/TkxP///////CwML/QD5B/zo4O//h4eL/sbCx/zMxNP8+PD//Pjw//z48 + P/9EQkX/Q0JE/z48P/89Oz7/QD5B/zw6Pf89Oz7/Pjw//4iGiP88Oj7/OTc6/6Wkpv/Ly8v/Ly0w/zQy + Nf+BgIL/Ojg7/z48P/9WVVf/Pz1A/z48P/8+PD//Pjw//zUzNv+cm53//////3Z1d/87OTz/Pjw//zo4 + O/8+PD//Pjw//z48Pw8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAPjw/bD48P/Y7OTz/RkRH/z48P/8+PD//cG9x/+Tj4/86ODv/Pjw//z48 + P/8+PD//RUNG/0tJTP89Oj7/PTs+/z48P/9BP0L/eXd6/3NydP88Oj3/PTs+/ywqLf/JyMr///////// + ////////x8XH/y8tMP8qKCz/39/f//////9TUFT/Ojg7/1RSVP/y8vL/Ly0w/z48P/9dW17/8/Pz/7Gw + sf80MjX/Pz1A/8TExP9kYmX/ODU5/4F/gf/29vf/LCot/z48P/9qaWv/ZmRn/z48P/8tKy7/7ezt/9TU + 1f9APkH/REJF/9vb2/+Ih4n/ODY5/z48P/8+PD//ODY5/3x7ff9VVFb/Pjw//0dFSP8+PT//PTs+/z48 + P/88Oj3/Q0FE/z48P/9APkH/0M/Q/25tb/85Nzr/ZmVn/2NiZP88Oj3/PTs+/4OCg/9BP0L/Pjw//z48 + P/8+PD//MS8y/8nJyf//////eHZ5/z48P/8+PD//Pjw//z48P/8+PD8vAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPjw/KD48 + P/M+PD//Pjw//zo4O/9ubW//6urq/0dFSP8+PD//Pjw//z07Pv9FQ0b/QD5B/z48P/85Nzr/S0pM/729 + vv/+/v7/7+/v/1xaXf88Oj3/Pjw//0VDRv/r6+v/////////////////QUBC/zQyNf93dXj//////6Gg + ov83NTj/MjA0//////9MSk3/PTs+/0dFSP/d3N3/ycnK/y4sMP89Oz7/eHZ4/6+vsf87OTz/ZGNl//// + //8qJyv/Pjw//0hGSf+joqP/PTs+/zg2Of+cm53/9fX1/zQyNf86ODv/3dzc/2loav8/PUD/Pjw//z48 + P/83NTj/mJeY/zIwM/8wLjH/ycjJ/7a2tv9FQ0b/Pjw//z48P/89Oz7/Pjw//zUyNv/z8/P/S0lM/zw6 + Pf+fnZ//PDo9/z48P/8vLTH/2tna/zUzNv8+PD//Pjw//z48P/86ODv/0tHS//n5+f9nZmj/Pjw//z48 + P/8+PD/vPjw/JwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPjw/RD48P/0+PD//Ojg7/2BfYf/19fX/SUdK/z48 + P/8+PD//Pjw//z48P/8+PD//NTM2/3Rydf/w8PD/////////////////397f/zEvMv8+PD//Ozk8/4qJ + i/////////////////+ZmJr/MjAz/y0rLv/5+Pn/7Ovr/zw5Pf8zMTP/urm6/5WUlf82NDj/Pz1A/5WT + lf/9/f3/LSsu/z48P/9DQUT/ubm6/0RCRf9LSUz/8PDw/zUzNv8+PD//MzE0/8rKyv83NDj/PTs+/4iH + if//////KSYq/y8tMP/r6ur/eXd5/z48P/9BP0L/Pz1A/zs5PP+Uk5T/OTc6/zAuMf/Kycv/zs7O/zY0 + N/8+PD//Ojg7/z07Pv89Oz7/PTs+/4KAgv85Nzr/OTc6/7y7vf9GREf/PTs+/1VUVv/u7u7/LSsu/z48 + P/8+PD//Pjw//z89QP+wsLH/WVdZ/z07Pv8+PD//Pjw//z48PzsAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAA+PD8HPjw/vT48P/89Oz7/PDs9/8XFxf9PTlD/Pjw//z48P/8+PD//Pjw//zk2Ov+ko6T///////// + ////////////////////////9vX2/0NCRP81Mzb/REJF/7y7vP/9/f3///////b19v87OTz/NDI1/3t6 + fP//////hoWH/zk3Ov9dW17/4eHh/ywpLf8+PD//U1JU//////84Njn/Pjw//zIwM//Y19j/WVha/0A+ + Qf/S0tP/TEpN/z48P/8sKi3/4eHh/zAuMf8+PD//dHJ0/97d3v8xLzL/KCYp//39/f9sa23/PTs+/0E/ + Qv9BP0L/PTs+/4WEhv9HRUj/NDI1/9XU1f/Ly8v/MS8y/z48P/9lY2b/VFJV/z48P/8+PD//Ozk8/zs5 + PP9lZGb/trS2/zY0N/8/PUD/jIuN/93c3f8yMDP/Pjw//z48P/8+PD//PDk9/09OUP88Oj3/Pjw//z48 + P/8+PD88AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+PD88Pjw/8z48P/89Oz7/ODY5/zw6 + Pf8+PD//Pjw//z48P/8+PD//OTc6/7u7vP//////////////////////////////////////5OTk/3Vz + df9APkH/Ojc7/4KBg////////////8PCw/8vLTD/JiQn/+bm5v/g4OD/Pjw//y4sMP/w8PD/JyUo/z89 + QP9EQkX/9vX1/1lXWv89Oz7/MS8y/7CvsP9wbnD/Pjw//4OChP9xcHL/Pjw//y0rLv/c3Nz/LSsv/z48 + P/9iYWP/4ODg/zo4O/86OTz/+Pj4/09NUP88Oj3/Pjw//0JAQ/8+Oz//eHd5/1xbXf89Oz7/uLe4/9jX + 2P8vLTD/Pjw//01LTv9wbnH/Pjw//0A+Qf89Oz7/PDo9/2JhY/9UUlX/PTs+/zY0N/+/vr//xcXG/zs5 + PP8+PD//Pjw//z48P/8+PD//PDo9/z48P/8+PD//Pjw/OAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAA+PD9NPjw/8T48P/8+PD//Pjw//z48P/8+PD//PTs+/0RCRf8vLTD/PDo9/19e + YP+/vsD//v7+/////////////////////////////////3RydP88Oj3/MzE0/46Njv///////////zUz + Nv80MjX/iIeJ//////9VU1X/OTc6/7S0tf9hYGP/OTc6/zc1OP/Kysr/m5uc/zo4O/80MjX/mpma/6mo + qv85Nzr/X11g/4mHif8+PD//MzE0/8bFxv8uLC//Pjw//0hGSf/k4+T/Q0FE/0pISv/p6On/ODY5/z48 + P/9APkH/RENF/zQxNf+qqar/Pjw//zs5PP+mpab/ycnJ/zc1OP86ODv/amlr/1taXP84NTn/amlr/zs5 + PP8+PD//Pjw//z07Pv8+PD//MS4y//v7+/+/vr//QT9C/z89QP8+PD//Pjw//z48P/8+PD//Pjw/9T48 + P0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+PD8xPjw/kz48 + P/Q+PD/+Pjw//z48P/8/PUD/v76//7SztP81Mzb/Ozk8/zc1OP+Dg4T///////////////////////// + ////////0dHR/0A+Qf8/PUD/MC4x/8LDw///////ZmVn/zg2Of84NTn//////4WDhv88Oj3/cG5w/3R0 + df85Nzr/MzE0/7q5uv+6urv/Pz1A/zk2Ov90cnT/4uLi/zIvM/9APkH/kZCS/zw6Pf86ODv/rKus/zs5 + PP87OTz/X11g/+vr6/80MjX/Q0FE/9DQ0P9JR0r/PTs+/0NBRP89Oz7/MC4y/87Nzv8tKi7/NTM2/6uq + q/++vr//Pz1A/zk3Ov+KiYv/R0ZI/zo4O/9YVln/PDo9/z48P/87OTz/Pjw//z48P/9dW17/+fn5/7y6 + vP83NTj/SEZI/3Fvcf8+PD//Pjw//z48P/8+PD89AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD48P2g+PD//Pjw//0JAQ//p6en//////42M + jv8yMDP/Pjw//zQyNf9cW17/3d3e////////////////////////////bGxu/zo4O/8+PD//QD1B/+3t + 7f+gnqD/NTM3/zAuMf+5uLn/xsXG/0E+Qv9UUlb/fXx+/zk3Ov84NTn/cG9x/+jo6P9MS03/Pjw//0tK + Tf//////KSgq/zQyNf+Yl5j/NzU4/z48P/9vbW//UlFT/zo4O/+DgYP/zMvM/zAuMf8vLTD/5ubm/0E/ + Qv8+PD//Pjw//z48P/9APkH/srGy/zQxNf8zMTT/pqWm/7Kxsv86ODv/Ojg7/6Ggov86ODv/Pjw//zs5 + PP8+PD//PDo9/1RTVf87OTz/Pjw//21rbf//////oqGj/zY0N/89Oz7/ODY5/z48P/8+PD//Pjw/YwAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAPjw/Ij48P/89Oz7/R0VI////////////+vr6/4mIiv84Njn/QD5B/zo4O/9WVlf/7Ozs//// + ///////////////////v7+//QT9C/zo4O/88Oj3/d3Z4/9LR0v82Mzf/Ojg7/1ZUV//29vb/UlFU/0JA + Q/+Hhof/REJF/zw6Pf9TUlT//////2JgYv8+PD//QkFE//X19v8rKS3/NTM2/46Nj/83NDj/PDo9/3Fw + cf9ZV1r/PTs+/5OSlP+9vL3/MS8y/0dFSP/s6+z/Liwv/z48P/8+PD//Pjw//1FPUv+oqKn/PTs+/zQy + Nf+ysLL/lZSV/zg2Of8+PD//kZCS/0pIS/8+PD//Pjw//z48P/8vLTD/7u3u/2RjZf86ODv/QD5B/4eG + iP9cW13/PDo9/z48P/8+PD//Pjw/8T48PwgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+PD91Pjw//z07Pv82NDf/mZiZ/+vr + 6////////////7q5uv8zMTT/Ojg7/z07Pv96eXv////////////////////////////W1db/Ozk8/zw6 + Pf8+PD//lJOU/0lHSv8/PUD/MS8y/7Kxsv+Ni43/PTs+/2FgYv9ZWFr/PTs+/0pIS//9/f3/gYCC/zs5 + PP86ODv/z87P/zk3Ov86ODv/bm5v/zg2Of85Nzr/cXBy/05MT/89Oz7/oZ+h/6OjpP85Nzr/W1pc/8HA + wP8xLzL/Pjw//z48P/8+PD//R0VI/8XExf89Oz7/ODU5/769vv9RUFP/PDo9/zUzNv+xsLH/Pz1A/z48 + P/8+PD//Pjw//01LTv/4+Pj/jo2O/zY0N/8+PD//NjQ3/zs5PP8+PD//Pjw//z48P+U+PD8YAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAD48P6I+PD//PTs+/zw6Pf82Mzf/Tk1P/9LR0v/6+vr//////9jY2P9sam3/ODU5/zw6 + Pf9HRkn/nZyd/+Xl5f/////////////////w8PD/OTY6/z48P/9ZV1r/fXx+/zs4PP86ODv/UlFT/7u7 + vP85Nzr/RkVH/1RTVf8+PD//RURH/+3t7f+rqav/NjQ3/z48P/+Vk5X/T01Q/zs5PP96eXv/OTc6/zg2 + Of9+fX//Ojg7/zIwM//R0dH/np2f/z48P/9xcHL/k5KU/zg2Of8+PD//Pjw//zg2Of+Ni47/qqiq/zc1 + OP89Oz7/nZyd/1BOUf89Oz7/R0ZI/7CvsP8yMDT/Pjw//z48P/8/PUD/T01P//////95d3n/OTc6/z48 + P/8+PD//Pjw//z48P/8+PD+5Pjw/AwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPjw/yzw6Pf9aWFv/VVRW/zw6 + Pf8+PD//MTAy/2lnaf95eHr/1dXV///////W1tf/RURH/zs5PP84Njn/UE9S/8TDxP////////////// + //+lpKX/NzU4/0A+Qf+fnp//QT9C/z48P/8vLTD/wcDB/zUzNv8/PUD/SkdL/z48P/9NS07/6Ojo/8fG + x/8wLTH/Pjw//2lnaf9hYGL/Pjw//3d1eP9DQUT/NzU4/5aVlv81Mzb/ODY5//////+ioaL/Ojg7/15d + X/+TkpT/Pjw//z48P/8+PD//PDo9/9DQ0P9oZmn/Ojg7/zg2Of+ioaH/W1lb/z07Pv+GhYf/Y2Jk/zw6 + Pf8+PD//Pjw//zc1OP+Mi43//////2ZlZ/8+PD//Pjw//z07Pv8+PD//Pjw//z48P5AAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAA+PD/qNjQ3/6qpqv//////i4qM/1hXWf82NDf/Pjw//z07Pv8oJin/Z2Zo/6+u + r//FxMb/MC0x/zw6Pf89Oz7/MC4y/5+dn/////////////b29v9iYWP/Pjw//3p5e/9hX2H/PDo9/zUz + Nv+Ghof/NzU4/z48P/8+PD//Pjw//0VDRv/X19j/ycjJ/zEvMv8+PD//RURG/05NT/8/PUD/TEpN/z48 + P/9BP0L/V1ZY/z07Pv9JR0r/TUtO/zo4O/88Oj3/UlBT/4KBg/88Oj3/Pjw//z48P/9APkH/ysnJ/1RS + VP8+PD//Liwv/97d3f9FQ0X/PTs+/359f/9cW13/Pjw//z48P/8+PD//NDI1/9XU1P/y8vL/Wldb/z48 + P/9wbnH/S0lM/z48P/8+PD//Pjw/hgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD48P8c7OTz/m5qb/3p5 + ev9CQEP/Ojg7/2ppa/9KSEv/NzU4/z89QP89Oz7/NjQ3/3RydP+Uk5X/XFtd/zw6Pf8+PD//Mi8z/4KB + g//S0tP//////7a1tv8/PUD/QD5B/39/gP87OTz/PTs+/0E/Qv8+PD//Pjw//z48P/8+PD//Pjw//z89 + QP8zMTT/Pz1A/z48P/89Oz7/Pjw//z07Pv84Njn/NDI1/zUzNv86ODv/Pjw//z07Pv8+PD//Pjw//z48 + P/8/PUD/PTs+/z48P/8+PD//Pjw//zY0N//Nzc3/XFpd/z48P/83NDj/8/Pz/y0qLv8zMTT/rKus/zk3 + Ov8+PD//Pjw//z48P/9LSUz/5eXl/+jo6P8zMTT/NzU4/9fX1//s7Oz/NDI1/z48P/8+PD+JAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAPjw/nD48P/+HhYf/VVNW/zs5PP8/PUD/Pjw//3x6fP+BgYL/R0VI/zc1 + OP89Oz7/NzU4/0hGSf9nZWj/VlRX/0JAQ/8+PD//Ojg7/z07Pv9nZmj/zczN/2dlaP88Oj3/YF5h/0tJ + TP8+PD//Pjw//z48P/8+PD//Pjw//z48P/86ODv/MzE0/yknKv8rKCz/OTc6/1VTVv94d3n/n56f/6mn + qf+qqKr/kZGS/3l4ev93dnj/TEtN/yYkKP85Nzr/PTs+/zk3Ov8+PD//Pjw//z48P/8+PD//Ly0w/6+u + r/9IRkn/Pjw//19dX/+Qj5H/OTc6/0lISv95d3n/OTc6/z48P/8+PD//PDo9/1hWWP//////oqGj/zY0 + N/83NTj//////9TU1P9DQUT/Pjw//z48P4wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD48PwE+PD+aPjw//2xr + bf/My8v/VlRX/zMxNP8+PD//NDI1/1xaXf+UkpX/u7u8/0dFSP9GREf/Ozk8/zk3Ov9EQkX/QD5B/z48 + P/8+PD//Pz1A/zg2Of86ODv/l5aY/1VTVv87OTz/PTs+/z48P/8+PD//Pjw//zw6Pf8/PUD/Xl1f/4+O + kP+1tLX///////////////////////////////////////////////////////39/f/+/v7//////8XF + xv+mpab/gX+C/zg1Of9APkH/OTc6/z48P/8+PD//Pz1A/z48P/8+PD//aWdq/5iXmf82Mzf/Y2Jk/0dG + SP8+PD//Pjw//z48P/84Njn/y8rL//X19f9MS03/Pz1A/5KRk///////3dzd/0NCRP8+PD//Pjw/oz48 + PwMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAD48P3k+PD//QD5B/0lHSf/R0NH/lZOV/4KAgv86ODv/Ozk8/z48 + P/9AP0H/h4eI/4OBg/+vrq//NzU4/z48P/88Oj3/Pjw//z48P/8+PD//RUNG/1FQUv/W1dX/UU9S/z48 + P/8+PD//Pjw//0A+Qf9aWFv/rayt/9nZ2f/4+Pj///////////////////////////////////////// + ////////////////////////////////////////////////////////5ubm/7q5u/+NjI7/Ly4x/0A+ + Qf9BP0L/Ojg7/z07Pv9KSEv/Y2Fk/4uKjP9lZGb/PDo9/z48P/8+PD//Pjw//2BeYf/8/Pz/ycnJ/zEv + Mv86ODv/rayt///////v7u//MS8y/z48P/8+PD+3AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPjw/cz48 + P/8+PD//PDo9/zEuMv9YVln/ZmVo/+Xl5f9aWFr/NTM3/z07Pv87OTz/Pjw//5CQkf/29ff/qaip/0JA + Q/85Nzr/Pjw//z07Pv9cWl3/lpWW/0ZER/89Oz7/PTs+/0ZER/99fH3/yMjJ//Dw8P////////////// + //////////////////////////////////////////////////////////////////////////////// + ////////////////////////////////////////4ODh/8rJyv9eXWD/ODY5/zw6Pf86ODv/RUNG/zs5 + PP8+PD//Pjw//z48P/85Nzr/fXt9//////9qaGn/PDo9/zAuMf/U1NT///////7+/v8pJyr/Pjw//z48 + P9kAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+PD9nPjw//0JAQ/9MS03/Ozg8/z48P/81Mzb/W1lc//r6 + +v/Ly8v/QkBD/zw7Pv88Oj3/ODY5/09NUP+7urv//////6amp/9APkH/PTs+/z07Pv8+PD//Pjw//zw6 + Pf9ubG//2tra//z8/P////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ///////////////////JyMn/f31//zQyNf8+PD//Pjw//z48P/8+PD//Pjw//zIwM/+0s7T/8fHx/0lH + Sv8+PD//LCkt//r6+v//////+vr6/y4rL/8+PD//Pjw/+QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD48 + P2o+PD//OTc6/9ra2v+RkJH/ODY6/z07Pv89Oz7/NjQ3/7u6u///////rKyt/0NBRP8+PD//Pz1A/y8t + MP9paGr/1NPU/9ra2v8vLTD/Pjw//z48P/8wLjH/aGdp//v8+/////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ////////////////////////////////////////////////////////////////////////ra2t/z8+ + QP87OTz/Pjw//z48P/8+PD//NTM2/+Xl5f/BwMH/NDI1/z48P/9mZWf//Pz8///////7+vv/OTc6/z48 + P/8+PD/9AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPjw/ZD48P/49Oz7/ODc6/5qZmv/i4eH/XVte/zUz + Nv89Oz7/Ozk8/1ZWWP/29vb//////3h3eP8tKi7/Pz1A/z48P/8xLzP/VFJV/zw6Pf86ODv/MjAz/6Ce + oP////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ////////////////////////////////////////19fX/z89QP8+PD//PTs+/1NSVf/DwcL//////0RC + Rf8+PD//Ojg7/7W0tf/R0dL/m5qc/2xrbf9APkH/Pjw//z48P+kAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAA+PD9FPjw/+T48P/8+PD//OTc6/3Z1d//p6er/s7K0/z07Pv89Oz7/PDk9/zg2Of+mpab//////4yL + jP9OTU//RkRH/z48P/88Oj3/PDo9/3Fwcv/u7u7///////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ////////qKao/z48P/89Oz7/NjQ3/8C/wP/NzM3/Ozk8/z48P/89Oz7/PTs+/zMxNP81Mzb/OTc6/z48 + P/8+PD//Pjw/zz48Pw0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD48Pyg+PD/1Pjw//zw6Pf8+PD//Ojg7/zY0 + N//Ozc7/pqan/3BucP8sKi3/PTs+/zo4O/9YVln/+/v6/+Tk5P9JR0r/Pjw//zk3Ov+Liov///////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ///////////////////////////////////////////////////7+/v/pqWn/0A+Qf8+PD//Liwv/8LB + wv8yMDP/Pjw//z48P/8+PD//Ozk8/zEvMv87OTz/PDo9/z48P/8+PD/QPjw/CAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAPjw/Cz48P/A9Oz7/UE5R/z89QP8+PD//Pz1A/zY0N/9nZWj/5+fn/+Pi4v9mZGb/ODc5/zUz + Nv+LiYz/d3Z4/zg2Of8/PUD/SUdL//f39/////////////////////////////////////////////// + ///////////////////S0tL/eHd5/3Vzdf+mpab///////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ///////////////////7+vv/VVNV/z48P/81Mzb/h4aI/1JQU/8+PD//Pjw//zMxNP9iYGP/2tra/97d + 3v8uLC//Pjw//z48P9QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPjw/4D48P/88Oj3/Pjw//z48 + P/8+PD//Pjw//zw6Pf87OTz/lJKV//7//v+CgYP/Ojg7/zY0N/84Njn/Pz1A/y8tMP/T0tP///////// + /////////////////////////////////////////////////////////Pv8/zAuMf83NDj/PDo9/01L + Tv/l5eX///////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////+6urv/PDo9/z48 + P/89Oz7/Pjw//z48P/9NS07/xsbG////////////sK+x/zg2Of8+PD//Pjw/rAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAA+PD/KPjw//z48P/8+PD//Pjw//0A+Qf9NS07/Pjw//z07Pv89Oz7/S0lM/76+ + vv+zs7T/TktO/z07Pv87OTz/a2ps//////////////////////////////////////////////////// + ///////////////////8+/z/iomL/2RiZf97enz/oaCh//v7+/////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////X19f9JR0r/Pjw//z48P/8+PD//V1VY//Lx8v////////////r6 + +/+Mioz/Pjw//z48P/8+PD91AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD48P68+PD//Q0FE/0A+ + Qf88OTz/Pjw//z89QP9QTlH/PTs+/zw6Pf88Oj3/PDo9/1dVWP9JSEr/PTs+/z48P/9nZWj/+fn5//// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////////////////////////////////////////////////////////////////////4OC + hP88Oj3/PTs+/0tKTP//////6erp/7i4uf+Mi43/ZmVn/0lISv8+PD//Pjw//j48P1YAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAPjw/jD07Pv9TUlT/2NfY/0A/Qv88Oj3/PDo9/0pJS/9oZ2n/Tk1P/z89 + QP89Oz7/PDo9/z07Pv8+PD//Pjw//1NRU//p6en///////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ///////////////////////////////////v7+//YF5g/z48P/88Oj3/Z2Zo/0hHSf8qKCv/MzA0/zk3 + Ov8+PD//Pjw//z48P/8+PD/+Pjw/QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+PD9vPjw//0dF + SP/S0tL/zMrL/3x7ff9ZV1r/Ojg7/zo4O/9UUlX/Wlhb/25sb/84NTn/Pjw//z48P/8+PD//RUNG//Hw + 8f////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ////////////////////////////////////////////////////////////////////////+vn6/2Vj + Zv89Oz7/Pjw//z48P/86ODv/PDo9/z48P/8+PD//R0VI/19eX/8/PUD/Pjw//z48P/8AAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAD48P0E+PD/3PDo9/zs5PP9KSEv/PTs+/09NUP9FQ0b/Pjw//z07 + Pv89Oz7/PDk9/z89QP8+PD//Pjw//z48P/83NTj/7u3u//////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////+pqKn/NzU5/z48P/89Oz7/Pjw//z48P/9APkH/XVte/6em + qP/i4uL/5eXl/0xKTf8+PD//Pjw/5QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPjw/Gj48 + P/M+PD//Pjw//zo4O/8+PD//PTs+/z48P/8+PD//Pjw//z48P/8+PD//Pjw//z48P/8+PD//Pjw//y8t + MP/j4uP///////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////////////////////////////////////////////////////////////////////1NQ + U/88Oj3/Ojg7/0RCRf8+PD//PTs+/1pYW/9xb3H/dXN2/4eFiP/IyMf/VlRX/z48P/8+PD+oPjw/AgAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+PD8CPjw/7jw6Pf9ycXL/rKus/z06Pv8+PD//Pjw//z48 + P/8+PD//Pjw//z48P/8+PD//Pjw//z48P/8+PD//Ly0w/9HQ0f////////////////////////////// + ///////////////////////////////////h4eH/o6Kj/318fv9oZ2n/amlr/3Z1d/+LiYv/n52f/+zs + 7P////////////////////////////////////////////////////////////////////////////// + ///////////////////////////////////Hx8j/PTs+/zo4O/9wb3H/hIOF/zo4O/8/PUD/Pz1A/z07 + Pv83NTj/MS8y/zo4O/9GREf/Pjw//z48P28AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAA+PD/nPDo9/1NRVP9xcHL/m5qc/2BfYf9MSk3/PTs+/z48P/8+PD//Pjw//z48P/8+PD//Pjw//z48 + P/8yMDP/trW2/////////////////////////////////////////////////////////////////0VE + Rv89Oz7/Pjw//zw6Pf85Nzr/OTc6/zs5PP8+PD//bm1v//v6+/////////////////////////////// + /////////////////////////////////////////////////////////////////////////////0xK + Tf89Oz7/Ozg8/7Gxsf9XVVj/PDo9/z48P/9IRkn/g4KE/4KAgv9kYmX/jYyO/zYzN/8+PD//Pjw/CQAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD48P7Q+PD//PDo9/zQyNf84Njn/Pjw//z07 + Pv8+PD//Pjw//z48P/8+PD//Pjw//z48P/8+PD//Pjw//zo4O/+SkJL///////////////////////// + ////////////////////////////////////////SkhL/zUzNv8wLjH/Liwv/zc1OP9APkH/OTc6/zIw + M/9cWl3//v7+//////////////////////////////////////////////////////////////////// + //////////////////////////////n5+f9iYWT/OTc6/z48P/8+PD//8fHx/1tZXP8+PD//MC4x/9zc + 3P////////////////+KiIr/PTs+/z48P9Y+PD8GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAPjw/cT48P/8+PD//Y2Fk/1FPUf9ZWFr/TEpN/zw6Pf8+PD//Pjw//z48P/8+PD//Pjw//z48 + P/8+PD//Pjw//3d1eP/7+/v///////////////////////////////////////////////////////// + ///MzM3/pqSm/8bFxv/c29z/w8PD/7+/wP+9u73/s7Kz//b29v////////////////////////////// + ////////////////////////////////////////////////////////////////////////g4KE/zc1 + OP8+PD//Pjw//zc1OP//////amhr/z48P/8xLzL/rKus/5ybnP+WlZb/8/Lz/2NhZP8+PD//Pjw/nwAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+PD9PPjw//zs6PP+lpKX/eXh5/1hW + Wf9APkH/PTs+/1tZXP9YV1n/PDo9/z48P/8+PD//Pjw//z48P/8+PD//YF5h//j4+P////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////////////////////7Ozs/89Oz7/Pjw//z48P/87OTz/cnFy//z8/P9bWVz/Pjw//z89 + QP81Mzb/Ojg7/zk3Ov9gXmH/PTs+/z48P/8+PD9AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAD48Pzc+PD/6Pjw//zo4O/8+PD//Pjw//z48P/8yMDP/vry+/4mIif84Njn/Pjw//z48 + P/8+PD//Pjw//z48P/9LSUz/9fX1//////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ///////////////////////////////////////////////////////////////////7+/v/XVpd/z48 + P/8+PD//Pjw//z07Pv+bmpv//////zQyNf8+PD//Pjw//z48P/85Nzr/NTM3/zg2Of8+PD//Pjw//wAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPjw/Jj48P+o+PD//Ozk8/zY0 + N/8pJyr/Ly0w/zUzNv/FxcX/bGtu/zk3Ov8+PD//Pjw//z48P/8+PD//Pjw//zo4O//w8PD///////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////////////////////9vb2/8zMTT/Pjw//z48P/8+PD//PTs+/6Ghov/b2tr/MzE0/z48 + P/9DQUT/m5qb/9DP0P+ysbL/VVRW/z48P/8+PD/cPjw/CQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAA+PD8UPjw/2T48P/9+fX//4+Pj//7+/v/X1tf/fn1//6+ur/9YVln/PTs+/z48 + P/8+PD//Pjw//z48P/8+PD//Ly0w/+Df4P////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ///////////////////////////////////////////////////////////////////+/f3/ZmVn/z89 + QP8+PD//Pjw//z48P/84Njn/qKeo/6+ur/88Oj3/PDo9/0tJTP9qaGv/S0lM/15dYP87OTz/Pjw//z48 + P8UAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD48PwU+PD/JPDo9/4OD + hP/a2dr/iIaI/2JhY/9GRUf/Pz1A/zw6Pf8+PD//Pjw//z48P/8+PD//Pjw//z48P/8wLTH/zMvM//// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////////////////////8XExv83NTj/PTs+/0NBRP8+PD//Pjw//zIwM/+6ubr/ZGNl/z07 + Pv8+PD//PDo9/zY0N/80Mjb/Ozk8/z48P/8+PD//Pjw/PQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAD48P6I+PD//Pjw//zs5PP88Oj3/Pjw//0hGSf9lY2X/amhq/0A+ + Qf8+PD//Pjw//z48P/9EQkX/Pz1A/zc1OP+DgYP///////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////7//v//////9fX1/+zs7P/b29v/s7Kz/4SDhf9raWv/REJG/zs5 + PP9bWVz/Ojg7/z48P/8+PD//MzE0/87Nzv8vLTD/Pjw//zs5PP9ycHL/fXx9/4aFhv9APkH/Pjw//z48 + P/I+PD8QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPjw/Qz48 + P/8+PD//RkRG/2FgYv+ko6T/tbS1/4uLjP9UU1X/PTs+/z48P/8+PD//Pjw//1NRVP9IRkn/PDo9/3Jx + cv/////////////////19fX/6Ojo/9nZ2f/Gxcb/09LT/83Mzf+2tbb/uLe4/5+dn/+zsrT/zMvM/+no + 6f/f3t//4+Lj//////////////////Dv8P/g4OD/1dXV/9bW1v/Jycr/ycjJ/62trv+hoKH/f36A/2Be + Yf9EQkX/NDE1/y4sL/8yMDP/ODY5/zw6Pf8+PD//PTs+/2ZlZ/8/PUD/Pjw//z48P/8+PD//o6Kj/zw6 + Pf87OTz/Wlhb///////6+vr/6urq/ywqLf8+PD//Pjw/wwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+PD8tPjw//y4sL//v7+//p6eo/1NRVP85Nzr/NzU4/zw6 + Pf8+PD//Pjw//z48P/89Oz7/VFJV/1BOUf8+PD//Y2Jk//j4+P+0s7T/bmxu/2FfYf9SUFP/REJF/zg2 + Of8vLTH/Ly0w/zQyNf86ODv/Pjw//zY0N/8vLTD/Kigr/0dFSP9IRkn/OTY6/0dESP9JSEr/U1FU/0xK + Tf9CQEP/NjM3/zAuMf8wLjH/NjQ3/zs5PP8+PD//Pjw//z07Pv85Nzr/OTc6/zo4O/9FREb/PDo9/z48 + P/8+PD//a2hr/0tJTP8+PD//Pjw//0E/Qv+mpab/QD5B/z48P/87OTz/Kyot/1dVWP94d3n/Ojg7/z48 + P/8+PD+RAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD48 + Pxs+PD//ODU5/15cX/82NDf/Pjw//z48P/8+PD//Pjw//z48P/8+PD//Pjw//zs5PP9aWVv/WVda/z48 + P/9VU1b//////yspLP86ODv/Pjw//z89QP88Oj3/Ojk7/zMyNf8wLjH/RkRH/1tZW/9ta23/W1lb/ywq + Lf85Nzr/RkRH/zs5PP8uLDD/MjAz/zo4O/8+PD//Ojg7/zUzNv80MjX/NTM2/zs5PP9BP0L/ODY6/y4s + L/8nJSj/QD1B/25tb/+Dg4T/trW3/87Ozv89Oz7/Pjw//zQyNf/Gxsb/QD5B/z48P/89Oz7/SkhL/6ak + pv85Nzr/Pjw//zw6Pf86Nzv/Pjw//zo4O/8+PD//Pjw//z48PysAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPjw/ET48P/0+PD//Ozk8/z48P/8+PD//Pjw//z48 + P/88Oj3/S0lM/z48P/8+PD//PDo9/1VUVv9iYWP/PDo9/0dGSP/q6ur/g4GD/29tcP+cm53/vby9/93d + 3f/7+/v/////////////////+fn5//j4+P////////////Hw8f/Z2dn/1dXV/83MzP+ko6X/jo2O/5aV + l//ExMX/wL7A/6Ggof+enZ//mZiZ/7Oys//f3t//9vb2////////////////////////////rq2u/z48 + P/88Oj3/Wllb/+3t7f8vLTD/Pjw//zk3Ov+WlJX/OTc6/z48P/8+PD//TEtN/359f/+GhYb/VlRW/z07 + Pv8+PD/ZPjw/EAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAA+PD8LPjw/5T48P/8+PD//Pjw//z48P/8+PD//Pjw//z48P/8+PD//Pjw//z48P/88Oj3/Xlxe/2xq + bf85Nzr/NzU4/8HBwf//////////////////////2trb/4F/gf9kYmX/Xl1f//f39/////////////// + /////////////////////////////////////////////4iHif8uLC//X15h/2ppa/9fXmD/RkRH/y4s + L/85Nzr/+Pf4//////////////////39/f9PTlD/PTs+/zo4O//R0dP/cnFz/zw6Pf8+PD//Pz1A/09N + UP8+PD//PTs+/z07Pv87OTz/dXN1//z8/P+PjY//Ozk8/z48P9EAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD48Pwg+PD/APjw//z48P/88Oj3/Ojg7/z48 + P/8+PD//Pjw//z48P/8+PD//Pjw//z48P/9XVVf/aGdp/zs5PP80MjX/s7Kz/////////////////+3t + 7f80MzX/Ozk8/z48P/80MjX/nZud//////////////////////////////////////////////////// + ///29fb/SEdJ/zY0N/85Nzr/Pjw//zk3O/8zMTT/MC4x/x0cHv/o5+j/////////////////zczN/zo4 + O/86ODv/bm1v//////9GREf/Pjw//z48P/8+PD//PTs+/z07Pv9NS07/MzE1/zk3Ov+QkJH//////2Ji + ZP86ODv/Pjw/qAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAD48P3c+PD//PTs+/1VTVv9gX2H/Ozg8/z48P/89Oz7/MjAz/zY0N/89Oz7/Pjw//zs5 + Pf87OTz/Pjw//zQyNf+cm5z/////////////////29rb/zs6PP84Njn/QkBD/zUzNv/S0dP///////// + //////////////////////////////////////////////79/f/BwcH/lJOV/5SSk/+sq63/xcTF/9PS + 1P/NzM3/4N/g//7+/v////////////////+QjpD/PTs+/zo4O/+0s7T/nZ2e/zc1OP8+PD//Pjw//z48 + P/8+PD//MC4x/83Nzf//////4ODg////////////Ozk8/z48P/8+PD9qAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPjw/ID48P/9EQkX/f36A/zw6 + Pf8+PD//PTs+/0dFSP+3trj/rKus/zY0N/8+PD//Pjw//z48P/8+PD//NzU4/4mHiP////////////// + ////////tbS1/6urrP/o5+j///////////////////////////////////////////////////////// + ////////+vr6/+Li4v/FxcX/p6ao/4WEhv9paGr/gYCC/3V0dv9oZ2n/YmBi/0lHSv9NTE7/ZmVn/0JB + Q/8+PD//Pz1A/z48P/84Njn/Pz1A/z48P/8+PD//Pjw//z48P/86ODv/WFdY/3Vzdf9cW13/eXh6/83M + zf9LSUz/Pjw//z48P1IAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAPjw/JD48P/A+PD//Pjw//z07Pv86ODv/Pjw//z48P/9fXGD/5+fn/2FfYf87ODz/Pjw//z48 + P/89Oz7/XFtd/0NBRP86ODv/dnV3//7+/v////////////////////////////////////////////// + ////////7u7u/+Xk5f/Y2Nj/y8rL/+Lh4v/k5OT/2dna/62srf90c3X/SUdK/0A+Qf87OTz/OTc6/zk3 + Ov84Njn/PDo9/z48P/8+PD//Pjw//zw5Pf87OTz/Pjw//z48P/8+PD//PTs+/z48P/8+PD//Pjw//z48 + P/8+PD//Pjw//z48P/89Oz7/Pjw//zo4O/8zMTT/NjQ4/0RCRf8+PD/8Pjw/UwAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+PD+BPjw//z48P/8+PD//Pjw//z48 + P/84Njn/l5WX//////9mZWf/PTs+/z48P/9LSUz/PDo9/z07Pv9PTVD/RkRH/z48P/9fXmD/+/v7//// + ////////6Ojo/8XExf+fnp//enh6/1ZVV/88Oj3/T01Q/0xLTf9FQ0b/T05Q/0RCRf83NTj/Liwv/y0r + Lv8yMDP/Ojg7/z48P/8+PD//Pjw//zk3O/8zMTT/PDo9/z48P/9FQ0b/PTs+/ygmKf8vLTD/Ozk8/0VD + Rv8+PD//PTs+/yooK/9CQEP/PTs+/z48P/8+PD//Pjw//z48P/8+PD//Pjw//0A+Qf93dnj/r6+w/3Jx + c//Av8D/PTs+/z48P/8+PD8+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAD48PzU+PD//Pjw//z48P/8+PD//Q0FE/8HBwv+4trj/PTw+/zk3Ov9LSUz/srKz/3Bu + cP88Oj3/Pjw//z07Pv89Oz7/Pjw//05MT/+bmpv/ZGNm/z48P/8uLC//NzU4/z07Pv8+PD//Pjw//z48 + P/88OT3/PTs+/z48P/8+PD//PTs+/z48P/8+PD//Pjw//z07Pv85Nzr/Ly0w/0I/Q/86ODv/a2pr/7Kx + sv9RUFL/PTs+/4aFh//08/T/+Pf4/+Pi4//Y2Nj/kZCR/z48P/9KSUv/+fn4/56dn/80MjX/Pjw//z48 + P/8+PD//Ozk8/zo4O/8+PD//PTs+/0A+Qf+Uk5X/+vr6/+Tk5P8uLC//Pjw//z48PwIAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD48P7Y+PD//Pjw//zk3 + Ov+KiYr/a2ps/y4sL/89Oz7/RUNG/4qJi/80MjX/Ojg7/z48P/8+PD//Pjw//z48P/8+PD//PDo9/zQy + Nf86ODv/PTs+/z48P/8+PD//Ozk8/zk3Ov8+PD//Pz1A/0E/Qv9APkH/Pjw//0RDRf9IRkn/PTs+/z07 + Pv9PTVD/j42O/7CvsP/h4eH/t7e4/zc0OP9XVVj/397e/zAuMf89Oz7/YWBi/3V0dv80MjX/ubi5/+Hh + 4f82NDf/PDo9/1dUV///////rKyt/zc1OP8+PD//Pjw//2VkZv+vrrD/YmFj/zk3Ov89Oz7/Pjw//zQy + Nf9oZmn/aGdp/z07Pv8+PD/8Pjw/BQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAPjw/JT48P/8+PD//Pjw//zw6Pf85Nzr/Pjw//z07Pv9MSk3/Ozk8/z89 + QP8+PD//Pjw//z48P/8+PD//Pjw//z48P/8+PD//Pjw//0A+Qf9RT1H/Ozk8/z48P/9jYWT/c3N0/zo4 + O/83NTj/xsbG/zMxNP89Oj7/kI+Q/4B/gf89Oz7/MzE0/8jHyP+mpaf/OTg6/8C/wP+fnp//Pjw//1NR + VP93dnj/PDo9/zYzN/+dnJ7/NzU4/zIwM//R0NH/hYOF/z89QP80MjX/tbW1/5KRkv82NDf/Pz1A/z07 + Pv89Oz7/TktP/4qJiv/m5ub/6Ojo/8HAwf86OTz/PTs+/z07Pv87OTz/Pjw//z48P9w+PD8SAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPjw/1T48 + P/8+PD//Pjw//z48P/8+PD//Pjw//z07Pv8+PD//Pjw//z48P/8+PD//PDo9/zAuMv82NDf/Pjw//z48 + P/8+PD//j42P/8nJyf8wLjH/Pjw//1lYWv9XVVj/PzxA/4mIiv+Hhoj/Ozk8/y4tL//R0dH/PTs+/z48 + P/9NS07/+Pj5/zw5Pf8zMDT/m5mb/5GPkf85Nzr/SUhK/3Bvcf8+PD//NzU4/5aVlv82NDf/LCkt//r6 + +v9LSUz/Pjw//z07Pv9JSEr/NDI1/z48P/89Oz7/PTo+/0lHSv89Oz7/NTM3/zc1OP9PTVD/Xl1f/6Oi + o/9EQkX/Pjw//z48P/8+PD//Pjw/ygAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+PD8oPjw//z48P/8+PD//Pjw//z48P/8+PD//Pjw//z48 + P/8+PD//ODY5/yspLP9MS07/2tnZ/42Mjv85Nzr/Pjw//z48P/9QTlD/VlRX/z07Pv83NDj/gH+B/zk3 + Ov8uKy//7e3t/0E/Qv8+PD//QkBD/+Tk5P8sKi3/Pjw//1JPUv/4+Pj/RUNG/zQxNf/a2tv/Y2Jk/zo4 + O/89Oj7/hYOF/zw6Pf9APkH/e3p8/zw6Pf9AP0H/6urq/ywpLf8+PD//Pjw//zw6Pf8+PD//PTs+/0NB + RP/c3Nz/u7u8/zQyNf89Oz7/Pjw//zw6Pf84Njn/Ozk8/0ZER/8+PD//Pjw//j48P+E+PD8sAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD48 + P0M+PD/7Pjw//z48P/8+PD//Pjw//z48P/8+PD//Pjw//zMwNP9zcHP/19jX//////+np6j/S0pM/z48 + P/8+PD//Pjw//z07Pv87OTz/Pjw//0tKTP9ZV1r/PDo9/0tKTP/BwMH/MS8y/z48P/9ta23/2dnZ/zY0 + N/84Njn/fXx+/9nZ2f8+PD//SUdK/+fn5/9DQUT/Pjw//zQyNf+fnp//NzU4/0E/Qv93dXj/PTs+/05M + Tv+hoKL/OTc6/z48P/8+PD//Pjw//1JQU/87OTz/Ojg7/0xKTf/Ix8j/7u7u/3t5e/9+fX//bmxu/0xK + Tf8/PUD/PTs+/z48P/8+PD/5Pjw/EAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+PD8HPjw/6D48P/8+PD//Pjw//z48P/8+PD//Pjw//z48 + P/86ODv/w8LE////////////fHt9/z07Pv8+PD//Pjw//z48P/8+PD//Pjw//z07Pv8+PD//PDo9/zs5 + PP8+PD//dnR2/1NRVP8+PD//NTM2/6inqP/V1dX/QD5B/zUzNv+1tLX/wMDA/zMxNP89Oz7/7u7u/05M + Tv8+PD//PDs+/6emp/80MjX/Ozk8/2RjZf87OTz/RUNG/1hXWf8+PD//Pjw//0lHSv+DgoP/dXN1/z07 + Pv8+PD//Pjw//zIwM/9hYGP/19bX/////////////////+bl5f8+PD//Pjw//z48P/8+PD91AAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD48 + PwQ+PD+cPjw//z48P/8+PD//Pjw//z48P/8+PD//Ojg7/3p4ev///////////21sbv85Nzr/Pjw//z89 + QP9IRkn/Pjw//z48P/9IRkn/iomL/z48P/8+PD//Pjw//z48P/9NS07/RUNG/z48P/83NTj/+/v7/9HQ + 0f9DQUP/PTo+/9TU1P+KiYv/NTM2/0VERv/5+fn/Pj1A/z48P/9mZWf/nJuc/zUzNv87OTz/TUtO/z48 + P/8+PD//PTs+/z48P/9EQkX/5OTk/6+ur/9YVlj/PTs+/z48P/86ODv/PDo9/z48P/8rKCz/pqSm//// + ////////lpSW/z48P/8+PD//Pjw//z48P/E+PD8SAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD48P04+PD//Pjw//z07Pv8+PD//Pjw//z48 + P/9EQkX/29ra//////+CgIP/Ojc7/z48P/8uKy//iYiK/zUzNv8+PD//Ozo8/9XU1P/q6ur/NTM2/z48 + P/89Oz7/PDo9/z07Pv8+PD//Pjw//0RCRf+NjI7/jo2P/z89QP9BP0L/29vb/09NUP88Oj3/VVNW/5qY + mv84Njn/Pjw//0RDRf9GQ0b/Pjw//z48P/8+PD//Pjw//z07Pv84Njn/Pz1A/z06Pv9JSEr/MjAz/zs5 + PP8+PD//Pjw//2RjZf9samz/MC4x/0A+Qf89Oz7/paSl/1VSVv80MjX/Pjw//zc1OP8/PUD/Pjw//z48 + P5UAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAPjw/2T48P/8+PD//TEtN/1BPUf88Oj3/Pjw//z48P/+ZmJn/hIOE/zY0N/8+PD//Pjw//6Oh + o/9eXV7/PDo9/zIwM/+enZ7//////4KAg/84Njn/PTs+/01LTv9OTE//Q0FE/05NT/8zMDT/NzU4/zs5 + PP8+PD//Pjw//z07Pv9DQUT/Pz1A/z48P/89Oz7/NzU4/z89QP8+PD//Pjw//z07Pv8+PD//SUhK/z07 + Pv8+PD//R0VI/3p5e/81Mzb/Pjw//zw6Pf8+PD//Pjw//z48P/8+PD//REJF/8LBwv+hn6H/NTM2/z48 + P/80MTX/Ozk8/z48P/85Nzr/hISF/zEvMv8+PD//Pjw/7D48PyYAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD48P2k+PD//Pjw//z48P/89Oz7/oJ+h/0pI + S/82NDf/Pjw//zg2Of88Oj3/Pjw//z07Pv+CgIP/ubi5/zw6Pf88Oj3/a2lr///////Ozc7/Q0FE/z07 + Pv8+PD//PDo9/zk3Ov9paGr/VlRX/7Oys/+FhYb/ZGNl/2JgYv8uKy//MS8z/z48P/8+PD//Pjw//zs5 + PP8+PD//Pjw//0NBRP9NS07/aGdp/0NCRP9WVFf/VVRW/z48P/8/PUD/7Ozs/ywqLf8+PD//Pjw//z48 + P/8+PD//Pjw//z48P/89Oz7/UlFT/9/f3/9MSk3/Pjw//z07Pv88Oj3/TUtO/9fX1//8/Pz/VVNW/zs5 + PP8+PD//Pjw/sT48PwQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAA+PD8OPjw/+T48P/8+PD//Pjw//z48P/9BP0L/zcvN/2RjZf83NTj/Pjw//z48P/8+PD//XVte/5OS + lP87OTz/PDo9/4+OkP//////ubm5/0JAQ/88Oj3/aGZp/1lXWv89Oz7/Pjw//z89QP89Oz7/goGD/+3t + 7v9zcnT/q6qs//r6+v+/vr//V1VY/z48P/87OTz/Xl1f/zo4O/9AP0L/9PT0/11bXv9FQ0b/Pjw//zw6 + Pf9aWVv/Ozk8/zk2Ov+wr7D/hYSG/zMxNP8+PD//Pjw//z48P/8+PD//Pjw//z48P/8/PUD/ODY5/z07 + Pv8/PUD/aWdq/8XExf//////vby9/z07Pv88Oj3/PTs+/z48P/8+PD/tPjw/JAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD48P2o+PD//Pjw//z07Pv8+PD//Pjw//zw6 + Pf85Nzr/lpWW/2loav8+PD//Pjw//z48P/88Oj3/NzU4/z89QP9MSk3/9fT1//X19f9KSUv/Pjw//z88 + QP/BwMD/MzE0/z48P/8+PD//Pjw//zw6Pf99fH7/eHZ5/z89QP82NDf/dHJ0/2JgY/9GREf/Pjw//zg2 + Of96eXv/MzE0/1VUVv/s7Oz/MC0x/z48P/8+PD//OTc6/3Rzdf9LSUz/PTs+/2tpbP/p6On/QkBD/zw6 + Pf8+PD//Pjw//z48P/8+PD//Pjw//z48P/8+PD//ZGJk/9vb3P//////x8fI/1VTVv82NDf/Pz1A/zo4 + O/89Oz//PDo9/z48P/8+PD9wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAA+PD8NPjw/6T48P/9aWVv/RkRH/z48P/8+PD//Pjw//z48P/83NTj/PDo9/z48P/8+PD/iPjw/9z48 + P/8+PD//NjQ3/5uanP/6+vr/YF9h/zk3Ov8/PUD/WFdZ/4+OkP8+PD//Pjw//0VDRv89Oz7/LSou/+7t + 7f9ZWFr/Pjw//0E/Qv9BP0L/Pjw//z48P/8+PD//PTs+/5qZmv8zMTX/TEtN//39/f8qKCv/Pjw//z48 + P/88Oj3/TUtO/7W0tv87OTz/REJF/9DQ0f/e3d7/Liwv/z48P/8+PD//Pjw//z48P/8+PD//XFtd/7W0 + tf/+/v7/397e/1ZUV/8yMDP/PDo9/z48P/81Mzb/UVBS//////9MSk3/PTs+/z48P8QAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD48P8I+PD//Pjw//2hmaP+QjpD/PDo9/zw6 + Pf9bWlz/NjM3/z48P/8+PD//Pjw//z48P0s+PD9aPjw//T48P/8/PUD/ODU5/4KCg/89Oz7/Pjw//zUz + Nv/X19f/iYiK/z07Pv89Oz7/SEZJ/z07Pv9FREX//f39/y0rLv8+PD//Pz1A/z89QP8+PD//Ojg7/z48 + P/9HRUj/m5uc/0A+Qf9PTVD//////ywqLf8+PD//Pjw//z48P/8rKCz//Pz8/1NRVP8+PD//lJKU//// + //96eXv/OTY6/z48P/9NS07/c3Fz/7u6u//x8PD//////769vf8sKi3/Ozk8/z48P/87OTz/QkBD/6qp + q//7+/v/19bX/8HAwf80MjX/Pjw/+j48P1cAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAA+PD88Pjw//z48P/8+PD//QkBD/8jIyP9MSU3/PDo9/0A+Qf9ubW//Ozk8/z48P/8+PD/fPjw/CwAA + AAA+PD9SPjw/9j48P/8+PD//PTs+/z48P/89Oz7/p6eo//////91c3X/Ojg8/0JAQ/9EQkX/Pjw//2Jh + Y/+SkZP/Ozk8/zw6Pf9ZV1r/Ozk8/zg2Of9jYmT/Ojg7/zs5PP+Uk5T/PDo9/1FPUv//////PDo9/z48 + P/8+PD//Pjw//ykmKv//////lJOU/z07Pv9bWVz/jY2O/z89QP8+PD//Ojg7/+fn5//6+vr///////r6 + +v+ko6T/OTc6/z48P/8+PD//Q0FE/4mHif/5+fn/4uHh/0tJS/86ODv/Z2Zo/4WEhv8+PD//Pjw/2T48 + PyIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD48P8Y+PD//Pjw//zo4O/8+PD//goCC/9TU + 1P81Mzb/Pjw//zs5PP8+PD//Pjw//T48Px8AAAAAAAAAAAAAAAA+PD8HPjw/1z48P+Q+PD//Pjw//z48 + P/9WVFf/jYuN/1FPUv88Oj3/SUdK/z48P/8+PD//UU9S/3Rydf8+PD//QkBD/1lXWv87OTz/cnBz/2tq + bP85Nzr/OTc6/1xaXf89Oz7/Pz1A//////9TUlT/Pjw//z48P/8+PD//LSsu/+Tk5P+zsrP/Q0FE/zw6 + Pf82NDf/PTs+/z48P/8zMTT/xMPE///////39/f/cnBz/zs5PP8+PD//SUhK/317ff/k4+T//////+zs + 7P9FQ0b/Pz1A/zk3Ov+amJr/aWhq/zw6Pf8+PD//Pjw/xT48PwUAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAA+PD8uPjw//z48P/85Nzr/Z2Vn/zw6Pf9MSkz/9/b2/56env8xLzL/Pjw//z48P/8+PD+BAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAPjw/HD48P3g+PD/3Pjw//zs5PP83NTj/PTs+/z48P/89Oz7/Pjw//zo4 + O/9mZWf/TEtN/z07Pv9cWl3/aGhp/z48P/+Hhoj/tLS0/zQyNf8+PD//Ozk8/zs5PP9iYWP//////3Jx + c/8+PD//Pjw//z48P/89Oz7/NzU4/zMxNP89Oz7/Pjw//z48P/8+PD//Pjw/+Ds5PP9ZV1n/vr2+/1NR + VP8+PD//Ojc7/2tpa//f39/////////////e3d7/Ly0w/zw6Pf8rKSz/urq6/4eHiP86ODv/Pjw//z48 + P/8+PD/9Pjw/PAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPjw/Az48P6k+PD//Ojg7/2dmaP+Ih4j/Ojc7/z89 + QP+FhIX/7u3u/zk3Ov8+PD//Pjw/oz48PwMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD48 + Pzc+PD95Pjw/+D48P/o+PD//Pjw//z48P/8+PD//Pjw//zw6Pf89Oz7/Ozk8/1FQUv9DQUT/PDo9/3p5 + e/+amZv/Ozk8/z48P/8+PD//Ojg7/2NiZP+SkZP/UlBT/z48P/8+PD//Pjw//z48P/8+PD//Pjw//z48 + P/Q+PD+vPjw/Uz48PxM+PD9GPjw//T48P/84Njn/Pjw//zY0N/9+fX//9/f3////////////x8fI/z89 + P/8+PD//OTc6/7CusP+AfoD/NTM2/z48P/87OTz/PTs+/z48P/8+PD/CAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAA+PD8PPjw//z48P/88OT3/PDo9/2loav89Oz7/Pjw//0VDRv9VU1b/Pjw//z48P/U+PD8PAAAAAAAA + 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 + PxgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAPjw/Fz48P/8+PD//Pjw//1FQUv9sam3/NTM2/1ZVWP+/vr//NDI1/z48P/8+PD+7Pjw/BAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAPjw/Bz48P5M+PD//PTs+/z48P/9IRkn//////6Ggov86ODv/Pjw//0JAQ//7+/v///////b2 + 9f9HRUj/Pjw//zg2Of/29vb/cXBy/z48P/8+PD//Pjw/eQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+PD+WPjw//zw6Pf8+PD//Ojg7/52c + nf85Nzr/Ozk8/zk3Ov8+PD//Pjw//z48PwsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPjw/BD48P7c+PD//Pjw//1lX + Wv+rqqv/Pz1A/z48P/83NTj/lZSV//7+/v//////i4qM/z07Pv86ODv/c3Jz//T09P87Ojz/Pjw//z48 + P/8+PD/PAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAPjw/Sj48P/o6ODv/bWpt/z48P/8+PD//ZmVn/4iHiP8yMDP/Pjw//z48P/8+PD+kPjw/AQAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAD48P9o+PD//Pjw//zs5PP8+PD//Ojg7/2ZjZv/7+/v//////+Tk + 5P8yLzP/Pjw//z07Pv/Jycn/V1VY/zw6Pf8+PD//Pjw//z48P/0+PD8BAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD48Pw4+PD/pPjw//zMwNP+cm5z/RkVH/z48 + P/9GREf/5+fn/0xMTv88Oj3/Pjw//z48PzkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPjw/GD48 + P/A+PD//Pjw//z89QP9FQ0b/8vLy///////7+/v/ZmRn/z07Pv89Oz7/YWBi/+3t7f9APkH/Pjw//zY0 + N/9APkH/Pjw//z48P3EAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAPjw/PD48P/8+PD//SkhL/z89QP8+PD//PTs+/0tKTP/W1tf/QD5B/z48P/8+PD/GAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPjw/Vj48P/0+PD//NDI1/+Hh4f///////////728 + vf8zMTT/PDo9/0lHSv/v7u//Z2Vo/zw6Pf9LSUz/7Ovs/5uam/82NDj/Pjw/+D48PwEAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+PD+4Pjw//z48P/+GhIb/YmFj/z07 + Pv90cnX/2NfY/3t5fP88Oj3/Pjw//j48PzIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAPjw/iT48P/4/PUD/m5uc/9LR0v+Pj5D/NzU4/zs5PP9MSk3/9fX1/2lnav88Oj3/PDo9/9TU + 1P//////oaCh/zw6Pf8+PD//Pjw/PgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAD48P/M+PD//MS8y/9/f3/+AfoH/Pjw//4KAgv/Kycr/Ly0w/z48P/8+PD+QAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+PD8DPjw/oT48P/83NTj/Liww/zY0 + N/89Oz7/Q0FF//Hx8f+2tbb/MjAz/z07Pv91dHb//////3Jwc/8uKy//Pjw//z48P/8+PD+dAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+PD8gPjw/6j48P/89PD7//////7W1 + tv86ODv/RENF/zg2Ov8/PUD/Pjw/2T48Pw4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAA+PD8qPjw//T48P/8+PD//PTs+/2BeYf//////7/Dv/0xKTf8+PD//MS8y/9DP + 0P/Ew8T/Pz1A/z48P/8+PD//Pjw//z48P8U+PD8CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAD48PxQ+PD/wPjw//1hWWf/s7Oz/5OTk/zAtMf89Oz7/Pjw//z48P/8+PD9/AAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD48PwE+PD/RPjw//z48 + P/9EQkX/8vLy//////+KiIr/OTc6/z48P/9TUVP/6enp/zYzN/8+PD//Ozk8/1BOUf8+PD//Pjw/7D48 + PxwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPjw/AT48P+o+PD//RkRH/9HQ + 0f//////TEpM/z07Pv8+PD//Pjw/0gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAD48Pyk+PD//Pjw//zw6Pf+GhYf/5+fn/ywqLf8/PUD/MS8y/9DQ + 0P96env/PDs9/zs5PP9/foH/2dnZ/09NUP8+PD/6Pjw/TAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAPjw/oT48P/8+PD//amhq/5ORk/80MjX/Pjw//z48P/8+PD8TAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD48 + P3s+PD/7Pjw//0xLTf9ta23/ODY5/zs5PP+opqj/n52f/zw6Pf88Oj3/kpGT///////09PT/WVda/z48 + P/8+PD9qAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+PD8jPjw//T48 + P/85Nzv/NjQ3/z48P/8+PD//Pjw/KgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD48P1U+PD//Pjw//2NhZP+goKH/u7u8/7m3 + uP85Nzr/Pjw//z48P/83NDj/pqWn//39/f9NTE7/PTs+/z48P1gAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+PD92Pjw//z48P/8+PD//Pjw/8j48P0MAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAD48P4c+PD//QD9B/62srv/x8fH/NDI1/z48P/88Oj3/Pjw//z48P/91c3b//////0A+ + Qv89Oz7/Pjw/VQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD48 + PwM+PD80Pjw/qT48P5Q+PD8zAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPjw/DD48P8s+PD//Q0FE/0RB + Rf89Oz7/PDo9/09NUP88Oj3/Ojg7/6CeoP//////MzA0/z48P/8+PD9OAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAPjw/MD48P+s9Oz7/PTs+/z48P/9CQEP/enl7/zg2Of8tKi7/+Pf4/+fn + 5/9EQkX/Pjw//T48Py4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPjw/eD48 + P/8+PD//PTs+/3p4ev90c3X/NDI2/5ybnP//////yMfI/zo4O/8+PD/4Pjw/HQAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPjw/hD48P/8+PD//QD5B/zc1OP+mpab///////// + //9dW13/PDo9/z48P/sAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAPjw/HT48P+Q+PD//PTs+/z07Pv+PjpD/vr2+/z48P/8+PD//Pjw/wwAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPjw/FT48P7w+PD//Pjw//zc1 + OP8xLzL/Pjw//z48P/8+PD99AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAD48P2A+PD/gPjw//z48P/8+PD//Pjw/6D48Px0AAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD48 + Pxg+PD/BPjw/3z48P68+PD8rAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD48PwM+PD8ZPjw/BAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //H/h//////////////////x/4f////////////////+8AAA4//////////////+AAAAAAH///////// + //+GAAAAAAAB//////////+AAAAAAAAAAf//wAADP/+AAAAAAAAAAAH//8AAAAGAAAAAAAAAAAAB///A + AAAAAAAAAAAAAAAAAf//wAAAAAAAAAAAAAAAAAH//+AAAAAAAAAAAAAAAAAD///gAAAAAAAAAAAAAAAA + A///4AAAAAAAAAAAAAAAAAP///AAAAAAAAAAAAAAAAAD///wAAAAAAAAAAAAAAAAB///+AAAAAAAAAAA + AAAAAAf///gAAAAAAAAAAAAAAAAP///4AAAAAAAAAAAAAAAAD////AAAAAAAAAAAAAAAAA////4AAAAA + AAAAAAAAAAAf///+AAAAAAAAAAAAAAAAH////wAAAAAAAAAAAAAAAD////+AAAAAAAAAAAAAAAB///// + wAAAAAAAAAAAAAAA/////+AAAAAAAAAAAAAAAf/////gAAAAAAAAAAAAAAP/////8AAAAAAAAAAAAAAH + //////gAAAAAAAAAAAAAD//////8AAAAAAAAAAAAAB///////4AAAAAAAAAAAAA///////+AAAAAAAAA + AAAAf///////gAAAAAAAAAAAAP///////4AAAAAAAAAAAAH///////+AAAAAAAAAAAAD////////gAAA + AAAAAAAAA////////4AAAAAAAAAAAAP///////+AAAAAAAAAAAAD////////AAAAAAAAAAAAAf////// + /4AAAAAAAAAAAAP///////+AAAAAAAAAAAAD////////gAAAAAAAAAAAA////////4AAAAAAAAAAAAP/ + //////+AAAAAAAAAAAAD////////gAAAAAAAAAAAAf///////4AAAAAAAAAAAAH///////+AAAAAAAAA + AAAD////////wAAAAAAAAAAAA////////8AAAAAAAAAAAAP////////AAAAAAAAAAAAD////////wAAA + AAAAAAAAA////////8AAAAAAAAAAAAf////////AAAAAAAAAAAAH////////wAAAAAAAAAAAA/////// + /8AAAAAAAAAAAAf////////gAAAAAAAAAAAH////////4AAAAAAAAAAAB////////+AAAAAAAAAAAA// + ///////gAAAAAAAAAAAP////////4AAAAAAAAAAAH////////+AAAAAAAAAAAA/////////gAAAAAAAA + AAAf////////4AAAAAAAAAAAH/////////AAAAAAAAAAAB/////////wAAAAAAAAAAA/////////8AAA + AAAAAAAAP/////////AAAAAAAAAAAD/////////wAAAAAAAAAAA/////////8AAAAAAAAAAAf/////// + //AAAAAAAAAAAH/////////4AAAAAAAAAAB/////////+AAAAAAAAAAAf////////+AAAAAAAAAAAH// + ///////gAAAAAAAAAAB/////////4AAAAAAAAAAAf/////////AAAAAAAAAAAH/////////wAAAAAAAA + AAB/////////+AAAAAAAAAAA//////////gAAAAAAAAAAP/////////4AAAAAAAAAAH/////////8AAA + AAAAAAAB//////////AAAAAAAAAAAP/////////4AAAAAAAAAAD/////////+AAAAAAAAAAAf/////// + //AAAAAAAAAAAD/////////gAAAAAAAAAAA/////////4AAAAAAAAAAAP////////8AAAAAAAAAAAD// + ///////AAAAAAAAAAAAf////////gAEAAAAAAAAAD////////4ADgAAAAAAAAAf///////8AB+AAAAAA + AAAH///////+AAf4AAAAAAAAB////////gAP/wAAAD8AAAP///////4AH//gAAH/gAAB///////+AB// + /jn//4AAAf///////gAf//////+AAAD///////wAH///////wAAA///////8AD///////+AAAP////// + +AA////////4AAB///////AAf///////+AAAf//////wAP////////wAAD//////8AD////////+AAA/ + //////AB/////////gAAP//////gAf////////8AAB//////4AP/////////AAAf/////+AH//////// + /4AAH//////wB//////////AAB//////8A//////////4AAf//////gf//////////AAH//////4P/// + ///////wAB//////////////////+AAf//////////////////wAH//////////////////+AD////// + /////////////wA///////////////////+AP///////////////////4D////////////////////B/ + ///////////////////4//////////////////////////////////////////////////////////// + //////// + + + \ No newline at end of file diff --git a/SOLVER/RoutesKeyGen/Program.cs b/SOLVER/RoutesKeyGen/Program.cs new file mode 100644 index 0000000..f6f6dbe --- /dev/null +++ b/SOLVER/RoutesKeyGen/Program.cs @@ -0,0 +1,20 @@ +using System; +using System.Collections.Generic; +using System.Windows.Forms; + +namespace RoutesKeyGen +{ + static class Program + { + /// + /// The main entry point for the application. + /// + [STAThread] + static void Main() + { + Application.EnableVisualStyles(); + Application.SetCompatibleTextRenderingDefault(false); + Application.Run(new Form1()); + } + } +} \ No newline at end of file diff --git a/SOLVER/RoutesKeyGen/Properties/AssemblyInfo.cs b/SOLVER/RoutesKeyGen/Properties/AssemblyInfo.cs new file mode 100644 index 0000000..a41fe38 --- /dev/null +++ b/SOLVER/RoutesKeyGen/Properties/AssemblyInfo.cs @@ -0,0 +1,33 @@ +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +[assembly: AssemblyTitle("RoutesKeyGen")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("Milok Zbrozek ")] +[assembly: AssemblyProduct("RoutesKeyGen")] +[assembly: AssemblyCopyright("Copyright © Milok Zbrozek 2021")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// Setting ComVisible to false makes the types in this assembly not visible +// to COM components. If you need to access a type in this assembly from +// COM, set the ComVisible attribute to true on that type. +[assembly: ComVisible(false)] + +// The following GUID is for the ID of the typelib if this project is exposed to COM +[assembly: Guid("99cccbc1-1233-4ba4-9030-36c78cfa7aa2")] + +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +[assembly: AssemblyVersion("21.12.21.2")] +[assembly: AssemblyFileVersion("21.12.21.2")] diff --git a/SOLVER/RoutesKeyGen/Properties/Resources.Designer.cs b/SOLVER/RoutesKeyGen/Properties/Resources.Designer.cs new file mode 100644 index 0000000..562bac6 --- /dev/null +++ b/SOLVER/RoutesKeyGen/Properties/Resources.Designer.cs @@ -0,0 +1,71 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version:2.0.50727.3662 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +namespace RoutesKeyGen.Properties +{ + + + /// + /// A strongly-typed resource class, for looking up localized strings, etc. + /// + // This class was auto-generated by the StronglyTypedResourceBuilder + // class via a tool like ResGen or Visual Studio. + // To add or remove a member, edit your .ResX file then rerun ResGen + // with the /str option, or rebuild your VS project. + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "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() + { + } + + /// + /// Returns the cached ResourceManager instance used by this class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Resources.ResourceManager ResourceManager + { + get + { + if ((resourceMan == null)) + { + global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("RoutesKeyGen.Properties.Resources", typeof(Resources).Assembly); + resourceMan = temp; + } + return resourceMan; + } + } + + /// + /// Overrides the current thread's CurrentUICulture property for all + /// resource lookups using this strongly typed resource class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Globalization.CultureInfo Culture + { + get + { + return resourceCulture; + } + set + { + resourceCulture = value; + } + } + } +} diff --git a/SOLVER/RoutesKeyGen/Properties/Resources.resx b/SOLVER/RoutesKeyGen/Properties/Resources.resx new file mode 100644 index 0000000..af7dbeb --- /dev/null +++ b/SOLVER/RoutesKeyGen/Properties/Resources.resx @@ -0,0 +1,117 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 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 + + \ No newline at end of file diff --git a/SOLVER/RoutesKeyGen/Properties/Settings.Designer.cs b/SOLVER/RoutesKeyGen/Properties/Settings.Designer.cs new file mode 100644 index 0000000..33d9ff1 --- /dev/null +++ b/SOLVER/RoutesKeyGen/Properties/Settings.Designer.cs @@ -0,0 +1,30 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version:2.0.50727.3662 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +namespace RoutesKeyGen.Properties +{ + + + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "8.0.0.0")] + internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase + { + + private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings()))); + + public static Settings Default + { + get + { + return defaultInstance; + } + } + } +} diff --git a/SOLVER/RoutesKeyGen/Properties/Settings.settings b/SOLVER/RoutesKeyGen/Properties/Settings.settings new file mode 100644 index 0000000..3964565 --- /dev/null +++ b/SOLVER/RoutesKeyGen/Properties/Settings.settings @@ -0,0 +1,7 @@ + + + + + + + diff --git a/SOLVER/RoutesKeyGen/RoutesKeyGen.csproj b/SOLVER/RoutesKeyGen/RoutesKeyGen.csproj new file mode 100644 index 0000000..5ef8a3f --- /dev/null +++ b/SOLVER/RoutesKeyGen/RoutesKeyGen.csproj @@ -0,0 +1,84 @@ + + + Debug + AnyCPU + 8.0.50727 + 2.0 + {9CF67CBD-8AAE-4922-A027-EC5C629D9753} + WinExe + Properties + RoutesKeyGen + RoutesKeyGen + tetedane.ico + + + true + full + false + ..\..\READY\TOOLS\ + DEBUG;TRACE + prompt + 4 + true + + + pdbonly + true + ..\..\READY\TOOLS\ + TRACE + prompt + 4 + true + + + + + + + + + + + + Form + + + Form1.cs + + + + + Designer + Form1.cs + + + ResXFileCodeGenerator + Resources.Designer.cs + Designer + + + True + Resources.resx + + + SettingsSingleFileGenerator + Settings.Designer.cs + + + True + Settings.settings + True + + + + + + + + \ No newline at end of file diff --git a/SOLVER/RoutesKeyGen/obj/Debug/RoutesKeyGen.Form1.resources b/SOLVER/RoutesKeyGen/obj/Debug/RoutesKeyGen.Form1.resources new file mode 100644 index 0000000000000000000000000000000000000000..ad8996e0295d38c563e2b8ab5771b717c6ac18dc GIT binary patch literal 174812 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

~TgIVGY8EtgXw^YB^QM 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 DmF35d literal 0 HcmV?d00001 diff --git a/SOLVER/RoutesKeyGen/obj/Debug/RoutesKeyGen.Properties.Resources.resources b/SOLVER/RoutesKeyGen/obj/Debug/RoutesKeyGen.Properties.Resources.resources new file mode 100644 index 0000000000000000000000000000000000000000..06c24d06c1cab750788146ce052b37770f3fa530 GIT binary patch literal 180 zcmX?i>is@O1_p+SK%5g?SzMBus~417oL^d$oLUTL1*ImYq!#HYAEQvwd9)i$Fs;Hn<#6vHWowqn-vJ>Xbit*Hw zc=FsI(?8Px(0h;i-l9_CBEE%h-_D!)=6mm3&-XmS8>Wy+$Pxv}QtB4)Y^XHg%19vWt85ICzqgfz#2GuQ`X9;(=cx+1 z3UNjO<10?F+C}-FqRRW@89JE61EV!vPs6}?N8q^=BMrp`RXS5;cya3jZHV@bkVC;u zEIdrMHZYT^uwa`^IxrFrt+`MVY>gL=)fH4}xEP)aodbGarQ!uaqgHm;?jzS)iRRsB z{C|%=Z*c=r)F7+}3?V_2GcJUzd6o1`!8&s12N`B^n*he-(Pdbpax^q{(k;H5e7KlM zosxP)5OCHlH|x3k>$Frj&%2S%z?fqXkxgG+@D uLo#^DFGLnibBE^}S6{Aw|GDvfmRx9G;)L7#+4=SFmTSwronx769F2S4!txIQ literal 0 HcmV?d00001 diff --git a/SOLVER/RoutesKeyGen/obj/Debug/RoutesKeyGen.exe b/SOLVER/RoutesKeyGen/obj/Debug/RoutesKeyGen.exe new file mode 100644 index 0000000000000000000000000000000000000000..cad6eea9c3113950ed0f938462175bb63ae0f7c7 GIT binary patch literal 368640 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

&-SOgu+~-6fxJs%= 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�zi~_Y^l;!4_BCs41dty%uJe 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 literal 0 HcmV?d00001 diff --git a/SOLVER/SSKeySys/obj/Release/nmsRouteLicenseFileTool.pdb b/SOLVER/SSKeySys/obj/Release/nmsRouteLicenseFileTool.pdb new file mode 100644 index 0000000000000000000000000000000000000000..6893cfb725eb229ecca9e642956c5aef33f960e0 GIT binary patch literal 28160 zcmeI43wTx4mB-Hw7q2w8p7fYpv}Z^90%pYTiE$%7xU4 zeW1QjKd3)606GIY6VlkvhXz4;&{vwPcPUC-qepJk@ zx$NRqOUf%NYFDhRT)L>dx~isjW#tvsi>hibSyEkFQ&qWq)uNR(EgKUnTeq~umN!LX zEs5CTrsi06Yin~&)tag$3rnJjAlNv!rloFcQ?zws?WTC^2V>E;L``j6I*Ho#O>MO` ziPq+=vAA+Fsm(U0b>!5hoD%JcrUvEoZmYB+-nu?sw^3QW+d9z@pOs(UmSQv+ZW(kd z^fO37Gw6vChQB-|avxQlG4;q9B`-Z6QET2w(7K^DLwZ^#6l9HYkn;ZF_Pe&M=2?7M zOS~B5gDmD{@4J2Uk0dKgN>;qEEYY6u9$P?tR}xInG9KKg2w`vNP>6LscO{zu;};cm zO)c<;2EFnn+Q<*ddVarPO#T&B?TNP7M)nA)=aMCrK`=5DFK=ybW=3dgZAp||5^IUY zo1*L?((=`@?QN<@IFHpEn<+OfQ&HDaw?4Kp)`FzTyJ5rjXspCcOC?pYICD>|%FHq1 z7v^h!!XC!7QyyDhHD=0~DFo8R*YcOepDBK+<7>Z@#h)eqRL9p|D2qQse0?iZ{wg?& zKVAIkj;}pb7T@U4aD45pviPR{GaY|$7kquUQ~5)>;Op%7T=+mJ{~*{Dk6o@b@znR} zvV)+hWnC+Cyy20a!HaH-HeGR9Jokag|NgGt#%Z^v>F$Hgu5x3i6+T+z2xCZP0ul&cD8Cy=k}F z-WkmcdiVbR{9ir(;F{-_>?!V>^XS)iuO*A1B3Nkb(;NHB{u)a>n)i?1IUl}K{z93# z%5$cht9Glhgbwr5{$LE}4n!J%N8!*cMqzk4gW%*8JU&xXGeq~6IW zcrMrg4hJ=8g>g`NEDFLHaIP0m}ZXTzbM`8(2pA78lIr(^$w#B8ytU~!}TCOnQR5|$)wioD)2V28oUd<0^9|z z0v`b14?Y5}2LBa&9PG=An1^TP1wViW<70RYVJKdi$Bs5X*Z>V;j1~cq6I7e5ee%*Q6CO zLW(K7*vS{8KOQd;idTe1i}1Q4WJXYjsq#n{RNooqR+vptn-ua%KbsM)`udPhoz!-P zQ5t;&YooE?R;U2Cp_Bd&SvdGIsf3*epLPr&=Y{{SBW ze+vE+cmTA1#*9T6XY8*U^qq8F8ClpQ^7~VAt_TYJJZk&5oiV*hl_n6IVU^2LEaDI>OIB z(5)tB&sPe0o(`!_jZhL&n|DL_TW}caqlWi{Q_2FpX{~>!8Z5^mv{*1dafw_#7}r=I zYpbnYu%wbxUZv@sO8N(2dL7Ay&w<|UxsT3{x;pn^E%E0~9Qj1I#GBgMOUmQzo7!|x zyQ#6=)bUsul3C5{dmr`H@Ftiup^SH)(@4$Yn=_eG(xorMWbsq)JpR2g&F4^@QxpGA zlbIeh`N{m5>1~`?ENHEZHyB%A2>%5H*teNkgGZAeTaPR~`%Yos6W`{Yn@rS)10j`v zy1`ubkoHXQdSy=V{i|o>aurwkf$@oo)>KV#4f(||gjS#{IWK!6+Ps=}ET7Kv#NR_C&O|&Xf1h z4%z!H*Jh0wlDqWrzr@~t&hzI;3rhngEXJB&cp`f-`TrAWn}ovb~8JhcPd|feSOM}XVkxZOFYg|xtig|r_O;EqFauZ zm;L{4gYScJI!GiOGzPcNR4w0DfL{66B5;IFj&!`7_ji1y(>@Si zb9xs4m^nR*ADYv99gGusH@_E?R&-ZOwFLSQXOpls58$SruBM7#-c1$FJ93>Qqhss@E-{{K+FL|6}WQ z7`@LSr}Ojox?VNp{i>_iP%7i|KVH4MKjt#$Xz#C+`q3D|s}{^p%#*9L0+k91->7C&`v=)c>f`9TnEZHS>__7kd0Hm|yUli_#Y z2KLO6yfV(6hxJz}=IqQq@RM%H-9drg2A9?)8pV`!&IsoE~dQ`)@eCzRmh$_tuEaw)+0wH-N$j&s#7*>B`)D!)=XiuWE}owXBD$ z_7-5DThWt_ms5KgrrJ<<+FtSTqilYvzs1MK*?e;juX74-uXO&{%cS?puckgbsn0&* z_q%#aUUm%2H#zx3$lrwg{lp&%$;)5E^7TgE_G36*`w-=iYKDAEsZFPkGSg{*e9}|* z`YUsM`fnop&meQcJmZM=8Q07GFol|=MJ-XiC5WTG+D|)gM@RBr#`gvN(Pdw$FS7Wl zzVc%;%?|>uzu+V3Z>nKlT`X~N^Lkq!4hMo;sn09q|7}-i*;2L->uiX%n{lo&6i#O> zn3o`mGVR+*emlwUtHgir@>BcNH(|YviL_y4mxJitgx+PyjiYmAJL!={hF&yFZx}i^ zLKBdi9@676Locx{U7qjvFuoff7~pzsY{&<2>D)c8KEc9Rh7UYNeP7@uNb+7rZB-vb zUHSm?KsNsvA4u!-ZQJ#;@>bQtyiLvAuV}NEA7uaD9JW0}opk2+x~sSMgRq|bK>j8_ z2&dP#bKQzG<#juGJw;w$Bi@%z_kAfJ2s5DhuW((?sseu1>+qSY5*c4194sUdKU$Y&8%sIRHt=%c-9=Zt;^YeMtS5#ZUQ= z^i_D8&wjmb+wxe;`nE>W)$i()Fu$H}tGekRTXfF`nd_eauGr>mFhmt_fu!7v=s=bE z&b}*dHQyDzoqvydhw>mq_}5||%~t}QNh+MhYnI9x3}SopU6C|w9VE{IIrmKJD}!(p zs58(pE?x=_BYlC3FLV5u!*w8eBsYNMk+kQoO?1+Q(0FJVUr(mP75@Uto`)@`n7DrA za{?JV;bpd2UhP!J1*+7 zKdQ;YzL!VLJ33MA74;p_gt_Fe{&*j#c5tp{+QGLSbGEPVqy8K|pKm1jd=vA1t-S5~ za>TqlE5mT!3(-~Hi$MCre9OdM=3C~)Aa!tg-$lNedH*8Ezsp8a@50nAI6%6>WiIbZ zP)RFHUiQ1?VB#x@Ydlne!yV#dW?bMyCY?So-!scye7WOmJZSu^2l<9$zPBs>S1$fh za24sdIJwWd_!q(Vlm1PY{-BFL3i9nIxd&VWJ_cS1?gOs^p9E{bXTcAE&pFf=43&G( z#eV}{4PR$Lk~dTYv0hA*fer5y_X7FWR-^A>9v3HX1e4}5+ z>fJs4Ia&3ZW%OrruWN{#L(_H9w{bgf%HQp~a3u9E9rpKD?1FiMP2lNZ9P9%ojJ>SA z2fBC>*hcy&Q2oGM8EhdgzZWt`8a&_e$2-&>bsPMN;C7I?%;-;ZamI7dPCDb+q+bGF zL!5DJaEZgEj_=1)1@UWgS@ez|Rz7TwbxaL1$v%`&!k1dQG zwg`5>-wa*{ZguI@(ZoLqGFFqHa_OH2uP6T34*$mCPRGC5;Vs||$lVHl9Q?dXzthF< z2X7?(n=buZ;3tUxgTn_M?soi#9ex|6F3Fcb$~O0HC_8Dt<62+HXN6T5j*rVX6!P%f zW54_BZh(4PYv}xL$ZB=f`aPo?vYIhG5J~llJ)N*ekS-u@GS64pvwPyP*%Dd91Y$BmVg>>T35bI ze3^^O|L-NvTp#QL*SU20`B#bKqekyz;Ma-E|Ly~MHtF&+#UBN~0qy}+&kl$CK$ZI> zh;JsJ0nu@GDaL!$V*j1J5WgvaMnGfCvv@;vBgx>nF4E>1{(M$#_46clJR{tFo;-G; zzF)`X_;Z6u>davhn!019z!)+1W{jBqhUz_#bjFIY=R=_ULFp4f#!hku_z0+(^gG}j z5E~@tg5L!fgZ~UJ2mb}E1OE+d1F?-+x4#cwOZ*8?_T3MD4g4WUndV-L#wj*5_e!1u zJBU9GqHFH6`~XzF4mx}Z#Ma4|UHlD){{uctdTzwtXYuRw2;$No2|f>B_v94U`u!8) zTEBk^j&td{n{$BpH1I`mx=WwoQ0x0a(si%yCD4uo?Jl(^*L|Sr?)hS#M?v;JNItul ze0Hk&%p3XaJchAm+I8`2{9qB@kpOwSW;EKnR@U9{E`NCyl)oGX z0=2FLks!$$6y$*N8}2|RnG3jsZ13ls z1~P_&zM$3t_2>5-YFzdsUH+r=pE*1T_9vY_GwFYHDE}Eiy8K7-{|n|3|1)?7NZo=n zLFy0;1a%Kna`H2w_cQ7e41!PD!C(+s!{<2|LVP$l6fAJ*VZR(k`e@R*)9L(4vzh!! zYfRXmD=0a=nC+)YaKaC(CAHsgrxepC;`Cnkr>j`bS zUHR9@lz;6;)}B8^Qs)d;p=HVH?dJ`i1KLL)z^dvGCC4Q+>ZLJvUuphM7~p+Yj&?~Q0YZh~%t?t%6| z&p?NvKE05GW<$Eq&2Yq~$*;*?YJWS(|KM`kCVa@@9C(WNb@4B| z__v(=$6UI`q0vKD_!Eak4zF94rB=06^T zBA4Fe;&-}yUh{k>zr)2JbMmh_oa5x*baI#gAL-4!2q{=VAQTMW#xofqnNc)g}FQElcHCmU?=} z51Az%PkjK)VbB;zbJm5>rBF4r7HWpJL)SxhK)WE#%N@{u=mqEy#9AF_t<&90tyP7P z_CT|t6;KVN{d^mggl>Xvhwg#ii!d@cBVYNj@6Y8nNM*&u+C?pG@%Gvkt$d3Jt{D^* z8@?=)6WCt>9U6=erA?WsUlW?rp!X~*tKS#N$@&E>uVZ;mCzjUHeUzLa^vg<==XEU4 z>8#VcpDjnfi-XRwzo-+^wK7(>l#Uwebalrf#~)yapO&tl+8?o(-BK4Ief=!Y z)vq*NKiz?II++*bLgiT*r^~iuq^qCqb2;6N%U-@r%XfOAdg^YH(@R}i@;a91bf%~4 zNp*U{DQba2d{qA1S@3%U?XCJ4UzTs3QbA2W>4WB1H)mvC6r|;T?yxd$?qIX!=PBL8 zbGqpZdLcc_cX~6^^QrDbMY1kR`LZm}>F`49=WN{}GCJ;Jk(amWPJVW}4Bf%8^6ASt zUdQsB&YW}^x(gBs()SX)yiIrVb!mCs8;FE16L@)>?&Ry!b<#KDNY=+=uVZ;mCz>u} zFh>oMPSz@$ZskkuE9*PaS2UQ0?FxqI6PfT-keaCFU>31hW@Uoik&`Lha=hj-PM; zpwQ)_yNSwoSHE<=UHplf68HCDg7Wg&Qx=t$vRZSe@gGZGs zeKX4rO43;s@A$_ACFz{us$)2|E_#pm@9<#}>FM{0_tFl9aMpU(@9cGmLCEImch+CD ztYdiky)K5D3E6u39V+eD6~eq6c7dEXnN*DhJ?U>?X}weMX+p_LTmP0B?z{h!NzNbN zi$8Ug`s+*nZ#ubVxthAhs3Av>_T#X~KKVhGmg;#rg)DHqzyG@*J4{~Q)UsiT{@}{w zmb#5xC!3szM<+LO`6(8!Z*GllunGFZU5Ux>_AhLu{_2-0-Q*!6FTQWTP4oq%eC-ta&SV(oxP!17k7YoIb zR+S29g!W;wK#Mk>M1w)i3?r$rHh@!0elvnn)YrT$>@%atmKxBcE?`}bYI6ZI7J*TV z+J!8rg|(I!UtSRQEjXh{K}StJYUm}>quyo;d)Go9J*jjFtvf(aK{VGEJi!0P*z)@q zYs**vJ8_A^M{(ezijV%0Z2|o3BY++x&04OwUN9TMsA(qu+GwknI%e8*K_I>ub>(z;Geu(h!unlBgG$0==n|Kj{Vm-i(5ZuA~au_v4y<4t@8M^hv zdF!r{x^JDg?h@3&^ox$G_hkC%^P2DgTR_%A^&&(202*BEG_!Kts1iLN&}&|1A41r^p;tDXpx#+sQ9!_0Uf-9-KvD?ckLnNGe=a7ibA< z*2mCG9FS`gVnKS@cPT*;LTIiCqWT;W?_3cC-8mw@xgxOP9FfpjYJBI)s4brQW~IR+ z$)Z88q>BfAk}ewz2}4~zf3QZ2>u6rvO!``7Cq_YjYFb4;3=sd;Qq!JtzMGnEEa!{V zbZ0sL5nA@Bljr#iEUjKN?4Mn|y#Tib0Vc+t=8TLigANIE_(NGQ^Ufw?VLR63F zaUA9b2sD=$eTZ=WuOFV)7JVrJCK3K&g(8GF5jrAwcVIweuCp>4> zJU&yiAh@80JhwuH*IonBS{uj#R^4wlBeU!}^D-o63kdoBW&)|-T*s_dkUATCX)x-= z=Hzhi%Ei}%Q@_|mYzJr9_2t?!JJ4Wn+aM1^4{POZ zkomGbI{caKG3+%rqg{Lp2qw*fuy?kxx1urm%Y2MvtMv2|X;D9*^z+^di&Xkss{6b0 z9R4d>_s`}0Ep%6)JfFAHYb(n0*-MuKJOp|r{(*1+_`fiN@+|&N%{$<)#<#(;x`4eM z36K?k1T|ed*B@Hg8^>X|W?sQ#(KPXn=6L5yZtV+u!@hb4X~x&Sin$0Pa|bdtKuQo{ zn{+VUyNwz69sV5n1zCq*fo#pCWc>>UTf>Xh%L_=H$5MW624{a%2hKXzb1LaCNu|; z%6eK$mdAq$&<@@Stv-(T0znb3QT_FPR~Ttoczj0KFH6=yyaO$)&w?#W%rwstn2&YE zM|-e%B2dd~xO!O)Cg`Fwym~e(_0e!R+_ImnZ=h|wlO?Ss-kI#W+3exj>_=v^VP9D` z-i5}OZh6TA#Om*>Q5){FKE;*0!ET9g@vqCp*`BwtrDQ$LHG8;oe|#?zF{+W`NoHB| zwYhzeztO%LHMKFoNrF?IZePRgykT#kKHvhzF=g&!6}poMN`ZRZtah_7Zey)|tb0F~ z5NdJUJOrb<-x_8vuV{;$j&x_<2kN82=G(%7raSp|I2s8@>a9FP9|}hrFy=UJ-h;?5 zvi{s*Hiq?E4uBU9nte{yV(W`e)e=;toT`2#(P$)UJ;l8qbOe`LKXC-(17MhkKqwq+ z7>q)htJNF?6ALXIxNQszZ8%^aW-)iL*1thPrD$|PWWns3?)Z933-)LB&9As`b`>wl ztkD+7c>Q3DW9(~D32ekau24(*f7%t8g@T~E=spwk2-b1fih+NIz^SZ0!ee()RU7Y% zUyrhR12e&m4<4> zn}L|DPT=$FFsA0!)(!7MZp(uh5c^`1L9g&d%T;9E4qi0W&`{q{AIAo&MdyX*g+p-+ zPK(Y*?1ksY=ke`>^%VCsPlDHRadS88{NC9*H(zZGHV^{>X=!zs9zRjD)efXs`M2lY8sh=AF)c74H^aY4{hjI>Br> zd~RD|m)ql}7X9-*CZd|^#BZ)qhj*Uw)%aT$(mb+o3tWsJgL&~hNU(WZxtCS%AS5kY z&uU4y-IL2QMu(3LXOE9ej1-5bN@FF^8}X9^B*yUarQ(>?&tuE*#&Jv$oaQiCyG)In zD6ooMsjGJ>d<%{XKBD966RnBMTQ{%AO%&f@!%%u2^I_$!L|5R(=8hopsgji|jM^;m zOvK@@JeVRc9*%J&K`ZwhOk$&>1t@Ps*DH7BO~!>U^sgMc=b<$LWauqr1K~b{d&fq^ z_w)RGOi_H{B!Z26CL{I0R8kEoe_4*(@t4~wMn~u}$a$1EK|ig0Ows6TLRIxu zU%8nx*xdA+_1`J8?kB)_1a@`vb6{aJ9<1-Ld7V9h53`G7_bN&XR` zX9A2{V~}h6gPhMuJ_pK|<42CjX&i4|3NQMQXYPF3K-*DLB_@cT2(afpxIK)bdL`nr zQSqV_rVKm~rmPY~&CcKl)ZQ3t{zE;7mI}S(mL{Y$w!*3Vkd)qVOZQ4Ceu-1}NhwXb zr6(u?EqAPvI(i1EDD*ULWr$AEw`n=X^-H((60O3s*h`l>lBcn<>vSaUlwLc3m5qh6;(L&^@UC=cUdi+ebxbitb9I!DXR$~C~{2%f&U?zd42 zldp|Sw=cR!>4l{~b?QVXrYdaxEcRrT9s~8zmqESsG^mfh2CC4vgdW6{QYZ(ik}dg9 zVA7TIj!X+8LZOB5f=bIk6}sM~jdYLFPb-A35!wcNn6^s3U1(D10ilP5riJE&-XwGi z^alDcXcnX6@!Tu?d+D1ViyoxcJvZaYVS)Fz=uv9(o zKhr)6@4v0xtegU;pOVS~|82@?TIv4-R+kZdjwR@EZl^gtT5ZB(V zJc3paD^G~FF#V0cmrm2u{!b~-D!;@7aV^F5FDc(uHtEahNhPa)1&_RK-ft>TDwh5o zWvS#(1DStS7^R5<5u;zg1@T<#Ip&U>Hb(v;Lhq4=n}dgbR|6lxWaM;}MjeU-jXuh9Vex7y}Okp;&Hmo1A|8nU$m&f_?6~H|JuNGJ) zu<>`B*@?Vy6&1$qK69dE?8{}0f^F>1<&A#R%qNUVgHnf6xEn}K*(GC~dY#`&UZ??$ z+Zof!=Z2|g_(mgBq9Hq-FVUz`8XDS_>|sTc?>0+ghPBH~TiG%TnlpxNn^u|8nX`{| zlnWgbmSq%5%qz2!_CU@mO{DX*$0#}Gp$hrEX?sjkW74_Np{_#4nkts4({NHpI+5%l z2pH*c>NC>WT~j5a-LleCR5o>Ju9-uXCJvR&8=7m{(5zYA>0E(&`?_`~2Pu_4Zd_wb zF|gEca+1oOKz7VBjQwWeTEj9sbECPEO^Hm&v|P9oea1*0Fy_nxwcEBaKAaa71BPXT z*IvSX+%ViWQ+ZB>JJP<1LMbo`1Z)1HZ3c2-M=IX;lHbHjOKmRIh! zV6)wc-lI4o;GH2%F2z7mCmgKl-Y^Qc`9H-FQ|HASh3VOt(g2p-R*OPrL@*d|^;sA5V| zNAE%I?N|q~#hjxVH>Hfsgaw2X9X#{-2j0c8DeCUL+$p}V0`-nV2Po-)f~j1vM@$QY!m3y@++`Di z(`}5yH|}D&D_4R~jvE%%5;_DF49GLcZhd8er;fYGiljvhLpf_Y>#eH|5yPRdX`>rA z9eG4NWpYIXy@0pdGRNmg@Nkj?uC?ys&Wook>b$1IKyK+~Iq5gM3Rz+xWzlyXKZ|$2 z>9{PBk#(4Xlz5=Dg$HI>YMY308Nj|=!BHX^vpCds6LurS9LX}@HJP)qp37SA>@u7c zK$0CP#6hux|F%GK*XD}*uxVa^pV)(XVv;N%*2*yFP21op?ZTBkhM-BvHlA?9J7wnK zCUSRmm@jTBZ-Y*|_O28ScJJd2ibIKa`NZIOeuj6njrN(qjb}!0x+FU*4`hFO9G-RL zXICIQvBxMNRx{|-E}`u)V+yM)f~g<-4;hn1Omy2>2uy5Bm>^kWvS)KQJRI~LbyRL!SfSc@_w0ckmJ>UBoC9UIZAft3OU?3jFiVV#&}>&ZJpfIimPoyOB=bn++HJJ#7zo0 z6WnF)&Kdda-gF_$LxQdxBjMh2QCo_-Xdk{E)K4)yUB_rQ^-&LXBX@{$RKPv{dK$u? zge1YmeX&A~DKf}HT^i?H`)Pv4ael`f+WzjfrLk!k&}u@9McIpJTZFuc=LrKEY~;{y zL+?4fBy|$)xVd5kdB~2UoDsXT$k}v^66o8Y=+T>+~m?1L8 z^Nf1yd+mjM(o17EEGnRv5u_O^A!kWn)HomrP14yZ*L2g(f}Mfd**q;|eDd(#7)?=8 z^c*K@?v@cUa*WvsdWm6_j9yV_8k`(*IPQGcUhG5*#;_Awa=_3KPwdAZ9(5vL##B79 zgh$XrgNUTP)Q$-2#3u<%@p^3G0OD^yYIq!nq_ztWYB;R%wBU7C5u-^%e*qC{&?M}n zMjNB!xG~@__De?cs9BhSWD&I-k2CU1IwivU=rC;SM^9a_fTO&RD3^jp)|5sZ$Dog6 zAco#d!6+k`lw1p9(9IY+xaNUy3|KOXxJac z?Tebyn2VQFE57SN+h{W^nS=*S1T3^%NaPxdbFl*lc4y#E90!K(D}vbCBRRjF~}Kf$MmNN6HaQTQ4k`hCUwi zF|=X)xMdL<84VnczyHE5M-sU}aY%@MF;>5$jdrxV;d6f6%BVTD z=fSM8T^6$#M$XfxqKBE9*0XEsDnpsJU;M-^V?zyu(LiY&m7uqYdOX#&i4>R>JR;|Dir)L2tmDBOPwE2A>|ID|$KRohq-R+l5Uq|}m zCyop>Zv5egJzA3whh-srRh@hxl`k(Tp%4yvLrp%M(}hAIjg%%|B;e5@sFR8+r3nHm z#8|ct{VLv=qJ)^JK9F!bXLbE^JBDrxzZl%+jZx$PlY>kSqjG5ot<*ZdKhhmJ5Qq^K?U|5v&fKv)j z|AM7oSC9d0t}jE7(WAseh~lJ`E76q_0*jQ$gnp@iVF*^g$X5SA=jsRX!;Uoknjx$fZID#~9mfy0>{7t)xUT?#<)Ppa6T-KNBOnv_=dbI8*kM?~2 z@mKb*h`kAI*ygt#+21~p?C9wp>h0^fx~ronhI2%B8t!`ELW}a)&xht83Db(^xs4HjG3z&+oCRwR~JFN4BtIDdc(NeB^E+b>7=L?`|%(|Cxhl_>+Ip zy$?D^MI*mWEaJGGM>vW%DtI*^Zy4wDV)(sr3?JwH6?^}v*w^E>W0cvxGH&H}Oz+*! zUh#wThB%9t75si`Kl4Vx%$rb!r4C9B5m5?Cw|Mu@5`Nchrh0!7+57$ z1gZ#B5vU?iMWBj66@e-ORRpRCR1x^!L;&yqYtdgX9`37G6@e-ORRpRCR1v5mP(`4M WKox;10#yX62viZMBJh6`f&T)}sxMps literal 0 HcmV?d00001 diff --git a/SOLVER/SSKeySys/obj/SERVER/nmsRouteLicenseFileTool.pdb b/SOLVER/SSKeySys/obj/SERVER/nmsRouteLicenseFileTool.pdb new file mode 100644 index 0000000000000000000000000000000000000000..49801a08a6250329c2ab9c27d41898e9d66c23f8 GIT binary patch literal 28160 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 E0b_W-T>t<8 literal 0 HcmV?d00001 diff --git a/SOLVER/SSKeySys/obj/SSKeySys.csproj.FileListAbsolute.txt b/SOLVER/SSKeySys/obj/SSKeySys.csproj.FileListAbsolute.txt new file mode 100644 index 0000000..0635baa --- /dev/null +++ b/SOLVER/SSKeySys/obj/SSKeySys.csproj.FileListAbsolute.txt @@ -0,0 +1,13 @@ +M:\NAVICOM_PROJECTS\_ROUTES_GIT_\READY\TOOLS\SSKeySys.exe +M:\NAVICOM_PROJECTS\_ROUTES_GIT_\READY\TOOLS\SSKeySys.pdb +M:\NAVICOM_PROJECTS\_ROUTES_GIT_\SOLVER\SSKeySys\obj\Release\ResolveAssemblyReference.cache +M:\NAVICOM_PROJECTS\_ROUTES_GIT_\SOLVER\SSKeySys\obj\Release\SSKeySys.exe +M:\NAVICOM_PROJECTS\_ROUTES_GIT_\SOLVER\SSKeySys\obj\Release\SSKeySys.pdb +M:\NAVICOM_PROJECTS\_ROUTES_GIT_\SOLVER\SSKeySys\obj\Debug\ResolveAssemblyReference.cache +M:\NAVICOM_PROJECTS\_ROUTES_GIT_\SOLVER\SSKeySys\obj\Debug\SSKeySys.exe +M:\NAVICOM_PROJECTS\_ROUTES_GIT_\SOLVER\SSKeySys\obj\Debug\SSKeySys.pdb +M:\NAVICOM_PROJECTS\_ROUTES_PSOURCE_\READY\TOOLS\SSKeySys.exe +M:\NAVICOM_PROJECTS\_ROUTES_PSOURCE_\READY\TOOLS\SSKeySys.pdb +M:\NAVICOM_PROJECTS\_ROUTES_PSOURCE_\SOLVER\SSKeySys\obj\Debug\ResolveAssemblyReference.cache +M:\NAVICOM_PROJECTS\_ROUTES_PSOURCE_\SOLVER\SSKeySys\obj\Debug\SSKeySys.exe +M:\NAVICOM_PROJECTS\_ROUTES_PSOURCE_\SOLVER\SSKeySys\obj\Debug\SSKeySys.pdb diff --git a/SOLVER/SSKeySys/obj/nmsKeySys.csproj.FileListAbsolute.txt b/SOLVER/SSKeySys/obj/nmsKeySys.csproj.FileListAbsolute.txt new file mode 100644 index 0000000..b3d8677 --- /dev/null +++ b/SOLVER/SSKeySys/obj/nmsKeySys.csproj.FileListAbsolute.txt @@ -0,0 +1,5 @@ +M:\NAVICOM_PROJECTS\_ROUTES_GIT_\READY\TOOLS\nmsKEYSYS.exe +M:\NAVICOM_PROJECTS\_ROUTES_GIT_\READY\TOOLS\nmsKEYSYS.pdb +M:\NAVICOM_PROJECTS\_ROUTES_GIT_\SOLVER\nmsKeySys\obj\Release\ResolveAssemblyReference.cache +M:\NAVICOM_PROJECTS\_ROUTES_GIT_\SOLVER\nmsKeySys\obj\Release\nmsKEYSYS.exe +M:\NAVICOM_PROJECTS\_ROUTES_GIT_\SOLVER\nmsKeySys\obj\Release\nmsKEYSYS.pdb diff --git a/SOLVER/SSKeySys/obj/nmsRouteLicenseFileTool.csproj.FileListAbsolute.txt b/SOLVER/SSKeySys/obj/nmsRouteLicenseFileTool.csproj.FileListAbsolute.txt new file mode 100644 index 0000000..89d6bab --- /dev/null +++ b/SOLVER/SSKeySys/obj/nmsRouteLicenseFileTool.csproj.FileListAbsolute.txt @@ -0,0 +1,39 @@ +C:\PROJECTS\CSharp_Navicom\ADDR_SEARCH\_GRAPH_SOLUTION\nmsRouteLicenseFileTool\bin\Debug\nmsRouteLicenseFileTool.exe +C:\PROJECTS\CSharp_Navicom\ADDR_SEARCH\_GRAPH_SOLUTION\nmsRouteLicenseFileTool\bin\Debug\nmsRouteLicenseFileTool.pdb +C:\PROJECTS\CSharp_Navicom\ADDR_SEARCH\_GRAPH_SOLUTION\nmsRouteLicenseFileTool\bin\Debug\dkxce.Route.ServiceSolver.exe +C:\PROJECTS\CSharp_Navicom\ADDR_SEARCH\_GRAPH_SOLUTION\nmsRouteLicenseFileTool\bin\Debug\dkxce.Route.Regions.dll +C:\PROJECTS\CSharp_Navicom\ADDR_SEARCH\_GRAPH_SOLUTION\nmsRouteLicenseFileTool\bin\Debug\dkxce.Route.ISolver.dll +C:\PROJECTS\CSharp_Navicom\ADDR_SEARCH\_GRAPH_SOLUTION\nmsRouteLicenseFileTool\bin\Debug\dkxce.Route.GSolver.dll +C:\PROJECTS\CSharp_Navicom\ADDR_SEARCH\_GRAPH_SOLUTION\nmsRouteLicenseFileTool\bin\Debug\dkxce.Route.Classes.dll +C:\PROJECTS\CSharp_Navicom\ADDR_SEARCH\_GRAPH_SOLUTION\nmsRouteLicenseFileTool\bin\Debug\dkxce.Route.Matrix.dll +C:\PROJECTS\CSharp_Navicom\ADDR_SEARCH\_GRAPH_SOLUTION\nmsRouteLicenseFileTool\bin\Debug\dkxce.Route.WayList.dll +C:\PROJECTS\CSharp_Navicom\ADDR_SEARCH\_GRAPH_SOLUTION\nmsRouteLicenseFileTool\bin\Debug\dkxce.Route.Regions.pdb +C:\PROJECTS\CSharp_Navicom\ADDR_SEARCH\_GRAPH_SOLUTION\nmsRouteLicenseFileTool\bin\Debug\dkxce.Route.ISolver.pdb +C:\PROJECTS\CSharp_Navicom\ADDR_SEARCH\_GRAPH_SOLUTION\nmsRouteLicenseFileTool\bin\Debug\dkxce.Route.ServiceSolver.pdb +C:\PROJECTS\CSharp_Navicom\ADDR_SEARCH\_GRAPH_SOLUTION\nmsRouteLicenseFileTool\bin\Debug\dkxce.Route.ServiceSolver.xml +C:\PROJECTS\CSharp_Navicom\ADDR_SEARCH\_GRAPH_SOLUTION\nmsRouteLicenseFileTool\bin\Debug\dkxce.Route.GSolver.pdb +C:\PROJECTS\CSharp_Navicom\ADDR_SEARCH\_GRAPH_SOLUTION\nmsRouteLicenseFileTool\bin\Debug\dkxce.Route.Classes.pdb +C:\PROJECTS\CSharp_Navicom\ADDR_SEARCH\_GRAPH_SOLUTION\nmsRouteLicenseFileTool\bin\Debug\dkxce.Route.Matrix.pdb +C:\PROJECTS\CSharp_Navicom\ADDR_SEARCH\_GRAPH_SOLUTION\nmsRouteLicenseFileTool\bin\Debug\dkxce.Route.WayList.pdb +C:\PROJECTS\CSharp_Navicom\ADDR_SEARCH\_GRAPH_SOLUTION\nmsRouteLicenseFileTool\obj\Debug\ResolveAssemblyReference.cache +C:\PROJECTS\CSharp_Navicom\ADDR_SEARCH\_GRAPH_SOLUTION\nmsRouteLicenseFileTool\obj\Debug\nmsRouteLicenseFileTool.exe +C:\PROJECTS\CSharp_Navicom\ADDR_SEARCH\_GRAPH_SOLUTION\nmsRouteLicenseFileTool\obj\Debug\nmsRouteLicenseFileTool.pdb +C:\PROJECTS\CSharp_Navicom\ADDR_SEARCH\_GRAPH_SOLUTION\dkxce.Route.ServiceSolver\bin\Debug\nmsRouteLicenseFileTool.exe +C:\PROJECTS\CSharp_Navicom\ADDR_SEARCH\_GRAPH_SOLUTION\dkxce.Route.ServiceSolver\bin\Debug\nmsRouteLicenseFileTool.pdb +C:\PROJECTS\CSharp_Navicom\ADDR_SEARCH\[READY]\ROUTES\Service\nmsRouteLicenseFileTool.exe +C:\PROJECTS\CSharp_Navicom\ADDR_SEARCH\[READY]\ROUTES\Service\nmsRouteLicenseFileTool.pdb +M:\NAVICOM_PROJECTS\_ROUTES_GIT_\SOLVER\nmsRouteLicenseFileTool\obj\Debug\ResolveAssemblyReference.cache +M:\NAVICOM_PROJECTS\_ROUTES_GIT_\SOLVER\nmsRouteLicenseFileTool\obj\Debug\nmsRouteLicenseFileTool.pdb +M:\NAVICOM_PROJECTS\_ROUTES_GIT_\SOLVER\READY\Service\nmsRouteLicenseFileTool.exe +M:\NAVICOM_PROJECTS\_ROUTES_GIT_\SOLVER\READY\Service\nmsRouteLicenseFileTool.pdb +M:\NAVICOM_PROJECTS\_ROUTES_GIT_\SOLVER\nmsRouteLicenseFileTool\obj\Debug\nmsRouteLicenseFileTool.exe +M:\NAVICOM_PROJECTS\_ROUTES_GIT_\READY\Service\nmsRouteLicenseFileTool.exe +M:\NAVICOM_PROJECTS\_ROUTES_GIT_\READY\Service\nmsRouteLicenseFileTool.pdb +M:\NAVICOM_PROJECTS\_ROUTES_GIT_\READY\TOOLS\nmsRouteLicenseFileTool.exe +M:\NAVICOM_PROJECTS\_ROUTES_GIT_\READY\TOOLS\nmsRouteLicenseFileTool.pdb +M:\NAVICOM_PROJECTS\_ROUTES_GIT_\SOLVER\nmsRouteLicenseFileTool\obj\SERVER\ResolveAssemblyReference.cache +M:\NAVICOM_PROJECTS\_ROUTES_GIT_\SOLVER\nmsRouteLicenseFileTool\obj\SERVER\nmsRouteLicenseFileTool.exe +M:\NAVICOM_PROJECTS\_ROUTES_GIT_\SOLVER\nmsRouteLicenseFileTool\obj\SERVER\nmsRouteLicenseFileTool.pdb +M:\NAVICOM_PROJECTS\_ROUTES_GIT_\SOLVER\nmsRouteLicenseFileTool\obj\Release\ResolveAssemblyReference.cache +M:\NAVICOM_PROJECTS\_ROUTES_GIT_\SOLVER\nmsRouteLicenseFileTool\obj\Release\nmsRouteLicenseFileTool.exe +M:\NAVICOM_PROJECTS\_ROUTES_GIT_\SOLVER\nmsRouteLicenseFileTool\obj\Release\nmsRouteLicenseFileTool.pdb diff --git a/SOLVER/SSKeySys/protA.ico b/SOLVER/SSKeySys/protA.ico new file mode 100644 index 0000000000000000000000000000000000000000..6b57a9f7d044991d2164b844077b41afff779c83 GIT binary patch literal 92582 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 K_Pl}@=KleTI= 0) || (k.ToLower().IndexOf("capacity") >= 0) || (k.ToLower().IndexOf("totalphysicalmemory") >= 0)) + { + double big = 0; + if (double.TryParse(v, out big)) + { + v = ToFileSize(big); + }; + }; + string q = String.Format("\t{0}: {1}", k, v); + Console.WriteLine(q); + preQ += q + "\r\n"; + }; + } + } + catch { }; + preQ += "\r\n"; + }; + + /* nmsKEYSYS.exe */ + string cwrl = ""; + cwrl += ("APPVIID:\r\n"); + cwrl += ("\t" + (SYSID._IsVirtual ? "V" : "P") + System.Environment.ProcessorCount.ToString() + "\r\n"); + cwrl += ("SYSTID:\r\n"); + cwrl += ("\t" + SYSID.GetSystemID(true, true, false, true, false) + "\r\n"); + cwrl += ("DISKCID:\r\n"); + try + { + cwrl += ("\t" + SYSID._CurrentDiskID + "\r\n"); + } + catch { }; + Console.Write(cwrl); + System.IO.FileStream fs = new FileStream(AppDomain.CurrentDomain.BaseDirectory + @"nmsKEYSYS.log", FileMode.Create, FileAccess.Write); + System.IO.StreamWriter sw = new StreamWriter(fs); + sw.Write(preQ); + sw.Write(cwrl); + sw.Close(); + fs.Close(); + System.Threading.Thread.Sleep(60000); +#else + if ((args == null) || (args.Length < 2)) + { + Console.WriteLine("dkxce.Route.ServiceSolver License Tool"); + Console.WriteLine("methods: "); + Console.WriteLine(" genmid -- add key to exe file for local machine"); + Console.WriteLine(" addmid MACHINE-ID -- add key to exe file for specified machine"); + Console.ReadLine(); + return; + }; + + string licFile = args[0]; + if (args[1] == "genmid") + { + string ccode = "dkxce.Route.ServiceSolver.exe"; + string HASH1 = SYSID.GetSystemID(true, true, false, true, false); + string HASH2 = SYSID.Encrypt(HASH1, ccode); + //SYSID.SaveFileDate(args[0], HASH2); + SaveKeyFile(args[0], HASH2); + Console.WriteLine("ADD 1 HASH " + HASH1); + return; + }; + + if (args[1] == "addmid") + { + string ccode = "dkxce.Route.ServiceSolver.exe"; + string HASH1 = args[2]; + string HASH2 = SYSID.Encrypt(HASH1, ccode); + //SYSID.SaveFileDate(args[0], HASH2); + SaveKeyFile(args[0], HASH2); + Console.WriteLine("ADD 1 HASH " + HASH1); + return; + }; +#endif + } + + private static byte[] PREFIX = new byte[] { 0x72, 0x65, 0x67, 0x62, 0x6b, 0x62, 0x64, 0x76, 0x66, 0x75, 0x66, 0x70, 0x62, 0x79, 0x74, 0x68, 0x74, 0x70, 0x62, 0x79, 0x6a, 0x64, 0x65, 0x2e, 0x70, 0x62, 0x79, 0x65 }; + + private static void SaveKeyFile(string fileName, string hash) + { + if (File.Exists(fileName)) File.Delete(fileName); + File.Copy(AppDomain.CurrentDomain.BaseDirectory + @"dkxce.Route.ServiceSolver.exe", fileName); + FileStream fs = new FileStream(fileName, FileMode.Open, FileAccess.ReadWrite); + int i = 0; + int B = fs.ReadByte(); + while (i < PREFIX.Length) + { + if (B != PREFIX[i++]) i = 0; + B = fs.ReadByte(); + }; + fs.Position++; + byte[] ba = System.Text.Encoding.ASCII.GetBytes(hash); + fs.Write(ba, 0, ba.Length); + ba = new byte[512 - ba.Length]; + fs.Write(ba, 0, ba.Length); + fs.Close(); + } + + public static string ToFileSize(double value) + { + string[] suffixes = { "bytes", "KB", "MB", "GB", "TB", "PB", "EB", "ZB", "YB" }; + for (int i = 0; i < suffixes.Length; i++) + { + if (value <= (Math.Pow(1024, i + 1))) + { + return ThreeNonZeroDigits(value / + Math.Pow(1024, i)) + + " " + suffixes[i]; + } + } + + return ThreeNonZeroDigits(value / + Math.Pow(1024, suffixes.Length - 1)) + + " " + suffixes[suffixes.Length - 1]; + } + + private static string ThreeNonZeroDigits(double value) + { + if (value >= 100) + { + // No digits after the decimal. + return value.ToString("0.0", System.Globalization.CultureInfo.InvariantCulture); + } + else if (value >= 10) + { + // One digit after the decimal. + return value.ToString("0.0", System.Globalization.CultureInfo.InvariantCulture); + } + else + { + // Two digits after the decimal. + return value.ToString("0.00", System.Globalization.CultureInfo.InvariantCulture); + } + } + } +} diff --git a/SOLVER/SSProtector/Properties/AssemblyInfo.cs b/SOLVER/SSProtector/Properties/AssemblyInfo.cs new file mode 100644 index 0000000..e75f749 --- /dev/null +++ b/SOLVER/SSProtector/Properties/AssemblyInfo.cs @@ -0,0 +1,33 @@ +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +[assembly: AssemblyTitle("SSProtector")] +[assembly: AssemblyDescription("Модуль уÑтановки защиты от ÐºÐ¾Ð¿Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ Ð½Ð° ÑÐµÑ€Ð²Ð¸Ñ Ð¿Ð¾Ð¸Ñка маршрутов")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("Milok Zbrozek ")] +[assembly: AssemblyProduct("SSProtector")] +[assembly: AssemblyCopyright("Copyright © Milok Zbrozek 2021")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// Setting ComVisible to false makes the types in this assembly not visible +// to COM components. If you need to access a type in this assembly from +// COM, set the ComVisible attribute to true on that type. +[assembly: ComVisible(false)] + +// The following GUID is for the ID of the typelib if this project is exposed to COM +[assembly: Guid("a42fedba-fc37-4315-b817-ded6d7a49fe1")] + +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +[assembly: AssemblyVersion("21.12.21.2")] +[assembly: AssemblyFileVersion("21.12.21.2")] diff --git a/SOLVER/SSProtector/SSProtector.csproj b/SOLVER/SSProtector/SSProtector.csproj new file mode 100644 index 0000000..ebcf300 --- /dev/null +++ b/SOLVER/SSProtector/SSProtector.csproj @@ -0,0 +1,69 @@ + + + Debug + AnyCPU + 8.0.50727 + 2.0 + {6EC063BF-E500-4E86-902D-04349485E3AD} + Exe + Properties + SSProtector + SSProtector + protB.ico + + + true + full + false + ..\..\READY\TOOLS\ + TRACE;DEBUG + prompt + 4 + + + true + ..\..\READY\TOOLS\ + TRACE;DEBUG + full + AnyCPU + prompt + + + + False + ..\..\READY\MAIN_DLLs\dkxce.Route.Classes.dll + + + False + ..\..\READY\Service\dkxce.Route.ServiceSolver.exe + + + False + ..\..\READY\3RD_PARTY_DLLs\ICSharpCode.SharpZipLib.dll + + + + + + + False + ..\..\READY\MAIN_DLLs\XMLSaved.dll + + + + + + + + + + + + + \ No newline at end of file diff --git a/SOLVER/SSProtector/SSProtector.csproj.user b/SOLVER/SSProtector/SSProtector.csproj.user new file mode 100644 index 0000000..2d1d105 --- /dev/null +++ b/SOLVER/SSProtector/SSProtector.csproj.user @@ -0,0 +1,7 @@ + + + Project + + + + \ No newline at end of file diff --git a/SOLVER/SSProtector/SYSID.cs b/SOLVER/SSProtector/SYSID.cs new file mode 100644 index 0000000..4b9803b --- /dev/null +++ b/SOLVER/SSProtector/SYSID.cs @@ -0,0 +1,327 @@ +using System; +using System.Collections.Generic; +using System.Text; +using System.IO; + +using System.Management; +using System.Security.Cryptography; +using System.Security; + +namespace System +{ + internal static class SYSID + { + private static byte[] _salt = Encoding.ASCII.GetBytes("a25052017pxko7"); + + public static string _BIOSID + { + get + { + ManagementObjectSearcher mos = new ManagementObjectSearcher("SELECT * FROM Win32_BIOS"); + ManagementObjectCollection moc = mos.Get(); + string motherBoard = ""; + foreach (ManagementObject mo in moc) + motherBoard = (string)mo["SerialNumber"]; + return motherBoard; + } + } + + public static string _MotherBoardID + { + get + { + ManagementObjectSearcher mos = new ManagementObjectSearcher("SELECT * FROM Win32_BaseBoard"); + ManagementObjectCollection moc = mos.Get(); + string motherBoard = ""; + foreach (ManagementObject mo in moc) + motherBoard = (string)mo["SerialNumber"]; + return motherBoard; + } + } + + public static string _ProcessorID + { + get + { + ManagementObjectSearcher mos = new ManagementObjectSearcher("SELECT * FROM Win32_processor"); + ManagementObjectCollection moc = mos.Get(); + string motherBoard = ""; + foreach (ManagementObject mo in moc) + motherBoard = (string)mo["ProcessorID"]; + return motherBoard; + } + } + + public static string _DiskCID + { + get + { + ManagementObject dsk = new ManagementObject("win32_logicaldisk.deviceid=\"C:\""); + dsk.Get(); + return dsk["VolumeSerialNumber"].ToString(); + } + } + + public static string _CurrentDiskID + { + get + { + ManagementObject dsk = new ManagementObject("win32_logicaldisk.deviceid=\"" + AppDomain.CurrentDomain.BaseDirectory.Substring(0, 1) + ":\""); + dsk.Get(); + return dsk["VolumeSerialNumber"].ToString(); + } + } + + public static bool _IsVirtual + { + get + { + { + ManagementObjectSearcher mos = new ManagementObjectSearcher("SELECT * FROM Win32_processor"); + ManagementObjectCollection moc = mos.Get(); + string val = ""; + foreach (ManagementObject mo in moc) + val = (string)mo["Manufacturer"]; + if (val.Contains("VBoxVBoxVBox")) return true; + if (val.Contains("VMwareVMware")) return true; + if (val.Contains("prl hyperv")) return true; + }; + { + ManagementObjectSearcher mos = new ManagementObjectSearcher("SELECT * FROM Win32_BaseBoard"); + ManagementObjectCollection moc = mos.Get(); + string val = ""; + foreach (ManagementObject mo in moc) + val = (string)mo["Manufacturer"]; + if (val.Contains("Microsoft Corporation")) return true; + }; + { + ManagementObjectSearcher mos = new ManagementObjectSearcher("SELECT * FROM Win32_DiskDrive"); + ManagementObjectCollection moc = mos.Get(); + string val = ""; + foreach (ManagementObject mo in moc) + val = (string)mo["PNPDeviceID"]; + if (val.Contains("VBOX_HARDDISK")) return true; + if (val.Contains("VEN_VMWARE")) return true; + }; + return false; + } + } + + public static string GetSysID() { return SYSID.GetSystemID(true, true, false, true, false); } + + public static string GetSystemID(bool BIOS, bool MotherBoard, bool CPU, bool DiskC, bool CurrDisk) + { + string code = ""; + try + { + if (BIOS) code += "/" + _BIOSID; + } + catch { }; + try + { + if (MotherBoard) code += "/" + _MotherBoardID; + } + catch { }; + try + { + if (CPU) code += "/" + _ProcessorID; + } + catch { }; + try + { + if (DiskC) code += "/" + _DiskCID; + } + catch { }; + try + { + if (CurrDisk) code += "/" + _CurrentDiskID; + } + catch { }; + + int codeType = (BIOS ? 1 : 0) + (MotherBoard ? 2 : 0) + (CPU ? 4 : 0) + (DiskC ? 8 : 0) + (CurrDisk ? 0x10 : 0); + + //return codeType.ToString("X2") + "-" + + + return GetHash(code); + } + + private static string GetHash(string s) + { + MD5 sec = new MD5CryptoServiceProvider(); + ASCIIEncoding enc = new ASCIIEncoding(); + byte[] bt = enc.GetBytes(s); + return GetHexString(sec.ComputeHash(bt)); + } + + private static string GetHexString(byte[] bt) + { + string s = string.Empty; + for (int i = 0; i < bt.Length; i++) + { + byte b = bt[i]; + int n, n1, n2; + n = (int)b; + n1 = n & 15; + n2 = (n >> 4) & 15; + if (n2 > 9) + s += ((char)(n2 - 10 + (int)'A')).ToString(); + else + s += n2.ToString(); + if (n1 > 9) + s += ((char)(n1 - 10 + (int)'A')).ToString(); + else + s += n1.ToString(); + if ((i + 1) != bt.Length && (i + 1) % 2 == 0) s += "-"; + } + return s; + } + + public static string Encrypt(string plainText, string sharedSecret) + { + if (string.IsNullOrEmpty(plainText)) + throw new ArgumentNullException("plainText"); + if (string.IsNullOrEmpty(sharedSecret)) + throw new ArgumentNullException("sharedSecret"); + + string outStr = null; // Encrypted string to return + RijndaelManaged aesAlg = null; // RijndaelManaged object used to encrypt the data. + + try + { + // generate the key from the shared secret and the salt + Rfc2898DeriveBytes key = new Rfc2898DeriveBytes(sharedSecret, _salt); + + // Create a RijndaelManaged object + aesAlg = new RijndaelManaged(); + aesAlg.Key = key.GetBytes(aesAlg.KeySize / 8); + + // Create a decrytor to perform the stream transform. + ICryptoTransform encryptor = aesAlg.CreateEncryptor(aesAlg.Key, aesAlg.IV); + + // Create the streams used for encryption. + using (MemoryStream msEncrypt = new MemoryStream()) + { + // prepend the IV + msEncrypt.Write(BitConverter.GetBytes(aesAlg.IV.Length), 0, sizeof(int)); + msEncrypt.Write(aesAlg.IV, 0, aesAlg.IV.Length); + using (CryptoStream csEncrypt = new CryptoStream(msEncrypt, encryptor, CryptoStreamMode.Write)) + { + using (StreamWriter swEncrypt = new StreamWriter(csEncrypt)) + { + //Write all data to the stream. + swEncrypt.Write(plainText); + } + } + outStr = Convert.ToBase64String(msEncrypt.ToArray()); + } + } + finally + { + // Clear the RijndaelManaged object. + if (aesAlg != null) + aesAlg.Clear(); + } + + // Return the encrypted bytes from the memory stream. + return outStr; + } + + public static string Decrypt(string cipherText, string sharedSecret) + { + if (string.IsNullOrEmpty(cipherText)) + throw new ArgumentNullException("cipherText"); + if (string.IsNullOrEmpty(sharedSecret)) + throw new ArgumentNullException("sharedSecret"); + + // Declare the RijndaelManaged object + // used to decrypt the data. + RijndaelManaged aesAlg = null; + + // Declare the string used to hold + // the decrypted text. + string plaintext = null; + + try + { + // generate the key from the shared secret and the salt + Rfc2898DeriveBytes key = new Rfc2898DeriveBytes(sharedSecret, _salt); + + // Create the streams used for decryption. + byte[] bytes = Convert.FromBase64String(cipherText); + using (MemoryStream msDecrypt = new MemoryStream(bytes)) + { + // Create a RijndaelManaged object + // with the specified key and IV. + aesAlg = new RijndaelManaged(); + aesAlg.Key = key.GetBytes(aesAlg.KeySize / 8); + // Get the initialization vector from the encrypted stream + aesAlg.IV = ReadByteArray(msDecrypt); + // Create a decrytor to perform the stream transform. + ICryptoTransform decryptor = aesAlg.CreateDecryptor(aesAlg.Key, aesAlg.IV); + using (CryptoStream csDecrypt = new CryptoStream(msDecrypt, decryptor, CryptoStreamMode.Read)) + { + using (StreamReader srDecrypt = new StreamReader(csDecrypt)) + + // Read the decrypted bytes from the decrypting stream + // and place them in a string. + plaintext = srDecrypt.ReadToEnd(); + } + } + } + catch + { + plaintext = "DECRYPT_ERROR"; + } + finally + { + // Clear the RijndaelManaged object. + if (aesAlg != null) + aesAlg.Clear(); + } + + return plaintext; + } + + private static byte[] ReadByteArray(System.IO.Stream s) + { + byte[] rawLength = new byte[sizeof(int)]; + if (s.Read(rawLength, 0, rawLength.Length) != rawLength.Length) + { + throw new SystemException("Stream did not contain properly formatted byte array"); + } + + byte[] buffer = new byte[BitConverter.ToInt32(rawLength, 0)]; + if (s.Read(buffer, 0, buffer.Length) != buffer.Length) + { + throw new SystemException("Did not read byte array properly"); + } + + return buffer; + } + + //public static void SaveFileDate(string filename, string cryptData) + //{ + // cryptData += '\0'; + // byte[] toSave = System.Text.Encoding.ASCII.GetBytes(cryptData); + // FileStream fs = new FileStream(filename, FileMode.Create, FileAccess.Write); + // fs.Write(filedata, 0, filedata.Length); + // fs.Position = 0x0200; + // fs.Write(toSave, 0, toSave.Length); + // fs.Close(); + //} + + //public static string LoadFileDate(string filename) + //{ + // FileStream fs = new FileStream(filename, FileMode.Open, FileAccess.Read); + // byte[] rb = new byte[1024]; + // int rt = 0; + // int rc = 0; + // fs.Position = 0x0200; + // while ((rc = fs.ReadByte()) > 0) rb[rt++] = (byte)rc; + // fs.Close(); + // return System.Text.Encoding.ASCII.GetString(rb, 0, rt); + //} + + //internal static byte[] filedata = new byte[] { 77, 90, 144, 0, 3, 0, 0, 0, 4, 0, 0, 0, 255, 255, 0, 0, 184, 0, 0, 0, 0, 0, 0, 0, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 0, 0, 0, 14, 31, 186, 14, 0, 180, 9, 205, 33, 184, 1, 76, 205, 33, 84, 104, 105, 115, 32, 112, 114, 111, 103, 114, 97, 109, 32, 99, 97, 110, 110, 111, 116, 32, 98, 101, 32, 114, 117, 110, 32, 105, 110, 32, 68, 79, 83, 32, 109, 111, 100, 101, 46, 13, 13, 10, 36, 0, 0, 0, 0, 0, 0, 0, 80, 69, 0, 0, 76, 1, 3, 0, 124, 13, 39, 89, 0, 0, 0, 0, 0, 0, 0, 0, 224, 0, 2, 33, 11, 1, 8, 0, 0, 16, 0, 0, 0, 32, 0, 0, 0, 0, 0, 0, 110, 35, 0, 0, 0, 32, 0, 0, 0, 64, 0, 0, 0, 0, 64, 0, 0, 32, 0, 0, 0, 16, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 128, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 3, 0, 64, 133, 0, 0, 16, 0, 0, 16, 0, 0, 0, 0, 16, 0, 0, 16, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 20, 35, 0, 0, 87, 0, 0, 0, 0, 64, 0, 0, 160, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 96, 0, 0, 12, 0, 0, 0, 148, 34, 0, 0, 28, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 32, 0, 0, 72, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 46, 116, 101, 120, 116, 0, 0, 0, 116, 3, 0, 0, 0, 32, 0, 0, 0, 16, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 0, 0, 96, 46, 114, 115, 114, 99, 0, 0, 0, 160, 2, 0, 0, 0, 64, 0, 0, 0, 16, 0, 0, 0, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 0, 0, 64, 46, 114, 101, 108, 111, 99, 0, 0, 12, 0, 0, 0, 0, 96, 0, 0, 0, 16, 0, 0, 0, 48, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 0, 0, 66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 80, 35, 0, 0, 0, 0, 0, 0, 72, 0, 0, 0, 2, 0, 5, 0, 80, 32, 0, 0, 68, 2, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66, 83, 74, 66, 1, 0, 1, 0, 0, 0, 0, 0, 12, 0, 0, 0, 118, 50, 46, 48, 46, 53, 48, 55, 50, 55, 0, 0, 0, 0, 5, 0, 108, 0, 0, 0, 180, 0, 0, 0, 35, 126, 0, 0, 32, 1, 0, 0, 192, 0, 0, 0, 35, 83, 116, 114, 105, 110, 103, 115, 0, 0, 0, 0, 224, 1, 0, 0, 8, 0, 0, 0, 35, 85, 83, 0, 232, 1, 0, 0, 16, 0, 0, 0, 35, 71, 85, 73, 68, 0, 0, 0, 248, 1, 0, 0, 76, 0, 0, 0, 35, 66, 108, 111, 98, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 1, 7, 20, 0, 0, 9, 0, 0, 0, 0, 250, 1, 51, 0, 22, 0, 0, 1, 0, 0, 0, 4, 0, 0, 0, 1, 0, 0, 0, 3, 0, 0, 0, 3, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 10, 0, 1, 0, 0, 0, 0, 0, 6, 0, 49, 0, 30, 0, 7, 0, 69, 0, 0, 0, 6, 0, 122, 0, 90, 0, 6, 0, 154, 0, 90, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 1, 0, 9, 0, 84, 0, 10, 0, 25, 0, 84, 0, 16, 0, 33, 0, 84, 0, 21, 0, 46, 0, 11, 0, 25, 0, 46, 0, 19, 0, 34, 0, 46, 0, 27, 0, 43, 0, 4, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 184, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 21, 0, 0, 0, 0, 0, 0, 0, 0, 60, 77, 111, 100, 117, 108, 101, 62, 0, 98, 105, 111, 115, 105, 100, 46, 100, 108, 108, 0, 109, 115, 99, 111, 114, 108, 105, 98, 0, 83, 121, 115, 116, 101, 109, 46, 68, 105, 97, 103, 110, 111, 115, 116, 105, 99, 115, 0, 68, 101, 98, 117, 103, 103, 97, 98, 108, 101, 65, 116, 116, 114, 105, 98, 117, 116, 101, 0, 68, 101, 98, 117, 103, 103, 105, 110, 103, 77, 111, 100, 101, 115, 0, 46, 99, 116, 111, 114, 0, 83, 121, 115, 116, 101, 109, 46, 82, 117, 110, 116, 105, 109, 101, 46, 67, 111, 109, 112, 105, 108, 101, 114, 83, 101, 114, 118, 105, 99, 101, 115, 0, 67, 111, 109, 112, 105, 108, 97, 116, 105, 111, 110, 82, 101, 108, 97, 120, 97, 116, 105, 111, 110, 115, 65, 116, 116, 114, 105, 98, 117, 116, 101, 0, 82, 117, 110, 116, 105, 109, 101, 67, 111, 109, 112, 97, 116, 105, 98, 105, 108, 105, 116, 121, 65, 116, 116, 114, 105, 98, 117, 116, 101, 0, 98, 105, 111, 115, 105, 100, 0, 0, 0, 3, 32, 0, 0, 0, 0, 0, 223, 30, 56, 46, 119, 46, 132, 70, 148, 33, 45, 14, 215, 192, 200, 249, 0, 8, 183, 122, 92, 86, 25, 52, 224, 137, 5, 32, 1, 1, 17, 9, 4, 32, 1, 1, 8, 3, 32, 0, 1, 8, 1, 0, 7, 1, 0, 0, 0, 0, 8, 1, 0, 8, 0, 0, 0, 0, 0, 30, 1, 0, 1, 0, 84, 2, 22, 87, 114, 97, 112, 78, 111, 110, 69, 120, 99, 101, 112, 116, 105, 111, 110, 84, 104, 114, 111, 119, 115, 1, 0, 0, 0, 0, 0, 0, 124, 13, 39, 89, 0, 0, 0, 0, 2, 0, 0, 0, 97, 0, 0, 0, 176, 34, 0, 0, 176, 18, 0, 0, 82, 83, 68, 83, 179, 188, 25, 25, 52, 193, 211, 78, 185, 209, 210, 17, 217, 107, 18, 75, 2, 0, 0, 0, 67, 58, 92, 68, 111, 119, 110, 108, 111, 97, 100, 115, 92, 67, 68, 45, 82, 69, 67, 92, 84, 69, 83, 84, 92, 67, 111, 110, 115, 111, 108, 101, 65, 112, 112, 108, 105, 99, 97, 116, 105, 111, 110, 49, 92, 98, 105, 111, 115, 105, 100, 92, 111, 98, 106, 92, 68, 101, 98, 117, 103, 92, 98, 105, 111, 115, 105, 100, 46, 112, 100, 98, 0, 0, 0, 0, 60, 35, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 94, 35, 0, 0, 0, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 80, 35, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 95, 67, 111, 114, 68, 108, 108, 77, 97, 105, 110, 0, 109, 115, 99, 111, 114, 101, 101, 46, 100, 108, 108, 0, 0, 0, 0, 0, 255, 37, 0, 32, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 16, 0, 0, 0, 24, 0, 0, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 48, 0, 0, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 72, 0, 0, 0, 88, 64, 0, 0, 68, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 2, 52, 0, 0, 0, 86, 0, 83, 0, 95, 0, 86, 0, 69, 0, 82, 0, 83, 0, 73, 0, 79, 0, 78, 0, 95, 0, 73, 0, 78, 0, 70, 0, 79, 0, 0, 0, 0, 0, 189, 4, 239, 254, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 0, 0, 0, 1, 0, 86, 0, 97, 0, 114, 0, 70, 0, 105, 0, 108, 0, 101, 0, 73, 0, 110, 0, 102, 0, 111, 0, 0, 0, 0, 0, 36, 0, 4, 0, 0, 0, 84, 0, 114, 0, 97, 0, 110, 0, 115, 0, 108, 0, 97, 0, 116, 0, 105, 0, 111, 0, 110, 0, 0, 0, 0, 0, 0, 0, 176, 4, 164, 1, 0, 0, 1, 0, 83, 0, 116, 0, 114, 0, 105, 0, 110, 0, 103, 0, 70, 0, 105, 0, 108, 0, 101, 0, 73, 0, 110, 0, 102, 0, 111, 0, 0, 0, 128, 1, 0, 0, 1, 0, 48, 0, 48, 0, 48, 0, 48, 0, 48, 0, 52, 0, 98, 0, 48, 0, 0, 0, 44, 0, 2, 0, 1, 0, 70, 0, 105, 0, 108, 0, 101, 0, 68, 0, 101, 0, 115, 0, 99, 0, 114, 0, 105, 0, 112, 0, 116, 0, 105, 0, 111, 0, 110, 0, 0, 0, 0, 0, 32, 0, 0, 0, 48, 0, 8, 0, 1, 0, 70, 0, 105, 0, 108, 0, 101, 0, 86, 0, 101, 0, 114, 0, 115, 0, 105, 0, 111, 0, 110, 0, 0, 0, 0, 0, 48, 0, 46, 0, 48, 0, 46, 0, 48, 0, 46, 0, 48, 0, 0, 0, 56, 0, 11, 0, 1, 0, 73, 0, 110, 0, 116, 0, 101, 0, 114, 0, 110, 0, 97, 0, 108, 0, 78, 0, 97, 0, 109, 0, 101, 0, 0, 0, 98, 0, 105, 0, 111, 0, 115, 0, 105, 0, 100, 0, 46, 0, 100, 0, 108, 0, 108, 0, 0, 0, 0, 0, 40, 0, 2, 0, 1, 0, 76, 0, 101, 0, 103, 0, 97, 0, 108, 0, 67, 0, 111, 0, 112, 0, 121, 0, 114, 0, 105, 0, 103, 0, 104, 0, 116, 0, 0, 0, 32, 0, 0, 0, 64, 0, 11, 0, 1, 0, 79, 0, 114, 0, 105, 0, 103, 0, 105, 0, 110, 0, 97, 0, 108, 0, 70, 0, 105, 0, 108, 0, 101, 0, 110, 0, 97, 0, 109, 0, 101, 0, 0, 0, 98, 0, 105, 0, 111, 0, 115, 0, 105, 0, 100, 0, 46, 0, 100, 0, 108, 0, 108, 0, 0, 0, 0, 0, 52, 0, 8, 0, 1, 0, 80, 0, 114, 0, 111, 0, 100, 0, 117, 0, 99, 0, 116, 0, 86, 0, 101, 0, 114, 0, 115, 0, 105, 0, 111, 0, 110, 0, 0, 0, 48, 0, 46, 0, 48, 0, 46, 0, 48, 0, 46, 0, 48, 0, 0, 0, 56, 0, 8, 0, 1, 0, 65, 0, 115, 0, 115, 0, 101, 0, 109, 0, 98, 0, 108, 0, 121, 0, 32, 0, 86, 0, 101, 0, 114, 0, 115, 0, 105, 0, 111, 0, 110, 0, 0, 0, 48, 0, 46, 0, 48, 0, 46, 0, 48, 0, 46, 0, 48, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 0, 0, 12, 0, 0, 0, 112, 51, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }; + } +} diff --git a/SOLVER/SSProtector/obj/Debug/ResolveAssemblyReference.cache b/SOLVER/SSProtector/obj/Debug/ResolveAssemblyReference.cache new file mode 100644 index 0000000000000000000000000000000000000000..48805477ed5fe63f62835a0d4f8056ec6163682c GIT binary patch literal 33757 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 YPkP`<4?O9CCq3|_2cGo6zp@AZ50x6VPXGV_ literal 0 HcmV?d00001 diff --git a/SOLVER/SSProtector/obj/Debug/SSProtector.pdb b/SOLVER/SSProtector/obj/Debug/SSProtector.pdb new file mode 100644 index 0000000000000000000000000000000000000000..b18ce40e1098fa624207dc405250d5cbf674182f GIT binary patch literal 28160 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 r^UWAgqQ|^U+K`+B=Yl=A5+M(a;cF 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 T4S^a0H3Vu1)DZZ;iNJpX&Zlnn literal 0 HcmV?d00001 diff --git a/SOLVER/SSProtector/obj/Debug/nmsRouteLicenseFileTool.pdb b/SOLVER/SSProtector/obj/Debug/nmsRouteLicenseFileTool.pdb new file mode 100644 index 0000000000000000000000000000000000000000..443294ed9724ff4ae6d9e72e688ba4188d3d1ebf GIT binary patch literal 30208 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 L+AVOBS>XQw-iiMj literal 0 HcmV?d00001 diff --git a/SOLVER/SSProtector/obj/Release/ResolveAssemblyReference.cache b/SOLVER/SSProtector/obj/Release/ResolveAssemblyReference.cache new file mode 100644 index 0000000000000000000000000000000000000000..53a67c0523e0b7a04cb9fec988f685dcbf4a1f46 GIT binary patch literal 33725 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 N&`gTn&@Jh}{{ue7?7{#5 literal 0 HcmV?d00001 diff --git a/SOLVER/SSProtector/obj/Release/SSProtector.exe b/SOLVER/SSProtector/obj/Release/SSProtector.exe new file mode 100644 index 0000000000000000000000000000000000000000..14450ed099214c0a76251d26f2dea5f2d33caf8d GIT binary patch literal 114688 zcmeEP31Cgv)?PQWL{c#%W>K_JrKYyp*MXX=NG0gtRYNX9a&LN*nA#F_poUV^)Cr}i zxn>bT%tV5iMa>t z#)_wicp+$-$STDAHCD%>4=E@PsYY2z*x6PsGMA485x3NOW|^ zx$4`iNF<<-jS;*28Y8EU!y0EtMfO$DXVuo?{Lh1W&#?IJ@9qfP9f7+eaCZdmj=KJ6f)g_UQMpcWCiDMM=h2jfR8w~p;EE% zQn*sTd97A#4ixHzBNK$2pES4Wm6u`a`9EAV`BgC zQYG0wHS85|VQB9c?C@3KZk2HKv{%M4(5F~Pu`#jsD$EaK7jgFDXjHf4EAp|2v4(n< z<9HUJ6f9MWjmE=R0*i$>E@7Z%6bp6yL&aqsXbI=#96l;8?Le?swW9|Ez?V04u^}%$MFEJ_wk(?elIE) zuhm#^Wq_}ba|ph?(IzrOU%dHRm2F-xeh=XOrRsW0H^jIBa5FmfV&gx&1AJ?jk$c2Z z2R98zzJEB}R{s9A9ycphFQSsV@{s~piVtsypTpX-Tc2(*eS0MLNa!{osaFz?z2O=| zWbIa^q5`Hy7DnGI{65?>g=FwRWsmUtal$4l)b$V>VsG}@(HOT$geS@0-^X4PQGnvS z;^J#ZUH?+vwJHaD+iM}2gi_$>aNq*_gUleX#Zd~r_b=rW>{B}@w{);~X%HJv{7_N{ zC2~ysN_o|iU@tUi0atm*z4FlWf~yPmWz@e>U$)(8U%Wj3!f`1DjOgBj5CujR(RAWN z7)xMOmqY5~=wjZ@UJn@owZs>E=Os;@*9=948zLhl)LtL;9I4DD1KhefMJEt$;>$ij z`rYY(Y&5%g2ZZ7{#)}%DgA~q+j6zF!HF^o%@N-;sTlSPHE8*qtx_eQEuHP|T{i&|s z=e7%c*F?zMC_&GMZE%1>LgEK84HV>&L4|UM_(nE6P zp+Jk`Q4fi>JTz8MSAe{`i0AQBbcxYT!0ZF40*loS_Hi7-UBW>wK8nQrCD$7QC>PZ| z^H;&uH&x*j@6t*!H&wjzSMhgKC8$6%0XNt2sO=e2%M$9TqOvb|skrOXVecn*5Bh z5Ik0}BsK(n`zJn(V}P%Rnq!Om_}L%9dH6lJV_+>Q23g6uRl;5x6uuk&)b4$~)evpRu@%l;j=#eWQ|x_NOQ$1#$Ex}QGJqAFAk z^z8AcHBIv=<%02lj_Qk{^aZ_GKvo{I zUIKTSJiJ^UI%B3^moddmett~8u4?kLm)wW($J&qU_!kQO+y1MU+?bv$eUg;j28QQ)zbua9$_eM|Xa zoT>Ct7I?^9@&C#k+fU`eoo2eDj5)2RMIMul*ChbMYw(}V^JfeBrFcyi~vL;Z=g>|cobq)Il#j=#Mh{d*sMIyS=m>KtWHXWcU(la z5-};{5p-XkiG21M3q=@yz+L**uT!_q!*w664-rGHFb>CMP&}#)5($Ge&x5$G7MbLT zwe?J74XzIsXL-j+DGs9qr&6tD$JSsasfhD9Pn0->wQF+M8Bt&}mzYZ%y!-g|!|_K{}N5OwaiRI>QUM9VN7 zm#X78mYqmnQ^(>S%&(!2jn(mGbxcyn(dsx~9k;9Fj~;m*Pm3?Q=Od4JhIsl&Cv_a) z$$L#u$5c<=agR!ScrhKQjv?w8;nmCwcB2>T4^zkKUZaq+QKh%5V;yg{+}fLU-csrD zDm?{9f64St_4b$ZI8FnDfCA(pALc~h=p%_fyz015I*P9P@LpcNOjlONTD~l;tBxhcD z9y-1^@+??{FCle+jyG@vG2wRs#*#NsFD<2TQ6xyBONo($S7Zc^F?b%L zFhz!V#^N~AvzknoX`VJ5zwmq-Qgnmon>cPm=@L2YITXilJ>Nyn@1CV)HLe|rv8d`b z0mlctCgb?1*GG~qFM3VKvAfr7rEEe`5 z*fQVyM`&P7*F;VfjvhWfmU@<|KE*AMS(^Ejv^23q`;Y z;=vKvU^(FT4@(_sD#JYLfLa4^tRNL|tR~HIY@m*RlQu}dENgIVBNK3pRQY}6anCyP zx;%$tchy3oH1!-NwJhI&&ba5rTasj%>;y7ZEe$NqEuAe^OOj=c-rSfDRR zGj)tq$5+)cRvr6WB0!(MplJ`-9F!r&aOMGdPz*=(7suk@r2gP)Pw`3-DTBOn$kl%o z5@wn?7J)vApKIRlk_s8bzJi_jd!ns9COOXflte~GIP6K*?n!n>9czE9;EdaoT=OOJ z#YoJ2kpmKwtnm_`*xl}ki|r=uyYL`L_uwy_Rq5gTWfC_AIb z*nvp)a#*eH?6#Mz4tulMp0P=ZQinH`u8GlcNz&7r)V1p~t=sb^D&5we)XVC4#vbj6 zF|*LE?$*RayTi^g+2OF-l9*>^wNC65>qttDj+2(wB)#h>Lb_FSVlNe2 z`|A_FG`Dqk3`j_lW>!7cYu9PrUQoe`vFKopj(KK4lC_D$5j{Z6u6E7e&91Ip>}qze zYyPfvz0ob>E*-2r;xLS{cAGRwOti*#i&Mkb$?8Z%UXvu~B;Asetj@xl3e0wrZAr25 z);g_iNf_mXNUNi7EJjRPCdbCyXr-w=zEf;sY_~Y;jXd+VO_Sr2k{xaeq8!mN*7#^g zA2-+769zb9d-h7Yxd_7%lib}+0s4>-Z5wd&6;18799nl<(n~R%S6T3TN6WkX@ z#U{BvlQAgGVxxQ7?1@RS-4lUsx8$BZqw_two(H85+<>tvFqG^lNZ8>VOFct%uY)x% zy1z;#-souu9Ru}%NwM8x<6@Is9y8hj-4f53Xa{$6cEl!GpNq9w6>+JAL5=o=uFYQq z-Qrr-?jD^aJib507y7R;sttjr)0}I(>FpjEvlgOs6 zTa(4eGl}}63e(aw&YozMzR_{XR>+N{UJ_yNXO4PHXw!J=fof32Aja0V9(L7cYg^xF zM{Kk$$taL!_GCaQty|a~@zF^jw!X13RtKbxF^qM(D+%*Ngd?_Zbdt4od_tTx9x_5T z-^`j69UGVU)a!NY)oOIrq zO$?Y$2raEPE2z`z!cd*~EKvgztkSh>BpdIpghXpwY!Y)R{+_JgNUB$lw*NNe|G zFw%fJO)0=RaV7K`AZ?pHte+c<>m&|Em`+mVM9?IzryULSidPsz&Z^k~4M;Z-b$kMO zuvfGL7$h~QF9~tzqN4XiWLjfzdk2QGbz-~ZxVZKXy?zr%PmH21iFwWYceg5mB^`Qn zuixmgM$N1sN2|^k9b$XiVxp~a`ryWZ58^>24p5M@QygNG9-q-5Dgn^nIK%>OitSXB{ zNgU3Y7bedcxi-+473WbXWx14!$9aeB0 z=!w>R>w+w>=u}LPk*WvfAH>ic;}(VcJ%G>xMATl|BGp+z&_L=-SG3R?x$s|=)5$7U zfz=Mg7LP?!5|#Yz_S=e9WcLg}kH(cTcW`Y2>XTGB28oJzBsAitJR&bo_jBn#39Kj1 zbs~#FDiLf`2lvK2t@5on#>kU!b~FXq-z!q16RwF zJwQWYcuKNff;vVcCl)E&9U##RS8xoQp_N!AScpVBIDVSBjHyDR0-vD0yZ|~PZFfM8 zW}v4?7@$(76R58pO86X|RcUijD^^H7Ym22+0-h!s?b|?~6T*4DIQH%!aYx7K|;f=w4-lnY7tr%MTwODP5&_!o_u(uCthA!)X)-<3J;>fd}XsT2)Pd>H)u zFygw96px}O{egfTDg26OK4_`iy?=|fbAOwO1o~I!CpkR&%dGN;)EEQOSRMnuMARn<*@-A7-(+?H>#KSAhVhQ5G z!yAX-CQSO_A`33^@CXX>^Yy_+K|yTD1NV`VFXBEyeqo-Lpy23WD^C0n{CS-}i(}DF zCGQ|#RH)?b=U2?vyX4>f{3>~SpuNDrKp*jBbI7g~Lin$Lcs8_pTU(PIv_S`j$+Y zh|-{vDYFnh_VDrbVA31y`}v`sM^L^xC}bTkbj8Dm{jP+)Azmd@R+mg!f`{<%2@3En z7UYNLKm||qQjH@k`f<1_d3%LPCGTQkXy-65_U7RF1>o6B7DHBW$^}*{Su7N-luX%O zGG#k*OQswznR2#d%6CB+6VwkX=j)F`RM-w=Scobp|24=1qllsN^Ya0sh>Q7p@h%w5 zdo1E#zh0es_3G4rxK4e6vrMW-H>}^o8q+Phc8~529c z|5RB0y7h5&35x`{I9?!AEpp3iMFv}BVAe-jX<5s%hh?qJ9u<~7EPF`y(5%H->yWuL zYfaXwu&k9?i?c^$t;!ynJu)mSEqiDfveUBGBPT^wV&zrY?}s5;9F{#KYdP|lB4*FBs^>-mPF4IW)BPRg5z-l&Hyk`pRSX^&QMrCz#F;)7PJM;2e(pk(v$Jy72E@hxF}u@~Y)h`9*&Jz^|X zQ=3Y`0=0x8_CwqVG4{?$1Y$%kKj=||p*y+Br-qf{CZ88i*43~4?ci)qA^EEc$=_B; z{-Hwhzb+*IS|Ry<9ISjly(0F;7x?M<;mD7GqBw^j7{6<+&CTRt8{A*8^+1W{eGe>c=K;^jgnrrt&%| zBf15QXZjvn!+fU6&0lrlRZ+^orXQ1z0;d~8)mZG+pXMR@L?fS0gr4Y8!Iq*_ow_io z^?wavkk`faAHiv1QEn0}2IJl~w8BkO6}_JFYUtI}>u+Aq!JcdC)x_%=uex4OBDcQR z<6e!B_bAR=BlV0|8=O6bI7}W#`P0a2tm?6TBd_+ze-d@Wq>0zVD5;M;nAGw#>M-@V zDtiLQ#$K%unxZA%Mc_!N>g-zrp4$c&Lp#LmCx3MK(B;)f!sI1958W06QO5HpP|GYG zD2*{DbYC!sEB|(!VYelIjjO8a`};XvsWKexV22T|?WwM$ zqbmX9Lkj2#%M2`}P|cqghJ7kw|Ma+p;ofx-VEe+=#ph^m+?UkH=P>DyXF6K9dY(oK z2YrNN;2z`%-xv+-x+-M+pHSnU|GI)G6pjJ0YXZEuK0p_*?(VwX>oIpI9(onAX+vY1 z$BiGEodLg62@9oS(gG=!v_wh|SSD5aFOgCM*C4%0N)1{oW!_vZr3RCy%|K zCQpn@lU{F)k#6sdmzcN4O1I$?rN?`d#X9;E={0Jq*v3wiz7sx?mczf0=I<(v zd!^!xY^k*9fK*w2SgKCnBM(jAEl+1~>MuJakF7i;4b~iyr&b@4#vkvHHZylglLeX5`HLMAH9J#Yn4c+; zUuH{}1zGaa>Vp!o?x^&dkuC{yGQ_rYm%P4wr*vDEBd@MHAdWQ$q|t_4d3x(fiQar% z8gI>$);mth;LUk5@Zec_>(jY1bjCt?cjf{aGV3cD_Qf(8J8!8>TChw$Uc6FfELtWr zm#&nVU#*g_Rddvi^w7UB5+!Y&s$% z5Z>N#T*mCml@BuZ%e0Iv`EbV(`FQsUS+Hq`tlG3m(l%|D)tfV9-ImR=bjvPTzHPUx z-LXT~A*|Y-DQUZQ$;_QOlD0cbR^=R*v?Ir5#I92^dfzFTy7!dK-*;LT9XTV551x{* z5UD8vT4UQ$w1h!Yo~13y<0YC?v`!4cgfbQJ(95}OVao3mrYq& zvN=0jHtszrTlVG1rUM6L+ukh6%tqLsEjw~@WEb-G962bv4;_*{hmXnbW5*vw5y~mHs0fa-jxsrG4glx(^Bblep$-cZ(axgDX_MSc~IcLtvu~VmH@A+@! z@R@Jrz}Mf(;jb@B?swnI$#ZAroAYPnx{BZpS4H{Ojc5hf%Sd}W3 zDpd?CqC2A>e(!_H^ETnPe(L1OlP6A|GG)VHY6xzBqZ^G+-?VAjvSo`AaKOJ!nK{W1 zx~(kW(59?=P&>u5BGAjTzymaXGJD?Q+^f#&7^4%a`7>Ag1-A0_^7PFA0Ku<(lztR_ z*E^3J=og$mab;HX7A1;#dHQnBbN))UdnGC7GCJ?<4co`RyhELvw<^K*i#sdBFW#m{ zmmX=qu)5iM^$bVPU+LexU5P+nFE3AHy5vCb#=daE{gT(%8Rh>F&=( zwMF$}zMh^Iwc{DhmuwgFO3%2SJz`?owHk8z$8Xsab;;!`1D}hDYK3(ijE}Sa{cU=@ z(xYe39zCLB+O=yQpL*%?6%5jqD_1UGn)w`ZTeJvN{WscwfX~`9u1Ak(G~cF8^A?|7 zzJ$uS;?laVF+HQ&va+I;u^ZHmzEJVLL(pqhkB)AK>ZsqcMe~=^aKYst-|pJGM^rmh58?yholyMlZx_>!osTkF zZ;4;?<{i^6UHWO&tG#>2pph0Wnsdp@iv%~VjjA3U9UaxK6@I84)H1Mn;7gZ(TGyvf zLQjkU`V&+F7x2d!Zo%FJwk#1I1_KmCZ`wI5gZXxFZ7l(n^Q6TNvH+XGc}zJ(f^ zpuiHXS_OV_?We0hU;PEYYnO+2?-tX_x2&@|UNqJRlAS^8ts(-4Uiy!Kjo{AliH{s*a8pR zD&n4qZ?5T;Q5((w{`+sg=r4l0UQ`b~2@DKs5z#7e%|G<&sx~gT{>wtwnnwC@ToBZv zZEL?z%w3@i+Q0vP-feY0LyL&O$jhqsFRJI)+5C@l z3aKxl5CrScUH;JR>#F)Mg;vMzlwzOp@r>H4`n6?+wT}GS{eS%V7d$T8R<(csJ*SB3 zBD3J_Sa#(f?6&?Z>{;`*ve0?OFAMS&6ne7kifaD1BA&ItwF{48h};8JpyrL!-8YhE z3hz(i$8T;rV{BaE`8C0-4T$rMINgX-j2JDj99|U_|AzP;oZ~VTe{aNjMx2fqPB_hs zQ;c&&%x5!n`mq_;n9cE=%`wh1;&j&-*Qf9tvHH2hDa=5>%s8Fr=y#qGt9J3c>OO;w z`)lYY%NeJ@Ok|vn+cVC?Z5ZQ1730Etc#e)&G2*8g|B)_(8Dl{7_z$Fct_?Bb>x?;P zhaogZaN4QxuQ-34bd8C()N6~RbkZWJl008ZIbfsGUQJ#qrIMFPss77huP%qJx>Cvx z#QE!Mq|Bhza^JuOQuED4c>ivhgbYcQQg5x3khjvL?9jDRcGx;8`_4Lf`rU<6zT6F--P3DYHc$}H(Wb+!!n zXs%d4S|fJYmV>4*6x+;Hd1LlUam-vT$urkT@~n08`kXW=JuDse;93Zjp*(H%a+%o23#$ znTb1)-UhpLyHuF4T`EmP{J}1%G$~UmP2MS$r|y!nAHhy#_#|6ujLwiS*s)b7Y?XUI z*d}38>Qaljq>Q^t@7lQZBhpIXk~5Gf`F^Q6J6rCXvsc2t+%Nad-7n#=TOa&#pFFT&ztmosBafi& zeXv)c$+*kGgG?E-637R+#@Z%$dXoT z4oi=j8>IW^8PaRkMzPM@DFYU4k={%8OU$ahlC&mA2Bsbq$GXGv8ro~LB~KhXPRQWw zQ<5@ck-Rs1k&O9bk-R-?u?(BNOh(OFB17k_mI?D=r!HF~b62gE4#-_`XQOP{g_PMenO^Z9+&xBcF4l5nUb2ZN!Da!$XBpEm+#mk>$Y!~ z^{_kV?#e+pB&&Dtl{E)X$j}{m@^SV_nX>J<`&qP z+xKM3M%bB~vod89Y|RYVncMd6m0kO?VOQ>jU3oxu9Xu#I4;_@v`wz>ugGXfd!9%j+ z&{4^xop~%*_8mF^+w!2YF|&^zlfAGz55T^pjd>*Rm~1$9TDIhVExS%#l*4&>%C2EK|xoKdyWy-~RBET>9}R zfxaj||3I7c2l@HupXHCMKgzYMKg(~wT$O*oKK4g{+s;q z`|nOsa7T%n_tmIgy?Tx6)hbrI`MR2;C(Ky7bm@!_CrfI$R2VsaY3kBdtJW-? zJ$vcWRohc2qg;NYQI@fN`_}C|WTa+v4s$6K`5<*^M$XBDIXV0GZOuWgFM>l|%g3fJ z-G2HstjA20?%TS3|A68y%L_7Q!ocjCz6nqY$!<`wlTZ|$1A=)#fHIqLRkA*cV-O^W+_7#*n8)fyikKmROx#};yq9Dl26 zL~wC`Uk^2cm9gnNzGs)V?;JaqqpF7Iv^!W2-g3r?um=4PVbXhbK64 zE~|If$cDkieSOsfltXcR*N$zUZQ3yMqq9d&pFHwL&#sMmy)u2#xA^#u9iM%+$&*jk ztM~TV<7Y=C#J7F2VZC5~f6R9ew6n%{#np|UeDcW#P3qN~`rX3UUbD7+wn@GE_3LAR z2V1SZyLOCx7R5~()T>u7V*c<%dsmb_|u_x zY@M2vP{ksX8nAB->(y)0@Ws;?FMfaV;;&b)U)npxC`Qy5#SQB5bTzjN7eJMXj{IeAjeVaG9t9mgETIqTfn zQ_44b2L91A@QZ#6|0w4y`bK~L{yX^NYJjuhaZClUcjg!2J)$ih6{P`pw|K{C&aqj2ezDKd*&nEc?bczk|Z~tm> zl-&s3ZlqbpI>lc}@@IWs_s@i4t-7doT<;t3Y@fh@mk zfWq7rZ{V)5CRQ9zHO3Kf_XI@71qVDAUn(FXzDz)*Ei@paciDgreafp4VXqL-`9>%n znWX1;w3So!SpT`$5dGR-r2``GAn<;;*1vU(x~Knh)^g5!cI;Czzzpn*x=(y5|ETUk zq!+(hZGHUw+CmyA+IBwz|NnAz%#)HlN_3p+N&Y6kn0OcOloX_}=C~7Mj&GE`NzE= z3Q=g!U0}IhubH}El&z&|gKb5jO}1^`llOf-u08tJ8vSmJ^uwy}kV(bcCY2yv`#kTk_Tn#b4u4f)UOXzPv@XNr!W2)Ex77H>J)y>*5a6E_Ez zvtE?F2WYAn?$=x0lWnn0bzkG2`n_M_PxxDk zL&j5wQ~DeAujbu@zz-$WxKO4mISd(1{w8lnC|->OHeJ;CN7~{IY+nb?LxI6?jO}RT zjYF6a7-gG;FeNb3HdPOHJ=XIk2X?f5h%g>u9O{ihol!`SMEqW0qRXhppQ2G+<}?63R6%~Q(g!gX|4+cTP@gk#=Nzcd z>Agw=`wIFzZhJ5ws?Q_fnZ`Q5*g9bxqrv-ei2DNT6vQJCK0un|{29XR;*qxb#iMMC z5ifhV_n^&<9m94a?0WjOp}QNuHf;CP2}4zQ%06Tl!cK%8sK0{s5iixRjbDWGg-91$E(e*>nNPwkP2 zUj^@g$87_^&u=3=7C4iqK1X_f`7X(;n6 zufEc-(xEL`vP4_7Xpy#X;X-Zx{Q26KUw*00n>SCJGiQ$W#TQ>_vu4fGKL7l4ZRCej zuco{|@kfLo29KHW!=TaQe|Tf$xF6nlZ|o1RBMcZm=7;|8j{c$FJEMN+`}W8mlHYpo zhs2@7e;hJm)UTsQkJd(w8l{aKIZ_)jVuUt)_;Br=ciz$7e*10ht+(FNh7B90u}yj|NpHzfQ5FB(sf~@E1ON(YOu+o5`a5&@s9CN zLKb3fjC&FIVh$&t#}7jpFt>e-^qdM^l2=B&IXdf|k7j*6eg5K~Q&Us5HEY&rt5>hq zR;^m4tysBITY>Znn&lYQ;%2n8s>KD?Mf$#dl}==2l&4Zyx&8>ycs{6nE(B) z@drNm{LAms)6=yyjO9Aunu@Rn=`|ZRXlpia*4A#_s;%9=Jzq%0xe7aWXsHDP_D^dn z?A)oXLr8NIu*R(w7Sd6s!tUK#x)HE{TFVzQGqnu}*dMJ;-g8i^Ffvsuoe2D2eQz@8 zxdU|DhW;ITRw6(A7vitxd1cEr(seuKUuoN`NEBX3Pv0EYPvo~dpEWesJ{YS)1NV%<+mLwhFnn}GfH{reUF$E@6?Iq`pW z#3zdGBVY%1hzp~CgEr8A3H}!9c*>@s&zrtf(l~u`5zy_Pk86u(eiit`Cbz$fFcr8j z=|5>k?z;4iziq~tZo*iuN6fJ|dE1Pgm>0mC_&YImgSRQ)S%+!G)8J#Ct2SM5R&xpG z6C)5;;_VJ|$|7P;xlg=Z1NJj%yTSW2_8rk4pPq38|E|NQgWkKS@n{!!FXu!xUjO+% z0A<$|d$O}1o+rq^1AO9MzYjtRWc>up_g_R0pR_M+!=~T1Vyrh~ zEYlGakG~3Uh4s!|zz4Dzc;KBT6>r!D?8)l}?k3h|tS~3;2nG4PNX$V4l=%$X_U+TK zPfhzM`>o}h&9gn{ADElMI_Zek- zMdx|wb{%Y=wjMZY^Zb=-f7*ue-vZ1x7`WdFf4iH*$%h*=G5)}M%ieuT{%+g1AL+f? zCgf8#uivp#mo2!bi8o_c%w2IO->*YIIk&sza~I4N_PFxhhd9P+-s^3`>Se*^LO zN?rRdc>B{iC%1$5i2X(c#fRiY%3_z`l;_BEH-}RX+laB>3~Y(@Hq5ouweSw2mU;NF zN^b=ZZqCZq@cyC-#NX8Ah$m$?L%}&94gJBJakq`Pk}U@A#Gdp19`s`;bpI~Pb}IZ! z_0{#i;NBna#(G3Aj7$p@UIuU^rrUE4sIcqcA#Kl*BO3PoYWt2K*Rqcu#h4#Z zw7`01*n;bbJ=>s7M!KO)U?9yfV6U;3g|==AprtGX%5vh#whH1+%+0`Z&ii=pRn7f1 zr)<#i@2}%u$~OB9=70LGpM|Wft$aYRjsF9EKsRJQ{n)f+>C=jge;Ut+xn8Y@ybJt4 zePhb!M|ObEi2WuP+?_lQUMq~pw*W`%1qVh4fzcr?3mEUu&D9Q^$U``x>wyR>%YsS7J;2hza(GtHA4S3ZS7JBkV`KAMKi9pOM~+`_ra(#haL$fiyyT*@N&I zbicB1t<8_Wea^QSBZn><tK5g^gR;te%?n5 zmt7$C+YqoP^0xGJ@+Wzmc<;tI?mc!~J9P4-cI5PF?J(kl2KEYfB@1$t%qRa-4jjlm zp&fPBJ>kUM#NLdZ_`Bdv{1x`Du?roT^g#X2#C$8{2m|Fl=X~~qG}m{1mR5S;ihTIf z2L$~4gFm7`0}s03E;{0#me^2y?nV1)`z6G9vU(Elx=u-ayHlV(C3tyF5!{Pn~+As9$aJ}w%?74u< zf7;$2NjH%vnaAjPpCO-*-G$;huZ$oPj;%{V9cY-nsMI3FI^6D%^GK zo%llrknan{p8W4d29WPb6NSwMh0O=lCx|lwKpSz`>T{+XL#eJcbB_jUl4O; zbD1L~n`{KuT{!uRBT6Mx1g?geAF*xy11m^5I@1KJil zfIann%6sBY8-Z!g{h>qGD*Qu-tkFV;tk(IzuRi~mjGuiLbAPhhm&i4dwtXs62mCi( z2ei;ORlYsi`1I#<&7ON0I>cemUEJWxulAdeId_PX%Uw-6zq*vy{AMf#Nm@Bd7X?p>()VU7yZ@3Pi^gZe( z)b#_nmtNWU+yjd}muhd0Z4zv}^GeSLw)D#pe>LwLm@D1iumO|}5A3PSQ?4uQf$J&o z`q$rmr}$oBkNMtJ?wh<%8NoSU&HK;=70;9JU4zR!;7$%u4BCI_7PpanG_xX=V? zfIM#Md&J)K4N&i=>@PPWP2nFhcny62=}!Bv6!^as>_6fk_{y+pt~wy)s`3Nt?*#li zn1T6peKkj^{q@|t2D+vE!XCUgr_MU4um{%E<>+5Ed0qK;fIEG>%%hH%1?-Q&Ml-P| z|C8T|J>FT=@Le|q&i6Owd=q;m_hAp{Iv;dHV9wwcd*-{F156oU$bnnYK|#Hc`T*y9 z2Kovq_mzzR-d}JiSL?iVr&ear8ijwk;p?>WpauH>mHy{~e~BIw*F%2h^8>5*LjFDW z0y=el`li%c9@lf|(~pef-aPKF9{tj=2{7+=Xj_5rMgx0S%(-sDH8#q8+I95T90l*5 z0JhZei8XO&IQ{j78`vxSq3>Z{P}m#x9`VPw8x;N~_O7v8I&en=W}Yi86eSPH|0ri5 zk1Oo?JV;aS=OF9@9eld?h*s`B$a~-)lCnmt0NxKBcEkVY%KyQ=KRt*s#C~z?1&hFZ ziaiq4t^XZ#0Hy20udnuRP}k>vEw1IMcN^f-?+`Z}cHWBgO&Qm>8Q7Ee$>%2K=GrRP zQK;wP`y2{;lkdsv7cO1Wv4`xZ%vXG00DCp}8}q)2J>G*>e!$zoUeN^bHe~^0Gi~Yy zro6wUEC3zQx6id5Vo$km>I91qpU@tiyGsih480Hd;~P6#rEwe8+@FvCu?Lj$zoc!> zchH*$fS)?5vE|+<%(39N|LeUVH`a8xPZN7o&`0c7$9jc&?;(CzSl52Dv6gd{Yj_#J zoog$u>*)&nty|SxfN!>F`1U7!I6B`GPs)3@*ejW@%YD<{Gj%>w=Rb-$pFUs}4Eb-; z0kL*XyJBzRUJ!ew4^j@ekqP z@gJ6|l^>a|Rr+9)(gBLXKe*Sltb#hg|Iu1tK3!kEquL>%Cg!E5AfH}pxEUZ}5M~_%93{K&_WQit(;O-uqwH0rKhkkVT=!yGeh;e9wKl z&{5+@zc_S!hAZ}*^U3!n?&dxzu8C6DBleWp1+hO*T_5ytliYXJ`*0n7{HDH7?2iIx z1}F9=?#v?{ASgOuKGOvQ`g7O_1!aIMJ(!rAd6e_6*fZa(v+DRM?a_I=wUA+H3jffz zVDF9Epj8I%<8K5w{r~y&KhFQA4&Yd<74O`4B*wQZ!qe(~n9le{!2jNUAbp=c{QBy9 z3QE_<`_&!dNsH~l`*=6jHoQUNh!trYHeTmmz0Kfz@;>!^b6+fD(gF8G(7xw74sCqS z@2-4L?9Dk}$Di{8^*sh--Us&NeZ~KZ_qnDE{N3??0eVofpdjuA&Q0t|3kqYDn^?Px zm7edy_a^@2{h?b9Xrb?^Ikc+~Q9e0Q`fZM=pVUjm0>(42XIS z>*(OW|Gjs@3i$Q$eS)ahxJSPY@b7^zEa-)Pv&W?ExVnY-g6D}bWxOl)tFdRBG(j7m zdvoa9Q#$^4wC^ry=P!PTaM3OHI{q%$gYR|hbw8hpy*vJQl?5sdER`%MOa>I71tlX) zI-qPIEx6DFWxew67&6~UAE>kX_(`qG#4TFrTk946W#3(|^Zxh@=>3rWgLMC|+xcJd z|6+xIaPLnJ0rN!ge}uBL@IIvaMhJKkI^e(34sh!Fv^#G2^+AW~UHZ7e#a~FCQM&KK zD-EV^)!yE!?|q}br?3a+#GQe@AMSUd%;&x=V*d?wJ@C7Uy;I-Ayid%{VDi1P_gwuw z;C(0d2LG#b7oIOTADHw&9G!Cl(l^Zoh2*(n&pDoYK7Bjnb=Nl5oHC#LHaNGN zdj3t=7tr?=?;G=eL3od!x+Cu{`2*`aqo zhyB3+N?-7;b$z^t8QklG9U<^xQm$3~JWF9;b#}HEJ~!L>9yQ;o#`l`l-fLn{8{fp9 z{(KXArSBQ~zSG`AU02@EhduO06LT{*aaVL;VsFX^^W2Dum0S5h918@6txF!yDffvx z<9yho-PGLETASs2wQ?gjX`z(;#2&J-;`^I4#rx3xLf?k$H`ae{i9dLs{9iJD);aJU ze8Gkt_%C`d@Mgchi>|NU!?g{+r|ZxaWnN!#oqp`F8GD@AD>?uzv{kh;eZg~JW%6u3d0^(d zV6JF_`N*UEH+?(Q^-Nk~%=uw_=25Nun9W)!c^~+f8@Um3f0N>S#rv@R=mWlO{9jwB z@Fxwx4jcvfukQ&|Yi;VAD1YU*LDZgY=N=x@ug~u;xaj(2-T?NX-zuMF-h_SF%q*?O z>@01Vb9dA?w5 zV(6p;1AFJWfj#ke<$Kq5DF?{=)jx*Ze-Atk{3-t{jLm?bZ!>s*3v52p!hl<}L`^&!#;?(u2TVmf4-qnc1x0P=A^+A8r%k*D#h1ge|wB0TC z#Gf*uMd~4iJ@@2O)|-01iM_dZ%f$Yq!Sia)FTnpw?}Pjx_6389v7&Dvks86Srzr#&1#cK z0~zaow~zm#o9#gL%|htpf6cccoVxx^dwBRBa%3F7M`Qc2->AS(-q=(y)117DQ_&U!?6DEBW5|h8_ z|5wUT?~bg7iS%cjbGtKCxeX z{cEBQLyiUeWmfle!EuX!)-`I_KyVb4>Q*P z?o|F0e?t#c?*&B0^?*!n2AsmV&)#J%;7+#$-0a)!U~dS1$2Us(-Ada#_q;N68Elm6 zAt|X^c~Lz$1iU!^qy_7AT(q~UKdYY$;AsIv%u;R7d}wjTN4)cai5 zcnZ$@CiaZYV2=NvjZJ)SCni0Zwt?&YcrD9PcLDo}JDm7e{D8a;?7{bXFnAyKKm8c zYp(y^@%&G@58f{s|D{t0fLu=2zg3Mrcl?Sqo`Pmd9M`Y(#a ze)=Bm!9_au4};&S_frPc0rs^P0QdR(wQyj6|D3(reP8U=`t8isc73hy>v78c0&6|) zuy@7WOcNI~ZDM0$b*tDFZ`ZnJJ~3vx;60efvRd$SR-Cj`$A3KL`N=yK_V-SMoHX#K z{$GByq4yc<|3%@??|(V>e{lVe{(s`1VBr6nZU;gKldI`+Wb75f^{ z9jbqxtuN|d!Zi_|0(r|G%jCmOk3s+Y_$7$v|5H*Sfr;XRPHr^}S`#_foY=lw(C;Uk&;m zu_xxHp2xZVcCfz}v{Mzn;~HrHvxBF!?dR|gC;UCc*py=z{!{Q?5Wfv^<27F-!tFQ<2N>;@AX@7F?4XMuJ09rJ?Vlzo;sNK$@`>%S_^rtKe$oKXi^87rzM32Ct6BEvu-L@gwcMHKLMvw8O)+pMKNrk*#h$n;?2UZ}#Q&Mp!y2ERJ`mzh`E@U4 z800~9rjbwGpZIePz+C_1`ma0wr!Tdj|39DnSNnhS>wl&V5bVVN*8G3ddM>^vsr!!c zcV`U$UP3Z&Eh&gzey?-P*@FC$+6- zFWiz26#l@Q{OOJs3gXLi)^*Ll>72N8-NC@0bi#L%hVDA9kB5PO*k^mRYDm|BZcO~E z0e{8&6SqU|gZGW~A9MZxCj3*@YX3C;F7tm8YXE9Jm-~eH{TRv$^-Tu;?IXTZ5@mlo zsOzw0p@UXm4;_-GRi+Fp0{a@U;fOtDzry~{@I83P>Xp z7d{^V8&|yZrA>M;aCVlt`xjo>m9|KW%3wEZi>59qr7S1A7Q|NV3LL;vGD7yP?7{2MXu^*{X^T>RE9zqzTtz2~x? z8)X}e_1u{uuP?tEIt1?_(r-}&_SE+j_Q0Qd9%VjlzryBwr_2YhP*$q>z99A(Ggs^@ z0Dt;X%3~ZK|1wKknR`y#4q2f1u?YQ8Vd;XYiLEogkg|f(%`40PvHz9)hfe_d|2o*| z_&z+|w}s!9e(d z!2O@a9{6*vTrrVk^0?p}pIWdQa6%9z7cpN;iDxAK2ze*f~=I=u&eNWK?-^=IUo#b92{oCptA@}ij&Em$EvVVMld|wWGREpwz$~&&< z<-@)R`<{B9()9}ReLn0l=ex*!SH3r~*VofvM`2y#xwExNfy{4@WcpmTG;JfLt=L>!t^oEaz-`3~%<0JUD zvhX(txqlCT7pp{%F`I}z`$T*T)Ai{8p)E)3Y2PWC|7Wp>ZA8AOu3uq-A@?coU1a`E z*pC7J*i%8B>b}o*Yo9?kq_05D(d1L&zAe8@R0OpGK4g9ee z82&%%aQJ(N{KlTkyFlu1>A3oM_-%dlcU08g@u5L4zcD{_@EYiQ@b5uyaf>}@g4k2v zb7D{2{|xriZpeH!R(}Hfa--l&L!fOHmwr&&Vfc%Pz0%o?*rbJmc_zIm*=}IZI;VlV z8FBfHZ(mD%s$Ft_6V>0$)zy-#Bcd=5@Ra%D;(f{%ruh8xE}Tx2Ey;LtXc9 z;oJJ96K9_!_Vi5_g+28>CGT$sd(^E)8>rxXUx4qOcHSMxe3S1@>?vDScrQb%1z*9; z1E-WMAkM_k3&W}bnJ2XHuMRr#568S$6QMSI9VY(N|M@qEtp zKR5Un^#8f#f4=|6Z@}T(Z|XgOH}vnoDjFCF8sPU}^Wl&6Kdb=)-!53E&;K5n@m=5m z&;#WCy~;LF?+e=a9r=;Ly(exb_Iw}BIp^a!=+jZ>hRkQ0a^C6BElTF!F7~Fb?}ELu z^9()Tsq4AS_eEh}4){~Xa<2txVApwkBLp~_IGc39*ty1R(1(e;8LR7X?TVwPwVGJN zH1Q8#a!`8!p*HjY+JMBL^FQSxZCTg#znkX&5!mlz?Eg3YfBEn?zX5}9zlDGXu->Nd z*Xdvd(g=_PWnKpj41hjh^1pfyWcG3Jb(FdGtNuo&%lClPegN*<=A3VQi%0o*2Cuzd z7J3MMJc{?-U~lSsMPiTV=NhhV-~Tzj|0}RBtHyYfl4S!n<9l1s2^8++=Yqin`?J`4 zW(E`ceW%W9_17JB;(tH+ec3_nLCAuK5R?DO6E(1Z;a=D`rvLv>@jt%-G8Eqc8Uh~> z{ebuen4$qC3m^w53*H3&46lO*AP1=bn|nZm`%K>sY}=~6`LOFL?_Kx)7=IJ_DSds& zHUK`JPea~Z2_H|I+QU^8_Iy59>`CwW)^ctW`%06c=VNZH_%Gsn6MM#?!||R4WI=KU zz6TFEVCr+kR>^iFCcm4wGdAl{?l;?VLVEx@pUM9ZLJrjCJ{Ig@BmNIUAGi-bK>B`6 z|9_GEkN)K2|F@z4Gr-;o#U4-Q?oZ{oXv#vTx^{g&u4;j@6q zKKL8<`a7Tn_x{l)RPP9?zm;hlRl47oXNi4{r@)hx}VL32C%n?I-NW0&l$Y0%29`N!=SyVvjaZ_OI1haah>^^;RCz z>Ocli2UI>_%#B6j@3Q~jiNC1>VlNH%0O|oWfbW2W;yXb62Cxc{1EDE+m)4+xkU=X! z3y=kv2Nds<27rHHmmvwdUYAgf@8qj*fw}xm0LX^Nm2VjDXP2~nw3XO%O;2Hu{ui9@ ziG5XI%Jn<7hWA%suYCHj@&Draz98S5*i#0CVw}sqw^2*llwS^z?}__4yl1HJ$2s#T z9~K=utJPk2%!z;P)kn04RvppmBc=^l7yMrfynjFJ0Pb(4Zd54#)LqQ||MUSFIso-8 zuB$O{|9|K^paHxC#CJfQG=T3vDjFDO&;Y g?yN@&Mn4=lrksf5Qi4|MC)axek#1 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%0A`5Djbv3RsA0WrkSy2CbK*e*Dj zXMT2-?F-mFW&E9=-I5A+c14W8!x?^2)XoFTNPcrNR*&|^tN7VNd(s0>df-V9Jn4ZaJ@BLlp7g+z9(d9NPkP`<4?O9CCq3|_2mX~k@PGHgqJIDY literal 0 HcmV?d00001 diff --git a/SOLVER/SSProtector/obj/Release/SSProtector.pdb b/SOLVER/SSProtector/obj/Release/SSProtector.pdb new file mode 100644 index 0000000000000000000000000000000000000000..3be95f3083832fb43487fcc6766b5020987be788 GIT binary patch literal 28160 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 literal 0 HcmV?d00001 diff --git a/SOLVER/SSProtector/obj/Release/nmsRouteLicenseFileTool.exe b/SOLVER/SSProtector/obj/Release/nmsRouteLicenseFileTool.exe new file mode 100644 index 0000000000000000000000000000000000000000..a29365469530b355b1710e4c409b89b1b45b4b61 GIT binary patch literal 24576 zcmeHO4RBo5bw2Oy+xK=?(!xr%6e% z`Li%R6?}2!Gs>P9R}M{BZnWUo<4!6UO{emCyBHlaqt0YLYUQKxeaUFf&Y10Wb)nTI z(*u1(dlVn_bv>FYxAuKfl^P{L)B#Db^%Z zk_RctONr=o!0rvq9U+=xAkKYeh-xAG@J^!3&MkYpe3S@1n0*4s@1D&OwHM8)BJ#iU zTOcTtzE(QsiI229u9F5Yz8wL>I^FnGJl&AAJ7(5~BKt}+_^{ppJ{3&iJ!QZ+f;

X7MoC|F6eATvAu`|>_aU| z7qg-s(c4~mby38>=!_zn07@EBLZ>OvptVv&TMK=(q|)WIZa={U(R^R_{U7q>cQ4kL z7yc)4X}}o8fR8F;^!Mxw;O8*{=poXb7Ns-__EHFHTFF@3(4kT9Y@I$R#FnAVUJlaO zWaDZiWY zvg@Smo98XN9A$9*qT}jax&HcjT{y)akh565$Z5786)tv~ITlx{M9&ZOT3Z6nJ?AaZ zsj)OO6$G0~t7zSzH!oFsmDbfMGDlTPDeE5a_~jiw`WN&EcX?Plc%=xDilM3twncR3 zV`wD?$aM*^5WVWZf?x{;j3vU1h$Xnr|)h1!}&( z%zubheBR@EJ_8G^-oVXmL41eYC}@qL+AERP>H+(5q_H4ctZStp*2)H8{WqwC1wKM| zuHrh4HCz4!5>kx^YXfz`mPS-6Qr&ZK5nnu)bdoKL`pi@*%s?mMUC>DiJ+ zp+z<1yAvif_e!YNx~^Gvy^cj4Aa!mhXoH5AlP5iC z#nwa8xXeauhi1i%<dJ=c<2!=hRbl>zJ~jv>oPjJH#*mHZGS|I_!~W>8DIB0mLiDk?O2oQ;M6a1Joe-Hh|&6#7CL+f#Ja zUzPa-bn-_YPqdZ3{41&fyow6`r4s)9p1ui_7*jn$%kD=6Dj`*G)K6MAEQgTFdRj}4 z&xZ-n1KI6*V+`L5ghaVUH5!eQGSaegZdTclC2Kg=iyF@7AeJR&hUW;}$GYODpCLt{ zme+9gsv1ntC1-f`Y*iY0F=^XE&WorUi?gP)T$^Rr&9P6+vavp>U9sh3u&XvcQlmCK z;_UXL%1(%RO=62%$r*;MwyCMHsWFBruh#_wF}R^OXsCo}xP(_b=l7r#l*PkqymdF5 z`|P>q)|bqwOCEWLb_jbUKYa;4)_C#0tK^*)(b^0(wwt>;w`me@#Sb->;39SDQulf= zSci4{1~9d)EflyDuQSb9gH`T9bd*i0v*lz+sVsh6^0L0h-h+xww~pBTY*GfvCj(Tc z2OEPJS6O+Yy!AuwkPP{}BHiB0HKi}#Ltik3BGeMRpSR<6!A9p90QK=;lk>c!OPsGs zy3~0|(q+!KC0*{Emh>{`hmtlsuSvSX`8P??$JPX?cKsQ$LYz!Nz&>5ffF;-dT zmE07=K2dkxM19?OMD_r+t=-=G&rz*O#Xp|231QQrg>^+-u8)^5+UIxS7}7c!w~|wb zy3hD)jJCye2{~_}(bxdoi|q#qwQei7vifb5q$VP6UQNPlNgl@>A3HXdIev8VXkl!+ zI8g+>6<>`aF~?dilYv?Dk`IF)OQOvg4uiET)YuR*Y+^_9`W*^y74Tq;==l2fj`ocm zo7ZEp=bb2d0vuDLG7X z9saNx&-+j*)#)%@1s$LA3(zN&k10BRO{l8=2>hi&SF0?)R_KUOSLl60KPB{ep+68> z<9kcpPAzaxr@g**pH6wu5IyR<5A=$~ApY_v1PYV5{$e$Mag3zA`4eDHLtn?es@LMdc{s^kj)DNLU-@9DH*PAhZ>RHZTD zUntR~^pG+{D}`Puv=j6YZ56&pXhP_Ip@)Q~gjzyx6FLog3w;1IgPwDL9v1n-^bMaw zkI@^x6WFIL(tevhPo3J`;Cr-t>8muX4bZcq`7AUCuoJmO`zXCkw`m^-eINMe=ppSh zpr^DaKtHWLMc)zoKM?vlwfp~?-k?7Jw@^Cb|1l{FTVVaQ6fE&G{x>P2a8H+l{(@G5 z4$zg#cM-6iO1ocEu2g>R4}t#De<`S{GhL=HR(eD;0i6~lLUDbKvLBK*B?Y=wv6Q$z zL_Nw3^lwuh&{xCeDSd!$Q=ZfhN?o@3oX+$sur@8V?pA)Le-xvCRzIOU2+0s7ltso} z%Imbs_^|S@vdwrHG;V~^i+j`{h;LGG3IR@ zO<}h9NSoovu6(fBhsNBa5MGIRDrFYk$FCq*#}wk{ntnSonKiGYe9j%TCyVADD{bao zbElOxhip6BZcdq$Je0&6FFEZN%^VGQzgxOc1 z-I3VGhJ^38ixZ}^!%jJwvIv&brt8{HSrE6}W4+}}@1*0H`6A28qJ%qaImO9TmUfv% z&pi}@-<@(NBsHhJmpS$2)6R6ENO99kJ?-|yK7xXo%F&>i%Iugfnmvw_nx?X=qx0Py zt#om;?B3{n*GA{u>Q7mD8W`-`nHZsD>bQA>InBV*kj+Wbx*hCG-M*Uk-Ft~Hi5=Vaw(dndESN#{HTLryAV=2FhF^VG2m(~dPh zQCwIAC^M7k^Ax~`LMlJKutu+)KWdFnIw?kDVR77a(~ea*f8mf-tn5<>l(>}|&)aU% zO1p@RvB~lA)V!{HGHeDhOMulmP_m;KMrRgFPay6Mn%UHpaPFL^r7@5W7OgQWYZWWH zS+d@r%BRN7973JuSZ^*R&6JbItXWXdYiG+rg6LmR+?SusnSc#Zh2o0bTmw5&u34I} zv79L zoZHScB`3#R*@6>BJe?|XQbc8!cmbh`DM`Hp2e`Fky~G|fN3+9}G}Ds~5N_|~na@AA zEKE#Oe|)2tFO3?)@VJ!$rX~1?xHCP;-b4aRhMmFK^V;Dt0FRdlmw0{Y$&TAFKaqob zxdNu3EIKexV@2xA6^hf;JCSk-6K=zLDrC_CvF$==X5gHIkxICGC$rgoj;G(_jANkk zMV9qVrA>)t8a$d_zh&!|xanBOO|Shy>(+cGWoEtc%fRoR91C8 zxeNr#y#XDjga-1MU2UD)4^Io2Z4eKeFnKy zUYX&kQ(9z2(;-q917v7Ya_;`1ADBz zXG9pgFxqz;-bRQyI*Ns1Zz^Zf1iy-8(eInGT&(VKGix$lSQ$lLf{axJDrS1p{34uv zC&?fU*sdk70q*i_rZ;Q5CLK>@CrwP&;sg!YC(5C`3+GaJbGs}{xzC-O&aZ_x9{ zQ;wC&7fS^cwCU#=@Q^nbNam@hY4xy096|%A{iMhCm8JTsjd(Vyy@vR#>c5H3i zw54xLTUYPS9c^28c6GFMZrr$~qibV)=ce^NcgPgsrE-^<=Y`0uc;yVU??clClSW6A zMHo*@NF?%Bk)<5K*RJ0}t5+k!C+tke)TRzRog3OZskEN%HnRo14#^9pl5nSGW;44} z`3!dnwk$@X^mfO-r!z@?v`=#C?w7QZv#TslVWXd8heauYN|*Wx?jUfKpqYlcxLD?P;Al|G)Q*IVChE993} zmiEJ=JX$%5G)+Ztj zm>oqcQS_40D+o+iwt=WQ6S}-Y= zJcz0ia2VGo;buS1=;3f!C#Bh6AM^#F7$6lzN;4ExsIhJx z+EuiuqJ){Kevn8Hvw^^q+ehz;yb{``MX7#2lLJf+q42UWYN>UGQQu#`KU{xvxc-0& zN!V|w$l&Z=Z~3EYI1s=^FkE2MYIsgvg}QEN;Xs(%YxakArp^AKq1E3}e;Wj<9P7*=61z!r62jTEkOYt4QY z=qudgNjRx6umC+^=-lnF8bbTw$jo;lGv9;XA>g2dLIzB~5`Yyns@B!j1r2{QuxMr{ zsD9?h2B3or|Ed{kSk)B7fKQJs!YzwZKl5LayOmmnj81$}fIq^;7OhTotv_mJ#!_uZ z(;GIob#3U}*fzGMb8}n9%xubRPIYZPYIY(N*%CD=RL`3`Irc`s{CG6FzN51X|1C

=Ul&LaY4$!Bp@w_&m82pG`!A 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 F{{egimO}sl literal 0 HcmV?d00001 diff --git a/SOLVER/SSProtector/obj/SERVER/nmsRouteLicenseFileTool.exe b/SOLVER/SSProtector/obj/SERVER/nmsRouteLicenseFileTool.exe new file mode 100644 index 0000000000000000000000000000000000000000..3705ce044acc9651ca98524ab5ce110c684a608c GIT binary patch literal 28672 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 WKox;10#yX62viZMBJh6`f&T)}sxMps literal 0 HcmV?d00001 diff --git a/SOLVER/SSProtector/obj/SERVER/nmsRouteLicenseFileTool.pdb b/SOLVER/SSProtector/obj/SERVER/nmsRouteLicenseFileTool.pdb new file mode 100644 index 0000000000000000000000000000000000000000..49801a08a6250329c2ab9c27d41898e9d66c23f8 GIT binary patch literal 28160 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 E0b_W-T>t<8 literal 0 HcmV?d00001 diff --git a/SOLVER/SSProtector/obj/SSProtector.csproj.FileListAbsolute.txt b/SOLVER/SSProtector/obj/SSProtector.csproj.FileListAbsolute.txt new file mode 100644 index 0000000..a9e361f --- /dev/null +++ b/SOLVER/SSProtector/obj/SSProtector.csproj.FileListAbsolute.txt @@ -0,0 +1,16 @@ +M:\NAVICOM_PROJECTS\_ROUTES_GIT_\READY\TOOLS\SSProtector.exe +M:\NAVICOM_PROJECTS\_ROUTES_GIT_\READY\TOOLS\SSProtector.pdb +M:\NAVICOM_PROJECTS\_ROUTES_GIT_\SOLVER\nmsRouteLicenseFileTool\obj\Release\ResolveAssemblyReference.cache +M:\NAVICOM_PROJECTS\_ROUTES_GIT_\SOLVER\nmsRouteLicenseFileTool\obj\Release\SSProtector.exe +M:\NAVICOM_PROJECTS\_ROUTES_GIT_\SOLVER\nmsRouteLicenseFileTool\obj\Release\SSProtector.pdb +M:\NAVICOM_PROJECTS\_ROUTES_GIT_\SOLVER\SSProtector\obj\Release\ResolveAssemblyReference.cache +M:\NAVICOM_PROJECTS\_ROUTES_GIT_\SOLVER\SSProtector\obj\Release\SSProtector.exe +M:\NAVICOM_PROJECTS\_ROUTES_GIT_\SOLVER\SSProtector\obj\Release\SSProtector.pdb +M:\NAVICOM_PROJECTS\_ROUTES_GIT_\SOLVER\SSProtector\obj\Debug\ResolveAssemblyReference.cache +M:\NAVICOM_PROJECTS\_ROUTES_GIT_\SOLVER\SSProtector\obj\Debug\SSProtector.exe +M:\NAVICOM_PROJECTS\_ROUTES_GIT_\SOLVER\SSProtector\obj\Debug\SSProtector.pdb +M:\NAVICOM_PROJECTS\_ROUTES_PSOURCE_\READY\TOOLS\SSProtector.exe +M:\NAVICOM_PROJECTS\_ROUTES_PSOURCE_\READY\TOOLS\SSProtector.pdb +M:\NAVICOM_PROJECTS\_ROUTES_PSOURCE_\SOLVER\SSProtector\obj\Debug\ResolveAssemblyReference.cache +M:\NAVICOM_PROJECTS\_ROUTES_PSOURCE_\SOLVER\SSProtector\obj\Debug\SSProtector.exe +M:\NAVICOM_PROJECTS\_ROUTES_PSOURCE_\SOLVER\SSProtector\obj\Debug\SSProtector.pdb diff --git a/SOLVER/SSProtector/obj/nmsRouteLicenseFileTool.csproj.FileListAbsolute.txt b/SOLVER/SSProtector/obj/nmsRouteLicenseFileTool.csproj.FileListAbsolute.txt new file mode 100644 index 0000000..89d6bab --- /dev/null +++ b/SOLVER/SSProtector/obj/nmsRouteLicenseFileTool.csproj.FileListAbsolute.txt @@ -0,0 +1,39 @@ +C:\PROJECTS\CSharp_Navicom\ADDR_SEARCH\_GRAPH_SOLUTION\nmsRouteLicenseFileTool\bin\Debug\nmsRouteLicenseFileTool.exe +C:\PROJECTS\CSharp_Navicom\ADDR_SEARCH\_GRAPH_SOLUTION\nmsRouteLicenseFileTool\bin\Debug\nmsRouteLicenseFileTool.pdb +C:\PROJECTS\CSharp_Navicom\ADDR_SEARCH\_GRAPH_SOLUTION\nmsRouteLicenseFileTool\bin\Debug\dkxce.Route.ServiceSolver.exe +C:\PROJECTS\CSharp_Navicom\ADDR_SEARCH\_GRAPH_SOLUTION\nmsRouteLicenseFileTool\bin\Debug\dkxce.Route.Regions.dll +C:\PROJECTS\CSharp_Navicom\ADDR_SEARCH\_GRAPH_SOLUTION\nmsRouteLicenseFileTool\bin\Debug\dkxce.Route.ISolver.dll +C:\PROJECTS\CSharp_Navicom\ADDR_SEARCH\_GRAPH_SOLUTION\nmsRouteLicenseFileTool\bin\Debug\dkxce.Route.GSolver.dll +C:\PROJECTS\CSharp_Navicom\ADDR_SEARCH\_GRAPH_SOLUTION\nmsRouteLicenseFileTool\bin\Debug\dkxce.Route.Classes.dll +C:\PROJECTS\CSharp_Navicom\ADDR_SEARCH\_GRAPH_SOLUTION\nmsRouteLicenseFileTool\bin\Debug\dkxce.Route.Matrix.dll +C:\PROJECTS\CSharp_Navicom\ADDR_SEARCH\_GRAPH_SOLUTION\nmsRouteLicenseFileTool\bin\Debug\dkxce.Route.WayList.dll +C:\PROJECTS\CSharp_Navicom\ADDR_SEARCH\_GRAPH_SOLUTION\nmsRouteLicenseFileTool\bin\Debug\dkxce.Route.Regions.pdb +C:\PROJECTS\CSharp_Navicom\ADDR_SEARCH\_GRAPH_SOLUTION\nmsRouteLicenseFileTool\bin\Debug\dkxce.Route.ISolver.pdb +C:\PROJECTS\CSharp_Navicom\ADDR_SEARCH\_GRAPH_SOLUTION\nmsRouteLicenseFileTool\bin\Debug\dkxce.Route.ServiceSolver.pdb +C:\PROJECTS\CSharp_Navicom\ADDR_SEARCH\_GRAPH_SOLUTION\nmsRouteLicenseFileTool\bin\Debug\dkxce.Route.ServiceSolver.xml +C:\PROJECTS\CSharp_Navicom\ADDR_SEARCH\_GRAPH_SOLUTION\nmsRouteLicenseFileTool\bin\Debug\dkxce.Route.GSolver.pdb +C:\PROJECTS\CSharp_Navicom\ADDR_SEARCH\_GRAPH_SOLUTION\nmsRouteLicenseFileTool\bin\Debug\dkxce.Route.Classes.pdb +C:\PROJECTS\CSharp_Navicom\ADDR_SEARCH\_GRAPH_SOLUTION\nmsRouteLicenseFileTool\bin\Debug\dkxce.Route.Matrix.pdb +C:\PROJECTS\CSharp_Navicom\ADDR_SEARCH\_GRAPH_SOLUTION\nmsRouteLicenseFileTool\bin\Debug\dkxce.Route.WayList.pdb +C:\PROJECTS\CSharp_Navicom\ADDR_SEARCH\_GRAPH_SOLUTION\nmsRouteLicenseFileTool\obj\Debug\ResolveAssemblyReference.cache +C:\PROJECTS\CSharp_Navicom\ADDR_SEARCH\_GRAPH_SOLUTION\nmsRouteLicenseFileTool\obj\Debug\nmsRouteLicenseFileTool.exe +C:\PROJECTS\CSharp_Navicom\ADDR_SEARCH\_GRAPH_SOLUTION\nmsRouteLicenseFileTool\obj\Debug\nmsRouteLicenseFileTool.pdb +C:\PROJECTS\CSharp_Navicom\ADDR_SEARCH\_GRAPH_SOLUTION\dkxce.Route.ServiceSolver\bin\Debug\nmsRouteLicenseFileTool.exe +C:\PROJECTS\CSharp_Navicom\ADDR_SEARCH\_GRAPH_SOLUTION\dkxce.Route.ServiceSolver\bin\Debug\nmsRouteLicenseFileTool.pdb +C:\PROJECTS\CSharp_Navicom\ADDR_SEARCH\[READY]\ROUTES\Service\nmsRouteLicenseFileTool.exe +C:\PROJECTS\CSharp_Navicom\ADDR_SEARCH\[READY]\ROUTES\Service\nmsRouteLicenseFileTool.pdb +M:\NAVICOM_PROJECTS\_ROUTES_GIT_\SOLVER\nmsRouteLicenseFileTool\obj\Debug\ResolveAssemblyReference.cache +M:\NAVICOM_PROJECTS\_ROUTES_GIT_\SOLVER\nmsRouteLicenseFileTool\obj\Debug\nmsRouteLicenseFileTool.pdb +M:\NAVICOM_PROJECTS\_ROUTES_GIT_\SOLVER\READY\Service\nmsRouteLicenseFileTool.exe +M:\NAVICOM_PROJECTS\_ROUTES_GIT_\SOLVER\READY\Service\nmsRouteLicenseFileTool.pdb +M:\NAVICOM_PROJECTS\_ROUTES_GIT_\SOLVER\nmsRouteLicenseFileTool\obj\Debug\nmsRouteLicenseFileTool.exe +M:\NAVICOM_PROJECTS\_ROUTES_GIT_\READY\Service\nmsRouteLicenseFileTool.exe +M:\NAVICOM_PROJECTS\_ROUTES_GIT_\READY\Service\nmsRouteLicenseFileTool.pdb +M:\NAVICOM_PROJECTS\_ROUTES_GIT_\READY\TOOLS\nmsRouteLicenseFileTool.exe +M:\NAVICOM_PROJECTS\_ROUTES_GIT_\READY\TOOLS\nmsRouteLicenseFileTool.pdb +M:\NAVICOM_PROJECTS\_ROUTES_GIT_\SOLVER\nmsRouteLicenseFileTool\obj\SERVER\ResolveAssemblyReference.cache +M:\NAVICOM_PROJECTS\_ROUTES_GIT_\SOLVER\nmsRouteLicenseFileTool\obj\SERVER\nmsRouteLicenseFileTool.exe +M:\NAVICOM_PROJECTS\_ROUTES_GIT_\SOLVER\nmsRouteLicenseFileTool\obj\SERVER\nmsRouteLicenseFileTool.pdb +M:\NAVICOM_PROJECTS\_ROUTES_GIT_\SOLVER\nmsRouteLicenseFileTool\obj\Release\ResolveAssemblyReference.cache +M:\NAVICOM_PROJECTS\_ROUTES_GIT_\SOLVER\nmsRouteLicenseFileTool\obj\Release\nmsRouteLicenseFileTool.exe +M:\NAVICOM_PROJECTS\_ROUTES_GIT_\SOLVER\nmsRouteLicenseFileTool\obj\Release\nmsRouteLicenseFileTool.pdb diff --git a/SOLVER/SSProtector/protB.ico b/SOLVER/SSProtector/protB.ico new file mode 100644 index 0000000000000000000000000000000000000000..0c0f1ceba534cb3e5e05c66fa166454f6a4eb6fb GIT binary patch literal 92582 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 literal 0 HcmV?d00001 diff --git a/SOLVER/ShapesBBox2Regions/BBox.cs b/SOLVER/ShapesBBox2Regions/BBox.cs new file mode 100644 index 0000000..636abbf --- /dev/null +++ b/SOLVER/ShapesBBox2Regions/BBox.cs @@ -0,0 +1,223 @@ +using System; +using System.Drawing; +using System.IO; +using System.Collections.Generic; +using System.Text; +using System.Xml; +using System.Xml.Serialization; + +namespace ShapesBBox2Regions +{ + public class BoxRecord + { + public double[] BBox = new double[4]; + + public int ID = 999; + + public string Name = "Unknown"; + + public string File = "?"; + + public BoxRecord(double[] box, int id, string name, string file) + { + this.BBox = box; + this.ID = id; + if(!String.IsNullOrEmpty(name)) this.Name = name; + if (!String.IsNullOrEmpty(file)) this.File = file; + } + + public double minX { get { return BBox[0]; } set { BBox[0] = value; } } + + public double minY { get { return BBox[1]; } set { BBox[1] = value; } } + + public double maxX { get { return BBox[2]; } set { BBox[2] = value; } } + + public double maxY { get { return BBox[3]; } set { BBox[3] = value; } } + + public double centerX { get { return (BBox[0] + BBox[2]) / 2; } } + + public double centerY { get { return (BBox[1] + BBox[3]) / 2; } } + + public PointF[] vector + { + get + { + return new PointF[] { + new PointF((float)BBox[0],(float)BBox[1]), + new PointF((float)BBox[2],(float)BBox[1]), + new PointF((float)BBox[2],(float)BBox[3]), + new PointF((float)BBox[0],(float)BBox[3]) + }; + } + } + + public PointF[] Enlarge(int km) + { + if (km <= 0) return vector; + double[] box = Enlarge(BBox, km); + return new PointF[] { + new PointF((float)box[0],(float)box[1]), + new PointF((float)box[2],(float)box[1]), + new PointF((float)box[2],(float)box[3]), + new PointF((float)box[0],(float)box[3]) + }; + } + + public override string ToString() + { + return String.Format("{0,-3} - {1} - {2} {3} - {4}", ID, Name, SBox, SCXY, this.File ); + } + + public string SBox + { + get + { + return String.Format(System.Globalization.CultureInfo.InvariantCulture, "[{0:0.000000},{1:0.000000},{2:0.000000},{3:0.000000}]", BBox[0], BBox[1], BBox[2], BBox[3]); + } + } + + public string SCXY + { + get + { + return String.Format(System.Globalization.CultureInfo.InvariantCulture, "[{0:0.000000},{1:0.000000}]", centerX, centerY); + } + } + + private double[] Enlarge(double[] box, double dist_in_km) + { + double[] res = new double[4]; + double lon_min = box[0]; + double lat_min = box[1]; + double lon_max = box[2]; + double lat_max = box[3]; + double d_buttom = 1.0 / (dkxce.Route.Classes.Utils.GetLengthMetersA(lat_min - 1, (lon_min + lon_max) / 2, lat_min, (lon_min + lon_max) / 2, false) / 1000.0) * dist_in_km; + double d_top = 1.0 / (dkxce.Route.Classes.Utils.GetLengthMetersA(lat_max, (lon_min + lon_max) / 2, lat_max + 1, (lon_min + lon_max) / 2, false) / 1000.0) * dist_in_km; + double d_left = 1.0 / (dkxce.Route.Classes.Utils.GetLengthMetersA((lat_min + lat_max) / 2, lon_min - 1, (lat_min + lat_max) / 2, lon_min, false) / 1000.0) * dist_in_km; + double d_right = 1.0 / (dkxce.Route.Classes.Utils.GetLengthMetersA((lat_min + lat_max) / 2, lon_max, (lat_min + lat_max) / 2, lon_max + 1, false) / 1000.0) * dist_in_km; + res = new double[4] { box[0] - d_buttom, box[1] - d_left, box[2] + d_top, box[3] + d_right }; + return res; + } + + } + + public class BoxSorter : IComparer + { + private byte sortBy = 0; // 0 - id , 1 - name + + public BoxSorter(byte sortBy) { this.sortBy = sortBy; } + + public int Compare(BoxRecord a, BoxRecord b) + { + if (sortBy == 1) + { + return a.Name.CompareTo(b.Name); + } + else + { + return a.ID.CompareTo(b.ID); + }; + } + } + + public class ShapeBoxReader + { + public double[] box = new double[4]; + public int shpType = 0; + + private string fileName; + + public ShapeBoxReader(string fileName) + { + this.fileName = fileName; + LoadShapeType(); + } + + private void LoadShapeType() + { + FileStream shapeFileStream = new FileStream(fileName, FileMode.Open, FileAccess.Read); + long shapeFileLength = shapeFileStream.Length; + if (shapeFileLength < 100) + { + shapeFileStream.Close(); + return; + }; + + byte[] shapeFileData = new byte[100]; + shapeFileStream.Read(shapeFileData, 0, shapeFileData.Length); + shapeFileStream.Close(); + + shpType = readIntLittle(shapeFileData, 32); + box[0] = readDoubleLittle(shapeFileData, 36); + box[1] = readDoubleLittle(shapeFileData, 44); + box[2] = readDoubleLittle(shapeFileData, 52); + box[3] = readDoubleLittle(shapeFileData, 60); + } + + public static int readIntLittle(byte[] data, int pos) + { + byte[] bytes = new byte[4]; + bytes[0] = data[pos]; + bytes[1] = data[pos + 1]; + bytes[2] = data[pos + 2]; + bytes[3] = data[pos + 3]; + if (!BitConverter.IsLittleEndian) Array.Reverse(bytes); + return BitConverter.ToInt32(bytes, 0); + } + + public static double readDoubleLittle(byte[] data, int pos) + { + byte[] bytes = new byte[8]; + bytes[0] = data[pos]; + bytes[1] = data[pos + 1]; + bytes[2] = data[pos + 2]; + bytes[3] = data[pos + 3]; + bytes[4] = data[pos + 4]; + bytes[5] = data[pos + 5]; + bytes[6] = data[pos + 6]; + bytes[7] = data[pos + 7]; + if (!BitConverter.IsLittleEndian) Array.Reverse(bytes); + return BitConverter.ToDouble(bytes, 0); + } + + public bool ShapeOk + { + get + { + if (shpType == 3) return true; + if (shpType == 5) return true; + return false; + } + } + } + + [Serializable] + public class AdditionalInformation + { + public int regionID = 0; + public double minX = 0; + public double minY = 0; + public double maxX = 0; + public double maxY = 0; + public string TestMap = null; + public string RegionName = null; + + [XmlIgnore] + public double centerX + { + get + { + return (minX + maxX) / 2; + } + } + + [XmlIgnore] + public double centerY + { + get + { + return (minY + maxY) / 2; + } + } + } +} diff --git a/SOLVER/ShapesBBox2Regions/DBFSharp.cs b/SOLVER/ShapesBBox2Regions/DBFSharp.cs new file mode 100644 index 0000000..8f59e75 --- /dev/null +++ b/SOLVER/ShapesBBox2Regions/DBFSharp.cs @@ -0,0 +1,1190 @@ +// http://www.realcoding.net/articles/struktura-dbf-failov-dlya-neprodvinutykh.html +// http://www.autopark.ru/ASBProgrammerGuide/DBFSTRUC.HTM#Table_9 + +using System; +using System.IO; +using System.Collections; +using System.Collections.Generic; +using System.Text; + +namespace DBFSharp +{ + public class DBFFile: FileStream + { + private const byte MAIN_HEADER_SIZE = 32; + private const byte FIELD_INFO_SIZE = 32; + + private bool _tenHeaderMode = true; + private bool header_exists = false; + private string filename; + private uint records = 0; + private uint _header_space = 0; + + private CodePageSet _cp = CodePageSet.Default; + private FieldInfos _FieldInfos = new FieldInfos(); + public CodePageList CodePages = new CodePageList(); + private MyBitConverter bc = new MyBitConverter(true); + + public bool ShortenFieldNameMode { get { return _tenHeaderMode; } set { _tenHeaderMode = value; } } + + public DBFFile(string fileName) : base(fileName, FileMode.OpenOrCreate, FileAccess.ReadWrite) + { + filename = fileName; + _cp = CodePageSet.Default; + if (this.Length < MAIN_HEADER_SIZE) + WriteHeader(); + else + ReadHeader(0); + } + + public DBFFile(string fileName, byte dbfCodePage) : base(fileName, FileMode.OpenOrCreate, FileAccess.ReadWrite) + { + filename = fileName; + SetCodePage(dbfCodePage); + if (this.Length == 0) + WriteHeader(); + else + ReadHeader(dbfCodePage); + } + + public DBFFile(string fileName, FileMode mode) : base(fileName, mode, FileAccess.ReadWrite) + { + filename = fileName; + _cp = CodePageSet.Default; + if (this.Length < MAIN_HEADER_SIZE) + WriteHeader(); + else + ReadHeader(0); + } + + public DBFFile(string fileName, FileMode mode, byte dbfCodePage): base(fileName, mode, FileAccess.ReadWrite) + { + filename = fileName; + SetCodePage(dbfCodePage); + if (this.Length == 0) + WriteHeader(); + else + ReadHeader(dbfCodePage); + } + + public FieldInfos FieldInfos + { + get + { + return _FieldInfos; + } + } + + public byte FieldsCount + { + get + { + if (_FieldInfos == null) return 0; + if (_FieldInfos.Count == 0) return 0; + return (byte)_FieldInfos.Count; + } + } + + public ushort RecordSize + { + get + { + if (_FieldInfos == null) return 0; + if (_FieldInfos.Count == 0) return 0; + return _FieldInfos.RecordSize; + } + } + + public ushort HeaderSize + { + get + { + if (_FieldInfos == null) return 0; + if (_FieldInfos.Count == 0) return 0; + return (ushort)(_FieldInfos.Count * FIELD_INFO_SIZE + MAIN_HEADER_SIZE + 1 + _header_space); + } + } + + private ushort StdHeaderSize + { + get + { + if (_FieldInfos == null) return 0; + if (_FieldInfos.Count == 0) return 0; + return (ushort)(_FieldInfos.Count * FIELD_INFO_SIZE + MAIN_HEADER_SIZE + 1); + } + } + + public bool HeaderExists + { + get + { + return header_exists; + } + } + + public uint RecordsCount + { + get + { + return records; + } + } + + private void SetCodePage(byte dbfCodePage) + { + _cp = CodePages[dbfCodePage]; + if (_cp.headerCode == 0) + { + base.Close(); + throw new Exception("Unknown Code Page"); + }; + try + { + if (_cp.Encoding == null) + { + base.Close(); + throw new Exception("Unknown Code Page " + _cp.codePage); + }; + } + catch (Exception ex) + { + base.Close(); + throw new Exception("Unknown Code Page "+_cp.codePage+"\r\n"+ex.Message); + }; + } + + private void ReadHeader(byte dbfCodePage) + { + byte[] buff; + // records count + this.Position = 4; + buff = new byte[4]; + this.Read(buff, 0, buff.Length); + records = bc.ToUInt32(buff, 0); + // header size + buff = new byte[2]; + this.Read(buff, 0, buff.Length); + ushort hdr_size = bc.ToUInt16(buff, 0); + // record size + this.Read(buff, 0, buff.Length); + ushort rec_size = bc.ToUInt16(buff, 0); + // code page + this.Position = 29; + byte cod_page = (byte)this.ReadByte(); + this.SetCodePage(dbfCodePage > 0 ? dbfCodePage : (cod_page > 0 ? cod_page : (byte)201)); + // read fields + this.Position = 32; + _FieldInfos = new FieldInfos(); + int tb = hdr_size - 2; + while (this.Position < tb) + { + buff = new byte[11]; + this.Read(buff, 0, buff.Length); + string fName = _cp.Encoding.GetString(buff).Trim('\0').Trim(); + byte ft = (byte)this.ReadByte(); + buff = new byte[4]; + this.Read(buff, 0, buff.Length); + int offset = bc.ToInt32(buff, 0); + byte fsize = (byte)this.ReadByte(); + byte dpnt = (byte)this.ReadByte(); + buff = new byte[14]; + this.Read(buff, 0, buff.Length); + FieldInfo fi = new FieldInfo(fName, fsize, dpnt, (FieldType)ft); + fi.offset = (ushort)offset; + _FieldInfos.Add(fi); + }; + this._header_space = (uint)hdr_size - this.StdHeaderSize; + this.Position = hdr_size; + header_exists = true; + } + + private void WriteHeader() + { + byte[] buff = new byte[0]; + this.Position = 0; + this.WriteByte(0x03); // 0 - TYPE + MEMO 0x83 + this.WriteByte((byte)(DateTime.UtcNow.Year % 100)); // 1 - YY + this.WriteByte((byte)DateTime.UtcNow.Month); // 2 - MM + this.WriteByte((byte)DateTime.UtcNow.Day); // 3 - DD + buff = bc.GetBytes((uint)0); + this.Write(buff, 0, buff.Length); // 4 - records count + buff = bc.GetBytes((ushort)0); + this.Write(buff, 0, buff.Length); // 8 - header size + buff = bc.GetBytes((ushort)0); + this.Write(buff, 0, buff.Length); // 10 - record size + this.WriteByte(0x00); // 12 - Reserved + this.WriteByte(0x00); // 13 - Reserved + this.WriteByte(0x00); // 14 - Ignored + this.WriteByte(0x00); // 15 - Normal + buff = new byte[12]; + this.Write(buff, 0, buff.Length); // 16 - reserved + this.WriteByte(0x00); // 28 - No Index + this.WriteByte((byte)_cp.headerCode); // 29 - Code Page + this.WriteByte(0x00); // 30 - Reserved + this.WriteByte(0x00); // 31 - Reserved + } + + public void WriteHeader(FieldInfos fields) + { + if (this.records > 0) throw new Exception("Can't write header if any records exists"); + _FieldInfos = fields; + WriteHeader(); + + byte[] buff = new byte[0]; + ushort hdr_size = MAIN_HEADER_SIZE + 1; + int mhl = 0; + + fields.ReIndex(); + for (int i = 0; i < fields.Count; i++) + { + buff = fields[i].BName(_cp.Encoding); + if (fields[i].GName.Length > 11) + buff[10] = (byte)(0x41 + (mhl++)); + if(_tenHeaderMode) buff[10] = 0; + this.Write(buff, 0, buff.Length); // 0 - Field Name + buff = new byte[] { (byte)fields[i].FType }; + this.Write(buff, 0, buff.Length); // 11 - Field Type + buff = bc.GetBytes((int)fields[i].offset); + this.Write(buff, 0, buff.Length); // 12 - Field Offset + this.WriteByte((byte)fields[i].FLength); // 16 - Field Size + this.WriteByte((byte)fields[i].FDecimalPoint); // 17 - No Decimal Point + buff = new byte[14]; + this.Write(buff, 0, buff.Length); // 18 - Reserved + + hdr_size += FIELD_INFO_SIZE; + }; + this.WriteByte(13); //TERMINAL BYTE + this.WriteByte(26); //TERMINAL BYTE + + this.Position = 8; + buff = bc.GetBytes(hdr_size); // header size + this.Write(buff, 0, buff.Length); + buff = bc.GetBytes(fields.RecordSize); // record size + this.Write(buff, 0, buff.Length); + + this.Position = hdr_size; + header_exists = true; + } + + private bool WriteData(Dictionary record, long position) + { + if (!header_exists) throw new Exception("Header doesn't created or exists"); + if (record == null) return false; + if (record.Count == 0) return false; + if ((_FieldInfos == null) || (_FieldInfos.Count == 0)) return false; + + _FieldInfos.ZeroValues(); + foreach (KeyValuePair kvp in record) + { + FieldInfo fi = _FieldInfos[kvp.Key]; + if (fi != null) + fi.FValue = kvp.Value; + }; + + this.Position = position; + this.WriteByte(0x20); //_BEGIN RECORD_ // + + for (int i = 0; i < _FieldInfos.Count; i++) + { + byte[] def = new byte[_FieldInfos[i].FLength]; + if ((_FieldInfos[i].FType == FieldType.Numeric) || (_FieldInfos[i].FType == FieldType.Float)) + { + for (int x = 0; x < def.Length; x++) + def[x] = (byte)' '; + if (_FieldInfos[i].FValue != null) + { + string ddd = _FieldInfos[i].FLength.ToString(); + string nf = "{0,-" + ddd + "}"; + if (_FieldInfos[i].FDecimalPoint > 0) { nf = "{0,-" + ddd + ":0."; for (int x = 0; x < _FieldInfos[i].FDecimalPoint; x++) nf += "0"; nf += "}"; }; + byte[] buff = _cp.Encoding.GetBytes(String.Format(System.Globalization.CultureInfo.InvariantCulture,nf, _FieldInfos[i].FValue)); + if (buff.Length > def.Length) + throw new Exception("Numeric Value is too large: " + _FieldInfos[i].FValue.ToString()); + Array.Copy(buff, 0, def, def.Length - buff.Length, buff.Length); + }; + }; + if ((_FieldInfos[i].FType == FieldType.Memo) || (_FieldInfos[i].FType == FieldType.Binary) || (_FieldInfos[i].FType == FieldType.General) || (_FieldInfos[i].FType == FieldType.Picture)) + { + for (int x = 0; x < def.Length; x++) + def[x] = (byte)' '; + if (_FieldInfos[i].FValue != null) + { + byte[] buff = _cp.Encoding.GetBytes(_FieldInfos[i].FValue.ToString().Replace(",", ".")); + if (buff.Length > def.Length) + throw new Exception("Meme Value is too large: " + _FieldInfos[i].FValue.ToString()); + Array.Copy(buff, 0, def, def.Length - buff.Length, buff.Length); + }; + }; + if (_FieldInfos[i].FType == FieldType.Integer) + { + def = bc.GetBytes((int)_FieldInfos[i].FValue); + }; + if (_FieldInfos[i].FType == FieldType.Character) + { + if (_FieldInfos[i].FValue != null) + { + byte[] buff = _cp.Encoding.GetBytes(_FieldInfos[i].FValue.ToString()); + if (buff.Length > def.Length) + Array.Copy(buff, def, def.Length); + else + Array.Copy(buff, def, buff.Length); + } + else + { + byte[] buff = new byte[def.Length]; + Array.Copy(buff, def, def.Length); + }; + }; + if (_FieldInfos[i].FType == FieldType.Logical) + { + byte[] buff = new byte[] { (_FieldInfos[i].FValue == null) || (((bool)_FieldInfos[i].FValue) != true) ? (byte)((char)'F') : (byte)((char)'T')}; + if (buff.Length > def.Length) + Array.Copy(buff, def, def.Length); + else + Array.Copy(buff, def, buff.Length); + }; + if (_FieldInfos[i].FType == FieldType.Date) + { + for (int x = 0; x < def.Length; x++) + def[x] = (byte)' '; + if ((_FieldInfos[i].FValue != null) && (_FieldInfos[i].FValue is DateTime)) + { + byte[] buff = _cp.Encoding.GetBytes(((DateTime)_FieldInfos[i].FValue).ToString("yyyyMMdd")+" "); + Array.Copy(buff, 0, def, def.Length - buff.Length, buff.Length); + }; + }; + if (_FieldInfos[i].FType == FieldType.DateTime) + { + for (int x = 0; x < def.Length; x++) + def[x] = (byte)' '; + if ((_FieldInfos[i].FValue != null) && (_FieldInfos[i].FValue is DateTime)) + { + byte[] buff = _cp.Encoding.GetBytes(((DateTime)_FieldInfos[i].FValue).ToString("yyyyMMddHHmmss")); + Array.Copy(buff, 0, def, def.Length - buff.Length, buff.Length); + }; + }; + this.Write(def, 0, def.Length); + }; + return true; + } + + public uint WriteRecord(Dictionary record) + { + long pos = (long)this.HeaderSize + (long)this.records * (long)this.RecordSize; + bool res = WriteData(record, pos); + if (res) return this.records++; + return 0; + } + + public uint WriteRecord(object[] record) + { + if ((record == null) || (record.Length == 0)) return 0; + if ((_FieldInfos == null) || (_FieldInfos.Count == 0)) return 0; + Dictionary rec = new Dictionary(); + for (int i = 0; (i < record.Length) && (i < _FieldInfos.Count); i++) + rec.Add(_FieldInfos[i].FName, record[i]); + return WriteRecord(rec); + } + + public uint WriteRecord(uint index, Dictionary record) + { + if (index < 1) return 0; + + uint tmpi = index - 1; + if (tmpi > this.records) return 0; + long pos = (long)this.HeaderSize + (long)tmpi * (long)this.RecordSize; + bool res = WriteData(record, pos); + if (res) return tmpi == this.records ? ++this.records : index; + return 0; + } + + public uint WriteRecord(uint index, object[] record) + { + if ((record == null) || (record.Length == 0)) return 0; + if ((_FieldInfos == null) || (_FieldInfos.Count == 0)) return 0; + Dictionary rec = new Dictionary(); + for (int i = 0; (i < record.Length) && (i < _FieldInfos.Count); i++) + rec.Add(_FieldInfos[i].FName, record[i]); + return WriteRecord(index, rec); + } + + public uint WriteRecord(Dictionary record, long position) + { + ushort hs = HeaderSize; + ushort rs = RecordSize; + if (position < hs) return 0; + if (position > this.Length) return 0; + uint index = 1; + for (long i = hs; i < this.Length; i += (long)RecordSize, index++) + { + if (position == i) return WriteRecord(record, index); + if (position < i) break; + }; + return 0; + } + + public uint WriteRecord(object[] record, long position) + { + if ((record == null) || (record.Length == 0)) return 0; + if ((_FieldInfos == null) || (_FieldInfos.Count == 0)) return 0; + Dictionary rec = new Dictionary(); + for (int i = 0; (i < record.Length) && (i < _FieldInfos.Count); i++) + rec.Add(_FieldInfos[i].FName, record[i]); + return WriteRecord(rec, position); + } + + private Dictionary ReadData() + { + byte x20 = (byte)this.ReadByte(); //_BEGIN OF RECORD_ // + if (x20 != 0x20) return null; + + Dictionary result = new Dictionary(); + + for (int i = 0; i < _FieldInfos.Count; i++) + { + byte[] def = new byte[_FieldInfos[i].FLength]; + this.Read(def, 0, def.Length); + string dv = _cp.Encoding.GetString(def).Trim('\0').Trim(); + object val = dv; + + if (_FieldInfos[i].FType == FieldType.Numeric) + { + int tmi; long tml; float tmf; double tmd; + if (int.TryParse(dv, out tmi)) + val = tmi; + else if (long.TryParse(dv, out tml)) + val = tml; + else if (float.TryParse(dv, System.Globalization.NumberStyles.Any, System.Globalization.CultureInfo.InvariantCulture, out tmf)) + val = tmf; + else if (double.TryParse(dv, System.Globalization.NumberStyles.Any, System.Globalization.CultureInfo.InvariantCulture, out tmd)) + val = tmd; + }; + if (_FieldInfos[i].FType == FieldType.Float) + { + float tmf; double tmd; + if (float.TryParse(dv, System.Globalization.NumberStyles.Any, System.Globalization.CultureInfo.InvariantCulture, out tmf)) + val = tmf; + else if (double.TryParse(dv, System.Globalization.NumberStyles.Any, System.Globalization.CultureInfo.InvariantCulture, out tmd)) + val = tmd; + }; + if ((_FieldInfos[i].FType == FieldType.Memo) || (_FieldInfos[i].FType == FieldType.Binary) || (_FieldInfos[i].FType == FieldType.General) || (_FieldInfos[i].FType == FieldType.Picture)) + { + int tmi; long tml; + if (int.TryParse(dv, out tmi)) + val = tmi; + else if (long.TryParse(dv, out tml)) + val = tml; + }; + if (_FieldInfos[i].FType == FieldType.Integer) + { + val = bc.ToInt32(def, 0); + }; + // if (_FieldInfos[i].FType == FieldType.Characters) { }; + if (_FieldInfos[i].FType == FieldType.Logical) val = dv == "T"; + if (_FieldInfos[i].FType == FieldType.Date) + { + DateTime dt; + if(DateTime.TryParseExact(dv,"yyyyMMdd", null, System.Globalization.DateTimeStyles.None, out dt)) + val = dt; + }; + if (_FieldInfos[i].FType == FieldType.DateTime) + { + DateTime dt; + if (DateTime.TryParseExact(dv, "yyyyMMddHHmmss", null, System.Globalization.DateTimeStyles.None, out dt)) + val = dt; + }; + result.Add(_FieldInfos[i].FName, val); + }; + + return result; + } + + public Dictionary ReadRecord(uint index) + { + if (records == 0) return null; + + uint tmpi = index - 1; + if (tmpi > this.records) return null; + + this.Position = (long)this.HeaderSize + (long)tmpi * (long)this.RecordSize; + return ReadData(); + } + + public Dictionary ReadNext() + { + if (records == 0) return null; + if(this.Position < this.HeaderSize) this.Position = (long)this.HeaderSize; + return ReadData(); + } + + public System.Collections.Generic.IEnumerable> ReadAllRecords() + { + if (this.records > 0) + { + this.Position = this.HeaderSize; + for (uint i = 1; i <= records; i++) + yield return ReadData(); + }; + } + + public Dictionary this[uint index] + { + get { return ReadRecord(index); } + set { WriteRecord(index, value); } + } + + private void WriteRecordsCount() + { + long pos = this.Position; + this.Position = 4; + byte[] buff = bc.GetBytes(records); + this.Write(buff, 0, buff.Length); + this.Position = pos; + } + + public override void Close() + { + WriteRecordsCount(); + this.Position = (long)this.HeaderSize + (long)this.records * (long)this.RecordSize; + WriteByte(26); // TERMINAL BYTE + base.Close(); + } + } + + public enum FieldType : byte + { + Numeric = (byte)'N', + Float = (byte)'F', + Character = (byte)'C', + Logical = (byte)'L', + Date = (byte)'D', + Memo = (byte)'M', + Binary = (byte)'B', + General = (byte)'G', + Picture = (byte)'P', + Integer = (byte)'I', + DateTime = (byte)'T' + } + + public class FieldInfo + { + public string FName; + public byte FLength; + public byte FDecimalPoint = 0; + public FieldType FType; + + internal ushort offset = 0; + internal object FValue = null; + + public FieldInfo(string fName, byte fLength, FieldType fType) + { + this.FName = fName; + this.FLength = fLength; + this.FType = fType; + } + + public FieldInfo(string fName, byte fLength, byte fDecimalPoint, FieldType fType) + { + this.FName = fName; + this.FLength = fLength; + this.FType = fType; + this.FDecimalPoint = fDecimalPoint; + } + + public string GName + { + get + { + return this.FName.ToUpper(); + } + } + + public byte[] BName(Encoding encoding) + { + byte[] res = new byte[11]; + byte[] bb = encoding.GetBytes(this.GName); + for (int i = 0; (i < bb.Length) && (i < res.Length); i++) + res[i] = bb[i]; + return res; + } + } + + public class FieldInfos : List + { + public void Add(FieldInfo fi) + { + if (this.Count > 0) + foreach (FieldInfo ff in this) + if (ff.FName.ToUpper() == fi.FName.ToUpper()) + throw new Exception(String.Format("Field with name {0} already exists.", ff.FName)); + CheckValidLength(fi.FType, ref fi.FLength, ref fi.FDecimalPoint); + base.Add(fi); + } + + public void Add(string fName, byte fLength, FieldType fType) + { + if (this.Count > 0) + foreach (FieldInfo ff in this) + if (ff.FName.ToUpper() == fName.ToUpper()) + throw new Exception(String.Format("Field with name {0} already exists.", ff.FName)); + CheckValidLength(fType, ref fLength); + this.Add(new FieldInfo(fName, fLength, fType)); + } + + public void Add(string fName, byte fLength, byte fDecimalPoint, FieldType fType) + { + if (this.Count > 0) + foreach (FieldInfo ff in this) + if (ff.FName.ToUpper() == fName.ToUpper()) + throw new Exception(String.Format("Field with name {0} already exists.", ff.FName)); + CheckValidLength(fType, ref fLength, ref fDecimalPoint); + this.Add(new FieldInfo(fName, fLength, fDecimalPoint, fType)); + } + + public ushort RecordSize + { + get + { + int res = 1; + if (this.Count > 0) + for (int i = 0; i < this.Count; i++) + res += this[i].FLength; + if (res > ushort.MaxValue) + throw new Exception("Record size is too big! Max allowed size is " + ushort.MaxValue.ToString()); + return (ushort)res; + } + } + + public FieldInfo this[string fieldName] + { + get + { + if (this.Count > 0) + for (int i = 0; i < this.Count; i++) + if (fieldName == this[i].FName) + return this[i]; + return null; + } + } + + internal void ReIndex() + { + ushort res = 1; + if (this.Count > 0) + for (int i = 0; i < this.Count; i++) + { + this[i].offset = res; + res += this[i].FLength; + }; + } + + internal void ZeroValues() + { + if (this.Count > 0) + for (int i = 0; i < this.Count; i++) + this[i].FValue = null; + } + + private void CheckValidLength(FieldType fType, ref byte fLength) + { + byte fdc = 0; + CheckValidLength(fType, ref fLength, ref fdc); + } + + private void CheckValidLength(FieldType fType, ref byte fLength, ref byte fDecimalPoint) + { + switch (fType) + { + case FieldType.Numeric: + case FieldType.Float: + if (fLength > 20) fLength = 20; + if (fDecimalPoint >= fLength) fDecimalPoint = (byte)(fLength - 1); + break; + case FieldType.Character: + fDecimalPoint = 0; + break; + case FieldType.Logical: + fDecimalPoint = 0; + fLength = 1; + break; + case FieldType.Date: + case FieldType.Memo: + case FieldType.Binary: + case FieldType.General: + case FieldType.Picture: + fDecimalPoint = 0; + fLength = 10; + break; + case FieldType.Integer: + fDecimalPoint = 0; + fLength = 4; + break; + case FieldType.DateTime: + fDecimalPoint = 0; + fLength = 14; + break; + }; + } + } + + public class CodePageSet + { + public byte headerCode = 0; + public int codePage = 0; + public string codeName = "UNKNOWN"; + + public Encoding Encoding + { + get + { + return System.Text.Encoding.GetEncoding(codePage); + } + } + + public CodePageSet(){} + + public static CodePageSet Default + { + get + { + CodePageSet result = new CodePageSet(); + result.headerCode = 201; + result.codePage = 1251; + result.codeName = @"Russian Windows \ Windows-1251 [0xC9]"; + return result; + } + } + + public override string ToString() + { + return codeName; + } + } + + public class CodePageList : List + { + public CodePageList() + { + this.Add(204, 01257, "Baltic Windows"); + this.Add(079, 00950, "Chinese Big5 (Taiwan)"); + this.Add(077, 00936, "Chinese GBK (PRC)"); + this.Add(122, 00936, "PRC GBK"); + this.Add(031, 00852, "Czech OEM"); + this.Add(008, 00865, "Danish OEM"); + this.Add(009, 00437, "Dutch OEM"); + this.Add(010, 00850, "Dutch OEM*"); + this.Add(025, 00437, "English OEM (Great Britain)"); + this.Add(026, 00850, "English OEM (Great Britain)*"); + this.Add(027, 00437, "English OEM (US)"); + this.Add(055, 00850, "English OEM (US)*"); + this.Add(200, 01250, "Eastern European Windows"); + this.Add(100, 00852, "Eastern European MS-DOS"); + this.Add(151, 10029, "Eastern European Macintosh"); + this.Add(011, 00437, "Finnish OEM"); + this.Add(013, 00437, "French OEM"); + this.Add(014, 00850, "French OEM*"); + this.Add(029, 00850, "French OEM*2"); + this.Add(028, 00863, "French OEM (Canada)"); + this.Add(108, 00863, "French-Canadian MS-DOS"); + this.Add(015, 00437, "German OEM"); + this.Add(016, 00850, "German OEM*"); + this.Add(203, 01253, "Greek Windows"); + this.Add(106, 00737, "Greek MS-DOS (437G)"); + this.Add(134, 00737, "Greek OEM"); + this.Add(152, 00006, "Greek Macintosh"); + this.Add(121, 00949, "Hangul (Wansung)"); + this.Add(034, 00852, "Hungarian OEM"); + this.Add(103, 00861, "Icelandic MS-DOS"); + this.Add(017, 00437, "Italian OEM"); + this.Add(018, 00850, "Italian OEM*"); + this.Add(019, 00932, "Japanese Shift-JIS"); + this.Add(123, 00932, "Japanese Shift-JIS 2"); + this.Add(104, 00895, "Kamenicky (Czech) MS-DOS"); + this.Add(078, 00949, "Korean (ANSI/OEM)"); + this.Add(105, 00620, "Mazovia (Polish) MS-DOS"); + this.Add(102, 00865, "Nordic MS-DOS"); + this.Add(023, 00865, "Norwegian OEM"); + this.Add(035, 00852, "Polish OEM"); + this.Add(036, 00860, "Portuguese OEM"); + this.Add(037, 00850, "Portuguese OEM*"); + this.Add(064, 00852, "Romanian OEM"); + this.Add(201, 01251, "Russian Windows"); + this.Add(101, 00866, "Russian MS-DOS"); + this.Add(038, 00866, "Russian OEM"); + this.Add(150, 10007, "Russian Macintosh"); + this.Add(135, 00852, "Slovenian OEM"); + this.Add(089, 01252, "Spanish ANSI"); + this.Add(020, 00850, "Spanish OEM*"); + this.Add(021, 00437, "Swedish OEM"); + this.Add(022, 00850, "Swedish OEM*"); + this.Add(024, 00437, "Spanish OEM"); + this.Add(087, 01250, "Standard ANSI"); + this.Add(003, 01252, "Standard Windows ANSI Latin I"); + this.Add(002, 00850, "Standard International MS-DOS"); + this.Add(004, 10000, "Standard Macintosh"); + this.Add(120, 00950, "Taiwan Big 5"); + this.Add(080, 00874, "Thai (ANSI/OEM)"); + this.Add(124, 00874, "Thai Windows/MS–DOS"); + this.Add(202, 01254, "Turkish Windows"); + this.Add(107, 00857, "Turkish MS-DOS"); + this.Add(136, 00857, "Turkish OEM"); + this.Add(001, 00437, "US MS-DOS"); + this.Add(088, 01252, "Western European ANSI"); + this.Add(255, 01251, "Default Unknown"); + } + + private void Add(byte headerCode, int codePage, string codeName) + { + CodePageSet cpc = new CodePageSet(); + cpc.headerCode = headerCode; + cpc.codePage = codePage; + try + { + cpc.codeName = codeName + " "; + Encoding enc = System.Text.Encoding.GetEncoding(cpc.codePage); + if ((enc.EncodingName.ToUpper().IndexOf("DOS") >= 0) && (enc.EncodingName.ToUpper().IndexOf("WINDOWS") < 0) && (enc.EncodingName.ToUpper().IndexOf("OEM") < 0)) + cpc.codeName += @"\ DOS-" + cpc.codePage.ToString() + @" \ " + enc.EncodingName; + else if ((enc.EncodingName.ToUpper().IndexOf("DOS") < 0) && (enc.EncodingName.ToUpper().IndexOf("WINDOWS") >= 0) && (enc.EncodingName.ToUpper().IndexOf("OEM") < 0)) + cpc.codeName += @"\ Windows-" + cpc.codePage.ToString() + @" \ " + enc.EncodingName; + else if ((enc.EncodingName.ToUpper().IndexOf("DOS") < 0) && (enc.EncodingName.ToUpper().IndexOf("WINDOWS") < 0) && (enc.EncodingName.ToUpper().IndexOf("OEM") >= 0)) + cpc.codeName += @"\ OEM-" + cpc.codePage.ToString() + @" \ " + enc.EncodingName; + else + cpc.codeName += @" \ " + enc.EncodingName; + } + catch + { + cpc.codeName = codeName + @" \ --**--UNKNOWN--**-- "; + }; + cpc.codeName += String.Format(@" -- 0x{0:X2}", cpc.headerCode); + this.Add(cpc); + } + + public CodePageSet this[byte headerCode] + { + get + { + if (this.Count == 0) return new CodePageSet(); + foreach (CodePageSet cpc in this) + if (cpc.headerCode == headerCode) + return cpc; + return new CodePageSet(); + } + } + + public CodePageSet this[int codePage] + { + get + { + if (this.Count == 0) return new CodePageSet(); + foreach (CodePageSet cpc in this) + if (cpc.codePage == codePage) + return cpc; + return new CodePageSet(); + } + } + + public CodePageSet this[string codeName] + { + get + { + if (this.Count == 0) return new CodePageSet(); + foreach (CodePageSet cpc in this) + if (cpc.codeName == codeName) + return cpc; + return new CodePageSet(); + } + } + } + + public class MyBitConverter + { + public MyBitConverter() {} + + public MyBitConverter(bool IsLittleEndian) { this.isLittleEndian = IsLittleEndian; } + + private bool isLittleEndian = true; + + public bool IsLittleEndian { get { return isLittleEndian; } set { isLittleEndian = value; } } // should default to false, which is what we want for Empire + + public byte[] GetBytes(bool value) + { + if (IsLittleEndian) + { + return System.BitConverter.GetBytes(value); + } + else + { + byte[] res = System.BitConverter.GetBytes(value); + Array.Reverse(res); + return res; + } + } + + public byte[] GetBytes(char value) + { + if (IsLittleEndian) + { + return System.BitConverter.GetBytes(value); + } + else + { + byte[] res = System.BitConverter.GetBytes(value); + Array.Reverse(res); + return res; + } + } + + public byte[] GetBytes(double value) + { + if (IsLittleEndian) + { + return System.BitConverter.GetBytes(value); + } + else + { + byte[] res = System.BitConverter.GetBytes(value); + Array.Reverse(res); + return res; + } + } + + public byte[] GetBytes(float value) + { + if (IsLittleEndian) + { + return System.BitConverter.GetBytes(value); + } + else + { + byte[] res = System.BitConverter.GetBytes(value); + Array.Reverse(res); + return res; + } + } + + public byte[] GetBytes(int value) + { + if (IsLittleEndian) + { + return System.BitConverter.GetBytes(value); + } + else + { + byte[] res = System.BitConverter.GetBytes(value); + Array.Reverse(res); + return res; + } + } + + public byte[] GetBytes(long value) + { + if (IsLittleEndian) + { + return System.BitConverter.GetBytes(value); + } + else + { + byte[] res = System.BitConverter.GetBytes(value); + Array.Reverse(res); + return res; + } + } + + public byte[] GetBytes(short value) + { + if (IsLittleEndian) + { + return System.BitConverter.GetBytes(value); + } + else + { + byte[] res = System.BitConverter.GetBytes(value); + Array.Reverse(res); + return res; + } + } + + public byte[] GetBytes(uint value) + { + if (IsLittleEndian) + { + return System.BitConverter.GetBytes(value); + } + else + { + byte[] res = System.BitConverter.GetBytes(value); + Array.Reverse(res); + return res; + } + } + + public byte[] GetBytes(ulong value) + { + if (IsLittleEndian) + { + return System.BitConverter.GetBytes(value); + } + else + { + byte[] res = System.BitConverter.GetBytes(value); + Array.Reverse(res); + return res; + } + } + + public byte[] GetBytes(ushort value) + { + if (IsLittleEndian) + { + return System.BitConverter.GetBytes(value); + } + else + { + byte[] res = System.BitConverter.GetBytes(value); + Array.Reverse(res); + return res; + } + } + + public short ToInt16(byte[] value, int startIndex) + { + if (IsLittleEndian) + { + return System.BitConverter.ToInt16(value, startIndex); + } + else + { + byte[] res = (byte[])value.Clone(); + Array.Reverse(res); + return System.BitConverter.ToInt16(res, value.Length - sizeof(Int16) - startIndex); + } + } + + public int ToInt32(byte[] value, int startIndex) + { + if (IsLittleEndian) + { + return System.BitConverter.ToInt32(value, startIndex); + } + else + { + byte[] res = (byte[])value.Clone(); + Array.Reverse(res); + return System.BitConverter.ToInt32(res, value.Length - sizeof(Int32) - startIndex); + } + } + + public long ToInt64(byte[] value, int startIndex) + { + if (IsLittleEndian) + { + return System.BitConverter.ToInt64(value, startIndex); + } + else + { + byte[] res = (byte[])value.Clone(); + Array.Reverse(res); + return System.BitConverter.ToInt64(res, value.Length - sizeof(Int64) - startIndex); + } + } + + public float ToSingle(byte[] value, int startIndex) + { + if (IsLittleEndian) + { + return System.BitConverter.ToSingle(value, startIndex); + } + else + { + byte[] res = (byte[])value.Clone(); + Array.Reverse(res); + return System.BitConverter.ToSingle(res, value.Length - sizeof(Single) - startIndex); + } + } + + public string ToString(byte[] value) + { + if (IsLittleEndian) + { + return System.BitConverter.ToString(value); + } + else + { + byte[] res = (byte[])value.Clone(); + Array.Reverse(res); + return System.BitConverter.ToString(res); + } + } + + public string ToString(byte[] value, int startIndex) + { + if (IsLittleEndian) + { + return System.BitConverter.ToString(value, startIndex); + } + else + { + byte[] res = (byte[])value.Clone(); + Array.Reverse(res, startIndex, value.Length - startIndex); + return System.BitConverter.ToString(res, startIndex); + } + } + + public string ToString(byte[] value, int startIndex, int length) + { + if (IsLittleEndian) + { + return System.BitConverter.ToString(value, startIndex, length); + } + else + { + byte[] res = (byte[])value.Clone(); + Array.Reverse(res, startIndex, length); + return System.BitConverter.ToString(res, startIndex, length); + } + } + + public ushort ToUInt16(byte[] value, int startIndex) + { + if (IsLittleEndian) + { + return System.BitConverter.ToUInt16(value, startIndex); + } + else + { + byte[] res = (byte[])value.Clone(); + Array.Reverse(res); + return System.BitConverter.ToUInt16(res, value.Length - sizeof(UInt16) - startIndex); + } + } + + + public uint ToUInt32(byte[] value, int startIndex) + { + if (IsLittleEndian) + { + return System.BitConverter.ToUInt32(value, startIndex); + } + else + { + byte[] res = (byte[])value.Clone(); + Array.Reverse(res); + return System.BitConverter.ToUInt32(res, value.Length - sizeof(UInt32) - startIndex); + } + } + + public ulong ToUInt64(byte[] value, int startIndex) + { + if (IsLittleEndian) + { + return System.BitConverter.ToUInt64(value, startIndex); + } + else + { + byte[] res = (byte[])value.Clone(); + Array.Reverse(res); + return System.BitConverter.ToUInt64(res, value.Length - sizeof(UInt64) - startIndex); + } + } + } +} diff --git a/SOLVER/ShapesBBox2Regions/InputBox.cs b/SOLVER/ShapesBBox2Regions/InputBox.cs new file mode 100644 index 0000000..8039a27 --- /dev/null +++ b/SOLVER/ShapesBBox2Regions/InputBox.cs @@ -0,0 +1,2987 @@ +////////////////////////////////////////////////////////////////////////////////////// +////////////////////////////////////////////////////////////////////////////////////// +// +// Milok Zbrozek InputBox Class +// milokz@gmail.com +// Last Modified: 30.09.2021 +// +QueryPass +// +QueryDateTime +// +////////////////////////////////////////////////////////////////////////////////////// +////////////////////////////////////////////////////////////////////////////////////// + +using System; +using System.IO; +using System.Collections.Generic; +using System.Drawing; +using System.Text; +using System.Text.RegularExpressions; +using System.Windows; +using System.Windows.Forms; + +namespace System.Windows.Forms +{ + public class InputBox + { + public static string pOk_Text = "OK"; + public static string pCancel_Text = "Cancel"; + public static string pOk_Yes = "Yes"; + public static string pOk_No = "No"; + public static string pOk_Abort = "Ïðåðâàòü"; + public static string pOk_Retry = "Ïîâòîð"; + public static string pOk_Ignore = "Ïðîïóñê"; + public static bool pShowInTaskBar = false; + public static int defWidth = 300; + + private string _title; + private string _promptText; + private string[] _values; + private int _valueIndex = 0; + private string _prevValue; + private bool _readOnly; + private string _inputMaskOrRegex; + private System.Drawing.Image _icon; + private ImageList _imlist; + private DialogResult _result = DialogResult.None; + private object[] _additData = new object[6]; + + public string Title + { + get + { + return _title; + } + set + { + _title = value; + } + } + public string PromptText + { + get + { + return this._promptText; + } + set + { + this._promptText = value; + } + } + public string Value + { + get + { + return _values[this._valueIndex]; + } + set + { + if (_values.Length == 1) + this._values[0] = value; + else + { + for (int i = 0; i < this._values.Length; i++) + if (this._values[i] == value) + this._valueIndex = i; + }; + } + } + public string[] Values + { + get + { + return this._values; + } + set + { + if (value == null) throw new Exception("Invalid length"); + if (value.Length == 0) throw new Exception("Invalid length"); + this._values = value; + this._valueIndex = 0; + } + } + public int SelectedIndex + { + get + { + return this._valueIndex; + } + set + { + if ((this._values.Length > 1) && (value >= 0) && (value < this._values.Length)) + this._valueIndex = value; + } + } + public bool ReadOnly + { + get + { + return _readOnly; + } + set + { + this._readOnly = value; + } + } + public string InputMaskOrRegex + { + get + { + return this._inputMaskOrRegex; + } + set + { + this._inputMaskOrRegex = value; + } + } + public string InputMask + { + get + { + if (String.IsNullOrEmpty(this._inputMaskOrRegex)) + return this._inputMaskOrRegex; + + string[] mr = this._inputMaskOrRegex.Split(new char[] { '\0' }, 2); + for (int i = 0; i < mr.Length; i++) + if (mr[i].StartsWith("M")) + return mr[i].Substring(1); + return ""; + } + set + { + this._inputMaskOrRegex = "M" + value; + } + } + public string InputRegex + { + get + { + if (String.IsNullOrEmpty(this._inputMaskOrRegex)) + return this._inputMaskOrRegex; + + string[] mr = this._inputMaskOrRegex.Split(new char[] { '\0' }, 2); + for (int i = 0; i < mr.Length; i++) + if (mr[i].StartsWith("R")) + return mr[i].Substring(1); + return ""; + } + set + { + this._inputMaskOrRegex = "R" + value; + } + } + public ImageList IconList + { + get + { + return this._imlist; + } + set + { + this._imlist = value; + } + } + public System.Drawing.Image Icon + { + get + { + return this._icon; + } + set + { + this._icon = value; + } + } + public DialogResult Result + { + get + { + return _result; + } + } + + private InputBox(string Title, string PromptText) + { + this._title = Title; + this._promptText = PromptText; + } + + private InputBox(string Title, string PromptText, string Value) + { + this._title = Title; + this._promptText = PromptText; + this._values = new string[] { Value }; + } + + private InputBox(string Title, string PromptText, string[] Values) + { + this._title = Title; + this._promptText = PromptText; + this.Values = Values; + } + + private InputBox(string Title, string PromptText, string[] Values, int SelectedIndex) + { + this._title = Title; + this._promptText = PromptText; + this.Values = Values; + this.SelectedIndex = SelectedIndex; + } + + private DialogResult Show() + { + if (this._values.Length == 1) + return ShowMaskedTextBoxed(); + else + return ShowComboBoxed(); + } + + private DialogResult ShowNumericBoxed(ref int val, int min, int max) + { + Form form = new InputBoxForm(); + form.ShowInTaskbar = pShowInTaskBar; + Label label = new Label(); + NumericUpDown digitBox = new NumericUpDown(); + Button buttonOk = new Button(); + Button buttonCancel = new Button(); + PictureBox picture = new PictureBox(); + + form.Text = _title; + label.Text = _promptText; + digitBox.BorderStyle = BorderStyle.FixedSingle; + digitBox.Minimum = min; + digitBox.Maximum = max; + digitBox.Value = val; + digitBox.Select(0, digitBox.Value.ToString().Length); + if (_icon != null) picture.Image = _icon; + picture.SizeMode = PictureBoxSizeMode.StretchImage; + + buttonOk.Text = pOk_Text; + buttonCancel.Text = pCancel_Text; + buttonOk.DialogResult = DialogResult.OK; + buttonCancel.DialogResult = DialogResult.Cancel; + + label.SetBounds(9, 20, defWidth - 24, 13); + digitBox.SetBounds(12, 36, defWidth - 24, 20); + buttonOk.SetBounds(defWidth - 168, 72, 75, 23); + buttonCancel.SetBounds(defWidth - 87, 72, 75, 23); + picture.SetBounds(12, 72, 22, 22); + + label.AutoSize = true; + digitBox.Anchor = digitBox.Anchor | AnchorStyles.Right; + buttonOk.Anchor = AnchorStyles.Bottom | AnchorStyles.Right; + buttonCancel.Anchor = AnchorStyles.Bottom | AnchorStyles.Right; + + form.ClientSize = new Size(defWidth, 107); + form.Controls.AddRange(new Control[] { label, digitBox, buttonOk, buttonCancel, picture }); + form.ClientSize = new Size(Math.Max(defWidth, label.Right + 10), form.ClientSize.Height); + form.FormBorderStyle = FormBorderStyle.FixedDialog; + form.StartPosition = FormStartPosition.CenterParent; + form.MinimizeBox = false; + form.MaximizeBox = false; + form.AcceptButton = buttonOk; + form.CancelButton = buttonCancel; + + _result = form.ShowDialog(); + if (picture.Image != null) picture.Image.Dispose(); + form.Dispose(); + _values[0] = ((val = (int)digitBox.Value)).ToString(); + return _result; + } + + private DialogResult ShowMaskedTextBoxed() + { + Form form = new InputBoxForm(); + form.ShowInTaskbar = pShowInTaskBar; + Label label = new Label(); + MaskedTextBox textBox = new MaskedTextBox(); + Button buttonOk = new Button(); + Button buttonCancel = new Button(); + PictureBox picture = new PictureBox(); + + form.Text = _title; + label.Text = _promptText; + textBox.Text = _prevValue = _values[0]; + if (!String.IsNullOrEmpty(this.InputMask)) + textBox.Mask = this.InputMask; + textBox.SelectionStart = 0; + textBox.SelectionLength = textBox.Text.Length; + textBox.BorderStyle = BorderStyle.FixedSingle; + Color bc = textBox.BackColor; + if (_readOnly) textBox.ReadOnly = true; + textBox.BackColor = bc; + textBox.TextChanged += new EventHandler(MaskOrComboTextChanged); + if (_icon != null) picture.Image = _icon; + picture.SizeMode = PictureBoxSizeMode.StretchImage; + + buttonOk.Text = pOk_Text; + buttonCancel.Text = pCancel_Text; + buttonOk.DialogResult = DialogResult.OK; + buttonCancel.DialogResult = DialogResult.Cancel; + + label.SetBounds(9, 20, defWidth - 24, 13); + textBox.SetBounds(12, 36, defWidth - 24, 20); + buttonOk.SetBounds(defWidth - 168, 72, 75, 23); + buttonCancel.SetBounds(defWidth - 87, 72, 75, 23); + picture.SetBounds(12, 72, 22, 22); + + label.AutoSize = true; + textBox.Anchor = textBox.Anchor | AnchorStyles.Right; + buttonOk.Anchor = AnchorStyles.Bottom | AnchorStyles.Right; + buttonCancel.Anchor = AnchorStyles.Bottom | AnchorStyles.Right; + + form.ClientSize = new Size(defWidth, 107); + form.Controls.AddRange(new Control[] { label, textBox, buttonOk, buttonCancel, picture }); + form.ClientSize = new Size(Math.Max(defWidth, label.Right + 10), form.ClientSize.Height); + form.FormBorderStyle = FormBorderStyle.FixedDialog; + form.StartPosition = FormStartPosition.CenterParent; + form.MinimizeBox = false; + form.MaximizeBox = false; + form.AcceptButton = buttonOk; + form.CancelButton = buttonCancel; + + _result = form.ShowDialog(); + if (picture.Image != null) picture.Image.Dispose(); + form.Dispose(); + _values[0] = textBox.Text; + return _result; + } + + private DialogResult ShowMultiline() + { + Form form = new InputBoxForm(); + form.ShowInTaskbar = pShowInTaskBar; + Label label = new Label(); + TextBox textBox = new TextBox(); + Button buttonOk = new Button(); + Button buttonCancel = new Button(); + PictureBox picture = new PictureBox(); + + form.Text = _title; + label.Text = _promptText; + textBox.Text = _prevValue = _values[0]; + textBox.SelectionStart = 0; + textBox.SelectionLength = textBox.Text.Length; + textBox.BorderStyle = BorderStyle.FixedSingle; + textBox.Multiline = true; + textBox.ScrollBars = ScrollBars.Both; + Color bc = textBox.BackColor; + if (_readOnly) textBox.ReadOnly = true; + textBox.BackColor = bc; + textBox.TextChanged += new EventHandler(MaskOrComboTextChanged); + if (_icon != null) picture.Image = _icon; + picture.SizeMode = PictureBoxSizeMode.StretchImage; + + buttonOk.Text = pOk_Text; + buttonCancel.Text = pCancel_Text; + buttonOk.DialogResult = DialogResult.OK; + buttonCancel.DialogResult = DialogResult.Cancel; + + label.SetBounds(9, 20, defWidth - 24, 13); + textBox.SetBounds(12, 36, defWidth - 24, 200); + buttonOk.SetBounds(defWidth - 168, 252, 75, 23); + buttonCancel.SetBounds(defWidth - 87, 252, 75, 23); + picture.SetBounds(12, 252, 22, 22); + + label.AutoSize = true; + textBox.Anchor = textBox.Anchor | AnchorStyles.Right; + buttonOk.Anchor = AnchorStyles.Bottom | AnchorStyles.Right; + buttonCancel.Anchor = AnchorStyles.Bottom | AnchorStyles.Right; + + form.ClientSize = new Size(defWidth, 287); + form.Controls.AddRange(new Control[] { label, textBox, buttonOk, buttonCancel, picture }); + form.ClientSize = new Size(Math.Max(defWidth, label.Right + 10), form.ClientSize.Height); + form.FormBorderStyle = FormBorderStyle.FixedDialog; + form.StartPosition = FormStartPosition.CenterParent; + form.MinimizeBox = false; + form.MaximizeBox = false; + form.AcceptButton = buttonOk; + form.CancelButton = buttonCancel; + + _result = form.ShowDialog(); + if (picture.Image != null) picture.Image.Dispose(); + form.Dispose(); + _values[0] = textBox.Text; + return _result; + } + + private DialogResult ShowRegex(string testerText, bool allow_new, string test) + { + Form form = new InputBoxForm(); + form.ShowInTaskbar = pShowInTaskBar; + Label label = new Label(); + Label labed = new Label(); + TextBox textBox = new TextBox(); + ComboBox comboBox = new ComboBox(); + TextBox testBox = new TextBox(); + Button buttonOk = new Button(); + Button buttonCancel = new Button(); + PictureBox picture = new PictureBox(); + + if (this._values.Length == 1) + { + textBox.Text = _prevValue = _values[0]; + textBox.SelectionStart = 0; + textBox.SelectionLength = textBox.Text.Length; + textBox.BorderStyle = BorderStyle.FixedSingle; + textBox.TextChanged += new EventHandler(testBox_TextChanged); + _additData[0] = textBox; + textBox.SetBounds(12, 36, defWidth - 24, 20); + textBox.Anchor = textBox.Anchor | AnchorStyles.Right; + } + else + { + comboBox.FlatStyle = FlatStyle.Flat; + comboBox.DropDownHeight = 200; + if (this._readOnly) + comboBox.DropDownStyle = ComboBoxStyle.DropDownList; + else + comboBox.DropDownStyle = ComboBoxStyle.DropDown; + foreach (string str in this._values) + comboBox.Items.Add(str); + comboBox.SelectedIndex = this._valueIndex; + this._prevValue = comboBox.Text; + comboBox.TextChanged += new EventHandler(testBox_TextChanged); + _additData[0] = comboBox; + comboBox.SetBounds(12, 36, defWidth - 24, 20); + comboBox.Anchor = textBox.Anchor | AnchorStyles.Right; + } + + form.Text = _title; + label.Text = _promptText; + labed.Text = testerText; + testBox.Text = test; + testBox.BorderStyle = BorderStyle.FixedSingle; + testBox.TextChanged += new EventHandler(testBox_TextChanged); + if (_icon != null) picture.Image = _icon; + picture.SizeMode = PictureBoxSizeMode.StretchImage; + + buttonOk.Text = pOk_Text; + buttonCancel.Text = pCancel_Text; + buttonOk.DialogResult = DialogResult.OK; + buttonCancel.DialogResult = DialogResult.Cancel; + + label.SetBounds(9, 20, defWidth - 24, 13); + labed.SetBounds(9, 60, defWidth - 24, 13); + testBox.SetBounds(12, 76, defWidth - 24, 20); + buttonOk.SetBounds(defWidth - 168, 112, 75, 23); + buttonCancel.SetBounds(defWidth - 87, 112, 75, 23); + picture.SetBounds(12, 112, 22, 22); + + label.AutoSize = true; + labed.AutoSize = true; + buttonOk.Anchor = AnchorStyles.Bottom | AnchorStyles.Right; + buttonCancel.Anchor = AnchorStyles.Bottom | AnchorStyles.Right; + + form.ClientSize = new Size(defWidth, 147); + form.Controls.AddRange(new Control[] { label, this._values.Length == 1 ? (Control)textBox : (Control)comboBox, labed, testBox, buttonOk, buttonCancel, picture }); + form.ClientSize = new Size(Math.Max(defWidth, label.Right + 10), form.ClientSize.Height); + form.FormBorderStyle = FormBorderStyle.FixedDialog; + form.StartPosition = FormStartPosition.CenterParent; + form.MinimizeBox = false; + form.MaximizeBox = false; + form.AcceptButton = buttonOk; + form.CancelButton = buttonCancel; + + _additData[1] = testBox; + + _result = form.ShowDialog(); + if (picture.Image != null) picture.Image.Dispose(); + form.Dispose(); + if (this._values.Length == 1) + _values[0] = textBox.Text; + else + { + if (comboBox.SelectedIndex == -1) + { + List tmp = new List(this._values); + tmp.Add(comboBox.Text); + this._values = tmp.ToArray(); + this._valueIndex = this._values.Length - 1; + } + else + this._valueIndex = comboBox.SelectedIndex; + }; + if (!String.IsNullOrEmpty(test)) + { + _values[0] += (char)164; + _values[0] += testBox.Text; + }; + return _result; + } + + private void testBox_TextChanged(object sender, EventArgs e) + { + if ((sender is TextBox) || (sender is ComboBox)) + { + Control ctrlBox = (Control)_additData[0]; + TextBox testBox = (TextBox)_additData[1]; + + try + { + Regex rx = new Regex(ctrlBox.Text.Trim()); + testBox.BackColor = rx.IsMatch(testBox.Text.Trim()) ? Color.LightGreen : Color.LightPink; + } + catch + { + testBox.BackColor = Color.LightPink; + }; + }; + } + + private DialogResult ShowComboBoxed() + { + Form form = new InputBoxForm(); + form.ShowInTaskbar = pShowInTaskBar; + Label label = new Label(); + ComboBox comboBox = new ComboBox(); + Button buttonOk = new Button(); + Button buttonCancel = new Button(); + PictureBox picture = new PictureBox(); + + if (this.IconList != null) + comboBox = new ComboIcons(); + + form.Text = _title; + label.Text = _promptText; + comboBox.FlatStyle = FlatStyle.Flat; + comboBox.DropDownHeight = 200; + if (this._readOnly) + comboBox.DropDownStyle = ComboBoxStyle.DropDownList; + else + comboBox.DropDownStyle = ComboBoxStyle.DropDown; + for (int i = 0; i < this._values.Length; i++) + { + string str = this._values[i]; + comboBox.Items.Add(new DropDownItem(str, (this._imlist == null) || (i >= this._imlist.Images.Count) ? null : this._imlist.Images[i])); + }; + comboBox.SelectedIndex = this._valueIndex; + this._prevValue = comboBox.Text; + comboBox.TextChanged += new EventHandler(MaskOrComboTextChanged); + if (_icon != null) picture.Image = _icon; + picture.SizeMode = PictureBoxSizeMode.StretchImage; + + buttonOk.Text = pOk_Text; + buttonCancel.Text = pCancel_Text; + buttonOk.DialogResult = DialogResult.OK; + buttonCancel.DialogResult = DialogResult.Cancel; + + label.SetBounds(9, 20, defWidth - 24, 13); + comboBox.SetBounds(12, 36, defWidth - 24, 20); + buttonOk.SetBounds(defWidth - 168, 72, 75, 23); + buttonCancel.SetBounds(defWidth - 87, 72, 75, 23); + picture.SetBounds(12, 72, 22, 22); + + label.AutoSize = true; + comboBox.Anchor = comboBox.Anchor | AnchorStyles.Right; + buttonOk.Anchor = AnchorStyles.Bottom | AnchorStyles.Right; + buttonCancel.Anchor = AnchorStyles.Bottom | AnchorStyles.Right; + + form.ClientSize = new Size(defWidth, 107); + form.Controls.AddRange(new Control[] { label, comboBox, buttonOk, buttonCancel, picture }); + form.ClientSize = new Size(Math.Max(defWidth, label.Right + 10), form.ClientSize.Height); + form.FormBorderStyle = FormBorderStyle.FixedDialog; + form.StartPosition = FormStartPosition.CenterParent; + form.MinimizeBox = false; + form.MaximizeBox = false; + form.AcceptButton = buttonOk; + form.CancelButton = buttonCancel; + + _result = form.ShowDialog(); + if (picture.Image != null) picture.Image.Dispose(); + form.Dispose(); + if (comboBox.SelectedIndex == -1) + { + List tmp = new List(this._values); + tmp.Add(comboBox.Text); + this._values = tmp.ToArray(); + this._valueIndex = this._values.Length - 1; + } + else + this._valueIndex = comboBox.SelectedIndex; + return _result; + } + + private DialogResult ShowSelectDir() + { + Form form = new InputBoxForm(); + form.ShowInTaskbar = pShowInTaskBar; + Label label = new Label(); + MaskedTextBox textBox = new MaskedTextBox(); + Button buttonOk = new Button(); + Button buttonCancel = new Button(); + Button buttonAddit = new Button(); + PictureBox picture = new PictureBox(); + + form.Text = _title; + label.Text = _promptText; + textBox.Text = _values[0]; + textBox.SelectionStart = 0; + textBox.SelectionLength = textBox.Text.Length; + textBox.BorderStyle = BorderStyle.FixedSingle; + Color bc = textBox.BackColor; + if (_readOnly) textBox.ReadOnly = true; + textBox.BackColor = bc; + if (_icon != null) picture.Image = _icon; + picture.SizeMode = PictureBoxSizeMode.StretchImage; + buttonAddit.Click += new EventHandler(buttonAdditD_Click); + _additData[0] = textBox; + + buttonOk.Text = pOk_Text; + buttonCancel.Text = pCancel_Text; + buttonAddit.Text = ".."; + buttonOk.DialogResult = DialogResult.OK; + buttonCancel.DialogResult = DialogResult.Cancel; + + label.SetBounds(9, 20, defWidth - 24, 13); + textBox.SetBounds(12, 36, defWidth - 52, 20); + buttonOk.SetBounds(defWidth - 168, 72, 75, 23); + buttonCancel.SetBounds(defWidth - 87, 72, 75, 23); + buttonAddit.SetBounds(defWidth - 36, 36, 24, 20); + picture.SetBounds(12, 72, 22, 22); + + label.AutoSize = true; + textBox.Anchor = textBox.Anchor | AnchorStyles.Right; + buttonOk.Anchor = AnchorStyles.Bottom | AnchorStyles.Right; + buttonCancel.Anchor = AnchorStyles.Bottom | AnchorStyles.Right; + buttonAddit.Anchor = AnchorStyles.Bottom | AnchorStyles.Right; + + form.ClientSize = new Size(defWidth, 107); + form.Controls.AddRange(new Control[] { label, textBox, buttonAddit, buttonOk, buttonCancel, picture }); + form.ClientSize = new Size(Math.Max(defWidth, label.Right + 10), form.ClientSize.Height); + form.FormBorderStyle = FormBorderStyle.FixedDialog; + form.StartPosition = FormStartPosition.CenterParent; + form.MinimizeBox = false; + form.MaximizeBox = false; + form.AcceptButton = buttonOk; + form.CancelButton = buttonCancel; + + _result = form.ShowDialog(); + if (picture.Image != null) picture.Image.Dispose(); + form.Dispose(); + _values[0] = textBox.Text; + return _result; + } + + private DialogResult ShowSelectFile(string filter) + { + Form form = new InputBoxForm(); + form.ShowInTaskbar = pShowInTaskBar; + Label label = new Label(); + MaskedTextBox textBox = new MaskedTextBox(); + Button buttonOk = new Button(); + Button buttonCancel = new Button(); + Button buttonAddit = new Button(); + PictureBox picture = new PictureBox(); + + form.Text = _title; + label.Text = _promptText; + textBox.Text = _values[0]; + textBox.SelectionStart = 0; + textBox.SelectionLength = textBox.Text.Length; + textBox.BorderStyle = BorderStyle.FixedSingle; + Color bc = textBox.BackColor; + if (_readOnly) textBox.ReadOnly = true; + textBox.BackColor = bc; + if (_icon != null) picture.Image = _icon; + picture.SizeMode = PictureBoxSizeMode.StretchImage; + buttonAddit.Click += new EventHandler(buttonAdditF_Click); + _additData[0] = textBox; + if (String.IsNullOrEmpty(filter)) + _additData[1] = "All Types|*.*"; + else + _additData[1] = filter; + _additData[2] = _title; + + buttonOk.Text = pOk_Text; + buttonCancel.Text = pCancel_Text; + buttonAddit.Text = ".."; + buttonOk.DialogResult = DialogResult.OK; + buttonCancel.DialogResult = DialogResult.Cancel; + + label.SetBounds(9, 20, defWidth - 24, 13); + textBox.SetBounds(12, 36, defWidth - 52, 20); + buttonOk.SetBounds(defWidth - 168, 72, 75, 23); + buttonCancel.SetBounds(defWidth - 87, 72, 75, 23); + buttonAddit.SetBounds(defWidth - 36, 36, 24, 20); + picture.SetBounds(12, 72, 22, 22); + + label.AutoSize = true; + textBox.Anchor = textBox.Anchor | AnchorStyles.Right; + buttonOk.Anchor = AnchorStyles.Bottom | AnchorStyles.Right; + buttonCancel.Anchor = AnchorStyles.Bottom | AnchorStyles.Right; + buttonAddit.Anchor = AnchorStyles.Bottom | AnchorStyles.Right; + + form.ClientSize = new Size(defWidth, 107); + form.Controls.AddRange(new Control[] { label, textBox, buttonAddit, buttonOk, buttonCancel, picture }); + form.ClientSize = new Size(Math.Max(defWidth, label.Right + 10), form.ClientSize.Height); + form.FormBorderStyle = FormBorderStyle.FixedDialog; + form.StartPosition = FormStartPosition.CenterParent; + form.MinimizeBox = false; + form.MaximizeBox = false; + form.AcceptButton = buttonOk; + form.CancelButton = buttonCancel; + + _result = form.ShowDialog(); + if (picture.Image != null) picture.Image.Dispose(); + form.Dispose(); + _values[0] = textBox.Text; + return _result; + } + + private DialogResult ShowSelectColor(ref Color color) + { + Form form = new InputBoxForm(); + form.ShowInTaskbar = pShowInTaskBar; + Label label = new Label(); + MaskedTextBox textBox = new MaskedTextBox(); + Button buttonOk = new Button(); + Button buttonCancel = new Button(); + Button buttonAddit = new Button(); + PictureBox picture = new PictureBox(); + + form.Text = _title; + label.Text = _promptText; + textBox.Text = HexConverter(color); + textBox.SelectionStart = 0; + textBox.SelectionLength = textBox.Text.Length; + textBox.BorderStyle = BorderStyle.FixedSingle; + textBox.Mask = @"\#AAAAAA"; + this.InputRegex = @"^(#[\dA-Fa-f]{0,6})$"; + textBox.TextChanged += new EventHandler(colorBox_TextChanged); + if (_icon != null) picture.Image = _icon; + picture.SizeMode = PictureBoxSizeMode.StretchImage; + buttonAddit.Text = ".."; + buttonAddit.FlatStyle = FlatStyle.Flat; + buttonAddit.BackColor = color; + buttonAddit.Click += new EventHandler(buttonAdditC_Click); + _additData[0] = textBox; + _additData[1] = buttonAddit; + + buttonOk.Text = pOk_Text; + buttonCancel.Text = pCancel_Text; + buttonAddit.Text = ".."; + buttonOk.DialogResult = DialogResult.OK; + buttonCancel.DialogResult = DialogResult.Cancel; + + label.SetBounds(9, 20, defWidth - 24, 13); + textBox.SetBounds(12, 36, defWidth - 52, 20); + buttonOk.SetBounds(defWidth - 168, 72, 75, 23); + buttonCancel.SetBounds(defWidth - 87, 72, 75, 23); + buttonAddit.SetBounds(defWidth - 36, 36, 24, 20); + picture.SetBounds(12, 72, 22, 22); + + label.AutoSize = true; + textBox.Anchor = textBox.Anchor | AnchorStyles.Right; + buttonOk.Anchor = AnchorStyles.Bottom | AnchorStyles.Right; + buttonCancel.Anchor = AnchorStyles.Bottom | AnchorStyles.Right; + buttonAddit.Anchor = AnchorStyles.Bottom | AnchorStyles.Right; + + form.ClientSize = new Size(defWidth, 107); + form.Controls.AddRange(new Control[] { label, textBox, buttonAddit, buttonOk, buttonCancel, picture }); + form.ClientSize = new Size(Math.Max(defWidth, label.Right + 10), form.ClientSize.Height); + form.FormBorderStyle = FormBorderStyle.FixedDialog; + form.StartPosition = FormStartPosition.CenterParent; + form.MinimizeBox = false; + form.MaximizeBox = false; + form.AcceptButton = buttonOk; + form.CancelButton = buttonCancel; + + _result = form.ShowDialog(); + if (picture.Image != null) picture.Image.Dispose(); + form.Dispose(); + color = RGBConverter(textBox.Text); + return _result; + } + + private void colorBox_TextChanged(object sender, EventArgs e) + { + ((Button)_additData[1]).BackColor = RGBConverter((string)((MaskedTextBox)_additData[0]).Text); + } + + private void buttonAdditC_Click(object sender, EventArgs e) + { + System.Windows.Forms.ColorDialog cd = new System.Windows.Forms.ColorDialog(); + cd.FullOpen = true; + cd.Color = RGBConverter((string)((MaskedTextBox)_additData[0]).Text); + if (cd.ShowDialog() == DialogResult.OK) + { + ((MaskedTextBox)_additData[0]).Text = HexConverter(cd.Color); + ((Button)_additData[1]).BackColor = cd.Color; + }; + cd.Dispose(); + } + + private void buttonAdditF_Click(object sender, EventArgs e) + { + OpenFileDialog ofd = new OpenFileDialog(); + ofd.FileName = ((MaskedTextBox)_additData[0]).Text; + ofd.Title = (string)_additData[2]; + ofd.Filter = (string)_additData[1]; + ofd.FileName = (string)((MaskedTextBox)_additData[0]).Text; + try + { + if (ofd.ShowDialog() == DialogResult.OK) + ((MaskedTextBox)_additData[0]).Text = ofd.FileName; + } + catch + { + ofd.FileName = ""; + if (ofd.ShowDialog() == DialogResult.OK) + ((MaskedTextBox)_additData[0]).Text = ofd.FileName; + }; + ofd.Dispose(); + } + + private void buttonAdditD_Click(object sender, EventArgs e) + { + FolderBrowserDialog fbd = new FolderBrowserDialog(); + fbd.SelectedPath = (string)((MaskedTextBox)_additData[0]).Text; + if (fbd.ShowDialog() == DialogResult.OK) + ((MaskedTextBox)_additData[0]).Text = fbd.SelectedPath; + fbd.Dispose(); + } + + private void MaskOrComboTextChanged(object sender, EventArgs e) + { + if (String.IsNullOrEmpty(InputRegex)) return; + + if (sender is MaskedTextBox) + { + MaskedTextBox tb = (MaskedTextBox)sender; + int index = tb.SelectionStart > 0 ? tb.SelectionStart - 1 : 0; + if (String.IsNullOrEmpty(tb.Text)) return; + if (Regex.IsMatch(tb.Text, InputRegex)) + { + _prevValue = tb.Text; + return; + } + else + { + tb.Text = _prevValue; + tb.SelectionStart = index; + }; + }; + if (sender is ComboBox) + { + ComboBox cb = (ComboBox)sender; + int index = cb.SelectionStart > 0 ? cb.SelectionStart - 1 : 0; + if (String.IsNullOrEmpty(cb.Text)) return; + if (Regex.IsMatch(cb.Text, InputRegex)) + { + _prevValue = cb.Text; + return; + } + else + { + cb.Text = _prevValue; + cb.SelectionStart = index; + }; + }; + } + + ///

+ /// Show ReadOnly Box Dialog + /// + /// Dialog Window Title + /// Parameter Prompt Text + /// Parameter Value + /// DialogResult6 + public static DialogResult Show(string title, string promptText, string value) + { + InputBox ib = new InputBox(title, promptText, value); + ib.ReadOnly = true; + DialogResult dr = ib.Show(); + value = ib.Value; + return dr; + } + /// + /// Show ReadOnly Box Dialog with Icon + /// + /// Dialog Window Title + /// Parameter Prompt Text + /// Parameter Value + /// Icon Image + /// DialogResult + public static DialogResult Show(string title, string promptText, string value, Bitmap icon) + { + InputBox ib = new InputBox(title, promptText, value); + ib.ReadOnly = true; + ib.Icon = icon; + DialogResult dr = ib.Show(); + value = ib.Value; + return dr; + } + /// + /// Show Editable Input Box Dialog + /// + /// Dialog Window Title + /// Parameter Prompt Text + /// Parameter Value + /// DialogResult + public static DialogResult Show(string title, string promptText, ref string value) + { + InputBox ib = new InputBox(title, promptText, value); + DialogResult dr = ib.Show(); + value = ib.Value; + return dr; + + } + /// + /// Show Editable Input Box Dialog with Icon + /// + /// Dialog Window Title + /// Parameter Prompt Text + /// Parameter Value + /// Icon Image + /// DialogResult + public static DialogResult Show(string title, string promptText, ref string value, Bitmap icon) + { + InputBox ib = new InputBox(title, promptText, value); + ib.Icon = icon; + DialogResult dr = ib.Show(); + value = ib.Value; + return dr; + + } + /// + /// Show Editable Masked Input Box Dialog + /// + /// Dialog Window Title + /// Parameter Prompt Text + /// Parameter Value + /// Input Mask or Regex for Value + /// If text is Input Mask it starts from M. If text is Regex it starts from R. + /// Input Mask symbols: 0 - digits; 9 - digits and spaces; # - digits, spaces, +, - + /// L - letter; ? - letters if need; A - letter or digit; . - decimal separator; + /// , - space for digits; / - date separator; $ - currency symbol + /// Regex: http://regexstorm.net/reference + /// + /// DialogResult + public static DialogResult Show(string title, string promptText, ref string value, string InputMaskOrRegex) + { + InputBox ib = new InputBox(title, promptText, value); + ib.InputMaskOrRegex = InputMaskOrRegex; + DialogResult dr = ib.Show(); + value = ib.Value; + return dr; + } + /// + /// Show Editable Masked Input Box Dialog with Icon + /// + /// Dialog Window Title + /// Parameter Prompt Text + /// Parameter Value + /// Input Mask or Regex for Value + /// If text is Input Mask it starts from M. If text is Regex it starts from R. + /// Input Mask symbols: 0 - digits; 9 - digits and spaces; # - digits, spaces, +, - + /// L - letter; ? - letters if need; A - letter or digit; . - decimal separator; + /// , - space for digits; / - date separator; $ - currency symbol + /// Regex: http://regexstorm.net/reference + /// + /// Image Icon + /// DialogResult + public static DialogResult Show(string title, string promptText, ref string value, string InputMaskOrRegex, Bitmap icon) + { + InputBox ib = new InputBox(title, promptText, value); + ib.Icon = icon; + DialogResult dr = ib.Show(); + value = ib.Value.ToString(); + return dr; + } + + public static DialogResult QueryText(string title, string promptText, ref string value) + { + InputBox ib = new InputBox(title, promptText, value); + DialogResult dr = ib.ShowMultiline(); + value = ib.Value; + return dr; + } + + public static DialogResult QueryText(string title, string promptText, string value) + { + InputBox ib = new InputBox(title, promptText, value); + ib.ReadOnly = true; + DialogResult dr = ib.ShowMultiline(); + return dr; + } + + public static DialogResult QueryText(string title, string promptText, string value, Bitmap icon) + { + InputBox ib = new InputBox(title, promptText, value); + ib.ReadOnly = true; + ib.Icon = icon; + DialogResult dr = ib.ShowMultiline(); + return dr; + } + + public static DialogResult QueryText(string title, string promptText, ref string value, Bitmap icon) + { + InputBox ib = new InputBox(title, promptText, value); + ib.Icon = icon; + DialogResult dr = ib.ShowMultiline(); + value = ib.Value; + return dr; + } + + public static DialogResult QueryPass(string title, string promptText, ref string value) + { + InputBox ib = new InputBox(title, promptText, value); + DialogResult dr = ib.ShowPass(); + value = ib.Value; + return dr; + } + + + private DialogResult ShowPass() + { + Form form = new InputBoxForm(); + form.ShowInTaskbar = pShowInTaskBar; + Label label = new Label(); + MaskedTextBox textBox = new MaskedTextBox(); + Button buttonOk = new Button(); + Button buttonCancel = new Button(); + PictureBox picture = new PictureBox(); + + form.Text = _title; + label.Text = _promptText; + textBox.Text = _prevValue = _values[0]; + if (!String.IsNullOrEmpty(this.InputMask)) + textBox.Mask = this.InputMask; + textBox.SelectionStart = 0; + textBox.SelectionLength = textBox.Text.Length; + textBox.BorderStyle = BorderStyle.FixedSingle; + textBox.PasswordChar = '*'; + Color bc = textBox.BackColor; + if (_readOnly) textBox.ReadOnly = true; + textBox.BackColor = bc; + textBox.TextChanged += new EventHandler(MaskOrComboTextChanged); + if (_icon != null) picture.Image = _icon; + picture.SizeMode = PictureBoxSizeMode.StretchImage; + + buttonOk.Text = pOk_Text; + buttonCancel.Text = pCancel_Text; + buttonOk.DialogResult = DialogResult.OK; + buttonCancel.DialogResult = DialogResult.Cancel; + + label.SetBounds(9, 20, defWidth - 24, 13); + textBox.SetBounds(12, 36, defWidth - 24, 20); + buttonOk.SetBounds(defWidth - 168, 72, 75, 23); + buttonCancel.SetBounds(defWidth - 87, 72, 75, 23); + picture.SetBounds(12, 72, 22, 22); + + label.AutoSize = true; + textBox.Anchor = textBox.Anchor | AnchorStyles.Right; + buttonOk.Anchor = AnchorStyles.Bottom | AnchorStyles.Right; + buttonCancel.Anchor = AnchorStyles.Bottom | AnchorStyles.Right; + + form.ClientSize = new Size(defWidth, 107); + form.Controls.AddRange(new Control[] { label, textBox, buttonOk, buttonCancel, picture }); + form.ClientSize = new Size(Math.Max(defWidth, label.Right + 10), form.ClientSize.Height); + form.FormBorderStyle = FormBorderStyle.FixedDialog; + form.StartPosition = FormStartPosition.CenterScreen; + form.MinimizeBox = false; + form.MaximizeBox = false; + form.AcceptButton = buttonOk; + form.CancelButton = buttonCancel; + + _result = form.ShowDialog(); + if (picture.Image != null) picture.Image.Dispose(); + form.Dispose(); + _values[0] = textBox.Text; + return _result; + } + + public static DialogResult QueryDateTime(string title, string promptText, ref DateTime value) + { + return QueryDateTime(title, promptText, null, ref value); + } + + public static DialogResult QueryDate(string title, string promptText, ref DateTime value) + { + return QueryDateTime(title, promptText, "dd.MM.yyyy", ref value); + } + + public static DialogResult QueryTime(string title, string promptText, ref DateTime value) + { + return QueryDateTime(title, promptText, "HH:mm", ref value); + } + + public static DialogResult QueryDateTime(string title, string promptText, string format, ref DateTime value) + { + Form form = new InputBoxForm(); + form.ShowInTaskbar = pShowInTaskBar; + Label label = new Label(); + DateTimePicker dtBox = new DateTimePicker(); + Button buttonOk = new Button(); + Button buttonCancel = new Button(); + PictureBox picture = new PictureBox(); + + form.Text = String.IsNullOrEmpty(title) ? "Select Date/Time" : title; + label.Text = String.IsNullOrEmpty(promptText) ? "Select Date/Time" : promptText; + if (value == null) + dtBox.Value = DateTime.Today; + else + dtBox.Value = value; + if (!String.IsNullOrEmpty(format)) + { + dtBox.Format = DateTimePickerFormat.Custom; + dtBox.CustomFormat = format; + }; + + buttonOk.Text = pOk_Text; + buttonCancel.Text = pCancel_Text; + buttonOk.DialogResult = DialogResult.OK; + buttonCancel.DialogResult = DialogResult.Cancel; + + label.SetBounds(9, 20, defWidth - 24, 13); + dtBox.SetBounds(12, 36, defWidth - 24, 20); + buttonOk.SetBounds(defWidth - 168, 72, 75, 23); + buttonCancel.SetBounds(defWidth - 87, 72, 75, 23); + picture.SetBounds(12, 72, 22, 22); + + label.AutoSize = true; + dtBox.Anchor = dtBox.Anchor | AnchorStyles.Right; + buttonOk.Anchor = AnchorStyles.Bottom | AnchorStyles.Right; + buttonCancel.Anchor = AnchorStyles.Bottom | AnchorStyles.Right; + + form.ClientSize = new Size(defWidth, 107); + form.Controls.AddRange(new Control[] { label, dtBox, buttonOk, buttonCancel, picture }); + form.ClientSize = new Size(Math.Max(defWidth, label.Right + 10), form.ClientSize.Height); + form.FormBorderStyle = FormBorderStyle.FixedDialog; + form.StartPosition = FormStartPosition.CenterParent; + form.MinimizeBox = false; + form.MaximizeBox = false; + form.AcceptButton = buttonOk; + form.CancelButton = buttonCancel; + + DialogResult _result = form.ShowDialog(); + form.Dispose(); + value = dtBox.Value; + return _result; + } + + public static DialogResult QueryRegexBox(string title, string promptText, string testerText, ref string value) + { + InputBox ib = new InputBox(title, promptText, value); + DialogResult dr = ib.ShowRegex(testerText, false, ""); + value = ib.Value; + return dr; + } + + public static DialogResult QueryReplaceBox(string title, string promptText, string testerText, ref string value, ref string test) + { + InputBox ib = new InputBox(title, promptText, value); + DialogResult dr = ib.ShowRegex(testerText, false, test); + string[] vt = ib.Value.Split(new char[] { (char)164 }); + value = vt[0]; + if (vt.Length > 1) + test = vt[1]; + else + test = ""; + return dr; + } + + public static DialogResult QueryRegexBox(string title, string promptText, string testerText, ref string value, Bitmap icon) + { + InputBox ib = new InputBox(title, promptText, value); + ib.Icon = icon; + DialogResult dr = ib.ShowRegex(testerText, false, ""); + value = ib.Value; + return dr; + } + + public static DialogResult QueryRegexBox(string title, string promptText, string testerText, string[] options, ref int selectedValue) + { + InputBox ib = new InputBox(title, promptText, options, selectedValue); + ib.ReadOnly = true; + DialogResult dr = ib.ShowRegex(testerText, false, ""); + selectedValue = ib.SelectedIndex; + return dr; + } + + public static DialogResult QueryRegexBox(string title, string promptText, string testerText, string[] options, ref int selectedValue, Bitmap icon) + { + InputBox ib = new InputBox(title, promptText, options, selectedValue); + ib.ReadOnly = true; + ib.Icon = icon; + DialogResult dr = ib.ShowRegex(testerText, false, ""); + selectedValue = ib.SelectedIndex; + return dr; + } + + public static DialogResult QueryRegexBox(string title, string promptText, string testerText, string[] options, ref string selectedValue) + { + InputBox ib = new InputBox(title, promptText, options); + ib.ReadOnly = true; + ib.Value = selectedValue; + DialogResult dr = ib.ShowRegex(testerText, false, ""); + selectedValue = ib.Value; + return dr; + } + + public static DialogResult QueryRegexBox(string title, string promptText, string testerText, string[] options, ref string selectedValue, Bitmap icon) + { + InputBox ib = new InputBox(title, promptText, options); + ib.ReadOnly = true; + ib.Value = selectedValue; + ib.Icon = icon; + DialogResult dr = ib.ShowRegex(testerText, false, ""); + selectedValue = ib.Value; + return dr; + } + + public static DialogResult QueryRegexBox(string title, string promptText, string testerText, string[] options, ref string selectedValue, bool allowNewValue) + { + InputBox ib = new InputBox(title, promptText, options); + ib.ReadOnly = !allowNewValue; + ib.Value = selectedValue; + DialogResult dr = ib.ShowRegex(testerText, true, ""); + selectedValue = ib.Value; + return dr; + } + + public static DialogResult QueryRegexBox(string title, string promptText, string testerText, string[] options, ref string selectedValue, bool allowNewValue, Bitmap icon) + { + InputBox ib = new InputBox(title, promptText, options); + ib.ReadOnly = !allowNewValue; + ib.Value = selectedValue; + ib.Icon = icon; + DialogResult dr = ib.ShowRegex(testerText, true, ""); + selectedValue = ib.Value; + return dr; + } + + public static DialogResult QueryMultiple(string title, string[] prompts, string[] values, string inputMask, bool readOnly, Bitmap icon) + { + if ((prompts == null) || (values == null) || (prompts.Length == 0) || (values.Length == 0) || (values.Length != prompts.Length)) + return DialogResult.None; + + Form form = new InputBoxForm(); + form.ShowInTaskbar = pShowInTaskBar; + Label[] labels = new Label[prompts.Length]; + MaskedTextBox[] textBoxes = new MaskedTextBox[values.Length]; + Button buttonOk = new Button(); + Button buttonCancel = new Button(); + PictureBox picture = new PictureBox(); + + form.Text = title; + int lRight = 0; + for (int i = 0; i < prompts.Length; i++) + { + labels[i] = new Label(); + labels[i].Text = prompts[i]; + + textBoxes[i] = new MaskedTextBox(); + textBoxes[i].Text = values[i]; + textBoxes[i].SelectionStart = 0; + textBoxes[i].SelectionLength = textBoxes[i].Text.Length; + textBoxes[i].BorderStyle = BorderStyle.FixedSingle; + if (!String.IsNullOrEmpty(inputMask)) + textBoxes[i].Mask = inputMask; + Color bc = textBoxes[i].BackColor; + if (readOnly) textBoxes[i].ReadOnly = true; + textBoxes[i].BackColor = bc; + // textBoxes[i].TextChanged += new EventHandler(MaskOrComboTextChanged); + + labels[i].SetBounds(9, 20 + 40 * i, defWidth - 24, 13); + labels[i].AutoSize = true; + textBoxes[i].SetBounds(12, 36 + 40 * i, defWidth - 24, 20); + textBoxes[i].Anchor = textBoxes[i].Anchor | AnchorStyles.Right; + + if (labels[i].Right > lRight) lRight = labels[i].Right; + }; + + if (icon != null) picture.Image = icon; + picture.SizeMode = PictureBoxSizeMode.StretchImage; + + buttonOk.Text = pOk_Text; + buttonCancel.Text = pCancel_Text; + buttonOk.DialogResult = DialogResult.OK; + buttonCancel.DialogResult = DialogResult.Cancel; + + + buttonOk.SetBounds(defWidth - 168, 32 + 40 * prompts.Length, 75, 23); + buttonCancel.SetBounds(defWidth - 87, 32 + 40 * prompts.Length, 75, 23); + picture.SetBounds(12, 32 + 40 * prompts.Length, 22, 22); + + buttonOk.Anchor = AnchorStyles.Bottom | AnchorStyles.Right; + buttonCancel.Anchor = AnchorStyles.Bottom | AnchorStyles.Right; + + form.ClientSize = new Size(defWidth, 67 + 40 * prompts.Length); + form.Controls.AddRange(labels); + form.Controls.AddRange(textBoxes); + form.Controls.AddRange(new Control[] { buttonOk, buttonCancel, picture }); + form.ClientSize = new Size(Math.Max(defWidth, lRight + 10), form.ClientSize.Height); + form.FormBorderStyle = FormBorderStyle.FixedDialog; + form.StartPosition = FormStartPosition.CenterParent; + form.MinimizeBox = false; + form.MaximizeBox = false; + form.AcceptButton = buttonOk; + form.CancelButton = buttonCancel; + + DialogResult _result = form.ShowDialog(); + for (int i = 0; i < prompts.Length; i++) + values[i] = textBoxes[i].Text; + if (picture.Image != null) picture.Image.Dispose(); + form.Dispose(); + return _result; + } + + public static DialogResult QueryMultiple(string title, string[] prompts, string[] values, string inputMask, bool readOnly, Bitmap icon, MessageBoxButtons buttons, string[] buttonsText) + { + if ((prompts == null) || (values == null) || (prompts.Length == 0) || (values.Length == 0) || (values.Length != prompts.Length)) + return DialogResult.None; + + Form form = new InputBoxForm(); + form.ShowInTaskbar = pShowInTaskBar; + Label[] labels = new Label[prompts.Length]; + MaskedTextBox[] textBoxes = new MaskedTextBox[values.Length]; + int btnCount = 1; + if ((buttons == MessageBoxButtons.OKCancel) || (buttons == MessageBoxButtons.YesNo) || (buttons == MessageBoxButtons.RetryCancel)) btnCount = 2; + if ((buttons == MessageBoxButtons.AbortRetryIgnore) || (buttons == MessageBoxButtons.YesNoCancel)) btnCount = 3; + Button[] Buttons = new Button[btnCount]; + Button buttonCancel = new Button(); + PictureBox picture = new PictureBox(); + + form.Text = title; + int lRight = 0; + for (int i = 0; i < prompts.Length; i++) + { + labels[i] = new Label(); + labels[i].Text = prompts[i]; + + textBoxes[i] = new MaskedTextBox(); + textBoxes[i].Text = values[i]; + textBoxes[i].SelectionStart = 0; + textBoxes[i].SelectionLength = textBoxes[i].Text.Length; + textBoxes[i].BorderStyle = BorderStyle.FixedSingle; + if (!String.IsNullOrEmpty(inputMask)) + textBoxes[i].Mask = inputMask; + Color bc = textBoxes[i].BackColor; + if (readOnly) textBoxes[i].ReadOnly = true; + textBoxes[i].BackColor = bc; + // textBoxes[i].TextChanged += new EventHandler(MaskOrComboTextChanged); + + labels[i].SetBounds(9, 20 + 40 * i, defWidth - 24, 13); + labels[i].AutoSize = true; + textBoxes[i].SetBounds(12, 36 + 40 * i, defWidth - 24, 20); + textBoxes[i].Anchor = textBoxes[i].Anchor | AnchorStyles.Right; + + if (labels[i].Right > lRight) lRight = labels[i].Right; + }; + + if (icon != null) picture.Image = icon; + picture.SizeMode = PictureBoxSizeMode.StretchImage; + + for (int i = 0; i < btnCount; i++) + { + Buttons[i] = new Button(); + Buttons[i].Text = pOk_Text; + if (i == 0) + { + if (buttons == MessageBoxButtons.OK) { Buttons[i].Text = pOk_Text; Buttons[i].DialogResult = DialogResult.OK; }; + if (buttons == MessageBoxButtons.OKCancel) { Buttons[i].Text = pOk_Text; Buttons[i].DialogResult = DialogResult.OK; }; + if (buttons == MessageBoxButtons.AbortRetryIgnore) { Buttons[i].Text = "Abort"; Buttons[i].DialogResult = DialogResult.Abort; }; + if (buttons == MessageBoxButtons.YesNoCancel) { Buttons[i].Text = "Yes"; Buttons[i].DialogResult = DialogResult.Yes; }; + if (buttons == MessageBoxButtons.YesNo) { Buttons[i].Text = "Yes"; Buttons[i].DialogResult = DialogResult.Yes; }; + if (buttons == MessageBoxButtons.RetryCancel) { Buttons[i].Text = "Retry"; Buttons[i].DialogResult = DialogResult.Retry; }; + if ((buttonsText != null) && (buttonsText.Length > 0)) Buttons[i].Text = buttonsText[i]; + }; + if (i == 1) + { + if (buttons == MessageBoxButtons.OKCancel) { Buttons[i].Text = pCancel_Text; Buttons[i].DialogResult = DialogResult.Cancel; }; + if (buttons == MessageBoxButtons.AbortRetryIgnore) { Buttons[i].Text = "Retry"; Buttons[i].DialogResult = DialogResult.Retry; }; + if (buttons == MessageBoxButtons.YesNoCancel) { Buttons[i].Text = "No"; Buttons[i].DialogResult = DialogResult.No; }; + if (buttons == MessageBoxButtons.YesNo) { Buttons[i].Text = "No"; Buttons[i].DialogResult = DialogResult.No; }; + if (buttons == MessageBoxButtons.RetryCancel) { Buttons[i].Text = pCancel_Text; Buttons[i].DialogResult = DialogResult.Cancel; }; + if ((buttonsText != null) && (buttonsText.Length > 1)) Buttons[i].Text = buttonsText[i]; + }; + if (i == 2) + { + if (buttons == MessageBoxButtons.AbortRetryIgnore) { Buttons[i].Text = "Ignore"; Buttons[i].DialogResult = DialogResult.Ignore; }; + if (buttons == MessageBoxButtons.YesNoCancel) { Buttons[i].Text = pCancel_Text; Buttons[i].DialogResult = DialogResult.Cancel; }; + if ((buttonsText != null) && (buttonsText.Length > 2)) Buttons[i].Text = buttonsText[i]; + }; + Buttons[i].SetBounds(defWidth - 87 - 81 * (btnCount - i - 1), 32 + 40 * prompts.Length, 75, 23); + Buttons[i].Anchor = AnchorStyles.Bottom | AnchorStyles.Right; + }; + + buttonCancel.SetBounds(defWidth - 87, 32 + 40 * prompts.Length, 75, 23); + picture.SetBounds(12, 32 + 40 * prompts.Length, 22, 22); + + + form.ClientSize = new Size(defWidth, 67 + 40 * prompts.Length); + form.Controls.AddRange(labels); + form.Controls.AddRange(textBoxes); + form.Controls.AddRange(Buttons); + form.Controls.AddRange(new Control[] { picture }); + form.ClientSize = new Size(Math.Max(defWidth, lRight + 10), form.ClientSize.Height); + form.FormBorderStyle = FormBorderStyle.FixedDialog; + form.StartPosition = FormStartPosition.CenterParent; + form.MinimizeBox = false; + form.MaximizeBox = false; + form.AcceptButton = Buttons[0]; + form.CancelButton = Buttons[btnCount - 1]; + + DialogResult _result = form.ShowDialog(); + for (int i = 0; i < prompts.Length; i++) + values[i] = textBoxes[i].Text; + if (picture.Image != null) picture.Image.Dispose(); + form.Dispose(); + return _result; + } + + public static DialogResult QueryMultiple(string title, string[] prompts, int[] values, bool readOnly, Bitmap icon) + { + return QueryMultiple(title, prompts, values, int.MinValue, int.MaxValue, readOnly, icon); + } + + public static DialogResult QueryMultiple(string title, string[] prompts, int[] values, int minValue, int maxValue, bool readOnly, Bitmap icon) + { + if ((prompts == null) || (values == null) || (prompts.Length == 0) || (values.Length == 0) || (values.Length != prompts.Length)) + return DialogResult.None; + + Form form = new InputBoxForm(); + form.ShowInTaskbar = pShowInTaskBar; + Label[] labels = new Label[prompts.Length]; + NumericUpDown[] textBoxes = new NumericUpDown[values.Length]; + Button buttonOk = new Button(); + Button buttonCancel = new Button(); + PictureBox picture = new PictureBox(); + + form.Text = title; + int lRight = 0; + for (int i = 0; i < prompts.Length; i++) + { + labels[i] = new Label(); + labels[i].Text = prompts[i]; + + textBoxes[i] = new NumericUpDown(); + textBoxes[i].Minimum = minValue; + textBoxes[i].Maximum = maxValue; + textBoxes[i].Value = values[i]; + textBoxes[i].BorderStyle = BorderStyle.FixedSingle; + Color bc = textBoxes[i].BackColor; + if (readOnly) textBoxes[i].ReadOnly = true; + textBoxes[i].BackColor = bc; + + labels[i].SetBounds(9, 20 + 40 * i, defWidth - 24, 13); + labels[i].AutoSize = true; + textBoxes[i].SetBounds(12, 36 + 40 * i, defWidth - 24, 20); + textBoxes[i].Anchor = textBoxes[i].Anchor | AnchorStyles.Right; + + if (labels[i].Right > lRight) lRight = labels[i].Right; + }; + + if (icon != null) picture.Image = icon; + picture.SizeMode = PictureBoxSizeMode.StretchImage; + + buttonOk.Text = pOk_Text; + buttonCancel.Text = pCancel_Text; + buttonOk.DialogResult = DialogResult.OK; + buttonCancel.DialogResult = DialogResult.Cancel; + + + buttonOk.SetBounds(defWidth - 168, 32 + 40 * prompts.Length, 75, 23); + buttonCancel.SetBounds(defWidth - 87, 32 + 40 * prompts.Length, 75, 23); + picture.SetBounds(12, 32 + 40 * prompts.Length, 22, 22); + + buttonOk.Anchor = AnchorStyles.Bottom | AnchorStyles.Right; + buttonCancel.Anchor = AnchorStyles.Bottom | AnchorStyles.Right; + + form.ClientSize = new Size(defWidth, 67 + 40 * prompts.Length); + form.Controls.AddRange(labels); + form.Controls.AddRange(textBoxes); + form.Controls.AddRange(new Control[] { buttonOk, buttonCancel, picture }); + form.ClientSize = new Size(Math.Max(defWidth, lRight + 10), form.ClientSize.Height); + form.FormBorderStyle = FormBorderStyle.FixedDialog; + form.StartPosition = FormStartPosition.CenterParent; + form.MinimizeBox = false; + form.MaximizeBox = false; + form.AcceptButton = buttonOk; + form.CancelButton = buttonCancel; + + DialogResult _result = form.ShowDialog(); + for (int i = 0; i < prompts.Length; i++) + values[i] = (int)textBoxes[i].Value; + if (picture.Image != null) picture.Image.Dispose(); + form.Dispose(); + return _result; + } + + public static DialogResult QueryMultiple(string title, string[] prompts, double[] values, bool readOnly, Bitmap icon) + { + return QueryMultiple(title, prompts, values, double.MinValue, double.MinValue, readOnly, icon); + } + + private static double[] qm_d_mima = new double[] { double.MinValue, double.MaxValue }; + public static DialogResult QueryMultiple(string title, string[] prompts, double[] values, double minValue, double maxValue, bool readOnly, Bitmap icon) + { + if ((prompts == null) || (values == null) || (prompts.Length == 0) || (values.Length == 0) || (values.Length != prompts.Length)) + return DialogResult.None; + + qm_d_mima[0] = minValue; + qm_d_mima[1] = maxValue; + + Form form = new InputBoxForm(); + form.ShowInTaskbar = pShowInTaskBar; + Label[] labels = new Label[prompts.Length]; + MaskedTextBox[] textBoxes = new MaskedTextBox[values.Length]; + Button buttonOk = new Button(); + Button buttonCancel = new Button(); + PictureBox picture = new PictureBox(); + + form.Text = title; + int lRight = 0; + for (int i = 0; i < prompts.Length; i++) + { + labels[i] = new Label(); + labels[i].Text = prompts[i]; + + textBoxes[i] = new MaskedTextBox(); + textBoxes[i].Text = values[i].ToString(System.Globalization.CultureInfo.InvariantCulture); + textBoxes[i].SelectionStart = 0; + textBoxes[i].SelectionLength = textBoxes[i].Text.Length; + textBoxes[i].BorderStyle = BorderStyle.FixedSingle; + Color bc = textBoxes[i].BackColor; + if (readOnly) textBoxes[i].ReadOnly = true; + textBoxes[i].BackColor = bc; + textBoxes[i].Validating += new System.ComponentModel.CancelEventHandler(InputBox_Validating); + + labels[i].SetBounds(9, 20 + 40 * i, defWidth - 24, 13); + labels[i].AutoSize = true; + textBoxes[i].SetBounds(12, 36 + 40 * i, defWidth - 24, 20); + textBoxes[i].Anchor = textBoxes[i].Anchor | AnchorStyles.Right; + + if (labels[i].Right > lRight) lRight = labels[i].Right; + }; + + if (icon != null) picture.Image = icon; + picture.SizeMode = PictureBoxSizeMode.StretchImage; + + buttonOk.Text = pOk_Text; + buttonCancel.Text = pCancel_Text; + buttonOk.DialogResult = DialogResult.OK; + buttonCancel.DialogResult = DialogResult.Cancel; + + + buttonOk.SetBounds(defWidth - 168, 32 + 40 * prompts.Length, 75, 23); + buttonCancel.SetBounds(defWidth - 87, 32 + 40 * prompts.Length, 75, 23); + picture.SetBounds(12, 32 + 40 * prompts.Length, 22, 22); + + buttonOk.Anchor = AnchorStyles.Bottom | AnchorStyles.Right; + buttonCancel.Anchor = AnchorStyles.Bottom | AnchorStyles.Right; + + form.ClientSize = new Size(defWidth, 67 + 40 * prompts.Length); + form.Controls.AddRange(labels); + form.Controls.AddRange(textBoxes); + form.Controls.AddRange(new Control[] { buttonOk, buttonCancel, picture }); + form.ClientSize = new Size(Math.Max(defWidth, lRight + 10), form.ClientSize.Height); + form.FormBorderStyle = FormBorderStyle.FixedDialog; + form.StartPosition = FormStartPosition.CenterParent; + form.MinimizeBox = false; + form.MaximizeBox = false; + form.AcceptButton = buttonOk; + form.CancelButton = buttonCancel; + + DialogResult _result = form.ShowDialog(); + for (int i = 0; i < prompts.Length; i++) + values[i] = double.Parse(textBoxes[i].Text, System.Globalization.CultureInfo.InvariantCulture); + if (picture.Image != null) picture.Image.Dispose(); + form.Dispose(); + return _result; + } + + private static void InputBox_Validating(object sender, System.ComponentModel.CancelEventArgs e) + { + if (sender is MaskedTextBox) + { + double d = 0; + if (double.TryParse((sender as MaskedTextBox).Text, System.Globalization.NumberStyles.Any, System.Globalization.CultureInfo.InvariantCulture, out d)) ; + if (d < qm_d_mima[0]) d = qm_d_mima[0]; + if (d > qm_d_mima[1]) d = qm_d_mima[1]; + (sender as MaskedTextBox).Text = d.ToString(System.Globalization.CultureInfo.InvariantCulture); + }; + } + + /// + /// Show Editable Input Box Dialog + /// + /// Dialog Window Title + /// Parameter Prompt Text + /// Parameter Value + /// DialogResult + public static DialogResult QueryStringBox(string title, string promptText, ref string value) + { + InputBox ib = new InputBox(title, promptText, value); + DialogResult dr = ib.Show(); + value = ib.Value; + return dr; + } + /// + /// Show Editable Input Box Dialog with Icon + /// + /// Dialog Window Title + /// Parameter Prompt Text + /// Parameter Value + /// Icon Image + /// DialogResult + public static DialogResult QueryStringBox(string title, string promptText, ref string value, Bitmap icon) + { + InputBox ib = new InputBox(title, promptText, value); + ib.Icon = icon; + DialogResult dr = ib.Show(); + value = ib.Value; + return dr; + + } + /// + /// Show Editable Masked Input Box Dialog + /// + /// Dialog Window Title + /// Parameter Prompt Text + /// Parameter Value + /// Input Mask or Regex for Value + /// If text is Input Mask it starts from M. If text is Regex it starts from R. + /// Input Mask symbols: 0 - digits; 9 - digits and spaces; # - digits, spaces, +, - + /// L - letter; ? - letters if need; A - letter or digit; . - decimal separator; + /// , - space for digits; / - date separator; $ - currency symbol + /// Regex: http://regexstorm.net/reference + /// + /// DialogResult + public static DialogResult QueryStringBox(string title, string promptText, ref string value, string InputMaskOrRegex) + { + InputBox ib = new InputBox(title, promptText, value); + ib.InputMaskOrRegex = InputMaskOrRegex; + DialogResult dr = ib.Show(); + value = ib.Value; + return dr; + } + /// + /// Show Editable Masked Input Box Dialog with Icon + /// + /// Dialog Window Title + /// Parameter Prompt Text + /// Parameter Value + /// Input Mask or Regex for Value + /// If text is Input Mask it starts from M. If text is Regex it starts from R. + /// Input Mask symbols: 0 - digits; 9 - digits and spaces; # - digits, spaces, +, - + /// L - letter; ? - letters if need; A - letter or digit; . - decimal separator; + /// , - space for digits; / - date separator; $ - currency symbol + /// Regex: http://regexstorm.net/reference + /// + /// Image Icon + /// DialogResult + public static DialogResult QueryStringBox(string title, string promptText, ref string value, string InputMaskOrRegex, Bitmap icon) + { + InputBox ib = new InputBox(title, promptText, value); + ib.ReadOnly = true; + DialogResult dr = ib.Show(); + value = ib.Value.ToString(); + return dr; + } + + /// + /// Show ReadOnly Box Dialog + /// + /// Dialog Window Title + /// Parameter Prompt Text + /// Parameter Value + /// DialogResult + public static DialogResult Show(string title, string promptText, int value) + { + InputBox ib = new InputBox(title, promptText, value.ToString()); + ib.ReadOnly = true; + DialogResult dr = ib.Show(); + return dr; + + } + /// + /// Show ReadOnly Box Dialog with Icon + /// + /// Dialog Window Title + /// Parameter Prompt Text + /// Parameter Value + /// Image Icon + /// DialogResult + public static DialogResult Show(string title, string promptText, int value, Bitmap icon) + { + InputBox ib = new InputBox(title, promptText, value.ToString()); + ib.Icon = icon; + ib.ReadOnly = true; + DialogResult dr = ib.Show(); + return dr; + + } + /// + /// Show Editable Input Box Dialog + /// + /// Dialog Window Title + /// Parameter Prompt Text + /// Parameter Value + /// DialogResult + public static DialogResult Show(string title, string promptText, ref int value) + { + InputBox ib = new InputBox(title, promptText, value.ToString()); + DialogResult dr = ib.ShowNumericBoxed(ref value, int.MinValue, int.MaxValue); + value = int.Parse(ib.Value); + return dr; + + } + /// + /// Show Editable Input Box Dialog with Icon + /// + /// Dialog Window Title + /// Parameter Prompt Text + /// Parameter Value + /// Image Icon + /// DialogResult + public static DialogResult Show(string title, string promptText, ref int value, Bitmap icon) + { + InputBox ib = new InputBox(title, promptText, value.ToString()); + ib.Icon = icon; + DialogResult dr = ib.ShowNumericBoxed(ref value, int.MinValue, int.MaxValue); + value = int.Parse(ib.Value); + return dr; + + } + /// + /// Show Editable Input Box Dialog + /// + /// Dialog Window Title + /// Parameter Prompt Text + /// Parameter Value + /// Minimum Allowed Value + /// Maximum Allowed Value + /// DialogResult + public static DialogResult Show(string title, string promptText, ref int value, int min, int max) + { + InputBox ib = new InputBox(title, promptText, value.ToString()); + DialogResult dr = ib.ShowNumericBoxed(ref value, min, max); + value = int.Parse(ib.Value); + return dr; + + } + /// + /// Show Editable Input Box Dialog with Icon + /// + /// Dialog Window Title + /// Parameter Prompt Text + /// Parameter Value + /// Minimum Allowed Value + /// Maximum Allowed Value + /// Image Icon + /// DialogResult + public static DialogResult Show(string title, string promptText, ref int value, int min, int max, Bitmap icon) + { + InputBox ib = new InputBox(title, promptText, value.ToString()); + ib.Icon = icon; + DialogResult dr = ib.ShowNumericBoxed(ref value, min, max); + value = int.Parse(ib.Value); + return dr; + + } + + /// + /// Show Editable Input Box Dialog + /// + /// Dialog Window Title + /// Parameter Prompt Text + /// Parameter Value + /// DialogResult + public static DialogResult QueryNumberBox(string title, string promptText, ref int value) + { + InputBox ib = new InputBox(title, promptText, value.ToString()); + DialogResult dr = ib.ShowNumericBoxed(ref value, int.MinValue, int.MaxValue); + value = int.Parse(ib.Value); + return dr; + + } + /// + /// Show Editable Input Box Dialog with Icon + /// + /// Dialog Window Title + /// Parameter Prompt Text + /// Parameter Value + /// Image Icon + /// DialogResult + public static DialogResult QueryNumberBox(string title, string promptText, ref int value, Bitmap icon) + { + InputBox ib = new InputBox(title, promptText, value.ToString()); + ib.Icon = icon; + DialogResult dr = ib.ShowNumericBoxed(ref value, int.MinValue, int.MaxValue); + value = int.Parse(ib.Value); + return dr; + + } + /// + /// Show Editable Input Box Dialog + /// + /// Dialog Window Title + /// Parameter Prompt Text + /// Parameter Value + /// Minimum Allowed Value + /// Maximum Allowed Value + /// DialogResult + public static DialogResult QueryNumberBox(string title, string promptText, ref int value, int min, int max) + { + InputBox ib = new InputBox(title, promptText, value.ToString()); + DialogResult dr = ib.ShowNumericBoxed(ref value, min, max); + value = int.Parse(ib.Value); + return dr; + + } + /// + /// Show Editable Input Box Dialog with Icon + /// + /// Dialog Window Title + /// Parameter Prompt Text + /// Parameter Value + /// Minimum Allowed Value + /// Maximum Allowed Value + /// Image Icon + /// DialogResult + public static DialogResult QueryNumberBox(string title, string promptText, ref int value, int min, int max, Bitmap icon) + { + InputBox ib = new InputBox(title, promptText, value.ToString()); + ib.Icon = icon; + DialogResult dr = ib.ShowNumericBoxed(ref value, min, max); + value = int.Parse(ib.Value); + return dr; + + } + + + /// + /// Show Selectable List Box + /// + /// Dialog Window Title + /// Parameter Prompt Text + /// List Values + /// Selected Value Index + /// DialogResult + public static DialogResult Show(string title, string promptText, string[] values, ref int selectedValue) + { + InputBox ib = new InputBox(title, promptText, values, selectedValue); + ib.ReadOnly = true; + DialogResult dr = ib.Show(); + selectedValue = ib.SelectedIndex; + return dr; + + } + /// + /// Show Selectable List Box with Icon + /// + /// Dialog Window Title + /// Parameter Prompt Text + /// List Values + /// Selected Value Index + /// Image Icon + /// DialogResult + public static DialogResult Show(string title, string promptText, string[] values, ref int selectedValue, Bitmap icon) + { + InputBox ib = new InputBox(title, promptText, values, selectedValue); + ib.ReadOnly = true; + ib.Icon = icon; + DialogResult dr = ib.Show(); + selectedValue = ib.SelectedIndex; + return dr; + + } + /// + /// Show Selectable List Box with Icons + /// + /// Dialog Window Title + /// Parameter Prompt Text + /// List Values + /// Selected Value Index + /// ImageList + /// DialogResult + public static DialogResult Show(string title, string promptText, string[] values, ref int selectedValue, ImageList icons) + { + InputBox ib = new InputBox(title, promptText, values, selectedValue); + ib.ReadOnly = true; + ib.IconList = icons; + DialogResult dr = ib.Show(); + selectedValue = ib.SelectedIndex; + return dr; + + } + /// + /// Show Selectable List Box + /// + /// Dialog Window Title + /// Parameter Prompt Text + /// List Values + /// Selected Value Text + /// DialogResult + public static DialogResult Show(string title, string promptText, string[] values, ref string selectedValue) + { + InputBox ib = new InputBox(title, promptText, values); + ib.ReadOnly = true; + ib.Value = selectedValue; + DialogResult dr = ib.Show(); + selectedValue = ib.Value; + return dr; + + } + /// + /// Show Selectable List Box with Icon + /// + /// Dialog Window Title + /// Parameter Prompt Text + /// List Values + /// Selected Value Text + /// Image Icon + /// DialogResult + public static DialogResult Show(string title, string promptText, string[] values, ref string selectedValue, Bitmap icon) + { + InputBox ib = new InputBox(title, promptText, values); + ib.ReadOnly = true; + ib.Icon = icon; + ib.Value = selectedValue; + DialogResult dr = ib.Show(); + selectedValue = ib.Value; + return dr; + + } + /// + /// Show Selectable List Box with Icons + /// + /// Dialog Window Title + /// Parameter Prompt Text + /// List Values + /// Selected Value Text + /// ImageList + /// DialogResult + public static DialogResult Show(string title, string promptText, string[] values, ref string selectedValue, ImageList icons) + { + InputBox ib = new InputBox(title, promptText, values); + ib.ReadOnly = true; + ib.IconList = icons; + ib.Value = selectedValue; + DialogResult dr = ib.Show(); + selectedValue = ib.Value; + return dr; + } + + /// + /// Show Changable List Box + /// + /// Dialog Window Title + /// Parameter Prompt Text + /// List Values + /// Selected Value Text + /// Input Mask or Regex for Value + /// If text is Input Mask it starts from M. If text is Regex it starts from R. + /// Input Mask symbols: 0 - digits; 9 - digits and spaces; # - digits, spaces, +, - + /// L - letter; ? - letters if need; A - letter or digit; . - decimal separator; + /// , - space for digits; / - date separator; $ - currency symbol + /// Regex: http://regexstorm.net/reference + /// + /// DialogResult + public static DialogResult Show(string title, string promptText, string[] values, ref string selectedValue, string InputMaskOrRegex) + { + InputBox ib = new InputBox(title, promptText, values); + ib.InputMaskOrRegex = InputMaskOrRegex; + ib.ReadOnly = false; + ib.Value = selectedValue; + DialogResult dr = ib.Show(); + selectedValue = ib.Value; + return dr; + } + /// + /// Show Changable List Box with Icon + /// + /// Dialog Window Title + /// Parameter Prompt Text + /// List Values + /// Selected Value Text + /// Input Mask or Regex for Value + /// If text is Input Mask it starts from M. If text is Regex it starts from R. + /// Input Mask symbols: 0 - digits; 9 - digits and spaces; # - digits, spaces, +, - + /// L - letter; ? - letters if need; A - letter or digit; . - decimal separator; + /// , - space for digits; / - date separator; $ - currency symbol + /// Regex: http://regexstorm.net/reference + /// + /// Image Icon + /// DialogResult + public static DialogResult Show(string title, string promptText, string[] values, ref string selectedValue, string InputMaskOrRegex, Bitmap icon) + { + InputBox ib = new InputBox(title, promptText, values); + ib.InputMaskOrRegex = InputMaskOrRegex; + ib.ReadOnly = false; + ib.Icon = icon; + ib.Value = selectedValue; + DialogResult dr = ib.Show(); + selectedValue = ib.Value; + return dr; + } + /// + /// Show Listable or Changable List + /// + /// Dialog Window Title + /// Parameter Prompt Text + /// List Values + /// Selected Value Text + /// Changable or Editable + /// DialogResult + public static DialogResult Show(string title, string promptText, string[] values, ref string selectedValue, bool allowNewValue) + { + InputBox ib = new InputBox(title, promptText, values); + ib.ReadOnly = !allowNewValue; + ib.Value = selectedValue; + DialogResult dr = ib.Show(); + selectedValue = ib.Value; + return dr; + } + /// + /// Show Listable or Changable List with Icon + /// + /// Dialog Window Title + /// Parameter Prompt Text + /// List Values + /// Selected Value Text + /// Changable or Editable + /// Image Icon + /// DialogResult + public static DialogResult Show(string title, string promptText, string[] values, ref string selectedValue, bool allowNewValue, Bitmap icon) + { + InputBox ib = new InputBox(title, promptText, values); + ib.ReadOnly = !allowNewValue; + ib.Icon = icon; + ib.Value = selectedValue; + DialogResult dr = ib.Show(); + selectedValue = ib.Value; + return dr; + } + + /// + /// Show Selectable List Box + /// + /// Dialog Window Title + /// Parameter Prompt Text + /// List Values + /// Selected Value Index + /// DialogResult + public static DialogResult QueryListBox(string title, string promptText, string[] values, ref int selectedValue) + { + InputBox ib = new InputBox(title, promptText, values, selectedValue); + ib.ReadOnly = true; + DialogResult dr = ib.Show(); + selectedValue = ib.SelectedIndex; + return dr; + + } + /// + /// Show Selectable List Box with Icon + /// + /// Dialog Window Title + /// Parameter Prompt Text + /// List Values + /// Selected Value Index + /// Image Icon + /// DialogResult + public static DialogResult QueryListBox(string title, string promptText, string[] values, ref int selectedValue, Bitmap icon) + { + InputBox ib = new InputBox(title, promptText, values, selectedValue); + ib.ReadOnly = true; + ib.Icon = icon; + DialogResult dr = ib.Show(); + selectedValue = ib.SelectedIndex; + return dr; + + } + /// + /// Show Selectable List Box + /// + /// Dialog Window Title + /// Parameter Prompt Text + /// List Values + /// Selected Value Text + /// DialogResult + public static DialogResult QueryListBox(string title, string promptText, string[] values, ref string selectedValue) + { + InputBox ib = new InputBox(title, promptText, values); + ib.ReadOnly = true; + ib.Value = selectedValue; + DialogResult dr = ib.Show(); + selectedValue = ib.Value; + return dr; + + } + /// + /// Show Selectable List Box with Icon + /// + /// Dialog Window Title + /// Parameter Prompt Text + /// List Values + /// Selected Value Text + /// Image Icon + /// DialogResult + public static DialogResult QueryListBox(string title, string promptText, string[] values, ref string selectedValue, Bitmap icon) + { + InputBox ib = new InputBox(title, promptText, values); + ib.ReadOnly = true; + ib.Icon = icon; + ib.Value = selectedValue; + DialogResult dr = ib.Show(); + selectedValue = ib.Value; + return dr; + + } + /// + /// Show Changable List Box + /// + /// Dialog Window Title + /// Parameter Prompt Text + /// List Values + /// Selected Value Text + /// Input Mask or Regex for Value + /// If text is Input Mask it starts from M. If text is Regex it starts from R. + /// Input Mask symbols: 0 - digits; 9 - digits and spaces; # - digits, spaces, +, - + /// L - letter; ? - letters if need; A - letter or digit; . - decimal separator; + /// , - space for digits; / - date separator; $ - currency symbol + /// Regex: http://regexstorm.net/reference + /// + /// DialogResult + public static DialogResult QueryListBox(string title, string promptText, string[] values, ref string selectedValue, string InputMaskOrRegex) + { + InputBox ib = new InputBox(title, promptText, values); + ib.InputMaskOrRegex = InputMaskOrRegex; + ib.ReadOnly = false; + ib.Value = selectedValue; + DialogResult dr = ib.Show(); + selectedValue = ib.Value; + return dr; + } + /// + /// Show Changable List Box with Icon + /// + /// Dialog Window Title + /// Parameter Prompt Text + /// List Values + /// Selected Value Text + /// Input Mask or Regex for Value + /// If text is Input Mask it starts from M. If text is Regex it starts from R. + /// Input Mask symbols: 0 - digits; 9 - digits and spaces; # - digits, spaces, +, - + /// L - letter; ? - letters if need; A - letter or digit; . - decimal separator; + /// , - space for digits; / - date separator; $ - currency symbol + /// Regex: http://regexstorm.net/reference + /// + /// Image Icon + /// DialogResult + public static DialogResult QueryListBox(string title, string promptText, string[] values, ref string selectedValue, string InputMaskOrRegex, Bitmap icon) + { + InputBox ib = new InputBox(title, promptText, values); + ib.InputMaskOrRegex = InputMaskOrRegex; + ib.ReadOnly = false; + ib.Icon = icon; + ib.Value = selectedValue; + DialogResult dr = ib.Show(); + selectedValue = ib.Value; + return dr; + } + /// + /// Show Listable or Changable List + /// + /// Dialog Window Title + /// Parameter Prompt Text + /// List Values + /// Selected Value Text + /// Changable or Editable + /// DialogResult + public static DialogResult QueryListBox(string title, string promptText, string[] values, ref string selectedValue, bool allowNewValue) + { + InputBox ib = new InputBox(title, promptText, values); + ib.ReadOnly = !allowNewValue; + ib.Value = selectedValue; + DialogResult dr = ib.Show(); + selectedValue = ib.Value; + return dr; + } + /// + /// Show Listable or Changable List with Icon + /// + /// Dialog Window Title + /// Parameter Prompt Text + /// List Values + /// Selected Value Text + /// Changable or Editable + /// Image Icon + /// DialogResult + public static DialogResult QueryListBox(string title, string promptText, string[] values, ref string selectedValue, bool allowNewValue, Bitmap icon) + { + InputBox ib = new InputBox(title, promptText, values); + ib.ReadOnly = !allowNewValue; + ib.Icon = icon; + ib.Value = selectedValue; + DialogResult dr = ib.Show(); + selectedValue = ib.Value; + return dr; + } + + /// + /// Show Two-List DropBox + /// + /// Dialog Window Title + /// Parameter Prompt Text + /// boolean value + /// Text for False Value + /// Text for True Value + /// DialogResult + public static DialogResult Show(string title, string promptText, ref bool value, string textFalse, string textTrue) + { + InputBox ib = new InputBox(title, promptText, new string[] { textFalse, textTrue }, value ? 1 : 0); + ib.ReadOnly = true; + DialogResult dr = ib.Show(); + value = ib.SelectedIndex == 1; + return dr; + } + /// + /// Show Two-List DropBox with Icon + /// + /// Dialog Window Title + /// Parameter Prompt Text + /// boolean value + /// Text for False Value + /// Text for True Value + /// Image Icon + /// DialogResult + public static DialogResult Show(string title, string promptText, ref bool value, string textFalse, string textTrue, Bitmap icon) + { + InputBox ib = new InputBox(title, promptText, new string[] { textFalse, textTrue }, value ? 1 : 0); + ib.Icon = icon; + ib.ReadOnly = true; + DialogResult dr = ib.Show(); + value = ib.SelectedIndex == 1; + return dr; + } + + /// + /// Show ReadOnly Box Dialog + /// + /// Dialog Window Title + /// Parameter Prompt Text + /// Parameter Value + /// DialogResult + public static DialogResult Show(string title, string promptText, float value) + { + InputBox ib = new InputBox(title, promptText, value.ToString(System.Globalization.CultureInfo.InvariantCulture)); + ib.ReadOnly = true; + DialogResult dr = ib.Show(); + return dr; + + } + /// + /// Show ReadOnly Box Dialog with Icon + /// + /// Dialog Window Title + /// Parameter Prompt Text + /// Parameter Value + /// Image Icon + /// DialogResult + public static DialogResult Show(string title, string promptText, float value, Bitmap icon) + { + InputBox ib = new InputBox(title, promptText, value.ToString(System.Globalization.CultureInfo.InvariantCulture)); + ib.Icon = icon; + ib.ReadOnly = true; + DialogResult dr = ib.Show(); + return dr; + + } + /// + /// Show Editable Input Box Dialog + /// + /// Dialog Window Title + /// Parameter Prompt Text + /// Parameter Value + /// DialogResult + public static DialogResult Show(string title, string promptText, ref float value) + { + InputBox ib = new InputBox(title, promptText, value.ToString(System.Globalization.CultureInfo.InvariantCulture)); + ib.InputMaskOrRegex = "^(([+-]?)|([+-]?[0-9]{1,}[.]?[0-9]{0,})|([+-]?[.][0-9]{0,}))$"; + DialogResult dr = ib.Show(); + if ((ib.Value == "-") || (ib.Value == ".")) + value = 0; + else + value = float.Parse(ib.Value, System.Globalization.CultureInfo.InvariantCulture); + return dr; + + } + /// + /// Show Editable Input Box Dialog with Icon + /// + /// Dialog Window Title + /// Parameter Prompt Text + /// Parameter Value + /// Image Icon + /// DialogResult + public static DialogResult Show(string title, string promptText, ref float value, Bitmap icon) + { + InputBox ib = new InputBox(title, promptText, value.ToString(System.Globalization.CultureInfo.InvariantCulture)); + ib.InputMaskOrRegex = "^(([+-]?)|([+-]?[0-9]{1,}[.]?[0-9]{0,})|([+-]?[.][0-9]{0,}))$"; + ib.Icon = icon; + DialogResult dr = ib.Show(); + if ((ib.Value == "-") || (ib.Value == ".")) + value = 0; + else + value = float.Parse(ib.Value, System.Globalization.CultureInfo.InvariantCulture); + return dr; + } + + /// + /// Show ReadOnly Box Dialog + /// + /// Dialog Window Title + /// Parameter Prompt Text + /// Parameter Value + /// DialogResult + public static DialogResult QueryNumberBox(string title, string promptText, float value) + { + InputBox ib = new InputBox(title, promptText, value.ToString(System.Globalization.CultureInfo.InvariantCulture)); + ib.ReadOnly = true; + DialogResult dr = ib.Show(); + return dr; + + } + /// + /// Show ReadOnly Box Dialog with Icon + /// + /// Dialog Window Title + /// Parameter Prompt Text + /// Parameter Value + /// Image Icon + /// DialogResult + public static DialogResult QueryNumberBox(string title, string promptText, float value, Bitmap icon) + { + InputBox ib = new InputBox(title, promptText, value.ToString(System.Globalization.CultureInfo.InvariantCulture)); + ib.Icon = icon; + ib.ReadOnly = true; + DialogResult dr = ib.Show(); + return dr; + + } + /// + /// Show Editable Input Box Dialog + /// + /// Dialog Window Title + /// Parameter Prompt Text + /// Parameter Value + /// DialogResult + public static DialogResult QueryNumberBox(string title, string promptText, ref float value) + { + InputBox ib = new InputBox(title, promptText, value.ToString(System.Globalization.CultureInfo.InvariantCulture)); + ib.InputMaskOrRegex = "^(([+-]?)|([+-]?[0-9]{1,}[.]?[0-9]{0,})|([+-]?[.][0-9]{0,}))$"; + DialogResult dr = ib.Show(); + if ((ib.Value == "-") || (ib.Value == ".")) + value = 0; + else + value = float.Parse(ib.Value, System.Globalization.CultureInfo.InvariantCulture); + return dr; + + } + /// + /// Show Editable Input Box Dialog with Icon + /// + /// Dialog Window Title + /// Parameter Prompt Text + /// Parameter Value + /// Image Icon + /// DialogResult + public static DialogResult QueryNumberBox(string title, string promptText, ref float value, Bitmap icon) + { + InputBox ib = new InputBox(title, promptText, value.ToString(System.Globalization.CultureInfo.InvariantCulture)); + ib.InputMaskOrRegex = "^(([+-]?)|([+-]?[0-9]{1,}[.]?[0-9]{0,})|([+-]?[.][0-9]{0,}))$"; + ib.Icon = icon; + DialogResult dr = ib.Show(); + if ((ib.Value == "-") || (ib.Value == ".")) + value = 0; + else + value = float.Parse(ib.Value, System.Globalization.CultureInfo.InvariantCulture); + return dr; + } + + /// + /// Show ReadOnly Box Dialog + /// + /// Dialog Window Title + /// Parameter Prompt Text + /// Parameter Value + /// DialogResult + public static DialogResult Show(string title, string promptText, double value) + { + InputBox ib = new InputBox(title, promptText, value.ToString(System.Globalization.CultureInfo.InvariantCulture)); + ib.ReadOnly = true; + DialogResult dr = ib.Show(); + return dr; + + } + /// + /// Show ReadOnly Box Dialog with Icon + /// + /// Dialog Window Title + /// Parameter Prompt Text + /// Parameter Value + /// Image Icon + /// DialogResult + public static DialogResult Show(string title, string promptText, double value, Bitmap icon) + { + InputBox ib = new InputBox(title, promptText, value.ToString(System.Globalization.CultureInfo.InvariantCulture)); + ib.Icon = icon; + ib.ReadOnly = true; + DialogResult dr = ib.Show(); + return dr; + + } + /// + /// Show Editable Input Box Dialog + /// + /// Dialog Window Title + /// Parameter Prompt Text + /// Parameter Value + /// DialogResult + public static DialogResult Show(string title, string promptText, ref double value) + { + InputBox ib = new InputBox(title, promptText, value.ToString(System.Globalization.CultureInfo.InvariantCulture)); + ib.InputMaskOrRegex = "^(([+-]?)|([+-]?[0-9]{1,}[.]?[0-9]{0,})|([+-]?[.][0-9]{0,}))$"; + DialogResult dr = ib.Show(); + if ((ib.Value == "-") || (ib.Value == ".")) + value = 0; + else + value = double.Parse(ib.Value, System.Globalization.CultureInfo.InvariantCulture); + return dr; + + } + /// + /// Show Editable Input Box Dialog with Icon + /// + /// Dialog Window Title + /// Parameter Prompt Text + /// Parameter Value + /// Image Icon + /// DialogResult + public static DialogResult Show(string title, string promptText, ref double value, Bitmap icon) + { + InputBox ib = new InputBox(title, promptText, value.ToString(System.Globalization.CultureInfo.InvariantCulture)); + ib.InputMaskOrRegex = "^(([+-]?)|([+-]?[0-9]{1,}[.]?[0-9]{0,})|([+-]?[.][0-9]{0,}))$"; + ib.Icon = icon; + DialogResult dr = ib.Show(); + if ((ib.Value == "-") || (ib.Value == ".")) + value = 0; + else + value = double.Parse(ib.Value, System.Globalization.CultureInfo.InvariantCulture); + return dr; + } + + /// + /// Show ReadOnly Box Dialog + /// + /// Dialog Window Title + /// Parameter Prompt Text + /// Parameter Value + /// DialogResult + public static DialogResult QueryNumberBox(string title, string promptText, double value) + { + InputBox ib = new InputBox(title, promptText, value.ToString(System.Globalization.CultureInfo.InvariantCulture)); + ib.ReadOnly = true; + DialogResult dr = ib.Show(); + return dr; + + } + /// + /// Show ReadOnly Box Dialog with Icon + /// + /// Dialog Window Title + /// Parameter Prompt Text + /// Parameter Value + /// Image Icon + /// DialogResult + public static DialogResult QueryNumberBox(string title, string promptText, double value, Bitmap icon) + { + InputBox ib = new InputBox(title, promptText, value.ToString(System.Globalization.CultureInfo.InvariantCulture)); + ib.Icon = icon; + ib.ReadOnly = true; + DialogResult dr = ib.Show(); + return dr; + + } + /// + /// Show Editable Input Box Dialog + /// + /// Dialog Window Title + /// Parameter Prompt Text + /// Parameter Value + /// DialogResult + public static DialogResult QueryNumberBox(string title, string promptText, ref double value) + { + InputBox ib = new InputBox(title, promptText, value.ToString(System.Globalization.CultureInfo.InvariantCulture)); + ib.InputMaskOrRegex = "^(([+-]?)|([+-]?[0-9]{1,}[.]?[0-9]{0,})|([+-]?[.][0-9]{0,}))$"; + DialogResult dr = ib.Show(); + if ((ib.Value == "-") || (ib.Value == ".")) + value = 0; + else + value = double.Parse(ib.Value, System.Globalization.CultureInfo.InvariantCulture); + return dr; + + } + /// + /// Show Editable Input Box Dialog with Icon + /// + /// Dialog Window Title + /// Parameter Prompt Text + /// Parameter Value + /// Image Icon + /// DialogResult + public static DialogResult QueryNumberBox(string title, string promptText, ref double value, Bitmap icon) + { + InputBox ib = new InputBox(title, promptText, value.ToString(System.Globalization.CultureInfo.InvariantCulture)); + ib.InputMaskOrRegex = "^(([+-]?)|([+-]?[0-9]{1,}[.]?[0-9]{0,})|([+-]?[.][0-9]{0,}))$"; + ib.Icon = icon; + DialogResult dr = ib.Show(); + if ((ib.Value == "-") || (ib.Value == ".")) + value = 0; + else + value = double.Parse(ib.Value, System.Globalization.CultureInfo.InvariantCulture); + return dr; + } + + /// + /// Show Listable Input Box Dialog for typeof(Enum) + /// + /// Dialog Window Title + /// Parameter Prompt Text + /// Type of Enum + /// Selected Value + /// DialogResult + public static DialogResult Show(string title, string promptText, Type enumType, ref object selectedValue) + { + Array vls = Enum.GetValues((enumType)); + + List vals = new List(); + foreach (string element in Enum.GetNames(enumType)) + vals.Add(element); + + InputBox ib = new InputBox(title, promptText, vals.ToArray()); + ib.Value = selectedValue.ToString(); + ib.ReadOnly = true; + DialogResult dr = ib.Show(); + selectedValue = vls.GetValue(ib.SelectedIndex); + return dr; + } + /// + /// Show Listable Input Box Dialog for typeof(Enum) + /// + /// Dialog Window Title + /// Parameter Prompt Text + /// Type of Enum + /// Selected Value + /// /// Image Icon + /// DialogResult + public static DialogResult Show(string title, string promptText, Type enumType, ref object selectedValue, Bitmap icon) + { + Array vls = Enum.GetValues((enumType)); + + List vals = new List(); + foreach (string element in Enum.GetNames(enumType)) + vals.Add(element); + + InputBox ib = new InputBox(title, promptText, vals.ToArray()); + ib.Icon = icon; + ib.Value = selectedValue.ToString(); + ib.ReadOnly = true; + DialogResult dr = ib.Show(); + selectedValue = vls.GetValue(ib.SelectedIndex); + return dr; + } + + /// + /// Show Editable Directory Input Box With Browse Button + /// + /// Dialog Window Title + /// Parameter Prompt Text + /// DIrectory + /// DialogResult + public static DialogResult QueryDirectoryBox(string title, string promptText, ref string path) + { + InputBox ib = new InputBox(title, promptText, path); + DialogResult dr = ib.ShowSelectDir(); + path = ib.Value; + return dr; + } + /// + /// Show Editable Directory Input Box With Browse Button + /// + /// Dialog Window Title + /// Parameter Prompt Text + /// DIrectory + /// Image Icon + /// DialogResult + public static DialogResult QueryDirectoryBox(string title, string promptText, ref string path, Bitmap icon) + { + InputBox ib = new InputBox(title, promptText, path); + ib.Icon = icon; + DialogResult dr = ib.ShowSelectDir(); + path = ib.Value; + return dr; + } + + /// + /// Show Editable File Input Box + /// + /// Dialog Window Title + /// Parameter Prompt Text + /// File Path + /// OpenFileDialog Filter + /// DialogResult + public static DialogResult QueryFileBox(string title, string promptText, ref string file, string filter) + { + InputBox ib = new InputBox(title, promptText, file); + DialogResult dr = ib.ShowSelectFile(filter); + file = ib.Value; + return dr; + } + + /// + /// Show Editable File Input Box with Icon + /// + /// Dialog Window Title + /// Parameter Prompt Text + /// File Path + /// OpenFileDialog Filter + /// Image Icon + /// DialogResult + public static DialogResult QueryFileBox(string title, string promptText, ref string file, string filter, Bitmap icon) + { + InputBox ib = new InputBox(title, promptText, file); + DialogResult dr = ib.ShowSelectFile(filter); + file = ib.Value; + return dr; + } + + /// + /// Show Editable Color Box + /// + /// Dialog Window Title + /// Parameter Prompt Text + /// Color + /// DialogResult + public static DialogResult QueryColorBox(string title, string promptText, ref Color color) + { + InputBox ib = new InputBox(title, promptText); + DialogResult dr = ib.ShowSelectColor(ref color); + return dr; + } + + private static String HexConverter(Color c) + { + return "#" + c.R.ToString("X2") + c.G.ToString("X2") + c.B.ToString("X2"); + } + + private static Color RGBConverter(string hex) + { + Color rtn = Color.Black; + try + { + return Color.FromArgb( + int.Parse(hex.Substring(1, 2), System.Globalization.NumberStyles.HexNumber), + int.Parse(hex.Substring(3, 2), System.Globalization.NumberStyles.HexNumber), + int.Parse(hex.Substring(5, 2), System.Globalization.NumberStyles.HexNumber)); + } + catch { }; + + return rtn; + } + + private static TextBox query_info_box = null; + public static DialogResult QueryInfoBox(string title, string topText, string bottomText, string mainText) + { + return QueryInfoBox(title, topText, bottomText, mainText, true, false, MessageBoxButtons.OK, true); + } + public static DialogResult QueryInfoBox(string title, string topText, string bottomText, string mainText, bool readOnly, bool allowNewLoadSave, MessageBoxButtons buttons, bool closeButton) + { + Form form = closeButton ? new Form() : new InputBoxForm(); + form.DialogResult = DialogResult.Cancel; + form.ShowInTaskbar = pShowInTaskBar; + form.Text = title; + form.ClientSize = new Size(defWidth, 107); + form.FormBorderStyle = FormBorderStyle.FixedDialog; + form.StartPosition = FormStartPosition.CenterParent; + form.MinimizeBox = false; + form.MaximizeBox = false; + form.ClientSize = new Size(500, 400); + + Panel panel1 = new Panel(); + Label label1 = new Label(); + Panel panel2 = new Panel(); + Label label2 = new Label(); + Panel panel3 = new Panel(); + Panel panel4 = new Panel(); + TextBox textBox1 = new TextBox(); + Panel panel5 = new Panel(); + Panel panel6 = new Panel(); + Button button4 = new Button(); + Button button3 = new Button(); + Button button5 = new Button(); + + int btnCount = 1; + if ((buttons == MessageBoxButtons.OKCancel) || (buttons == MessageBoxButtons.YesNo) || (buttons == MessageBoxButtons.RetryCancel)) btnCount = 2; + if ((buttons == MessageBoxButtons.AbortRetryIgnore) || (buttons == MessageBoxButtons.YesNoCancel)) btnCount = 3; + Button[] Buttons = new Button[btnCount]; + for (int i = 0; i < btnCount; i++) + { + Buttons[i] = new Button(); + Buttons[i].Text = pOk_Text; + if (i == 0) + { + if (buttons == MessageBoxButtons.OK) { Buttons[i].Text = pOk_Text; Buttons[i].DialogResult = DialogResult.OK; }; + if (buttons == MessageBoxButtons.OKCancel) { Buttons[i].Text = pOk_Text; Buttons[i].DialogResult = DialogResult.OK; }; + if (buttons == MessageBoxButtons.AbortRetryIgnore) { Buttons[i].Text = pOk_Abort; Buttons[i].DialogResult = DialogResult.Abort; }; + if (buttons == MessageBoxButtons.YesNoCancel) { Buttons[i].Text = pOk_Yes; Buttons[i].DialogResult = DialogResult.Yes; }; + if (buttons == MessageBoxButtons.YesNo) { Buttons[i].Text = pOk_Yes; Buttons[i].DialogResult = DialogResult.Yes; }; + if (buttons == MessageBoxButtons.RetryCancel) { Buttons[i].Text = pOk_Retry; Buttons[i].DialogResult = DialogResult.Retry; }; + }; + if (i == 1) + { + if (buttons == MessageBoxButtons.OKCancel) { Buttons[i].Text = pCancel_Text; Buttons[i].DialogResult = DialogResult.Cancel; }; + if (buttons == MessageBoxButtons.AbortRetryIgnore) { Buttons[i].Text = pOk_Retry; Buttons[i].DialogResult = DialogResult.Retry; }; + if (buttons == MessageBoxButtons.YesNoCancel) { Buttons[i].Text = pOk_No; Buttons[i].DialogResult = DialogResult.No; }; + if (buttons == MessageBoxButtons.YesNo) { Buttons[i].Text = pOk_No; Buttons[i].DialogResult = DialogResult.No; }; + if (buttons == MessageBoxButtons.RetryCancel) { Buttons[i].Text = pCancel_Text; Buttons[i].DialogResult = DialogResult.Cancel; }; + }; + if (i == 2) + { + if (buttons == MessageBoxButtons.AbortRetryIgnore) { Buttons[i].Text = pOk_Ignore; Buttons[i].DialogResult = DialogResult.Ignore; }; + if (buttons == MessageBoxButtons.YesNoCancel) { Buttons[i].Text = pCancel_Text; Buttons[i].DialogResult = DialogResult.Cancel; }; + }; + Buttons[i].BackColor = System.Drawing.SystemColors.Control; + Buttons[i].Location = new System.Drawing.Point(9 + 81 * i, 10); + Buttons[i].Size = new System.Drawing.Size(75, 23); + }; + panel3.Controls.AddRange(Buttons); + + panel1.BackColor = System.Drawing.SystemColors.Window; + panel1.Controls.Add(label1); + panel1.Dock = System.Windows.Forms.DockStyle.Top; + panel1.Location = new System.Drawing.Point(0, 0); + panel1.Size = new System.Drawing.Size(578, 45); + label1.AutoSize = true; + label1.Location = new System.Drawing.Point(12, 14); + label1.Size = new System.Drawing.Size(174, 26); + label1.Text = topText; + panel2.BackColor = System.Drawing.SystemColors.Window; + panel2.Controls.Add(label2); + panel2.Controls.Add(panel3); + panel2.Dock = System.Windows.Forms.DockStyle.Bottom; + panel2.Location = new System.Drawing.Point(0, 432); + panel2.Size = new System.Drawing.Size(578, 45); + panel3.Dock = System.Windows.Forms.DockStyle.Right; + panel3.Location = new System.Drawing.Point(400, 0); + panel3.Size = new System.Drawing.Size(34 + 81 * btnCount, 45); + label2.AutoSize = true; + label2.Location = new System.Drawing.Point(12, 16); + label2.Size = new System.Drawing.Size(12, 13); + label2.Text = bottomText; + panel4.Controls.Add(textBox1); + panel4.Controls.Add(panel6); + panel4.Controls.Add(panel5); + panel4.Dock = System.Windows.Forms.DockStyle.Fill; + panel4.Location = new System.Drawing.Point(0, 135); + panel4.Size = new System.Drawing.Size(578, 297); + panel5.BackColor = System.Drawing.SystemColors.Window; + panel5.Dock = System.Windows.Forms.DockStyle.Left; + panel5.Location = new System.Drawing.Point(0, 0); + panel5.Size = new System.Drawing.Size(34, 297); + textBox1.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + textBox1.Dock = System.Windows.Forms.DockStyle.Fill; + textBox1.Location = new System.Drawing.Point(34, 0); + textBox1.Multiline = true; + textBox1.ScrollBars = System.Windows.Forms.ScrollBars.Both; + textBox1.Size = new System.Drawing.Size(510, 297); + textBox1.Text = mainText; + textBox1.SelectionStart = 0; + Color bc = textBox1.BackColor; + textBox1.ReadOnly = readOnly; + textBox1.BackColor = bc; + panel6.BackColor = System.Drawing.SystemColors.Window; + panel6.Controls.Add(button5); + panel6.Controls.Add(button4); + panel6.Controls.Add(button3); + panel6.Dock = System.Windows.Forms.DockStyle.Right; + panel6.Location = new System.Drawing.Point(544, 0); + panel6.Size = new System.Drawing.Size(34, 297); + button4.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + button4.Location = new System.Drawing.Point(6, 54); + button4.Size = new System.Drawing.Size(22, 23); + button4.Text = "S"; + button3.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + button3.Location = new System.Drawing.Point(6, 30); + button3.Size = new System.Drawing.Size(22, 23); + button3.Text = readOnly ? "" : "L"; + button5.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + button5.Location = new System.Drawing.Point(6, 6); + button5.Size = new System.Drawing.Size(22, 23); + button5.TabIndex = 3; + button5.Text = readOnly ? "" : "N"; + if (!readOnly) + { + button3.Click += new EventHandler(buttonLNS_Click); + button4.Click += new EventHandler(buttonLNS_Click); + button5.Click += new EventHandler(buttonLNS_Click); + }; + form.Controls.Add(panel4); + form.Controls.Add(panel1); + form.Controls.Add(panel2); + form.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent; + + { + //button1.Text = fullview ? pCancel_Text : pOk_Text; + //button2.Visible = fullview; + button3.Visible = allowNewLoadSave; + button4.Visible = allowNewLoadSave; + button5.Visible = allowNewLoadSave; + + button3.Enabled = !readOnly; + button4.Enabled = !String.IsNullOrEmpty(mainText); + button5.Enabled = !readOnly; + }; + + query_info_box = textBox1; + DialogResult dr = form.ShowDialog(); + query_info_box = null; + form.Dispose(); + return dr; + } + + private static void buttonLNS_Click(object sender, EventArgs e) + { + if (sender is Button) + { + if (query_info_box == null) return; + Button btn = (Button)sender; + if (btn.Text == "N") + query_info_box.Text = ""; + if (btn.Text == "L") + { + OpenFileDialog ofd = new OpenFileDialog(); + ofd.Filter = "Text Files (*.txt)|*.txt|All Types (*.*)|*.*"; + ofd.DefaultExt = ".txt"; + if (ofd.ShowDialog() == DialogResult.OK) + { + try + { + FileStream fs = new FileStream(ofd.FileName, FileMode.Open, FileAccess.Read); + StreamReader sr = new StreamReader(fs, System.Text.Encoding.GetEncoding(1251)); + query_info_box.Text = sr.ReadToEnd(); + sr.Close(); + fs.Close(); + } + catch { }; + }; + ofd.Dispose(); + }; + if (btn.Text == "S") + { + SaveFileDialog sfd = new SaveFileDialog(); + sfd.Filter = "Text Files (*.txt)|*.txt|All Types (*.*)|*.*"; + sfd.DefaultExt = ".txt"; + if (sfd.ShowDialog() == DialogResult.OK) + { + try + { + FileStream fs = new FileStream(sfd.FileName, FileMode.Create, FileAccess.Write); + StreamWriter sw = new StreamWriter(fs, System.Text.Encoding.GetEncoding(1251)); + sw.Write(query_info_box.Text); + sw.Close(); + fs.Close(); + } + catch { }; + }; + sfd.Dispose(); + }; + }; + } + } + + public class InputBoxForm : Form + { + private const int CP_NOCLOSE_BUTTON = 0x200; + protected override CreateParams CreateParams + { + get + { + CreateParams myCp = base.CreateParams; + myCp.ClassStyle = myCp.ClassStyle | CP_NOCLOSE_BUTTON; + return myCp; + } + } + } + + public class ComboIcons : ComboBox + { + public ComboIcons() + { + DrawMode = DrawMode.OwnerDrawFixed; + DropDownStyle = ComboBoxStyle.DropDownList; + } + + protected override void OnDrawItem(DrawItemEventArgs e) + { + e.DrawBackground(); + e.DrawFocusRectangle(); + if (e.Index >= 0 && e.Index < Items.Count) + { + DropDownItem item = (DropDownItem)Items[e.Index]; + e.Graphics.DrawImage(item.Image, e.Bounds.Left, e.Bounds.Top); + e.Graphics.DrawString(item.Value, e.Font, new SolidBrush(e.ForeColor), e.Bounds.Left + item.Image.Width + 1, e.Bounds.Top + 2); + }; + base.OnDrawItem(e); + } + } + + public class DropDownItem + { + private string value; + public string Value + { + get { return this.value; } + set { this.value = value; } + } + + private Image img; + public Image Image + { + get { return this.img; } + set { this.img = value; } + } + + public DropDownItem() : this("", Color.Black) { } + + public DropDownItem(string val) : this(val, Color.Black) { } + + public DropDownItem(string val, Color color) + { + this.value = val; + this.img = new Bitmap(16, 16); + using (Graphics g = Graphics.FromImage(this.img)) + { + using (Brush b = new SolidBrush(color)) + { + g.DrawRectangle(Pens.White, 0, 0, Image.Width, Image.Height); + g.FillRectangle(b, 1, 1, Image.Width - 1, Image.Height - 1); + }; + }; + } + + public DropDownItem(string val, Image im) + { + this.value = val; + this.img = im; + } + + public override string ToString() + { + return value; + } + } +} diff --git a/SOLVER/ShapesBBox2Regions/Program.cs b/SOLVER/ShapesBBox2Regions/Program.cs new file mode 100644 index 0000000..875b1d7 --- /dev/null +++ b/SOLVER/ShapesBBox2Regions/Program.cs @@ -0,0 +1,20 @@ +using System; +using System.Collections.Generic; +using System.Windows.Forms; + +namespace ShapesBBox2Regions +{ + static class Program + { + /// + /// The main entry point for the application. + /// + [STAThread] + static void Main() + { + Application.EnableVisualStyles(); + Application.SetCompatibleTextRenderingDefault(false); + Application.Run(new SBB2RForm()); + } + } +} \ No newline at end of file diff --git a/SOLVER/ShapesBBox2Regions/Properties/AssemblyInfo.cs b/SOLVER/ShapesBBox2Regions/Properties/AssemblyInfo.cs new file mode 100644 index 0000000..dc88062 --- /dev/null +++ b/SOLVER/ShapesBBox2Regions/Properties/AssemblyInfo.cs @@ -0,0 +1,33 @@ +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +[assembly: AssemblyTitle("ShapesBBox2Regions")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("Milok Zbrozek ")] +[assembly: AssemblyProduct("ShapesBBox2Regions")] +[assembly: AssemblyCopyright("Copyright © Milok Zbrozek 2021")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// Setting ComVisible to false makes the types in this assembly not visible +// to COM components. If you need to access a type in this assembly from +// COM, set the ComVisible attribute to true on that type. +[assembly: ComVisible(false)] + +// The following GUID is for the ID of the typelib if this project is exposed to COM +[assembly: Guid("c3f9ba7d-21e3-485e-baf4-79e4d544132d")] + +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +[assembly: AssemblyVersion("21.12.21.2")] +[assembly: AssemblyFileVersion("21.12.21.2")] diff --git a/SOLVER/ShapesBBox2Regions/Properties/Resources.Designer.cs b/SOLVER/ShapesBBox2Regions/Properties/Resources.Designer.cs new file mode 100644 index 0000000..9025f70 --- /dev/null +++ b/SOLVER/ShapesBBox2Regions/Properties/Resources.Designer.cs @@ -0,0 +1,63 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version:2.0.50727.3662 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +namespace ShapesBBox2Regions.Properties { + using System; + + + /// + /// A strongly-typed resource class, for looking up localized strings, etc. + /// + // This class was auto-generated by the StronglyTypedResourceBuilder + // class via a tool like ResGen or Visual Studio. + // To add or remove a member, edit your .ResX file then rerun ResGen + // with the /str option, or rebuild your VS project. + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "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() { + } + + /// + /// Returns the cached ResourceManager instance used by this class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Resources.ResourceManager ResourceManager { + get { + if (object.ReferenceEquals(resourceMan, null)) { + global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("ShapesBBox2Regions.Properties.Resources", typeof(Resources).Assembly); + resourceMan = temp; + } + return resourceMan; + } + } + + /// + /// Overrides the current thread's CurrentUICulture property for all + /// resource lookups using this strongly typed resource class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Globalization.CultureInfo Culture { + get { + return resourceCulture; + } + set { + resourceCulture = value; + } + } + } +} diff --git a/SOLVER/ShapesBBox2Regions/Properties/Resources.resx b/SOLVER/ShapesBBox2Regions/Properties/Resources.resx new file mode 100644 index 0000000..af7dbeb --- /dev/null +++ b/SOLVER/ShapesBBox2Regions/Properties/Resources.resx @@ -0,0 +1,117 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 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 + + \ No newline at end of file diff --git a/SOLVER/ShapesBBox2Regions/Properties/Settings.Designer.cs b/SOLVER/ShapesBBox2Regions/Properties/Settings.Designer.cs new file mode 100644 index 0000000..ea4b92f --- /dev/null +++ b/SOLVER/ShapesBBox2Regions/Properties/Settings.Designer.cs @@ -0,0 +1,26 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version:2.0.50727.3662 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +namespace ShapesBBox2Regions.Properties { + + + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "8.0.0.0")] + internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase { + + private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings()))); + + public static Settings Default { + get { + return defaultInstance; + } + } + } +} diff --git a/SOLVER/ShapesBBox2Regions/Properties/Settings.settings b/SOLVER/ShapesBBox2Regions/Properties/Settings.settings new file mode 100644 index 0000000..3964565 --- /dev/null +++ b/SOLVER/ShapesBBox2Regions/Properties/Settings.settings @@ -0,0 +1,7 @@ + + + + + + + diff --git a/SOLVER/ShapesBBox2Regions/SBB2RForm.Designer.cs b/SOLVER/ShapesBBox2Regions/SBB2RForm.Designer.cs new file mode 100644 index 0000000..33f397d --- /dev/null +++ b/SOLVER/ShapesBBox2Regions/SBB2RForm.Designer.cs @@ -0,0 +1,413 @@ +namespace ShapesBBox2Regions +{ + partial class SBB2RForm + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.components = new System.ComponentModel.Container(); + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(SBB2RForm)); + this.panel1 = new System.Windows.Forms.Panel(); + this.kmBox = new System.Windows.Forms.NumericUpDown(); + this.label2 = new System.Windows.Forms.Label(); + this.label1 = new System.Windows.Forms.Label(); + this.saveBtn = new System.Windows.Forms.Button(); + this.listBox1 = new System.Windows.Forms.ListBox(); + this.contextMenuStrip1 = new System.Windows.Forms.ContextMenuStrip(this.components); + this.addFilesToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.toolStripMenuItem4 = new System.Windows.Forms.ToolStripSeparator(); + this.addFilesFromDirectoryToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.addRtFromDirectoryToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.addShapeFilesFromDirectoryToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.addXMLFromDirectoryToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.toolStripMenuItem2 = new System.Windows.Forms.ToolStripSeparator(); + this.sortByIDToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.sortByNameToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.toolStripMenuItem5 = new System.Windows.Forms.ToolStripSeparator(); + this.changeRegionIDToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.changeRegionNameToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.toolStripMenuItem3 = new System.Windows.Forms.ToolStripSeparator(); + this.deleteCurrentFileToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.toolStripMenuItem1 = new System.Windows.Forms.ToolStripSeparator(); + this.clearListToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.panel2 = new System.Windows.Forms.Panel(); + this.label3 = new System.Windows.Forms.Label(); + this.panel3 = new System.Windows.Forms.Panel(); + this.llast = new System.Windows.Forms.Label(); + this.lttl = new System.Windows.Forms.Label(); + this.label4 = new System.Windows.Forms.Label(); + this.nidBox = new System.Windows.Forms.NumericUpDown(); + this.panel1.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.kmBox)).BeginInit(); + this.contextMenuStrip1.SuspendLayout(); + this.panel2.SuspendLayout(); + this.panel3.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.nidBox)).BeginInit(); + this.SuspendLayout(); + // + // panel1 + // + this.panel1.Controls.Add(this.nidBox); + this.panel1.Controls.Add(this.label4); + this.panel1.Controls.Add(this.kmBox); + this.panel1.Controls.Add(this.label2); + this.panel1.Controls.Add(this.label1); + this.panel1.Controls.Add(this.saveBtn); + this.panel1.Dock = System.Windows.Forms.DockStyle.Bottom; + this.panel1.Location = new System.Drawing.Point(0, 449); + this.panel1.Name = "panel1"; + this.panel1.Size = new System.Drawing.Size(792, 24); + this.panel1.TabIndex = 4; + // + // kmBox + // + this.kmBox.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + this.kmBox.Location = new System.Drawing.Point(141, 0); + this.kmBox.Maximum = new decimal(new int[] { + 999, + 0, + 0, + 0}); + this.kmBox.Name = "kmBox"; + this.kmBox.Size = new System.Drawing.Size(65, 20); + this.kmBox.TabIndex = 4; + this.kmBox.Value = new decimal(new int[] { + 5, + 0, + 0, + 0}); + // + // label2 + // + this.label2.AutoSize = true; + this.label2.Location = new System.Drawing.Point(55, 3); + this.label2.Name = "label2"; + this.label2.Size = new System.Drawing.Size(172, 13); + this.label2.TabIndex = 3; + this.label2.Text = "Enlarge BBox to: km"; + // + // label1 + // + this.label1.AutoSize = true; + this.label1.Location = new System.Drawing.Point(3, 3); + this.label1.Name = "label1"; + this.label1.Size = new System.Drawing.Size(46, 13); + this.label1.TabIndex = 2; + this.label1.Text = "Options:"; + // + // saveBtn + // + this.saveBtn.Dock = System.Windows.Forms.DockStyle.Right; + this.saveBtn.Enabled = false; + this.saveBtn.Location = new System.Drawing.Point(717, 0); + this.saveBtn.Name = "saveBtn"; + this.saveBtn.Size = new System.Drawing.Size(75, 24); + this.saveBtn.TabIndex = 0; + this.saveBtn.Text = "Save ..."; + this.saveBtn.UseVisualStyleBackColor = true; + this.saveBtn.Click += new System.EventHandler(this.saveBtn_Click); + // + // listBox1 + // + this.listBox1.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + this.listBox1.ContextMenuStrip = this.contextMenuStrip1; + this.listBox1.Dock = System.Windows.Forms.DockStyle.Fill; + this.listBox1.Font = new System.Drawing.Font("Microsoft Sans Serif", 10F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(204))); + this.listBox1.FormattingEnabled = true; + this.listBox1.ItemHeight = 16; + this.listBox1.Location = new System.Drawing.Point(0, 33); + this.listBox1.Name = "listBox1"; + this.listBox1.Size = new System.Drawing.Size(792, 402); + this.listBox1.TabIndex = 5; + this.listBox1.DrawItem += new System.Windows.Forms.DrawItemEventHandler(this.listBox1_DrawItem); + this.listBox1.KeyPress += new System.Windows.Forms.KeyPressEventHandler(this.listBox1_KeyPress); + this.listBox1.KeyDown += new System.Windows.Forms.KeyEventHandler(this.listBox1_KeyDown); + // + // contextMenuStrip1 + // + this.contextMenuStrip1.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.addFilesToolStripMenuItem, + this.toolStripMenuItem4, + this.addFilesFromDirectoryToolStripMenuItem, + this.addRtFromDirectoryToolStripMenuItem, + this.addShapeFilesFromDirectoryToolStripMenuItem, + this.addXMLFromDirectoryToolStripMenuItem, + this.toolStripMenuItem2, + this.sortByIDToolStripMenuItem, + this.sortByNameToolStripMenuItem, + this.toolStripMenuItem5, + this.changeRegionIDToolStripMenuItem, + this.changeRegionNameToolStripMenuItem, + this.toolStripMenuItem3, + this.deleteCurrentFileToolStripMenuItem, + this.toolStripMenuItem1, + this.clearListToolStripMenuItem}); + this.contextMenuStrip1.Name = "contextMenuStrip1"; + this.contextMenuStrip1.Size = new System.Drawing.Size(247, 276); + this.contextMenuStrip1.Opening += new System.ComponentModel.CancelEventHandler(this.contextMenuStrip1_Opening); + // + // addFilesToolStripMenuItem + // + this.addFilesToolStripMenuItem.Name = "addFilesToolStripMenuItem"; + this.addFilesToolStripMenuItem.Size = new System.Drawing.Size(246, 22); + this.addFilesToolStripMenuItem.Text = "Add files (Ins) ..."; + this.addFilesToolStripMenuItem.Click += new System.EventHandler(this.addFilesToolStripMenuItem_Click); + // + // toolStripMenuItem4 + // + this.toolStripMenuItem4.Name = "toolStripMenuItem4"; + this.toolStripMenuItem4.Size = new System.Drawing.Size(243, 6); + // + // addFilesFromDirectoryToolStripMenuItem + // + this.addFilesFromDirectoryToolStripMenuItem.Name = "addFilesFromDirectoryToolStripMenuItem"; + this.addFilesFromDirectoryToolStripMenuItem.Size = new System.Drawing.Size(246, 22); + this.addFilesFromDirectoryToolStripMenuItem.Text = "Add files from Directory ..."; + this.addFilesFromDirectoryToolStripMenuItem.Click += new System.EventHandler(this.addFilesFromDirectoryToolStripMenuItem_Click); + // + // addRtFromDirectoryToolStripMenuItem + // + this.addRtFromDirectoryToolStripMenuItem.Name = "addRtFromDirectoryToolStripMenuItem"; + this.addRtFromDirectoryToolStripMenuItem.Size = new System.Drawing.Size(246, 22); + this.addRtFromDirectoryToolStripMenuItem.Text = "Add Rt from Directory ..."; + this.addRtFromDirectoryToolStripMenuItem.Click += new System.EventHandler(this.addRtFromDirectoryToolStripMenuItem_Click); + // + // addShapeFilesFromDirectoryToolStripMenuItem + // + this.addShapeFilesFromDirectoryToolStripMenuItem.Name = "addShapeFilesFromDirectoryToolStripMenuItem"; + this.addShapeFilesFromDirectoryToolStripMenuItem.Size = new System.Drawing.Size(246, 22); + this.addShapeFilesFromDirectoryToolStripMenuItem.Text = "Add Shape files from Directory ..."; + this.addShapeFilesFromDirectoryToolStripMenuItem.Click += new System.EventHandler(this.addShapeFilesFromDirectoryToolStripMenuItem_Click); + // + // addXMLFromDirectoryToolStripMenuItem + // + this.addXMLFromDirectoryToolStripMenuItem.Name = "addXMLFromDirectoryToolStripMenuItem"; + this.addXMLFromDirectoryToolStripMenuItem.Size = new System.Drawing.Size(246, 22); + this.addXMLFromDirectoryToolStripMenuItem.Text = "Add XML from Directory ..."; + this.addXMLFromDirectoryToolStripMenuItem.Click += new System.EventHandler(this.addXMLFromDirectoryToolStripMenuItem_Click); + // + // toolStripMenuItem2 + // + this.toolStripMenuItem2.Name = "toolStripMenuItem2"; + this.toolStripMenuItem2.Size = new System.Drawing.Size(243, 6); + // + // sortByIDToolStripMenuItem + // + this.sortByIDToolStripMenuItem.Name = "sortByIDToolStripMenuItem"; + this.sortByIDToolStripMenuItem.Size = new System.Drawing.Size(246, 22); + this.sortByIDToolStripMenuItem.Text = "Sort By ID"; + this.sortByIDToolStripMenuItem.Click += new System.EventHandler(this.sortByIDToolStripMenuItem_Click); + // + // sortByNameToolStripMenuItem + // + this.sortByNameToolStripMenuItem.Name = "sortByNameToolStripMenuItem"; + this.sortByNameToolStripMenuItem.Size = new System.Drawing.Size(246, 22); + this.sortByNameToolStripMenuItem.Text = "Sort By Name"; + this.sortByNameToolStripMenuItem.Click += new System.EventHandler(this.sortByNameToolStripMenuItem_Click); + // + // toolStripMenuItem5 + // + this.toolStripMenuItem5.Name = "toolStripMenuItem5"; + this.toolStripMenuItem5.Size = new System.Drawing.Size(243, 6); + // + // changeRegionIDToolStripMenuItem + // + this.changeRegionIDToolStripMenuItem.Name = "changeRegionIDToolStripMenuItem"; + this.changeRegionIDToolStripMenuItem.Size = new System.Drawing.Size(246, 22); + this.changeRegionIDToolStripMenuItem.Text = "Change Region ID (Space) ..."; + this.changeRegionIDToolStripMenuItem.Click += new System.EventHandler(this.changeRegionIDToolStripMenuItem_Click); + // + // changeRegionNameToolStripMenuItem + // + this.changeRegionNameToolStripMenuItem.Name = "changeRegionNameToolStripMenuItem"; + this.changeRegionNameToolStripMenuItem.Size = new System.Drawing.Size(246, 22); + this.changeRegionNameToolStripMenuItem.Text = "Change Region Name (F2) ..."; + this.changeRegionNameToolStripMenuItem.Click += new System.EventHandler(this.changeRegionNameToolStripMenuItem_Click); + // + // toolStripMenuItem3 + // + this.toolStripMenuItem3.Name = "toolStripMenuItem3"; + this.toolStripMenuItem3.Size = new System.Drawing.Size(243, 6); + // + // deleteCurrentFileToolStripMenuItem + // + this.deleteCurrentFileToolStripMenuItem.Enabled = false; + this.deleteCurrentFileToolStripMenuItem.Name = "deleteCurrentFileToolStripMenuItem"; + this.deleteCurrentFileToolStripMenuItem.Size = new System.Drawing.Size(246, 22); + this.deleteCurrentFileToolStripMenuItem.Text = "Delete current file (Del)"; + this.deleteCurrentFileToolStripMenuItem.Click += new System.EventHandler(this.deleteCurrentFileToolStripMenuItem_Click); + // + // toolStripMenuItem1 + // + this.toolStripMenuItem1.Name = "toolStripMenuItem1"; + this.toolStripMenuItem1.Size = new System.Drawing.Size(243, 6); + // + // clearListToolStripMenuItem + // + this.clearListToolStripMenuItem.Enabled = false; + this.clearListToolStripMenuItem.Name = "clearListToolStripMenuItem"; + this.clearListToolStripMenuItem.Size = new System.Drawing.Size(246, 22); + this.clearListToolStripMenuItem.Text = "Clear list"; + this.clearListToolStripMenuItem.Click += new System.EventHandler(this.clearListToolStripMenuItem_Click); + // + // panel2 + // + this.panel2.Controls.Add(this.label3); + this.panel2.Controls.Add(this.panel3); + this.panel2.Dock = System.Windows.Forms.DockStyle.Top; + this.panel2.Location = new System.Drawing.Point(0, 0); + this.panel2.Name = "panel2"; + this.panel2.Size = new System.Drawing.Size(792, 33); + this.panel2.TabIndex = 7; + // + // label3 + // + this.label3.AutoSize = true; + this.label3.Location = new System.Drawing.Point(3, 9); + this.label3.Name = "label3"; + this.label3.Size = new System.Drawing.Size(287, 13); + this.label3.TabIndex = 1; + this.label3.Text = "User drag & drop or context menu to add file(s) - .shp, .xml, .rt"; + // + // panel3 + // + this.panel3.Controls.Add(this.llast); + this.panel3.Controls.Add(this.lttl); + this.panel3.Dock = System.Windows.Forms.DockStyle.Right; + this.panel3.Location = new System.Drawing.Point(592, 0); + this.panel3.Name = "panel3"; + this.panel3.Size = new System.Drawing.Size(200, 33); + this.panel3.TabIndex = 0; + // + // llast + // + this.llast.AutoSize = true; + this.llast.Location = new System.Drawing.Point(3, 17); + this.llast.Name = "llast"; + this.llast.Size = new System.Drawing.Size(60, 13); + this.llast.TabIndex = 1; + this.llast.Text = "Status: Idle"; + // + // lttl + // + this.lttl.AutoSize = true; + this.lttl.Location = new System.Drawing.Point(3, 4); + this.lttl.Name = "lttl"; + this.lttl.Size = new System.Drawing.Size(75, 13); + this.lttl.TabIndex = 0; + this.lttl.Text = "Total Boxes: 0"; + // + // label4 + // + this.label4.AutoSize = true; + this.label4.Location = new System.Drawing.Point(235, 3); + this.label4.Name = "label4"; + this.label4.Size = new System.Drawing.Size(114, 13); + this.label4.TabIndex = 5; + this.label4.Text = "| Number of ID digits:"; + // + // nidBox + // + this.nidBox.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + this.nidBox.Location = new System.Drawing.Point(355, 1); + this.nidBox.Maximum = new decimal(new int[] { + 6, + 0, + 0, + 0}); + this.nidBox.Minimum = new decimal(new int[] { + 1, + 0, + 0, + 0}); + this.nidBox.Name = "nidBox"; + this.nidBox.Size = new System.Drawing.Size(32, 20); + this.nidBox.TabIndex = 6; + this.nidBox.Value = new decimal(new int[] { + 3, + 0, + 0, + 0}); + // + // SBB2RForm + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(792, 473); + this.Controls.Add(this.listBox1); + this.Controls.Add(this.panel2); + this.Controls.Add(this.panel1); + this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); + this.Name = "SBB2RForm"; + this.Text = "Shapes BBox to Regions Converter"; + this.panel1.ResumeLayout(false); + this.panel1.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)(this.kmBox)).EndInit(); + this.contextMenuStrip1.ResumeLayout(false); + this.panel2.ResumeLayout(false); + this.panel2.PerformLayout(); + this.panel3.ResumeLayout(false); + this.panel3.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)(this.nidBox)).EndInit(); + this.ResumeLayout(false); + + } + + #endregion + + private System.Windows.Forms.Panel panel1; + private System.Windows.Forms.NumericUpDown kmBox; + private System.Windows.Forms.Label label2; + private System.Windows.Forms.Label label1; + private System.Windows.Forms.Button saveBtn; + private System.Windows.Forms.ListBox listBox1; + private System.Windows.Forms.ContextMenuStrip contextMenuStrip1; + private System.Windows.Forms.ToolStripMenuItem addFilesToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem deleteCurrentFileToolStripMenuItem; + private System.Windows.Forms.ToolStripSeparator toolStripMenuItem1; + private System.Windows.Forms.ToolStripMenuItem clearListToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem addFilesFromDirectoryToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem addRtFromDirectoryToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem addShapeFilesFromDirectoryToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem addXMLFromDirectoryToolStripMenuItem; + private System.Windows.Forms.ToolStripSeparator toolStripMenuItem2; + private System.Windows.Forms.Panel panel2; + private System.Windows.Forms.Label label3; + private System.Windows.Forms.Panel panel3; + private System.Windows.Forms.Label llast; + private System.Windows.Forms.Label lttl; + private System.Windows.Forms.ToolStripMenuItem changeRegionIDToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem changeRegionNameToolStripMenuItem; + private System.Windows.Forms.ToolStripSeparator toolStripMenuItem3; + private System.Windows.Forms.ToolStripSeparator toolStripMenuItem4; + private System.Windows.Forms.ToolStripMenuItem sortByIDToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem sortByNameToolStripMenuItem; + private System.Windows.Forms.ToolStripSeparator toolStripMenuItem5; + private System.Windows.Forms.NumericUpDown nidBox; + private System.Windows.Forms.Label label4; + } +} + diff --git a/SOLVER/ShapesBBox2Regions/SBB2RForm.cs b/SOLVER/ShapesBBox2Regions/SBB2RForm.cs new file mode 100644 index 0000000..b46232c --- /dev/null +++ b/SOLVER/ShapesBBox2Regions/SBB2RForm.cs @@ -0,0 +1,479 @@ +using System; +using System.IO; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.Drawing.Drawing2D; +using System.Text; +using System.Windows.Forms; +using System.Xml; + +namespace ShapesBBox2Regions +{ + public partial class SBB2RForm : Form + { + public SBB2RForm() + { + InitializeComponent(); + this.listBox1.DrawMode = DrawMode.OwnerDrawFixed; + this.AllowDrop = true; + this.DragEnter += new DragEventHandler(SBB2RForm_DragEnter); + this.DragDrop += new DragEventHandler(SBB2RForm_DragDrop); + } + + private void SBB2RForm_DragEnter(object sender, DragEventArgs e) + { + if (e.Data.GetDataPresent(DataFormats.FileDrop)) e.Effect = DragDropEffects.Copy; + } + + private void SBB2RForm_DragDrop(object sender, DragEventArgs e) + { + string[] files = (string[])e.Data.GetData(DataFormats.FileDrop); + AddFiles(files); + } + + private void AddFiles(string[] files) + { + if (files == null) return; + if (files.Length == 0) return; + + KMZRebuilder.WaitingBoxForm wbf = new KMZRebuilder.WaitingBoxForm("Import files", "Prepare", this); + wbf.Show(); + for (int i = 0; i < files.Length; i++) + { + string file = Path.GetFileName(files[i]); + wbf.Text = String.Format(System.Globalization.CultureInfo.InvariantCulture, "Adding {0} file - {1}/{2} - {3:0.00}%", file, i + 1, files.Length, ((double)(i + 1)) / ((double)files.Length) * 100.0); + try + { + AddFile(files[i]); + } + catch (Exception ex) + { + wbf.Hide(); + MessageBox.Show(ex.ToString(), "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); + }; + }; + wbf.Hide(); + wbf = null; + UpdateData(); + } + + private void AddFile(string fileName) + { + if(String.IsNullOrEmpty(fileName)) return; + if(!File.Exists(fileName)) return; + string ext = Path.GetExtension(fileName).ToLower(); + if((ext != ".shp") && (ext != ".xml") && (ext != ".rt")) return; + + BoxRecord br = null; + if (ext == ".shp") br = GetShape(fileName); + if (ext == ".xml") br = GetXML(fileName); + if (ext == ".rt") br = GetRT(fileName); + + if (br == null) return; + listBox1.Items.Add(br); + } + + private BoxRecord GetShape(string fileName) + { + ShapeBoxReader sbr = new ShapeBoxReader(fileName); + if (!sbr.ShapeOk) return null; + return new BoxRecord(sbr.box, 999, Path.GetFileName(fileName), Path.GetFileName(fileName)); + } + + private BoxRecord GetXML(string fileName) + { + try + { + AdditionalInformation addit = XMLSaved.Load(fileName); + if (double.IsNaN(addit.minX)) return null; + if (double.IsNaN(addit.minY)) return null; + if (double.IsNaN(addit.maxX)) return null; + if (double.IsNaN(addit.maxY)) return null; + if ((addit.minX + addit.minY + addit.maxX + addit.maxY) == 0) return null; + return new BoxRecord(new double[] { addit.minX, addit.minY, addit.maxX, addit.maxY }, addit.regionID, addit.RegionName, Path.GetFileName(fileName)); + } + catch { }; + return null; + } + + private BoxRecord GetRT(string fileName) + { + string s_path = null; + FileStream fs = new FileStream(fileName, FileMode.Open, FileAccess.Read); + StreamReader sr = new StreamReader(fs); + while (!sr.EndOfStream) + { + string ln = sr.ReadLine(); + if(String.IsNullOrEmpty(ln)) continue; + if(ln.StartsWith("Source path:")) + { + s_path = ln.Substring(13).Trim(); + break; + }; + }; + sr.Close(); + fs.Close(); + + if ((!String.IsNullOrEmpty(s_path)) && (File.Exists(s_path))) + { + BoxRecord br = GetShape(s_path); + if (br != null) br.Name += " from " + Path.GetFileName(fileName); + if (br != null) br.File += Path.GetFileName(fileName); + return br; + }; + + return null; + } + + private int info_last = 0; + private void UpdateData() + { + lttl.Text = String.Format("Total Boxes: {0}", listBox1.Items.Count); + if (info_last != listBox1.Items.Count) + { + if (listBox1.Items.Count > info_last) + llast.Text = String.Format("Status: Added {0} boxes", listBox1.Items.Count - info_last); + else + llast.Text = String.Format("Status: Removed {0} boxes", info_last - listBox1.Items.Count); + } + else + llast.Text = "Status: Idle"; + info_last = listBox1.Items.Count; + listBox1.Refresh(); + saveBtn.Enabled = listBox1.Items.Count > 0; + } + + private void contextMenuStrip1_Opening(object sender, CancelEventArgs e) + { + clearListToolStripMenuItem.Enabled = listBox1.Items.Count > 0; + deleteCurrentFileToolStripMenuItem.Enabled = listBox1.SelectedIndex >= 0; + changeRegionIDToolStripMenuItem.Enabled = listBox1.SelectedIndex >= 0; + changeRegionNameToolStripMenuItem.Enabled = listBox1.SelectedIndex >= 0; + sortByIDToolStripMenuItem.Enabled = listBox1.Items.Count > 0; + sortByNameToolStripMenuItem.Enabled = listBox1.Items.Count > 0; + } + + private void addFilesToolStripMenuItem_Click(object sender, EventArgs e) + { + OpenFileDialog ofd = new OpenFileDialog(); + ofd.Title = "Add files"; + ofd.DefaultExt = ".shp"; + ofd.Multiselect = true; + ofd.Filter = "All supported files (*.shp;*.xml;*.rt)|*.shp;*.xml;*.rt|Shape files (*.shp)|*.shp|XML files (*.xml)|*.xml|Route info files (*.rt)|*.rt"; + string[] files = null; + if(ofd.ShowDialog() == DialogResult.OK) + files = ofd.FileNames; + ofd.Dispose(); + if(files == null) return; + AddFiles(files); + } + + private void addFilesFromDirectoryToolStripMenuItem_Click(object sender, EventArgs e) + { + string path = ""; + if (InputBox.QueryDirectoryBox("Add files", "Select Directory:", ref path) != DialogResult.OK) return; + List files = new List(); + try { files.AddRange(Directory.GetFiles(path, "*.rt", SearchOption.TopDirectoryOnly)); } catch { }; + try { files.AddRange(Directory.GetFiles(path, "*.shp", SearchOption.TopDirectoryOnly)); } catch { }; + try { files.AddRange(Directory.GetFiles(path, "*.xml", SearchOption.TopDirectoryOnly)); } catch { }; + if(files.Count > 0) AddFiles(files.ToArray()); + } + + private void addRtFromDirectoryToolStripMenuItem_Click(object sender, EventArgs e) + { + string path = ""; + if (InputBox.QueryDirectoryBox("Add files", "Select Directory:", ref path) != DialogResult.OK) return; + List files = new List(); + try { files.AddRange(Directory.GetFiles(path, "*.rt", SearchOption.TopDirectoryOnly)); } catch { }; + if (files.Count > 0) AddFiles(files.ToArray()); + } + + private void addShapeFilesFromDirectoryToolStripMenuItem_Click(object sender, EventArgs e) + { + string path = ""; + if (InputBox.QueryDirectoryBox("Add files", "Select Directory:", ref path) != DialogResult.OK) return; + List files = new List(); + try { files.AddRange(Directory.GetFiles(path, "*.shp", SearchOption.TopDirectoryOnly)); } catch { }; + if (files.Count > 0) AddFiles(files.ToArray()); + } + + private void addXMLFromDirectoryToolStripMenuItem_Click(object sender, EventArgs e) + { + string path = ""; + if (InputBox.QueryDirectoryBox("Add files", "Select Directory:", ref path) != DialogResult.OK) return; + List files = new List(); + try { files.AddRange(Directory.GetFiles(path, "*.xml", SearchOption.TopDirectoryOnly)); } catch { }; + if (files.Count > 0) AddFiles(files.ToArray()); + } + + private void Remove(int index) + { + int si = listBox1.SelectedIndex; + listBox1.Items.RemoveAt(listBox1.SelectedIndex); + if (si < listBox1.Items.Count) listBox1.SelectedIndex = si; + else if (--si >= 0) + listBox1.SelectedIndex = si; + UpdateData(); + } + + private void deleteCurrentFileToolStripMenuItem_Click(object sender, EventArgs e) + { + if (listBox1.SelectedIndex < 0) return; + Remove(listBox1.SelectedIndex); + } + + private DateTime lastNumEnter = DateTime.MinValue; + private int lastNumSelected = -1; + private void listBox1_KeyDown(object sender, KeyEventArgs e) + { + if ((e.KeyCode == Keys.Delete) && (listBox1.SelectedIndex >= 0)) + { + lastNumSelected = -1; + Remove(listBox1.SelectedIndex); + }; + + if ((e.Modifiers == Keys.Alt) && (listBox1.Items.Count > 1) && (listBox1.SelectedIndex >= 0)) + { + lastNumSelected = -1; + int si = listBox1.SelectedIndex; + if ((e.KeyCode == Keys.Up) && (si > 0)) + { + object obj = listBox1.Items[si]; + listBox1.Items.RemoveAt(si); + listBox1.Items.Insert(--si, obj); + listBox1.SelectedIndex = si; + }; + if ((e.KeyCode == Keys.Down) && (si < (listBox1.Items.Count - 1))) + { + object obj = listBox1.Items[si]; + listBox1.Items.RemoveAt(si); + listBox1.Items.Insert(++si, obj); + listBox1.SelectedIndex = si; + }; + UpdateData(); + }; + + if ((e.KeyCode == Keys.Insert) || ((e.Modifiers == Keys.Control) && (e.KeyCode == Keys.O))) + { + lastNumSelected = -1; + addFilesToolStripMenuItem_Click(sender, null); + return; + }; + + if ((e.KeyCode == Keys.F2) && (listBox1.SelectedIndex >= 0)) + { + lastNumSelected = -1; + Rename(listBox1.SelectedIndex); + return; + }; + + if ((e.Modifiers == Keys.None) && (e.KeyCode == Keys.Enter) && (listBox1.SelectedIndex >= 0)) + { + lastNumSelected = -1; + int ns = listBox1.SelectedIndex + 1; + if (ns < listBox1.Items.Count) + listBox1.SelectedIndex = ns; + else + listBox1.SelectedIndex = 0; + return; + }; + + if ((e.KeyCode == Keys.Space) && (listBox1.SelectedIndex >= 0)) + { + lastNumSelected = -1; + ReID(listBox1.SelectedIndex); + return; + }; + + if ((e.Modifiers == Keys.None) && (listBox1.SelectedIndex >= 0)) + { + int di = DigitByKey(e.KeyCode); + if(di >= 0) + { + e.SuppressKeyPress = true; + bool ni = (lastNumSelected != listBox1.SelectedIndex) || (DateTime.Now.Subtract(lastNumEnter).TotalSeconds > 2); + ReID(listBox1.SelectedIndex, di.ToString(), ni); + lastNumEnter = DateTime.Now; + lastNumSelected = listBox1.SelectedIndex; + return; + } + else + lastNumSelected = -1; ; + }; + } + + private int DigitByKey(Keys key) + { + switch(key) + { + case Keys.D0: case Keys.NumPad0: return 0; + case Keys.D1: case Keys.NumPad1: return 1; + case Keys.D2: case Keys.NumPad2: return 2; + case Keys.D3: case Keys.NumPad3: return 3; + case Keys.D4: case Keys.NumPad4: return 4; + case Keys.D5: case Keys.NumPad5: return 5; + case Keys.D6: case Keys.NumPad6: return 6; + case Keys.D7: case Keys.NumPad7: return 7; + case Keys.D8: case Keys.NumPad8: return 8; + case Keys.D9: case Keys.NumPad9: return 9; + default: return -1; + }; + } + + private void clearListToolStripMenuItem_Click(object sender, EventArgs e) + { + listBox1.Items.Clear(); + UpdateData(); + } + + private void listBox1_KeyPress(object sender, KeyPressEventArgs e) + { + + } + + private void ReID(int index) + { + BoxRecord br = (BoxRecord)listBox1.Items[index]; + int id = br.ID; + if (InputBox.Show("Change ID", "Enter new ID:", ref id, 1, 999, null) != DialogResult.OK) return; + br.ID = id; + listBox1.Items[index] = br; + } + + private void ReID(int index, string d, bool newValue) + { + BoxRecord br = (BoxRecord)listBox1.Items[index]; + string id = newValue ? d : br.ID.ToString() + d; + if (id.Length > nidBox.Value) id = id.Substring(id.Length - (int)nidBox.Value); + br.ID = int.Parse(id); + listBox1.Items[index] = br; + } + + private void Rename(int index) + { + BoxRecord br = (BoxRecord)listBox1.Items[index]; + string name = br.Name; + if (InputBox.Show("Change Name", "Enter new name:", ref name, "") != DialogResult.OK) return; + br.Name = name; + listBox1.Items[index] = br; + } + + private void changeRegionIDToolStripMenuItem_Click(object sender, EventArgs e) + { + if (listBox1.SelectedIndex < 0) return; + ReID(listBox1.SelectedIndex); + } + + private void changeRegionNameToolStripMenuItem_Click(object sender, EventArgs e) + { + if (listBox1.SelectedIndex < 0) return; + Rename(listBox1.SelectedIndex); + } + + private void saveBtn_Click(object sender, EventArgs e) + { + if (listBox1.Items.Count == 0) return; + + SaveFileDialog sfd = new SaveFileDialog(); + sfd.Title = "Save Regions"; + sfd.DefaultExt = ".shp"; + sfd.Filter = "Shape files (*.shp)|*.shp"; + string fName = null; + if (sfd.ShowDialog() == DialogResult.OK) fName = sfd.FileName; + sfd.Dispose(); + if (fName == null) return; + SaveRegions(fName); + } + + private void SaveRegions(string fileName) + { + SimpleSHPWriter ssw = SimpleSHPWriter.CreateAreasFile(fileName); + DBFSharp.DBFFile dbf = new DBFSharp.DBFFile(fileName.Replace(Path.GetExtension(fileName), ".dbf"), FileMode.Create); + + DBFSharp.FieldInfos finfos = new DBFSharp.FieldInfos(); + finfos.Add("REGION_ID", 010, DBFSharp.FieldType.Numeric); + finfos.Add("NAME", 128, DBFSharp.FieldType.Character); + finfos.Add("X", 019, 11, DBFSharp.FieldType.Numeric); + finfos.Add("Y", 019, 11, DBFSharp.FieldType.Numeric); + dbf.WriteHeader(finfos); + + KMZRebuilder.WaitingBoxForm wbf = new KMZRebuilder.WaitingBoxForm("Create Regions Shape", "Prepare", this); + wbf.Show(); + + for (int i = 0; i < listBox1.Items.Count; i++) + { + BoxRecord br = (BoxRecord)listBox1.Items[i]; + + wbf.Text = String.Format(System.Globalization.CultureInfo.InvariantCulture, "Adding box {0} - {1}/{2} - {3:0.00}%", br.ID, i + 1, listBox1.Items.Count, ((double)(i + 1)) / ((double)listBox1.Items.Count) * 100.0); + + ssw.WriteSingleArea(br.Enlarge((int)kmBox.Value)); + + Dictionary rec = new Dictionary(); + rec.Add("REGION_ID", br.ID); + rec.Add("NAME", br.Name); + rec.Add("X", br.centerX); + rec.Add("Y", br.centerY); + dbf.WriteRecord(rec); + }; + dbf.Close(); + ssw.Close(); + + wbf.Hide(); + wbf = null; + } + + private void Sort(byte sortBy) + { + if (listBox1.Items.Count == 0) return; + BoxRecord si = null; + if (listBox1.SelectedIndex >= 0) si = (BoxRecord)listBox1.SelectedItem; + List brs = new List(); + for (int i = 0; i < listBox1.Items.Count; i++) brs.Add((BoxRecord)listBox1.Items[i]); + listBox1.Items.Clear(); + brs.Sort(new BoxSorter((byte)sortBy)); + foreach (BoxRecord br in brs) listBox1.Items.Add(br); + if (si != null) listBox1.SelectedItem = si; + } + + private void sortByIDToolStripMenuItem_Click(object sender, EventArgs e) + { + Sort(0); + } + + private void sortByNameToolStripMenuItem_Click(object sender, EventArgs e) + { + Sort(1); + } + + private void listBox1_DrawItem(object sender, DrawItemEventArgs e) + { + e.DrawBackground(); + + if (e.Index >= 0) + { + int dopW = 50; + + BoxRecord br = (BoxRecord)listBox1.Items[e.Index]; + string sID = br.ID.ToString(); + Font fD = new Font(e.Font, FontStyle.Bold); + + SizeF sD = e.Graphics.MeasureString(sID, e.Font); + SizeF sN = e.Graphics.MeasureString(br.Name, e.Font); + SizeF sB = e.Graphics.MeasureString(br.SBox, e.Font); + SizeF sC = e.Graphics.MeasureString(br.SCXY, e.Font); + + e.Graphics.DrawString(sID, fD, new SolidBrush(e.ForeColor), e.Bounds.X + dopW - sD.Width, e.Bounds.Y); + e.Graphics.DrawString(br.Name, e.Font, new SolidBrush(e.ForeColor), e.Bounds.X + 2 + dopW, e.Bounds.Y); + if ((e.State & DrawItemState.Selected) == 0) + e.Graphics.FillRectangle(new SolidBrush(Color.LightYellow), new Rectangle(new Point((int)(e.Bounds.X + 2 + dopW + sN.Width + 5), (int)e.Bounds.Y), new Size((int)sB.Width, (int)e.Bounds.Height))); + e.Graphics.DrawString(br.SBox, e.Font, new SolidBrush(Color.Gray), e.Bounds.X + 2 + dopW + sN.Width + 5, e.Bounds.Y); + e.Graphics.DrawString(br.SCXY, e.Font, new SolidBrush(Color.DarkGreen), e.Bounds.X + 2 + dopW + sN.Width + 5 + sB.Width + 5, e.Bounds.Y); + e.Graphics.DrawString(br.File, e.Font, new SolidBrush(Color.Maroon), e.Bounds.X + 2 + dopW + sN.Width + 5 + sB.Width + 5 + sC.Width + 5, e.Bounds.Y); + }; + + e.DrawFocusRectangle(); + } + } +} \ No newline at end of file diff --git a/SOLVER/ShapesBBox2Regions/SBB2RForm.resx b/SOLVER/ShapesBBox2Regions/SBB2RForm.resx new file mode 100644 index 0000000..b79d2eb --- /dev/null +++ b/SOLVER/ShapesBBox2Regions/SBB2RForm.resx @@ -0,0 +1,1568 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 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 + + + 17, 17 + + + + + AAABAAYAICAAAAEACACoCAAAZgAAABAQAAABAAgAaAUAAA4JAACAgAAAAQAgACgIAQB2DgAAMDAAAAEA + IACoJQAAnhYBACAgAAABACAAqBAAAEY8AQAQEAAAAQAgAGgEAADuTAEAKAAAACAAAABAAAAAAQAIAAAA + AAAAAAAAAAAAAAAAAAAAAQAAAAAAAP///wDM//8Amf//AGb//wAz//8AAP//AP/M/wDMzP8Amcz/AGbM + /wAzzP8AAMz/AP+Z/wDMmf8AmZn/AGaZ/wAzmf8AAJn/AP9m/wDMZv8AmWb/AGZm/wAzZv8AAGb/AP8z + /wDMM/8AmTP/AGYz/wAzM/8AADP/AP8A/wDMAP8AmQD/AGYA/wAzAP8AAAD/AP//zADM/8wAmf/MAGb/ + zAAz/8wAAP/MAP/MzADMzMwAmczMAGbMzAAzzMwAAMzMAP+ZzADMmcwAmZnMAGaZzAAzmcwAAJnMAP9m + zADMZswAmWbMAGZmzAAzZswAAGbMAP8zzADMM8wAmTPMAGYzzAAzM8wAADPMAP8AzADMAMwAmQDMAGYA + zAAzAMwAAADMAP//mQDM/5kAmf+ZAGb/mQAz/5kAAP+ZAP/MmQDMzJkAmcyZAGbMmQAzzJkAAMyZAP+Z + mQDMmZkAmZmZAGaZmQAzmZkAAJmZAP9mmQDMZpkAmWaZAGZmmQAzZpkAAGaZAP8zmQDMM5kAmTOZAGYz + mQAzM5kAADOZAP8AmQDMAJkAmQCZAGYAmQAzAJkAAACZAP//ZgDM/2YAmf9mAGb/ZgAz/2YAAP9mAP/M + ZgDMzGYAmcxmAGbMZgAzzGYAAMxmAP+ZZgDMmWYAmZlmAGaZZgAzmWYAAJlmAP9mZgDMZmYAmWZmAGZm + ZgAzZmYAAGZmAP8zZgDMM2YAmTNmAGYzZgAzM2YAADNmAP8AZgDMAGYAmQBmAGYAZgAzAGYAAABmAP// + MwDM/zMAmf8zAGb/MwAz/zMAAP8zAP/MMwDMzDMAmcwzAGbMMwAzzDMAAMwzAP+ZMwDMmTMAmZkzAGaZ + MwAzmTMAAJkzAP9mMwDMZjMAmWYzAGZmMwAzZjMAAGYzAP8zMwDMMzMAmTMzAGYzMwAzMzMAADMzAP8A + MwDMADMAmQAzAGYAMwAzADMAAAAzAP//AADM/wAAmf8AAGb/AAAz/wAAAP8AAP/MAADMzAAAmcwAAGbM + AAAzzAAAAMwAAP+ZAADMmQAAmZkAAGaZAAAzmQAAAJkAAP9mAADMZgAAmWYAAGZmAAAzZgAAAGYAAP8z + AADMMwAAmTMAAGYzAAAzMwAAADMAAP8AAADMAAAAmQAAAGYAAAAzAAAAAADuAAAA3QAAALsAAACqAAAA + iAAAAHcAAABVAAAARAAAACIAAAARAADuAAAA3QAAALsAAACqAAAAiAAAAHcAAABVAAAARAAAACIAAAAR + AADuAAAA3QAAALsAAACqAAAAiAAAAHcAAABVAAAARAAAACIAAAARAAAA7u7uAN3d3QC7u7sAqqqqAIiI + iAB3d3cAVVVVAERERAAiIiIAERERAAAAAAD///////////////////////////////////////////// + /////////////////////////////////////////ysrKysrKysrKysrKysrKysrKysrKysrKysrKysr + Kyv/KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKyv29fb19fX19fX19fX19fX19fX19fX1 + 9fUrKysrKysrKwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPYrKysrKysrAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAA9isrKysrK/YAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KysrKysr9gAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAPYrKysrKyv1AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA9SsrKysrK/UAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAD1KysrKysr9QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPYrKysrKyv1AAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA9isrKysrK/YAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KysrKysr9gAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAACsrKysrKysr9QAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2Kysr/ysr + Kyv2AAAAAAAAAAAAAAAAAAAAAAAAAAAA9isrKyv//ysrKysr9fX1AAAAAAD19fX19fX19vb29isrKysr + /////ysrKysrKysrKysrKysrKysrKysrK/b29isrKyv//////ysrKyv3KysrKysrKysrK/csLCwsMzkz + 9vb/////////////M140MzMzMzMzMzMzMzM0NDM6Xl////////////////9eXjozMzMzMzMzMzMzMzMz + MzpeXl5e/////////////15eOjMzMzMzMzMzMzMzMzMzOl5eXl5e/////////15eXl46MzMzMzMzMzMz + MzMzMzM6Xl5eXl5e////////Xl5eXjozMzMzMzMzMzMzMzMzMzM6Xl5eXl7///////9eXjozMzMzMzMz + MzMzMzMzMzMzMzM0Xl5eXv///////15eOjMzMzMzMzMzMzMzMzMzMzM0Ol5eXl7/////////Xl5eXjo6 + NDMzMzMzMzQ0Ojo6Xl5eXl5e////////////Xl5eXl5eXl5eXl5eXl5eXl5eXl5e//////////////// + /15eXl5eXl5eXl5eXl5eXl7///////////////////////////////////////////////////////// + //////////////////////////////////////////////////+AAAAAgAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAGAAAADwAAAA+AAAA/8AAA//AAAD/wA + AAfwAAAD8AAAA/AAAAPwAAAH8AAAD/gAAD/+AAH///////////8oAAAAEAAAACAAAAABAAgAAAAAAAAA + AAAAAAAAAAAAAAABAAAAAAAA////AMz//wCZ//8AZv//ADP//wAA//8A/8z/AMzM/wCZzP8AZsz/ADPM + /wAAzP8A/5n/AMyZ/wCZmf8AZpn/ADOZ/wAAmf8A/2b/AMxm/wCZZv8AZmb/ADNm/wAAZv8A/zP/AMwz + /wCZM/8AZjP/ADMz/wAAM/8A/wD/AMwA/wCZAP8AZgD/ADMA/wAAAP8A///MAMz/zACZ/8wAZv/MADP/ + zAAA/8wA/8zMAMzMzACZzMwAZszMADPMzAAAzMwA/5nMAMyZzACZmcwAZpnMADOZzAAAmcwA/2bMAMxm + zACZZswAZmbMADNmzAAAZswA/zPMAMwzzACZM8wAZjPMADMzzAAAM8wA/wDMAMwAzACZAMwAZgDMADMA + zAAAAMwA//+ZAMz/mQCZ/5kAZv+ZADP/mQAA/5kA/8yZAMzMmQCZzJkAZsyZADPMmQAAzJkA/5mZAMyZ + mQCZmZkAZpmZADOZmQAAmZkA/2aZAMxmmQCZZpkAZmaZADNmmQAAZpkA/zOZAMwzmQCZM5kAZjOZADMz + mQAAM5kA/wCZAMwAmQCZAJkAZgCZADMAmQAAAJkA//9mAMz/ZgCZ/2YAZv9mADP/ZgAA/2YA/8xmAMzM + ZgCZzGYAZsxmADPMZgAAzGYA/5lmAMyZZgCZmWYAZplmADOZZgAAmWYA/2ZmAMxmZgCZZmYAZmZmADNm + ZgAAZmYA/zNmAMwzZgCZM2YAZjNmADMzZgAAM2YA/wBmAMwAZgCZAGYAZgBmADMAZgAAAGYA//8zAMz/ + MwCZ/zMAZv8zADP/MwAA/zMA/8wzAMzMMwCZzDMAZswzADPMMwAAzDMA/5kzAMyZMwCZmTMAZpkzADOZ + MwAAmTMA/2YzAMxmMwCZZjMAZmYzADNmMwAAZjMA/zMzAMwzMwCZMzMAZjMzADMzMwAAMzMA/wAzAMwA + MwCZADMAZgAzADMAMwAAADMA//8AAMz/AACZ/wAAZv8AADP/AAAA/wAA/8wAAMzMAACZzAAAZswAADPM + AAAAzAAA/5kAAMyZAACZmQAAZpkAADOZAAAAmQAA/2YAAMxmAACZZgAAZmYAADNmAAAAZgAA/zMAAMwz + AACZMwAAZjMAADMzAAAAMwAA/wAAAMwAAACZAAAAZgAAADMAAAAAAO4AAADdAAAAuwAAAKoAAACIAAAA + dwAAAFUAAABEAAAAIgAAABEAAO4AAADdAAAAuwAAAKoAAACIAAAAdwAAAFUAAABEAAAAIgAAABEAAO4A + AADdAAAAuwAAAKoAAACIAAAAdwAAAFUAAABEAAAAIgAAABEAAADu7u4A3d3dALu7uwCqqqoAiIiIAHd3 + dwBVVVUAREREACIiIgAREREAAAAAAP////////////////////8rKysrKysrKysrKysrKysrKyv1AAAA + AAAAAAAAAAArKysrAAAAAAAAAAAAAAAA9isr9gAAAAAAAAAAAAAAAPYrK/YAAAAAAAAAAAAAAAD2Kyv2 + AAAAAAAAAAAAAAAA9isrKwAAAAAAAAAAAAAAACsrKyv2AAAAAAAAAAAA9fYrK/8r9isrKysrKyv3LDIr + 9v////9eNDMzMzQ0Mzpf//////9eXzozMzMzMzM0Xl5e////XjozMzMzMzMzMzReXv///146NDMzMzMz + NDo6Xl7///9eXl5eXl5eXl5eXv//////////////////////////////AAD//wAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAACAAQAA4AeAAcAB4AfAAcABwAHAAcAHwAH//8AHKAAAAIAAAAAAAQAAAQAgAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8AAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAzMzMEMzMzEDMzMxAzMzMQMzMzEDMzMxAzMzMQMzMzEDMzMxAzMzMQMzMzEDMzMxAzMzMQMzM + zEDMzMxAzMzMQMzMzEDMzMxAzMzMQMzMzEDMzMyAzMzMgMzMzIDMzMyAzMzMgMzMzIDMzMyAzMzMgMzM + zIDMzMyAzMzMgMzMzIDMzMyAzMzMgMzMzIDMzMyAzMzMgMzMzIDMzMyAzMzMcAAAAAAAAAAAAAAAAP// + /wD///8A////AP///wAAAAAAAAAAAAAAAAAAAAAAzMzMEMzMzEDMzMxAzMzMQMzMzEDMzMxAzMzMQMzM + zEDMzMxAzMzMQMzMzEDMzMxAzMzMQMzMzEDMzMxAzMzMQMzMzEDMzMxAzMzMQMzMzEDMzMyAzMzMgMzM + zIDMzMyAzMzMgMzMzIDMzMyAzMzMgMzMzIDMzMyAzMzMgMzMzIDMzMyAzMzMgMzMzIDMzMyAzMzMgMzM + zIDMzMyAzMzMr8zMzL/MzMy/zMzMv8zMzL/MzMy/zMzMv8zMzL/MzMy/zMzMv8zMzL/MzMy/zMzMv8zM + zL/MzMy/zMzMv8zMzL/MzMy/zMzMv8zMzN/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zM + zP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zM + zP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zM + zP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zM + zP/MzMz/zMzM/8zMzP/MzMzPAAAAAAAAAAAAAAAA////AP///wD///8A////AAAAAAAAAAAAAAAAAAAA + AADMzMxQzMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zM + zP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zM + zP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zM + zP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zM + zP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zM + zP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zM + zP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zM + zP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP8AAAAAAAAAAAAA + AAD///8A////AP///wD///8AAAAAAAAAAAAAAAAAAAAAAMzMzI/MzMz/zMzM/8zMzP/MzMz/zMzM/8zM + zP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zM + zP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zM + zP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zM + zP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zM + zP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zM + zP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zM + zP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zM + zP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzCAAAAAAAAAAAP///wD///8A////AP///wAAAAAAAAAAAAAA + AAAAAAAAzMzMv8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zM + zP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zM + zP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zM + zP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zM + zP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zM + zP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zM + zP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zM + zP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzMQAAA + AAAAAAAA////AP///wD///8A////AAAAAAAAAAAAAAAAAAAAAADMzMz/zMzM/8zMzP/MzMz/zMzM/8zM + zP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zM + zP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zM + zP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zM + zP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zM + zP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zM + zP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zM + zP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zM + zP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMyAAAAAAAAAAAD///8A////AP///wD///8AAAAAAAAA + AAAAAAAAzMzMQMzMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zM + zP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zM + zP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zM + zP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zM + zP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zM + zP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zM + zP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zM + zP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zM + zI8AAAAAAAAAAP///wD///8A////AP///wAAAAAAAAAAAAAAAADMzMyAzMzM/8zMzP/MzMz/zMzM/8zM + zP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zM + zP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zM + zP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zM + zP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zM + zP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zM + zP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zM + zP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zM + zP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzMvwAAAAAAAAAA////AP///wD///8A////AAAA + AAAAAAAAAAAAAMzMzK/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zM + zP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zM + zP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zM + zP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zM + zP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zM + zP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zM + zP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zM + zP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zM + zP/MzMzfAAAAAAAAAAD///8A////AP///wD///8AAAAAAAAAAAAAAAAAzMzM38zMzP/MzMz/zMzM/8zM + zP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zM + zP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zM + zP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zM + zP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/9LS + 0v/Z2dn/2dnZ/9nZ2f/Z2dn/2dnZ/9nZ2f/Z2dn/2dnZ/9nZ2f/Z2dn/2dnZ/9nZ2f/Z2dn/2dnZ/9nZ + 2f/Z2dn/2dnZ/9nZ2f/Z2dn/2dnZ/+Li4v/m5ub/5ubm/+bm5v/m5ub/5ubm/+bm5v/m5ub/5ubm/+bm + 5v/m5ub/5ubm/+bm5v/m5ub/5ubm/+bm5v/m5ub/5ubm/+bm5v/m5ub/5ubm/9LS0v/MzMz/zMzM/8zM + zP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP8AAAAAAAAAAP///wD///8A////AP// + /wAAAAAAAAAAAMzMzBDMzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zM + zP/MzMz/5ubm/+bm5v/m5ub/5ubm/+bm5v/m5ub/5ubm/+bm5v/m5ub/5ubm//Ly8v/y8vL/8vLy//Ly + 8v/y8vL/8vLy//Ly8v/y8vL/8vLy//Ly8v/y8vL/8vLy//Ly8v/y8vL/8vLy//Ly8v/y8vL/8vLy//Ly + 8v/y8vL/9fX1//////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ////////////////////////3Nzc/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zM + zP/MzMz/zMzM/8zMzDAAAAAA////AP///wD///8A////AAAAAAAAAAAAzMzMQMzMzP/MzMz/zMzM/8zM + zP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/9zc3P////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ///////////////////////////////////////////////////////////////////m5ub/zMzM/8zM + zP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzMQAAAAAD///8A////AP// + /wD///8AAAAAAAAAAADMzMyAzMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zM + zP/MzMz/6enp//////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////Ly8v/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zM + zP/MzMz/zMzM/8zMzP/MzMxwAAAAAP///wD///8A////AP///wAAAAAAAAAAAMzMzK/MzMz/zMzM/8zM + zP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/19fX///////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ////////////////////////////////////////////////////////////////////////+fn5/8zM + zP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzIAAAAAA////AP// + /wD///8A////AAAAAAAAAAAAzMzMz8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zM + zP/MzMz/z8/P//////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ////////////////////////////////////////zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zM + zP/MzMz/zMzM/8zMzP/MzMz/zMzMnwAAAAD///8A////AP///wD///8AAAAAAAAAAADMzMz/zMzM/8zM + zP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/Z2dn///////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ///W1tb/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMy/AAAAAP// + /wD///8A////AP///wAAAAAAzMzMMMzMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zM + zP/MzMz/zMzM/+bm5v////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////////////////////////////////////9nZ2f/MzMz/zMzM/8zMzP/MzMz/zMzM/8zM + zP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzM8AAAAA////AP///wD///8A////AAAAAADMzMxQzMzM/8zM + zP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/8vLy//////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ////////5ubm/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/wAA + AAD///8A////AP///wD///8AAAAAAMzMzIDMzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zM + zP/MzMz/zMzM/8zMzP/8/Pz///////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ///////////////////////////////////////////////////p6en/zMzM/8zMzP/MzMz/zMzM/8zM + zP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/AAAAAP///wD///8A////AP///wAAAAAAzMzMn8zM + zP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/0tLS//////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////Ly8v/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zM + zP/MzMwg////AP///wD///8A////AAAAAADMzMy/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zM + zP/MzMz/zMzM/8zMzP/Z2dn///////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ////////////////////////////////////////////////////////9fX1/8zMzP/MzMz/zMzM/8zM + zP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzED///8A////AP///wD///8AAAAAAMzM + zO/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/+bm5v////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ////////////////////////zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zM + zP/MzMz/zMzMQP///wD///8A////AP///wAAAAAAzMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zM + zP/MzMz/zMzM/8zMzP/MzMz/7Ozs//////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ///////////////////////////////////////////////////////////////////MzMz/zMzM/8zM + zP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMxQ////AP///wD///8A////AMzM + zDDMzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/y8vL///////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////////////////////9bW1v/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zM + zP/MzMz/zMzM/8zMzID///8A////AP///wD///8AzMzMQMzMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zM + zP/MzMz/zMzM/8zMzP/MzMz/zMzM//////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ////////////////////////////////////////////////////////////////////////2dnZ/8zM + zP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzMgP///wD///8A////AP// + /wDMzMxgzMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/Pz8////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ///////////////////////////////////Z2dn/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zM + zP/MzMz/zMzM/8zMzP/MzMyA////AP///wD///8A////AMzMzIDMzMz/zMzM/8zMzP/MzMz/zMzM/8zM + zP/MzMz/zMzM/8zMzP/MzMz/zMzM/9nZ2f////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////////////////////////////////////////////////////////////////////+Li + 4v/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzID///8A////AP// + /wD///8AzMzMgMzMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/3Nzc//// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ////////////////////////////////////////5ubm/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zM + zP/MzMz/zMzM/8zMzP/MzMz/zMzMj////wD///8A////AP///wDMzMyvzMzM/8zMzP/MzMz/zMzM/8zM + zP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/m5ub///////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ///m5ub/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMy/////AP// + /wD///8A////AMzMzL/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/+bm + 5v////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////////////////////////////////////+bm5v/MzMz/zMzM/8zMzP/MzMz/zMzM/8zM + zP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzL////8A////AP///wD///8AzMzMv8zMzP/MzMz/zMzM/8zM + zP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/7+/v//////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ////////5ubm/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzMv/// + /wD///8A////AP///wDMzMy/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zM + zP/y8vL///////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ///////////////////////////////////////////////////m5ub/zMzM/8zMzP/MzMz/zMzM/8zM + zP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMy/////AP///wD///8A////AMzMzP/MzMz/zMzM/8zM + zP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM//Ly8v////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////+bm5v/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zM + zL////8A////AP///wD///8AzMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zM + zP/MzMz/9fX1//////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ////////////////////////////////////////////////////////5ubm/8zMzP/MzMz/zMzM/8zM + zP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzMv////wD///8A////AP///wDMzMz/zMzM/8zM + zP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ///////////////////m5ub/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zM + zP/MzMy/////AP///wD///8A////AMzMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zM + zP/MzMz/zMzM//////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////////////////////////////////////////////////////+bm5v/MzMz/zMzM/8zM + zP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzL////8A////AP///wD///8AzMzM/8zM + zP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz///////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ////////////////////////5ubm/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zM + zP/MzMz/zMzMj////wD///8A////AP///wDMzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zM + zP/MzMz/zMzM/8zMzP////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ///////////////////////////////////////////////////////////////////m5ub/zMzM/8zM + zP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMyA////AP///wD///8A////AMzM + zP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM//////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////////////////////+bm5v/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zM + zP/MzMz/zMzM/8zMzID///8A////AP///wD///8AzMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zM + zP/MzMz/zMzM/8zMzP/MzMz///////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ////////////////////////////////////////////////////////////////////////3Nzc/8zM + zP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzMgP///wD///8A////AP// + /wDMzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/5+fn///////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ///////////////////////////////////Z2dn/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zM + zP/MzMz/zMzM/8zMzP/MzMxg////AP///wD///8A////AMzMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zM + zP/MzMz/zMzM/8zMzP/MzMz/zMzM//Ly8v////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////////////////////////////////////////////////////////////////////9bW + 1v/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzED///8A////AP// + /wD///8AzMzM78zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/8vLy//// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ////////////////////////////////////////zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zM + zP/MzMz/zMzM/8zMzP/MzMz/zMzMQP///wD///8A////AP///wDMzMy/zMzM/8zMzP/MzMz/zMzM/8zM + zP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/s7Oz///////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////X1 + 9f/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP8AAAAA////AP// + /wD///8A////AMzMzL/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/+bm + 5v////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ////////////////////////////////////////7+/v/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zM + zP/MzMz/zMzM/8zMzP/MzMz/zMzM/wAAAAD///8A////AP///wD///8AzMzMv8zMzP/MzMz/zMzM/8zM + zP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/3Nzc//////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ///i4uL/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMy/AAAAAP// + /wD///8A////AP///wDMzMyAzMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zM + zP/W1tb///////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////////////////////////////////////9nZ2f/MzMz/zMzM/8zMzP/MzMz/zMzM/8zM + zP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzJ8AAAAA////AP///wD///8A////AMzMzIDMzMz/zMzM/8zM + zP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ///8/Pz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzMgAAA + AAD///8A////AP///wD///8AzMzMQMzMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zM + zP/MzMz/zMzM//Ly8v////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////////////////////////////////////+zs7P/MzMz/zMzM/8zMzP/MzMz/zMzM/8zM + zP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMxAAAAAAP///wD///8A////AP///wDMzMwgzMzM/8zM + zP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/4uLi//////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ////////3Nzc/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zM + zBAAAAAA////AP///wD///8A////AAAAAADMzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zM + zP/MzMz/zMzM/8zMzP/S0tL///////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////z8/P/MzMz/zMzM/8zMzP/MzMz/zMzM/8zM + zP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMzPAAAAAAAAAAD///8A////AP///wD///8AAAAAAMzM + zL/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/19fX///////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ////////5ubm/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zM + zI8AAAAAAAAAAP///wD///8A////AP///wAAAAAAzMzMj8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zM + zP/MzMz/zMzM/8zMzP/MzMz/zMzM/9/f3/////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////z8/P/Pz8//zMzM/8zMzP/MzMz/zMzM/8zM + zP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzMUAAAAAAAAAAA////AP///wD///8A////AAAA + AADMzMxQzMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/z8/P//z8 + /P////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ////////5ubm/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zM + zO8AAAAAAAAAAAAAAAD///8A////AP///wD///8AAAAAAMzMzBDMzMz/zMzM/8zMzP/MzMz/zMzM/8zM + zP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/39/f//////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////X19f/MzMz/zMzM/8zMzP/MzMz/zMzM/8zM + zP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzMnwAAAAAAAAAAAAAAAP///wD///8A////AP// + /wAAAAAAAAAAAMzMzK/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zM + zP/MzMz/9fX1//////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ///8/Pz/1tbW/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zM + zP/MzMxQAAAAAAAAAAAAAAAA////AP///wD///8A////AAAAAAAAAAAAzMzMYMzMzP/MzMz/zMzM/8zM + zP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/W1tb//Pz8//////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////////////////////////////////Pz8/9bW1v/MzMz/zMzM/8zMzP/MzMz/zMzM/8zM + zP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM3wAAAAAAAAAAAAAAAAAAAAD///8A////AP// + /wD///8AAAAAAAAAAADMzMwQzMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zM + zP/MzMz/zMzM/8zMzP/c3Nz///////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////z8 + /P/W1tb/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zM + zP/MzMxwAAAAAAAAAAAAAAAAAAAAAP///wD///8A////AP///wAAAAAAAAAAAAAAAADMzMyfzMzM/8zM + zP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/f39///Pz8//// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ///////////////////////////////////s7Oz/z8/P/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zM + zP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM78zMzBAAAAAAAAAAAAAAAAAAAAAA////AP// + /wD///8A////AAAAAAAAAAAAAAAAAMzMzDDMzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zM + zP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/W1tb/+fn5//////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////n5+f/p6en/0tLS/8zM + zP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zM + zP/MzMxwAAAAAAAAAAAAAAAAAAAAAAAAAAD///8A////AP///wD///8AAAAAAAAAAAAAAAAAAAAAAMzM + zL/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zM + zP/MzMz/5ubm//z8/P////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////z8/P/y8vL/8vLy/+zs7P/m5ub/5ubm/9zc + 3P/Z2dn/1tbW/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zM + zP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzMzwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP// + /wD///8A////AP///wAAAAAAAAAAAAAAAAAAAAAAzMzMIMzMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zM + zP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/z8/P/9/f3//v7+///Pz8//// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ///////////////////5+fn/8vLy//Ly8v/y8vL/6enp/+bm5v/m5ub/39/f/9nZ2f/Z2dn/1tbW/8zM + zP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zM + zP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zM + zP/MzMwwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA////AP///wD///8A////AAAAAAAAAAAAAAAAAAAA + AAAAAAAAzMzMj8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zM + zP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/0tLS/9nZ2f/f39//5ubm/+bm5v/m5ub/8vLy//Ly + 8v/y8vL/8vLy//Ly8v/y8vL//Pz8//////////////////////////////////////////////////// + ////////////////////////+fn5//Ly8v/y8vL/8vLy//Ly8v/y8vL/8vLy//Ly8v/s7Oz/5ubm/+bm + 5v/m5ub/5ubm/+bm5v/Z2dn/2dnZ/9nZ2f/Z2dn/0tLS/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zM + zP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zM + zP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zM + zP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzMYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAD///8A////AP///wD///8AAAAAAAAAAAAAAAAAAAAAAAAAAADMzMwQzMzMz8zMzP/MzMz/zMzM/8zM + zP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zM + zP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zM + zP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zM + zP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zM + zP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zM + zP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zM + zP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zM + zJ8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP///wD///8A////AP///wAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAADMzMwwzMzM78zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zM + zP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zM + zP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zM + zP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zM + zP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zM + zP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zM + zP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zM + zP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMyPAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAA////AP///wD///8A////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADMzMwwzMzM78zM + zP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zM + zP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zM + zP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zM + zP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zM + zP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zM + zP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zM + zP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMzvzMzMYAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///8A////AP///wD///8AAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADMzMwwzMzM78zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zM + zP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zM + zP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zM + zP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zM + zP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zM + zP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zM + zP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zM + zP/MzMz/zMzM/8zMzP/MzMz/zMzMn8zMzCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAP///wD///8A////AP///wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AADMzMwwzMzMz8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zM + zP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zM + zP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zM + zP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zM + zP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zM + zP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zM + zP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMzPzMzMj8zMzCAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA////AP///wD///8A////AAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAzMzMgMzMzO/MzMz/zMzM/8zM + zP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zM + zP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zM + zP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zM + zP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zM + zP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zM + zP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/uL/I/8zMzL/MzMy/zMzMgMzMzIDMzMxQzMzMQMzM + zEDMzMwgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAD///8A////AP///wD///8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAzMzMIMzMzIDMzMzvzMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zM + zP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zM + zP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zM + zP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zM + zP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zM + zP/MzMz/zMzM/8zMzP/MzMz/tsLM/6++zP+vvsz/mbTM/42qyP99l7v/VXyz/1V8s/9LdbD/LWGq/y1h + qv8tYar/LWGqMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP///wD///8A////AP// + /wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AADMzMxQzMzMj8zMzL/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zM + zP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zM + zP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zM + zP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/tsLM/6++ + zP+vvsz/r77M/5m0zP+SsMz/krDM/4utzP91osz/daLM/3WizP9YlMz/WJTM/1iUzP9YlMz/WJTM/1iU + zP9YlMz/TYfE/y1hqv8tYar/LWGq/y1hqv8tYar/LWGq/y1hqv8tYapAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA////AP///wD///8A////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAzMzMQMzM + zEDMzMxAzMzMgMzMzIB9l7v/fZe7/6SxxP+kscT/pLHE/6SxxP+quMj/r77M/7bCzP/MzMz/zMzM/8zM + zP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/r77M/6++ + zP+vvsz/r77M/6++zP+vvsz/r77M/6++zP+ht8z/krDM/5KwzP+SsMz/krDM/5KwzP98psz/daLM/3Wi + zP91osz/daLM/1iUzP9YlMz/WJTM/1iUzP9YlMz/WJTM/1iUzP9YlMz/WJTM/1iUzP9YlMz/WJTM/1iU + zP9YlMz/WJTM/1iUzP9YlMz/WJTM/1iUzP9YlMz/WJTM/1iUzP9Nh8T/LWGq/y1hqv8tYar/LWGq/y1h + qv8tYar/LWGq/y1hqkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///8A////AP// + /wD///8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAC1hqv8tYar/LWGq/y1h + qv8tYar/LWGq/zhus/9YlMz/WJTM/1iUzP9YlMz/WJTM/1iUzP9YlMz/WJTM/1iUzP9YlMz/WJTM/1iU + zP9YlMz/WJTM/1iUzP9YlMz/WJTM/1iUzP9YlMz/WJTM/1iUzP9YlMz/WJTM/1iUzP9YlMz/WJTM/1iU + zP9YlMz/WJTM/1iUzP9YlMz/WJTM/1iUzP9YlMz/WJTM/1iUzP9YlMz/WJTM/1iUzP9YlMz/WJTM/1iU + zP9YlMz/WJTM/1iUzP9YlMz/WJTM/1iUzP9YlMz/WJTM/1iUzP9YlMz/WJTM/1iUzP9YlMz/WJTM/1iU + zP9YlMz/WJTM/02HxP8tYar/LWGq/y1hqv8tYar/LWGq/y1hqv8tYar/LWGqQAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAP///wD///8A////AP///wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAALWGq3y1hqv8tYar/LWGq/y1hqv8tYar/OG6z/1iUzP9YlMz/WJTM/1iU + zP9YlMz/WJTM/1iUzP9YlMz/WJTM/1iUzP9YlMz/WJTM/1iUzP9YlMz/WJTM/1iUzP9YlMz/WJTM/1iU + zP9YlMz/WJTM/1iUzP9YlMz/WJTM/1iUzP9YlMz/WJTM/1iUzP9YlMz/WJTM/1iUzP9YlMz/WJTM/1iU + zP9YlMz/WJTM/1iUzP9YlMz/WJTM/1iUzP9YlMz/WJTM/1iUzP9YlMz/WJTM/1iUzP9YlMz/WJTM/1iU + zP9YlMz/WJTM/1iUzP9YlMz/WJTM/1iUzP9YlMz/WJTM/1iUzP9YlMz/TYfE/y1hqv8tYar/LWGq/y1h + qv8tYar/LWGq/y1hqv8tYapAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA////AP// + /wD///8A////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAtYaq/LWGq/y1h + qv8tYar/LWGq/y1hqv84brP/WJTM/1iUzP9YlMz/WJTM/1iUzP9YlMz/WJTM/1iUzP9YlMz/WJTM/1iU + zP9YlMz/WJTM/1iUzP9YlMz/WJTM/1iUzP9YlMz/WJTM/1iUzP9YlMz/WJTM/1iUzP9YlMz/WJTM/1iU + zP9YlMz/WJTM/1iUzP9YlMz/WJTM/1iUzP9YlMz/WJTM/1iUzP9YlMz/WJTM/1iUzP9YlMz/WJTM/1iU + zP9YlMz/WJTM/1iUzP9YlMz/WJTM/1iUzP9YlMz/WJTM/1iUzP9YlMz/WJTM/1iUzP9YlMz/WJTM/1iU + zP9YlMz/WJTM/1iUzP9Vkcr/LWGq/y1hqv8tYar/LWGq/y1hqv8tYar/LWGq/y1hqkAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///8A////AP///wD///8AAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAC1hqr8tYar/LWGq/y1hqv8tYar/LWGq/zBkrP9YlMz/WJTM/1iU + zP9YlMz/WJTM/1iUzP9YlMz/WJTM/1iUzP9YlMz/WJTM/1iUzP9YlMz/WJTM/1iUzP9YlMz/WJTM/1iU + zP9YlMz/WJTM/1iUzP9YlMz/WJTM/1iUzP9YlMz/WJTM/1iUzP9YlMz/WJTM/1iUzP9YlMz/WJTM/1iU + zP9YlMz/WJTM/1iUzP9YlMz/WJTM/1iUzP9YlMz/WJTM/1iUzP9YlMz/WJTM/1iUzP9YlMz/WJTM/1iU + zP9YlMz/WJTM/1iUzP9YlMz/WJTM/1iUzP9YlMz/WJTM/1iUzP9YlMz/WJTM/1iUzP8tYar/LWGq/y1h + qv8tYar/LWGq/y1hqv8tYar/LWGqYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP// + /wD///8A////AP///wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAALWGqvy1h + qv8tYar/LWGq/y1hqv8tYar/LWGq/1iUzP9YlMz/WJTM/1iUzP9YlMz/WJTM/1iUzP9YlMz/WJTM/1iU + zP9YlMz/WJTM/1iUzP9YlMz/WJTM/1iUzP9YlMz/WJTM/1iUzP9YlMz/WJTM/1iUzP9YlMz/WJTM/1iU + zP9YlMz/WJTM/1iUzP9YlMz/WJTM/1iUzP9YlMz/WJTM/1iUzP9YlMz/WJTM/1iUzP9YlMz/WJTM/1iU + zP9YlMz/WJTM/1iUzP9YlMz/WJTM/1iUzP9YlMz/WJTM/1iUzP9YlMz/WJTM/1iUzP9YlMz/WJTM/1iU + zP9YlMz/WJTM/1iUzP9YlMz/WJTM/y1hqv8tYar/LWGq/y1hqv8tYar/LWGq/y1hqv8tYaqAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA////AP///wD///8A////AAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAtYaqALWGq/y1hqv8tYar/LWGq/y1hqv8tYar/WJTM/1iU + zP9YlMz/WJTM/1iUzP9YlMz/WJTM/1iUzP9YlMz/WJTM/1iUzP9YlMz/WJTM/1iUzP9YlMz/WJTM/1iU + zP9YlMz/WJTM/1iUzP9YlMz/WJTM/1iUzP9YlMz/WJTM/1iUzP9YlMz/WJTM/1iUzP9YlMz/WJTM/1iU + zP9YlMz/WJTM/1iUzP9YlMz/WJTM/1iUzP9YlMz/WJTM/1iUzP9YlMz/WJTM/1iUzP9YlMz/WJTM/1iU + zP9YlMz/WJTM/1iUzP9YlMz/WJTM/1iUzP9YlMz/WJTM/1iUzP9YlMz/WJTM/1iUzP9YlMz/LWGq/y1h + qv8tYar/LWGq/y1hqv8tYar/LWGq/y1hqoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAD///8A////AP///wD///8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAC1h + qoAtYar/LWGq/y1hqv8tYar/LWGq/y1hqv9Tjsj/WJTM/1iUzP9YlMz/WJTM/1iUzP9YlMz/WJTM/1iU + zP9YlMz/WJTM/1iUzP9YlMz/WJTM/1iUzP9YlMz/WJTM/1iUzP9YlMz/WJTM/1iUzP9YlMz/WJTM/1iU + zP9YlMz/WJTM/1iUzP9YlMz/WJTM/1iUzP9YlMz/WJTM/1iUzP9YlMz/WJTM/1iUzP9YlMz/WJTM/1iU + zP9YlMz/WJTM/1iUzP9YlMz/WJTM/1iUzP9YlMz/WJTM/1iUzP9YlMz/WJTM/1iUzP9YlMz/WJTM/1iU + zP9YlMz/WJTM/1iUzP9YlMz/WJTM/1iUzP8tYar/LWGq/y1hqv8tYar/LWGq/y1hqv8tYar/LWGqgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP///wD///8A////AP///wAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAALWGqgC1hqv8tYar/LWGq/y1hqv8tYar/LWGq/02H + xP9YlMz/WJTM/1iUzP9YlMz/WJTM/1iUzP9YlMz/WJTM/1iUzP9YlMz/WJTM/1iUzP9YlMz/WJTM/1iU + zP9YlMz/WJTM/1iUzP9YlMz/WJTM/1iUzP9YlMz/WJTM/1iUzP9YlMz/WJTM/1iUzP9YlMz/WJTM/1iU + zP9YlMz/WJTM/1iUzP9YlMz/WJTM/1iUzP9YlMz/WJTM/1iUzP9YlMz/WJTM/1iUzP9YlMz/WJTM/1iU + zP9YlMz/WJTM/1iUzP9YlMz/WJTM/1iUzP9YlMz/WJTM/1iUzP9YlMz/WJTM/1iUzP9YlMz/WJTM/y1h + qv8tYar/LWGq/y1hqv8tYar/LWGq/y1hqv8tYaqAAAAAAAAAAAAAAAAAAAAAAAAAAAAtYapQLWGqgC1h + qoAtYaowAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAA////AP///wD///8A////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAtYapQLWGq/y1hqv8tYar/LWGq/y1hqv8tYar/TYfE/1iUzP9YlMz/WJTM/1iUzP9YlMz/WJTM/1iU + zP9YlMz/WJTM/1iUzP9YlMz/WJTM/1iUzP9YlMz/WJTM/1iUzP9YlMz/WJTM/1iUzP9YlMz/WJTM/1iU + zP9YlMz/WJTM/1iUzP9YlMz/WJTM/1iUzP9YlMz/WJTM/1iUzP9YlMz/WJTM/1iUzP9YlMz/WJTM/1iU + zP9YlMz/WJTM/1iUzP9YlMz/WJTM/1iUzP9YlMz/WJTM/1iUzP9YlMz/WJTM/1iUzP9YlMz/WJTM/1iU + zP9YlMz/WJTM/1iUzP9YlMz/WJTM/1iUzP9YlMz/Mmeu/y1hqv8tYar/LWGq/y1hqv8tYar/LWGq/y1h + qu8tYaqALWGqgC1hqoAtYaq/LWGq/y1hqv8tYar/LWGq/y1hqv8tYaq/LWGqMAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///8A////AP///wD///8AAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAC1hqkAtYar/LWGq/y1hqv8tYar/LWGq/y1h + qv9LhMH/WJTM/1iUzP9YlMz/WJTM/1iUzP9YlMz/WJTM/1iUzP9YlMz/WJTM/1iUzP9YlMz/WJTM/1iU + zP9YlMz/WJTM/1iUzP9YlMz/WJTM/1iUzP9YlMz/WJTM/1iUzP9YlMz/WJTM/1iUzP9YlMz/WJTM/1iU + zP9YlMz/WJTM/1iUzP9YlMz/WJTM/1iUzP9YlMz/WJTM/1iUzP9YlMz/WJTM/1iUzP9YlMz/WJTM/1iU + zP9YlMz/WJTM/1iUzP9YlMz/WJTM/1iUzP9YlMz/WJTM/1iUzP9YlMz/WJTM/1iUzP9YlMz/WJTM/1iU + zP84brP/LWGq/y1hqv8tYar/LWGq/y1hqv8tYar/LWGq/y1hqv8tYar/LWGq/y1hqv8tYar/LWGq/y1h + qv8tYar/LWGq/y1hqv8tYarvLWGqYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAP///wD///8A////AP///wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAALWGqQC1hqv8tYar/LWGq/y1hqv8tYar/LWGq/0N7u/9YlMz/WJTM/1iUzP9YlMz/WJTM/1iU + zP9YlMz/WJTM/1iUzP9YlMz/WJTM/1iUzP9YlMz/WJTM/1iUzP9YlMz/WJTM/1iUzP9YlMz/WJTM/1iU + zP9YlMz/WJTM/1iUzP9YlMz/WJTM/1iUzP9YlMz/WJTM/1iUzP9YlMz/WJTM/1iUzP9YlMz/WJTM/1iU + zP9YlMz/WJTM/1iUzP9YlMz/WJTM/1iUzP9YlMz/WJTM/1iUzP9YlMz/WJTM/1iUzP9YlMz/WJTM/1iU + zP9YlMz/WJTM/1iUzP9YlMz/WJTM/1iUzP9YlMz/WJTM/zhus/8tYar/LWGq/y1hqv8tYar/LWGq/y1h + qv8tYar/LWGq/y1hqv8tYar/LWGq/y1hqv8tYar/LWGq/y1hqv8tYar/LWGq/y1hqv8tYarvLWGqMAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA////AP///wD///8A////AAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAtYaogLWGq/y1hqv8tYar/LWGq/y1h + qv8tYar/Q3u7/1iUzP9YlMz/WJTM/1iUzP9YlMz/WJTM/1iUzP9YlMz/WJTM/1iUzP9YlMz/WJTM/1iU + zP9YlMz/WJTM/1iUzP9YlMz/WJTM/1iUzP9YlMz/WJTM/1iUzP9YlMz/WJTM/1iUzP9YlMz/WJTM/1iU + zP9YlMz/WJTM/1iUzP9YlMz/WJTM/1iUzP9YlMz/WJTM/1iUzP9YlMz/WJTM/1iUzP9YlMz/WJTM/1iU + zP9YlMz/WJTM/1iUzP9YlMz/WJTM/1iUzP9YlMz/WJTM/1iUzP9YlMz/WJTM/1iUzP9YlMz/WJTM/1iU + zP9YlMz/OG6z/y1hqv8tYar/LWGq/y1hqv8tYar/LWGq/y1hqv8tYar/LWGq/y1hqv8tYar/LWGq/y1h + qv8tYar/LWGq/y1hqv8tYar/LWGq/y1hqv8tYarfAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAD///8A////AP///wD///8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAtYar/LWGq/y1hqv8tYar/LWGq/y1hqv9De7v/WJTM/1iUzP9YlMz/WJTM/1iU + zP9YlMz/WJTM/1iUzP9YlMz/WJTM/1iUzP9YlMz/WJTM/1iUzP9YlMz/WJTM/1iUzP9YlMz/WJTM/1iU + zP9YlMz/WJTM/1iUzP9YlMz/WJTM/1iUzP9YlMz/WJTM/1iUzP9YlMz/WJTM/1iUzP9YlMz/WJTM/1iU + zP9YlMz/WJTM/1iUzP9YlMz/WJTM/1iUzP9YlMz/WJTM/1iUzP9YlMz/WJTM/1iUzP9YlMz/WJTM/1iU + zP9YlMz/WJTM/1iUzP9YlMz/WJTM/1iUzP9YlMz/WJTM/1iUzP84brP/LWGq/y1hqv8tYar/LWGq/y1h + qv8tYar/LWGq/y1hqv8tYar/LWGq/y1hqv8tYar/LWGq/y1hqv8tYar/LWGq/y1hqv8tYar/LWGq/y1h + qv8tYapgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP///wD///8A////AP// + /wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAtYaoQLWGqgC1hqs8tYar/LWGq/y1hqv8tYarPLWGqgC1hqv8tYar/LWGq/y1h + qv8tYar/LWGq/zhus/9YlMz/WJTM/1iUzP9YlMz/WJTM/1iUzP9YlMz/WJTM/1iUzP9YlMz/WJTM/1iU + zP9YlMz/WJTM/1iUzP9YlMz/WJTM/1iUzP9YlMz/WJTM/1iUzP9YlMz/WJTM/1iUzP9YlMz/WJTM/1iU + zP9YlMz/WJTM/1iUzP9YlMz/WJTM/1iUzP9YlMz/WJTM/1iUzP9YlMz/WJTM/1iUzP9YlMz/WJTM/1iU + zP9YlMz/WJTM/1iUzP9YlMz/WJTM/1iUzP9YlMz/WJTM/1iUzP9YlMz/WJTM/1iUzP9YlMz/WJTM/1iU + zP9YlMz/WJTM/zhus/8tYar/LWGq/y1hqv8tYar/LWGq/y1hqv8tYar/LWGq/y1hqv8tYar/LWGq/y1h + qv8tYar/LWGq/y1hqv8tYar/LWGq/y1hqv8tYar/LWGq/y1hqt8AAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA////AP///wD///8A////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAALWGqMC1hqu8tYar/LWGq/y1h + qv8tYar/LWGq/y1hqv8tYar/LWGq/y1hqv8tYar/LWGq/y1hqv8tYar/OG6z/1iUzP9YlMz/WJTM/1iU + zP9YlMz/WJTM/1iUzP9YlMz/WJTM/1iUzP9YlMz/WJTM/1iUzP9YlMz/WJTM/1iUzP9YlMz/WJTM/1iU + zP9YlMz/WJTM/1iUzP9YlMz/WJTM/1iUzP9YlMz/WJTM/1iUzP9YlMz/WJTM/1iUzP9YlMz/WJTM/1iU + zP9YlMz/WJTM/1iUzP9YlMz/WJTM/1iUzP9YlMz/WJTM/1iUzP9YlMz/WJTM/1iUzP9YlMz/WJTM/1iU + zP9YlMz/WJTM/1iUzP9YlMz/WJTM/1iUzP9YlMz/WJTM/1iUzP9YlMz/OnG1/y1hqv8tYar/LWGq/y1h + qv8tYar/LWGq/y1hqv8tYar/LWGq/y1hqv8tYar/LWGq/y1hqv8tYar/LWGq/y1hqv8tYar/LWGq/y1h + qv8tYar/LWGq/y1hqiAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///8A////AP// + /wD///8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAC1hqjAtYarvLWGq/y1hqv8tYar/LWGq/y1hqv8tYar/LWGq/y1hqv8tYar/LWGq/y1h + qv8tYar/LWGq/y1hqv84brP/WJTM/1iUzP9YlMz/WJTM/1iUzP9YlMz/WJTM/1iUzP9YlMz/WJTM/1iU + zP9YlMz/WJTM/1iUzP9YlMz/WJTM/1iUzP9YlMz/WJTM/1iUzP9YlMz/WJTM/1iUzP9YlMz/WJTM/1iU + zP9YlMz/WJTM/1iUzP9YlMz/WJTM/1iUzP9YlMz/WJTM/1iUzP9YlMz/WJTM/1iUzP9YlMz/WJTM/1iU + zP9YlMz/WJTM/1iUzP9YlMz/WJTM/1iUzP9YlMz/WJTM/1iUzP9YlMz/WJTM/1iUzP9YlMz/WJTM/1iU + zP9YlMz/WJTM/1iUzP9De7v/LWGq/y1hqv8tYar/LWGq/y1hqv8tYar/LWGq/y1hqv8tYar/LWGq/y1h + qv8tYar/LWGq/y1hqv8tYar/LWGq/y1hqv8tYar/LWGq/y1hqv8tYar/LWGqUAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAP///wD///8A////AP///wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAALWGqzy1hqv8tYar/LWGq/y1h + qv8tYar/LWGq/y1hqv8tYar/LWGq/y1hqv8tYar/LWGq/y1hqv8tYar/LWGq/zBkrP9YlMz/WJTM/1iU + zP9YlMz/WJTM/1iUzP9YlMz/WJTM/1iUzP9YlMz/WJTM/1iUzP9YlMz/WJTM/1iUzP9YlMz/WJTM/1iU + zP9YlMz/WJTM/1iUzP9YlMz/WJTM/1iUzP9YlMz/WJTM/1iUzP9YlMz/WJTM/1iUzP9YlMz/WJTM/1iU + zP9YlMz/WJTM/1iUzP9YlMz/WJTM/1iUzP9YlMz/WJTM/1iUzP9YlMz/WJTM/1iUzP9YlMz/WJTM/1iU + zP9YlMz/WJTM/1iUzP9YlMz/WJTM/1iUzP9YlMz/WJTM/1iUzP9YlMz/WJTM/1iUzP9Igb//Mmeu/y1h + qv8tYar/LWGq/y1hqv8tYar/LWGq/y1hqv8tYar/LWGq/y1hqv8tYar/LWGq/y1hqv8tYar/LWGq/y1h + qv8tYar/LWGq/y1hqv8tYaqAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA////AP// + /wD///8A////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAC1hqmAtYar/LWGq/y1hqv8tYar/LWGq/y1hqv8tYar/LWGq/y1hqv8tYar/LWGq/y1h + qv8tYar/LWGq/y1hqv8tYar/LWGq/1iUzP9YlMz/WJTM/1iUzP9YlMz/WJTM/1iUzP9YlMz/WJTM/1iU + zP9YlMz/WJTM/1iUzP9YlMz/WJTM/1iUzP9YlMz/WJTM/1iUzP9YlMz/WJTM/1iUzP9YlMz/WJTM/1iU + zP9YlMz/WJTM/1iUzP9YlMz/WJTM/1iUzP9YlMz/WJTM/1iUzP9YlMz/WJTM/1iUzP9YlMz/WJTM/1iU + zP9YlMz/WJTM/1iUzP9YlMz/WJTM/1iUzP9YlMz/WJTM/1iUzP9YlMz/WJTM/1iUzP9YlMz/WJTM/1iU + zP9YlMz/WJTM/1iUzP9YlMz/WJTM/1iUzP9YlMz/SIG//zJnrv8tYar/LWGq/y1hqv8tYar/LWGq/y1h + qv8tYar/LWGq/y1hqv8tYar/LWGq/y1hqv8tYar/LWGq/y1hqv8tYar/LWGq/y1hqoAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///8A////AP///wD///8AAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAALWGqry1hqv8tYar/LWGq/y1h + qv8tYar/LWGq/y1hqv8tYar/LWGq/y1hqv8tYar/LWGq/y1hqv8tYar/LWGq/y1hqv8tYar/WJTM/1iU + zP9YlMz/WJTM/1iUzP9YlMz/WJTM/1iUzP9YlMz/WJTM/1iUzP9YlMz/WJTM/1iUzP9YlMz/WJTM/1iU + zP9YlMz/WJTM/1iUzP9YlMz/WJTM/1iUzP9YlMz/WJTM/1iUzP9YlMz/WJTM/1iUzP9YlMz/WJTM/1iU + zP9YlMz/WJTM/1iUzP9YlMz/WJTM/1iUzP9YlMz/WJTM/1iUzP9YlMz/WJTM/1iUzP9YlMz/WJTM/1iU + zP9YlMz/WJTM/1iUzP9YlMz/WJTM/1iUzP9YlMz/WJTM/1iUzP9YlMz/WJTM/1iUzP9YlMz/WJTM/1iU + zP9YlMz/WJTM/0iBv/8yZ67/LWGq/y1hqv8tYar/LWGq/y1hqv8tYar/LWGq/y1hqv8tYar/LWGq/y1h + qv8tYar/LWGq/y1hqv8tYar/LWGqYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP// + /wD///8A////AP///wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAtYar/LWGq/y1hqv8tYar/LWGq/y1hqv8tYar/LWGq/y1hqv8tYar/LWGq/y1h + qv8tYar/LWGq/y1hqv8tYar/LWGq/y1hqv9Tjsj/WJTM/1iUzP9YlMz/WJTM/1iUzP9YlMz/WJTM/1iU + zP9YlMz/WJTM/1iUzP9YlMz/WJTM/1iUzP9YlMz/WJTM/1iUzP9YlMz/WJTM/1iUzP9YlMz/WJTM/1iU + zP9YlMz/WJTM/1iUzP9YlMz/WJTM/1iUzP9YlMz/WJTM/1iUzP9YlMz/WJTM/1iUzP9YlMz/WJTM/1iU + zP9YlMz/WJTM/1iUzP9YlMz/WJTM/1iUzP9YlMz/WJTM/1iUzP9YlMz/WJTM/1iUzP9YlMz/WJTM/1iU + zP9YlMz/WJTM/1iUzP9YlMz/WJTM/1iUzP9YlMz/WJTM/1iUzP9YlMz/WJTM/1iUzP9Ad7n/LWGq/y1h + qv8tYar/LWGq/y1hqv8tYar/LWGq/y1hqv8tYar/LWGq/y1hqv8tYar/LWGq/y1hqv8tYapAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA////AP///wD///8A////AAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAALWGqIC1hqv8tYar/LWGq/y1h + qv8tYar/LWGq/y1hqv8tYar/LWGq/y1hqv8tYar/LWGq/zhus/9De7v/S4TB/02HxP9YlMz/WJTM/1iU + zP9YlMz/WJTM/1iUzP9YlMz/WJTM/1iUzP9YlMz/WJTM/1iUzP9YlMz/WJTM/1iUzP9YlMz/WJTM/1iU + zP9YlMz/WJTM/1iUzP9YlMz/WJTM/1iUzP9YlMz/WJTM/1iUzP9YlMz/WJTM/1iUzP9YlMz/WJTM/1iU + zP9YlMz/WJTM/1iUzP9YlMz/WJTM/1iUzP9YlMz/WJTM/1iUzP9YlMz/WJTM/1iUzP9YlMz/WJTM/1iU + zP9YlMz/WJTM/1iUzP9YlMz/WJTM/1iUzP9YlMz/WJTM/1iUzP9YlMz/WJTM/1iUzP9YlMz/WJTM/1iU + zP9YlMz/WJTM/1iUzP9YlMz/WJTM/1iUzP9De7v/LWGq/y1hqv8tYar/LWGq/y1hqv8tYar/LWGq/y1h + qv8tYar/LWGq/y1hqv8tYar/LWGq7wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAD///8A////AP///wD///8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAtYapALWGq/y1hqv8tYar/LWGq/y1hqv8tYar/LWGq/y1hqv8tYar/Mmeu/0iB + v/9YlMz/WJTM/1iUzP9YlMz/WJTM/1iUzP9YlMz/WJTM/1iUzP9YlMz/WJTM/1iUzP9YlMz/WJTM/1iU + zP9YlMz/WJTM/1iUzP9YlMz/WJTM/1iUzP9YlMz/WJTM/1iUzP9YlMz/WJTM/1iUzP9YlMz/WJTM/1iU + zP9YlMz/WJTM/1iUzP9YlMz/WJTM/1iUzP9YlMz/WJTM/1iUzP9YlMz/WJTM/1iUzP9YlMz/WJTM/1iU + zP9YlMz/WJTM/1iUzP9YlMz/WJTM/1iUzP9YlMz/WJTM/1iUzP9YlMz/WJTM/1iUzP9YlMz/WJTM/1iU + zP9YlMz/WJTM/1iUzP9YlMz/WJTM/1iUzP9YlMz/WJTM/1iUzP9YlMz/WJTM/1iUzP9YlMz/WJTM/1OO + yP8tYar/LWGq/y1hqv8tYar/LWGq/y1hqv8tYar/LWGq/y1hqv8tYar/LWGq/y1hqv8tYaqfAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP///wD///8A////AP///wAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAC1hqhAtYar/LWGq/y1h + qv8tYar/LWGq/y1hqv8tYar/LWGq/zJnrv9Vkcr/WJTM/1iUzP9YlMz/WJTM/1iUzP9YlMz/WJTM/1iU + zP9YlMz/WJTM/1iUzP9YlMz/WJTM/1iUzP9YlMz/WJTM/1iUzP9YlMz/WJTM/1iUzP9YlMz/WJTM/1iU + zP9YlMz/WJTM/1iUzP9YlMz/WJTM/1iUzP9YlMz/WJTM/1iUzP9YlMz/WJTM/1iUzP9YlMz/WJTM/1iU + zP9YlMz/WJTM/1iUzP9YlMz/WJTM/1iUzP9YlMz/WJTM/1iUzP9YlMz/WJTM/1iUzP9YlMz/WJTM/1iU + zP9YlMz/WJTM/1iUzP9YlMz/WJTM/1iUzP9YlMz/WJTM/1iUzP9YlMz/WJTM/1iUzP9YlMz/WJTM/1iU + zP9YlMz/WJTM/1iUzP9YlMz/WJTM/1iUzP9YlMz/UIrG/y1hqv8tYar/LWGq/y1hqv8tYar/LWGq/y1h + qv8tYar/LWGq/y1hqv8tYar/LWGq/y1hqiAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAA////AP///wD///8A////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAC1hqv8tYar/LWGq/y1hqv8tYar/LWGq/y1hqv8tYar/PXS3/1iU + zP9YlMz/WJTM/1iUzP9YlMz/WJTM/1iUzP9YlMz/WJTM/1iUzP9YlMz/WJTM/1iUzP9YlMz/WJTM/1iU + zP9YlMz/WJTM/1iUzP9YlMz/WJTM/1iUzP9YlMz/WJTM/1iUzP9YlMz/WJTM/1iUzP9YlMz/WJTM/1iU + zP9YlMz/WJTM/1iUzP9YlMz/WJTM/1iUzP9YlMz/WJTM/1iUzP9YlMz/WJTM/1iUzP9YlMz/WJTM/1iU + zP9YlMz/WJTM/1iUzP9YlMz/WJTM/1iUzP9YlMz/WJTM/1iUzP9YlMz/WJTM/1iUzP9YlMz/WJTM/1iU + zP9YlMz/WJTM/1iUzP9YlMz/WJTM/1iUzP9YlMz/WJTM/1iUzP9YlMz/WJTM/1iUzP9YlMz/WJTM/1WR + yv81a7D/LWGq/y1hqv8tYar/LWGq/y1hqv8tYar/LWGq/y1hqv8tYar/LWGq/y1hqv8tYaqAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///8A////AP///wD///8AAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAALWGqvy1h + qv8tYar/LWGq/y1hqv8tYar/LWGq/y1hqv8wZKz/VZHK/1iUzP9YlMz/WJTM/1iUzP9YlMz/WJTM/1iU + zP9YlMz/WJTM/1iUzP9YlMz/WJTM/1iUzP9YlMz/WJTM/1iUzP9YlMz/WJTM/1iUzP9YlMz/WJTM/1iU + zP9YlMz/WJTM/1iUzP9YlMz/WJTM/1iUzP9YlMz/WJTM/1iUzP9YlMz/WJTM/1iUzP9YlMz/WJTM/1iU + zP9YlMz/WJTM/1iUzP9YlMz/WJTM/1iUzP9YlMz/WJTM/1iUzP9YlMz/WJTM/1iUzP9YlMz/WJTM/1iU + zP9YlMz/WJTM/1iUzP9YlMz/WJTM/1iUzP9YlMz/WJTM/1iUzP9YlMz/WJTM/1iUzP9YlMz/WJTM/1iU + zP9YlMz/WJTM/1iUzP9YlMz/WJTM/1iUzP9Igb//Mmeu/y1hqv8tYar/LWGq/y1hqv8tYar/LWGq/y1h + qv8tYar/LWGq/y1hqv8tYar/LWGqzwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAP///wD///8A////AP///wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAtYapwLWGq/y1hqv8tYar/LWGq/y1hqv8tYar/LWGq/y1h + qv81a7D/UIrG/1iUzP9YlMz/WJTM/1iUzP9YlMz/WJTM/1iUzP9YlMz/WJTM/1iUzP9YlMz/WJTM/1iU + zP9YlMz/WJTM/1iUzP9YlMz/WJTM/1iUzP9YlMz/WJTM/1iUzP9YlMz/WJTM/1iUzP9YlMz/WJTM/1iU + zP9YlMz/WJTM/1iUzP9YlMz/WJTM/1iUzP9YlMz/WJTM/1iUzP9YlMz/WJTM/1iUzP9YlMz/WJTM/1iU + zP9YlMz/WJTM/1iUzP9YlMz/WJTM/1iUzP9YlMz/WJTM/1iUzP9YlMz/WJTM/1iUzP9YlMz/WJTM/1iU + zP9YlMz/WJTM/1iUzP9YlMz/WJTM/1iUzP9YlMz/WJTM/1iUzP9YlMz/WJTM/1WRyv9Igb//Mmeu/y1h + qv8tYar/LWGq/y1hqv8tYar/LWGq/y1hqv8tYar/LWGq/y1hqv8tYar/LWGq/y1hqs8tYaoQAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA////AP///wD///8A////AAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAC1h + qhAtYarvLWGq/y1hqv8tYar/LWGq/y1hqv8tYar/LWGq/y1hqv8tYar/Q3u7/1WRyv9YlMz/WJTM/1iU + zP9YlMz/WJTM/1iUzP9YlMz/WJTM/1iUzP9YlMz/WJTM/1iUzP9YlMz/WJTM/1iUzP9YlMz/WJTM/1iU + zP9YlMz/WJTM/1iUzP9YlMz/WJTM/1iUzP9YlMz/WJTM/1iUzP9YlMz/WJTM/1iUzP9YlMz/WJTM/1iU + zP9YlMz/WJTM/1iUzP9YlMz/WJTM/1iUzP9YlMz/WJTM/1iUzP9YlMz/WJTM/1iUzP9YlMz/WJTM/1iU + zP9YlMz/WJTM/1iUzP9YlMz/WJTM/1iUzP9YlMz/WJTM/1iUzP9YlMz/WJTM/1iUzP9YlMz/WJTM/1iU + zP9YlMz/U47I/0V+vf86cbX/LWGq/y1hqv8tYar/LWGq/y1hqv8tYar/LWGq/y1hqv8tYar/LWGq/y1h + qv8tYar/LWGq/y1hqv8tYarPLWGqEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAD///8A////AP///wD///8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAC1hqoAtYar/LWGq/y1hqv8tYar/LWGq/y1h + qv8tYar/LWGq/y1hqv8tYar/MGSs/0V+vf9Vkcr/WJTM/1iUzP9YlMz/WJTM/1iUzP9YlMz/WJTM/1iU + zP9YlMz/WJTM/1iUzP9YlMz/WJTM/1iUzP9YlMz/WJTM/1iUzP9YlMz/WJTM/1iUzP9YlMz/WJTM/1iU + zP9YlMz/WJTM/1iUzP9YlMz/WJTM/1iUzP9YlMz/WJTM/1iUzP9YlMz/WJTM/1iUzP9YlMz/WJTM/1iU + zP9YlMz/WJTM/1iUzP9YlMz/WJTM/1iUzP9YlMz/WJTM/1iUzP9YlMz/WJTM/1iUzP9YlMz/WJTM/1iU + zP9YlMz/WJTM/1iUzP9YlMz/WJTM/1CKxv9Igb//PXS3/zJnrv8tYar/LWGq/y1hqv8tYar/LWGq/y1h + qv8tYar/LWGq/y1hqv8tYar/LWGq/y1hqv8tYar/LWGq/y1hqv8tYar/LWGqry1hqhAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP///wD///8A////AP// + /wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAC1hqs8tYar/LWGq/y1hqv8tYar/LWGq/y1hqv8tYar/LWGq/y1hqv8tYar/LWGq/zBk + rP9De7v/U47I/1iUzP9YlMz/WJTM/1iUzP9YlMz/WJTM/1iUzP9YlMz/WJTM/1iUzP9YlMz/WJTM/1iU + zP9YlMz/WJTM/1iUzP9YlMz/WJTM/1iUzP9YlMz/WJTM/1iUzP9YlMz/WJTM/1iUzP9YlMz/WJTM/1iU + zP9YlMz/WJTM/1iUzP9YlMz/WJTM/1iUzP9YlMz/WJTM/1iUzP9YlMz/WJTM/1iUzP9YlMz/WJTM/1iU + zP9YlMz/WJTM/1iUzP9YlMz/WJTM/1iUzP9YlMz/WJTM/1OOyP9LhMH/Q3u7/zhus/8wZKz/LWGq/y1h + qv8tYar/LWGq/y1hqv8tYar/LWGq/y1hqv8tYar/LWGq/y1hqv8tYar/LWGq/y1hqv8tYar/LWGq/y1h + qv8tYar/LWGq7y1hqnAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA////AP///wD///8A////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAALWGqMC1hqu8tYar/LWGq/y1h + qv8tYar/LWGq/y1hqv8tYar/LWGq/y1hqv8tYar/LWGq/y1hqv8tYar/NWuw/0V+vf9Qisb/WJTM/1iU + zP9YlMz/WJTM/1iUzP9YlMz/WJTM/1iUzP9YlMz/WJTM/1iUzP9YlMz/WJTM/1iUzP9YlMz/WJTM/1iU + zP9YlMz/WJTM/1iUzP9YlMz/WJTM/1iUzP9YlMz/WJTM/1iUzP9YlMz/WJTM/1iUzP9YlMz/WJTM/1iU + zP9YlMz/WJTM/1iUzP9YlMz/WJTM/1iUzP9YlMz/WJTM/1iUzP9YlMz/VZHK/02HxP9Ffr3/QHe5/zhu + s/8wZKz/LWGq/y1hqv8tYar/LWGq/y1hqv8tYar/LWGq/y1hqv8tYar/LWGq/y1hqv8tYar/LWGq/y1h + qv8tYar/LWGq/y1hqv8tYar/LWGq/y1hqv8tYar/LWGq/y1hqp8tYaogAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///8A////AP// + /wD///8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAALWGqMC1hqu8tYar/LWGq/y1hqv8tYar/LWGq/y1hqv8tYar/LWGq/y1h + qv8tYar/LWGq/y1hqv8tYar/LWGq/y1hqv8wZKz/OnG1/0N7u/9Nh8T/VZHK/1iUzP9YlMz/WJTM/1iU + zP9YlMz/WJTM/1iUzP9YlMz/WJTM/1iUzP9YlMz/WJTM/1iUzP9YlMz/WJTM/1iUzP9YlMz/WJTM/1iU + zP9YlMz/WJTM/1iUzP9YlMz/WJTM/1iUzP9YlMz/WJTM/1iUzP9YlMz/WJTM/1CKxv9Nh8T/RX69/0N7 + u/86cbX/OG6z/y1hqv8tYar/LWGq/y1hqv8tYar/LWGq/y1hqv8tYar/LWGq/y1hqv8tYar/LWGq/y1h + qv8tYar/LWGq/y1hqv8tYar/LWGq/y1hqv8tYar/LWGq/y1hqv8tYar/LWGq/y1hqv8tYar/LWGq7y1h + qp8tYaogAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAP///wD///8A////AP///wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAALWGqMC1h + qu8tYar/LWGq/y1hqv8tYar/LWGq/y1hqv8tYar/LWGq/y1hqv8tYar/LWGq/y1hqv8tYar/LWGq/y1h + qv8tYar/LWGq/y1hqv8tYar/LWGq/zhus/84brP/Q3u7/0N7u/9Ffr3/TYfE/02HxP9Nh8T/TYfE/02H + xP9Nh8T/TYfE/02HxP9Nh8T/TYfE/02HxP9Nh8T/TYfE/02HxP9Nh8T/SIG//0N7u/9De7v/Q3u7/zhu + s/84brP/NWuw/y1hqv8tYar/LWGq/y1hqv8tYar/LWGq/y1hqv8tYar/LWGq/y1hqv8tYar/LWGq/y1h + qv8tYar/LWGq/y1hqv8tYar/LWGq/y1hqv8tYar/LWGq/y1hqv8tYar/LWGq/y1hqv8tYar/LWGq/y1h + qv8tYar/LWGq/y1hqv8tYar/LWGqzy1hqnAtYaoQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA////AP// + /wD///8A////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAALWGqMC1hqs8tYar/LWGq/y1hqv8tYar/LWGq/y1h + qv8tYar/LWGq/y1hqv8tYar/LWGq/y1hqv8tYar/LWGq/y1hqv8tYar/LWGq/y1hqv8tYar/LWGq/y1h + qv8tYar/LWGq/y1hqv8tYar/LWGq/y1hqv8tYar/LWGq/y1hqv8tYar/LWGq/y1hqv8tYar/LWGq/y1h + qv8tYar/LWGq/y1hqv8tYar/LWGq/y1hqv8tYar/LWGq/y1hqv8tYar/LWGq/y1hqv8tYar/LWGq/y1h + qv8tYar/LWGq/y1hqv8tYar/LWGq/y1hqv8tYar/LWGq/y1hqv8tYar/LWGq/y1hqv8tYar/LWGq/y1h + qv8tYar/LWGq/y1hqv8tYar/LWGq/y1hqv8tYar/LWGq/y1hqv8tYarfLWGqjy1hqjAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///8A////AP///wD///8AAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAC1hqoAtYar/LWGq/y1hqv8tYar/LWGq/y1hqv8tYar/LWGq/y1hqv8tYar/LWGq/y1h + qv8tYar/LWGq/y1hqv8tYar/LWGq/y1hqv8tYar/LWGq/y1hqv8tYar/LWGq/y1hqv8tYar/LWGq/y1h + qv8tYar/LWGq/y1hqv8tYar/LWGq/y1hqv8tYar/LWGq/y1hqv8tYar/LWGq/y1hqv8tYar/LWGq/y1h + qv8tYar/LWGq/y1hqv8tYar/LWGq/y1hqv8tYar/LWGq/y1hqv8tYar/LWGq/y1hqv8tYar/LWGq/y1h + qv8tYar/LWGq/y1hqv8tYar/LWGq/y1hqv8tYar/LWGq/y1hqv8tYar/LWGq/y1hqv8tYar/LWGq/y1h + qr8tYapwLWGqMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP// + /wD///8A////AP///wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAC1hqiAtYaqfLWGq/y1h + qv8tYar/LWGq/y1hqv8tYar/LWGq/y1hqv8tYar/LWGq/y1hqv8tYar/LWGq/y1hqv8tYar/LWGq/y1h + qv8tYar/LWGq/y1hqv8tYar/LWGq/y1hqv8tYar/LWGq/y1hqv8tYar/LWGq/y1hqv8tYar/LWGq/y1h + qv8tYar/LWGq/y1hqv8tYar/LWGq/y1hqv8tYar/LWGq/y1hqv8tYar/LWGq/y1hqv8tYar/LWGq/y1h + qv8tYar/LWGq/y1hqv8tYar/LWGq/y1hqv8tYar/LWGq/y1hqv8tYar/LWGq/y1hqv8tYar/LWGq/y1h + qv8tYar/LWGq/y1hqv8tYarPLWGqjy1hqlAtYaoQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA////AP///wD///8A////AAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAtYaogLWGqny1hqu8tYar/LWGq/y1hqv8tYar/LWGq/y1h + qv8tYar/LWGq/y1hqv8tYar/LWGq/y1hqv8tYar/LWGq/y1hqv8tYar/LWGq/y1hqv8tYar/LWGq/y1h + qv8tYar/LWGq/y1hqv8tYar/LWGq/y1hqv8tYar/LWGq/y1hqv8tYar/LWGq/y1hqv8tYar/LWGq/y1h + qv8tYar/LWGq/y1hqv8tYar/LWGq/y1hqv8tYar/LWGq/y1hqv8tYar/LWGq/y1hqv8tYar/LWGq/y1h + qv8tYar/LWGq/y1hqv8tYar/LWGq/y1hqv8tYarfLWGqry1hqoAtYapAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAD///8A////AP///wD///8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAALWGqEC1hqmAtYaqvLWGq7y1hqv8tYar/LWGq/y1hqv8tYar/LWGq/y1hqv8tYar/LWGq/y1h + qv8tYar/LWGq/y1hqv8tYar/LWGq/y1hqv8tYar/LWGq/y1hqv8tYar/LWGq/y1hqv8tYar/LWGq/y1h + qv8tYar/LWGq/y1hqv8tYar/LWGq/y1hqv8tYar/LWGq/y1hqv8tYar/LWGq/y1hqv8tYar/LWGq/y1h + qv8tYar/LWGq/y1hqv8tYar/LWGq/y1hqv8tYar/LWGq/y1hqv8tYaq/LWGqny1hqoAtYapALWGqEAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP///wD///8A////AP///wAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAALWGqQC1h + qoAtYaqvLWGq3y1hqv8tYar/LWGq/y1hqv8tYar/LWGq/y1hqv8tYar/LWGq/y1hqv8tYar/LWGq/y1h + qv8tYar/LWGq/y1hqv8tYar/LWGq/y1hqv8tYar/LWGq/y1hqv8tYar/LWGq/y1hqv8tYar/LWGq/y1h + qv8tYar/LWGq/y1hqv8tYar/LWGq/y1hqv8tYar/LWGq/y1hqv8tYar/LWGqzy1hqr8tYaqALWGqgC1h + qkAtYaogAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAA////AP///wD///8A////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAC1hqkAtYapgLWGqgC1h + qp8tYaq/LWGqvy1hqu8tYar/LWGq/y1hqv8tYar/LWGq/y1hqv8tYar/LWGq/y1hqv8tYar/LWGq/y1h + qv8tYar/LWGq/y1hqv8tYar/LWGq/y1hqv8tYar/LWGq7y1hqr8tYaq/LWGqvy1hqoAtYaqALWGqcC1h + qkAtYapAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///8A////AP///wD///8AAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAC1h + qjAtYapALWGqQC1hqkAtYapALWGqQC1hqkAtYapALWGqQC1hqkAtYapALWGqQAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ////////////////////////////////4AAAAAAf/AAAAAAAAAAAAAAAAAAAH/wAAAAAAAAAAAAAAAAA + AB/8AAAAAAAAAAAAAAAAAAAP/AAAAAAAAAAAAAAAAAAAD/wAAAAAAAAAAAAAAAAAAA/4AAAAAAAAAAAA + AAAAAAAP+AAAAAAAAAAAAAAAAAAAD/gAAAAAAAAAAAAAAAAAAA/4AAAAAAAAAAAAAAAAAAAP8AAAAAAA + AAAAAAAAAAAAB/AAAAAAAAAAAAAAAAAAAAfwAAAAAAAAAAAAAAAAAAAH8AAAAAAAAAAAAAAAAAAAB/AA + AAAAAAAAAAAAAAAAAAfwAAAAAAAAAAAAAAAAAAAH4AAAAAAAAAAAAAAAAAAAB+AAAAAAAAAAAAAAAAAA + AAfgAAAAAAAAAAAAAAAAAAAH4AAAAAAAAAAAAAAAAAAAA+AAAAAAAAAAAAAAAAAAAAPgAAAAAAAAAAAA + AAAAAAAD4AAAAAAAAAAAAAAAAAAAA8AAAAAAAAAAAAAAAAAAAAPAAAAAAAAAAAAAAAAAAAADwAAAAAAA + AAAAAAAAAAAAA8AAAAAAAAAAAAAAAAAAAAPAAAAAAAAAAAAAAAAAAAADwAAAAAAAAAAAAAAAAAAAA8AA + AAAAAAAAAAAAAAAAAAPAAAAAAAAAAAAAAAAAAAADwAAAAAAAAAAAAAAAAAAAA8AAAAAAAAAAAAAAAAAA + AAPAAAAAAAAAAAAAAAAAAAADwAAAAAAAAAAAAAAAAAAAA8AAAAAAAAAAAAAAAAAAAAPAAAAAAAAAAAAA + AAAAAAADwAAAAAAAAAAAAAAAAAAAA8AAAAAAAAAAAAAAAAAAAAPAAAAAAAAAAAAAAAAAAAADwAAAAAAA + AAAAAAAAAAAAA8AAAAAAAAAAAAAAAAAAAAPAAAAAAAAAAAAAAAAAAAADwAAAAAAAAAAAAAAAAAAAB8AA + AAAAAAAAAAAAAAAAAAfAAAAAAAAAAAAAAAAAAAAHwAAAAAAAAAAAAAAAAAAAB8AAAAAAAAAAAAAAAAAA + AAfAAAAAAAAAAAAAAAAAAAAHwAAAAAAAAAAAAAAAAAAAB+AAAAAAAAAAAAAAAAAAAA/gAAAAAAAAAAAA + AAAAAAAP4AAAAAAAAAAAAAAAAAAAD+AAAAAAAAAAAAAAAAAAAB/gAAAAAAAAAAAAAAAAAAAf8AAAAAAA + AAAAAAAAAAAAH/AAAAAAAAAAAAAAAAAAAD/wAAAAAAAAAAAAAAAAAAA/+AAAAAAAAAAAAAAAAAAAP/gA + AAAAAAAAAAAAAAAAAH/8AAAAAAAAAAAAAAAAAAD//AAAAAAAAAAAAAAAAAAA//4AAAAAAAAAAAAAAAAA + Af/+AAAAAAAAAAAAAAAAAAP//wAAAAAAAAAAAAAAAAAH//+AAAAAAAAAAAAAAAAAD///wAAAAAAAAAAA + AAAAAB///+AAAAAAAAAAAAAAAAB////4AAAAAAAAAAAAAAAH/////AAAAAAAAAAAAAAD//////+AAAAA + AAAAAAAAA////////AAAAAAAAAAAAAP////////gAAAAAAAAAAAD////////4AAAAAAAAAAAA/////// + /+AAAAAAAAAAAAP////////gAAAAAAAAAAAD////////4AAAAAAAAAAAA////////+AAAAAAAAAAAAP/ + ///////gAAAAAAAAAAAD////////4AAAAAAAAAAAA+H//////+AAAAAAAAAAAAAAf//////gAAAAAAAA + AAAAAD//////4AAAAAAAAAAAAAAf/////+AAAAAAAAAAAAAAH//////wAAAAAAAAAAAAAA/////wAAAA + AAAAAAAAAAAP////4AAAAAAAAAAAAAAAB////8AAAAAAAAAAAAAAAAf////AAAAAAAAAAAAAAAAH//// + gAAAAAAAAAAAAAAAB////4AAAAAAAAAAAAAAAAf///+AAAAAAAAAAAAAAAAH////AAAAAAAAAAAAAAAA + D////wAAAAAAAAAAAAAAAA////8AAAAAAAAAAAAAAAAP////gAAAAAAAAAAAAAAAH////4AAAAAAAAAA + AAAAAD////+AAAAAAAAAAAAAAAA/////gAAAAAAAAAAAAAAAf////8AAAAAAAAAAAAAAAP/////gAAAA + AAAAAAAAAAP/////4AAAAAAAAAAAAAAH//////AAAAAAAAAAAAAAH//////4AAAAAAAAAAAAAH////// + /AAAAAAAAAAAAAP///////8AAAAAAAAAAAAf////////gAAAAAAAAAAA/////////+AAAAAAAAAAH/// + ///////4AAAAAAAAAf///////////4AAAAAAAH/////////////8AAAAAH////////////////8AD/// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////////////////////////////////////////////////////ygAAAAwAAAAYAAAAAEA + IAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AMzMzCnMzMxezMzMWczMzFnMzMxZzMzMWczMzFjMzMxfzMzMcszMzHHMzMxxzMzMcczM + zHHMzMxwzMzMc8zMzIbMzMyIzMzMiMzMzIjMzMyIzMzMiMzMzIjMzMybzMzMoczMzKDMzMygzMzMoMzM + zKDMzMyfzMzMrMzMzLXMzMy0zMzMtMzMzLTMzMy0zMzMs8zMzLvMzMzIzMzMx8zMzMfMzMzHzMzMx8zM + zMnMzMzBzMzMGv///wD///8A////AMzMzJ7MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zM + zP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zM + zP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zM + zP/MzMz/zMzM/8zMzP/MzMz/zMzMOP///wD///8AzMzMA8zMzM/MzMz/zMzM/8zMzP/MzMz/y8vL/8vL + y//Ly8v/y8vL/8rKyv/Kysr/ysrK/8rKyv/Kysr/ysrK/8rKyv/Kysr/ysrK/8rKyv/Kysr/ysrK/8rK + yv/Kysr/ysrK/8nJyf/Jycn/ycnJ/8nJyf/Jycn/ycnJ/8nJyf/Jycn/ycnJ/8nJyf/Jycn/ycnJ/8nJ + yf/Jycn/ycnJ/8rKyv/MzMz/zMzM/8zMzP/MzMz/zMzMXv///wD///8AzMzMH8zMzPTMzMz/zMzM/8zM + zP/Nzc3/09PT/9PT0//T09P/1dXV/9bW1v/W1tb/1tbW/9bW1v/W1tb/1tbW/9bW1v/Y2Nj/2dnZ/9nZ + 2f/Z2dn/2dnZ/9nZ2f/Z2dn/2dnZ/93d3f/e3t7/3t7e/97e3v/e3t7/3t7e/97e3v/f39//4+Pj/+Pj + 4//j4+P/4+Pj/+Pj4//j4+P/5OTk/9zc3P/Ly8v/zMzM/8zMzP/MzMz/zMzMf8zMzAr///8AzMzMR8zM + zP/MzMz/zMzM/8nJyf/g4OD//v7+//z8/P/8/Pz//v7+//////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////b29v/Nzc3/y8vL/8zMzP/MzMz/zMzMnszM + zCDMzMwFzMzMdMzMzP/MzMz/zMzM/8rKyv/t7e3///////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////z8/P/Q0ND/y8vL/8zM + zP/MzMz/zMzMuczMzDfMzMwdzMzMmczMzP/MzMz/y8vL/83Nzf/39/f///////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////7+ + /v/W1tb/ysrK/8zMzP/MzMz/zMzM08zMzEzMzMw7zMzMv8zMzP/MzMz/y8vL/9LS0v/9/f3///////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ///////////////////b29v/ycnJ/8zMzP/MzMz/zMzM4MzMzF/MzMxVzMzM28zMzP/MzMz/ysrK/9nZ + 2f////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ///////////////////////////////////g4OD/ycnJ/8zMzP/MzMz/zMzM68zMzHTMzMxyzMzM6szM + zP/MzMz/ycnJ/+Dg4P////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ///////////////////////////////////////////////////l5eX/ycnJ/8zMzP/MzMz/zMzM8czM + zIDMzMyKzMzM9szMzP/MzMz/ycnJ/+fn5/////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ///////////////////////////////////////////////////////////////////p6en/ycnJ/8zM + zP/MzMz/zMzM+MzMzI7MzMyazMzM/szMzP/MzMz/ysrK/+zs7P////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ///p6en/ycnJ/8zMzP/MzMz/zMzM/szMzJnMzMyuzMzM/8zMzP/MzMz/ysrK/+/v7/////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ///////////////////p6en/ycnJ/8zMzP/MzMz/zMzM/szMzJnMzMyvzMzM/8zMzP/MzMz/ysrK//Ly + 8v////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ///////////////////////////////////p6en/ycnJ/8zMzP/MzMz/zMzM+MzMzI7MzMyvzMzM/8zM + zP/MzMz/ysrK//Ly8v////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ///////////////////////////////////////////////////n5+f/ycnJ/8zMzP/MzMz/zMzM8MzM + zH/MzMyuzMzM/8zMzP/MzMz/ysrK/+/v7/////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ///////////////////////////////////////////////////////////////////i4uL/ycnJ/8zM + zP/MzMz/zMzM58zMzG3MzMybzMzM/8zMzP/MzMz/ycnJ/+rq6v////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ///b29v/ycnJ/8zMzP/MzMz/zMzM2MzMzFHMzMyFzMzM9MzMzP/MzMz/ycnJ/+Li4v////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////39/f/S0tL/y8vL/8zMzP/MzMz/zMzMtszMzDTMzMxezMzM4MzMzP/MzMz/ysrK/9fX + 1/////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////Ly8v/Ly8v/zMzM/8zMzP/MzMz/zMzMiMzMzBDMzMw4zMzMu8zM + zP/MzMz/y8vL/8zMzP/19fX///////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////////////////////////////////////97e3v/Jycn/zMzM/8zMzP/MzMz/zMzMTP// + /wDMzMwMzMzMfczMzP/MzMz/zMzM/8nJyf/f39////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ////////////////////////////////////////////////////////8fHx/8zMzP/Ly8v/zMzM/8zM + zP/MzMzizMzMEf///wD///8AzMzMMczMzPvMzMz/zMzM/8zMzP/Ly8v/7Ozs//////////////////// + //////////////////////////////////////////////////////////////////////////////// + ///////////////////////////////////////////////////////////////////y8vL/z8/P/8vL + y//MzMz/zMzM/8zMzP/MzMyP////AP///wD///8A////AMzMzLLMzMz/zMzM/8zMzP/Ly8v/zMzM/+Xl + 5f/7+/v///////////////////////////////////////////////////////////////////////// + ///////////////////////////////////+/v7/+/v7//n5+f/39/f/8/Pz/+/v7//q6ur/5+fn/9zc + 3P/MzMz/y8vL/8zMzP/MzMz/zMzM/8zMzOrMzMwi////AP///wD///8A////AMzMzDXMzMz2zMzM/8zM + zP/MzMz/y8vL/8nJyf/Q0ND/2tra/+Hh4f/k5OT/5+fn/+fn5//r6+v/7Ozs/+zs7P/s7Oz/7Ozs/+vr + 6//n5+f/5+fn/+bm5v/j4+P/4uLi/97e3v/c3Nz/2dnZ/9fX1//U1NT/0tLS/8/Pz//MzMz/y8vL/8rK + yv/Kysr/ycnJ/8nJyf/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzF7///8A////AP///wD///8A////AP// + /wDMzMxizMzM/szMzP/MzMz/zMzM/8zMzP/Ly8v/ycnJ/8nJyf/Jycn/ycnJ/8nJyf/Jycn/ycnJ/8nJ + yf/Jycn/ycnJ/8nJyf/Jycn/ycnJ/8nJyf/Jycn/ycnJ/8nJyf/Jycn/ysrK/8rKyv/Lysr/y8vL/8vL + y//MzMz/zczM/8/NzP/Qz83/0tDN/83NzP/MzMz/zMzM/8zMzP/MzMzszMzMXf///wD///8A////AP// + /wD///8A////AP///wD///8AzMzMT8zMzN3MzMz/zMzM/8zMzP/MzMz/0c/N/9HPzf/Qz83/zs3M/87N + zP/Ozcz/zs3M/87NzP/Ozcz/z87M/8/OzP/Pzsz/0M7M/9HOzP/Rzsz/0s/M/9LPzP/Tz8z/08/M/9LP + zP/Sz8z/0c/M/9HOzP/Ozcz/ycvM/8HFyv+5v8j/sLnG+MvLzL3Pzs2fzMzMkMzMzGrMzMwa////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AMzMzA7MzMxXzMzMlMzMzK/R0M3BsrvH+LO8 + xv+3wMn/wcfM/8TIzP/EyMz/xMjM/8TIzP/FyMz/wMbM/7rEzP+7xMz/uMPM/7PAzP+xv8z/q7vM/6e5 + zP+ht8z/mbPM/5OwzP+Krcz/g6nM/3mkzP9yocz/a53M/0V1s/8yY6r/J1yp42SFtg/Qz80A1dLOANPR + zgDR0M0A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8AMmSrzy5hqf9Bdrf/YJnO/2CYzP9gmMz/YJjM/2CYzP9gmMz/XpfM/1yWzP9clsz/W5XM/1iU + zP9XlMz/VJLM/1ORzP9RkMz/UZHM/1GRzP9Skcz/UpHM/1ORzP9Uksz/VZLM/zJpsP8pXaj/LGCq5CJZ + qBFjhrYAqbXEAKGwwwCtuMUA////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8AJ12pvildqP83brP/WJXN/1aTzP9Wk8z/VpPM/1aTzP9Wk8z/VpPM/1aT + zP9Wk8z/V5PM/1eTzP9Xk8z/V5TM/1eUzP9YlMz/WJTM/1iUzP9YlMz/WJTM/1iUzP9YlMz/WpbN/zhu + s/8rX6j/LWGq7S1hqhwnXakAJ12pACZcqQAvYqsA////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8ALWGqqytfqf83bLL/WZXN/1iUzP9YlMz/WJTM/1iU + zP9YlMz/WJTM/1iUzP9YlMz/WJTM/1iUzP9YlMz/WJTM/1iUzP9YlMz/WJTM/1iUzP9YlMz/WJTM/1iU + zP9YlMz/WpbN/zhus/8rX6j/LWGq8y1hqiItYaoALWGqMC1hqh4sYKoA////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8ALWGqmCxfqf80arD/V5PL/1iV + zP9YlMz/WJTM/1iUzP9YlMz/WJTM/1iUzP9YlMz/WJTM/1iUzP9YlMz/WJTM/1iUzP9YlMz/WJTM/1iU + zP9YlMz/WJTM/1iUzP9YlMz/WpbO/ztytf8rXqj/LWGq/y1hqtAtYarWLWGq/y1hqvQtYapn////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8ALWGqAS1hqh0tYaoXLWGqjyxg + qf8yZ67/VZHK/1mVzf9YlMz/WJTM/1iUzP9YlMz/WJTM/1iUzP9YlMz/WJTM/1iUzP9YlMz/WJTM/1iU + zP9YlMz/WJTM/1iUzP9YlMz/WJTM/1iUzP9YlMz/WpbO/ztytv8rXqj/LWGq/y1hqv8tYar/LWGq/y1h + qv8tYar5LWGqNv///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8ALWGqjC1h + qvotYar6LWGq8Cxgqf8wZKz/VI/J/1mVzf9YlMz/WJTM/1iUzP9YlMz/WJTM/1iUzP9YlMz/WJTM/1iU + zP9YlMz/WJTM/1iUzP9YlMz/WJTM/1iUzP9YlMz/WJTM/1iUzP9YlMz/WpbO/z92uP8pXKb/LGCp/y1h + qv8tYar/LWGq/y1hqv8tYar/LWGqj////wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wAtYapZLWGq/y1hqv8tYar/LGCp/yteqP8rXqj/UYzH/1mWzf9YlMz/WJTM/1iUzP9YlMz/WJTM/1iU + zP9YlMz/WJTM/1iUzP9YlMz/WJTM/1iUzP9YlMz/WJTM/1iUzP9YlMz/WJTM/1iUzP9YlMz/WZXM/1WR + yv9De7z/MGWt/ytfqf8tYar/LWGq/y1hqv8tYar/LWGqq////wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wAtYaqnLWGq/y1hqv8sYKr/MWau/ztytf9Cebr/VJDJ/1mVzf9YlMz/WJTM/1iU + zP9YlMz/WJTM/1iUzP9YlMz/WJTM/1iUzP9YlMz/WJTM/1iUzP9YlMz/WJTM/1iUzP9YlMz/WJTM/1iU + zP9YlMz/WJTM/1iVzP9bl87/VpHK/zpwtP8rX6n/LWGq/y1hqv8tYar/LWGqiP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wAtYaqoLWGq/ytfqf84brP/WJTM/1qWzf9bl87/WZXM/1iU + zP9YlMz/WJTM/1iUzP9YlMz/WJTM/1iUzP9YlMz/WJTM/1iUzP9YlMz/WJTM/1iUzP9YlMz/WJTM/1iU + zP9YlMz/WJTM/1iUzP9YlMz/WJTM/1mVzP9als7/XJnP/0J5uv8rXqj/LWGq/y1hqv8tYarzLWGqLv// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wAtYapuLWGq/yxgqf8zZ67/T4nF/1uX + zv9als3/WJTM/1iUzP9YlMz/WJTM/1iUzP9YlMz/WJTM/1iUzP9YlMz/WJTM/1iUzP9YlMz/WJTM/1iU + zP9YlMz/WJTM/1iUzP9Zlcz/WZXN/1qWzf9al87/WpbN/1aRyv9Nh8P/O3K1/y1hqv8tYar/LWGq/y1h + qv8tYapl////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wAtYaoSLWGq2C1h + qv8sYKn/LWGq/z10tv9PicT/V5PM/1qXzv9bl87/WpfO/1qWzf9Zls3/WZbN/1mWzf9Zls3/WZbN/1mW + zf9als3/WpfO/1uXzv9al87/WpfO/1qWzf9Xk8v/U47I/02Hw/9EfLz/O3G1/zJnrv8sYKn/K1+o/y1h + qv8tYar/LWGq6S1hqlktYaoA////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8ALWGqNS1hqugtYar/LWCq/yteqP8tYar/NGqw/z10t/9Gf77/S4XC/0+Kxf9Sjcf/Uo3H/1KN + x/9Sjcf/Uo3H/1GMx/9PicX/TIbC/0iCv/9EfLz/P3a4/zhvs/80aa//L2Os/yxgqf8qXqj/K16o/yxg + qf8tYar/LWGq/y1hqtwtYap/LWGqGC1hqgAtYaoA////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AC1hqictYaq6LWGq/y1hqv8tYar/K1+p/yteqP8qXqj/LF+p/y1h + qv8uY6v/LmOr/y5jq/8uY6v/LmOr/y5jq/8tYar/LF+p/ypeqP8qXqj/K16o/ytfqP8sX6n/LWCq/y1h + qv8tYar/LWGq+C1hqtEtYaqQLWGqRy1hqgotYaoALWGqAC1hqgAtYaoA////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wAtYaoBLWGqRi1hqqYtYarjLWGq/S1h + qv8tYar/LWGq/y1hqv8sYKr/LGCq/yxgqv8sYKr/LGCq/yxgqv8tYar/LWGq/y1hqv8tYar/LWGq/S1h + qu4tYarWLWGqsC1hqoMtYapULWGqIi1hqgUtYaoALWGqAC1hqgAtYaoALWGqAC1hqgAtYaoA////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AC1h + qgAtYaoOLWGqMi1hqlgtYap7LWGqky1hqqItYaqxLWGqtS1hqrQtYaq1LWGqqi1hqp8tYaqRLWGqfS1h + qmYtYapJLWGqMi1hqhotYaoDLWGqAC1hqgAtYaoALWGqAC1hqgAtYaoALWGqAC1hqgAtYaoALWGqAC1h + qgAtYaoA////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///////8AAP///////wAA////////AADAAAAAAAEAAMAAAAAAAQAAgAAAAAABAACAAAAAAAAAAIAA + AAAAAAABAAAAAAAAAAMAAAAAAAAADwAAAAAAAAAPAAAAAAAAAAMAAAAAAAAAAwAAAAAAAAAPAAAAAAAA + Af8AAAAAAAD//wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMwAAAAAAAAAzAAA + AAAAATAGAAAAAAABAACAAAAAAAMAAMAAAAAAAwAAwAAAAAAHP/7gAAAAAA////AAAAAAH///+AAAAAH/ + AA//wAAAAf8AAP/AAAAB/wAA/8AAAAE/397/wAAAAB8AAP4AAAAAD////gAAAAAPDwD8AAAAAA////wA + AAAAD4cA/AAAAAAP///8AAAAAB9qAPwAAAAAP////gAAAAB/AAD/AAAAAf////+AAAAP/y8A//AAAf// + ///////////pGf///////////////////20oAAAAIAAAAEAAAAABACAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAA////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wDMzMw0zMzMlszMzI/MzMyPzMzMjszMzJfMzMygzMzMnszM + zJ7MzMydzMzMqczMzK/MzMyvy8zLr8zMy67MzMy7yszMv8zMzL3MzMy9zMzMvszMzMjMzMzJzMzMyczM + zMjMzMzMzMzM1czMzNXMzMzVzMzM38zMzJvMzMwB////AMzMzIjMzMz/zMzM/8rKyv/Jycn/ycnJ/8nJ + yf/Jycn/ycnJ/8nJyf/JyMn/ycjI/8nJyf/Jx8n/ycnJ/8nHyf/Jycn/ycnJ/8nIyP/Jycf/ycnJ/8nJ + yf/Jycn/ycnJ/8nJyf/Jycn/ycnJ/8zMzP/MzMz/zMzM1szMzBXMzMwDzMzMu8zMzP/Ly8v/1tbW/+Dg + 4P/f39//4uLi/+Li4v/i4uL/4uLi/+Li4v/l5eX/5ubm/+bm5v/m5ub/5ubo/+jo6P/p6er/6enp/+np + 6f/p6en/6urq/+zs7P/s7Oz/7Ozs/+3t7f/m5ub/zMzM/8zMzP/MzMzvzMzMLczMzB7MzMzhzMzM/8rK + yv/x8fH///////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////v7+//Q0ND/y8vL/8zMzP3MzMxIzMzMPszM + zPjLy8v/z8/P//n5+f////////////////////////////////////////////////////////////// + /////////////////////////////////////////////////////////v7+/9TU1P/Kysr/zMzM/8zM + zF/MzMxezMzM/8rKyv/V1dX//v7+//////////////////////////////////////////////////// + ////////////////////////////////////////////////////////////////////////2dnZ/8rK + yv/MzMz/zMzMdMzMzHrMzMz/ycnJ/9vb2/////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ///e3t7/ycnJ/8zMzP/MzMyCzMzMkMzMzP/Jycn/4eDh//////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////+Dg4P/Jycn/zMzM/8zMzI/MzMyfzMzM/8nJyf/k5OT///////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ////////////////////////4ODg/8nJyf/MzMz/zMzMj8zMzJ/MzMz/ycnJ/+bm5v////////////// + //////////////////////////////////////////////////////////////////////////////// + ///////////////////////////////////f39//ycnJ/8zMzP/MzMyCzMzMnMzMzP/Jycn/4+Pj//// + //////////////////////////////////////////////////////////////////////////////// + /////////////////////////////////////////////9ra2v/Kysr/zMzM/8zMzG7MzMyGzMzM/8nJ + yf/c3Nz///////////////////////////////////////////////////////////////////////// + ///////////////////////////////////////////////////9/f3/09PT/8vLy//MzMz/zMzMUMzM + zGPMzMz/y8vL/9LS0v/9/f3///////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////Ly8v/Lysv/zMzM/8zM + zOfMzMwmzMzMMszMzO/MzMz/ysnK/+3t7f////////////////////////////////////////////// + ////////////////////////////////////////////////////////////////////////29vb/8rK + yv/MzMz/zMzMrv///wDMzMwBzMzMsMzMzP/Lysv/0NDQ//X29f////////////////////////////// + ///////////////////////////////////////////////////////////////////9/f3/+fv6/9/f + 3//Kysr/zMzM/8zMzP/LzMxP////AP///wDMzMw+zMzM/MzMzP/Kycr/zc3N/+Dg4P/q6uv/7u7u/+/w + 8P/y8vL/8/Ly//Ty8v/x8fH/7+/v/+7u7//s7Oz/6uvq/+fn5//k5OT/4ODg/9vc3P/Y2Nj/1tPV/9LR + 0f/LzMz/ysrI/8zMzP/MzMz/zMzMqP///wD///8A////AP///wDMzMxqzMzM/szMzP/Ly8v/ycrJ/83M + yv/NzMr/zMrK/8zLyP/Lysr/y8rK/83Kyv/Ny8n/zcvJ/87Myf/OzMj/zsvJ/8/Myf/TzMn/083G/9LN + yP/U0sv/1tPM/9TRzf/Nzcz5zMzM68zMzJHMzMsL////AP///wD///8A////AP///wDMzMw2zMzMms/O + zcPLy8zetrzI/77Dy//Eycz/xcjM/8bJzP/Hycz/wcXM/8DJzP+6xsz/usLM/7PAzf+xvcz/qbrM/5+2 + zP+Wssz/kLHO/3OUv/9QdrD/cY+5bdTRzRbY1M4O/v7+AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AGuKtzwpXqn/S4G9/2Kbzv9fmMz/X5jM/16YzP9blsz/W5XM/1mVzP9Vksz/VJPM/1KQ + zP9QkMz/To7M/0yOzP9QlND/N3O4/yBVpv8fV6hP/v78AP7+/gD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///4AJFqoLChbp/xAeLr/WZbO/1aTzP9Vk8z/VpPM/1aTzP9Wk8z/V5PM/1eU + zP9XlMz/WJTM/1iUzP9ZlMz/WJTL/16Zz/9Ee7v/Klyn/y1gqmEmXKgEIVmnHf7//wD///8A////AP// + /wD///8A////AP///wD///8A////AP/+/wAtYaoaK16o8j92uP9al87/WJTM/1iUzP9YlMz/WJTM/1iU + zP9YlMz/WJTM/1iUzP9YlMz/WJTM/1iUzP9YlMz/XJnP/0R9vf8qXqf/LmGq5y1hquYtYar7LWGqaP7/ + /wD///8A////AP///wD///8A////AP///wAsYKoZLWGqoi1hqr0qXqj3OnG1/1qXzv9YlMz/WJTM/1iU + zP9YlMz/WJTM/1iUzP9YlMz/WJTM/1iUzP9YlMz/WJTM/1iUzP9al8//R3++/ylcp/8sX6n/LWGq/y1h + qv8tYarnLWGqE////wD///8A////AP///wD///8A////AC1hqpstYar/LF+p/yteqf85cbT/WpbN/1iU + zP9YlMz/WJTM/1iUzP9YlMz/WJTM/1iUzP9YlMz/WJTM/1iUzP9YlMz/WJTM/1iUzP9XlMv/R3++/zJn + rf8sYKn/LWGq/y1hqvgtYaol////AP///wD///8A////AP///wD///8ALWGqwitfqf88crb/Uo7H/1aR + yv9YlMz/WJTM/1iUzP9YlMz/WJTM/1iUzP9YlMz/WJTM/1iUzP9YlMz/WJTM/1iUzP9YlMz/WZXN/1uX + zv9gnNH/SIG//yteqP8tYar/LWGqyC1hqgL///8A////AP///wD///8A////AP///wAtYaqJLF+p/zdt + sv9RjMb/WpfO/1uXzv9als7/WZbN/1mVzf9Zlc3/WZXN/1mVzf9Zl83/WpbO/1qXzv9bl87/WpfO/1mV + zP9UkMn/TYfD/0B3uf8wZaz/LGCq/y1hquQtYaow////AP///wD///8A////AP///wD///8A////AC1h + qhItYarLK1+p/y1gqv85b7P/RX29/02Iw/9RjMb/U4/I/1OOyP9Tjsj/U47I/1GLyP9OiMT/SYPB/0R8 + vP8+dLf/Nmyx/zBlrP8sYKn/K16o/yxgqe0tYaqVLWGqHP///wD///8A////AP///wD///8A////AP// + /wD///8A////AC1hqhItYaqVLWCq8yteqP8qXqj/LF+p/y5iq/8vY6z/L2Os/y9jrP8vY6z/LmKr/yxg + qf8rX6f/Kl6o/yteqP8rX6nzLGCp0C1hqpstYapVLWGqFP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wAtYaoaLWGqWC1hqoktYaqqLWCqvSxgqcgsYKnKLGCpySxg + qb4tYKqxLWGqmy1hqoEtYaphLWGqPS1hqhotYaoD////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP7//wD///8A////AP// + /wD///8A////AP7//gD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP//////////gAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAABgAAAA8AAAAPgAAAP/AAAP/wAAA/8AAAH8AAAA/AA + AAPwAAAD8AAAB/AAAA/4AAA//gAB////////////KAAAABAAAAAgAAAAAQAgAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wDMzMwgzMzMwsrKysTKysrHysrKycrKyszKysrPycrKz8rKytXLy8vVy8vK2MzM + zNvMzMzczMzM4czMzO7MzMxfzMzMT8vLy//n5+f/8fHx//Dw8P/w8PD/8/Ly//Ly8v/y8vL/8/P0//Pz + 8//09PT/9fX1//Ly8v/Pz8//y8vLjcvLynfOzc7/+/r6//////////////////////////////////// + ////////////////////////1dXV/8rKyqXKy8ul09PT//7+/v////////////////////////////// + /////////////////////////////9jX2P/Kysq1ycrJwdbW1v////////////////////////////// + ///////////////////////////////////Y2Nj/ysrKtMnKyrLU1NT///////////////////////// + ////////////////////////////////////////1dXV/8rKyp/Ky8x1y83N//f4+f////////////// + ////////////////////////////////////////9/T0/8zMzP/MzMxtzMzLKMnKyvjW1tf/9vby//n5 + 9//7+/v/+/z5//37+P/7+/n/+fr2//f08v/z8+//7+/p/9TT0//Ky8vpyszLGfr7+gDOzcxZ0tDN1cPF + yPfDxsv/zMnJ/8bKxv/Hx8f/wsPF/7vAxP+zvsj/pLPG/5Chu+nOzMp+1tLOL////wD+/P0A/v38AP39 + +QA8aaqNR4TA/12Zzv9Xk8v/U5HM/0yPzf9Njc3/UZPN/0B/w/8aUKO/6u72APL1+gD///8A+Pj6APH0 + +QAsYqoiHlajsUF7u/9als7/VZPL/1STzP9Uksz/V5TL/1qXzv9PisX/J12o+iNZqPcgVKVq////APr9 + /gD6+v0AK1+pxjpwtP9Ti8f/XJnP/1mVzv9al8//W5bN/1yWzv9gm8//X5rQ/0qEwf8sYKr/KV6nh/// + /wD+/f4A/fz/ACxgqY06cLT/TYbD/1OOyv9YkMz/VZPL/1WQyf9SjMb/S4TB/0F4uv82bLL9LWGqsCtf + qQ////8A////AP///wAtYaoELF+pZitfqbYuYqvSMGSs3y5jqt4uYqnTK2GpvSpcqJYqXKZgKl6pJu7z + +AD2+PoA////AP///wD9/v8A/f7/AP37/gD3+/0A9Pb5AOvz+ADo7vcA5ur1AOLq8wDl7fIA7vH4APn6 + /QD///8A////AP///wD//2D7AAAAAAAAVYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAQAA4AeAAcAB + 4AfAAcABwAHAAcAHwAH//wAE + + + \ No newline at end of file diff --git a/SOLVER/ShapesBBox2Regions/ShapesBBox2Regions.csproj b/SOLVER/ShapesBBox2Regions/ShapesBBox2Regions.csproj new file mode 100644 index 0000000..fc0e090 --- /dev/null +++ b/SOLVER/ShapesBBox2Regions/ShapesBBox2Regions.csproj @@ -0,0 +1,98 @@ + + + Debug + AnyCPU + 8.0.50727 + 2.0 + {5FE98417-EDFD-4343-8E0B-849E51628360} + WinExe + Properties + ShapesBBox2Regions + ShapesBBox2Regions + Toast.ico + + + true + full + false + ..\..\READY\TOOLS\ + DEBUG;TRACE + prompt + 4 + + + pdbonly + true + ..\..\READY\TOOLS\ + TRACE + prompt + 4 + + + + False + ..\..\READY\MAIN_DLLs\dkxce.Route.Classes.dll + + + + + + + + + False + ..\..\READY\MAIN_DLLs\XMLSaved.dll + + + + + + + Form + + + Form + + + SBB2RForm.cs + + + + + ResXFileCodeGenerator + Resources.Designer.cs + Designer + + + Designer + SBB2RForm.cs + + + True + Resources.resx + True + + + SettingsSingleFileGenerator + Settings.Designer.cs + + + True + Settings.settings + True + + + + + + + + + + \ No newline at end of file diff --git a/SOLVER/ShapesBBox2Regions/SimpleShapeWriter.cs b/SOLVER/ShapesBBox2Regions/SimpleShapeWriter.cs new file mode 100644 index 0000000..913be16 --- /dev/null +++ b/SOLVER/ShapesBBox2Regions/SimpleShapeWriter.cs @@ -0,0 +1,933 @@ +using System; +using System.Drawing; +using System.IO; +using System.Collections.Generic; +using System.Text; +using System.Xml; +using System.Xml.Serialization; + +namespace ShapesBBox2Regions +{ + public class SimpleSHPWriter: FileStream + { + private MyBitConverter bcle = new MyBitConverter(true); + private MyBitConverter bcbe = new MyBitConverter(false); + + private double MinX = double.MaxValue; + private double MinY = double.MaxValue; + private double MaxX = double.MinValue; + private double MaxY = double.MinValue; + + private int shape_type = 5; // 1 - point; 3 - line; 5 - area + private int objects_recorded = 0; + + private SimpleSHPWriter(string fileName, int shape_type) + : base(fileName, FileMode.Create, FileAccess.ReadWrite) + { + this.shape_type = shape_type; + WriteHeader(); + } + + public static SimpleSHPWriter CreatePointsFile(string fileName) { return new SimpleSHPWriter(fileName, 1); } + public static SimpleSHPWriter CreateLinesFile(string fileName) { return new SimpleSHPWriter(fileName, 3); } + public static SimpleSHPWriter CreateAreasFile(string fileName) { return new SimpleSHPWriter(fileName, 5); } + + public override void Close() + { + if (objects_recorded > 0) WriteBounds(); + WriteFileLength(); + base.Close(); + } + + private void WriteHeader() + { + this.Position = 0; + this.Write(bcbe.GetBytes((int)9994), 0, 4); // File Code + this.Write(new byte[20], 0 , 20); // Not used + this.Write(bcbe.GetBytes((int)0), 0, 4); // File_Length / 2 + this.Write(bcle.GetBytes((int)1000), 0, 4); // Version 1000 + this.Write(bcle.GetBytes((int)shape_type), 0, 4); // Shape Type + this.Write(bcle.GetBytes((double)-180), 0, 8); // min x + this.Write(bcle.GetBytes((double)-90), 0, 8); // min y + this.Write(bcle.GetBytes((double)180), 0, 8); // max x + this.Write(bcle.GetBytes((double)90), 0, 8); // max y + this.Write(new byte[32], 0, 32); // end of header + } + + private void WriteFileLength() + { + long pos = this.Position; + this.Position = 24; + this.Write(bcbe.GetBytes((int)(this.Length / 2)), 0, 4); + this.Position = pos; + } + + private void WriteBounds() + { + long pos = this.Position; + this.Position = 36; + this.Write(bcle.GetBytes((double)MinX), 0, 8); // min x + this.Write(bcle.GetBytes((double)MinY), 0, 8); // min y + this.Write(bcle.GetBytes((double)MaxX), 0, 8); // max x + this.Write(bcle.GetBytes((double)MaxY), 0, 8); // max y + this.Position = pos; + } + + public void WritePoint(double x, double y) + { + if (shape_type != 1) + throw new Exception("Shape file is not Point"); + + objects_recorded++; + + this.Write(bcbe.GetBytes((int)objects_recorded), 0, 4); // record number + this.Write(bcbe.GetBytes((int)10), 0, 4); // content length / 2 + + this.Write(bcle.GetBytes((int)1), 0, 4); // shape type + this.Write(bcle.GetBytes(x), 0, 8); // x + this.Write(bcle.GetBytes(y), 0, 8); // y + + if (x < MinX) MinX = x; + if (y < MinY) MinY = y; + if (x > MaxX) MaxX = x; + if (y > MaxY) MaxY = y; + } + + public void WriteSingleLine(PointF[] line) + { + if (shape_type != 3) + throw new Exception("Shape file is not Line"); + + objects_recorded++; + + this.Write(bcbe.GetBytes((int)objects_recorded), 0, 4); // record number + this.Write(bcbe.GetBytes((int)((48 + line.Length * 2 * 8) / 2)), 0, 4); // content length / 2 + + this.Write(bcle.GetBytes((int)3), 0, 4); // shape type + double[] bounds = GetBounds(line); // bounds + this.Write(bcle.GetBytes((double)bounds[0]), 0, 8); // min x + this.Write(bcle.GetBytes((double)bounds[1]), 0, 8); // min y + this.Write(bcle.GetBytes((double)bounds[2]), 0, 8); // max x + this.Write(bcle.GetBytes((double)bounds[3]), 0, 8); // max y + this.Write(bcle.GetBytes((int)1), 0, 4); // number of parts + this.Write(bcle.GetBytes((int)line.Length), 0, 4); // number of points + this.Write(bcle.GetBytes((int)0), 0, 4); // Parts starts + for (int i = 0; i < line.Length; i++) // Points + { + this.Write(bcle.GetBytes((double)line[i].X), 0, 8); // x + this.Write(bcle.GetBytes((double)line[i].Y), 0, 8); // y + }; + + if (bounds[0] < MinX) MinX = bounds[0]; + if (bounds[1] < MinY) MinY = bounds[1]; + if (bounds[2] > MaxX) MaxX = bounds[2]; + if (bounds[3] > MaxY) MaxY = bounds[3]; + } + + public void WriteSingleArea(PointF[] area) + { + if (shape_type != 5) + throw new Exception("Shape file is not Area"); + + objects_recorded++; + + this.Write(bcbe.GetBytes((int)objects_recorded), 0, 4); // record number + this.Write(bcbe.GetBytes((int)((48 + area.Length * 2 * 8) / 2)), 0, 4); // content length / 2 + + this.Write(bcle.GetBytes((int)5), 0, 4); // shape type + double[] bounds = GetBounds(area); // bounds + this.Write(bcle.GetBytes((double)bounds[0]), 0, 8); // min x + this.Write(bcle.GetBytes((double)bounds[1]), 0, 8); // min y + this.Write(bcle.GetBytes((double)bounds[2]), 0, 8); // max x + this.Write(bcle.GetBytes((double)bounds[3]), 0, 8); // max y + this.Write(bcle.GetBytes((int)1), 0, 4); // number of parts + this.Write(bcle.GetBytes((int)area.Length), 0, 4); // number of points + this.Write(bcle.GetBytes((int)0), 0, 4); // Parts starts + for (int i = 0; i < area.Length; i++) // Points + { + this.Write(bcle.GetBytes((double)area[i].X), 0, 8); // x + this.Write(bcle.GetBytes((double)area[i].Y), 0, 8); // y + }; + + if (bounds[0] < MinX) MinX = bounds[0]; + if (bounds[1] < MinY) MinY = bounds[1]; + if (bounds[2] > MaxX) MaxX = bounds[2]; + if (bounds[3] > MaxY) MaxY = bounds[3]; + } + + private static double[] GetBounds(PointF[] vector) + { + double[] res = new double[] {double.MaxValue,double.MaxValue,double.MinValue,double.MinValue}; + for (int i = 0; i < vector.Length; i++) + { + if (vector[i].X < res[0]) res[0] = vector[i].X; + if (vector[i].Y < res[1]) res[1] = vector[i].Y; + if (vector[i].X > res[2]) res[2] = vector[i].X; + if (vector[i].Y > res[3]) res[3] = vector[i].Y; + }; + return res; + } + } + + public class MyBitConverter + { + /// + /// Constructor + /// + public MyBitConverter() + { + + } + + /// + /// Constructor + /// + /// Indicates the byte order ("endianess") in which data is stored in this computer architecture. + public MyBitConverter(bool IsLittleEndian) + { + this.isLittleEndian = IsLittleEndian; + } + + /// + /// Indicates the byte order ("endianess") in which data is stored in this computer + /// architecture. + /// + private bool isLittleEndian = true; + + /// + /// Indicates the byte order ("endianess") in which data is stored in this computer + /// architecture. + /// + public bool IsLittleEndian { get { return isLittleEndian; } set { isLittleEndian = value; } } // should default to false, which is what we want for Empire + + /// + /// Converts the specified double-precision floating point number to a 64-bit + /// signed integer. + /// + /// Parameters: + /// value: + /// The number to convert. + /// + /// Returns: + /// A 64-bit signed integer whose value is equivalent to value. + /// + public long DoubleToInt64Bits(double value) { throw new NotImplementedException(); } + /// + /// + /// Returns the specified Boolean value as an array of bytes. + /// + /// Parameters: + /// value: + /// A Boolean value. + /// + /// Returns: + /// An array of bytes with length 1. + /// + public byte[] GetBytes(bool value) + { + if (IsLittleEndian) + { + return System.BitConverter.GetBytes(value); + } + else + { + byte[] res = System.BitConverter.GetBytes(value); + Array.Reverse(res); + return res; + } + } + /// + /// + /// Returns the specified Unicode character value as an array of bytes. + /// + /// Parameters: + /// value: + /// A character to convert. + /// + /// Returns: + /// An array of bytes with length 2. + /// + public byte[] GetBytes(char value) + { + if (IsLittleEndian) + { + return System.BitConverter.GetBytes(value); + } + else + { + byte[] res = System.BitConverter.GetBytes(value); + Array.Reverse(res); + return res; + } + } + /// + /// + /// Returns the specified double-precision floating point value as an array of + /// bytes. + /// + /// Parameters: + /// value: + /// The number to convert. + /// + /// Returns: + /// An array of bytes with length 8. + /// + public byte[] GetBytes(double value) + { + if (IsLittleEndian) + { + return System.BitConverter.GetBytes(value); + } + else + { + byte[] res = System.BitConverter.GetBytes(value); + Array.Reverse(res); + return res; + } + } + /// + /// + /// Returns the specified single-precision floating point value as an array of + /// bytes. + /// + /// Parameters: + /// value: + /// The number to convert. + /// + /// Returns: + /// An array of bytes with length 4. + /// + public byte[] GetBytes(float value) + { + if (IsLittleEndian) + { + return System.BitConverter.GetBytes(value); + } + else + { + byte[] res = System.BitConverter.GetBytes(value); + Array.Reverse(res); + return res; + } + } + /// + /// + /// Returns the specified 32-bit signed integer value as an array of bytes. + /// + /// Parameters: + /// value: + /// The number to convert. + /// + /// Returns: + /// An array of bytes with length 4. + /// + public byte[] GetBytes(int value) + { + if (IsLittleEndian) + { + return System.BitConverter.GetBytes(value); + } + else + { + byte[] res = System.BitConverter.GetBytes(value); + Array.Reverse(res); + return res; + } + } + /// + /// + /// Returns the specified 64-bit signed integer value as an array of bytes. + /// + /// Parameters: + /// value: + /// The number to convert. + /// + /// Returns: + /// An array of bytes with length 8. + /// + public byte[] GetBytes(long value) + { + if (IsLittleEndian) + { + return System.BitConverter.GetBytes(value); + } + else + { + byte[] res = System.BitConverter.GetBytes(value); + Array.Reverse(res); + return res; + } + } + /// + /// + /// Returns the specified 16-bit signed integer value as an array of bytes. + /// + /// Parameters: + /// value: + /// The number to convert. + /// + /// Returns: + /// An array of bytes with length 2. + /// + public byte[] GetBytes(short value) + { + if (IsLittleEndian) + { + return System.BitConverter.GetBytes(value); + } + else + { + byte[] res = System.BitConverter.GetBytes(value); + Array.Reverse(res); + return res; + } + } + /// + /// + /// Returns the specified 32-bit unsigned integer value as an array of bytes. + /// + /// Parameters: + /// value: + /// The number to convert. + /// + /// Returns: + /// An array of bytes with length 4. + /// + public byte[] GetBytes(uint value) + { + if (IsLittleEndian) + { + return System.BitConverter.GetBytes(value); + } + else + { + byte[] res = System.BitConverter.GetBytes(value); + Array.Reverse(res); + return res; + } + } + /// + /// + /// Returns the specified 64-bit unsigned integer value as an array of bytes. + /// + /// Parameters: + /// value: + /// The number to convert. + /// + /// Returns: + /// An array of bytes with length 8. + /// + public byte[] GetBytes(ulong value) + { + if (IsLittleEndian) + { + return System.BitConverter.GetBytes(value); + } + else + { + byte[] res = System.BitConverter.GetBytes(value); + Array.Reverse(res); + return res; + } + } + /// + /// + /// Returns the specified 16-bit unsigned integer value as an array of bytes. + /// + /// Parameters: + /// value: + /// The number to convert. + /// + /// Returns: + /// An array of bytes with length 2. + /// + public byte[] GetBytes(ushort value) + { + if (IsLittleEndian) + { + return System.BitConverter.GetBytes(value); + } + else + { + byte[] res = System.BitConverter.GetBytes(value); + Array.Reverse(res); + return res; + } + } + /// + /// + /// Converts the specified 64-bit signed integer to a double-precision floating + /// point number. + /// + /// Parameters: + /// value: + /// The number to convert. + /// + /// Returns: + /// A double-precision floating point number whose value is equivalent to value. + /// + public double Int64BitsToDouble(long value) { throw new NotImplementedException(); } + /// + /// + /// Returns a Boolean value converted from one byte at a specified position in + /// a byte array. + /// + /// Parameters: + /// value: + /// An array of bytes. + /// + /// startIndex: + /// The starting position within value. + /// + /// Returns: + /// true if the byte at startIndex in value is nonzero; otherwise, false. + /// + /// Exceptions: + /// System.ArgumentNullException: + /// value is null. + /// + /// System.ArgumentOutOfRangeException: + /// startIndex is less than zero or greater than the length of value minus 1. + /// + public bool ToBoolean(byte[] value, int startIndex) { throw new NotImplementedException(); } + /// + /// + /// Returns a Unicode character converted from two bytes at a specified position + /// in a byte array. + /// + /// Parameters: + /// value: + /// An array. + /// + /// startIndex: + /// The starting position within value. + /// + /// Returns: + /// A character formed by two bytes beginning at startIndex. + /// + /// Exceptions: + /// System.ArgumentException: + /// startIndex equals the length of value minus 1. + /// + /// System.ArgumentNullException: + /// value is null. + /// + /// System.ArgumentOutOfRangeException: + /// startIndex is less than zero or greater than the length of value minus 1. + /// + public char ToChar(byte[] value, int startIndex) { throw new NotImplementedException(); } + /// + /// + /// Returns a double-precision floating point number converted from eight bytes + /// at a specified position in a byte array. + /// + /// Parameters: + /// value: + /// An array of bytes. + /// + /// startIndex: + /// The starting position within value. + /// + /// Returns: + /// A double precision floating point number formed by eight bytes beginning + /// at startIndex. + /// + /// Exceptions: + /// System.ArgumentException: + /// startIndex is greater than or equal to the length of value minus 7, and is + /// less than or equal to the length of value minus 1. + /// + /// System.ArgumentNullException: + /// value is null. + /// + /// System.ArgumentOutOfRangeException: + /// startIndex is less than zero or greater than the length of value minus 1. + /// + public double ToDouble(byte[] value, int startIndex) { throw new NotImplementedException(); } + /// + /// + /// Returns a 16-bit signed integer converted from two bytes at a specified position + /// in a byte array. + /// + /// Parameters: + /// value: + /// An array of bytes. + /// + /// startIndex: + /// The starting position within value. + /// + /// Returns: + /// A 16-bit signed integer formed by two bytes beginning at startIndex. + /// + /// Exceptions: + /// System.ArgumentException: + /// startIndex equals the length of value minus 1. + /// + /// System.ArgumentNullException: + /// value is null. + /// + /// System.ArgumentOutOfRangeException: + /// startIndex is less than zero or greater than the length of value minus 1. + /// + public short ToInt16(byte[] value, int startIndex) + { + if (IsLittleEndian) + { + return System.BitConverter.ToInt16(value, startIndex); + } + else + { + byte[] res = (byte[])value.Clone(); + Array.Reverse(res); + return System.BitConverter.ToInt16(res, value.Length - sizeof(Int16) - startIndex); + } + } + /// + /// + /// Returns a 32-bit signed integer converted from four bytes at a specified + /// position in a byte array. + /// + /// Parameters: + /// value: + /// An array of bytes. + /// + /// startIndex: + /// The starting position within value. + /// + /// Returns: + /// A 32-bit signed integer formed by four bytes beginning at startIndex. + /// + /// Exceptions: + /// System.ArgumentException: + /// startIndex is greater than or equal to the length of value minus 3, and is + /// less than or equal to the length of value minus 1. + /// + /// System.ArgumentNullException: + /// value is null. + /// + /// System.ArgumentOutOfRangeException: + /// startIndex is less than zero or greater than the length of value minus 1. + /// + public int ToInt32(byte[] value, int startIndex) + { + if (IsLittleEndian) + { + return System.BitConverter.ToInt32(value, startIndex); + } + else + { + byte[] res = (byte[])value.Clone(); + Array.Reverse(res); + return System.BitConverter.ToInt32(res, value.Length - sizeof(Int32) - startIndex); + } + } + /// + /// + /// Returns a 64-bit signed integer converted from eight bytes at a specified + /// position in a byte array. + /// + /// Parameters: + /// value: + /// An array of bytes. + /// + /// startIndex: + /// The starting position within value. + /// + /// Returns: + /// A 64-bit signed integer formed by eight bytes beginning at startIndex. + /// + /// Exceptions: + /// System.ArgumentException: + /// startIndex is greater than or equal to the length of value minus 7, and is + /// less than or equal to the length of value minus 1. + /// + /// System.ArgumentNullException: + /// value is null. + /// + /// System.ArgumentOutOfRangeException: + /// startIndex is less than zero or greater than the length of value minus 1. + /// + public long ToInt64(byte[] value, int startIndex) + { + if (IsLittleEndian) + { + return System.BitConverter.ToInt64(value, startIndex); + } + else + { + byte[] res = (byte[])value.Clone(); + Array.Reverse(res); + return System.BitConverter.ToInt64(res, value.Length - sizeof(Int64) - startIndex); + } + } + /// + /// + /// Returns a single-precision floating point number converted from four bytes + /// at a specified position in a byte array. + /// + /// Parameters: + /// value: + /// An array of bytes. + /// + /// startIndex: + /// The starting position within value. + /// + /// Returns: + /// A single-precision floating point number formed by four bytes beginning at + /// startIndex. + /// + /// Exceptions: + /// System.ArgumentException: + /// startIndex is greater than or equal to the length of value minus 3, and is + /// less than or equal to the length of value minus 1. + /// + /// System.ArgumentNullException: + /// value is null. + /// + /// System.ArgumentOutOfRangeException: + /// startIndex is less than zero or greater than the length of value minus 1. + /// + public float ToSingle(byte[] value, int startIndex) + { + if (IsLittleEndian) + { + return System.BitConverter.ToSingle(value, startIndex); + } + else + { + byte[] res = (byte[])value.Clone(); + Array.Reverse(res); + return System.BitConverter.ToSingle(res, value.Length - sizeof(Single) - startIndex); + } + } + /// + /// + /// Converts the numeric value of each element of a specified array of bytes + /// to its equivalent hexadecimal string representation. + /// + /// Parameters: + /// value: + /// An array of bytes. + /// + /// Returns: + /// A System.String of hexadecimal pairs separated by hyphens, where each pair + /// represents the corresponding element in value; for example, "7F-2C-4A". + /// + /// Exceptions: + /// System.ArgumentNullException: + /// value is null. + /// + public string ToString(byte[] value) + { + if (IsLittleEndian) + { + return System.BitConverter.ToString(value); + } + else + { + byte[] res = (byte[])value.Clone(); + Array.Reverse(res); + return System.BitConverter.ToString(res); + } + } + /// + /// + /// Converts the numeric value of each element of a specified subarray of bytes + /// to its equivalent hexadecimal string representation. + /// + /// Parameters: + /// value: + /// An array of bytes. + /// + /// startIndex: + /// The starting position within value. + /// + /// Returns: + /// A System.String of hexadecimal pairs separated by hyphens, where each pair + /// represents the corresponding element in a subarray of value; for example, + /// "7F-2C-4A". + /// + /// Exceptions: + /// System.ArgumentNullException: + /// value is null. + /// + /// System.ArgumentOutOfRangeException: + /// startIndex is less than zero or greater than the length of value minus 1. + /// + public string ToString(byte[] value, int startIndex) + { + if (IsLittleEndian) + { + return System.BitConverter.ToString(value, startIndex); + } + else + { + byte[] res = (byte[])value.Clone(); + Array.Reverse(res, startIndex, value.Length - startIndex); + return System.BitConverter.ToString(res, startIndex); + } + } + /// + /// + /// Converts the numeric value of each element of a specified subarray of bytes + /// to its equivalent hexadecimal string representation. + /// + /// Parameters: + /// value: + /// An array of bytes. + /// + /// startIndex: + /// The starting position within value. + /// + /// length: + /// The number of array elements in value to convert. + /// + /// Returns: + /// A System.String of hexadecimal pairs separated by hyphens, where each pair + /// represents the corresponding element in a subarray of value; for example, + /// "7F-2C-4A". + /// + /// Exceptions: + /// System.ArgumentNullException: + /// value is null. + /// + /// System.ArgumentOutOfRangeException: + /// startIndex or length is less than zero. -or- startIndex is greater than + /// zero and is greater than or equal to the length of value. + /// + /// System.ArgumentException: + /// The combination of startIndex and length does not specify a position within + /// value; that is, the startIndex parameter is greater than the length of value + /// minus the length parameter. + /// + public string ToString(byte[] value, int startIndex, int length) + { + if (IsLittleEndian) + { + return System.BitConverter.ToString(value, startIndex, length); + } + else + { + byte[] res = (byte[])value.Clone(); + Array.Reverse(res, startIndex, length); + return System.BitConverter.ToString(res, startIndex, length); + } + } + /// + /// + /// Returns a 16-bit unsigned integer converted from two bytes at a specified + /// position in a byte array. + /// + /// Parameters: + /// value: + /// The array of bytes. + /// + /// startIndex: + /// The starting position within value. + /// + /// Returns: + /// A 16-bit unsigned integer formed by two bytes beginning at startIndex. + /// + /// Exceptions: + /// System.ArgumentException: + /// startIndex equals the length of value minus 1. + /// + /// System.ArgumentNullException: + /// value is null. + /// + /// System.ArgumentOutOfRangeException: + /// startIndex is less than zero or greater than the length of value minus 1. + /// + public ushort ToUInt16(byte[] value, int startIndex) + { + if (IsLittleEndian) + { + return System.BitConverter.ToUInt16(value, startIndex); + } + else + { + byte[] res = (byte[])value.Clone(); + Array.Reverse(res); + return System.BitConverter.ToUInt16(res, value.Length - sizeof(UInt16) - startIndex); + } + } + /// + /// + /// Returns a 32-bit unsigned integer converted from four bytes at a specified + /// position in a byte array. + /// + /// Parameters: + /// value: + /// An array of bytes. + /// + /// startIndex: + /// The starting position within value. + /// + /// Returns: + /// A 32-bit unsigned integer formed by four bytes beginning at startIndex. + /// + /// Exceptions: + /// System.ArgumentException: + /// startIndex is greater than or equal to the length of value minus 3, and is + /// less than or equal to the length of value minus 1. + /// + /// System.ArgumentNullException: + /// value is null. + /// + /// System.ArgumentOutOfRangeException: + /// startIndex is less than zero or greater than the length of value minus 1. + /// + public uint ToUInt32(byte[] value, int startIndex) + { + if (IsLittleEndian) + { + return System.BitConverter.ToUInt32(value, startIndex); + } + else + { + byte[] res = (byte[])value.Clone(); + Array.Reverse(res); + return System.BitConverter.ToUInt32(res, value.Length - sizeof(UInt32) - startIndex); + } + } + /// + /// + /// Returns a 64-bit unsigned integer converted from eight bytes at a specified + /// position in a byte array. + /// + /// Parameters: + /// value: + /// An array of bytes. + /// + /// startIndex: + /// The starting position within value. + /// + /// Returns: + /// A 64-bit unsigned integer formed by the eight bytes beginning at startIndex. + /// + /// Exceptions: + /// System.ArgumentException: + /// startIndex is greater than or equal to the length of value minus 7, and is + /// less than or equal to the length of value minus 1. + /// + /// System.ArgumentNullException: + /// value is null. + /// + /// System.ArgumentOutOfRangeException: + /// startIndex is less than zero or greater than the length of value minus 1. + /// + public ulong ToUInt64(byte[] value, int startIndex) + { + if (IsLittleEndian) + { + return System.BitConverter.ToUInt64(value, startIndex); + } + else + { + byte[] res = (byte[])value.Clone(); + Array.Reverse(res); + return System.BitConverter.ToUInt64(res, value.Length - sizeof(UInt64) - startIndex); + } + } + } +} diff --git a/SOLVER/ShapesBBox2Regions/Toast.ico b/SOLVER/ShapesBBox2Regions/Toast.ico new file mode 100644 index 0000000000000000000000000000000000000000..30d3854f92505daa5fe74a81f34c20d2dfc83ebb GIT binary patch literal 86358 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 CZS#2m literal 0 HcmV?d00001 diff --git a/SOLVER/ShapesBBox2Regions/obj/Debug/ShapesBBox2Regions.exe b/SOLVER/ShapesBBox2Regions/obj/Debug/ShapesBBox2Regions.exe new file mode 100644 index 0000000000000000000000000000000000000000..850850e2ef24e4054c39c00623c7652fcbbe3f30 GIT binary patch literal 282624 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 &{h$U!8RhD~^8ELv(|tete)k&?)VU6} z{#TZ31C?_?o5lwEvFF3K-{bqA8DFmcUwY}KO(THKxKy@%K7UuPu8@9)boBTG@fCpG z{>y&<5BaFP1Los3#(uW_w;bK`T0;NB`(aa7r4RV{^xvQLUR$R!?{{p#OaF{R+OnPl zbL^$!2MoRqu%GS6UY|2gxP3qM+=KpSIXW%pO1>)Nz~I@yM(X}0>RkWzp#Of20koCM zp1|Pfez?u-7J2I;RZr|s)$=?hf)fq}CFuJQHL*LV7Tp6ie`pEC4c_Pc;| z8{k+_IUm-48=&m?UdR4?-$U1fec!F^(+*1Y|Bj6y?@A9^j!pIH%6UqqFHm+sIdH#( zz&1_U5IAOX4{sy z=+C(hP(NI(o52pxD%QCk?xX%W7g*byPAl={e=lp0Wmd4(qwC$d?~DGK7JSkdqz^gR z_FADoFfw-ccpP1OUHhv4iVb{X?4E6OmY1%*aOLQ~Vgp0o2Cjzg(_VTmg)3M8nhjL^ zfr06#H+HSF_@*Rx(fz-bjf6%+rU-8O*qJuV1_{pyxE`S^ETqW&;^4(Z_aoSm_>+(DD zI&*Z#>p4Ho>(0?*DgA9Mesj>jmrWG)ajxA@U3hEBwz9FZ9*X%lWBtG6Wdjxc7mWRE z7cE}xXCQHd-T!;>ih8ZA=)cQ4>RYSbzRyb@o16Y8pZxR9s{iMhR6_3#ewJ7J8A#kv zYX6kQP#mWRlc!$v-!YK7_M)|k^xsjc-h(OYp-8)w9Blk%r~e}^UA0;D0Tulh`n;SI z4aIgkSUmMd|Hv}~z&@0)QEP;osQ)Mbj*nAt-Q4s)<&<9*)W1kBZ`nF_biJ}D-pNaR zzwBTW>A$5!J*)%&?}5##{d3Kulq|}`(^h7A`FK6yhMNBOZoj9Z{}O#;AMAlPP*y*% ziS(Z?RhNqXy~o8;^76oUd&X<1wSV&C!MF5-75#6t{wc>p1s*bK3(L!13ReA!OUir2fI%tTOm3S*O8TYa8lx2iOiah5m1<=)d%NzrNbv0NKH;Qf*$x4{-Z0*`~{} zi_L8hsFYo_oORd6$g@S)bE*4*(m(W@E=R{qOJ9%v57&G*w{`zgIxoie(?2YD$6G1g z6F-3ZZ|RHv>F2P2E3RiH>^*Ljsb}GA$wVw4>kNt^=iimQ#Wkm;XH$-%-(h56^=X>z{39=hM4A6XeRXguFX?)43i$ z!1`ZVf+yjbbNfpB?_1mN=NzEqdwz7C>-Ph!|3y9NpK-Kj_G!hoUJ0x7;QiD)+ZWf} zhU>cR%l!cBpFTjJ*8S<%R{DZ2i~ildOYgNdavz{yx~F{%r2a_{`tJbrHb%MQ0qedw z*#Y}LwsHDG1GMJLHMg?cJ$1$3K;^&C#ddQwbf4ZBy*qgaL;s`= z{`zeLj@`4pa9m{jp?o*xI6-@KbWDE87xnD$`Y~MD-Um$YgRTF8vH>r-Qtkxmfxvc0 z-SihY9y_#nb?EnF?mZaxz_FC`s(z30j;_6~gVp|>vcNa{fwKGoq#q19ev)Xu1Q}dL z**S6?tm|Ow-{Bi|>GQl`Gu8h})SK;m&~@(Ugx8Nt|11l2O9QS3e3IJYVDZX6k!^ei zU{LyY%DlJV$EkmZ7u46WgST)$Sn?f8bYDU}ZvwCnY;oi;6t0^>|4zLji{XG-0Ltdm zVhbx#m#YDyYg{*3+jivK({)qoznCw`s>PNY?SXB^8ltckd{NKTv7_g7aeY1s;i05| zFL^<}w24`^oY}4@cfvsT7o_LV=GDF)59XHhV-&grUKa(9j_2t@Ex}WxR z#rm&=3%`e3kw--y6&tA7K*a_sHc+vFiVak3pkf0R8>rYo#Re)iP_coE4ODEPVgsKN z8$dNaj^BDNsir>>@P~+Yxw@c^8A%> zfk4WYN4Q9S10G&qz@9Oz%y6nGeX7WQi^J24;-?q2m*VibMeWZj4sR&nzsf2M`z@;= zK5SVXI%1e*-LHpJmbG3FpKDn~+|3@`_!Ofx23624FlC2rf>n0V$#AY4mJ;$o;6+ew{7}Bh zKpK+)vj9~_8h^citW*UmGT2xf!1w*O2b=(CErOW{p9shSzE}i{5N-op0Jx|G`~djn zfNP52YJ`6dxDD{@BDfXddjP8dj}^h=2tNQArPmqZ9|1P{JB1%3jj0a*DANyETU_>< zHES##R)B_YEeU`4 z!yl~Yo_nq&{PB-}v|fDiMNfF?rI)N%UwzdR{`99mSuecsg2++l5BKK+VypwM`|EL( z)B5%6tqmJCSRa1)p#bkU)$g5m-mxf8+JeR>?L7?$0v2m{v5|lL;~$%f-EQSlhEF~9 zR5AZ|f#+QSV*#BG|EweH`tG~$cB8YY5Y#;_l~5Z#dfb?eqyAAR)E zrefE#+~=QvUfRFIC$8%OCjyQFJP#25Sx2_Rq4r~YWV>|u#Px3g+C9gmHvkgnwB4b` z|DXT-=VJc<1)e(q-vGR$^Z(jwuMIW!t=C_Fy_o;^!1JYmWq=J1|FoaK|NZZu1pdi0 z`<-7pyz@%_-+Jqrnd97obm2sp0rxusKCt85^qYDdrroSvyVlEgE^~NyuHgNa zV*VMX-}J!;A0XMl{^-+_?)&e*FLRBz-+o)hefE9q>p5p+`HnqnywTSj2W|@1-GJK} z;QDb)&%CrH&VByh|NDQ|%P+rdaXw1=gungmZ{jOaPYw|0#Q)_le~~#Y`!m`wd7^L5 z{^7U3{jKyVl&@13`wjxj^sskHhqUgz-J=dCA>Q@nNY|n5(A?Oo!{Zw8N%=VPeF9~z zeWJ^HYV8x&x~HDN95CM=Z9e{v>lcc7E)FBjp@2UEochZ3Y0xE*{*$2X1#6!K4>ml7 z>(e%@Tiaz3p0U9RKaDWckk;dCx~vBtS#905a+P)SU5~!EW=+?b$kf`p(T=);E69Wu1S0m-UsObXmFO zUDoM8?6USf^HyuhoExm|j=%oZlfQQRFv!aI-MS}@XP$o201pNBuJhZM`za^ixOUR) z>#aS%bcZ#o^GR#g_q)2m30HPm$A3@3ao<(%WjqG&=RES;crV+xx~#)42k;6w+y>$q ze-vQK{F|-qzi^#3an=og8rOPVe9i^88`t0Vu(AB+hm2p``N&4`zugzEzmK$c!Fx_- ze)kFM=5HA~X^^K1Fcy#mTsCpm_41B6zBg&0b)fja zUFV;C>+n9ppV9g2?H=hb2K>*4f0BQ`1M0}j9v>9`r+?{AYy0DWiuQZG&bNNw&2K1G z2k_hqaPyKTbxSzx;>WC3w6}6?q^I<)ut(~3@AltVljr`zVq4S8x9@K(#cwel>3`ocBwy&%M5Kw{_&@122E68|rY}l}}nnqaM>1{o1Pz7ZvkaDh%GQBma~G-`_;~ z>?25@vg%2e{f#4Cwu9q4*IJa5)|ROY_DPdU@mq{X+J)qwcGHaaq#yeAM}&9Qp}+j; z`N%8#0Ma`aGU1hSKls9jM9(a{2<8^^*i#sJM*#jn8cuuKWAW{%$HOu%u}td1DVy!V z3mpF3v^KBogZVy1^1IJDzp-}1``7sXOlfCo40HH@9Xzltmfim&&(46q0<0#q0Y{%4 z1Ngqq{m#A5I`C@`T8Dn)5$o_v9_t2d=hWLl7d&Vk@YR*VC;OPG=B?IF^KY_tnDcYt zcY@t7IC7HmX5a7vuIB<803654=AZgOzU=^a0~~osn_yj7F2^*+O`3C~Coqm_nAYKw zK7!lwx|IyqIBQm4mI>M$Nd zW9bFg=`Xz~$J0`VA?F;CPhE!@as~`xb-l1KoH|W~r`zez1zi*?C(1fl{0;^f$R9AX zUT>t7wci;$rob05ruvK)8|_f3E;0WTBJx^rE5uzp-u)y{i-gfb5R zd=`Lpu{E+L%yrkn`f+WS>!YkE>kBv$a02g%<5?u88O$HoX|?hfqwKR;K5d12S%dv6 z+Vl7-%H}$xl>hSjmj}Cev2E6sWdhjVuXf7k8u(!Uiq4A^l+X4t*gv*wt^Sn%RZjhR zR&B6<+;7nAZz0O&8BO7d`v`;i<9;X4{yA&=D0c>64$CKQu+K-ye&uTStQ_~bw*^cA zurIV$KfYS}$-$BV+qWkBU!ok2Jyn34S^gUE#{TiY?+n}?DP{it2miBZcUsxj8tjL# ze47XM!5@+b%7EwW*iPPf<8RiRZ@y{0_0NCGUhmu3xBCx(V+7B_y!qx^GRC~|H?=p$ z_RDj01rHZJr!K<=Dx~<+)sJJ z`qjN%*7bLHSy$iQWqt3KF6;7NJ!!RFvC^9HrJJoUUUt_R;34sc-#%G~@ug4e1*d=G zj@`FE;d<-9^X|1y`oWXdiP#q*oB%iudm-Ehk+ntaZybp|g~PE2G6QhPrCruRfEiaj zW$n^-rki$p;X|XZWz*~3=Gf~dW{&&Whb>>e8|yz<`$HK=0rdS1*~ci_ z!)TTLj5XE?SZmt{?`WTJ{Li>XGke?PuM2F|`m?bZU3;(p23a2&g|(1>b6tjOQTiHL zU+%fqx6hJ$u{QEEYtrl+Uc%sn_jJzen5;n2vd}(EqMq{I#qB_NC6nX^y#Kjqot#lwZht7U=@G z9yDGrQ@=;tgIt^4J$Jix_@$4@+G8=@zJ$4k$+f{*S3ND?(Q(%3Kz|j$rrC-VEvH$cHaezDK5_|Z1eD4w41l}^}tCd-6(65T%UA+IJLI=Gi@F4`nQ4O zJ{4{0D8NXsa(crdAJ?4dCZq&|L*s4R{=IA8=eBV>#ymW&`#B$U0bW^vj7a z)n+%KuPTSm5KIe})H7-wSSu*=$90;j4y=^i4_J?-39M&K2k^>gqx~8%%;&AAZ_t)5 zxK1$~kOmCqIt9knG~hw_AP)l`13V7E(7t*tZr0-ZJB<5))jYrVJm3WY=cR7~P6QlE zzkp|8=zshZJ_&(73H>_4+i(8|@V51z|NO_|IWz5?(IudJ){{>>X?^g&|B1Z&`iFBu z@OJI$HEXV=?^^Es@DIQL1M}Yof93(s?aTeqk3#-mLq@l7?pp58=Kt!|Yr4){!{;a7 z>-+rrUC0q~C*VBjnhbb&@7ZU6Z@u%*zi~e5T{$Q9!H4f#AARs1?%%iG|KB^-yZ@mc z-hzMly7gPg3vzpXb=R84|9$X31Lt8{afau24?VK#-G?59AC7t8qpKga9((LD>%oT} zvF^G5Ve8iWR#`u}^-=5c<@db)WY_AY&#rrN2h`cv@Zm?shL1k{|LnaBU{uBRKYs4r zcaq&?H;E*Yz=i}#fJ7i5U=hg+2oeY+h$tF2$p%)EY|L(WiJG9Iwmym#EA<6cTd`WD z)mE!kt=32Dt5#dAS|4p~ZLOm9g~jswoHO_CZXO_^{=fRKS(vkP&YYP!Gjrz5nVEYx z^y#O2Xh!Jfi|3sCz`m35yolU4;aQLQmp-|#=He&!E&A4z`(~Z}(7wZKufPBAZ+}Sd zeej9chmSx0gx-CB4~=iUdDMvGuise)--OqVCAhC*|B0U!;q{W&dcHRrbMj4}%t>^2U_=yN98_o*%n@Vo`z5MB%V>hdUw^+`x?IU%)WW} zdt$ui6rJ+@^F@B-|8(y@g3Y{`^Ve*82!1h0jd-qpLnr{AMN#l;+jtlI#Z|w4$t{A)gd#8>)WycY3 z|LbG=5bZYee+s`!!oUARAN~7NdjG>c^bhd-?d^}~jlX|DumAmD^p}6WM{mFTG3`NH z&3x+n)PKW7;IpJ#z6Jo@utu*sy0r(iR~-)k%0I*)zBTy{WO(XV@BExC)@Fp(x^mV(au2Ycz1P21s*~oK|9OuAv6d^RC zB%yJM-_kD9>~w?n9l+Zp{&DP z{FT5r1=@!(=Y(Oo!~Q{)!?=ed!|H~ip9St5#*#cdjO%h`F{eL^`*WPY6SBC~jRIE+ zyj0*Vfa54Fn@cOo=AK`Y&77+RUMz5%z@G}dPvFDZN1-QwBk?~=yy)=54o8a)=MpL; zzC9-wvfZ6il3}OkbGXcZe9Qf4-k{RS8@n@Em~`3%m``Ly!2m_7@QMktL7oa^-QZNq|0jJe?`u7Ro&W zcMG(QVxA&EJ1rjd9mJc2(k_&1Q@*3s(VdubhtVHKJw3`!yTN0pPla=4KIg3wxDn7p zH|4Vq|0th%?iH9jj{|Z0L)G!=m<$`m9!D~Nd+!tEwCh%JXx^wBrQ)Y zX&PNl*P@hBv`EtKMeUhXKuZLBL}ZywYXo~nuz7TWV1E$oIQlwi{xo`1umyCfr0oOd zLK&9{cAli2jCu&|OVzHWTsnpBk+du=PqR@2{amo4fMrq_%|T<+r~+6X?0&Ui3xsnu z9VggH+G)tQmg+SNIM<+WGU;pzX%^G~G}o07Ilx( z^J!6cDWFCbdLiIqfv4)@5D)1kfTs&QTc3#dIr z@!hQgI|XhKc&@+;1zsX>i@<9H-YD=^Ks)`!Iu0e@i_+}$u)t?Qx6m%@7{FJoW5F}s z#;KLI(-E(+v4q{WLh{mB`xMH zSnUV{wmBkz=L@{gu?F#HB>oS9J}0LhC9qN8`A+8fj+4vZ?&OkhlK5>Bzf<7Pg!2yq z_X>Zii*t=~acMIIo*W(R+v$oFj&Duj{<#)V zqllaPVWXQ$6XNBc3`j2NEY@;KUVTQmQf%yW91x^)Mo>~Z=MX6lQiJ)i{5ZIR5 zg}S6r(&n{XYAm?&s6F%(M(H z^RNu&pPezv$BXbcbmt-CfsC1)sc!x`)`-gKM zelUE4%TD`-mr%O)_7QJ;YW-}bHdC%X66LoFw#j+5UIy%31G`hN0`^UXWj&?OgT*S$ zLpIt3Y$3d{dt=xV%*T3m>m+SCJhs0n%=xn33_C^nlIDC%4*{ERV0-m8U{@MgvW2nt z1?zDhF4)`xm2bSI3~8qt*fEyVfvpv+hZb16fGr=*oIP|Ruw-(MQCQHj9=0`yPY!4k z1ubU*+f}5}&a#{f%bPY)rCngT6uxP54BHADv^R!bhgo^yS2A zutz9tn+fbx!OT+DRxxJ}+He8Va^^C&3H^Dgb`))kVOzARR8VcEU8PNa&1DgqKCEc|`rL6*X8ckcNur0t^=`I6%6j(b=3#qjClCIV}=q>}>gS69W zw}H)1zEO`*v`uj~Cf}lW(P8ZhYfIjuucnCxwk`Qb`dXT7U_VN}8uRMv7))}c64Qnu*l(A5TZc*;CFkG6HHv?EfwV7VTSC~O=! z&!?vi>^NW-(n|(*cFF_#H)t1c_ho(fwSF{`IbRR3(UxtrO|UDd#52zFUAou6js6ha*xlL>X;%!pU%QPmE>yDIY5S#iJJrUpUu!$*q8RoY?ML)j4Ew$I zW3qnT%=fZ(2hECMf70%x4KeIZ?I(1Xf&Ic$WBDmPVPMaB7F+J3R}Jiso@JJw(fbDW z7tg7dd&&6?RRi1dpHsbou`Pdqwiy`P@?X$f2FAAhVVZW4%Ez|+5!w*Ly!xZ`SPaY3 zAE%6q6(`&BC+JiIV_W_d-C|&D%b%f-1>@CsmE~C)eTn1~&3cwn1>2l8f6PdFmL{k) z=NqXrwP$Irf$dJ6hqQVF`vhsfrB(xTrOl(?(pm${N}H)YM^_ryD5O0{9~;>Cw2Lgy zQ`)6cyK`#VM*VqOZeZnUo8do24Xi%xYW;U~yMeW&mC^6%F$0UFRRMd>z`9Z2E_%zr zwxGUU^s#~6jIy3Bsy8r)_aB{RB)-71{dkVY6`v%g^-J!7Sz5lelN0;BCupgt8f6>DR_871asPyjO+f9tDq|Jz7DORhtGKL*yb!b<|uzYK> z_Dl>bv8HM%J5?zoeJR!qZCVWb$TCc8j$vdyT)Q%c9cCS&Jz-!)$Tv#+Sg;-{_1$I} ztv$d8?~rqbZ-#ZW_L70k16HW*HL!YMI5yO1mM3U12>=dn<-rZ>`m4+->IjvGsWEf*AIob-DJE zfo>gZL77*A2rj4+0N7+j$udGHfpE-n$uv* zeN$~0Y99-B1^ozQe4SXeY$5eCuV}MKP?zdWH6wferW0v|Xj`jbU?a z*J{(ARHY2}*4e(Rt&L$P+iuhzh+(JMc4&KJ*lODkwOLQ8e2@F;Y5Ud#&67gZ`l5-HOH_IZU5A6h+!7{d)jUT+vPjY_OVv@tjf2`x7oH= zTN%S{vuXMbG3*|jO@AwfyI>6M4#}ynXke=NxwaY)!mG*b&by%-8 zu)V%~YeeskVI|fz`t1hhO26K|L4QuL%``0iHv8H7_?Nkq%~X*76MMIQwP07!-1J}A zd-Qu_*c0~i^ny1O=aTf7>=*0r|5Y$qeJ|C|{TpKsJKs;YI4;$93Z{IiOZB^ZVb3W} zvSp-#^WHZ(-zF!ozTecJGcaC#zp1}!V25XX*Romv*uV-hZUUzNUGj-1aG5?VhRvhP z^uidH>G+oZaSY3KY|%6R!TFR&{cU}`U`oz!>&s(UspH%Ft1;|O%aywSEwjGqj_>Gq zD9pJzW2SbE{)B;DlQEC3(RUfx4y0YH?>4X>A?;dyuYui@QAXG48UK_roxjYe0_Hcc zr;)ZzpC(ujy(}2>b<<}5yBTGUZMuosGOH4>5t;KH-_EB{F(_q+zFROgwmWqHyTU0wze9ijUyNbzo4G~b zp;x}o*g4KyGG}T(&;thclgxSa1HE86r@f{vJbbb17Ja3GJ$CqMz?!G2wE5X(xUcP2 zX|4|re+byO4bFAL*8{uOz-|!i27~ig!`Gsedj#Xryjtg5Up~`hc!}GDIvtZ0k5~7J zTZ~l2qu?Il!O4 z)u2z1)am_r4xFn(_?bu5qDg6HjaSE@wLMEzL+ zP7Bov|AEU)EJ3v{BJ(1VzQ6cJaO(8@Xs&A)pp{+*H0M`;O?X{WRj$8CT-7!F2refV z(CpPBp_B+EG0qa|!>a^!;%TUaR|$ z!ogF5>D=3^05yuoEws8HWy63JE1e_s$QUkX4WNb20L1N45mSPI777FQo@)hTnKDk` z{&eqP=y#w5oqh(0+gq{ueJNJ@rPR`wu2Emg{y44l9cg2Kex}QWlje|E&_y|qF~n3#G^ zf=2aC?cIvRT>ULfV(Nj)v<+Yn6Z5iF9H>_ldHT=6zNrT;;n3Q3Xt}<)_VVnr()BX; zZ|yhAeNzYOvBAyX-u@2@9cC4 zAE&k`{uu{0H5UaW(^shCsO3p|)|66I9o+&|n+9&E=) zAk=8tcrG!Umf*WcJ6+?aiq;A25qKeB6>XOIR)O0E?hv?B;N1cr6!^Hn-vFNEcn$Ds z{Y}92^sc}?+B3sO(jM(k!&W%b1|W#>32Q)Tu9z^t?> zpzvwTBK=W3|1eSK=UrHyqn!-PoTpPDyBsoX%AVs4;F*&}PM16r6VShvy%aoGW;Z)I zewyz*{lwrh|A#ag>T5e@hUaalaNab7^(r+13 za=nyXFJ-=_-)TENDWIR7yC#X_n*?4Y@G^l{3cOa}4FYc#c)P%#0RG%|FG{#9cdhF+ z{SjN5JnfQ=_bu-TO*!JUWU2wBH|y6cnwe=IghGQ3scfY z{tYmDrHGWqPZ$kL8@$Z{Uw>EN`a6j^>a z(v`BEIB${Vu90ae>p(vY^fyQ5r);+T2b|j}!+*8DRrt5lH2>I??MB`c{S#Am81Xg! zX(>A`H~NoFx!ZD|zbfT%q5sD64}VR{gCg^TBJG1B$%9hwgCfs`^pSsW@(bXvPkGI9 zc;1PCv+@EdMYK5YZ|LVh-b%zB-Zn_JDv#T;Hjn#i6W|MUN#1t7NcwO)ZOiKh&#mCm ztg3ZSrmHe`4}VX8pKbxUYdWKC1m|h{zaB`R<#416XE#%CZ#j)BNS2SPQDqZ`lQG-^La+x;I-(3!c-5RH^{s`SLXG(GOxGOj|=|l-a`+gmOb>_g3Xpa^m2jjVSRIY_Ru>8KF@aR-hwQ| zlSYs7>_9Drh!>AO(zDY#Z8Yq#W#;H9h|fiQyS0AwbfmV8p6$ug){LGH`uU*mM6Sgs z=d#huLEi>?p0-2aPXYJPFGjB?4YR2pqq8ad8qed_q$6(j6zL<6U>h~^h=)C|>7U>U z?$`9cc!pViBQ1SFpr%bj?V2_h@J(yMnD;z;6y0{}m=&qh)hyQA#za$#=Q;Ja%=c1@EYFR(74RQp?gadB%sr{oF?W7}xK_B? zl4naR{1r;eD10Wh+QO|XqSC_OfwHXdWx!R1m(QG4zII4W%+(u$iijzh|E21yd32$qUT8a8;@=$0ZP`9{vxUq5m$QsGUPjzfw0i7x?`GlOY#Ws}6LI^vNMz)(K@D;)naP>HcvgfRB%x>I>-4 zj$7)^(_SAJl9j#7nWy~?@jUHqKwjUM;_a`G$IXX!<>WW}cTJHngZvEx>mwYa5CN!r^ZVHQJ9ocSudi>kIyKS$J{|Kq9 zSKF;`jsMigv&NZTM4yh&Ok?zOcc z{Uh;LoAD67hIgyo)0CWnROkT}K)9{SF z4R85m0?wjgfR&UDIG2V4&Zk_!S{eyhkMXwA36u}GoJMO-dQSU~-HCS=|6}*#ZI?zz z2}NjOMhTw(-j-g1hvJ%dgFr9$Y(kst9op`QfU zMAuWN;~{|-jpG&CiB-ie$rlRDw+LO}o0hM+8XYbx z!v~6+kn2@}{t}MQ64)(pn?Q~HxLh1g8yuH7zU8>magF0v$K#GS9UnT@JFjux>b%?e z3#Zd{glnSfV%Jr!TUf;HKINX2T`8}me3Fvp9_gOzKFz(>eU|$s_igT< zy5DlQc)C63dM@?c;Q6uVanG}!7d(IT{K@lI&t8u$wK26Lbwlc=)QeItOT9AnAE`-c z6Vrlem#6(O?U}T9(^9>Md2_u5-V$%EceQtu_ZIJSUZ>CP8|6FJ*Wf$DcdqYezNdV@ z_5H<{o}QmRJ-sU3f?bo1l5qZ#jGdet8j_0lr+lEK!}HC=j%WlZBe56B19cRr`IJFN z;{B2dc!OXP-T^xb`y{@U{n)}+$N_o}&~5z)Fx&cXzyg6s3OvTjJoBvk0GC?v`UoZ4 zssR<}QtK+j_gc>aTx&ZAaH(~>!0!vZ74Q=qmvFef2Di4~vM&al>HZY3Lf~A1H3An4 zJW*gHztTh@H`moJ@EJFklgOh=UTfPR|#A#a6|f^?6|K^{~O@ubk6%7q5nYO zodO?7e+#LPr@sgIRQkt&e@%Be@cyu*-jvGp@=Pvyp1_5fT+R}Kiqi_qhaGiJw~J_f z&V?@C+42Zk@K49s*Z^G^CmrMC0!+p~+|6R#bc9qu4@OGIn584vNI)GssZ78kjFwJg zF;+T8ZaCm1yq}?C^hN?s#pvo7#eBf8(P-qI0jSer8iRN}a_g9%MToDXafq)KxE}9V zXmp0aGoceYZ2;8pHrzzS&l1>;`L5&Ee+uA6)T86c?CF4;P>)WR&@q6Q(y@TwBz~)B zJ8XhZ+XUW2{ASPnGzXNQ18VdjRU`g@z+cdDpgbh-msA7#!+;t+N(&KxMBrn@?-o7| zsMD{|0*!tx@JU(%$`b;gqNSie4XESssAY)%22jVdpeG^zTRBS{U(Gfv0PyBOcWv z7@wE$)Oj}jQNI-MRXk;$O|Rpb@of4tp7PG7H}oLj-}GP9Yp&U@ zf4WXgdMIgI%3o6o-A}n+aXYjJ^>;Jyj+XY2Zp(yXX}{D*;QQlE{LZ_zo8MgIIgaTg zA6)3f;!MDMhse~ImNx+HqJFfObqj7-`_}Nts5lMNOg_7Dg4MT4%P-%1o7(zvH1K@BuX{w z%0tnLaQo_DXEfMJ=C2?`2B@?I@^pYL6hvxy`J~0O!<}sep%(}7^9;=#s|!mh(jH0R z-*2F@=H^fotqQcVSew;VQ#x+N<$X60|gc3fotp5Mev6=ETLp#;#B+OJk%- zg89P|Mpd-1@w8x5)U3FAA-WJEMmvKTg{t;042Alsii&V+D;Q;@<^;xf}rM)GzqN`IizO17IzfvJ_v)$!^NDyO#265YK0-<)QDXU)4Ft@6# zvTAWdUG<4oG`qTLeq}@Tg4qid-VhD8&y^p^fGP!Pr9>NoYavR6S|EFSpe;z9GCmP% zFw!F(fuz#|0!5 z9z!D)Vf@~Pl&{pLF0?)=HOa7G1wWF0-%^HgH5Xt4>cQ=u0+oVJ9)GTrHEaVh!n+&5i6aM%3wIlhpT7lerqS z3#Pd~yu{?-h_G-3Jk`C+G&&}3d(Bu)pdB{56BAhdG7fOloXo-R#Gp&oD|2G}3XWKP zli8q2yZRQ${bHtbBh9$^9kW?&9pUz1dz7biE5WL@M`4#BQ4{Q&q`>foA|0&O)$Opk zEK-n-pCnRkpdI--7)~^Gafz5|TGhs8ZhoK<46O_&sjrDt-W82veTW2B2g{@FVpo~9 z6-Eu;6JaBvlWU_j!S*g5(GCdHn=lc5A8wU2W|9dJXl`a(9_gQgmIb51imuL1G?aPz zv&1NML0I(w8@g!U8YWUxYcSBst3ZssU+uFy!)=wJPAnbaPW(X8075Q~em0LRuhN>& z<~^Zi{%0`tYsn-vV8(cqDy)=RTLbVHS}|j&X=R{&1xy>eD%F+!+mV>gld?ZYze-E{ z_vmDbU;!#$H&6{K3mziR&OoPy&O7KNY_eN;! zTCfu%U2aBTDWftF96>Mh*W!8#VJ&Tto?6n;44Wy7NkyQ&DcBmXvY)~>EbIujvpJ0O z>{nqMD&RS+A~XHKqZ?=bEX9g*9;|xBb9|R|eejR3Jrz5j_|W|xU_pbDVdYuFGD&^$AVcmqOcA(tbboU9#f zq4pDq7YT{*%7Mr-ld??l1lAfn91)(tT7!opOliV|3wEkh6<=m9W-I|~zjzU|g?qKw zNcah@fzB1mi>PDqxTLy@6PA%kBa*anodCum?Xi$16!iLBo z%*S$^h?jv);o|u+r{OgTUJmcOIig%%<+BM{xh!0kN>VtN#b(XOq#7=M&ry@HYvjEc zycv$whgBjL-g2yJLHH^4;R<-0_%c$Ol^a&w9*MFwq>hEF8pIXsP}b2vKwSp!ic=Sa z<*TfbX8;ox2cz&%Iaa-*J&f_|fGfSGy1hOSSyhg@P{qCI=2aA176r;XjokLNv{j4GNA`Z_X6=NDU)23{kkbrWkl8O^lEJlmS#1mpf zO$NgrswQy`(?Ti==Ui+yj+0{ur^s$Pv9Zk2kJyV-1cs-xo=b|4>%)YM3sD| z-y7rMj*cPH!HmrfuC0ilN6jgZBgUxH>D)7zr|`5I&H8xj!?{(@&tFhy^s$<73A0Ph zCu0Kjo+`1K5!3FN2{3Jf>JFu1eC{NA%@G)RnfVp94GR`l%wJen)lj~qzJB2X({N+o zfYU41al?`;!ov30^1E90%b~UvYEFsOktriFbN9TGEfo(!y~MC)gx4fQ<@l)uCuJ3Z z4moDyxM-0w_q^`4M=NA4hG)+Rg(BGBVb3qZ8QHjEvk0b35loZ_Q&b)%#dDY8fMqq7 zsb)$z;Hr)YImk;1#0#$IM>2lR2wi*_yO2RH74r-%&h)KTjz$b`!@v?nUoZ9 z3F`TrW`1B@xGSo*q0v5siRyqA)$!ud!H2CXJ~8o(uz~#n=^C|HNBs_M2^LkHeRR|XJ6DI$7c{3U)EqAb*5de3 zB!s5LX=b&??!A9PeJ2h~+5(-c`X^O{JJxlER;-NnPr_IHbuj9!07X_wDC*AMpv?+ z7>dqVUn+u}nJf;r2G&X}5-)DC$|wzth8nS`L=&1>S6`;IFP~*ena@3b5taJmBaG@>UwBQmD~9kisz>ENHxJ)}pc|o(=?C%SX^W?F?_Oxv?d7 z+}Xw_VVtJUR;$)F1=ZY#D&g2k8EQT@!GW{z8TMY5-r8_P4(ExFwP3}d>Wo$$NAXBVVs-oKKqrp(qUO<7HCxC) z6w19CCIlzef>K#$C*d4 zvBbEVC^6a4DKieh7C#?1xzy;7H}a_4k(o15ZsPC^P+~%bpUvD?N;Jl-f1t)3w3LZ@ zGGpeXhK43}#y3z;nF6D3{`GMjUn^*|tvaq%CFXhOjF}S~8nBsx@*kiFxWL|mOm1k1 zt_(%++x0W2G&CgK5B0lJijCXn)g$Jt`3!kYHf3Ccomgv|g9#>ER;bo+6C81KD-D|? zPBtwFN9(#eItacy08vTfPJ#Q|yaJF!*$FLd!5v4ht4`c`Vm@OCJELl^g!>t6B3jkeMy!*XgO%a7 z60-@gO*jB&ABXL4yd7p|EeN+SiKyF&c;ez;gp75D8#_19-V9p>`5EKW zJcDAc>SD%XNELP&*n)K8LbUfv*e9V*6th{*=Gj|>^*4_0xgl~o4-J>!+c$3+n58q^ zN_AZkoJKY)*NLi);fx>eQ#sBv+8LKpktIG&m2p-DVa0}yh~<-&hB1lE538F`L1cjB zu8TdZSOngi8WVM0AeW=%d=k{0?F^2v|$nv0!55r#YR0j+Jm) zmT)g|21)1Lg4xT8$V(A#sZ7b3%ExqbgY1*>Np<|xE>RLQfzLVP$Cim4WBW`XY&b?%Wcw}bB zbu+PVWZ-Z`8LY%^ww?dzLxf^9_V(h#%Um%EPRFsQks-&NGA{I?>bM9sG`cp}$(ter z!|k7_GDK2aL+;vGX}u6E)!{XA833}nK`@)l+95s_KOa|P z!=`-i6WUtIq`^ax-4iMcEHIo{_IXgMa)u?!6ghf?&FYLsmWI%Xx~|5E{N)TWC>W!K zE$~Iy2Zkv{x2z;qCvK-Ye^Y%YM{%MThI@_H2r4HX5jiPSvoX}l*E}$VZQ*vK1m0X4 z(G@&ljXvZDBh2f}*wq~z`#@*Y%7x0!HhP?=h;k#U}I{D}n zi-Z!64J?`ziOpE9o*ikvZ?D7UDfb5cxCuN)PN@$^vA@8vFdyWug6~_w_m21t)%M^T zrNKO6c(x|g1lxo79P}GnTfY(|v2VK8NK)=B4_-n)CN^EFiye``2uR=cBJliRgQ@oP zl0lhmDTi&MX$d7QhScDc8jlwky9>qKiHl=7bPMC4sl2lbgNz3oa9Yf_>C9rBLvvJJ zBdF6}#+Q-G!15S{a+EEXS_zpc9-GhBby<+-vy^O@Tl51z&yi3i1YRc`mDoL_BZKOg zvL?_O#uVWyW`~=)BJoTij00bvv_O4u$4yv)qd2N+;OHuB%t{vHJR(?9f!nMIX6zCi zTw;qKj4J=91~<{2kup4v+9+xl=)~PAHM60>HVImXtqfoK_u2!;CtgX6L5_Yf71cp` z+!0xeCn4pe6eR~}Ms24Y*RZw(VP)YnVCGi_;VHC6W}ZC;!>7%q7r(A7#unM3m+pYB~PGmGh(YkFGSf4 zUSV(n009gwEkosD<*cYF*l@#b5mifA!FXjz^m2IZ>`P-@EN5(2 z&RqQ|vgV={+&tzGFUi2Gl}FTT{l&>cM^w>;UoG?oq1Q3IQCwt|Sap;i^Q=@iLZ?I= z;fs+BkDogs?sBnUag5hdUMS3yaS=Oy*xv-#vlVA|YDKJzqkQ-egNK|H;5ps^(@0Fj zb5H@pL*ue~W4y$&S7aCin0}%i-r_t;}^Rz71qJ?Sv^I$SVnt}z;ZmHspfb&E@JSe3HlMwpfuvymktrDF^or_)Ny@V zAk;22v$=9Fjl~*|GT?D5V;(9clo2;B7qI5?CXNTwIAZ4>HqMN(paz=j!|!WGsG9SF1S>slS-OfTM51n z@2a63#&yENt^~%FOVI(9VcFkB;5lFeRv(7^a97Ox1MKCnu2WrWFxWx!@N}bb-=Yke zg35R1?!^FfwY96`*MxfqMV6jJ)Vw8-9+nJ}!VV_qRvpYsi>OzxVq{Dcir_jIhu8G0 z5VV16Gs#$D4F=hfiEoZ>HSax?1YEX?v7o)z5p{2bM;x2P6_Up!dOx=wdvdA-mQejU zKipdOd%PXB8jq6mahvgH|Kd6LkK|E1-o=8)iod1QPJX;u0Y?bCC_mor3eXC~X!K|E z`0-;yZoG9uiz<+-9q)xiQNkMPq!40U+DgEHl-vm{L@j{KxenhrbHXeRt)SSI%beVNV*Xqe*fHq?TsnghAx>u0yN& zUk&~>;~&}lTxM=x`dqwi*M@(v%&4uNXwGa%g_ASn;ojxGU5QvbWK%M5OV0#_Tfx1` zJT8yu%JT{h)^M&7-&mR6pJr>`N=AiFo^H3ZNfv*GxdY6?iA;WYTiW zrCqp4m9gqw5{;`sUvSy19o&|3U@K6Lp9-lSIYX$CWx#tZ`F(lkfE(`_g0q$uqdxGY zs+b>d7I7M-S4bZL}La@;n7l7k7rweb*DIyuQ(yqoCUqwnmI@MvCZf?LyLwDM1^$2m1bbq zi+=Aj2gW3(CDy?*PR6@-Q=wOQPcJ=@&!}%?B8}&JpT5nTEAp+tNVlTqLe$M89Rbcd zj8+eyYsA@7nk_X-&#OjxY`Hj3Gg6ySMxun;uxgAW+pRu1vj?W5Cr0C!BA{_xqB-a5 zpas0PM4?G|)1Nh|=wP_~usGVp<4_jcQP!U(^ecnt$Xksx)A}mjFep5G`pl}){p%f|PqP!(M|0)$W9_7o_0W4> zclM**W8&$(+jFGM?sUIl&ruGq5UWsfMpOoG3sEo8gLwvgv{IsS#= zHBEviqwEChMg%@@Ek;1C(QFaelVmD$ML_5AVH*u!(`{PSR(N5Qyb3lzl}T>4;EmvF zMftRZeTBGZ%$lS4l;6yr^5Fh)O^J1&cJD&8i=|bqI2xW=1TygaF9*FH9CZfnM{D>W z71e;BcLwYigk?SOW6XGNvd>wEyu3oSAg{8+QA2Ljm(PB&nq6yAKKu9W=o_9#oTr0( zq?A|sW@2xn73sKnfMCrUDHKAU%{Ob-zw&?@O)?$>%+TFLzSWnMUax6w||CI!#rUYCP_mOJN z0qb6>>W=Gvd_4XuS*lD~;wASUwS$tbT1kgj4q(s!D|x1v@~E;7vUd(bk1&Hvd48}p zD2Jw0W26s4lQZj#JUrjoN8)@mHL;`xm}~4w9YkqZnUw@)X=YwJh!$XlI+i^%p4q%N zPqcUk*_!DU3HklKN>DB1S*rXBwvOzt88fwFe>IyeIEdCyJy7jtIV{0!*xQ7<529~M ziK_S{hbXiLXW8RwK?6OiNf)AyP74$3FIf;CbQUB^C!+3C+dgP`UwB^-mpe@q*25 z=cUk8YTjV*CV~&yu&BCu(}PELq-4s(pVdWMxNA!=y;ZMJdL7cs#j%(TzD~4|%Hl?n zm)716K=0|q=@rP=E{iw!2}?!T;I*OGOd}9q9{C7{)r_4H{-)!UA!Nsx$Im?MGIOwd z#MFs!iH^iKyGACh6m8^VzX|wvCVsp|ORhqhyvRTTmpO7AQ{zVX(JGdZ$0qI?`9&7) z8Sb$}Lri)5A0H(r9ocu3Rcq8in%R~{)TTz3O8fFJMjx~xon0T+!2$B5n@fe+CvfI^ z++|Q8-Wl*-y(8Aus*pG%&)=~zCH|VkRcEL;cSjL^!{@VjHo#h%-e`QH@Zcww-@Bv@ z@ML+N9Ee}ZVDc+$1MD;p3#$;HTDC*6`INSQYZ9fF0o5p<{Xd>w>>~~2VPJ4w+)Ck3 zj<=U2ZYT)O1LNzCu?7xje^{wCpUMWYvs5W4aaeDD)3y_SU9^9mcBnkBpU4LVRNiji z$;1jW*nVaOZ-)O4&o_NBPVMGkaxcWLra`UYt_9e!)__iy6A+fcldeE7@R^?KX;wit z8p;=EPui4#s(VjPrO0t59mLec8FJ#C1X+&7i6<*NpW&A#OlqF!<^)%h{fu7elaa2i zI!PuoU-OiC~rz4Ig*lX%L>@PQ7cF64u0F#9pC!{%u`-_5X|@>vaQ zI*d~B!SM5n$~t&(+-1f%Q*JeKt;UG+%F1SjX9^o!HhW~jskdb@ZY*S z8ZF}pM1P!!bs% z1}X>H7V;g3Tb*O8lUnkQw9c|lL6~HnU@f=Kw`%T@)|tS{0cTmYR8F61J=R)bEwdhN z)zX(rKk^w5>x*az&L3HS*wJB2%{MUYau^yV#qdM)CtxpMl@rvyHA zPADO}10xqkZ9IN_&%}2`oxDdMW^yWNVh&4bZzh&Y!Mdeth=iS1+_@`n;MiLw)7oD_iqTz>k+{y4|Mv zb-S+HJ-XdxvHNlmvJm_T1vpvKt$s}t;K5%n);u;lL+@yZ-@;!utDnH{CmVtT!NvTH zXf{NASxJ6f&-4}Po}46?UvsG_l3cktNOBnj6zVc41~XH@;`EauAhQukVN$Vyp$xN7 zOCf|UWN8W^O(CQyB$unu%x1BB)3gQJY^_3@uT^R_TDdkytJSKtdfo2O?K#pQn>Wqr zx1yDZpbZ|oU(2=mCZZ&?9?i)B^ksM)sMVX6W^R0FUKa(DbT~YKw;<<$UM0=U7$svTVRSn&XsFR5@;9b5|}K|fiAP>+MM`u zs;?yVm4YvDcyf8{0G((me=(;+vAEP%GQKeGQxK+e8>TRrZX>jOI=5sBgXu^;2B8e0 z3ZWXI24NAx5`<+4C!=UB#}`1gTCOyF0{W6kLG=}4H9=k8Hie%KPN%m^A?vuqoajx- zai+zd>*i4b^ms5TZqDm=-hOPu+1}@qj>gZo=6bt(9OxT-p>cYyJJ;>Tn7QqRMw0II zP4G>ylj<4L-Ds$8cSF)j(P}5!=$i#WbUTo6i` z%N;eBduJ}B^;qq`?(-O2XtjI0F9st@;Qt~%64m@d2d?e=4Sw}(gV1jUpw|ldbmNSe1TRt(}MzlY0F{D`K-G9!voV@bK5G-oPtA3z*N`XqW16FH|lf!U*{ z;m737tR5Z7274~b5Bya+~(ClB~G`mm` z@FpheiHY3Un4mfa#1s^9B$@3^G37`BG1lIcSbLdl^14l4cOtJl#>-?A@pWI5mXm69 zlpshnX;p}6Rmjsy;CX=13M>B( zs7$aMg?u9$Bj1^@4^oYM8`E?LPt#j5k28fQQ%yTxCRWHSRD?g*>$GC6%;G7%lfj)l zWxd`1v}#y(k)-J`Aet}JrID2%GlxrrzklN5+3Owc?cwz>34bu%mt}S6HXXpBgTaNL z!u90jAgd=g$LX;6dfYl&3QbFb1Z>2W-M07~urm$^uOUvG&6kmD(XH@Z+gMKK!UC3S z^R_|wbaEy+unIV!>ah1}$xOzI>FvqW)A4KB4vBek6m4{jHX4$^Mx_%2%}y5dw1?&M zc%TCwUr#Y)L1Z0*ZvM`A$5Z~h&!4F^|JUO{J zEG(Lnq`Pz%j{^&q?64|noi5$!u)8D?5r@N-!g}czenqRT?X13~@tZ z(QF&*bWgFjry52p*Ws}lWkdWNXHtsW+olM5t|iG~F}x56WB4k1QryKz&h+&xGQ0?! zrX*l414|b*>sjJ3`WvIoZd8i1&~RR$pgA^&MR)2BvN+i=q+zt16N=Jp(2kxZPKQwu zv?Isk(3!_{b!-kD3px@!Ne){s{-I-`Vm!1V^dJvxh&>b@Gaf0>Qcz0tGs8rSKnxG!DFS)PWoL$=T_C0d;>iLX7-@E9Sc$nDJDfCLa#<0? ztzj&QG4^gGErn}hCx?^ZJfI(t1WU!jpykkF#z7aShq>VQ5!_6p0MRmbfuw|FeU^s9 z3*$EgVvi;A>uiw{yj2p$n<(q};Y|E8sCs6xT>Yl3V^YZk{s-d&Wz5NOqEEZ8@%Eg_ zwx|bw3hWPmV{E4QreFl%T!}g9xzMQ@zg?_6f@^pbeaA??YlPIZMR9ItFM%C6wnDcm z+KuY#R?d{Gl6rPBUrrXM_U~+f zAz#mHiue~UFeQZ%Z_hu~*9TTVlvSngNoF&)IoFwMWbyWVDk&SWA0XdG>=!g~Sv2oP z7&{MI4}ful2cgzU7=cLHx7>+-5{n4i3*QXc^N`({gYohBCg|LQ)A&2nw{f)Q zn}Oj^CoW8PyP%gdkd*6IV)3rT5} zaHTK}i%}XX%}pm4>Jt_n#?jk_vf!@s0ASOAc2s-Y+_1MfFuA(74LJ0QeOVMgffW`# zwG;e=FZ|xQjxYQN*@-Vm>+}exN7}Qo#-ktRaQSBWQhZtH0pA2=r*d<2wRxMMgv*Z4 z_z93l%gIECffu{H3CLtj$O+tOJ@>gFE50z~(us?JWAM@No{S9HjwIB`rJ>N+f1QhRz-7kL1Q(iv+hJAy zv`~0{@{;1fG{qdTx!`@d^)yE^e0Sr+emoinbBW<}VcIJr;AX3(%fy+5Dw24*x?#oa z-d6N4&vx&|b;tr@uA7aUCT4KK5+tnNjm#8fb0Sl7rNx@L|Y+<&IcVnN664>~lYn*uww-l6T6yS`PVC44qZiQ+m zx5I2kt|M8BFq&y}gqg}K+QtWYw~uMBzJ7@%-|E}A-HE^Y0zbevpZg82Bf6cp-x_aE zd61suiQhKDEdKFWFEV$md_Qbit|b*Sk;}=2GkY;Swb3v-nYq5|T-0MW4ZbYPosfBq zBQ?f_-co(&?9W#aE6p700hk~(=3}t~8(sd!baCt4@kaBoeq-I_6gXWbQD-%V3)g*( z1IsWr1lJ6M9qO4VhR6_U^A;Rt2mmtdAuV7 zLsACSRH2NAz6}4kg*DvLgf=?GP`P{)(;W^ZZ=5LB+P4wW=Xt(kMq}{0Z^VBmTwm52 z)MW9Uz}7~l;Ub=71g&~43CkS5SQZsMnWHe}zKx4u*I4&>>4YW0mu}DE#X1WRdEc}< ztXVMTFwUA22FiD;%vImU4@6=2@DlDlN8?q{>D%}z6VI`UKs{Sz0{hN!N!mGXe1X-= zm2KRbs!`IUi6s*!l>p-Sv`C|ZrqY(_je)7n#girmON%E@n-VN;475xxo;p1^xp~Uu z$rDQ_HN%tOeFja{Xj1Gan*6`m;jam`hFAGdZ0roL53cghXk&E!tQB}$sI{ai+&0rc zX~HBvWYoyl|FsKTe{1xaMc}VDYvhpX5pl8@G=l$(LA`$1Qv9v~e&Hha%O3bWB>WPE z@Y21vJQ!eJ?7?vMi@&V$rcNKffWO93S6TPiqZjGZu1c!dcES%%ykg^zo@Abyqn9rz zJHEPNVNFBr;)V07D(dT&H!NPbq`s=Ip|)<}lEoEO4a@5m&Og3t@$&v{SsrdYZMppD z#sG;W9nFn&<=?p$_4y&k{U+A?ds~bT@A2RrzF-Yry(0P30KuTVO~m~BMw5S5?~Fs( zP!A0Cz)%ki^}r$Y0RL?$!W|}cd+@yy-)Z>nmj8&vKG-xMekJJ4e>=Xd_N#n?0q$SY$51lOc>aQ)oS2OJRvhQxjx`T-emIOD1>-u_;i(k$ z3=Egg&vWxzAN)QOkGd2P%po+!W90?f?VQE5wTYO>X|7MKdBf& zx_YKNu`TguEB5~^Jr_6)e_aiKJtCraQYi$He$^0ZPYT90RsOO5$GZK>u;eR$#{Cc@gQ^-ZVe$K;Qkh z{pv^E6Qp&7C%Cv>3ypgD)}7mB_K*2Q6G21FXI=K+zlrUeE90i#U1-Mh0sPcfqHY{a zdE8GkWW0Kp(|6SNH)gXWZ<#z{zz^Z^GYkCW^TFol`eB2S1GW&s^!E{se>4@{w{IUk zfv^>!1)&sy5cWL*I>J_j7KBm+Fw(xQpd)NWXhA4NKxW$40y@H0gcgKS1Qba7NL*am6DaZtWPbvzPk;>0CqPHoiqL{kiU0!S0Ucp0 zLJLAE0+=8V=m=X8S`bPRkP-5Lj<6M>1)&rHg`sB9@oy_a3qmOZDu6toAZ$fwK`2E) zrH}`7gsliI2&D)R1WBMHY(;26C`AAQc|b?liqL{kiU0=413JQ1gcgKS1Z09dpd;|V z7KBm+6a;x79l}4Tp3Ly{Z2wM?a5K0js1hRmRuoa;Np%eiT z$OAgUR)iLWQUoMI9?(S+(DAPn0U001)&rH0-z|+5w;?#eewpsM=N`KG=9}q)3of8FYu3<` zB}=HXvXVxP8bw|&>ct21|G)c;JMd@Ufs-Zm!w)|EV4#ngRRkRXd}uHXkR&7{{lot< z{e%7G|3KA$$mxcB`_2E~%5V1Hek$PNWq1beAgO(y8b6GVbb>KTAL1j0v+9_&^!hd! zM722Kqj>5^;;H-gopQ?2W}^B&`V@TP90RAD z49q)FezSxD(jfqUR1N)dvka3Dm_9jCK;}I9XrqObCm(&ZD%=#0n>WBG-a5qkruRzx zJdkdTFNZ;X*o)A*@tDK|2(RL8$-Q_-3W2{JyFp6`jHhBxckF*ii;2vBN*aP6VaQJz z@>7QV6!;NvB!>Ky1N$lQ^~8)Nu5wI+L5Y2^TJ>7w4g&9$pUaCE@By;#8>d!4EN$Z_ zjgzHJ)-YbX8pOJt(qODPyi$M?UxGjoT&)OL4-_7^@shtkU~etfqyZw`u*R=Cy0r(i zR~-)k%0I;R?R&t%cD9@IfCtw_92@Y1TG=NY3PXJ`qys}bFr))RIxwUILpm^|14BA6 zqyt|e9T;$PFhm?w58%Ek4Pn;j7`jo`=M_2<8`F2smzc)!FL_&TgM9aYPT>`lgX_ls z`S5h&7$3y=*M0^1HF{Qvj*;L?K}f8KKpjsO2%AKZVCw{Mga{OQUDv$rO z&px~Fg%@7GY0%?@v7Nv=fFA1=Ouaz*pnX4j&`i$`(wD0%kn{WQ#H-4x_ zv7?7D{&Ek1?%Ut|AGGiHRkp!jq#Ewov*%FefA?q1|EC9|Q%^tr^cUF$U-`NRGgb!g zb)PZ*gVHJXlZQTETo3&2cfT9dctHo`3;+`Mv;Rn&Fj#$JA7tqB#q|Kszd??f+yn1t z{0DvK%X_(@&llGNhq4FQpZ$j(4chnLyLayw*Z85D_wn9qkn?}v0mlEj!IZ`4PeY$C zwg=e$4ra^@UO%KBX#Kx`Fl7z-eqZd^bM3tM9?X~-ytDQ*{_hN?tRdg;iywcMU@&9$ z8RI{wvfg^@tuIFhe8r_Wgz>LMm-Vv$C}YrjzaiiM%b|FOa0bvl!1xdP-sj8F`XMO} z;S6A)@jrDic4X+>_sgSqpVRmcYVSYf`+s@HpPwxm%-jX$g{|0sMJGA%v|MmFaKfw6kKNuS_H2z=h@qg!?cfLFw@D-Qj5bXc`=(4`{e^B#( zXz%~!QM%7*{0HSj4vqg;d;Eu<`TJ^*|CgurLy~+E_J63?zdSuKH2zg!m~w`m z{rqx_|DinpJ<$6f82dquKl_|RpD(@#_#SpJ^Oku(kMSRR{^yGydzRo3p8Xo|{a@(C zpq~F?pJV9r#rMD=`2N@JXZ{ar{Mn8SeZJTp;CF8aYx{Yg?`QmH4YsVIJ-`<`{_KMf zcFe#(Yd_=fA8c8?_6&W#xE?r!b3fJ>{`0H7&VJAWCedKWf9U=1FK+A)(e}sw1_Y0J zVlc-4{=w?N&~rdvj1C;aoe$6b1OEOqrw?}gUwP$~FQx;&!nN|;=lAahJ67PY6+;hz z?&}qd`9J92|6w_Xego$JRv8a*?!RM>J%8_K{L>CWr}homfdALtm4L@loY@uz%$LoF zoy}hG1vJZU0CO0{%N34TY#@*T!GH}2j4a#S*K%jGKqNxAV{8K00g@aMQ(>wkY8{Z~!v;PD@e zzt_*HeD7B_V8=i2A#GH@15@_m%mb2d1MFvGSnE^cM4;~{&tdq_QJh8-QZ8p4NS+PE z$$cF;*N-s#$211eR-83~XP?>ffv_dRqT{O7&eKJ6e>|F3KW&z9KarEDsq zknbr@U*NL?>VfMe1lu%qLvYOG8eSapx^P?s{C$d76-L0nD_;KjJo_$=3EZb}sMrGA zr{aZ)?~W|4a}5qV@;&Wi#y4s2l1@>5QSSPyIX|o3Zkw z=gV`w9qO_u{#2Nte%Q)Qvg0{c&h>bN{PSI)rY}yN`_ccstR(9!$k(IuuFfOjpJ^c{ z=YpI=Cfi<}{1c<&z#5O@+AfTgf5!#}jNP-1=GbvU5l1~ z%?6zLKw|poc*i^PFg04}R{kv}-?!yq4_# z-%eK4tHj~o6ysj53iN$;`WS5dXWa7cpz8lQCWYW#UC*&=KZ(4SO6{MzNX2nFnKJdk ze_kTFw#%!Z_|FSf?_}ya74r_I2mkd!$N#l2xd&Ar;P4+j=jA(5Dz?*P$rKC!cxDX1 zK9q>dN7zsOKjl|*oS<;9@jvSJ_k-$h(aUZ>$BOF`%YF4Mug7Eu{ltG}h$H^|yE$ICYpKTnPaj+E@E@XYjKCgf15xz@{lvd3R9zhY?Z?GX`m(v+ z>o;Dh*8VAvjoh*yboh^(f9f$O9OwGIWVL_DFdX2#r3TQ)IL3KhzZN(jY-<1s9RCA4 zgl;451Cqf%%Fh5e7U?oYbUxVlKktEs5$PocUApvk9_l>N{KvyR>p0l>=Xe(bw~;(E zCKTuT^(63b?e8OzHIQa7t^r;4WQpj*4-n8#6t@IS}lKlFaTNbN5{c90XQ&Fj|_-2Owh>1ga?u&n`wvWv`LEsaN?nL5v*&J)Ey z_;p3YG1GFc$N3L^zJty0ABuD9^%&=eLEm@_#XYYlkpIj`_~$%_{hPI(PTYRnU|$%C zUM*?*{N1mzi3IXbe@|Fh$vyYHIb7RwZKszpFO-MXX$YOW6u*6iiQ=E-gpeg5|Ah}P zcDN7odk`!CY%6Eo-Rn0&0eyzhcV1td>-Q7Pe@O_Lq|AJ`ciMksZ9m3$fRNw$(K*-8 z6U_hp;rQo0+B5q!tF1e6-+u5Id1w2g-)*?gZ6xOj=AUzbi2VMX*E)THDLB8o&70{O19EjZuN|fOQ{CcEG-mZJcwV1o?dFbBns&lPeyH=AU^&9@=9> zHo$b87qCA#)ciiI4}BY~8+{$DXEb{0BQ5*c`>F4EjwJCP^ZGC62ka9D(j0;P7yVb1 zn?AcFaBa1ld~olIhj;aCGWciSkS}H%PxpjycnwdV|e#YhCOgB<$G1kW4z+pE=*SYS7kwN z_5)GP2arA)dK^f3)P@tIu0iPN*2^t*}-m{CriJnly4pCIR{`Ln5p!T3Socn zuj&n53gG_fg%Z>yACO!l?6HoxY%7+C+|D&umxJJCW%Ag88Yu87gi$C!-9RcJdAMYpKqEr1}Lv8H%S! z!btNy)YDn{cjCc+57*I$qYuXh92;O&gcdaz*RnIHpi-mfu#4yQ+?MJ4ifhSbd40w8{L&$h9v|IDJQw#%wE_^; z>n91U@43(F>H0`#ytU_kF5|uIA#gvPw>1HM(LjOe{obABT9A+UyTC$Vfd%ssUk&gqP~~sHgh+dePn8Ejl|p zC3xOnM{{$tpgw5}nw+$E7jOjduy$SA$hY5q+h5}LDwjH3w{D$P{-u!l9N;+MbtOOR z$hx+)wDiiSzb=q_+ODM?Y=F#H0OtcGfaHeq*VfjGuCA{B64$oety{Os_OIkbSPx79 z#sOOaDL?DTc9?1h+auehk`v)BfOgMusR5ApRNGB8`M><~ORM~QA#)z^0?@3>|Mk~j zr<(X;=gys0`CB3LOTZgIx00Xs^UXKk3%u>3{Y>@43K$u%FL9`^+l;*O2{Qfb;V}zsfo`G&H1~{n(6OTOjwP0Fv* z9XN0xW$M89220zetXDul1L1dpCjcowL#D06J4GrSd-v`Q(yL$2&k%l(@)J1!5zyhk z7f9dV<1p=}rl!WucBU%XRS4PVS>*34-^ae5 z?~E*8*|R1a=b9%#njpU$uAK!0=5b8VXK71(_xbqakHz-w+Xdf8nLn{>*Dg6%B2Nmu zrtW|B)mQSJmi-xRm@;v0&i-NJ#*MO1p?+0a>^lgSX=Cp)9nuEg+imJF3HJkYIp(YK zR(Zx7Dj7YHlloEm^`fjAuPN5mct!0xFWv!r+M{2NZxG&WmDw6cnyY|M0aafau1CHE z^RGtUcBrX_41TObxZaQ28dDG({7~`rh%*iIs`Qv*)!Hhtw8SlnmzKABJm!j;YHvQ| zmbX^Ol5Y>G=B znJ-37E)pk=FZ}$Lrxy)_u8d8!)y9VP)dpk;vUgqHNX|#yGP`Ev#6oe=ql-n(>(wIX zk7h4q&oIUK=|0@_n(w=e*W>$~WB-8fvb}7ItET}BfouHWb>1HbjJmT}jJUZ#oR(Ac z#R*vj-<$l*BBOBO8e?X0nepC|wQhoUxo45T z3FVyt7yy3U_dvTJdniA@ z0X24NWm4oH{pb=gV*ER3zlFNo`gyN;L#R4H<}4uaEb}C{#MQsA5Lsw%(b`D3^jWY+ z^7_-qJ`fqVz9-n$^z!}ZvqQ;iy^i#=)bnUN;zzf=FYWWcf4xkMotAk0%etWsH_fOP z*P$Ng-M_%D4$oQT3>Am$1(ct9;P;!DKl=#gPhEx6Wvus@FWbTR*J}jzq_t&o!9HnZ zD0!{dk@h~yPrLaqd?)>?=hsTvS%+BV)1RZP>;stJjnD~0>ix=R%OuY%+k#uIGKP!e z*?$DKFb~z9E_`?q>aj+SODvOIsIu7}?4aZer1i_nKA7KAq`VhD{((3j-(TbRGi5vT zjbTduosfZTG3x#w&zuG90L1BN1By?M0sLO)&vI9a%b#8?u6kjuxMoU4FR-1Hw=14m zEiU_QiIkIl%(?$FUz~a89C60vccr|i`1=K=Ct2RaqE8U!0{;eZ9E)0h@`LA20+s`L^PGJunTp6!;Dx;C$f-AV_9C9!|zc?)mdN8sRA52H-K^ z72t2cTwo!vz#kSN%m-cuo&atGeh%>2V}T(+NLlUfMIxhC4N2~Dfn^7TsYw})2z|Yp}d8AS0AlwZ6Gr&DQ(oasG7xxozO`CpZ z`uD7$-;@5o9_$c1cI?19Y=c~j<$5eZf2HyrGUUDwK7+CpcH{hX;CNs=ue0v-D<|uq zUsc=h(Sw{^Y|^wrXNz4zrB8YvWu6t&APHofbBhBl}{gdvJcCCk)ZO~K9YT~U2FBH z{{N)v&%J8NKDgeX+24IAn|m~+Ok77u=E3z&?)_7~eUv)}n9TBdE!q2{zoqSosc8*4G1ZZO5h^>W>)4S92K*vptV{DUf24{`5o;0>(L zlwqA_+oBKLVr7{}tf@2w*HOw5RsgHkVoe3%GOnwv=6Z@(%w1uM!eyq&Uu25u^Gq>q zZnb#m)e+$j*Ldg`gt2qy!4 z6~`bA-}_gf^No^?Ox-g)rHmrLDCA0uo~`XP}o^A2DJeWgBsrSe6x zUC$&{~_1yUITt$Ezd6Qm*F+En6@f~Qi0cezSUWpAF!|q*SJnaTN(%alU+G|UBh$qXVD+_JWvFARv=$DPz6*1D{+nf zF_!ZrFcG*Akbbbf@{i_zs5aY;zABo0QZOw<^8H3F559sZ5Bh1+^57{c1?u6NfInk2 zz>vR<9-@J9{@!|Yx8}N_pJF)R0+Q*cz_{uHR$~sb2B-ik0SxU`H8`n3xC!GvP{sXw zTY*mizLz!v6M(BYFW?>+&Oi2GPC{@_!g(Fh)U+RH68rb>7u;v2?K7H!e1BE#tri{a z?NZ;7{>OJh$o6)X$MZJluF<|9ZuxKvpI?ai%qqUyM|*G{h36MQNAvjZ8tvhiKflUj zKH}l;Ct4$azixpZp?3oNK|Lo!hStrSKNQW)`>;Q%MedX8=xh^R9j!QT6K(CyqGdmM z*p2z&PO%aCg5GvknVw_XJK7EGhsnYoo=s(I-7RJ1n1|y%u)L~VR8&-m)n#kN^3pY8 z{z|uaYks+yHgoyTYP0G$n`^7jK%I^5&Mu?7tJCP}YBMglvuMhtzbh3tW50-8Z^B-W zE2etIl~cUp>Q}rXGq+3}JLc~t4UNslz60&De`sxOH}>vtGftaSbi(o1{eA95n456i z7>D&L&Y!qfgySX0dafItbaO%be`FQ3xW>MH7t3$&>NeWjy9|sAbKJdtw}OMr6-=R?3g(yE=t|K6476zw((fj34+L%b2rK zhH)6LuEBW6ze9Er=3HmrGmmR2#V8M6%APqBt{sl?@itsvgucHP>+W?UCl_rSIjL~N zsS^uVoHD*(`YGez$vGvv@WjTZR-+m9R?l}~UM11dZM1ZB8T*^tj9o~xqp`*Ks^Ng~ zSwoZY<+uBc#=WgZ8|tc_^MyGb=pt~8%aei4e|hMQ>WAi~m8R7XEye%xAI>2D;p|^ zAlIQbayXY94LBNbG~j5!(SV}?M+1Xe1NDa)--QB7&l}WQa4PR;z|nxC0Y?Ll1{@7I W8gMk=Xu#2cqX9<)js^~C4g5cYS~H^n literal 0 HcmV?d00001 diff --git a/SOLVER/ShapesBBox2Regions/obj/Debug/ShapesBBox2Regions.pdb b/SOLVER/ShapesBBox2Regions/obj/Debug/ShapesBBox2Regions.pdb new file mode 100644 index 0000000000000000000000000000000000000000..94916a177e6581a0bab580ab35cb5446cd36e4ba GIT binary patch literal 230912 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�`1nQW-vk@;3sR>Mq|y5N2Mc>n+J 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 0 ? dbfCodePage : (cod_page > 0 ? cod_page : (byte)201)); + // read fields + this.Position = 32; + _FieldInfos = new FieldInfos(); + int tb = hdr_size - 2; + while (this.Position < tb) + { + buff = new byte[11]; + this.Read(buff, 0, buff.Length); + string fName = _cp.Encoding.GetString(buff).Trim('\0').Trim(); + byte ft = (byte)this.ReadByte(); + buff = new byte[4]; + this.Read(buff, 0, buff.Length); + int offset = bc.ToInt32(buff, 0); + byte fsize = (byte)this.ReadByte(); + byte dpnt = (byte)this.ReadByte(); + buff = new byte[14]; + this.Read(buff, 0, buff.Length); + FieldInfo fi = new FieldInfo(fName, fsize, dpnt, (FieldType)ft); + fi.offset = (ushort)offset; + _FieldInfos.Add(fi); + }; + this._header_space = (uint)hdr_size - this.StdHeaderSize; + this.Position = hdr_size; + header_exists = true; + } + + private void WriteHeader() + { + byte[] buff = new byte[0]; + this.Position = 0; + this.WriteByte(0x03); // 0 - TYPE + MEMO 0x83 + this.WriteByte((byte)(DateTime.UtcNow.Year % 100)); // 1 - YY + this.WriteByte((byte)DateTime.UtcNow.Month); // 2 - MM + this.WriteByte((byte)DateTime.UtcNow.Day); // 3 - DD + buff = bc.GetBytes((uint)0); + this.Write(buff, 0, buff.Length); // 4 - records count + buff = bc.GetBytes((ushort)0); + this.Write(buff, 0, buff.Length); // 8 - header size + buff = bc.GetBytes((ushort)0); + this.Write(buff, 0, buff.Length); // 10 - record size + this.WriteByte(0x00); // 12 - Reserved + this.WriteByte(0x00); // 13 - Reserved + this.WriteByte(0x00); // 14 - Ignored + this.WriteByte(0x00); // 15 - Normal + buff = new byte[12]; + this.Write(buff, 0, buff.Length); // 16 - reserved + this.WriteByte(0x00); // 28 - No Index + this.WriteByte((byte)_cp.headerCode); // 29 - Code Page + this.WriteByte(0x00); // 30 - Reserved + this.WriteByte(0x00); // 31 - Reserved + } + + public void WriteHeader(FieldInfos fields) + { + if (this.records > 0) throw new Exception("Can't write header if any records exists"); + _FieldInfos = fields; + WriteHeader(); + + byte[] buff = new byte[0]; + ushort hdr_size = MAIN_HEADER_SIZE + 1; + int mhl = 0; + + fields.ReIndex(); + for (int i = 0; i < fields.Count; i++) + { + buff = fields[i].BName(_cp.Encoding); + if (fields[i].GName.Length > 11) + buff[10] = (byte)(0x41 + (mhl++)); + if(_tenHeaderMode) buff[10] = 0; + this.Write(buff, 0, buff.Length); // 0 - Field Name + buff = new byte[] { (byte)fields[i].FType }; + this.Write(buff, 0, buff.Length); // 11 - Field Type + buff = bc.GetBytes((int)fields[i].offset); + this.Write(buff, 0, buff.Length); // 12 - Field Offset + this.WriteByte((byte)fields[i].FLength); // 16 - Field Size + this.WriteByte((byte)fields[i].FDecimalPoint); // 17 - No Decimal Point + buff = new byte[14]; + this.Write(buff, 0, buff.Length); // 18 - Reserved + + hdr_size += FIELD_INFO_SIZE; + }; + this.WriteByte(13); //TERMINAL BYTE + this.WriteByte(26); //TERMINAL BYTE + + this.Position = 8; + buff = bc.GetBytes(hdr_size); // header size + this.Write(buff, 0, buff.Length); + buff = bc.GetBytes(fields.RecordSize); // record size + this.Write(buff, 0, buff.Length); + + this.Position = hdr_size; + header_exists = true; + } + + private bool WriteData(Dictionary record, long position) + { + if (!header_exists) throw new Exception("Header doesn't created or exists"); + if (record == null) return false; + if (record.Count == 0) return false; + if ((_FieldInfos == null) || (_FieldInfos.Count == 0)) return false; + + _FieldInfos.ZeroValues(); + foreach (KeyValuePair kvp in record) + { + FieldInfo fi = _FieldInfos[kvp.Key]; + if (fi != null) + fi.FValue = kvp.Value; + }; + + this.Position = position; + this.WriteByte(0x20); //_BEGIN RECORD_ // + + for (int i = 0; i < _FieldInfos.Count; i++) + { + byte[] def = new byte[_FieldInfos[i].FLength]; + if ((_FieldInfos[i].FType == FieldType.Numeric) || (_FieldInfos[i].FType == FieldType.Float)) + { + for (int x = 0; x < def.Length; x++) + def[x] = (byte)' '; + if (_FieldInfos[i].FValue != null) + { + string ddd = _FieldInfos[i].FLength.ToString(); + string nf = "{0,-" + ddd + "}"; + if (_FieldInfos[i].FDecimalPoint > 0) { nf = "{0,-" + ddd + ":0."; for (int x = 0; x < _FieldInfos[i].FDecimalPoint; x++) nf += "0"; nf += "}"; }; + byte[] buff = _cp.Encoding.GetBytes(String.Format(System.Globalization.CultureInfo.InvariantCulture,nf, _FieldInfos[i].FValue)); + if (buff.Length > def.Length) + throw new Exception("Numeric Value is too large: " + _FieldInfos[i].FValue.ToString()); + Array.Copy(buff, 0, def, def.Length - buff.Length, buff.Length); + }; + }; + if ((_FieldInfos[i].FType == FieldType.Memo) || (_FieldInfos[i].FType == FieldType.Binary) || (_FieldInfos[i].FType == FieldType.General) || (_FieldInfos[i].FType == FieldType.Picture)) + { + for (int x = 0; x < def.Length; x++) + def[x] = (byte)' '; + if (_FieldInfos[i].FValue != null) + { + byte[] buff = _cp.Encoding.GetBytes(_FieldInfos[i].FValue.ToString().Replace(",", ".")); + if (buff.Length > def.Length) + throw new Exception("Meme Value is too large: " + _FieldInfos[i].FValue.ToString()); + Array.Copy(buff, 0, def, def.Length - buff.Length, buff.Length); + }; + }; + if (_FieldInfos[i].FType == FieldType.Integer) + { + def = bc.GetBytes((int)_FieldInfos[i].FValue); + }; + if (_FieldInfos[i].FType == FieldType.Character) + { + if (_FieldInfos[i].FValue != null) + { + byte[] buff = _cp.Encoding.GetBytes(_FieldInfos[i].FValue.ToString()); + if (buff.Length > def.Length) + Array.Copy(buff, def, def.Length); + else + Array.Copy(buff, def, buff.Length); + } + else + { + byte[] buff = new byte[def.Length]; + Array.Copy(buff, def, def.Length); + }; + }; + if (_FieldInfos[i].FType == FieldType.Logical) + { + byte[] buff = new byte[] { (_FieldInfos[i].FValue == null) || (((bool)_FieldInfos[i].FValue) != true) ? (byte)((char)'F') : (byte)((char)'T')}; + if (buff.Length > def.Length) + Array.Copy(buff, def, def.Length); + else + Array.Copy(buff, def, buff.Length); + }; + if (_FieldInfos[i].FType == FieldType.Date) + { + for (int x = 0; x < def.Length; x++) + def[x] = (byte)' '; + if ((_FieldInfos[i].FValue != null) && (_FieldInfos[i].FValue is DateTime)) + { + byte[] buff = _cp.Encoding.GetBytes(((DateTime)_FieldInfos[i].FValue).ToString("yyyyMMdd")+" "); + Array.Copy(buff, 0, def, def.Length - buff.Length, buff.Length); + }; + }; + if (_FieldInfos[i].FType == FieldType.DateTime) + { + for (int x = 0; x < def.Length; x++) + def[x] = (byte)' '; + if ((_FieldInfos[i].FValue != null) && (_FieldInfos[i].FValue is DateTime)) + { + byte[] buff = _cp.Encoding.GetBytes(((DateTime)_FieldInfos[i].FValue).ToString("yyyyMMddHHmmss")); + Array.Copy(buff, 0, def, def.Length - buff.Length, buff.Length); + }; + }; + this.Write(def, 0, def.Length); + }; + return true; + } + + public uint WriteRecord(Dictionary record) + { + long pos = (long)this.HeaderSize + (long)this.records * (long)this.RecordSize; + bool res = WriteData(record, pos); + if (res) return this.records++; + return 0; + } + + public uint WriteRecord(object[] record) + { + if ((record == null) || (record.Length == 0)) return 0; + if ((_FieldInfos == null) || (_FieldInfos.Count == 0)) return 0; + Dictionary rec = new Dictionary(); + for (int i = 0; (i < record.Length) && (i < _FieldInfos.Count); i++) + rec.Add(_FieldInfos[i].FName, record[i]); + return WriteRecord(rec); + } + + public uint WriteRecord(uint index, Dictionary record) + { + if (index < 1) return 0; + + uint tmpi = index - 1; + if (tmpi > this.records) return 0; + long pos = (long)this.HeaderSize + (long)tmpi * (long)this.RecordSize; + bool res = WriteData(record, pos); + if (res) return tmpi == this.records ? ++this.records : index; + return 0; + } + + public uint WriteRecord(uint index, object[] record) + { + if ((record == null) || (record.Length == 0)) return 0; + if ((_FieldInfos == null) || (_FieldInfos.Count == 0)) return 0; + Dictionary rec = new Dictionary(); + for (int i = 0; (i < record.Length) && (i < _FieldInfos.Count); i++) + rec.Add(_FieldInfos[i].FName, record[i]); + return WriteRecord(index, rec); + } + + public uint WriteRecord(Dictionary record, long position) + { + ushort hs = HeaderSize; + ushort rs = RecordSize; + if (position < hs) return 0; + if (position > this.Length) return 0; + uint index = 1; + for (long i = hs; i < this.Length; i += (long)RecordSize, index++) + { + if (position == i) return WriteRecord(record, index); + if (position < i) break; + }; + return 0; + } + + public uint WriteRecord(object[] record, long position) + { + if ((record == null) || (record.Length == 0)) return 0; + if ((_FieldInfos == null) || (_FieldInfos.Count == 0)) return 0; + Dictionary rec = new Dictionary(); + for (int i = 0; (i < record.Length) && (i < _FieldInfos.Count); i++) + rec.Add(_FieldInfos[i].FName, record[i]); + return WriteRecord(rec, position); + } + + private Dictionary ReadData() + { + byte x20 = (byte)this.ReadByte(); //_BEGIN OF RECORD_ // + if (x20 != 0x20) return null; + + Dictionary result = new Dictionary(); + + for (int i = 0; i < _FieldInfos.Count; i++) + { + byte[] def = new byte[_FieldInfos[i].FLength]; + this.Read(def, 0, def.Length); + string dv = _cp.Encoding.GetString(def).Trim('\0').Trim(); + object val = dv; + + if (_FieldInfos[i].FType == FieldType.Numeric) + { + int tmi; long tml; float tmf; double tmd; + if (int.TryParse(dv, out tmi)) + val = tmi; + else if (long.TryParse(dv, out tml)) + val = tml; + else if (float.TryParse(dv, System.Globalization.NumberStyles.Any, System.Globalization.CultureInfo.InvariantCulture, out tmf)) + val = tmf; + else if (double.TryParse(dv, System.Globalization.NumberStyles.Any, System.Globalization.CultureInfo.InvariantCulture, out tmd)) + val = tmd; + }; + if (_FieldInfos[i].FType == FieldType.Float) + { + float tmf; double tmd; + if (float.TryParse(dv, System.Globalization.NumberStyles.Any, System.Globalization.CultureInfo.InvariantCulture, out tmf)) + val = tmf; + else if (double.TryParse(dv, System.Globalization.NumberStyles.Any, System.Globalization.CultureInfo.InvariantCulture, out tmd)) + val = tmd; + }; + if ((_FieldInfos[i].FType == FieldType.Memo) || (_FieldInfos[i].FType == FieldType.Binary) || (_FieldInfos[i].FType == FieldType.General) || (_FieldInfos[i].FType == FieldType.Picture)) + { + int tmi; long tml; + if (int.TryParse(dv, out tmi)) + val = tmi; + else if (long.TryParse(dv, out tml)) + val = tml; + }; + if (_FieldInfos[i].FType == FieldType.Integer) + { + val = bc.ToInt32(def, 0); + }; + // if (_FieldInfos[i].FType == FieldType.Characters) { }; + if (_FieldInfos[i].FType == FieldType.Logical) val = dv == "T"; + if (_FieldInfos[i].FType == FieldType.Date) + { + DateTime dt; + if(DateTime.TryParseExact(dv,"yyyyMMdd", null, System.Globalization.DateTimeStyles.None, out dt)) + val = dt; + }; + if (_FieldInfos[i].FType == FieldType.DateTime) + { + DateTime dt; + if (DateTime.TryParseExact(dv, "yyyyMMddHHmmss", null, System.Globalization.DateTimeStyles.None, out dt)) + val = dt; + }; + result.Add(_FieldInfos[i].FName, val); + }; + + return result; + } + + public Dictionary ReadRecord(uint index) + { + if (records == 0) return null; + + uint tmpi = index - 1; + if (tmpi > this.records) return null; + + this.Position = (long)this.HeaderSize + (long)tmpi * (long)this.RecordSize; + return ReadData(); + } + + public Dictionary ReadNext() + { + if (records == 0) return null; + if(this.Position < this.HeaderSize) this.Position = (long)this.HeaderSize; + return ReadData(); + } + + public System.Collections.Generic.IEnumerable> ReadAllRecords() + { + if (this.records > 0) + { + this.Position = this.HeaderSize; + for (uint i = 1; i <= records; i++) + yield return ReadData(); + }; + } + + public Dictionary this[uint index] + { + get { return ReadRecord(index); } + set { WriteRecord(index, value); } + } + + private void WriteRecordsCount() + { + long pos = this.Position; + this.Position = 4; + byte[] buff = bc.GetBytes(records); + this.Write(buff, 0, buff.Length); + this.Position = pos; + } + + public override void Close() + { + WriteRecordsCount(); + this.Position = (long)this.HeaderSize + (long)this.records * (long)this.RecordSize; + WriteByte(26); // TERMINAL BYTE + base.Close(); + } + } + + public enum FieldType : byte + { + Numeric = (byte)'N', + Float = (byte)'F', + Character = (byte)'C', + Logical = (byte)'L', + Date = (byte)'D', + Memo = (byte)'M', + Binary = (byte)'B', + General = (byte)'G', + Picture = (byte)'P', + Integer = (byte)'I', + DateTime = (byte)'T' + } + + public class FieldInfo + { + public string FName; + public byte FLength; + public byte FDecimalPoint = 0; + public FieldType FType; + + internal ushort offset = 0; + internal object FValue = null; + + public FieldInfo(string fName, byte fLength, FieldType fType) + { + this.FName = fName; + this.FLength = fLength; + this.FType = fType; + } + + public FieldInfo(string fName, byte fLength, byte fDecimalPoint, FieldType fType) + { + this.FName = fName; + this.FLength = fLength; + this.FType = fType; + this.FDecimalPoint = fDecimalPoint; + } + + public string GName + { + get + { + return this.FName.ToUpper(); + } + } + + public byte[] BName(Encoding encoding) + { + byte[] res = new byte[11]; + byte[] bb = encoding.GetBytes(this.GName); + for (int i = 0; (i < bb.Length) && (i < res.Length); i++) + res[i] = bb[i]; + return res; + } + } + + public class FieldInfos : List + { + public void Add(FieldInfo fi) + { + if (this.Count > 0) + foreach (FieldInfo ff in this) + if (ff.FName.ToUpper() == fi.FName.ToUpper()) + throw new Exception(String.Format("Field with name {0} already exists.", ff.FName)); + CheckValidLength(fi.FType, ref fi.FLength, ref fi.FDecimalPoint); + base.Add(fi); + } + + public void Add(string fName, byte fLength, FieldType fType) + { + if (this.Count > 0) + foreach (FieldInfo ff in this) + if (ff.FName.ToUpper() == fName.ToUpper()) + throw new Exception(String.Format("Field with name {0} already exists.", ff.FName)); + CheckValidLength(fType, ref fLength); + this.Add(new FieldInfo(fName, fLength, fType)); + } + + public void Add(string fName, byte fLength, byte fDecimalPoint, FieldType fType) + { + if (this.Count > 0) + foreach (FieldInfo ff in this) + if (ff.FName.ToUpper() == fName.ToUpper()) + throw new Exception(String.Format("Field with name {0} already exists.", ff.FName)); + CheckValidLength(fType, ref fLength, ref fDecimalPoint); + this.Add(new FieldInfo(fName, fLength, fDecimalPoint, fType)); + } + + public ushort RecordSize + { + get + { + int res = 1; + if (this.Count > 0) + for (int i = 0; i < this.Count; i++) + res += this[i].FLength; + if (res > ushort.MaxValue) + throw new Exception("Record size is too big! Max allowed size is " + ushort.MaxValue.ToString()); + return (ushort)res; + } + } + + public FieldInfo this[string fieldName] + { + get + { + if (this.Count > 0) + for (int i = 0; i < this.Count; i++) + if (fieldName == this[i].FName) + return this[i]; + return null; + } + } + + internal void ReIndex() + { + ushort res = 1; + if (this.Count > 0) + for (int i = 0; i < this.Count; i++) + { + this[i].offset = res; + res += this[i].FLength; + }; + } + + internal void ZeroValues() + { + if (this.Count > 0) + for (int i = 0; i < this.Count; i++) + this[i].FValue = null; + } + + private void CheckValidLength(FieldType fType, ref byte fLength) + { + byte fdc = 0; + CheckValidLength(fType, ref fLength, ref fdc); + } + + private void CheckValidLength(FieldType fType, ref byte fLength, ref byte fDecimalPoint) + { + switch (fType) + { + case FieldType.Numeric: + case FieldType.Float: + if (fLength > 20) fLength = 20; + if (fDecimalPoint >= fLength) fDecimalPoint = (byte)(fLength - 1); + break; + case FieldType.Character: + fDecimalPoint = 0; + break; + case FieldType.Logical: + fDecimalPoint = 0; + fLength = 1; + break; + case FieldType.Date: + case FieldType.Memo: + case FieldType.Binary: + case FieldType.General: + case FieldType.Picture: + fDecimalPoint = 0; + fLength = 10; + break; + case FieldType.Integer: + fDecimalPoint = 0; + fLength = 4; + break; + case FieldType.DateTime: + fDecimalPoint = 0; + fLength = 14; + break; + }; + } + } + + public class CodePageSet + { + public byte headerCode = 0; + public int codePage = 0; + public string codeName = "UNKNOWN"; + + public Encoding Encoding + { + get + { + return System.Text.Encoding.GetEncoding(codePage); + } + } + + public CodePageSet(){} + + public static CodePageSet Default + { + get + { + CodePageSet result = new CodePageSet(); + result.headerCode = 201; + result.codePage = 1251; + result.codeName = @"Russian Windows \ Windows-1251 [0xC9]"; + return result; + } + } + + public override string ToString() + { + return codeName; + } + } + + public class CodePageList : List + { + public CodePageList() + { + this.Add(204, 01257, "Baltic Windows"); + this.Add(079, 00950, "Chinese Big5 (Taiwan)"); + this.Add(077, 00936, "Chinese GBK (PRC)"); + this.Add(122, 00936, "PRC GBK"); + this.Add(031, 00852, "Czech OEM"); + this.Add(008, 00865, "Danish OEM"); + this.Add(009, 00437, "Dutch OEM"); + this.Add(010, 00850, "Dutch OEM*"); + this.Add(025, 00437, "English OEM (Great Britain)"); + this.Add(026, 00850, "English OEM (Great Britain)*"); + this.Add(027, 00437, "English OEM (US)"); + this.Add(055, 00850, "English OEM (US)*"); + this.Add(200, 01250, "Eastern European Windows"); + this.Add(100, 00852, "Eastern European MS-DOS"); + this.Add(151, 10029, "Eastern European Macintosh"); + this.Add(011, 00437, "Finnish OEM"); + this.Add(013, 00437, "French OEM"); + this.Add(014, 00850, "French OEM*"); + this.Add(029, 00850, "French OEM*2"); + this.Add(028, 00863, "French OEM (Canada)"); + this.Add(108, 00863, "French-Canadian MS-DOS"); + this.Add(015, 00437, "German OEM"); + this.Add(016, 00850, "German OEM*"); + this.Add(203, 01253, "Greek Windows"); + this.Add(106, 00737, "Greek MS-DOS (437G)"); + this.Add(134, 00737, "Greek OEM"); + this.Add(152, 00006, "Greek Macintosh"); + this.Add(121, 00949, "Hangul (Wansung)"); + this.Add(034, 00852, "Hungarian OEM"); + this.Add(103, 00861, "Icelandic MS-DOS"); + this.Add(017, 00437, "Italian OEM"); + this.Add(018, 00850, "Italian OEM*"); + this.Add(019, 00932, "Japanese Shift-JIS"); + this.Add(123, 00932, "Japanese Shift-JIS 2"); + this.Add(104, 00895, "Kamenicky (Czech) MS-DOS"); + this.Add(078, 00949, "Korean (ANSI/OEM)"); + this.Add(105, 00620, "Mazovia (Polish) MS-DOS"); + this.Add(102, 00865, "Nordic MS-DOS"); + this.Add(023, 00865, "Norwegian OEM"); + this.Add(035, 00852, "Polish OEM"); + this.Add(036, 00860, "Portuguese OEM"); + this.Add(037, 00850, "Portuguese OEM*"); + this.Add(064, 00852, "Romanian OEM"); + this.Add(201, 01251, "Russian Windows"); + this.Add(101, 00866, "Russian MS-DOS"); + this.Add(038, 00866, "Russian OEM"); + this.Add(150, 10007, "Russian Macintosh"); + this.Add(135, 00852, "Slovenian OEM"); + this.Add(089, 01252, "Spanish ANSI"); + this.Add(020, 00850, "Spanish OEM*"); + this.Add(021, 00437, "Swedish OEM"); + this.Add(022, 00850, "Swedish OEM*"); + this.Add(024, 00437, "Spanish OEM"); + this.Add(087, 01250, "Standard ANSI"); + this.Add(003, 01252, "Standard Windows ANSI Latin I"); + this.Add(002, 00850, "Standard International MS-DOS"); + this.Add(004, 10000, "Standard Macintosh"); + this.Add(120, 00950, "Taiwan Big 5"); + this.Add(080, 00874, "Thai (ANSI/OEM)"); + this.Add(124, 00874, "Thai Windows/MS–DOS"); + this.Add(202, 01254, "Turkish Windows"); + this.Add(107, 00857, "Turkish MS-DOS"); + this.Add(136, 00857, "Turkish OEM"); + this.Add(001, 00437, "US MS-DOS"); + this.Add(088, 01252, "Western European ANSI"); + this.Add(255, 01251, "Default Unknown"); + } + + private void Add(byte headerCode, int codePage, string codeName) + { + CodePageSet cpc = new CodePageSet(); + cpc.headerCode = headerCode; + cpc.codePage = codePage; + try + { + cpc.codeName = codeName + " "; + Encoding enc = System.Text.Encoding.GetEncoding(cpc.codePage); + if ((enc.EncodingName.ToUpper().IndexOf("DOS") >= 0) && (enc.EncodingName.ToUpper().IndexOf("WINDOWS") < 0) && (enc.EncodingName.ToUpper().IndexOf("OEM") < 0)) + cpc.codeName += @"\ DOS-" + cpc.codePage.ToString() + @" \ " + enc.EncodingName; + else if ((enc.EncodingName.ToUpper().IndexOf("DOS") < 0) && (enc.EncodingName.ToUpper().IndexOf("WINDOWS") >= 0) && (enc.EncodingName.ToUpper().IndexOf("OEM") < 0)) + cpc.codeName += @"\ Windows-" + cpc.codePage.ToString() + @" \ " + enc.EncodingName; + else if ((enc.EncodingName.ToUpper().IndexOf("DOS") < 0) && (enc.EncodingName.ToUpper().IndexOf("WINDOWS") < 0) && (enc.EncodingName.ToUpper().IndexOf("OEM") >= 0)) + cpc.codeName += @"\ OEM-" + cpc.codePage.ToString() + @" \ " + enc.EncodingName; + else + cpc.codeName += @" \ " + enc.EncodingName; + } + catch + { + cpc.codeName = codeName + @" \ --**--UNKNOWN--**-- "; + }; + cpc.codeName += String.Format(@" -- 0x{0:X2}", cpc.headerCode); + this.Add(cpc); + } + + public CodePageSet this[byte headerCode] + { + get + { + if (this.Count == 0) return new CodePageSet(); + foreach (CodePageSet cpc in this) + if (cpc.headerCode == headerCode) + return cpc; + return new CodePageSet(); + } + } + + public CodePageSet this[int codePage] + { + get + { + if (this.Count == 0) return new CodePageSet(); + foreach (CodePageSet cpc in this) + if (cpc.codePage == codePage) + return cpc; + return new CodePageSet(); + } + } + + public CodePageSet this[string codeName] + { + get + { + if (this.Count == 0) return new CodePageSet(); + foreach (CodePageSet cpc in this) + if (cpc.codeName == codeName) + return cpc; + return new CodePageSet(); + } + } + } + + public class MyBitConverter + { + public MyBitConverter() {} + + public MyBitConverter(bool IsLittleEndian) { this.isLittleEndian = IsLittleEndian; } + + private bool isLittleEndian = true; + + public bool IsLittleEndian { get { return isLittleEndian; } set { isLittleEndian = value; } } // should default to false, which is what we want for Empire + + public byte[] GetBytes(bool value) + { + if (IsLittleEndian) + { + return System.BitConverter.GetBytes(value); + } + else + { + byte[] res = System.BitConverter.GetBytes(value); + Array.Reverse(res); + return res; + } + } + + public byte[] GetBytes(char value) + { + if (IsLittleEndian) + { + return System.BitConverter.GetBytes(value); + } + else + { + byte[] res = System.BitConverter.GetBytes(value); + Array.Reverse(res); + return res; + } + } + + public byte[] GetBytes(double value) + { + if (IsLittleEndian) + { + return System.BitConverter.GetBytes(value); + } + else + { + byte[] res = System.BitConverter.GetBytes(value); + Array.Reverse(res); + return res; + } + } + + public byte[] GetBytes(float value) + { + if (IsLittleEndian) + { + return System.BitConverter.GetBytes(value); + } + else + { + byte[] res = System.BitConverter.GetBytes(value); + Array.Reverse(res); + return res; + } + } + + public byte[] GetBytes(int value) + { + if (IsLittleEndian) + { + return System.BitConverter.GetBytes(value); + } + else + { + byte[] res = System.BitConverter.GetBytes(value); + Array.Reverse(res); + return res; + } + } + + public byte[] GetBytes(long value) + { + if (IsLittleEndian) + { + return System.BitConverter.GetBytes(value); + } + else + { + byte[] res = System.BitConverter.GetBytes(value); + Array.Reverse(res); + return res; + } + } + + public byte[] GetBytes(short value) + { + if (IsLittleEndian) + { + return System.BitConverter.GetBytes(value); + } + else + { + byte[] res = System.BitConverter.GetBytes(value); + Array.Reverse(res); + return res; + } + } + + public byte[] GetBytes(uint value) + { + if (IsLittleEndian) + { + return System.BitConverter.GetBytes(value); + } + else + { + byte[] res = System.BitConverter.GetBytes(value); + Array.Reverse(res); + return res; + } + } + + public byte[] GetBytes(ulong value) + { + if (IsLittleEndian) + { + return System.BitConverter.GetBytes(value); + } + else + { + byte[] res = System.BitConverter.GetBytes(value); + Array.Reverse(res); + return res; + } + } + + public byte[] GetBytes(ushort value) + { + if (IsLittleEndian) + { + return System.BitConverter.GetBytes(value); + } + else + { + byte[] res = System.BitConverter.GetBytes(value); + Array.Reverse(res); + return res; + } + } + + public short ToInt16(byte[] value, int startIndex) + { + if (IsLittleEndian) + { + return System.BitConverter.ToInt16(value, startIndex); + } + else + { + byte[] res = (byte[])value.Clone(); + Array.Reverse(res); + return System.BitConverter.ToInt16(res, value.Length - sizeof(Int16) - startIndex); + } + } + + public int ToInt32(byte[] value, int startIndex) + { + if (IsLittleEndian) + { + return System.BitConverter.ToInt32(value, startIndex); + } + else + { + byte[] res = (byte[])value.Clone(); + Array.Reverse(res); + return System.BitConverter.ToInt32(res, value.Length - sizeof(Int32) - startIndex); + } + } + + public long ToInt64(byte[] value, int startIndex) + { + if (IsLittleEndian) + { + return System.BitConverter.ToInt64(value, startIndex); + } + else + { + byte[] res = (byte[])value.Clone(); + Array.Reverse(res); + return System.BitConverter.ToInt64(res, value.Length - sizeof(Int64) - startIndex); + } + } + + public float ToSingle(byte[] value, int startIndex) + { + if (IsLittleEndian) + { + return System.BitConverter.ToSingle(value, startIndex); + } + else + { + byte[] res = (byte[])value.Clone(); + Array.Reverse(res); + return System.BitConverter.ToSingle(res, value.Length - sizeof(Single) - startIndex); + } + } + + public string ToString(byte[] value) + { + if (IsLittleEndian) + { + return System.BitConverter.ToString(value); + } + else + { + byte[] res = (byte[])value.Clone(); + Array.Reverse(res); + return System.BitConverter.ToString(res); + } + } + + public string ToString(byte[] value, int startIndex) + { + if (IsLittleEndian) + { + return System.BitConverter.ToString(value, startIndex); + } + else + { + byte[] res = (byte[])value.Clone(); + Array.Reverse(res, startIndex, value.Length - startIndex); + return System.BitConverter.ToString(res, startIndex); + } + } + + public string ToString(byte[] value, int startIndex, int length) + { + if (IsLittleEndian) + { + return System.BitConverter.ToString(value, startIndex, length); + } + else + { + byte[] res = (byte[])value.Clone(); + Array.Reverse(res, startIndex, length); + return System.BitConverter.ToString(res, startIndex, length); + } + } + + public ushort ToUInt16(byte[] value, int startIndex) + { + if (IsLittleEndian) + { + return System.BitConverter.ToUInt16(value, startIndex); + } + else + { + byte[] res = (byte[])value.Clone(); + Array.Reverse(res); + return System.BitConverter.ToUInt16(res, value.Length - sizeof(UInt16) - startIndex); + } + } + + + public uint ToUInt32(byte[] value, int startIndex) + { + if (IsLittleEndian) + { + return System.BitConverter.ToUInt32(value, startIndex); + } + else + { + byte[] res = (byte[])value.Clone(); + Array.Reverse(res); + return System.BitConverter.ToUInt32(res, value.Length - sizeof(UInt32) - startIndex); + } + } + + public ulong ToUInt64(byte[] value, int startIndex) + { + if (IsLittleEndian) + { + return System.BitConverter.ToUInt64(value, startIndex); + } + else + { + byte[] res = (byte[])value.Clone(); + Array.Reverse(res); + return System.BitConverter.ToUInt64(res, value.Length - sizeof(UInt64) - startIndex); + } + } + } +} diff --git a/SOLVER/ShapesMerger/MergeForm.Designer.cs b/SOLVER/ShapesMerger/MergeForm.Designer.cs new file mode 100644 index 0000000..a4b234e --- /dev/null +++ b/SOLVER/ShapesMerger/MergeForm.Designer.cs @@ -0,0 +1,238 @@ +namespace ShapesMerger +{ + partial class MergeForm + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.components = new System.ComponentModel.Container(); + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(MergeForm)); + this.panel1 = new System.Windows.Forms.Panel(); + this.label4 = new System.Windows.Forms.Label(); + this.mbox = new System.Windows.Forms.CheckBox(); + this.wdbf = new System.Windows.Forms.CheckBox(); + this.label2 = new System.Windows.Forms.Label(); + this.label1 = new System.Windows.Forms.Label(); + this.button1 = new System.Windows.Forms.Button(); + this.listBox1 = new System.Windows.Forms.ListBox(); + this.contextMenuStrip1 = new System.Windows.Forms.ContextMenuStrip(this.components); + this.addFilesToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.toolStripMenuItem2 = new System.Windows.Forms.ToolStripSeparator(); + this.cdf = new System.Windows.Forms.ToolStripMenuItem(); + this.toolStripMenuItem1 = new System.Windows.Forms.ToolStripSeparator(); + this.clist = new System.Windows.Forms.ToolStripMenuItem(); + this.label3 = new System.Windows.Forms.Label(); + this.panel1.SuspendLayout(); + this.contextMenuStrip1.SuspendLayout(); + this.SuspendLayout(); + // + // panel1 + // + this.panel1.Controls.Add(this.label4); + this.panel1.Controls.Add(this.mbox); + this.panel1.Controls.Add(this.wdbf); + this.panel1.Controls.Add(this.label2); + this.panel1.Controls.Add(this.label1); + this.panel1.Controls.Add(this.button1); + this.panel1.Dock = System.Windows.Forms.DockStyle.Bottom; + this.panel1.Location = new System.Drawing.Point(0, 385); + this.panel1.Name = "panel1"; + this.panel1.Size = new System.Drawing.Size(734, 24); + this.panel1.TabIndex = 0; + // + // label4 + // + this.label4.AutoSize = true; + this.label4.Location = new System.Drawing.Point(216, 4); + this.label4.Name = "label4"; + this.label4.Size = new System.Drawing.Size(9, 13); + this.label4.TabIndex = 6; + this.label4.Text = "|"; + // + // mbox + // + this.mbox.AutoSize = true; + this.mbox.Checked = true; + this.mbox.CheckState = System.Windows.Forms.CheckState.Checked; + this.mbox.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.mbox.Location = new System.Drawing.Point(133, 2); + this.mbox.Name = "mbox"; + this.mbox.Size = new System.Drawing.Size(77, 17); + this.mbox.TabIndex = 5; + this.mbox.Text = "Merge DBF"; + this.mbox.UseVisualStyleBackColor = true; + // + // wdbf + // + this.wdbf.AutoSize = true; + this.wdbf.Checked = true; + this.wdbf.CheckState = System.Windows.Forms.CheckState.Checked; + this.wdbf.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.wdbf.Location = new System.Drawing.Point(49, 2); + this.wdbf.Name = "wdbf"; + this.wdbf.Size = new System.Drawing.Size(78, 17); + this.wdbf.TabIndex = 4; + this.wdbf.Text = "Create DBF"; + this.wdbf.UseVisualStyleBackColor = true; + this.wdbf.CheckedChanged += new System.EventHandler(this.wdbf_CheckedChanged); + // + // label2 + // + this.label2.AutoSize = true; + this.label2.Location = new System.Drawing.Point(236, 4); + this.label2.Name = "label2"; + this.label2.Size = new System.Drawing.Size(122, 13); + this.label2.TabIndex = 3; + this.label2.Text = "Shape Types: Unknown"; + // + // label1 + // + this.label1.AutoSize = true; + this.label1.Location = new System.Drawing.Point(3, 3); + this.label1.Name = "label1"; + this.label1.Size = new System.Drawing.Size(46, 13); + this.label1.TabIndex = 2; + this.label1.Text = "Options:"; + // + // button1 + // + this.button1.Dock = System.Windows.Forms.DockStyle.Right; + this.button1.Enabled = false; + this.button1.Location = new System.Drawing.Point(659, 0); + this.button1.Name = "button1"; + this.button1.Size = new System.Drawing.Size(75, 24); + this.button1.TabIndex = 0; + this.button1.Text = "Merge"; + this.button1.UseVisualStyleBackColor = true; + this.button1.Click += new System.EventHandler(this.button1_Click); + // + // listBox1 + // + this.listBox1.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + this.listBox1.ContextMenuStrip = this.contextMenuStrip1; + this.listBox1.Dock = System.Windows.Forms.DockStyle.Fill; + this.listBox1.Font = new System.Drawing.Font("Microsoft Sans Serif", 10F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(204))); + this.listBox1.FormattingEnabled = true; + this.listBox1.ItemHeight = 16; + this.listBox1.Location = new System.Drawing.Point(0, 13); + this.listBox1.Name = "listBox1"; + this.listBox1.Size = new System.Drawing.Size(734, 370); + this.listBox1.TabIndex = 1; + this.listBox1.KeyPress += new System.Windows.Forms.KeyPressEventHandler(this.listBox1_KeyPress); + this.listBox1.KeyDown += new System.Windows.Forms.KeyEventHandler(this.listBox1_KeyDown); + // + // contextMenuStrip1 + // + this.contextMenuStrip1.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.addFilesToolStripMenuItem, + this.toolStripMenuItem2, + this.cdf, + this.toolStripMenuItem1, + this.clist}); + this.contextMenuStrip1.Name = "contextMenuStrip1"; + this.contextMenuStrip1.Size = new System.Drawing.Size(172, 104); + this.contextMenuStrip1.Opening += new System.ComponentModel.CancelEventHandler(this.contextMenuStrip1_Opening); + // + // addFilesToolStripMenuItem + // + this.addFilesToolStripMenuItem.Name = "addFilesToolStripMenuItem"; + this.addFilesToolStripMenuItem.Size = new System.Drawing.Size(171, 22); + this.addFilesToolStripMenuItem.Text = "Add files ..."; + this.addFilesToolStripMenuItem.Click += new System.EventHandler(this.addFilesToolStripMenuItem_Click); + // + // toolStripMenuItem2 + // + this.toolStripMenuItem2.Name = "toolStripMenuItem2"; + this.toolStripMenuItem2.Size = new System.Drawing.Size(168, 6); + // + // cdf + // + this.cdf.Name = "cdf"; + this.cdf.Size = new System.Drawing.Size(171, 22); + this.cdf.Text = "Delete current file"; + this.cdf.Click += new System.EventHandler(this.cdf_Click); + // + // toolStripMenuItem1 + // + this.toolStripMenuItem1.Name = "toolStripMenuItem1"; + this.toolStripMenuItem1.Size = new System.Drawing.Size(168, 6); + // + // clist + // + this.clist.Name = "clist"; + this.clist.Size = new System.Drawing.Size(171, 22); + this.clist.Text = "Clear list"; + this.clist.Click += new System.EventHandler(this.clist_Click); + // + // label3 + // + this.label3.AutoSize = true; + this.label3.Dock = System.Windows.Forms.DockStyle.Top; + this.label3.Location = new System.Drawing.Point(0, 0); + this.label3.Name = "label3"; + this.label3.Size = new System.Drawing.Size(219, 13); + this.label3.TabIndex = 2; + this.label3.Text = "User drag & drop or context menu to add file(s)"; + // + // MergeForm + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(734, 409); + this.Controls.Add(this.listBox1); + this.Controls.Add(this.label3); + this.Controls.Add(this.panel1); + this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); + this.Name = "MergeForm"; + this.Text = "Shapes Merger: Points, PolyLines, Polygons"; + this.panel1.ResumeLayout(false); + this.panel1.PerformLayout(); + this.contextMenuStrip1.ResumeLayout(false); + this.ResumeLayout(false); + this.PerformLayout(); + + } + + #endregion + + private System.Windows.Forms.Panel panel1; + private System.Windows.Forms.Label label1; + private System.Windows.Forms.Button button1; + private System.Windows.Forms.ListBox listBox1; + private System.Windows.Forms.Label label2; + private System.Windows.Forms.CheckBox wdbf; + private System.Windows.Forms.ContextMenuStrip contextMenuStrip1; + private System.Windows.Forms.ToolStripMenuItem addFilesToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem cdf; + private System.Windows.Forms.ToolStripSeparator toolStripMenuItem1; + private System.Windows.Forms.ToolStripMenuItem clist; + private System.Windows.Forms.CheckBox mbox; + private System.Windows.Forms.Label label3; + private System.Windows.Forms.Label label4; + private System.Windows.Forms.ToolStripSeparator toolStripMenuItem2; + } +} + diff --git a/SOLVER/ShapesMerger/MergeForm.cs b/SOLVER/ShapesMerger/MergeForm.cs new file mode 100644 index 0000000..5c63d50 --- /dev/null +++ b/SOLVER/ShapesMerger/MergeForm.cs @@ -0,0 +1,397 @@ +using System; +using System.IO; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.Text; +using System.Windows.Forms; + +namespace ShapesMerger +{ + public partial class MergeForm : Form + { + public int ShapeTypes = 0; + + public MergeForm() + { + InitializeComponent(); + this.AllowDrop = true; + this.DragEnter += new DragEventHandler(Form1_DragEnter); + this.DragDrop += new DragEventHandler(Form1_DragDrop); + } + + private void Form1_DragEnter(object sender, DragEventArgs e) + { + if (e.Data.GetDataPresent(DataFormats.FileDrop)) e.Effect = DragDropEffects.Copy; + } + + private void Form1_DragDrop(object sender, DragEventArgs e) + { + string[] files = (string[])e.Data.GetData(DataFormats.FileDrop); + foreach (string file in files) + { + if (Path.GetExtension(file).ToLower() != ".shp") continue; + FileInfo fi = new FileInfo(file); + ShapeInfo shi = new ShapeInfo(fi); + listBox1.Items.Add(shi); + }; + CheckEnabled(); + } + + private void CheckEnabled() + { + ShapeTypes = 0; + List shtps = new List(); + foreach (object obj in listBox1.Items) + { + ShapeInfo shi = (ShapeInfo)obj; + if (!shtps.Contains(shi.shpType)) shtps.Add(shi.shpType); + ShapeTypes = shi.shpType; + + }; + if (shtps.Count > 1) ShapeTypes = -1; + string st = "Unknown"; + if (ShapeTypes == -1) st = "Multi"; + if (ShapeTypes == 1) st = "Point"; + if (ShapeTypes == 3) st = "PolyLine"; + if (ShapeTypes == 5) st = "Polygon"; + label2.Text = String.Format("Shape Types: {0}", st); + + button1.Enabled = (listBox1.Items.Count > 1) && ((ShapeTypes == 1) || (ShapeTypes == 3) || (ShapeTypes == 5)); + } + + private void listBox1_KeyPress(object sender, KeyPressEventArgs e) + { + + } + + private void listBox1_KeyDown(object sender, KeyEventArgs e) + { + if ((e.KeyCode == Keys.Delete) && (listBox1.SelectedIndex >= 0)) + listBox1.Items.RemoveAt(listBox1.SelectedIndex); + + if ((e.Modifiers == Keys.Alt) && (listBox1.Items.Count > 1) && (listBox1.SelectedIndex >= 0)) + { + int si = listBox1.SelectedIndex; + if ((e.KeyCode == Keys.Up) && (si > 0)) + { + object obj = listBox1.Items[si]; + listBox1.Items.RemoveAt(si); + listBox1.Items.Insert(--si, obj); + listBox1.SelectedIndex = si; + }; + if ((e.KeyCode == Keys.Down) && (si < (listBox1.Items.Count - 1))) + { + object obj = listBox1.Items[si]; + listBox1.Items.RemoveAt(si); + listBox1.Items.Insert(++si, obj); + listBox1.SelectedIndex = si; + }; + }; + + if((e.KeyCode == Keys.Insert) || ((e.Modifiers == Keys.Control) && (e.KeyCode == Keys.O))) + { + OpenFD(); + return; + }; + + CheckEnabled(); + } + + private void OpenFD() + { + OpenFileDialog ofd = new OpenFileDialog(); + ofd.DefaultExt = ".shp"; + ofd.Filter = "Shape Files (*.shp)|*.shp"; + ofd.Title = "Add files ..."; + ofd.Multiselect = true; + if (ofd.ShowDialog() == DialogResult.OK) + { + foreach (string file in ofd.FileNames) + { + if (Path.GetExtension(file).ToLower() != ".shp") continue; + FileInfo fi = new FileInfo(file); + ShapeInfo shi = new ShapeInfo(fi); + listBox1.Items.Add(shi); + }; + CheckEnabled(); + }; + ofd.Dispose(); + } + + private void button1_Click(object sender, EventArgs e) + { + if (listBox1.Items.Count < 2) return; + + string resFile = null; + SaveFileDialog sfd = new SaveFileDialog(); + sfd.DefaultExt = ".shp"; + sfd.Filter = "Shape Files (*.shp)|*.shp"; + sfd.Title = "Save as ..."; + if (sfd.ShowDialog() == DialogResult.OK) + resFile = sfd.FileName; + sfd.Dispose(); + if (String.IsNullOrEmpty(resFile)) return; + + long ttlLength = 0; + List files = new List(); + foreach (object obj in listBox1.Items) + { + ShapeInfo shi = (ShapeInfo)obj; + ttlLength += shi.fileInfo.Length; + files.Add(shi.fileInfo.FullName); + }; + + MergeShapes(resFile, files.ToArray(), ttlLength, wdbf.Checked, mbox.Checked); + } + + private KMZRebuilder.WaitingBoxForm wbf = null; + private void MergeShapes(string resFile, string[] files, long ttlLength, bool wDBF, bool mDBF) + { + if (files == null) return; + if (files.Length < 2) return; + + wbf = new KMZRebuilder.WaitingBoxForm("Merging...", "Prepare", this); + wbf.Show(); + + DBFSharp.DBFFile dbff = null; + if (wDBF) + { + string fd = resFile.Replace(Path.GetExtension(resFile), ".dbf"); + dbff = new DBFSharp.DBFFile(fd, FileMode.Create); + DBFSharp.FieldInfos finfos = new DBFSharp.FieldInfos(); + finfos.Add("MERGE_ID", 020, DBFSharp.FieldType.Numeric); + finfos.Add("FILE_ID", 020, DBFSharp.FieldType.Numeric); + finfos.Add("FILE_NAME", 100, DBFSharp.FieldType.Character); + if (mDBF) + { + foreach (string file in files) + { + string md = file.Replace(Path.GetExtension(file), ".dbf"); + MergeDBFHeaders(finfos, md); + }; + }; + dbff.WriteHeader(finfos); + }; + FileStream f_to = new FileStream(resFile, FileMode.Create, FileAccess.Write); + int fCounted = 0; int rCounted = 0; long progress = 0; + foreach (string file in files) + { + FileStream f_from = new FileStream(file, FileMode.Open, FileAccess.Read); + if ((++fCounted) == 1) CopyShapeHeader(f_from, f_to); + CopyShapeBody(f_from, f_to, ref rCounted, ref progress, ttlLength, dbff, mDBF); + f_from.Close(); + }; + f_to.Close(); + if (dbff != null) dbff.Close(); + wbf.Hide(); + wbf = null; + MessageBox.Show( + "Merging done!\r\nTotal objects: "+rCounted.ToString(), + "Merging", + MessageBoxButtons.OK, MessageBoxIcon.Information); + } + + private void MergeDBFHeaders(DBFSharp.FieldInfos finfos, string fileName) + { + if (!File.Exists(fileName)) return; + DBFSharp.DBFFile tmpf = new DBFSharp.DBFFile(fileName, FileMode.Open); + DBFSharp.FieldInfos fff = tmpf.FieldInfos; + tmpf.Close(); + if (fff == null) return; + if (fff.Count == 0) return; + for (int i = 0; i < fff.Count; i++) + { + bool ex = false; + for (int y = 0; y < finfos.Count; y++) + { + if (finfos[y].GName == fff[i].GName) + ex = true; + if (finfos[y].BName(System.Text.Encoding.GetEncoding(1251)) == fff[i].BName(System.Text.Encoding.GetEncoding(1251))) + ex = true; + }; + if (!ex) + { + DBFSharp.FieldType ft = fff[i].FType; + //if(ft == DBFSharp.FieldType.Float) ft = DBFSharp.FieldType.Numeric; + //if(ft == DBFSharp.FieldType.Integer) ft = DBFSharp.FieldType.Numeric; + byte fl = fff[i].FLength; + if (fl < 10) fl = (byte)10; + finfos.Add(new DBFSharp.FieldInfo(fff[i].FName, fl, fff[i].FDecimalPoint , ft)); + }; + }; + } + + private void CopyShapeHeader(FileStream fromFile, FileStream toFile) + { + byte[] arr = new byte[100]; + fromFile.Position = 0; + toFile.Position = 0; + fromFile.Read(arr, 0, arr.Length); + toFile.Write(arr, 0, arr.Length); + toFile.Flush(); + } + + private void CopyShapeBody(FileStream fromFile, FileStream toFile, ref int recordsCounted, ref long progress, long ttlLength, DBFSharp.DBFFile dbff, bool mDBF) + { + string dName = fromFile.Name.Replace(Path.GetExtension(fromFile.Name),".dbf"); + string fName = Path.GetFileName(fromFile.Name); + string tName = Path.GetFileName(toFile.Name); + + DBFSharp.DBFFile tmp_dbf = null; + if (mDBF && File.Exists(dName)) + tmp_dbf = new DBFSharp.DBFFile(dName, FileMode.Open); + + progress += 100; + fromFile.Position = 100; + byte[] recHeader = new byte[8]; + uint infile_counter = 0; + while (fromFile.Position < fromFile.Length) + { + // READ + fromFile.Read(recHeader, 0, recHeader.Length); + int recordNumber = ShapeInfo.readIntBig(recHeader, 0); + int contentLength = ShapeInfo.readIntBig(recHeader, 4); + byte[] recData = new byte[contentLength * 2]; + fromFile.Read(recData, 0, recData.Length); + // WRITE + ShapeInfo.writeIntBig(ref recHeader, 0, ++recordsCounted); + toFile.Write(recHeader, 0, recHeader.Length); + toFile.Write(recData, 0, recData.Length); + // DBF + if (dbff != null) + { + Dictionary rec = new Dictionary(); + rec.Add("MERGE_ID", recordsCounted); + rec.Add("FILE_ID", recordNumber); + rec.Add("FILE_NAME", fName); + if (tmp_dbf != null) + { + Dictionary recs = tmp_dbf.ReadRecord(++infile_counter); + foreach (KeyValuePair kvp in recs) + { + if (rec.ContainsKey(kvp.Key)) + rec[kvp.Key] = kvp.Value; + else + rec.Add(kvp.Key, kvp.Value); + }; + }; + dbff.WriteRecord(rec); + }; + // PROGRESS + progress += 8 + contentLength * 2; + if (wbf != null) + { + double pc = 100.0 * (((double)progress) / ((double)ttlLength)); + wbf.Text = String.Format(System.Globalization.CultureInfo.InvariantCulture, + "Merging file {0} to {4}, total: {1}/{2} - {3:0.00}%", fName, progress, ttlLength, pc, tName); + }; + }; + toFile.Flush(); + if (tmp_dbf != null) tmp_dbf.Close(); + } + + private void addFilesToolStripMenuItem_Click(object sender, EventArgs e) + { + OpenFD(); + } + + private void contextMenuStrip1_Opening(object sender, CancelEventArgs e) + { + cdf.Enabled = listBox1.SelectedIndex >= 0; + clist.Enabled = listBox1.Items.Count > 0; + } + + private void clist_Click(object sender, EventArgs e) + { + listBox1.Items.Clear(); + CheckEnabled(); + } + + private void cdf_Click(object sender, EventArgs e) + { + if (listBox1.SelectedIndex < 0) return; + listBox1.Items.RemoveAt(listBox1.SelectedIndex); + CheckEnabled(); + } + + private void wdbf_CheckedChanged(object sender, EventArgs e) + { + mbox.Enabled = wdbf.Checked; + } + } + + public class ShapeInfo + { + public FileInfo fileInfo; + public int shpType = 0; + + public ShapeInfo(FileInfo fi) + { + this.fileInfo = fi; + LoadShapeType(); + } + + private void LoadShapeType() + { + FileStream shapeFileStream = new FileStream(fileInfo.FullName, FileMode.Open, FileAccess.Read); + long shapeFileLength = shapeFileStream.Length; + if (shapeFileLength < 100) + { + shapeFileStream.Close(); + return; + }; + + byte[] shapeFileData = new byte[100]; + shapeFileStream.Read(shapeFileData, 0, shapeFileData.Length); + shapeFileStream.Close(); + + this.shpType = readIntLittle(shapeFileData, 32); + } + + public static int readIntLittle(byte[] data, int pos) + { + byte[] bytes = new byte[4]; + bytes[0] = data[pos]; + bytes[1] = data[pos + 1]; + bytes[2] = data[pos + 2]; + bytes[3] = data[pos + 3]; + return BitConverter.ToInt32(bytes, 0); + } + + public static int readIntBig(byte[] data, int pos) + { + byte[] bytes = new byte[4]; + bytes[0] = data[pos]; + bytes[1] = data[pos + 1]; + bytes[2] = data[pos + 2]; + bytes[3] = data[pos + 3]; + Array.Reverse(bytes); + return BitConverter.ToInt32(bytes, 0); + } + + public static void writeIntBig(ref byte[] data, int pos, int val) + { + byte[] arr = BitConverter.GetBytes(val); + Array.Reverse(arr); + Array.Copy(arr, 0, data, pos, 4); + } + + public string ShapeType + { + get + { + if (shpType == 1) return "Point"; + if (shpType == 3) return "PolyLine"; + if (shpType == 5) return "Polygon"; + return "Unknown"; + } + } + + public override string ToString() + { + return String.Format("{0} as [{2}] at {1}", fileInfo.Name, fileInfo.Directory, ShapeType); + } + } +} \ No newline at end of file diff --git a/SOLVER/ShapesMerger/MergeForm.resx b/SOLVER/ShapesMerger/MergeForm.resx new file mode 100644 index 0000000..44b3d7c --- /dev/null +++ b/SOLVER/ShapesMerger/MergeForm.resx @@ -0,0 +1,1568 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 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 + + + 17, 17 + + + + + AAABAAYAICAAAAEACACoCAAAZgAAABAQAAABAAgAaAUAAA4JAACAgAAAAQAgACgIAQB2DgAAMDAAAAEA + IACoJQAAnhYBACAgAAABACAAqBAAAEY8AQAQEAAAAQAgAGgEAADuTAEAKAAAACAAAABAAAAAAQAIAAAA + AAAAAAAAAAAAAAAAAAAAAQAAAAAAAP///wDM//8Amf//AGb//wAz//8AAP//AP/M/wDMzP8Amcz/AGbM + /wAzzP8AAMz/AP+Z/wDMmf8AmZn/AGaZ/wAzmf8AAJn/AP9m/wDMZv8AmWb/AGZm/wAzZv8AAGb/AP8z + /wDMM/8AmTP/AGYz/wAzM/8AADP/AP8A/wDMAP8AmQD/AGYA/wAzAP8AAAD/AP//zADM/8wAmf/MAGb/ + zAAz/8wAAP/MAP/MzADMzMwAmczMAGbMzAAzzMwAAMzMAP+ZzADMmcwAmZnMAGaZzAAzmcwAAJnMAP9m + zADMZswAmWbMAGZmzAAzZswAAGbMAP8zzADMM8wAmTPMAGYzzAAzM8wAADPMAP8AzADMAMwAmQDMAGYA + zAAzAMwAAADMAP//mQDM/5kAmf+ZAGb/mQAz/5kAAP+ZAP/MmQDMzJkAmcyZAGbMmQAzzJkAAMyZAP+Z + mQDMmZkAmZmZAGaZmQAzmZkAAJmZAP9mmQDMZpkAmWaZAGZmmQAzZpkAAGaZAP8zmQDMM5kAmTOZAGYz + mQAzM5kAADOZAP8AmQDMAJkAmQCZAGYAmQAzAJkAAACZAP//ZgDM/2YAmf9mAGb/ZgAz/2YAAP9mAP/M + ZgDMzGYAmcxmAGbMZgAzzGYAAMxmAP+ZZgDMmWYAmZlmAGaZZgAzmWYAAJlmAP9mZgDMZmYAmWZmAGZm + ZgAzZmYAAGZmAP8zZgDMM2YAmTNmAGYzZgAzM2YAADNmAP8AZgDMAGYAmQBmAGYAZgAzAGYAAABmAP// + MwDM/zMAmf8zAGb/MwAz/zMAAP8zAP/MMwDMzDMAmcwzAGbMMwAzzDMAAMwzAP+ZMwDMmTMAmZkzAGaZ + MwAzmTMAAJkzAP9mMwDMZjMAmWYzAGZmMwAzZjMAAGYzAP8zMwDMMzMAmTMzAGYzMwAzMzMAADMzAP8A + MwDMADMAmQAzAGYAMwAzADMAAAAzAP//AADM/wAAmf8AAGb/AAAz/wAAAP8AAP/MAADMzAAAmcwAAGbM + AAAzzAAAAMwAAP+ZAADMmQAAmZkAAGaZAAAzmQAAAJkAAP9mAADMZgAAmWYAAGZmAAAzZgAAAGYAAP8z + AADMMwAAmTMAAGYzAAAzMwAAADMAAP8AAADMAAAAmQAAAGYAAAAzAAAAAADuAAAA3QAAALsAAACqAAAA + iAAAAHcAAABVAAAARAAAACIAAAARAADuAAAA3QAAALsAAACqAAAAiAAAAHcAAABVAAAARAAAACIAAAAR + AADuAAAA3QAAALsAAACqAAAAiAAAAHcAAABVAAAARAAAACIAAAARAAAA7u7uAN3d3QC7u7sAqqqqAIiI + iAB3d3cAVVVVAERERAAiIiIAERERAAAAAAD///////////////////////////////////////////// + ///////////////////////////////////////////9/f2r9P///////////f39/f39/f39/f39/f3/ + //////2qq3+qq/T///////+rVFRUVFRUVFRUVFRUq////////aqrf39/qqv0/////6tUVFRUVKqqVFRU + VFSr///////9qqt/VFRUf6qr9P//q1RUVFRUAABUVFRUVKv///////2qq39UVFRUVH+qq/SrVFRUVFQA + AFRUVFRUq////////aqrf1RUVFRUVFR/qqoqKioqKioqKioqKiqq///////9qqt/VFRUVFRUVFRUqqqq + qoBVrKxVgKqqqqr///////2qq39UVFRUVFRUVFRUVH+qq6z29qz//////////////aqrf1RUVFRUVFRU + VFRUVFSs9vb29qz////////////9qqt/VFRUVFRUVFRUVFRU/PX19fX19fz///////////2qq39UVFRU + VFRUVFRUVPv19fX19fX19fv//////////aqrVCoqKioqKioqKir7AAAAAAAAAAAAAPv////////9qqur + qyoqKioqKioqKoCBgYEAAAAAgYGBgf////////2qf6qrKioqKioqKioqKioqgQAAAACB//////////// + /YB/f6sqKioqKioqKioqKiqBAAAAAIH////////////9f39/q6urKioqKioqKioqKvmBgYGB+/////// + //////1/f39/f6sqKioqKioqKioqKioqKiqA/////////////X9/f39/qyoqKioqKioqKioqKioqKoD/ + ///////////9f35/f3+rq6sqKioqKioqKioqKioqgP////////////1/fn5/f39/qyoqKioqKioqKioq + KiqA////////////q4B/fn5+f3+rKioqKioqKioqKioqKoD///////////+rq39/flpUVKuqVCoqKioq + KioqKioqgP////////////+rq39+WlRUVH+rqlQqKioqKioqKiqA//////////////+rf1RaVFRUVFR+ + q6pUKioqKioqKoD//////////////6urqn9UVFRUf1RUfquqVCoqKioqf/////////////////+rq6p/ + VH+rgH9UVFSrqlT1Kip/////////////////////q6urq/+rq4B/VFRUq6pU9X////////////////// + ////////////q6uAf1RUVKuAf////////////////////////////////6urgH9UgP////////////// + //////////////////////+rq4CA////////////gB///4AH//8AAAAHgAAAB4AAAAfAAAAHwAAAB8AA + AAfAAAAHwAAAH8AAAA/AAAAPwAAAD8AAAA/AAAAPwAAAP8AAAH/AAAB/wAAAf8AAAH/AAAB/wAAAf8AA + AH/AAAB/4AAAf/AAAH/wAAB//AAAf/8IAH///gB///+B////4f8oAAAAEAAAACAAAAABAAgAAAAAAAAA + AAAAAAAAAAAAAAABAAAAAAAA////AMz//wCZ//8AZv//ADP//wAA//8A/8z/AMzM/wCZzP8AZsz/ADPM + /wAAzP8A/5n/AMyZ/wCZmf8AZpn/ADOZ/wAAmf8A/2b/AMxm/wCZZv8AZmb/ADNm/wAAZv8A/zP/AMwz + /wCZM/8AZjP/ADMz/wAAM/8A/wD/AMwA/wCZAP8AZgD/ADMA/wAAAP8A///MAMz/zACZ/8wAZv/MADP/ + zAAA/8wA/8zMAMzMzACZzMwAZszMADPMzAAAzMwA/5nMAMyZzACZmcwAZpnMADOZzAAAmcwA/2bMAMxm + zACZZswAZmbMADNmzAAAZswA/zPMAMwzzACZM8wAZjPMADMzzAAAM8wA/wDMAMwAzACZAMwAZgDMADMA + zAAAAMwA//+ZAMz/mQCZ/5kAZv+ZADP/mQAA/5kA/8yZAMzMmQCZzJkAZsyZADPMmQAAzJkA/5mZAMyZ + mQCZmZkAZpmZADOZmQAAmZkA/2aZAMxmmQCZZpkAZmaZADNmmQAAZpkA/zOZAMwzmQCZM5kAZjOZADMz + mQAAM5kA/wCZAMwAmQCZAJkAZgCZADMAmQAAAJkA//9mAMz/ZgCZ/2YAZv9mADP/ZgAA/2YA/8xmAMzM + ZgCZzGYAZsxmADPMZgAAzGYA/5lmAMyZZgCZmWYAZplmADOZZgAAmWYA/2ZmAMxmZgCZZmYAZmZmADNm + ZgAAZmYA/zNmAMwzZgCZM2YAZjNmADMzZgAAM2YA/wBmAMwAZgCZAGYAZgBmADMAZgAAAGYA//8zAMz/ + MwCZ/zMAZv8zADP/MwAA/zMA/8wzAMzMMwCZzDMAZswzADPMMwAAzDMA/5kzAMyZMwCZmTMAZpkzADOZ + MwAAmTMA/2YzAMxmMwCZZjMAZmYzADNmMwAAZjMA/zMzAMwzMwCZMzMAZjMzADMzMwAAMzMA/wAzAMwA + MwCZADMAZgAzADMAMwAAADMA//8AAMz/AACZ/wAAZv8AADP/AAAA/wAA/8wAAMzMAACZzAAAZswAADPM + AAAAzAAA/5kAAMyZAACZmQAAZpkAADOZAAAAmQAA/2YAAMxmAACZZgAAZmYAADNmAAAAZgAA/zMAAMwz + AACZMwAAZjMAADMzAAAAMwAA/wAAAMwAAACZAAAAZgAAADMAAAAAAO4AAADdAAAAuwAAAKoAAACIAAAA + dwAAAFUAAABEAAAAIgAAABEAAO4AAADdAAAAuwAAAKoAAACIAAAAdwAAAFUAAABEAAAAIgAAABEAAO4A + AADdAAAAuwAAAKoAAACIAAAAdwAAAFUAAABEAAAAIgAAABEAAADu7u4A3d3dALu7uwCqqqoAiIiIAHd3 + dwBVVVUAREREACIiIgAREREAAAAAAP/9/f39/f39/f39/f39/f//q1RUVFRUVFRUVFRUVKv//6tUVFRU + VKqqVFRUVFSr//+rVFRUVFQAAFRUVFRUq///q1RUVFRUAABUVFRUVKv//6oqKioqKioqKioqKiqq//+q + qqqqgFWsrFWAqqqqqv////////+s9vas//////////////+s9vb29qz////////////89fX19fX1/P// + ///////79fX19fX19fX7///////7AAAAAAAAAAAAAPv/////gYGBgQAAAACBgYGB/////////4EAAAAA + gf////////////+BAAAAAIH/////////////gYGBgYGB//////+AAQAAgAGAAYABgAGAAYABgAGAAYAB + gAGAAYAB/D+AAfgf/D/wD/gf4AfwD8AD4AfAA8AD+B/AA/gf+B/4H/gfKAAAAIAAAAAAAQAAAQAgAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AAAAAAEAAAABAAAAAQAAAAEAAAAB////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8AAAAAAQAAAAEAAAACAAAAAgAA + AAIAAAADAAAAAgAAAAIAAAABAAAAAQAAAAH///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AAAAAAEAAAACAAAAAwAAAAUAAAAFAAAABgAAAAYAAAAGAAAABQAAAAQAAAADAAAAAgAA + AAEAAAAB////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AAAAAAEAAAABAAAAAwAAAAUAAAAHAAAACgAA + AA4AAAAPAAAADwAAAA4AAAANAAAACgAAAAcAAAAFAAAABAAAAAIAAAABAAAAAf///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wAAAAABAAAAAQAAAAMAAAAGAAAACgAAAA8AAAAWAAAAGwAAAB8AAAAgAAAAHwAAABoAAAAWAAAAEAAA + AA0AAAAIAAAABQAAAAQAAAACAAAAAQAAAAH///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AAAAAAEAAAADAAAABgAAAAwAAAATAAAAHQAA + ACgAAAAxAAAANwAAADkAAAA3AAAAMQAAACkAAAAgAAAAGQAAABIAAAANAAAACAAAAAUAAAAEAAAAAgAA + AAEAAAAB////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wAAAAABAAAAAgAAAAUAAAALAAAAFAAAACAAAAAwAAAAPwAAAE0AAABWAAAAWQAAAFcAAABPAAAARQAA + ADkAAAAtAAAAIgAAABkAAAASAAAADQAAAAgAAAAFAAAABAAAAAIAAAABAAAAAf///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AAAAAAEAAAAEAAAACAAAABAAAAAeAAAAMAAA + AEUAAABaAAAAbAAAAHgAAAB9AAAAewAAAHMAAABmAAAAVwAAAEkAAAA7AAAALgAAACIAAAAZAAAAEgAA + AA0AAAAIAAAABQAAAAQAAAACAAAAAQAAAAH///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wAAAAABAAAAAgAAAAUAAAALAAAAFwAAACgAAAA/AAAAWQAAAHMuGhuYXjY3uIZNTs9rPj7CAAAAlQAA + AIkAAAB6AAAAagAAAFkAAABJAAAAOwAAAC4AAAAiAAAAGQAAABIAAAANAAAACAAAAAUAAAAEAAAAAgAA + AAEAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAICAgD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AAAAAAEAAAACAAAABgAAAA0AAAAaAAAALwAA + AEk4ICF7pV9g0dl9fv/Dbm//w25v/9R6e//FcnP1aDw8yQAAAJsAAACMAAAAfAAAAGoAAABZAAAASgAA + ADsAAAAuAAAAIgAAABkAAAASAAAADQAAAAgAAAAFAAAABAAAAAIAAAABAAAAAQAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAgICAP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8AAAAAAQAAAAMAAAAGAAAADgAAABsAAAAxYDk5btV8fPa+a2v/jElJ/4BAQP+AQED/i0hI/9t/ + gP/Zfn//xXFy9mc7PMoAAACcAAAAjQAAAHwAAABqAAAAWQAAAEoAAAA7AAAALgAAACIAAAAZAAAAEgAA + AA0AAAAIAAAABQAAAAQAAAACAAAAAQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAgMA////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wAAAAABAAAAAgAAAAUAAAANAAAAGT8m + JjrWgIHoumhp/4VDQ/+EQ0P/gkJC/4JCQv+BQUH/3YKD/+CFhv/dgoP/2X5//8VxcvZnOzzKAAAAnAAA + AI0AAAB8AAAAagAAAFkAAABKAAAAOwAAAC4AAAAiAAAAGQAAABIAAAANAAAACAAAAAUAAAAEAAAAAgAA + AAEAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAICAwD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wAAAAACAAAABQAAAAoAAAAUyHt7ktR9ff+NSUn/h0VF/4ZERP+FQ0P/hEND/4JC + Qv/ghof/5Y2O/+KIif/ghYb/3YKD/9l+f//FcXL2Zzs8ywAAAJwAAACNAAAAfAAAAGoAAABZAAAASgAA + ADsAAAAuAAAAIgAAABkAAAASAAAADQAAAAgAAAAFAAAABAAAAAIAAAABAAAAAQAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwMDAP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AAAAAAEAAAADAAAABwAA + AA7ijI3UuWhp/4pGRv+JRkb/iEVF/4dFRf+GRET/hUND/+SLi//rlZX/6JCR/+aOj//jiYr/4IWG/92C + g//Zfn//xXFy9mc7PMsAAACcAAAAjQAAAHwAAABqAAAAWQAAAEoAAAA7AAAALgAAACIAAAAZAAAAEgAA + AA0AAAAIAAAABQAAAAQAAAACAAAAAQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFBQUA////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8AAAAAAQAAAAIAAAAFAAAACeuUlP+WT0//jEhI/4tHR/+KRkb/iUZG/4hF + Rf+HRUX/546P//Kdnf/umZn/65WV/+iQkf/mjo//44mK/+CFhv/dgoP/2X5//8VxcvZnOzzLAAAAnAAA + AI0AAAB8AAAAagAAAFkAAABKAAAAOwAAAC4AAAAiAAAAGQAAABIAAAANAAAACAAAAAUAAAAEAAAAAgAA + AAEAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUG + BQD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8AAAAAAQAA + AAIAAAAF7piY/45KSv+NSUn/jEhI/4xISP+LR0f/i0dH/4pGRv/qkpP/9aGh//WgoP/ynZ3/7pmZ/+uV + lf/okZL/5o6P/+OJiv/ghYb/3YOE/9p+f//FcXL2Zzs8ywAAAJwAAACNAAAAfAAAAGoAAABZAAAASgAA + ADsAAAAuAAAAIgAAABgAAAASAAAADAAAAAgAAAAFAAAABAAAAAIAAAABAAAAAQAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABwcIAP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8AAAAAAQAAAAPynJz/kEtL/49KSv+OSkr/jUlJ/4xI + SP+MSEj/jEhI/+yWl//1oaH/9aGh//Whof/1oKD/8p2d/+6Zmf/slpb/6ZGS/+aOj//jiYr/4IaH/92D + hP/afn//xXFy9mc7PMsAAACcAAAAjQAAAHwAAABqAAAAWQAAAEoAAAA7AAAALgAAACIAAAAZAAAAEgAA + AA0AAAAIAAAABQAAAAQAAAACAAAAAQAAAAH6+/oA+vv6APr7+QAAAAABAAAAAQAAAAEAAAABAAAAAfv7 + +gD6+fkA////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8AAAAAAfSgoP+STU3/kUxM/5BMTP+PS0v/jkpK/41JSf+MSEj/8Jub//Wiov/1oqL/9aGh//Wh + of/1oaH/9aCg//Kdnf/umZn/7JaW/+mRkv/mjo//44mK/+CGh//dg4T/2n5//8VxcvZnOzzLAAAAnAAA + AI0AAAB8AAAAagAAAFkAAABKAAAAOwAAAC4AAAAiAAAAGQAAABIAAAANAAAACAAAAAUAAAAEAAAAAgAA + AAIAAAACAAAAAgAAAAMAAAAFAAAABQAAAAUAAAADAAAAAgAAAAH4+fkA+vn5AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A9aGh/5VPT/+TTk7/kk1N/5JN + Tf+RTEz/j0tL/45KSv/znp7/9aKi//Wiov/1oqL/9aKi//Whof/1oaH/9aGh//WgoP/ynZ3/75mZ/+yW + lv/pkZL/546P/+SLjP/gh4j/3YOE/9p+gP/FcXL2Zzs8ywAAAJwAAACNAAAAfAAAAGoAAABZAAAASgAA + ADsAAAAuAAAAIgAAABkAAAASAAAADQAAAAkAAAAHAAAABwAAAAcAAAAJAAAADAAAAA4AAAAOAAAADQAA + AAkAAAAGAAAABAAAAAIAAAAB9/f4APb29QD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD1oqL/l1FR/5ZQUP+VT0//k05O/5NOTv+STU3/kUxM//Whof/1o6P/9aOj//Wi + ov/1oqL/9aKi//Wiov/1oaH/9aGh//Whof/1oaH/8p6e/++Zmf/slpb/6ZGS/+eOj//ki4z/4IeI/92D + hP/bfn//xXFz9mc7PM0AAACcAAAAjQAAAHwAAABqAAAAWQAAAEoAAAA6AAAALQAAACMAAAAaAAAAFQAA + ABMAAAASAAAAEwAAABgAAAAbAAAAHQAAAB0AAAAZAAAAFAAAAA4AAAAJAAAABQAAAAMAAAAAAAAAAfX1 + 9QD19fUA////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////APWjo/+ZU1P/mFJS/5dR + Uf+WUFD/lU9P/5RPT/+TTk7/9aKi//akpP/1o6P/9aOj//Wjo//1o6P/9aKi//Wiov/1oqL/9aGh//Wh + of/1oaH/9aGh//Kenv/vmZn/7JaW/+mSk//njo//5IuM/+CHiP/ehIX/3H+A/8Vyc/dnOzzLAAAAnAAA + AIwAAAB8AAAAagAAAFkAAABLAAAAPQAAADIAAAArAAAAJwAAACYAAAApAAAALAAAAC4AAAAwAAAALgAA + ACkAAAAiAAAAGgAAABIAAAANAAAACAAAAAQAAAACAAAAAQAAAAHx8vIA////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A9aSk/5tUVP+bVFT/mVNT/5hSUv+XUVH/llBQ/5VQUP/1pKT/9qSk//ak + pP/2pKT/9aOj//Wjo//1o6P/9aOj//Wiov/1oqL/9aKi//Whof/1oaH/9aGh//Whof/ynp7/75mZ/+2X + l//qkpP/546P/+SLjP/gh4j/3oSF/9x/gP/GcXL2Zzs8zAAAAJwAAACNAAAAewAAAGsAAABdAAAAUwAA + AE0AAABKAAAARwAAAEYAAABGAAAARgAAAEIAAAA+AAAAOAAAADEAAAAoAAAAIAAAABcAAAAQAAAACwAA + AAcAAAAEAAAAAgAAAAHw7u4A7vDvAP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD2paX/nVZW/51W + Vv+cVVX/m1RU/5pTU/+YUlL/l1FR//anp//2paX/9qWl//akpP/2pKT/9qSk//Wjo//1o6P/9aOj//Wj + o//1oqL/9aKi//Wiov/1oaH/9aGh//Whof/1oaH/8p6e/++Zmf/tl5f/6pKT/+eOj//ki4z/4IeI/96E + hf/cf4H/xnFz92c7PMwAAACbAAAAjgAAAIIAAAB5AAAAdAAAAHEAAABuAAAAZwAAAGEAAABbAAAAVAAA + AE4AAABFAAAAPQAAADUAAAAtAAAAJAAAABwAAAAUAAAADgAAAAkAAAAEnVtbINGFhGEAAAAB6+vrAOvq + 6gD///8A////AP///wDm5uYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAABkYGQD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////APampv+gWVn/n1hY/55XV/+dVlb/nFVV/5tUVP+aU1P/9qmp//al + pf/2paX/9qWl//alpf/2pKT/9qSk//akpP/1o6P/9aOj//Wjo//1o6P/9aKi//Wiov/1oqL/9aGh//Wh + of/1oaH/9aGh//Kenv/wmpr/7ZeX/+qSk//nj5D/5I2N/+GHiP/ehIX/3YCB/8RycvZjOTrMAAAAogAA + AJ4AAACaAAAAlgAAAJEAAACHAAAAfAAAAHEAAABmAAAAXAAAAFEAAABKAAAAQQAAADkAAAAxAAAAKQAA + ACAAAAAXdENELahiYaasZGT/5piV//ampeP0pqZhAAAAAf/29gD///8A////AOLh4gAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGx0cAP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A9qen/6Jb + W/+hWlr/oFlZ/59YWP+eV1f/nVZW/5xVVf/2q6v/9qam//ampv/2paX/9qWl//alpf/2paX/9qSk//ak + pP/2pKT/9aOj//Wjo//1o6P/9aOj//Wiov/1oqL/9aKi//Whof/1oaH/9qGh//Whof/zoJ//8Jqa/+2X + l//qkpP/54+Q/+SMjf/ih4j/24OD/9R7e/+xZWX3TS0t1gAAALgAAAC2AAAArQAAAKIAAACWAAAAiQAA + AHwAAABwAAAAYwAAAFgAAABOAAAARQAAADwAAAAyTy4uRaJgXq2vZmf/rmZm/61lZf/kmJj/96an//im + p//2pabi9KKjYP708gD/9fQA393fAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfHyAA////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD2qKj/pF1d/6NcXP+iW1v/oVpa/6FaWv+gWVn/nldX//at + rP/2p6f/9qam//ampv/2pqb/9qWl//alpf/2paX/9qWl//akpP/2pKT/9qSk//Wjo//1o6P/9aOj//Wj + o//1oqL/9aKi//Wiov/1oaH/9aGh//Whof/1oaH/9J+f//Camv/tl5f/6pKT/+aPkP/giYr/1H+A/8Bz + dP+pYWL/gUtL+jgfIOAAAADFAAAAuwAAAK8AAAChAAAAlAAAAIYAAAB4AAAAawAAAF4AAABTTS0sbJtb + W7qzaGj/sWho/7FoaP+xaGj/sWho/+Wamf/3qKf/9qam//ampv/2paX/9qSk0/Ojozz/8/QAKSAiAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACMj + JAD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////APao + qP+nX1//pV5e/6RdXf+jXFz/oltb/6JbW/+hWlr/9q6u//anp//2p6f/9qen//ampv/2pqb/9qam//al + pf/2paX/9qWl//alpf/2pKT/9qSk//akpP/1o6P/9aOj//Wjo//1o6P/9aKi//Wiov/1oqL/9aGh//Wh + of/1oaH/9aGh//Ofn//wmpr/7ZaX/+WRkf/Xhob/vnR1/6FgYf+JUlP/fktL/3BAQfo1HR/kAAAAxAAA + ALoAAACtAAAAnwAAAI8AAACCSywslqBfXtu2bGz/smtr/7Jqa/+za2v/s2tr/7Nra/+ya2r/5p2b//ip + qP/2qKj/9qen//ampv/2pqb/9qWl//alpcPzpKM8LiMjADQqKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJSQlAP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A9qip/6lhYf+oYGD/p19f/6ZeXv+kXV3/o1xc/6Nc + XP/3sbH/96io//anp//2p6f/9qen//anp//2pqb/9qam//ampv/2paX/9qWl//alpf/2paX/9qSk//ak + pP/2pKT/9aOj//Wjo//1o6P/9aOj//Wiov/1oqL/9aKi//Whof/1oaH/9aGh//Whof/yn57/6JWV/9iK + iv+7d3b/nGBi/4RRUv96SUr/eUdI/3tISf9xQEP7Nh8f4gAAAMIAAAC1OiIjv5pdXei2bW//t21t/7Zs + bP+1bGz/tWxs/7Ztbf+2bW3/tm1t/7Rsav/onJz/96qr//epqf/3qan/9qio//anp//2p6f/9qam//am + pv/2paXG96apOjssKgA+MzEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAApKSkA////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD2qar/q2Ji/6piYv+pYWH/qGBg/6dfX/+mXl7/pF1d//ezs//3qKj/96io//eoqP/2p6f/9qen//an + p//2p6f/9qam//ampv/2pqb/9qWl//alpf/2paX/9qWl//akpP/2pKT/9qSk//Wjo//1o6P/9aOj//Wj + o//1oqL/9aKi//Wiov/1oaH/9aGh//Kfn//qmZn/1o2M/7d2dv+XYGH/f1FQ/3dJSv92SEn/eEhJ/3tK + Sv9+SUr/hkxO/J9dXvq8cXH/uG9w/7dubv+4bm7/uG5u/7hubv+4bm7/uG5u/7lvb/+5b2//t21u/+mf + nv/5q6v/96qq//eqqv/3qan/96mp//eoqP/2p6f/9qen//ampv/2pqb/9qamxvinpzpHNDYASz4+AAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAC0tLAD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////APaqq/+tZGT/rGNj/6tjY/+qYmL/qWFh/6hg + YP+nX1//97W1//epqf/3qan/96io//eoqP/3qKj/96io//anp//2p6f/9qen//ampv/2pqb/9qam//am + pv/2paX/9qWl//alpf/2pKT/9qSk//akpP/1o6P/9aOj//Wjo//1o6P/9aKi//Wiov/0oaH/8Z6f/+ia + mP/QiYr/snV0/5FfX/98UFD/dEdJ/3JISP9yR0j/hlNT/6xoZv+7cHH/uW9x/7lvb/+6cHD/unBw/7pw + cP+6cHD/unBw/7pwcP+6cHD/u3Fx/7txcf+5b27/6aCg//mtr//4rKz/+Kur//erq//3qqr/96mp//ep + qf/3qKj/9qio//anp//2p6f/9qam//ampsj5qKs4VENDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAMDAwAP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A96us/7BmZv+uZWX/rWRk/61kZP+sY2P/qmJi/6lhYf/3trb/96qq//epqf/3qan/96mp//eo + qP/3qKj/96io//eoqP/2p6f/9qen//anp//2pqb/9qam//ampv/2pqb/9qWl//alpf/2paX/9qSk//ak + pP/2pKT/9qSk//Wjo//1o6P/9aOj//Shof/vnp7/45eX/8uEhv+mbW3/hVlZ/3NNTf9rRkf/ilhY/7Rt + bf+9cnL/vnJz/71ycv+8cnL/vHJy/7xycv+8cnL/vHJy/71zc/+9c3P/vXNz/71zc/++dHT/vnR0/7tx + cf/soqL/+a6v//iurv/4ra3/+Kys//isrP/3q6v/96qq//eqqv/3qan/96mp//aoqP/2p6f/9qen//am + pf/6qqnI+bS1NgECAAABAAAAAQIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0NDMA////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD3rK3/smho/7FnZ/+wZmb/rmVl/65l + Zf+tZGT/rGNj//i5uf/3qqr/96qq//eqqv/3qan/96mp//epqf/3qKj/96io//eoqP/3qKj/9qen//an + p//2p6f/9qam//ampv/2pqb/9qam//alpf/2paX/9qWl//akpP/2pKT/9qSk//akpP/1o6P/9KKi/+6f + oP/flJP/wYCA/5xoZv96UVD/illY/7Zubv/CdHb/wHR0/750dP+/dHT/v3R0/790dP+/dHT/v3V1/791 + df+/dXX/wHV1/8B1df/AdXX/wHV1/8F2dv/Bdnb/vnR0/+ylpf/5sLL/+K+v//ivr//4rq7/+K6u//it + rf/4rKz/+Kur//eqqv/3qqr/96mp//epqf/3qKj/9qen//anp/74q6v/+6+wyPq5uzUBAQIBcmNjAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAADc2NgD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////APetrv+0amr/s2lp/7JoaP+xZ2f/sGZm/69mZv+uZWT/+Lu7//erq//3qqr/96qq//eq + qv/3qqr/96mp//epqf/3qan/96io//eoqP/3qKj/96io//anp//2p6f/9qen//ampv/2pqb/9qam//am + pv/2paX/9qWl//alpf/2pKT/9qSk//ekpP/0o6P/6p2c/9qRkP+3e3v/o2hn/7pwcf/Ednb/wXZ1/8J2 + dv/Bdnb/wXZ2/8F2dv/Bdnb/wXZ2/8F2dv/Cd3f/wnd3/8J3d//Cd3f/wnd3/8J3d//Cd3f/w3d3/8N4 + ef/BdHT/7aOl//mztP/5sbH/+LCw//ivr//4r6//+K6u//iurv/4ra3/+Kys//irq//3q6v/96qq//eq + qv/3qan/96io//aoqP72p6f/+qyr/fupq8r6sbMye1taAHtkZAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAODk5AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A966v/7dsbP+2a2v/tGpq/7Np + af+yaGj/sWdn/7BnZ//4vb7/96ur//erq//3q6v/96qq//eqqv/3qqr/96qq//epqf/3qan/96mp//eo + qP/3qKj/96io//eoqP/2p6f/9qen//anp//2pqb/9qam//ampv/2pqb/9qWl//alpf/2paX/9qSk//Si + o//hlpX/zomK/752d//Ed3j/w3d3/8J3d//Cd3f/w3h4/8N4eP/DeHj/w3h4/8R4eP/EeHj/xHh4/8R5 + ef/EeXn/xHl5/8R5ef/FeXn/xXl5/8V5ef/FeXn/xnp7/8N4d//tqKf/+bOz//mysv/5sbH/+bGx//mw + sP/4r6//+K+v//iurv/4rq7/+K2t//isrP/4rKz/96ur//eqqv/3qqr/96mp//epqf/2qKj+9qen/van + p/72pabM+6ysMoJgXwCCamsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAA8PDwA////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD3r7D/uG1t/7htbf+3bGz/tmtr/7Vqav+zaWn/s2lp//i+vv/4rKz/+Kys//er + q//3q6v/96ur//eqqv/3qqr/96qq//eqqv/3qan/96mp//epqf/3qKj/96io//eoqP/3qKj/9qen//an + p//2p6f/9qam//ampv/2pqb/9qam//alpf/3paX/86Sk/+CVlv/Miov/vnZ2/8V5ef/FeXn/xXl5/8V5 + ef/GeXn/xnp6/8Z6ev/Genr/x3p6/8d6ev/Henr/x3p6/8d7e//He3v/x3t7/8h7e//Ie3v/yHt7/8h7 + e//KfHz/yHp3/+6rqv/6t7X/+bS0//mzs//5srL/+bKy//mxsf/5sbH/+LCw//ivr//4r6//+K6u//iu + rv/4ra3/+Kys//irq//3qqr/96qq//epqf/3qan/96io//anp/72p6f/9qenzfusrDKGZGQAhW1uAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD5BQAD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////APewsf+6b2//uW5u/7lu + bv+4bW3/t2xs/7Zra/+1amr/+MDB//isrP/4rKz/+Kys//isrP/3q6v/96ur//erq//3qqr/96qq//eq + qv/3qqr/96mp//epqf/3qan/96io//eoqP/3qKj/96io//anp//2p6f/9qen//ampv/2pqb/9qam//am + pv/zpKT/35aX/8yKi//BeXj/yXt7/8h7e//Ie3v/yHt7/8h7e//JfHz/yXx8/8l8fP/JfX3/yX19/8l9 + ff/JfX3/yn19/8p9ff/KfX3/yn5+/8p+fv/Kfn7/yn5+/8t/gP/Je3v/8Kyq//u4t//6tbX/+bW1//m0 + tP/5s7P/+bKy//mysv/5sbH/+bGx//mwsP/4r6//+K+v//iurv/4rq7/+K2t//isrP/3q6v/96ur//eq + qv/3qqr/96mp//epqf/2qKj/9qen//anp8/7ra0viGVkAINtbQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAQD9BAP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A97Cx/71xcf+8cHD/um9v/7pvb/+5bm7/uG1t/7dsbP/5w8P/+K2t//it + rf/4rKz/+Kys//isrP/4rKz/96ur//erq//3q6v/96qq//eqqv/3qqr/96qq//epqf/3qan/96mp//eo + qP/3qKj/96io//eoqP/2p6f/9qen//anp//2pqb/9qam//Skpf/fl5f/y4iJ/794eP/LfX3/yn5+/8p+ + fv/Kfn7/yn5+/8t/f//Lf3//y39//8t/f//Mf3//zH9//8x/f//MgID/zICA/8yAgP/NgID/zYCA/82A + gP/NgID/zoCA/8p8fP/zraz//Lm4//q3t//6trb/+ra2//m1tf/5tLT/+bOz//mysv/5srL/+bGx//mx + sf/5sLD/+K+v//ivr//4rq7/+K+u//esrf/2raz/+Kyr//mqrP/3qqr/96qq//epqf/3qan/9qio//an + p//2p6fP+q6tMYNhYgB/aGkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABCREIA////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD3sbL/v3Nz/75y + cv+9cXH/vHFx/7twcP+6b2//uW1u//nGxf/4rq7/+K2t//itrf/4ra3/+K2t//isrP/4rKz/+Kys//er + q//3q6v/96ur//erq//3qqr/96qq//eqqv/3qan/96mp//epqf/3qKj/96io//eoqP/3qKj/9qen//an + p//3p6j/86Sl/9+Xl//LiYr/wHx7/82AgP/NgID/zYCA/82AgP/NgID/zoGB/86Bgf/OgYH/zoGB/8+B + gf/PgYH/z4GB/8+Cgv/PgoL/z4KC/8+Cgv/QgoL/0IKC/9CCgv/QgoL/z31+//Our//9vLr/+7i4//q3 + t//6t7f/+ra2//q2tv/6tbX/+bS0//m0tP/5s7P/+bKy//mysv/5sbH/+bGx//iwsP/3rq7/9Kyu//Wp + qP/wpqv/9auu//eqq//4rK3/96qq//eqqv/3qan/96mp//eoqP/2p6b/9qamzvqtrTF8XFwAdWBhAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAENERAD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////APiys//Cdnb/wHR0/79zc/++cnL/vXFx/7xxcf+7cHD/+cfH//iu + rv/4rq7/+K6u//itrf/4ra3/+K2t//itrf/4rKz/+Kys//isrP/3q6v/96ur//erq//3q6v/96qq//eq + qv/3qqr/96mp//epqf/3qan/96mp//eoqP/3qKj/96io//anp//0p6b/4JeY/8yJif/DfXz/0ISD/9CC + gv/QgoL/0IKC/9CCgv/QgoL/0YOD/9GDg//Rg4P/0YOD/9GDg//Rg4P/0YOD/9KEhP/ShIT/0oSE/9KE + hP/ShIT/0oSE/9KFhP/QgIL/9bCz//66uv/7ubn/+7m5//u4uP/6uLj/+re3//q2tv/6trb/+rW1//m1 + tf/5tLT/+bOz//mysv/5srL/+LOw//itrf/uqKf/5Z+f/9aRkP/Jhoj/2JGR//isrv/7r67/+Kys//er + q//3qqr/96qq//epqf/3qan/9qio//anp837rK0ycFNUAGpWVgAAAAAAAAAAAAAAAAAAAAAARUVEAP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A+LO0/8R4 + eP/Dd3f/wnZ2/8F1df+/c3P/v3Nz/75ycv/5ycn/+K6v//ivr//4rq7/+K6u//iurv/4ra3/+K2t//it + rf/4ra3/+Kys//isrP/4rKz/96ur//erq//3q6v/96ur//eqqv/3qqr/96qq//epqf/3qan/96mp//ep + qf/3qKj/+Kio//Wnp//gl5j/y4iJ/8V+ff/ThYT/0oSE/9KEhP/ShIT/0oSE/9KEhP/ThYX/04WF/9OF + hf/UhYX/1IWF/9SFhf/UhYX/1IaG/9SGhv/Uhob/1YaG/9WGhv/Vhob/1YaG/9KBf//2s7X//L69//u7 + u//7urr/+7q6//u5uf/7ubn/+ri4//q3t//6t7f/+ra2//q2tv/5tbX/+bS0//mzs//4sbL/8q2r/+Oh + n//NjYz/vICA/7d+ev+xcXP/vHVz//2urv/4ra3/+K2t//isrP/4q6v/96qq//eqqv/3qan/96mp//eo + qP/2pqfL+qyrNmNKSQBbS0oAAAAAAAEBAABFRkgA////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD4tLX/xnl5/8V5ef/EeHj/w3d3/8J2dv/BdXX/wHN0//rL + y//4r6//+K+v//ivr//4r6//+K6u//iurv/4rq7/+K2t//itrf/4ra3/+K2t//isrP/4rKz/+Kys//er + q//3q6v/96ur//erq//3qqr/96qq//eqqv/3qan/96mp//epqf/3qqn/9aan/+GYmf/Lior/x39//9aH + hv/Uhob/1YaG/9WGhv/Vhob/1YaG/9aHh//Wh4f/1oeH/9aHh//XiIj/14iI/9eIiP/XiIj/14iI/9eI + iP/YiYn/2ImJ/9iJif/ZiYn/0oCB//a1tf/8vb3/+729//u8vP/7u7v/+7q6//u6uv/7ubn/+7m5//u4 + uP/6t7f/+re3//q2tv/6trb/+rW1//i2tP/yrKz/15aT/7yDhv+/iYb/zK+s/9bY0f/X19f/5sXE//qr + q//7ra3/+K+u//itrf/4rKz/+Kur//eqqv/3qqr/96mp//epqf/3qKj/9qioyfqrqjhUPj0ATDQ1AEZF + RwD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////APi1 + tv/Ie3v/x3p6/8Z6ev/FeXn/xHh4/8N3d//CdnX/+s3N//mwsP/5sLD/+K+v//ivr//4r6//+K+v//iu + rv/4rq7/+K6u//itrf/4ra3/+K2t//itrf/4rKz/+Kys//isrP/3q6v/96ur//erq//3q6v/96qq//eq + qv/3qqr/96mp//epqf/2qKj/4Zma/8qJiv/Rg4T/14iI/9eIiP/YiYn/2ImJ/9iJif/YiYn/2YqK/9mK + iv/Zior/2YqK/9mKiv/Zior/2YqK/9qLi//ai4v/2ouL/9qLi//ai4v/2ouL/9qLi//Ug4L//MbG///A + v//8vr7//L6+//u9vf/7vLz/+7u7//u7u//7urr/+7m5//u5uf/7uLj/+ri4//q3t//6t7f/+7m0//Kt + r//OjY3/vYWC/8+3t//e4OD/5efm/+fo6//l6+3/78zK//iqrP/4r6//+K6u//iurv/4ra3/+Kys//is + rP/3q6v/96qq//eqqv/3qan/96mp//eoqMf1pKY7QycnAP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A+LW3/8p9ff/JfHz/yXx8/8h7e//Henr/xnl5/8R4 + eP/60M//+bGx//mwsP/5sLD/+bCw//ivr//4r6//+K+v//ivr//4rq7/+K6u//iurv/4ra3/+K2t//it + rf/4ra3/+Kys//isrP/4rKz/96ur//erq//3q6v/96ur//eqqv/3qqr/96uq//aoqP/jmpz/yYqJ/9yL + i//bi4v/2ouL/9qLi//ai4v/2ouL/9qLi//bjIz/24yM/9uMjP/bjIz/3IyM/9yMjP/cjIz/3IyM/9yN + jf/cjY3/3I2N/92Njf/djY3/3Y+N/9eEg//+y8z//L/A//y/v//8v7///L6+//y+vv/8vb3/+7y8//u8 + vP/7u7v/+7q6//u6uv/7ubn/+7m5//q4uP/6trf/+re4/92ZnP/Afn3/4ePl/+bp5v/r6ur/7u7u/+7w + 8P/r6en/+quq//mwsP/4sLD/+K+v//ivr//4rq7/+K2t//itrf/4rKz/+Kur//eqqv/3qqr/96mp//ep + qf/2o6N0////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD4trj/zH9//8t+fv/KfX3/yXx8/8l8fP/Ie3v/x3l5//rS0f/5sbH/+bGx//mxsf/5sLD/+bCw//mw + sP/4r6//+K+v//ivr//4r6//+K6u//iurv/4rq7/+K2t//itrf/4ra3/+K2t//isrP/4rKz/+Kys//er + q//3q6v/96ur//erq//3qqr/9aup/+ObnP/KiYr/342N/9yNjf/cjY3/3Y2N/92Njf/djY3/3Y2N/96N + jf/ejo7/3o6O/96Ojv/fjo7/346O/9+Ojv/fjo7/34+P/9+Pj//fj5D/4I+P/9+Ojv/dh4n/1np9//7G + xP/9v8D//L29//zAwP/8wMD//L+///y/v//8vr7//L6+//u9vf/7vLz/+7u7//u6uv/7urr/+7m5//27 + uf/7ubv//Li2/8mFgP/g7Ov/6eno//T08v/29/b/9vj3//H29//6qqr/+bKy//mxsf/5sbH/+LCw//iv + r//4r6//+K6u//iurv/4ra3/+Kys//irq//3q6v/96qq//ampoD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////APi3uf/PgYH/zoCA/81/f//Lfn7/y35+/8p9 + ff/JfHz/+tPT//mysv/5sbH/+bGx//mxsf/5sbH/+bCw//mwsP/5sLD/+K+v//ivr//4r6//+K+v//iu + rv/4rq7/+K6u//itrf/4ra3/+K2t//itrf/4rKz/+Kys//isrP/3q6v/96ur//irq//1qqr/5pyc/8mK + jP/hjo7/34+P/9+Pj//fj4//4I+P/+CPj//gj4//4I+P/+GQkP/hkJD/4ZCQ/+GQkP/hkZH/4ZGR/+GR + kv/ikpH/4o+Q/+GNiv/ehYX/24qJ//G2tf/97Ov///Hy//7g4P//x8f//b7A//y+wP/8wcH//MDA//y/ + v//8v7///L6+//y+vv/7vb3/+7y8//u7u//7u7v/+7q6//u6uv//vr3//La3/+bd3f/m7e3/9vT3//79 + /v///v3/9OPg//qvr//5s7P/+bKy//mysv/5sbH/+bGx//mwsP/4r6//+K+v//iurv/4rq7/+K2t//is + rP/4rKz/96emgP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///4A+Li6/9GDg//QgoL/z4GB/86AgP/Nf3//zH5+/8p+fv/61NT/+bKy//mysv/5srL/+bKy//mx + sf/5sbH/+bGx//mwsP/5sLD/+bCw//ivr//4r6//+K+v//ivr//4rq7/+K6u//iurv/4ra3/+K2t//it + rf/4ra3/+Kys//isrP/4rKz/96ur//Wrqv/knp7/x4uM/+SRkv/ikZH/4pGR/+KRkf/ikpL/4pKS/+KS + kv/ikpL/45OT/+OTk//jk5P/45OT/+SUk//kkZP/5JCP/+CLjv/fhIT/7Kek//zU1P//9PT//PLw/+W7 + u/+6gYP/887N///z8f//4eH//srK//29vP/8vr3//MHB//zAwP/8v7///L+///y+vv/8vr7//L29//u8 + vP/7vLz/+7u7//u6uv/9uLj//bi1/+zl4//y+vv/9fz8//fu7f/6s7P/+rS2//m1tf/5tLT/+bOz//mz + s//5srL/+bKy//mxsf/5sLD/+LCw//ivr//4r6//+K6u//iurv/4qKmA////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD5ubv/04SE/9KEhP/Rg4P/0IKC/8+B + gf/OgID/zICA//vX2P/5s7P/+bOz//mysv/5srL/+bKy//mysv/5sbH/+bGx//mxsf/5sLD/+bCw//mw + sP/5sLD/+K+v//ivr//4r6//+K6u//iurv/4rq7/+K6u//itrf/4ra3/+K2t//isrP/4rKz/96yr/+Sd + n//HjIv/55ST/+SUlP/klJT/5JSU/+WUlP/llJT/5ZSU/+WUlP/mlZX/5pWV/+aVlv/mlJP/55CQ/+WH + iP/jk5P/+cTG//7r6//+9Pb/88/W/8OWlf+cWln/omNk/6RkY/+eYFz/toJ+/+rFxv//8/L//+rq//7O + zf//vbv//b+///zAvf/8wsH//MDA//y/v//8v7///L6+//y+vv/7vb3/+7y8//u7u//7trf//bOz//6v + rv/7r6///bGy//q0tP/6t7f/+ra2//q2tv/6tbX/+bS0//m0tP/5s7P/+bKy//mysv/5sbH/+bGx//iw + sP/4r6//+K+v//iqqoD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////APq5u//Vhob/1YaG/9SFhf/ThIT/0oOD/9CCgv/PgIH/+9ra//m0tP/5s7P/+bOz//mz + s//5srL/+bKy//mysv/5srL/+bGx//mxsf/5sbH/+bCw//mwsP/5sLD/+bCw//ivr//4r6//+K+v//iu + rv/4rq7/+K6u//iurv/4ra3/+K2t//itrf/3rKz/5Z+f/8mLi//rlpj/55aW/+eWlv/nlpb/6JaW/+iW + lv/olpb/6JeW/+iWlv/nlJX/54yM/+eJiP/wr6///d7d///19//86un/1qeq/6hua/+jYWL/r25s/7B2 + df+zeHj/sXt6/7B1df+qbmv/o15j/6Vqaf/hurf//fDt//7m6P/+09L//cHA//29v//8wMD//MLB//zA + wP/8v7///L+///y+vv/8vr7//L29//u8vP/7u7z/+7u7//u6uv/7urv/+7m5//u5uf/6uLj/+re3//q3 + t//6trb/+ra2//m1tf/5tLT/+bOz//mysv/5srL/+bGx//mxsf/5sLD/+K2sgP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///4A+bq8/9iIiP/Xh4f/1oaG/9WG + hv/UhYX/04SE/9KDg//729v/+bO0//m0tP/5tLT/+bOz//mzs//5s7P/+bKy//mysv/5srL/+bKy//mx + sf/5sbH/+bGx//mwsP/5sLD/+bCw//mwsP/4r6//+K+v//ivr//4rq7/+K6u//iurv/4rq7/+K2t//ev + rf/ln6D/xIqK/+2YmP/pl5f/65iY/+qYmP/qmJj/6piY/+mYlv/pkZD/6ImI/+6dnf/8zs///vHz//72 + 9v/jub3/wI6N/59hX/+lbGz/sXV1/7J4eP+zeXr/sXp5/7J3d/+xd3b/sHd2/7F7eP+udXX/rHFx/6Vo + Z/+qb27/3K6w//rb3v/96eH//9na///BwP/9vcD//MHA//zBwf/8wMD//L+///y/v//8vr7//L6+//y9 + vf/7vb3/+7y8//u7u//7urr/+7q6//u5uf/7ubn/+ri4//q3t//6t7f/+ra2//q2tv/6tbX/+bS0//mz + s//5s7P/+bKy//mysv/5ra2A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD5u73/2oqK/9mJif/YiIj/14iI/9aHh//Vhob/1IWF//zc3P/6tbX/+bS0//m0 + tP/5tLT/+bS0//mzs//5s7P/+bOz//mysv/5srL/+bKy//mysv/5sbH/+bGx//mxsf/5sLD/+bCw//mw + sP/5sLD/+K+v//ivr//4r6//+K6u//iurv/4rq7/+K+w/+agn//Ii4v/65iX/+OWlv/snJv/7Jqa/+qV + l//rkpD/65KT//m4uf/+5uT//vb1//HW0v/GlpT/nWJc/6ZoZ/+ydXX/uH16/7R5eP+yeHb/r3l3/7F5 + ef+vdnX/r3p1/652dP+wdnX/sHZ2/7B2dv+xd3f/rnZ1/6pxcv+scG//sHRy/8qZmf/tzNL//+Tl//7a + 2v/9ycX//b6+//3Bwf/8wcH//MHD//zAwP/8v7///L+///y+vv/8vr7/+729//u8vP/7u7v/+7q6//u6 + uv/7ubn/+7m5//u4uP/6t7f/+re3//q2tv/6trb/+rW1//m0tP/5tLT/+bOz//murYD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////APm8vv/djIz/24uL/9qK + iv/ZiYn/2IiI/9iIiP/Vh4f//N/g//q0tf/6tbX/+rW1//m0tP/5tLT/+bS0//m0tP/5s7P/+bOz//mz + s//5srL/+bKy//mysv/5srL/+bGx//mxsf/5sbH/+bCw//mwsP/5sLD/+bCw//ivr//4r6//+K+v//iu + rv/4ra3/5p+h/8uOjv/llZf/4JKR/+2Vl//vkZX/86+v//3Pzv/+9PX//O/w/963tf+fXmD/i0lL/5hZ + XP+jZ2f/qHNw/6Rubf+lcG//qnFx/652df+rcG//rnJx/6tzcf+rdnL/rXNy/650df+vdXX/r3V1/7B2 + ev+wdnX/sXd2/7F5d/+xdnb/tHt6/7N7eP/EjIv/5Ly9//7o6f/+3tr//8bE//29u//9wsH//L7B//zB + xP/8wMD//L+///y/v//8vr7//L6+//y9vf/7vLz/+7y8//u7u//7urr/+7q6//u5uf/7ubn/+ri4//q3 + t//6t7f/+ra2//q2tv/5tbX/+bGxgP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A+b2//9+Ojv/ejY3/3YyM/9yLi//aior/2oqK/9mHif/84+H/+rW2//q2 + tv/6tbX/+rW1//q1tf/5tLT/+bS0//m0tP/5tLT/+bOz//mzs//5s7P/+bKy//mysv/5srL/+bKy//mx + sf/5sbH/+bGx//mwsP/5sLD/+bCw//mwsP/4r6//+K+v//izsP/moKH/0ZGO/+WTlf/ll5j/5Kmp//3n + 6v/99fT/8M/N/7iFg/+RUE3/j05Q/5NXV/+VXVn/ll1g/5ZdXP+dX2H/n2Vj/6BnZv+eZWT/oGdn/6lr + a/+ocG7/pm1s/6hubf+pb27/qnBw/61ycv+tdHT/r3V1/7B3dv+wenb/sXh2/7J4cf+venv/tnl7/7Z9 + eP+yfHn/voyE/9uxs//+3Ob//tve//3Lyv/9vr7//cC///zAwP/8wcH//MDA//zAwP/8v7///L6+//y+ + vv/8vb3/+729//u8vP/7u7v/+7q6//u6uv/7ubn/+7m5//u4uP/6t7f/+re3//q2tv/5s7OA////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A//7/AP///wD5vsD/4ZCQ/+CP + j//fjo7/3o2N/92MjP/ci4v/24qK//zk5f/6tbb/+ra2//q2tv/6trb/+rW1//q1tf/6tbX/+bS0//m0 + tP/5tLT/+bS0//mzs//5s7P/+bOz//mysv/5srL/+bKy//mysv/5sbH/+bGx//mxsf/5sLD/+bCw//mw + sP/5sLD/+rCw/+Oen//Yk5X/5LKz/+zDw//txcX/1aKh/59eXf+MTU3/mVZY/5peXf+dYF7/ml9h/5tf + X/+aXl7/mF5d/5hfXv+aYF3/m2Nh/5tjYv+fYmP/nmVk/51lZf+iZ2X/o2ho/6Vqav+mbGz/qW9v/6tz + dP+tdHb/sXV1/7B3dv+xeHr/sXh3/7J4eP+0eHn/s3l6/7h9fv+8gIL/v4SB/8aNjf/2zM3//ubk//7e + 4P//ycr//cG9//3AwP/9wsL//MHB//zBwv/8wMD//L+///y/v//8vr7//L6+//u9vf/7vLz/+7u7//u6 + uv/7urr/+7m5//u5uf/7uLj/+ri4//m0tID///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///4A//7+APm/wf/jkpL/4pGR/+GQkP/gj4//346O/96Njf/diov//OXm//q3 + t//6t7f/+re3//q2tv/6trb/+ra2//q1tf/6tbX/+rW1//m0tP/5tLT/+bS0//m0tP/5s7P/+bOz//mz + s//5srL/+bKy//mysv/5srL/+bGx//mxsf/5sbH/+bCw//mwsP/8sbH/56Gi/9CPkP/Vn6D/s3t8/51e + YP+ASUX/d0ZK/3xLTP+FUVH/j1hZ/6FhYv+eYWH/ml9e/5hcXf+YXVz/ll1c/5hcXf+WX2P/m2Fg/5th + YP+cYWD/nGBh/5tjYv+eYmP/n2Zl/6JoaP+lamv/qG5u/6txcP+tc3X/rnZ2/7B1df+xd3j/snp2/7R4 + eP+2env/uYB8/71+gf/Dgoj/yYeG/7d+ff/GjI3/88jK//7m4//+39///s3N//3Awf/9wb///cLB//zB + wf/8wcH//MDA//y/v//8v7///L6+//y+vv/8vb3/+7y8//u8vP/7u7v/+7q6//u6uv/7ubn/+7a3gP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///gD//v8A+sHC/+WU + k//kk5P/45KS/+KRkf/hkJD/4I+P/9+Njf/85uf/+re2//q3t//6t7f/+re3//q3t//6trb/+ra2//q2 + tv/6tbX/+rW1//q1tf/6tbX/+bS0//m0tP/5tLT/+bOz//mzs//5s7P/+bOz//mysv/5srL/+bKy//mx + sf/5sbH/+bGx//qwsP/7srH/+bGv/+ihov/ZlZX/vH+A/5hiZP+AUlL/fExL/4FPT/9+T07/ek9N/4tV + Vv+ZX17/nGBg/5tgXP+aXFz/lFtc/5ddXf+aXl3/mFxd/5hgXf+XXFz/mWBi/5phYf+cYmL/nGRk/6Fj + Z/+kbGr/p2xs/6pvbv+scXH/rnJy/7J0dP+zeXj/tXV1/7Z1d/+3eXf/tXR2/6xxcv+rcXL/s3l6/8aI + if/QkJb/1p+e/+3Dw//+5+v//uHj//7Ozv/9vr///cHC//3Bwv/8wcH//MHB//zAwP/8wMD//L+///y/ + v//8vr7//L29//u9vf/7vLz/+7u7//u6uv/7t7eA////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A//7/AP/+/gD6wcP/55aW/+aVlf/llJT/5JOT/+STk//ikZH/4I6Q//3q + 6v/6uLj/+ri4//q4uP/6t7f/+ra3//q3tv/6trf/+rW2//q2tv/6trb/+rW1//q1tf/6tbX/+rW1//m0 + tP/5tLT/+bS0//mzs//5s7P/+bOz//mzs//5srL/+bKy//mysv/5sbH/+bGx//mxsf/5sbD/+LCy//my + r//6tbT/96+w/9CQj/+lam3/hVNT/3tNTf9/TU//glBN/35OSf+AUFD/j1dX/5ldXf+ZXFz/mF1b/5Zc + XP+WV1v/llxb/5dcXP+XXV3/mF5c/5leX/+bYGD/nV9j/59kZf+iaGj/pWpq/6hvcP+ubnD/rXFw/69v + cf+sb2//p21t/6hqbf+scHL/snN1/7d1fP+/f4D/x4eH/8yMjf/Ri47/zY2O/9aXnf/wx8P//+nr//7i + 5P/+1NL//cPB//3Cwv/9wsL//cLC//zBwf/8wcH//MDA//y/v//8v7///L6+//y+vv/7vb3/+7y8//q6 + uYD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///4A//7/APrC + xP/ql5f/6ZeX/+iWlv/mlZX/5pWV/+WUlP/jk5P//ezs//vFxf/7xcb/+8TE//vFxP/8xMT//MTD//zD + w//7wsL/+ri5//q2tv/6trb/+ra2//q1tf/6tbX/+rW1//q1tf/5tLT/+bS0//m0tP/5s7P/+bOz//mz + s//5s7P/+bKy//mysv/5srL/+bGx//mxsf/5sbH/+LCw//ivr//7s7T//ba2//utsf/Qj43/qG9x/4hW + Vf97TEv/fU5M/35NUP97Tkz/e0tM/4VPUf+TV1r/mV9b/5ZeW/+VWlr/lVpa/5ZbW/+WXF3/llxg/5dc + Xv+ZXl//m2Bh/6FpY/+gZmb/pmlm/6VpZ/+kZ2b/oGZm/6Vnaf+na2n/rG5w/7Byc/+2d3f/vXt7/8B/ + gf/EhIX/yYiJ/8yLi//NjI//04yQ/8+QkP/Wk5f/7Ly7//3l4//+4uL//9TT//3Gxf/9wML//cLA//3C + wv/8wcH//MHB//zAwP/8v7///L+///y+vv/8vr7//Ly8gP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD//v4A+sPF/+yamv/rmZn/6piY/+mXl//olpb/55aW/+aV + lf/rq6r/6amp/+qpqf/op6f/56am/+ekpP/mpKT/5aKi//bX1f/8wsP/+re3//q3t//6trb/+ra2//q2 + tv/6tbX/+rW1//q1tf/6tbX/+bS0//m0tP/5tLT/+bOz//mzs//5s7P/+bOz//mysv/5srL/+bKy//mx + sf/5sbH/+bGx//mxsf/6sLD//LGy//23tv/4srP/15eR/61xc/+LV1j/fEpK/3xJS/96Tkz/fExK/3lI + SP+BS03/i1hU/5pcXf+WWVz/lllZ/5NXWf+TWVv/lFpa/5ZdYP+WXFv/klFQ/5BQUP+WWFr/llla/51g + Yf+gZWb/pmhp/6prbf+vb3P/tXN0/7Z3e/+7e3v/v36A/8OBg//HhYf/yoWJ/82Ljf/QjpD/05OT/9WS + kv/Vkpb/25aa/+2/vv/73N3//uXi//3W1v/9xsX//cHC//3Dw//9wsL//cLC//zBwf/8wMD//MDA//y/ + v//8vb6A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A//7+AP// + /gD6w8f/7pub/+6bm//smpr/65mZ/+qYmP/pl5f/6JeX/+eWlv/mlZX/5ZSU/+STk//jkpH/4pCR/+GQ + kP/fjY3/9dHR//vDwv/6t7f/+re3//q3t//6t7f/+ra2//q2tv/6trb/+rW1//q1tf/6tbX/+rW1//m0 + tP/5tLT/+bS0//mzs//5s7P/+bOz//mzs//5srL/+bKy//mysv/5sbH/+bGx//mxsf/5sbH/+bCw//uz + sf/+uLT/+a+x/9qTk/+sdHP/h1ZU/3xMSv99TE//fUxL/3tKSv93SUn/fElJ/4VRUP+TWlr/lFlb/5NY + XP+SWFj/kFJX/4A7O/+mgH//4OHh/6iDg/+OTk3/m1xf/6JlZ/+nZ2j/q2ts/69vcP+zcnP/t3V2/7t7 + e/++fX7/woCD/8WDhf/Ihoj/y4mL/86Mjv/Rj5H/05KU/9aVl//al5z/3Zib/9uWmv/rt7r//drb//3i + 4v/91tf//cfI//3DxP/9wsL//cLC//3Cwv/8wcH//MHB//y/voD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD//v4A//7+APrDx//wnZ3/8J2d/++cnP/um5v/7Zqa/+uZ + mf/qmJj/6piY/+mXl//nlpb/5pWV/+WUlP/kk5P/5JOT/+KPj//21tX/+8TD//q2uP/6uLj/+re3//q3 + t//6t7f/+re3//q2tv/6trb/+ra2//q1tf/6tbX/+rW1//q1tf/5tLT/+bS0//m0tP/5s7P/+bOz//mz + s//5s7P/+bKy//mysv/5srL/+bGx//mxsf/5sbH/97Cw//evr//8sLH//La2//mxt//ZlZb/sXd4/4tc + Wv9+UFH/f05R/4FSUP97TU7/eElL/3RJS/+ATU3/gEpN/3A0M/+HZGL/1NfV/+bx8P/k7+v/2tLR/7GK + i/+ZVVf/oWNk/6ZmZ/+tamv/rm1u/7Jwcf+2dHX/uXd5/7x6fP/AfX//woCA/8aEhv/Jh4n/zIqM/8+M + j//SkJL/1JOV/9iWmf/bmZ3/3Zye/9+eoP/gnaH/77q8//vV1//+4OL//tnY//3Lyv/9xMT//cLD//3A + wv/9wsL//cDAgP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP/+ + /gD+//8A+sTI//Ofn//ynp7/8Z2d//Cdnf/vnJz/7pub/+2amv/rmZn/65mZ/+qYmP/pl5f/6JaW/+aV + lf/mlZX/5ZGT//fZ2f/8xMX/+7m5//q4uP/6uLj/+ri4//q3t//6t7f/+re3//q3t//6trb/+ra2//q2 + tv/6tbX/+rW1//q1tf/6tbX/+bS0//m0tP/5tLT/+bOz//mzs//5s7P/+bOz//mysv/5srL/+LGx//iw + sP/4sLD/+bCw//avr//0ra3/9K6q//atr//uqaj/4Jud/7h7d/+QXV7/gU5R/4BUUP98T0//dUJD/2Yv + L/92S0z/y8nK/+ry8f/h5eX/3dvf/9zf3P/e3eL/zLu9/5lYWv+cXlz/pmdl/6lnaf+ta2z/sW5v/7Rx + c/+4dXb/und5/757ff/BfoD/xIGD/8eFh//KiIr/zYqM/9COkP/SkZP/1ZSW/9iWmf/cmp3/3p2g/+Cg + o//joqX/5qOm/++1tv/60tP//uDf//3Y2f/9zs7//cPD//3Dw//9wMKA////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A//7+AP/+/gD6xcn/9aGh//SgoP/zn5//8p+f//Ge + nv/wnZ3/75yc/+6bm//tm5v/7Jqa/+uZmf/qmJj/6ZeX/+iWlv/llJT/99vZ//zFxv/7ubn/+7m5//u5 + uf/6uLj/+ri4//q4uP/6t7f/+re3//q3t//6t7f/+ra2//q2tv/6trb/+rW1//q1tf/6tbX/+rW1//m0 + tP/5tLT/+bS0//mzs//5s7P/+bOz//iysv/4sbH/+bGx//iysv/1rq7/9K6u/++qrf/sqKf/5KKl/9+d + n//am5z/zJGQ/8iNkP+xdnj/klpc/3dDRf97Skn/w729/+7y8f/j5Of/3Nzc/9vb2//d3N3/3N3c/+Hi + 4//c29r/rIOG/5dTVv+jX2H/pmVm/6poaf+vbG3/snBx/7ZzdP+4dnf/u3l6/798fv/Bf4H/xIKE/8iG + iP/LiYv/zYuN/9GPkf/TkpT/1pWX/9mXmv/cm57/356h/+KhpP/mo6f/56ap/+unrP/yubv/+M3N//3e + 3//929r//c7O//3Ew4D///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD+/v4A//7/APvGyv/1oaH/9aGh//Whof/0oKD/9KCg//Ofn//xnp7/8J2d/++cnP/um5v/7pub/+ya + mv/rmZn/6piY/+mTlP/53d3//MfH//u6uf/7urr/+7m5//u5uf/7ubn/+ri4//q4uP/6uLj/+re3//q3 + t//6t7f/+re3//q2tv/6trb/+ra2//q1tf/6tbX/+rW1//q1tf/5tLT/+bS0//m0tP/4srL/+LKy//iy + tP/2sbL/866u//CsrP/tqan/5qSk/+Ogov/Zmpr/0ZaV/8iNjf/AiIj/toKC/6dvcv+obG3/x7a1/+nv + 7//i6Oj/3ODd/9vZ2v/d3d3/3t7e/9/f3//f39//397f/+fr6v/Nvr3/j0tN/59aXP+jYmP/qGZn/6tp + av+wbm//tXFy/7Z0df+5d3j/vHp7/799f//CgIL/xoSG/8mHif/LiYv/zoyO/9GPkf/Uk5X/15WY/9qY + m//dm57/4J+i/+Oipf/npaj/6aiq/+yprf/vrLD/87i7//zY2P/93t3//dzds////wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP/+/wD//v4A+8fL//Whof/1oaH/9aGh//Wh + of/1oaH/9qGh//SgoP/zn5//8p6e//Cdnf/wnZ3/75yc/+6bm//tmpr/6paW//ne3//9yMj/+7m5//u6 + uv/7urr/+7q6//u5uf/7ubn/+7m5//q4uP/6uLj/+ri4//q4uP/6t7f/+re3//q3t//6trb/+ra2//q2 + tv/6trb/+rW1//q1tf/6tbX/+LOz//izs//3tLP/9bCw//Kurv/vrK3/6aio/+Sjo//cnZ3/1JeX/8qP + kP/CjIz/u4WG/7N7e/+pbW//wqin/+Do6P/h5OX/3Nzc/9zc2v/d3d3/3t7e/9/f3//f39//4ODg/+Dg + 4P/g4OD/4+bk/+Po6v+0jI3/lU1P/51eXv+lY2T/qWdo/61rbP+wb3D/tHJz/7d1dv+6eHn/vnt9/8B+ + gP/DgYP/xoSG/8qIiv/Mioz/z42P/9KQkv/Vk5b/2JaZ/9uZnP/enaD/4aCj/+Shpv/no6X/66qt//XF + xv/829r//d3e//3d3aL9290d////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A//3+AP/+/gD7yMz/9KGh//Whof/1oaH/9aGh//Whof/1oaH/9aGh//Whof/0oKD/85+f//Ke + nv/xnZ3/8J2d/++cnP/umJf/++Hi//zIyf/7ubr/+7u7//u6uv/7urr/+7q6//u6uv/7ubn/+7m5//u5 + uf/6uLj/+ri4//q4uP/6uLj/+re3//q3t//6t7f/+ra2//q2tv/6trb/+ra2//m0tP/5tLT/+LS0//Wx + sf/zr6//7a2s/+ioqP/ioqL/252d/9CXl//KkJD/voeK/7qBgf+zc3j/upSU/9ng4P/g4+L/3N/f/9rb + 2P/c3Nz/3d3d/97e3v/f39//4ODg/+Dg4P/h4eH/4eHh/+Hh4f/i4uP/5uro/9PIyP+TU1f/nFha/51f + YP+kY2T/qWhp/69rbf+xb3H/tXN0/7h2d/+7eXr/v3x+/8F/gf/EgoT/x4WH/8qIiv/Ni43/0I6Q/9OS + lP/WlJf/2Zea/9yZnf/enJ//5KWo//TIyv/829v//d7d8f3d3YD93+EOHBcZABgVFQD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD//v4A//7+APvJzv/1oaH/9aGh//Wh + of/1oaH/9aGh//Whof/1oaH/9aGh//Whof/1oaH/9KCg//Ofn//yn5//8Z6e//Camf/65OP//MrK//u8 + u//7u7v/+7u7//u7u//7urr/+7q6//u6uv/7urr/+7m5//u5uf/7ubn/+ri4//q4uP/6uLj/+ri4//q3 + t//6t7f/+re3//q2tv/5tbX/+bW1//q1tf/2srL/9rCw/+2srP/oqKj/4qOj/9uenv/UmZn/zZKT/8SL + iv+8gID/vo+P/9nZ2v/b5OT/3N7d/9va2//c3Nz/3Nzc/93d3f/f39//39/f/+Dg4P/h4eH/4eHh/+Li + 4v/i4uL/4uLi/+Pj4//k5ub/5ufq/7CNi/+TUVT/mVtc/6BgYf+lZGX/qmpq/65sbv+0cnL/tnR1/7l3 + eP+8env/v3x+/8KAgv/Fg4X/yIaI/8uJi//OjI7/0Y+R/9ORlP/Vkpb/4air//HFx//94OD//d/f5f7d + 3V7+4N4MIB8fABweHQAAAAAAFxgYAP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP/+/gD//f4A+8rO//WhoP/1oaH/9aGh//Whof/1oaH/9aGh//Whof/1oaH/9aGh//Wh + of/1oaH/9aGh//SgoP/0oKD/85uc//vm5v/8y8v/+7u7//u8vP/7vLz/+7u7//u7u//7u7v/+7q6//u6 + uv/7urr/+7q6//u5uf/7ubn/+7m5//q4uP/6uLj/+ri4//q4uP/6t7f/+re3//m2tv/5tbX/97S0//Sz + sv/ura3/6Kio/+KkpP/cn5//1Zqa/86UlP/Hio3/xIyM/9HNzv/d4uH/2eDe/9ra2v/b29v/29vb/9zc + 3P/d3d3/39/f/+Dg4P/g4OD/4eHh/+Li4v/i4uL/4+Pj/+Pj4//j4+P/5OTk/+Tj5P/p7Ov/1M7N/5Nb + W/+TUlX/nV1d/59gYf+mZWb/qWhq/69tcP+2cXL/t3V2/7p4ef+9e3z/wH1//8OBg//GhIf/yYeI/8mG + iP/Miov/3J+j//TPzv/+4OH//dXX//rDwrAsKCgAJiMlACMiJADg4OAAAAAAAAAAAAAUExQA////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A//79AP/+/gD7y8//9KGh//Wh + of/1oaH/9aGh//Whof/1oaH/9aGh//Whof/1oaH/9aGh//Whof/1oaH/9aGh//Whof/1np7//Obm//3L + zP/8vLz/+7y8//u8vP/7vLz/+7y8//u7u//7u7v/+7u7//u6uv/7urr/+7q6//u6uv/7ubn/+7m5//u5 + uf/6uLj/+ri4//q4uP/5t7f/+ba2//i2tv/1s7P/8bCw/+qrq//ipaX/3KCg/9Wamv/NlJT/xoiJ/822 + t//V29z/19vZ/9nY2f/Z2Nn/2tra/9vb2//c3Nz/3d3d/9/f3//g4OD/4ODg/+Hh4f/i4uL/4uLi/+Pj + 4//k5OT/5OTk/+Tk5P/l5eX/5eXl/+fm5v/u8fH/wK+t/4dGR/+VVln/mVtc/55gYf+laGb/qGhq/65s + bv+ycHL/t3h3/716e/++e33/wX1//8N/gv/Df4H/3aen//jY2v/94uL//NLU//iysf/2p6b/9qWlgP// + /wD///8A39/eAAAAAAAAAAAAAAAAABETEgD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD//f4A//3+APvM0P/1oaH/9aGh//Whof/1oaH/9aGh//Whof/1oaH/9aGh//Wh + of/1oaH/9aGh//Whof/1oaH/9aGh//Odnf/+6ur//czM//y6uv/8vLv//Ly7//u7uv/7ubr/+7u6//u6 + uv/7urr/+7u7//u7u//7urr/+7q6//u6uv/7urr/+7m5//u5uf/7ubn/+ri4//m3t//5t7f/97e4//Wz + s//urq7/5qmp/96gof/Um5v/z5WW/8WJi//Uw8L/2d7e/9ba2f/t8O//29va/9jW1//a2Nv/3Nzc/93d + 3f/f39//4ODg/+Dg4P/h4eH/4uLi/+Pj4//j4+P/5OTk/+Tk5P/l5eX/5eXl/+bm5v/m5ub/5+fn/+jq + 6//p7Oj/jmlr/4NJSP+VVlf/l1xb/5xfYP+hY2P/pmdr/6trbP+wb2//sHJ0/7d1dv+9en3/366w//nY + 2f/+4uT//MvJ//etrP/2qKj/96ip//epqf/4qKiA////AN3e3gAAAAAAAAAAAAAAAAAAAAAADxEQAP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP/+/gD//v4A+8zR//Wh + of/1oaH/9aGh//Whof/1oaH/9aGh//Whof/1oaH/9aGh//Whof/1oaH/9aGh//Whof/1oaH/9Z+f//zZ + 2v/84N7//Nnb//3c2v/72dv/+9nZ//zZ2f/719n//N3c//3j4//7urn/+7u7//u7u//7u7v/+7q6//u6 + uv/7urr/+7q6//u5uf/6uLj/+ri4//i3t//2tbX/8rKy/+utrf/jpqb/2Z+e/9KZmv/Hj4//zaur/+Xn + 5//p6+n/6+vs/+3t6//8/P7/8/Dz/+Dd4f/Z29n/293d/+Dg4P/g4OD/4eHh/+Li4v/j4+P/5OTk/+Tk + 5P/l5eX/5ubm/+fn5//n5+f/5+fn/+jo6P/o6Oj/6Ojo/+rs6//g4OD/cT5A/3ZCQf+OVVX/k1la/5pd + Xv+fYmP/oGFk/6hmZ/+5eXv/3a2s//vf3v/+4N7/+r6+//esq//2qKj/96qp//eqqv/3qqr/96mp//es + rIDe3d4AAAAAAAAAAAAAAAAAAAAAAAAAAAAPDxAA////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A//7+AP/+/gD8zdH/9aGh//Whof/1oaH/9aGh//Whof/1oaH/9aGh//Wh + of/1oaH/9aGh//Whof/1oaH/9aGh//Whof/1oKD/9Z+f//Senv/1nZ3/9Z2d//Wdnv/1nZ3/8pub//Oa + m//1sa///fDx//u3uf/7vLz/+7y8//u7u//7u7v/+7u7//u6uv/7urr/+7q6//q5uf/6uLj/+bi4//i2 + tv/xsrL/662t/+Onp//boaH/0ZaV/86dnf/n6u3/5+rr/+vq6f/q6ur/8PDx//Hw7//x7+//9vj3//r8 + +v/s6+r/3t7f/+Hh4f/i4uL/4+Pj/+Tk5P/k5OT/5eXl/+bm5v/n5+f/6Ojo/+jo6P/o6Oj/6enp/+np + 6f/p6en/6unq/+ru7//curj/oWFj/3lFR/+FT07/ilJU/5NVV/+wcXP/4rq5//3o5v/809P/+ra3//er + qv/4rKz/96ur//erq//3q6v/96qq//eqqv/3qqr/97GtgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwM + DQD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD//v4A//39APzO + 0//1oaD/9aGh//Whof/1oaH/9aGh//Whof/1oaH/9aGh//Whof/1oaH/9aGh//Whof/1oaH/9aGh//Wh + of/1oaH/9aGh//Whof/1oaH/9aGh//Whof/1oaH/9Z+e//eztf/+8/P//Lm4//y9vf/7vLz/+7y8//u8 + vP/7u7v/+7u7//u7u//7u7v/+rm5//q5uf/5ubr/97a2//Szs//srq7/5amp/96io//Wnp//5efm/+fq + 7P/t7u3/6+3t/+bn5f/i5OL/3+Dg/+Dg4P/j4+P/5ufo//n3+f/j4OD/4+Pj/+Pj4//k5OT/5OTk/+Xl + 5f/n5+f/6Ojo/+jo6P/p6en/6enp/+np6f/q6ur/6urq/+rq6v/q6ur/6Ovr/+bm5//wqKj/2pST/6ts + bv+td3j/78vJ//7j5f/7yMj/+a6u//isq//4raz/+Kyr//isrP/4rKz/+Kys//erq//3q6v/96ur//eq + qv/4rq2AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAwMAP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP/+/gD//v4A/M/T//Whof/1oaH/9aGh//Whof/1oaH/9aGh//Wh + of/1oaH/9aGh//Whof/1oaH/9aGh//Whof/1oaH/9aGh//Whof/1oaH/9aGh//Whof/1oaH/9aGh//Wh + of/1n5//+LW2//709f/8uLj//L29//y9vf/8vb3/+7y8//u8vP/7vLz/+7u7//u7u//6urr/+rq6//m5 + uf/3t7f/87S0/+6wsP/prKz/5Kio/92opv/h1tX/1NnZ/8rJzP/HyMj/ycfI/8rJyv/AwML/y8zO/7i7 + u/+trKz/rq6t/7q4uf/m6Of/5OTk/+Tk5P/l5eX/5+fn/+jo6P/o6Oj/6enp/+rq6v/q6ur/6urq/+vr + 6//r6+v/6+vr/+vr6//q6ur/5Ojo/+bPz//2qqr/9ays/++3uP/pqKj/7KGj//Spqf/4rq7/+K6u//it + rf/4ra3/+K2t//isrP/4rKz/+Kys//isrP/3q6v/96ur//isrIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAKCwkA////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A//79AP/+ + /gD80NT/9aCh//Whof/1oaH/9aGh//Whof/1oaH/9aGh//Whof/1oaH/9aGh//Whof/1oaH/9aGh//Wh + of/1oaH/9aGh//Whof/1oaH/9aGh//Whof/1oaH/9aGh//Sgn//3tbX//vf1//y5uf/8vr7//L29//y9 + vf/8vb3//L29//u8vP/7vLz/+7y8//q6uv/6urr/+rq6//i5uv/1trb/8bOz/+2wsP/oqqv/5Ken/+Ch + ov/cpqX/0cHA/8rQ0f/LztD/xcXH/76+vv+1tbX/qqqq/6moqf+bmpj/wMG+/+fo5//k5OT/5eXl/+fn + 5//o6Oj/6enp/+np6f/q6ur/6+vr/+vr6//r6+v/7Ozs/+zs7P/s7Oz/7Ozs/+zs7P/q6+r/4+bl/+q3 + tv/0qqv/96+v//Wtrf/1ra3/+K+w//iurv/4rq7/+K6u//iurv/4ra3/+K2t//itrf/4rKz/+Kys//is + rP/4rKz/96urgP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD//f4A//79APzR1v/1oaH/9aGh//Whof/1oaH/9aGh//Wh + of/1oaH/9aGh//Whof/1oaH/9aGh//Whof/1oaH/9aGh//Whof/1oaH/9aGh//Whof/1oaH/9aGh//Wh + of/1oaH/9J+f//e3tf/+9vb//Lu5//y+vv/8vr7//L6+//y9vf/8vb3//L29//y9vf/7vLz/+ru7//q7 + u//6urr/+bq6//e4uP/1t7f/8rOz/+6xsf/qrq//5qqo/+Kmpf/enaD/2aOh/9O7vP/AwMD/sbOz/6yr + rP+rq6v/oqKh/56fnP/Dw8P/6Ono/+Xl5f/n5+f/6Ojo/+np6f/p6en/6urq/+vr6//r6+v/7Ozs/+3t + 7f/t7e3/7u7u/+7u7v/u7u7/7u7u/+3t7f/n5+f/5NjY/++pqP/1ra3/97Cw//ivr//4r6//+K+v//iv + r//4rq7/+K6u//iurv/4rq7/+K2t//itrf/4ra3/+Kys//isrP/4qquA////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP/+ + /gD//v4A/NLW//Whof/1oaH/9aGh//Whof/1oaH/9aGh//Whof/1oaH/9aGh//Whof/1oaH/9aGh//Wh + of/1oaH/9aGh//Whof/1oaH/9aGh//Whof/1oaH/9aGh//Whof/1n5//97W2//749//8u7r//L+///y/ + v//8vr7//L6+//y+vv/8vb3//L29//y9vf/9vb3/+ru7//q7u//6u7v/+bq6//i5uf/1t7f/9Le2//Gz + s//sr6//56ur/+Gmpv/coqL/2Jyc/9ednP+3sLD/pqin/6Ojo/+ipKP/oaKi/8TExP/q6er/5ubm/+jo + 6P/p6en/6enp/+rq6v/r6+v/7Ozs/+3t7f/u7u7/7u7u/+/v7//v7+//7+/v/+/v7//v7+//7u7u/+zs + 7v/l6Oj/6r28//Oqqv/1rq7/+q+v//ivr//5sLD/+K+v//ivr//4r6//+K6u//iurv/4rq7/+K6u//it + rf/4ra3/+K2t//isq4D///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A//3+AP/+/gD809f/9aGg//Whof/1oaH/9aGh//Wh + of/1oaH/9aGh//Whof/1oaH/9aGh//Whof/1oaH/9aGh//Whof/1oaH/9aGh//Whof/1oaH/9aGh//Wh + of/1oaH/9aGh//Wfnf/4tbX//vf3//y9vf/8wMD//L+///y/v//8v7///L6+//y+vv/8vr7//L29//y9 + vf/7vLz/+7y8//q7u//6u7v/+7u7//i5uf/3uLj/9be4//K0tf/tr6//5aqq/96lpf/XoKD/2Zuc/7mw + s/+mp6f/p6en/6inp/+ko6T/xsbG/+rr6f/n5+f/6Ojo/+np6f/q6ur/6+vr/+zs7P/t7e3/7u7u/+/v + 7//v7+//8PDw//Dw8P/w8PD/8PDw//Dw8P/v7+//7/Dw/+nq6v/o3+D/67Kx//Strf/3sLD/+LCw//mw + sP/5sLD/+bCw//ivr//4r6//+K+v//ivr//4rq7/+K6u//iurv/4ra3/9qusgP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD//v4A//7+AP3T2f/1oaD/9aGh//Whof/1oaH/9aGh//Whof/1oaH/9aGh//Whof/1oaH/9aGh//Wh + of/1oaH/9aGh//Whof/1oaH/9aGh//Whof/1oaH/9aGh//Whof/1oaH/9Z+f//a2tf/+9vb//L28//zB + wf/8wcH//MDA//y/v//8v7///L+///y+vv/8vr7//L6+//y9vf/8vb3/+7y8//u8vP/6u7v/+ru7//m7 + vP/3uLj/9ra2/++ysv/nrKz/4Kam/9uiov/ZnJ3/sKWl/6ipqf+pqan/qamp/6alpv/Hx8f/6+vq/+jo + 6P/p6en/6urq/+vr6//s7Oz/7e3t/+7u7v/v7+//8PDw//Dw8P/x8fH/8fHx//Hx8f/x8fH/8fHx//Dw + 8P/w8PH/7e3t/+nq6//qxMT/8qqr//avr//4sLD/+LCw//mxsf/5sLD/+bCw//mwsP/4r6//+K+v//iv + r//4r6//+K6u//iurv/4ra2A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP/+/gD//v4A/dXZ//Whof/1oaH/9aGh//Wh + of/1oaH/9aGh//Whof/1oaH/9aGh//Whof/1oaH/9aGh//Whof/1oaH/9aGh//Whof/1oaH/9aGh//Wh + of/1oaH/9aGh//Whof/1oJ//97S1///09//9vr7//cLC//zBwf/8wcH//MHB//zAwP/8v7///L+///y/ + v//8vr7//L6+//y+vv/8vb3/+7y8//u8vP/7vLz/+ru7//i6uv/1uLj/8bS0/+itrf/hqKj/26Oj/9mc + nf+yp6j/qqys/6urq/+rrKv/pqeo/8nJyf/p6un/6Ofo/+rq6v/r6+v/7Ozs/+3t7f/u7u7/7+/v//Dw + 8P/x8fH/8fHx//Hx8f/y8vL/8vLy//Ly8v/y8vL/8PHx//Hx7//w8PD/6+vs/+vn5//vraz/9a+u//ix + sf/4sLD/+bGx//mxsf/5sbH/+bCw//mwsP/5sLD/+K+v//ivr//4r6//+K+v//itrID///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A//7+AP/+/gD91Nr/9aCg//Whof/1oaH/9aGh//Whof/1oaH/9aGh//Whof/1oaH/9aGh//Wh + of/1oaH/9aGh//Whof/1oaH/9aGh//Whof/1oaH/9aGh//Whof/1oaH/9aGh//Sfn//4tbT///P0//3A + v//9wsL//cLC//3Cwv/8wcH//MHB//zBwf/8wMD//L+///y/v//8v7///L6+//y+vv/8vr7//L29//u8 + vP/7vLz/+r29//a4uP/xtbf/6q+v/+Kpqf/bo6P/2p6f/7SqqP+srq3/ra2t/62trf+rq6r/ysrK/+vr + 7P/p6en/6urq/+vr6//s7Oz/7u7u/+/v7//w8PD/8fHx//Hx8f/y8vL/8vLy//Pz8//z8/P/8/Pz//Tz + 8//5+fj/+fr5//Pz8//u7+//7vDv/+3Pz//yrK3/9rCw//ixsf/4sbH/+bGx//mxsf/5sbH/+bGx//mw + sP/5sLD/+bCw//ivr//4r6//+K+ugP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD//v4A//7+AP3V2v/1oKH/9aGh//Wh + of/1oaH/9aGh//Whof/1oaH/9aGh//Whof/1oaH/9aGh//Whof/1oaH/9aGh//Whof/1oaH/9aGh//Wh + of/1oaH/9aGh//Whof/1oaH/9J+f//e0tP//7/P//b++//3Awf/9wcH//cDA//3AwP/9wL///L2+//zA + vv/8wcH//MDA//y/v//8v7///L+///y+vv/8vr7/+729//u9vf/6vLz/97m5//K2tv/qr6//4qqq/9uk + pP/YnZ7/tays/6+vr/+vr6//r6+w/6ytq//Ly8v/6urr/+np6f/r6+v/7Ozs/+7u7v/v7+//8PDw//Hx + 8f/y8vL/8vLy//Pz8//09PT/9PT0//X19f/19fX/9vb2/93e3f/4+Pf/+/v7//Lx8v/w8PH/7/Hx//G4 + t//1sK7/+LKy//ixsf/5srL/+bKy//mxsf/5sbH/+bGx//mxsf/5sLD/+bCw//mwsP/5r66A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP7+/gD//v4A/dbb//Wgof/1oaH/9aGh//Whof/1oaH/9aGh//Whof/1oaH/9aGh//Wh + of/1oaH/9aGh//Whof/1oaH/9aGh//Whof/1oaH/9aGh//Whof/1oaH/9aGh//Whof/1oJ//+La2///2 + 9v//4eL//uLl//7l5v//4+X//uPl///k5f/+4uT//+Lk//y+vv/8wcH//MHB//zAwP/8v7///L+///y/ + v//7vb3/+729//q+vf/3urr/8ra2/+uwsP/iqqr/26Sk/9ifnP+3rq3/r7Cw/7Gxsf+xsbH/r66t/83N + zf/r7Ov/6urq/+vr6//t7e3/7u7u/+/v7//w8PD/8fHx//Ly8v/z8/P/9fX1//X19f/29vb/9vb2//b2 + 9v/3+Pj/w8TD/8zLyv/19fX//v7+//j4+f/w8fH/79/e//Surf/5srL/+LKy//mzs//5srL/+bKy//my + sv/5sbH/+bGx//mxsf/5sbH/+bCw//mwsID///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A//7+AP/+/gD919z/9aGg//Wh + of/1oaH/9aGh//Whof/1oaH/9aGh//Whof/1oaH/9aGh//Whof/1oaH/9aGh//Whof/1oaH/9aGh//Wh + of/1oaH/9aGh//Whof/1oaH/9aGh//Wgof/0n5//9J2d//Scm//znZ3/9Jyc//Scnf/0mp3/9Jyd//SX + mP//+/z//b+///3Cwv/8wcH//MHB//zBwf/8wMD//L+///u+vv/7vr7/+r29//e6uv/yt7f/67Gx/+Oq + qv/cpaX/2KCf/7mvsP+xs7P/s7Oz/7Ozs/+wsbH/zs7O/+vs6//q6er/7Ozs/+3t7f/v7+//8PDw//Hx + 8f/y8vL/8/Pz//X19f/29vb/9vb2//f39//39/f/9/f3//n5+v/DwsP/zMvM/+Xl5f/p6un/+Pn5//7/ + /v/29/j/88rK//ezsv/4sbL/+bOz//mzs//5s7P/+bKy//mysv/5srL/+bGx//mxsf/5sbH/+bCxgP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///4A///+AP3Y3f/2q6v/9aGh//Whof/1oaH/9aGh//Whof/1oaH/9aGh//Wh + of/1oaH/9aGh//Whof/1oaH/9aGh//Whof/1oaH/9aGh//Whof/1oaH/9aGh//Whof/1oaH/9aGh//Wh + of/1oaH/9aGh//Whof/1oaH/9aGh//Whof/1oaH/9Jqa///6+//9v7///cLC//3Cwv/9wsL//MHB//zB + wf/8wcH/+7+///u+vv/6vsD/97u7//K3t//rsbH/46ur/9ympv/XoJ//u6+v/7O0tf+1tbX/tbW1/7Oy + s//Pz8//6+rr/+vr6//s7Oz/7u7u/+/v7//w8PD/8vLy//Pz8//09PT/9vb2//b29v/39/f/+Pj4//j4 + +P/4+Pj/+vn5/8G/wP/Z2dn/6enq/+zt7f/w8PD/8fLy//r6+//18/P/97a3//izs//5tLT/+bOz//mz + s//5s7P/+bOz//mysv/5srL/+bKy//mxsf/5sLGA////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP/+/gD//v4A/dnecPzS + 1v/2paT/9aCh//Whof/1oaH/9aGh//Whof/1oaH/9aGh//Whof/1oaH/9aGh//Whof/1oaH/9aGh//Wh + of/1oaH/9aGh//Whof/1oaH/9aGh//Whof/1oaH/9aGh//Whof/1oaH/9aGh//Whof/1oaH/9aGh//Wh + of/1nJz///n7//2/wf/9w8P//cPD//3Cwv/9wsL//cLC//zBwf/7wMD/+8DA//q+vv/3u7v/8ri4/+uy + sv/jq6v/3Kam/9ihoP+8srT/t7e3/7i4uP+4uLj/tra3/9HR0f/r7ev/6+vr/+3t7f/u7u7/8PDw//Hx + 8f/y8vL/9PT0//X19f/29vb/9/f3//j4+P/5+fn/+fn5//n6+v/29vf/xsbG/+Tk5P/u7e3/8/Pz//X1 + 9v/2+Pf/9O3t//PV1v/4uLf/+bS0//m0tP/5tLT/+bS0//m0tP/5s7P/+bOz//mzs//5srL/+bKy//my + soD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A///+AP/+/wD//v8A/dner/vJzP/1oaH/9aGh//Whof/1oaH/9aGh//Wh + of/1oaH/9aGh//Whof/1oaH/9aGh//Whof/1oaH/9aGh//Whof/1oaH/9aGh//Whof/1oaH/9aGh//Wh + of/1oaH/9aGh//Whof/1oaH/9aGh//Whof/1oaH/9aGh//Sbm///9/v//cHB//3Dw//9w8P//cPD//3D + w//9wsL//cLC//zBwf/7wMD/+r+///e9vf/yuLj/6bGx/+Grq//bpqb/16Gh/760tP+5ubn/urq6/7q6 + uv+5ubn/0tLS/+vr6//r6+v/7e3t/+/v7//w8PD/8fHx//Ly8v/09PT/9vb2//f39//4+Pj/+fn5//r6 + +v/6+vr/+/v6//Pz9P/fv8D/5ujn/+7v8P/08vH/997e//bDwv/3srP/+LS0//m0tf/5tLT/+rW1//q1 + tf/5tLT/+bS0//m0tP/5tLT/+bOz//mzs//5s7P/+bKygP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A//7+AP/+ + /wD92t8P/drf8Peusf/1oaH/9aGh//Whof/1oaH/9aGh//Whof/1oaH/9aGh//Whof/1oaH/9aGh//Wh + of/1oaH/9aGh//Whof/1oaH/9aGh//Whof/1oaH/9aGh//Whof/1oaH/9aGh//Whof/1oaH/9aGh//Wh + of/1oaH/9Z2b///2+P/9wcD//cTE//3ExP/9w8P//cPD//3Dw//9w8P//MHB//zBwf/7wMD/9729//K5 + uf/qs7P/4ays/9mlpf/UoJ//wLa2/7u7u/+8vLz/vLy8/7u6u//T09P/6+zs/+zs7P/t7e3/7+/v//Dw + 8P/y8vL/8/Pz//X19f/29vb/9/f3//n5+f/6+vr/+/v7//z8/P/8+/v/9Pf2/+y1tf/xuLj/8cbG//S3 + t//3tLT/+La2//m2tv/5tbX/+bW1//q2tv/6trb/+rW1//q1tf/6tbX/+bS0//m0tP/5tLT/+bS0//mz + s//5srGA////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD//v4A//7/AP///gD+2+Bw/dTY//Wgof/1oaH/9aGh//Wh + of/1oaH/9aGh//Whof/1oaH/9aGh//Whof/1oaH/9aGh//Whof/1oaH/9aGh//Whof/1oaH/9aGh//Wh + of/1oaH/9aGh//Whof/1oaH/9aGh//Whof/1oaH/9aGh//Whof/1nZz///X3//3Dwv/9xcX//cTE//3E + xP/9xMT//cPD//3Dw//8wsL//MLC//vAwP/4vr7/87u6/+qzs//ira3/2qen/9Wfn//At7f/vb2+/76+ + vv++vr7/vL29/9TU1P/r6+v/7Ozs/+7u7v/v7+//8fHx//Ly8v/z8/P/9fX1//f39//4+Pj/+fn5//v7 + +//8/Pz//f39//3+/f/37e3/9LKz//e1tv/3trX/+La3//m3t//5t7f/+ba2//m2tv/6t7f/+ra2//q2 + tv/6trb/+ra2//q1tf/6tbX/+rW1//m0tP/5tLT/+bS0//i0tID///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD//v4A//7+AP///gD+2+Dg+La5//Whof/1oaH/9aGh//Whof/1oaH/9aGh//Whof/1oaH/9aGh//Wh + of/1oaH/9aGh//Whof/1oaH/9aGh//Whof/1oaH/9aGh//Whof/1oaH/9aGh//Whof/1oaH/9aGh//Wh + of/1oaH/9aGh//Wdnf//9PX//sTE//3Fxf/9xcX//cXF//3ExP/9xMT//cTE//zDw//8wsL/+8HB//i/ + v//zurr/67S0/+Ktrf/Zp6f/1aKi/8K5uP++v7//wMDA/76+vv+9vb3/1dXV/+vr6//s7Oz/7u7u/+/v + 7//x8fH/8vLy//T09P/29vb/9/f3//j4+P/5+fn/+/v7//39/f/+/v7//f79//rr6//2tLP/+bi4//q4 + uP/6uLj/+be3//m3t//5t7f/+ri4//q3t//6t7f/+re3//q2tv/6trb/+ra2//q2tv/6tbX/+rW1//q1 + tf/5tLT/+bS0gP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD//v4A//7+AP7c4V/80db/9aGg//Wg + of/1oaH/9aGh//Whof/1oaH/9aGh//Whof/1oaH/9aGh//Whof/1oaH/9aGh//Whof/1oaH/9aGh//Wh + of/1oaH/9aGh//Whof/1oaH/9aGh//Whof/1oaH/9aGh//Whof/1oaH/9J6e///x9P/+xMT//sbG//7G + xv/9xcX//cXF//3Fxf/9xMT//MPD//zDw//7wsL/+L+///O7u//strb/5K+v/9ypqf/Yo6T/xbu6/8HB + wf/BwcH/vb6+/7+/v//W1tb/7O7s/+zs7P/u7u7/7+/v//Hx8f/y8vL/9PT0//b29v/39/f/+Pj4//r6 + +v/7+/v//f39//7+/v/+//7/++zs//i1t//6ubn/+rm5//q4uP/6uLj/+ri4//q4uP/6uLj/+ri4//q4 + uP/6t7f/+re3//q3t//6trb/+ra2//q2tv/6trb/+rW1//q1tf/6tbSA////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP/+/gD//v4A/t3iD/7d4u/3q63/9aGh//Whof/1oaH/9aGh//Whof/1oaH/9aGh//Wh + of/1oaH/9aGh//Whof/1oaH/9aGh//Whof/1oaH/9aGh//Whof/1oaH/9aGh//Whof/1oaH/9aGh//Wh + of/1oaH/9aGh//Whof/1nZ///+/0//7Gxv/+xsb//sbG//7Gxv/+xsb//cXF//3Fxf/8xMT//MPD//vC + wv/4wMD/87y8/+y2tv/lsbH/3qur/9mlpf/Gu7v/w8PD/8XFxP/ExMT/xMTE/9fX2P/r6+v/7Ozs/+7u + 7v/v7+//8fHx//Ly8v/09PT/9vb2//f39//4+Pj/+fn5//v7+//+/f3//f39//3+/f/66+v/+Li4//q5 + uf/6ubn/+7q6//u6uv/7ubn/+7m5//u5uf/6uLj/+ri4//q4uP/6uLj/+re3//q3t//6t7f/+ra2//q2 + tv/6trb/+ra2//q1tYD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A//7+AP///gAGBQUA/t3jsPm7 + vv/1oKH/9aGh//Whof/1oaH/9aGh//Whof/1oaH/9aGh//Whof/1oaH/9aGh//Whof/1oaH/9aGh//Wh + of/1oaH/9aGh//Whof/1oaH/9aGh//Whof/1oaH/9aGh//Whof/1oaH/9aGh//Wen///7vL//sbG//7H + x//+x8f//sbG//7Gxv/+xsb//sbG//zExP/8xMT/+8PD//nBwf/0vb3/7ri4/+aysv/eq6v/26en/8q+ + vv/Fxsf/wsLC/7u7uv+0tLX/x8fH/+3s7P/s7e3/7u7u/+/v7//w8PD/8vLy//Pz8//19fX/9vb2//j4 + +P/5+fn/+vr6//z8/P/8/Pz//P38//rs7f/5uLn/+rq6//q6uv/7u7v/+7q6//u6uv/7urr/+7m5//u5 + uf/7ubn/+ri4//q4uP/6uLj/+ri4//q3t//6t7f/+re3//q2tv/6trb/+ra2gP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A//7+AAUEBAD+3uSA+r/C//WgoP/1oaH/9aGh//Whof/1oaH/9aGh//Wh + of/1oaH/9aGh//Whof/1oaH/9aGh//Whof/1oaH/9aGh//Whof/1oaH/9aGh//Whof/1oaH/9aGh//Wh + of/1oaH/9aGh//Whof/1oaH/9J+f///t7//+xsf//sjI//7Hx//+x8f//sfH//7Gxv/+xsb//cXF//3F + xf/8xMT/+cLC//W/v//vubn/6LS0/+Kvr//dqqn/y7+//8DBwf+7u7v/ubm5/8HBwv/X19f/9PT0//39 + /f/49/f/8PHx//Dw7//x8fH/8/Pz//X19f/29vb/9/f3//j4+P/5+fn/+vr6//v7+//7+/z/+erp//m6 + uv/6u7v/+rq6//u7u//7u7v/+7u7//u6uv/7urr/+7q6//u5uf/7ubn/+7m5//u5uf/6uLj/+ri4//q4 + uP/6t7f/+re3//q3t//6t7eA////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///4ABAQDAP7e + 5ID6wMP/9aGh//Whof/1oaH/9aGh//Whof/1oaH/9aGh//Whof/1oaH/9aGh//Whof/1oaH/9aGh//Wh + of/1oaH/9aGh//Whof/1oaH/9aGh//Whof/1oaH/9aGh//Whof/1oaH/9aGh//Whof/1n5///+rv//7H + x//+yMj//sjI//7IyP/+x8f//sfH//7Hx//9xcX//cXF//3Fxf/7xMT/98DA//K9vf/suLj/5rKy/+Gt + rv/Nw8T/ysrK/9HR0f/Z2dn/3d3d/+Xl5f/t7O3/9vb2//n5+f/9/P3/+vv6//T09P/y8vL/9PT0//b2 + 9v/39/f/+Pj4//n5+f/5+fn/+vr6//n6+f/46er/+bq6//q7u//6u7v/+7y8//u7u//7u7v/+7u7//u7 + u//7urr/+7q6//u6uv/7ubn/+7m5//u5uf/7ubn/+ri4//q4uP/6uLj/+re3//q3t4D///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP/+/wADAwQA/t/lcPvM0P/1oaD/9aGh//Whof/1oaH/9aGh//Wh + of/1oaH/9aGh//Whof/1oaH/9aGh//Whof/1oaH/9aGh//Whof/1oaH/9aGh//Whof/1oaH/9aGh//Wh + of/1oaH/9aGh//Whof/1oaH/9aGh//WgoP/+3+T//9zg//7Nzf/+yMj//sjI//7IyP/+yMj//sfH//7H + x//9xsb//cXF//zExP/6xMP/9sDA//G8vP/suLj/57S0/9fAwP/V19f/3N3d/+rr6//w8PH/8fHx//f3 + 9//5+vn/+/v6//r6+v/6+vr/+/v7//z8/P/39/f/9fX1//b29v/39/f/+Pj4//j4+P/4+Pj/+Pj5//jo + 6P/5u7r/+7y8//u8vP/7vLz/+7y8//u8vP/7u7v/+7u7//u7u//7u7v/+7q6//u6uv/7urr/+7m5//u5 + uf/7ubn/+7m5//q4uP/6uLj/+ri4gP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A//7/AAMD + AwD+4OYw/d3i//Shof/1oaH/9aGh//Whof/1oaH/9aGh//Whof/1oaH/9aGh//Whof/1oaH/9aGh//Wh + of/1oaH/9aGh//Whof/1oaH/9aGh//Whof/1oaH/9aGh//Whof/1oaH/9aGh//Whof/1oaH/9KCg//Wg + oP/5ur3//t/j///c4P/+zc3//sbH//7IyP/+yMj//sjI//3Gxv/9xsb//cfG//vExP/4wcH/9sDA//K9 + vf/uubn/6ra2/+aztP/hvr//4t/f/+rs6//x8vH/9PPz//b29v/4+Pj/+vv6//r6+v/6+vr/+vr6//r6 + +v/9/f7/+fn5//f39//39/f/9/f3//j4+P/39/f/9+jp//q8vP/7vLz/+7y8//y9vf/8vb3/+7y8//u8 + vP/7vLz/+7u7//u7u//7u7v/+7u7//u6uv/7urr/+7q6//u5uf/7ubn/+7m5//u5uf/6uLiA////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8AAwICAAMDAwD/4eff+bm7//Whof/1oaH/9aGh//Wh + of/1oaH/9aGh//Whof/1oaH/9aGh//Whof/1oaH/9aGh//Whof/1oaH/9aGh//Whof/1oaH/9aGh//Wh + of/1oaH/9aGh//Whof/1oaH/9aGh//Whof/1oaH/9aGh//Whof/1n6H/+bq9//7e5P//3OD//s3N//7I + yP/+yMj//sjI//3Hx//9xsb//MXF//vFxf/4wcH/98HB//S+vv/xvLz/7rm5/+q2tv/ns7P/5Le3/+XU + 1f/t7u7/8vLz//T19P/4+Pj/+fn5//r6+v/6+vr/+vr6//r6+v/6+vr//f39//v7+//39/f/9vb3//b2 + 9v/25+f/+728//u9vf/7vb3//L29//y9vf/8vb3//L29//u8vP/7vLz/+7y8//u7u//7u7v/+7u7//u7 + u//7urr/+7q6//u6uv/7ubn/+7m5//u5uYD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP39 + /QACAgIAAwICAP/i6GD+2d//9qWl//Whof/1oaH/9aGh//Whof/1oaH/9aGh//Whof/1oaH/9aGh//Wh + of/1oaH/9aGh//Whof/1oaH/9aGh//Whof/1oaH/9aGh//Whof/1oaH/9aGh//Whof/1oaH/9aGh//Wh + of/1oaH/9aGh//Whof/1oaD/9aGg//m6vf/+3uT//93f//7Nzf/+ycn//cfH//3Hx//9x8f/+8XF//vF + xf/6xMT/+MLC//fBwf/1v7//8r29/+65uf/qtrX/57Oz/+Sxsf/kxMP/7eTk//P09P/z8/T/9vb2//j4 + +P/5+fn/+fn5//r6+v/4+fn/+/v8//7+/v/9/Pz/9/j3//bo5//6vb3/+76+//u9vf/8vr7//L6+//y9 + vf/8vb3//L29//y9vf/7vLz/+7y8//u8vP/7u7v/+7u7//u7u//7u7v/+7q6//u6uv/7urr/+7q6gP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A/f39AAECAQACAgIAAwMCAP/i6J/919v/9qWl//Wh + of/1oaH/9aGh//Whof/1oaH/9aGh//Whof/1oaH/9aGh//Whof/1oaH/9aGh//Whof/1oaH/9aGh//Wh + of/1oaH/9aGh//Whof/1oaH/9aGh//Whof/1oaH/9aGh//Whof/1oaH/9aGh//Whof/1oaH/9aGg//Wh + oP/5ur3//t/j///d3v/+zc3//cjI//3Hx//9x8f//cfH//vFxf/7xcX/+sTE//jCwv/3wcH/9b+///K9 + vf/uubn/6ra2/+ezs//jsbH/4rW1/+nS0v/z8fH/9/j4//n5+f/6+vr/+vr6//n5+f/39/f/9fT0//n5 + +f/+/v7/9+fo//u+v//7vr7/+76+//y/v//8vr7//L6+//y+vv/8vb3//L29//y9vf/8vb3/+7y8//u8 + vP/7vLz/+7u7//u7u//7u7v/+7u7//u6uv/7urqA////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD+/v0AAAAAAAICAgACAgMAAgICAP/j6Z/91tv/+LGz//Shof/1oaH/9aGh//Whof/1oaH/9aGh//Wh + of/1oaH/9aGh//Whof/1oaH/9aGh//Whof/1oaH/9aGh//Whof/1oaH/9aGh//Whof/1oaH/9aGh//Wh + of/1oaH/9aGh//Whof/1oaH/9aGh//Whof/1oaH/9aGh//Shof/1oaD/+bq8//7f4f//3d7//s3N//3H + yP/9x8f//cfH//3Hx//7xcX/+8XF//rExP/5w8T/98HB//W/v//zvb3/77q6/+y4uP/ntbT/5bGy/+Gu + rv/nwL//8+Pk//38/P/9/f3/+vr6//j4+P/19fX/9+/w//nMzP/6v77/+8DA//vAwP/8wMD//L+///y/ + v//8v7///L6+//y+vv/8vr7//L29//y9vf/8vb3//L29//u8vP/7vLz/+7y8//u7u//7u7v/+7u7//u7 + u4D///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP7+/gAAAAAAAAAAAAICAgACAwIAAwICAP/j + 6T//4+m//dLX//ixs//1oaH/9aCh//Whof/1oaH/9aGh//Whof/1oaH/9aGh//Whof/1oaH/9aGh//Wh + of/1oaH/9aGh//Whof/1oaH/9aGh//Whof/1oaH/9aGh//Whof/1oaH/9aGh//Whof/1oaH/9aGh//Wh + of/1oaH/9aGh//Whof/1oaH/9aGh//m6vP/+3+H//9ve//7Nzf/9yMj//cfH//3Hx//9x8f//MXF//vF + xf/6xMT/+cPD//fBwf/1v7//9L6+/++6uv/suLj/6ra1/+m2tv/ns7P/6re3//HS0//37u7/9ufn//bH + xv/4v77/+r/A//zBwf/8wcH/+8DA//zBwf/8wcH//MDA//y/v//8v7///L+///y+vv/8vr7//L6+//y+ + vv/8vb3//L29//y9vf/7vLz/+7y8//u8vP/7u7v/+7u7gP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A/v/+AAAAAAAAAAAAAAAAAAECAgACAgIAAgICAAICAwD/4+k//+Ppv/3S1//4sLP/9aGh//Wh + of/1oaH/9aGh//Whof/1oaH/9aGh//Whof/1oaH/9aGh//Whof/1oaH/9aGh//Whof/1oaH/9aGh//Wh + of/1oaH/9aGh//Whof/1oaH/9aGh//Whof/1oaH/9aGh//Whof/1oaH/9aGh//Whof/1oaH/9aGg//Wh + oP/5urz//t7h///c3//+zc3//cjI//3Hx//9x8f//cfH//zFxf/8xcX/+8XF//nDw//4wcH/9sDA//S+ + vv/xvLz/8Lu7/++6uv/wurv/87u7//S9vf/2v7//+cDA//rBwf/8wsL//MLC//zBwf/9wsL//cLC//zB + wf/8wcH//MHB//zAwP/8v7///L+///y/v//8vr7//L6+//y+vv/8vr7//L29//y9vf/8vb3/+7y8//u8 + vP/7vLyA////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD//v8AAAAAAAAAAAAAAAAAAAAAAAAA + AAACAgIAAgMDAAMDAgACAgIA/+PpP//j6cD90tf/+LKz//Whof/1oaH/9aGh//Whof/1oaH/9aGh//Wh + of/1oaH/9aGh//Whof/1oaH/9aGh//Whof/1oaH/9aGh//Whof/1oaH/9aGh//Whof/1oaH/9aGh//Wh + of/1oaH/9aGh//Whof/1oaH/9aGh//Whof/1oaH/9aGh//WhoP/0oaH/+bq8//7d4v//29///s3N//3H + yP/9x8f//cfH//3Hx//8xcX//MXF//vFxf/6xMT/+MHB//jBwf/3wcL/9sDA//bAwP/3wMD/+MHB//rC + wv/7wsL//MPD//zCwv/8wsL//MLC//3Dw//9wsL//cLC//3Cwv/8wcH//MHB//zBwf/8wMD//L+///y/ + v//8v7///L6+//y+vv/8vr7//L6+//y9vf/8vb3//L29//u8vID///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP7+/gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgICAAIDAwACAgIAAwMDAP/j + 6UD/4+m//dPX//iys//1oaH/9aGh//Whof/1oaH/9aGh//Whof/1oaH/9aGh//Whof/1oaH/9aGh//Wh + of/1oaH/9aGh//Whof/1oaH/9aGh//Whof/1oaH/9aGh//Whof/1oaH/9aGh//Whof/1oaH/9aGh//Wh + of/1oaH/9aGh//Whof/1oaH/9aGh//m6vP/+3eH//9ze//7Nzf/9yMj//cfH//3Hx//9x8f//MXF//zF + xf/8xcX/+8XF//vExP/7xMT/+8XE//rDw//7w8P//MTE//zExP/8w8P//MPD//zDw//9w8P//cPD//3D + w//9w8P//cLC//3Cwv/9wsL//MHB//zBwf/8wcH//MDA//y/v//8v7///L+///y+vv/8vr7//L6+//y+ + vv/8vb3//L29gP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A/v//AAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAICAgADAwMAAwICAAMCAwD/4+lA/+Ppv/3U1//5urz/9aGh//Wh + oP/1oaH/9aGh//Whof/1oaH/9aGh//Whof/1oaH/9aGh//Whof/1oaH/9aGh//Whof/1oaH/9aGh//Wh + of/1oaH/9aGh//Whof/1oaH/9aGg//WhoP/1oaH/9aGh//Whof/1oaH/9aGh//Whof/1oaH/9aGh//Wh + of/5urz//9zi///c3v/+zc3//cjI//3Hx//9x8f//cfH//3Gxv/9xsb//cbG//3Gxv/9xcX//cXF//3F + xf/8xMT//MTE//zExP/9xsX//cTE//3ExP/9xMT//cPD//3Dw//9w8P//cPD//3Cwv/9wsL//cLC//zB + wf/8wcH//MHB//zAwP/8v7///L+///y/v//8vr7//L6+//y+vv/8vr6A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAADAwMAAgICAAMCAgADAwIA/+PpH//j6Z/+2+D/+bm8//Whof/1oaH/9aGh//Whof/1oaH/9aGh//Wh + of/1oaH/9aGh//Whof/1oaH/9aGh//Whof/1oaH/9aGh//Whof/1oaH/+bu9j/7c4d/7xsn/9qip//Wh + of/1oaH/9aGh//Whof/1oaH/9aGh//Whof/1oaH/9aGh//Whof/1oaH/+bq8//7c4v//29///s3N//3I + yP/9xsf//cfH//3Hx//9xsb//cbG//3Gxv/9xsb//cXF//3Fxf/+xsb//cXF//3Fxf/9xcX//cXF//3E + xP/9xMT//cTE//3Dw//9w8P//cPD//3Dw//9wsL//cLC//3Cwv/8wcH//MHB//zBwf/8wMD//L+///y/ + v//8v7///L6+//y+voD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgICAAMDAgACAgIAAgICAP/j + 6SD/4+mf/tvh//m6vP/1oaH/9aGh//Whof/1oaH/9aGh//Whof/1oaH/9aGh//Whof/1oaH/9aGh//Wh + of/1oaH/9aGh//WhodD///8A////AP7c4WD+3OHf+8bJ//aoqf/1oaH/9aGh//Whof/1oaH/9aGh//Wh + of/1oaH/9aGh//Whof/1oaH/9aGg//m6vP/+3OH//9ve//7Nzf/+ycn//sjI//7IyP/9x8f//sfH//7H + x//+x8f//sfH//7Gxv/+xsb//sbG//3Fxf/9xcX//cXF//3Fxf/9xMT//cTE//3ExP/9w8P//cPD//3D + w//9w8P//cLC//3Cwv/9wsL//MHB//zBwf/8wcH//MDA//y/v//8v7///L+/gP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAICAQABAQIAAgICAAICAQD/5Oof/+Ppn/7b4P/5urz/9aGh//Wh + of/1oaH/9aGh//Whof/1oaH/9aGh//Whof/1oaH/9aGh//Whof/1oaH/9aGhgAIDAQADAwIAAwIDAAMC + AgD+3OFg/tzh4PvGyf/2qKn/9aGg//Whof/1oaH/9aGh//Whof/1oaH/9aGh//Whof/1oaH/9aGh//Wg + oP/5urz//tzh///b3//+zc3//snJ//7IyP/+yMj//sjI//7IyP/+x8f//sfH//7Hx//+xsb//sbG//7G + xv/9xcX//cXF//3Fxf/9xcX//cTE//3ExP/9xMT//cPD//3Dw//9w8P//cPD//3Cwv/9wsL//cLC//zB + wf/8wcH//MHB//zAwP/8v79Q////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8AAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAACAgIAAQICAAEBAQABAgEA/+TrIP/j6Z/+2+D/+bq8//Whof/0oaH/9aGh//Whof/1oaH/9aGh//Wh + of/1oaH/9aGh//Whof/2oaGAAAAAAAAAAAACAgIAAgICAAIBAQABAQEA/tzhYP7c4d/7xsn/9qio//Wh + of/1oaH/9aGh//Whof/1oaH/9aGh//Whof/1oaH/9aGh//Whof/1oKH/+bq8//7c4f//297//s3N//7J + yf/+yMj//sjI//7IyP/+yMj//sfH//7Hx//+x8f//sbG//7Gxv/+xsb//sbG//3Fxf/9xcX//cXF//3E + xP/9xMT//cTE//3ExP/9w8P//cPD//3Dw//9wsL//cLC//3Cwv/8wcH//MHB//zBwUD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQICAAICAgACAQIAAgECAP/k + 6iD/5Oqf/tvg//m6vP/1oaD/9aGh//Whof/1oaH/9aGh//Whof/1oaH/9aGh//ahoYAAAAAAAAAAAAAA + AAAAAAAAAgICAAECAgABAQEAAwECAP7c4WD+3eHf+8bJ//aoqf/1oKH/9aGh//Whof/1oaH/9aGh//Wh + of/1oaH/9aGh//Whof/1oaH/9aGh//m6vP/+3OH//9ve//7Nzf/+yMn//sjI//7IyP/+yMj//sjI//7H + x//+x8f//sfH//7Gxv/+xsb//sbG//7Gxv/9xcX//cXF//3Fxf/9xMT//cTE//3ExP/9xMT//cPD//3D + w//9w8P//cLC//3Cwv/9wsL//cLCQP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEBAQABAQEAAQEBAAEBAgD/5Oog/+Tqn/7b4P/5urz/9aGh//Wh + of/1oaH/9aGh//Whof/1oaH/9aGhQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEBAQABAQEAAQEAAAEB + AQD+3eJg/tzh3/vGyf/2qKn/9aGh//Whof/1oaH/9aGh//Whof/1oaH/9aGh//Whof/1oaH/9aGh//Wh + of/5urz//tzh///b3v/+zc3//snJ//7IyP/+yMj//sjI//7IyP/+x8f//sfH//7Hx//+xsb//sbG//7G + xv/+xsb//cXF//3Fxf/9xcX//cTE//3ExP/9xMT//cTE//3Dw//9w8P//cPD//3Cwv/9wsJA////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAABAQEAAQEBAAEBAQABAQAA/+TqIP/k6p/+2+H/+bq8//Whof/1oaH/9aGh//Whoc8AAAEAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQEAAQEBAAEBAQABAQEA/t3iYP7c4d/7xsn/9qip//Wh + of/1oaH/9aGh//Whof/1oaH/9aGh//Whof/1oaH/9aGh//Whof/1oaH/+bq8//7c4f//297//s3N//7J + yf/+yMj//sjI//7IyP/+yMj//sfH//7Hx//+x8f//sbG//7Gxv/+xsb//sbG//3Fxf/9xcX//cXF//3E + xP/9xMT//cTE//3ExP/9w8P//cPD//3Dw0D///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQEBAAEBAQABAQEAAQABAP/k + 6iD/5OqP/t7kv/zN0b/4t7pgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAQEBAAEBAQABAQEAAQEBAP7d4mD+3eLf+8bJ//aoqf/1oaH/9aGh//Whof/1oaH/9aGh//Wh + of/1oaH/9aGh//Whof/1oaH/9aGh//m6vP/+3OH//9ve//7Nzf/+ycn//sjI//7IyP/+yMj//sjI//7H + x//+x8f//sfH//7Gxv/+xsb//sbG//7Gxv/9xcX//cXF//3Fxf/9xMT//cTE//3ExP/9xMT//cPDQP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAQAAAQEAAAAAAAAAAAEAAQAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEBAQAAAAAAAQEBAAEB + AAD+3eJg/t3i3/vGyf/2qKn/9aGh//Whof/1oaH/9aGh//Whof/1oaH/9aGh//Whof/1oaH/9aGh//Wh + of/5urz//tzh///b3v/+zc3//snJ//7IyP/+yMj//sjI//7IyP/+x8f//sfH//7Hx//+xsb//sbG//7G + xv/+xsb//cXF//3Fxf/9xcX//cTE//3ExP/9xMRA////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAQEAAAABAAEAAQABAAEA/93iX/7d4t/7xsn/9qip//Wh + oP/1oaH/9aGh//Whof/1oaH/9aGh//Whof/1oaH/9aGh//Whof/1oaH/+bq8//7c4f//2t7//s3N//7J + yf/+yMj//sjI//7IyP/+yMj//sfH//7Hx//+x8f//sbG//7Gxv/+xsb//sbG//3Fxf/9xcX//cXF//3F + xUD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAEBAAABAAAAAAEAAQEAAP7d4mD+3eLf+8bK//aoqf/1oaH/9aGh//Whof/1oaH/9aGh//Wh + of/1oaH/9aGh//Whof/1oaH/9aGh//m6vP/+3OH//9re//7Nzf/+ycn//sjI//7IyP/+yMj//sjI//7H + x//+x8f//sfH//7Gxv/+xsb//sbG//7Gxv/9xcX//cXFQP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAQABAAAA + AAD+3eJg/t3i3/vHyv/2qan/9aGh//Whof/1oaH/9aGh//Whof/1oaH/9aGh//Whof/1oaH/9aGh//Wh + of/5urz//tzh///a3v/+zc3//snJ//7Jyf/+yMj//sjI//7IyP/+x8f//sfH//7Hx//+xsb//sbG//7G + xv/+xsZA////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8AAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/t3iYP7d4t/7x8r/9qmp//Wh + of/1oaH/9aGh//Whof/1oaH/9aGh//Whof/1oaH/9aGh//Whof/1oaH/+bq8//7c4f//2t7//s3N//7J + yf/+ycn//sjI//7IyP/+yMj//sfH//7Hx//+x8f//sfH//7GxkD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAP7d4mD+3eLf+8fK//apqf/1oaH/9aGh//Whof/1oaH/9aGh//Wh + of/1oaH/9aGh//Whof/1oaH/9aGh//m6vP/+3OH//9re//7Nzf/+ycn//snJ//7IyP/+yMj//sjI//7H + x//+x8f//sfHQP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAD+3eJg/t3i3/vHyv/2qan/9aGh//Whof/1oaH/9aGh//Whof/1oaH/9aGh//Whof/1oaH/9aGh//Wh + of/5urz//tzh///a3v/+zc3//snJ//7Jyf/+yMj//sjI//7IyP/+yMhA////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP///wD///8A/t3jYP7d4t/7x8r/9qmp//Wh + of/1oaH/9aGh//Whof/1oaH/9aGh//Whof/1oaH/9aGh//Whof/1oaH/+sPGv//k6t//2t7//s3N//7J + yf/+ycn//sjIz////wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAA////AP///wD///8A////AP7d42D+3eLf+8fK//apqf/1oaH/9aGh//Whof/1oaH/9aGh//Wh + of/1oaH/9aGh//Whof/1oaGA////AP/k6mD/5OrP/9ve3/7NznD+yckQ////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///8A////AP///wD///8A////AP// + /wD+3eNg/t3j3/vHyv/2qan/9aGh//Whof/1oaH/9aGh//Whof/1oaH/9aGh//WhoYD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8AAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAP///wD///8A////AP///wD///8A////AP///wD///8A/t3jYP7d49/7x8r/9qmp//Wh + of/1oaH/9aGh//Whof/1oaH/9aGhcP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP7d42D+3ePf+8fK//apqf/1oaH/9aGh//Whoe/1oaEQ////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD+3eNg/t3jv/vJzb/6v8KA9aGhEP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD////////////////////////8H/// + ////////////////4AP//////////////////8AA//////////////////8AAD/////////////////+ + AAAP/////////////////gAAA/////////////////wAAAD////////////////8AAAAP/////////// + ////+AAAAA////////////////gAAAAD///////////////4AAAAAP//////////////+AAAAAA///// + //////////wAAAAAD//////////////8AAAAAAP//////////////AAAAAAA//////////////4AAAAA + AD//////////////AAAAAAAOD////////////4AAAAAAAAP////////////AAAAAAAAA//////////// + wAAAAAAAAL///////////8AAAAAAAAAP///////////AAAAAAAAAB///////////wAAAAAAAAAH///// + /////8AAAAAAAAAAf//////////AAAAAAAAAAD//////////wAAAAAAAAAAP/////////8AAAAAAAAAA + A//////////AAAAAAAAAAAD/////////wAAAAAAAAAAAP////////8AAAAAAAAAAAA/////////AAAAA + AAAAAAAD////////wAAAAAAAAAAAAH///////8AAAAAAAAAAAAA////////AAAAAAAAAAAAAD/////// + wAAAAAAAAAAAAAP//////8AAAAAAAAAAAAAA///////AAAAAAAAAAAAAAD//////wAAAAAAAAAAAAAAP + /////8AAAAAAAAAAAAAAA//////AAAAAAAAAAAAAAAD/////wAAAAAAAAAAAAAAAP////8AAAAAAAAAA + AAAAAA/////AAAAAAAAAAAAAAAAH////wAAAAAAAAAAAAAAAB////8AAAAAAAAAAAAAAAAf////AAAAA + AAAAAAAAAAAH////wAAAAAAAAAAAAAAAB////8AAAAAAAAAAAAAAAAf////AAAAAAAAAAAAAAAAH//// + wAAAAAAAAAAAAAAAB////8AAAAAAAAAAAAAAAAf////AAAAAAAAAAAAAAAAH////wAAAAAAAAAAAAAAA + B////8AAAAAAAAAAAAAAAAf////AAAAAAAAAAAAAAAAH////wAAAAAAAAAAAAAAAB////8AAAAAAAAAA + AAAAAAf////AAAAAAAAAAAAAAAAH////wAAAAAAAAAAAAAAAB////8AAAAAAAAAAAAAAAAf////AAAAA + AAAAAAAAAAAH////wAAAAAAAAAAAAAAAB////8AAAAAAAAAAAAAAAAf////AAAAAAAAAAAAAAAAH//// + wAAAAAAAAAAAAAAAH////8AAAAAAAAAAAAAAAH/////AAAAAAAAAAAAAAAP/////wAAAAAAAAAAAAAAD + /////8AAAAAAAAAAAAAAA//////AAAAAAAAAAAAAAAP/////wAAAAAAAAAAAAAAD/////8AAAAAAAAAA + AAAAA//////AAAAAAAAAAAAAAAP/////wAAAAAAAAAAAAAAD/////8AAAAAAAAAAAAAAA//////AAAAA + AAAAAAAAAAP/////wAAAAAAAAAAAAAAD/////8AAAAAAAAAAAAAAA//////AAAAAAAAAAAAAAAP///// + wAAAAAAAAAAAAAAD/////8AAAAAAAAAAAAAAA//////AAAAAAAAAAAAAAAP/////wAAAAAAAAAAAAAAD + /////8AAAAAAAAAAAAAAA//////AAAAAAAAAAAAAAAP/////4AAAAAAAAAAAAAAD/////+AAAAAAAAAA + AAAAA//////wAAAAAAAAAAAAAAP/////+AAAAAAAAAAAAAAD//////gAAAAAAAAAAAAAA//////4AAAA + AAAAAAAAAAP//////AAAAAAAAAAAAAAD//////wAAAAAAAAAAAAAA//////8AAAAAAAAAAAAAAP///// + /AAAAAAAAAAAAAAD//////wAAAAAAAAAAAAAA//////+AAAAAAAAAAAAAAP//////gAAAAAAAAAAAAAD + //////8AAAAAAAAAAAAAA///////gAAAAAAAAAAAAAP//////8AAAAAAAAAAAAAD///////wAAAAAAAA + AAAAA////////AAAAAAAAAAAAAP///////8AAAAAAAAAAAAD////////wAAAAAAAAAAAA/////////AA + AAAAAAAAAAP////////8AABgAAAAAAAD/////////wAAeAAAAAAAA//////////AAH4AAAAAAAP///// + ////8AB/gAAAAAAD//////////wAf+AAAAAAA///////////AP/4AAAAAAP//////////8H//gAAAAAD + //////////////+AAAAAA///////////////4AAAAAP///////////////gAAAAD///////////////+ + AAAAA////////////////4AAAAP////////////////gAAAD////////////////+AAAA/////////// + //////4AAAf/////////////////gAEH/////////////////+AB///////////////////4Af////// + /////////////gH///////////////////+D/////////////////////////ygAAAAwAAAAYAAAAAEA + IAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///8A////AP///wD2+PYA9fb3APX19AD18/QA8/TyAPLw + 8gDv7+4A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////APn5+AD5+PgA9vb3AAAA + AAEAAAAFAAAACQAAAAcAAAAD7e3uAOzs6wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////APr6 + +gD59vcAAAAAAQAAAAsAAAAiAAAAOAAAADQAAAAdAAAADAAAAAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABJKSkAiVRUAOWSkAD4n6AA9qGgAPKe + ngC2d3gAfk9SAOOVlgD6paQA9qKhAPajogD1o6MA9aKkAPajowD3sbAA////AP///wD///8A////AP// + /wD///8A////APn5+AD5+fkAAAAABQAAAB8gExNtXjU2uT0jJKkAAABsAAAAPgAAAB8AAAAMAAAAA+Tk + 5QDj4+IA////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////APn5+AD4+fgAAAAAATkiIkqrX2Dzlk5N/8dyc/+pY2PqOSEhrQEA + AGwAAAA/AAAAHgAAAAoAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEA + AABKJicAjlZWAOOQkQD4np0A956fAO2ZmACycXAAhFJTAOaVlQD5o6MA9qChAPahoQD1n6IA9aGiAPaj + ogD5tLQA////AP///wD///8A////AP///wD///8A////APn6+gD5+fkA9ff2AIZQUZafU1P/fDs8/8Nz + dP/5npz/6oqL/6ReYOw4HB6tAAAAbQAAAD0AAAAeAAAACgAAAAPV19YA0tLRAP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD7+foA+/r6AH9N + TaKZUFD/hUNC/8p8fP/8qKf/8Zyc//SYmf/qi4z/pV9h7DYfH60AAABrAAAAPAAAAB4AAAAMAAAAAwAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAsCAABTMDAAmV9fAOqSkQD3mpsA9pycAOWRkgCnaGgAilZWAOeU + lAD5oKEA9Z6eAPWdngD2np8A9Z6fAPWhoQD3uLcA////AP///wD///8A////AP///wD///8A////AP// + /wD7+PcA+Pb4AK9vb6GXUFD/ikZG/8+Bgf/7qKj/9qKi//WgoP/znZ3/85ia/+uMjf+lYGDtNR4frgAA + AGsAAAA8AAAAHQAAAAsAAAAJAAAAEgAAABMAAAAGAAAAAdXHyQDYy8oAy7+/AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD7+fgA/Pr5AOSWlKCVT0//kEtM/9KFhf/8qqr/9aOj//WjpP/2o6L/9qGh//Od + nP/2mpv/7ZGR/6ZhYu40HR6vAAAAawAAAEwAAABLAAAARwAAADoAAAAkAAAABQAAAAFcOTkVa0ZGA+aW + lwD4np8A9J2dAN2MigCfX14Ak1dXAOiRkgD4np0A9JucAPWbnAD1nJ0A9pydAPagoQD4vL0A////AP// + /wD///8A////AP///wD///8A////AP///wD++/sA/vv5AOGUlaGdV1f/llFQ/9SJiv/8q6v/9qWl//ak + pP/1o6P/9aOj//Wiov/1oaH/856e//ednP/uj5L/oF9c8SQTFMYAAAClAAAAgAAAAFoAAAA7JRYYTYlM + TLLei4r73ZaWye2dni/83NwA/tvaAP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD9+voA/vj6AOOWlqCiWlv/nVdX/9eP + j//7rqz/9qWm//ampv/2pKT/9qSk//Wjo//1o6P/9aKj//Whof/3n6D/5I6P/5ZaW/9TMDH4EgoLzh8R + E66IUlPVxXV1/Lxub//Rhob//7S2//eop//1pKK4+KOiJ+SXlgDMgoIAnmBjAOuUlAD4m5sA9ZeYAPWZ + mgD1mpkA9ZmaAPWgoAD5wsIA////AP///wD///8A////AP///wD///8A////AP///wD9+fgA/vn4AOWZ + maCpYWH/olpa/9mVkv/9rq7/96em//anp//2pqb/9qam//alpf/2pKT/9aOj//ajo//6pKT/x4OD/3RM + S/+JVFX/r2pq/8d5ef/Me3z/vnFy/7Rra//TiYr//bWz//epq//3qan/9qin/f+wsLjOjYwk99HSAPTQ + 0QD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD8+PkA/fn5AOedn6KvZWX/qmBf/92ZmP/7sa//96qq//epqf/3qKj/9qen//ampv/2pqb/9qWl//el + pv/yoqH/t3h4/6dmaP/EeXj/yXl5/8N3d//Bd3f/wnd3/71xcP/YjpD//Le3//evr//4ra3/+Kur//ip + q//6qqr9zouLueiZmyT4o6MA9KCgAPWdnQD1m5sA9JiZAPWgoAD7yMgA////AP///wD///8A////AP// + /wD///8A////AP///wD++fkA/fn4AOegn6G2aGn/sWZl/9+am//8sbD/96qr//eqqv/3qan/96mp//eo + qP/3p6f/9qen//qoqf/pnZv/wnp6/8t9e//JfHz/x3p7/8h8fP/IfHz/yn19/8V1d//dlJT//ry9//iw + sv/5sLD/+a+v//itrf/7ra7//rSy//yurvz3qKe89qenIvrU1AD609MA////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD++PgA/fn3AOuho6C6bW7/tmpq/+Ggof/8srL/+K2t//is + rP/3q6v/96qq//epqf/3qKj/96io//upqP/mnZ3/xXx8/819f//NgYH/zoGB/8+Bgf/PgoL/04SD/8p5 + e//hmZf//8HB//q2tf/6tbX/+bOz//mzsv/7sbL/7Z+h/+aVlv/6p6f/96mp/vaoqLn1o6Mi9aGiAPae + nwD1mpoA////AP///wD///8A////AP///wD///8A////AP///wD99/cA/ff4AO2lp6DCdXb/vG9w/+Wj + pf/7tbT/+K6u//itrf/4ra3/+Kys//erq//3q6v/96qq//ysq//onaD/yYJ//9aGhv/Vhob/1oeH/9aH + h//YiIn/14mK/9GAfv/nmpv//sPF//u6u//7ubn/+re3//u2uP/0rKv/uYKA/8Curf/wvLz/+qqq//ir + q//3qan996inu/anpyb3np4C////AP///wD///8A////AP///wD///8A////AP///wD99/cA//f2AOyp + qqHIenv/xHd1/+eoqP/+tbT/+bCw//ivr//4rq7/+K6u//isrP/4rKz/96ur//usrP/ooaD/0omI/96O + jP/cjIz/3Y2O/9yNjf/biYr/24SE/9+IiP/4ubr//9PU//68vP/8vL3/+7q7//28u//6r6//0q2s/+z9 + /P/09/b/+qqp//ivsP/4rq7/+Kys//eqqv/2np53////AP///wD///8A////AP///wD///8A////AP// + /wD99vgA/fj2AO6qraHOfX3/yXp7/+iurf/9t7b/+bGw//mwsP/5r6//+K+v//iurv/4ra3/+K2t//uu + rf/poaP/2Y6O/+WSk//jj4//4YyN/+eQjf/woJ//9728/+3Bwf/QpKX/6sXF///c2///z83//8C///y8 + vP/+u7v//Ly8//jk5//609L/+ayv//mztP/5srL/+LCw//ivrv/4oaKC////AP///wD///8A////AP// + /wD///8A////AP///wD99fcA/fb2APGur6LVhIT/z39//+yzsv/7ubj/+bOz//mysv/5srL/+bGx//mw + sP/4r6//+K6u//2xsf/po6P/3Y+P/+6Ulv/0n5//+ra3//fEw//iuLj/vo+R/6hwcP+gYWD/oGJh/7eG + h//pvr7//dfZ///Q0f/+wcD//La5//ywsf/7sbH/+7m3//q3t//6trb/+bS0//mys//4paaA////AP// + /wD///8A////AP///wD///8A////AP///wD+9vYA/fb2APKxsaLbiYj/1oSE/+62t//8ubn/+rW1//mz + s//5s7P/+bKy//mxsf/5sbH/+bCw//yysf/ppKT/3JWV//a9u//qvb3/u46P/5VgXP+VWlj/n2Jj/6xw + b/+uc3T/rnR1/6hpaf+hZ2X/toKB/+G0tP/+2Nr//9TT///BwP/8vL3//L29//u7u//7ubn/+7i4//q2 + t//5qqmA////AP///wD///8A////AP///wD///8A////AP///wD99vcA/ff3APS2tqLhjo//3YiI//G7 + u//+vLv/+7e3//u1tf/5s7T/+bS0//mzs//5srL/+bGx//uysf/1q6v/2Jye/5xrbP9jMjP/dz9A/5RW + Wf+cXl//ml9f/5peXv+cZGT/p2xv/7B2dv+1fHr/rnBy/6pnav+7g4P/68K///7a3P//0dH//8LA//y9 + vf/8u73/+7y8//u7u//5r62A////AP///wD///8A////AP///wD///8A////AP///wD+9/cA/fX3APa6 + uqLnk5T/5I+Q//C5uf/3vb3/9be3//m9vf/7t7f/+rW1//q1tf/5tLT/+bOz//mysv/8tLL/+7W0//iv + rv/NjI3/i1dX/2k+Pv94Rkb/kVhX/5xgXf+ZWl7/kElN/5ZQUf+fXF3/pmhp/6xucf+0dHX/w31+/9KT + lP/qvr3//tvY///R0f/9wcL//L6+//y+vv/5sbGA////AP///wD///8A////AP///wD///8A////AP// + /wD++PYA/fb3APe6vaHumpn/65mY/+iYl//llpb/342M//C6uP/9vr7/+ra2//q2tv/6trb/+rS0//m0 + tP/5s7P/+bOz//23tf//wsL//b6+/9WVlP+PXV3/b0FB/2w0Mf9wKi3/mG1v/9DPzf+ZYGD/oVda/7h1 + dv+9enz/xoKF/8qEh//NhYj/2Zad//HBw//+2Nn//9DS//7Cwf/9sbSA////AP///wD///8A////AP// + /wD///8A////AP///wD++PYA//f2APm8wKL0nJz/8p6e/++bm//rmZr/5pGS//K8vf/9vr7/+re3//q3 + t//6t7f/+ra2//q1tf/6tbX/+bS0//mzs//6sbH//LS0//u5uP/pn5//qmhm/4xeXv+/vLv/7/f3//b7 + +//It7b/jj09/61sbf+3d3n/vnx+/8eHiP/SjpH/1pKU/9iSlP/imp//7rm7//3T1//9x8iV////AP// + /wD///8A////AP///wD///8A////AP///wD/9/cA/vf3APm+wqH1np7/9aGi//Sgof/yoJ//7peX//bD + w//8wMH/+7q6//u5uf/7uLj/+ri4//q3t//6trb//LW1//uztf/1r7H/4aCh/8KAf/+0f37/zMDA/+71 + 9v/t9/X/4uLi/+Lj5P/v9vb/mFxb/5pPUP+zcnX/vHl6/8GBhP/Hhob/yYKF/9COkP/nrrD/9s/O8f/h + 4Wn929sJ////AP///wD///8A////AP///wD///8A////AP///wD/9/kA//f3APnBxKL1np7/9aGh//Wh + of/2oaH/9Jub//rKyv/9xsX/+76+//u8vP/7uLf/+7m5//u5uf/6uLj/+be2//aztP/gnp7/xoiH/8av + sP/W4uH/3Obo/93g4P/f3t7/4uLg/+Lg4f/3+vv/0MjI/3cqLf+iYGD/sGxw/69lZv+3dnf/16an//XL + zf/+wb/I/97dAv3n5gD94uEA////AP///wD///8A////AP///wD///8A////AP///wD99/cA//j4APnD + xaH1np7/9aGh//Whof/1oaL/9Zyd//i5uv/5wsH/+Lm5//rKyP/9wsL/+7m5//u6uv/7ubn/+re4/+yw + rv/Ojo3/18jI//j7+//6+/v/8e/v/+Pk5P/i4uL/5OTk/+fn5//p6en/+v38/597e/9lICH/ilZW/8ud + n//7zM3//sXH//yrqv/2kI+9/M/QAPvY1wD+8vIA////AP///wD///8A////AP///wD///8A////AP// + /wD/+PgA//n3APrExqL1nZ3/9aGh//Whof/1oaH/9aGh//Wdnv/znJz/85WU//i9vf/9ysv//Lm4//u8 + vP/7u7v/+7m7/++ur//cpaX/2uHh/9Lf4v/O0dL/u7y8/97d3f/p6en/6Ojo/+rq6//r6Of/9Pn6//n5 + +f/jkZL/87a3///Iyf/+rKr/96Wk//irq//3pKLB////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD++PgA/vf3APrHyaL1n57/9aGh//Whof/1oaH/9aGh//Whof/1o6H/9Zqa//jA + wP/+z8///Lm8//y9vf/7vLz/+ry7//e5uf/zrq3/4pyf/9KjpP+jpaX/g4aI/9na2f/w8PD/6ejo/+zs + 7P/u7u7/7ezt/+v7/P/vzs7//aKi//itq//3q63/+K+u//itr//4oJ3C9pKTAPmurwD85eUA////AP// + /wD///8A////AP///wD///8A////AP///wD++fgA/vj5APvHzKL0np7/9aKh//Whof/1oaH/9aGh//Wh + of/1o6H/9Zqb//i+v//+z87//Lq7//y9vv/8vr7//b29//u9vf/9vb3/8bS0/+Obmf+vpqb/lp2d/+Tj + 4//v8fD/6urr/+/v7//x8fH/9PHx//X7+v/o9fb/7qWn//yrqv/5srL/+K+v//ivsf/2qKrC////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD/+fkA//n6APvJzKL0nJz/9aGh//Wh + of/1oaH/9aGh//Whof/1oqH/85uZ//m+vv/+2dz//cvM//zKzf/8wcH//Ly///y+vv/9v73/8re2/+Kf + n/+vqqn/n6am/+Xk4v/y8vH/7+/u//Lz8v/y8vP/+/n6/+jn6P/5/v3/79rd//eenv/5srL/+bGx//mx + sf/5pKPA95mYAPqyswD95uUA////AP///wD///8A////AP///wD///8A////AP///wD/+fkA//n5APzP + 0Jz1nZ3/9aGh//Whof/1oaH/9aGh//Whof/1oaH/9Z6f//Sko//1rKz/9qOh//e+v//+09L//b+///zA + wP/8wL7/9Li5/+Kiov+1rq7/pq6r/+bj5P/08vT/7/Dv//T09P/39/f//f79/8XLzP/l8/T/+v////XD + w//5rq7/+bO0//mysv/5rKrA////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD++foA//n6AP3c4in4uLrz9J2e//Whof/1oaH/9aGh//Whof/1oaH/9aGh//WgoP/1nZ7/9ZWV//ez + tv//09T//b69//3Cwv/8wcH/87m5/96fnv+5tbX/rbK0/+fm5v/08/P/7/Dv//X19f/5+fn//v/+/+LS + 0v/w3t7/98zM//izsv/7srP/+bS0//mzs//4pqbB95ydAPmzswD95eUA////AP///wD///8A////AP// + /wD///8A////AP///wD++/wA//z7AP/7/AD919x+9KSj//Wgn//1oaH/9aGh//Whof/1oaH/9aGh//Wh + of/1oqL/85ub//e1tv/+1Nb//cHB//3FxP/+w8P/9Lu7/9yiof+/ubr/uLu6/+fl5v/08/P/8/Pz//n4 + +v/6+/7///////i+vf/8o6L/+a6t//q1s//6t7f/+ra2//q2tf/5sa7A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A/vr7AP/5+gD+4egd+Le49fWenf/1oaH/9aGh//Wh + of/1oaH/9aGh//Whof/1o6H/9Zyb//e0tP//1NT//sLD//7Fxf/8x8X/9Lu8/+Clpf/Avr3/rbO0/+Hh + 4f/y8vH/7u7v//b29v/6+vr///////rIyP/6sbH/+7y9//u6uv/6uLj/+re3//q3t//6q62++KOkAPm1 + tQD94+QA////AP///wD///8A////AP///wD///8A////AP///wD///8A/vr9AP/9/QD/5OoK+b7B4vSb + m//1oaH/9aGh//Whof/1oaH/9aGh//Whof/1oqH/9Zyb//exsv//3N///snJ//7Gxv/+xcX/+cLA/+iu + sP/Lw8P/0+Df//b7+//+/f3/9vX1//P19P/39vj/+f79//nGxv/7s7P/+728//u6uv/7ubn/+7m5//q5 + uf/6s7K8////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A//z9AP/9 + /QD//fwA/M/Ws/Wcm//1np7/9aGh//Whof/1oaH/9aGh//Whof/1oaH/9aCh//Sdnv/3srP//c3Q///V + 1v//ycz//sTE//jAv//vuLb/6cXG/+3h4//4+vz//f/+//39/f/7+vr/9//+//nMzP/+t7b//L2///u8 + vP/7u7v/+7u7//u7u//7sbG8+qmqAPq1twD+4OAA////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP/6+AD++PkA/+brJPvFyOH1oaH/9Jub//Wgnv/1oaL/9aGh//Whof/1oaH/9aGh//Wh + of/0m5v/85yd//iys//+z9D//tbX///MzP/+xMP/9rm3/+qurf/hs7P/6c7P//j29f/8/v3/+fX0//rE + w//8vLz//L6+//y9vf/8vb3/+7y8//u7u//7ubi8////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP/7/QD//P0A//z9AP/n7g3/3ONw+r7A5vWioP/0mpj/9Z+c//Wh + of/1oaH/9aGh//Whof/1oaH/9aGh//KXl//1m5v/9rGz//zN0f/+1tf//s3M//7Fxv/3vL7/77Cv/+61 + tf/2xMT/+rm4//y8vP/8wsL//MHB//y/v//8vr7//L6+//y9vf/7tLW5+a+vAPu4uAD93t4A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD//P0A//39AP/5+gD/+vsA/+nvDP7d + 4m36wMLh9qOj//SZmf/1n57/9aGh//Whof/1oaH/9aGh/Peurfn1np3/8pOU//OZmv/4sbP//c7P//7V + 1v/+y8n//sbF//7ExP/8wML//sTF//3ExP/9w8P//cPD//3Cwv/8wcH//L+///y+vv/8u7y7////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP/7 + /QD//P0A//n6AP/j6QD/6e8H/uDmYvrBxOL2pKP/8pmY//Wgnv/1oaH/9Zub3PzO1Bb92t6J+LK29vWa + mP/0kpP/9Zqa//iys//9ztD//tXX//7Myv/+xMX//sbF//7Gxv/9xcX//cTE//3Dw//9w8P//cLC//zA + wP/8urit+7S0APy5uQD929oA////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A//r8AP/7/AD/+PkA//j5AP/p8Qf+3+Zg+sHE4vShpP/1m5r/9ZiZy//z + 9AD97+8A/+TrEfzV2Y74s7X485mZ//OSk//1mpr/97Gz//zOz///1tb//srM//7Gxf/+xsP//sbG//3F + xf/9xMT//cPD//3Cwv/9wsGZ////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A//n6AP/i5wD/4+oA/+PrAP/h6AD/4usA/+vzB/7j + 6WP6xcm19J2ePfi5vAD81t0A/dfaAPzY3QD/5ewP/tbZjvi0tfb0mpr/85OV//Wam//4sbL//s3O///V + 1f//zMz//sbG//7Gxf/+xsb//cXF//3ExP/9v8Cb/bu7APy+vgD92doA////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP/9 + /QD//P0A//j6AP7t8AD84+MA+9/gAP///wD///8A//X4AP/09wD+7O4A/uzuAP/l7BH+1dmO+LS39vWd + mv/zlJX/9Jqa//iys//9zM7//9PW//7Ly//+xcT//sbG//7Fxf/9xcOZ////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A//r7AP/i + 6QD/4ecA/+LoAP/i6QD/5OoA/+TqAP7g5QD7wccA9p2eAPesrwD909gA/trfAP7a3wD/3eQA/t7kAP3Y + 2wD+2eAA/+XrEf7W2Y/4s7f29Jqa//KVlP/1nJr/97Gx//3Mzv//0tL//srI//7Fxv/+xMWb/sDBAP7B + wQD+19cA////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A/v//AP719wD/9vcA/u7vAP7u8QD/5ukR/NXZjPizt/X1np3/9JWW//KcnP/4sLT4/9jcyf7Q + 0/r+xsdp////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A//z7AP/i6QD/4ucA/+LoAP/j6AD/4ugA/+LpAP/e5gD8w8cA9Z2dAPep + qgD909gA/tvgAP7Z3gD+2t8A/tngAP7a3wD+2t8A/t3jAP/e4wD92NwA/dreAP7j6xP+1dqN+LW39PWe + nP/0lZPw+bu/Fv/i5gz+xcUB/sXFAP7FxQD/1tYA////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD+9fgA//j5AP/w + 8QD/8/QA/uPqIfvS1pb2pqdn//n8AP/t7QD/7u4A////AP///wD///8A////AP///wD///8A////AP// + /wD///////8AAPg//////wAA8A//////AADwA/////8AZfAA/////wBs+AA/////AAD4AA////8AAPgA + AD///wBv+AAAB///AGX4AAAD//8AAPgAAAD//wAA+AAAAD//AGT4AAAAD/8AAPgAAAAD/wBk+AAAAAD/ + AAD4AAAAAB8AAPgAAAAAHwAA+AAAAAAfAGX4AAAAAB8AZfgAAAAAHwAA+AAAAAAfAAD4AAAAAB8AbPgA + AAAAHwBh+AAAAAAfAAD4AAAAAB8AAPgAAAAAfwBl+AAAAAD/ACD4AAAAAP8AZPgAAAAA/wAt+AAAAAD/ + AG/4AAAAAP8AAPgAAAAA/wAA+AAAAAD/AAD8AAAAAP8AZfwAAAAA/wAg/AAAAAD/AGT+AAAAAP8ALf4A + AAAA/wBl/wAAAAD/AAD/wAAAAP8AAP/wAAAA/wAA//wMAAD/AGX//w8AAP8AIP///8AA/wBk////8AD/ + AZL////8AP8AAP////8A/wAA/////8f/ACAoAAAAIAAAAEAAAAABACAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAA////AAAAAAEAAAAGAAAADQAAABIAAAATAAAAEwAAAA4AAAAHAAAAAwAAAAH///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8AAAAABQAAABQAAAAvAAAARAAAAE0AAABLAAAAPQAAACUAAAATAAAACAAA + AAMAAAAB////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AAAAAAEAAAAIRSIiekcjI/9HIyP/YTAw/x8PD7oAAACQAAAAaQAA + AEQAAAAmAAAAEwAAAAgAAAADAAAAAUcjI/9HIyP/RyMj/0cjI/9HIyP/RyMj/0cjI/9HIyP/RyMj/0cj + I/9HIyP/RyMj/0cjI/9HIyP/////AP///wD///8A////AAAAAAVHIyP/mUxM/2EwMP/MZmb/h0RE/203 + N/8dDg7JAAAAlQAAAGkAAABEAAAAJgAAABMAAAAIUSgo/+aPj//mj4//5o+P/+aPj//mj4//5o+P/+aP + j//mj4//5o+P/+aPj//mj4//5o+P/1EoKP////8A////AP///wD///8AAAAAAkcjI/+ZTEz/YTAw/9l9 + fv/ZfX7/xG5u/4dERP9tNzf/HQ4OyQAAAJUAAABpAAAARAAAACZfLy//6peX/+qXl//ql5f/6peX/+qX + l/+HRET/h0RE/+qXl//ql5f/6peX/+qXl//ql5f/Xy8v/////wD///8A////AP///wD///8ARyMj/5lM + TP9hMDD/2X1+//Wfn//0n5//9ZGQ/9h+fv+HRET/bTc3/x0ODskAAACVAAAAaW84OP/voKH/76Ch/++g + of/voKH/76Ch////////////76Ch/++gof/voKH/76Ch/++gof9vODj/////AP///wD///8A////AP// + /wBHIyP/mUxM/2EwMP/ZfX7/9aGh//Whof/1oqH/9aGh//WRkP/Yfn7/h0RE/203N/8dDg7JfT8///Op + qv/zqar/86mq//Opqv/zqar////////////zqar/86mq//Opqv/zqar/86mq/30/P/////8A////AP// + /wD///8A////AEcjI/+ZTEz/YTAw/9l9fv/1o6P/9aOj//ajo//1o6P/9qOj//Wjo//1kZD/2H5+/4dE + RP+HRET/97Gy//exsv/3sbL/97Gy//exsv/3sbL/97Gy//exsv/3sbL/97Gy//exsv/3sbL/h0RE//// + /wD///8A////AP///wD///8ARyMj/5lMTP9hMDD/2X1+//alpf/2paX/9qWl//alpf/2pKX/9qWl//al + pf/2pKX//5mZ/4dERP+HRET/h0RE/4dERP+dWlr/046O/zMzM/8zMzP/046O/51aWv+HRET/h0RE/4dE + RP+HRET/////AP///wD///8A////AP///wBHIyP/mUxM/2EwMP/ZfX7/96eo//aop//3p6f/9qen//an + qP/3p6f/9qeo//aop//3p6f/96en//+Zmf/Yfn7/h0RE/203N/84ODj/2NjY/9jY2P84ODj/AAAAIQAA + AAsAAAAC////AP///wD///8A////AP///wD///8A////AEcjI/+ZTEz/YTAw/9l9fv/3qqn/96qq//ap + qf/2qqn/96qq//eqqf/2qqn/96mp//epqv/3qqn/96mp//epqf//mZn/Pz8//93d3f/d3d3/3d3d/93d + 3f8/Pz//AAAAIAAAAAcAAAAB////AP///wD///8A////AP///wD///8ARyMj/5lMTP9hMDD/2X1+//es + q//3rKz/96ys//irrP/3rKz/+Kyr//esrP/3rKz/+Kus//irrP/4rKz/+Kys/0hISP/k5OT/5OTk/+Tk + 5P/k5OT/5OTk/+Tk5P9ISEj/AAAADQAAAAH///8A////AP///wD///8A////AP///wBHIyP/mUxM/2Ew + MP/ZfX7/+K6u//iur//4rq//+K+u//iur//4rq//+K6v//iurv/4rq7/+K+u//iurv9RUVH/7Ozs/+zs + 7P/s7Oz/7Ozs/+zs7P/s7Oz/7Ozs/+zs7P9RUVH/AAAAAf///wD///8A////AP///wD///8A////AEcj + I/+ZTEz/YTAw//WRkP/8wMD/+bCx//mxsf/5sbH/+bGw//ixsP/4sLH/+bGx//mxsP/4sLH/Wlpa//Pz + 8//z8/P/8/Pz//Pz8//z8/P/8/Pz//Pz8//z8/P/8/Pz//Pz8/9aWlr/////AP///wD///8A////AP// + /wD///8ARyMj/5lMTP9hMDD/YTAw/2EwMP/5s7P/+bOz//mztP/5s7T/+bOz//m0s//5tLT/+bO0//mz + s/+Yf3//YWFh/2FhYf9hYWH/+vr6//r6+v/6+vr/+vr6/2FhYf9hYWH/YWFh/2FhYaP///8A////AP// + /wD///8A////AP///wBHIyP/mUxM/7BYWP+ZTEz/YTAw//m1tv/6tbX/+rW2//m2tv/6trb/+ra2//q1 + tv/6trb/+ra1//q2tv/6trb/+ra2/2ZmZv//////////////////////ZmZm/wAAAAH///8A////AP// + /wD///8A////AP///wD///8A////AEcjI/+jUVH/wmFg/7BYWP9hMDD//t3d//7IyP/7ubn/+7i4//q5 + uf/6uLj/+7i5//q4uP/6ubn/+7i4//q4uP/7ubj/ZmZm//////////////////////9mZmb/////AP// + /wD///8A////AP///wD///8A////AP///wD///8ARyMj/7BYWP/Ebm7/wmFg/2EwMP9hMDD/YTAw//u7 + u//7u7r/+7u7//u7u//7u7v/+7u7//u7u//7urv/+7u7//u6u/+chYX/ZmZm/2ZmZv9mZmb/ZmZm/3he + Xv////8A////AP///wD///8A////AP///wD///8A////AP///wBHIyP/tVta/9t4eP/Ebm7/wmFg/7BY + WP9hMDD/+76+//y+vv/7vb3/+729//u9vv/8vb7/+769//u9vf/7vb3//L29//y9vf/8vb3//L29//u9 + vv/7vr3/nFJT/////wD///8A////AP///wD///8A////AP///wD///8A////AEcjI//CYWD/23h4/9t4 + eP/Ebm7/wmFg/2EwMP/+3d3//8zM//zAwP/8wMD//MDA//y/v//8wL///MC///y/v//8v8D//MDA//zA + wP/8wMD//MC///y/wP+fU1T/////AP///wD///8A////AP///wD///8A////AP///wD///8ARyMj/71p + av/ifn7/23h4/9t4eP/Ebm7/YTAw/2EwMP9hMDD//cLB//zCwv/9wsL//cLC//3Cwv/9wsL//MHC//3C + wv/9wsL//MLC//zCwv/9wsL//MLC/6FVVv////8A////AP///wD///8A////AP///wD///8A////AP// + /wBHIyP/w21u/+F9ff/ifn7/23h4/9t4eP/Ebm7/wmFg/2EwMP/9xMT//cTE//3ExP/9xMT//cTE//3E + xP/9xMT//cTE//3ExP/9xMT//cTE//3ExP/9xMT/o1ZY/////wD///8A////AP///wD///8A////AP// + /wD///8A////AGEwMP+hUFD/23h4/+F9ff/ifn7/4n5+/9t4eP/Ebm7/YTAw//7d3f/+xsb//cbG//7G + xv/+xsb//sbG//7Gxv/9xsb//sbG//7Gxv/+xsb//sbG//3Gxv+mWFr/////AP///wD///8A////AP// + /wD///8A////AP///wD///8AeTw8PGEwMP/DbW7/23h4/+J+fv/kf4D/5YGB/+WBgf95PDz/mUxM/+aA + gf/+3d3//sjI//7IyP/+yMj//sjI//7IyP/+yMj//sjH//7Hx//+yMf//sjH/6haW/////8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8AaDQ0hnk9Pf/beHj/4n5+/+R/gP/lgYH/54KD/+qF + hv/Ebm7/eTw8/5lMTP/mgIH//t3d//7Jyf/+ycn//snK//7Kyf/+ycr//srJ///Jyf/+ycn/q1td//// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8AYTAw/7VbWv/qhYb/5H+A/+WB + gf/ngoP/6oWG/+2IiP/wi4v/4n9+/3k8PP+ZTEz/5oCB//7d3f/+y8v//8vL///Ly///y8v//8rL///K + y/+tXl//////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wB5PDw8YTAw/4BA + QP/DbW7/8IuL/+eCg//qhYb/842N/8Ntbv/wi4v/842N/+J/fv95PDz/mUxM/+aAgf/+3d3//8zM///M + zP//zMz//8zM/7BfYP////8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8AZjMzoGEwMP+AQED/w21u//ONjf/DbW7/YTAw/6FQUP/DbW7/842N//uVlf/ohIT/eTw8/5lM + TP/mgIH//uPk///MzP//zMz/s2Fi/////wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AGg0NIZhMDD/YTAw/2EwMP////8AbDY2ZWEwMP+hUFD/w21u//iS + kv/9l5f/6oWG/3I5Of+ZTEz/5oCB//7j5P+2Y2T/////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AGw2 + NmVhMDD/oVBQ/8Ntbv/8nZ3//5mZ/+qFhv9yOTn/r11f/7hkZv////8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wBsNjZlYTAw/6FQUP/DbW7//5mZ/6FQUP////8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8AbDY2ZVYrK/+hUFD/r11f/////wD///8A////AP// + /wD///8A////AP///wD///8A////AIAf//+AB///AAAAB4AAAAeAAAAHwAAAB8AAAAfAAAAHwAAAB8AA + AB/AAAAPwAAAD8AAAA/AAAAPwAAAD8AAAD/AAAB/wAAAf8AAAH/AAAB/wAAAf8AAAH/AAAB/wAAAf+AA + AH/wAAB/8AAAf/wAAH//CAB///4Af///gf///+H/KAAAABAAAAAgAAAAAQAgAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAP///wBHIyP/RyMj/0cjI/9HIyP/RyMj/0cjI/9HIyP/RyMj/0cjI/9HIyP/RyMj/0cj + I/9HIyP/RyMj/////wD///8AUSgo/+aPj//mj4//5o+P/+aPj//mj4//5o+P/+aPj//mj4//5o+P/+aP + j//mj4//5o+P/1EoKP////8A////AF8vL//ql5f/6peX/+qXl//ql5f/6peX/4dERP+HRET/6peX/+qX + l//ql5f/6peX/+qXl/9fLy//////AP///wBvODj/76Ch/++gof/voKH/76Ch/++gof///////////++g + of/voKH/76Ch/++gof/voKH/bzg4/////wD///8AfT8///Opqv/zqar/86mq//Opqv/zqar///////// + ///zqar/86mq//Opqv/zqar/86mq/30/P/////8A////AIdERP/3sbL/97Gy//exsv/3sbL/97Gy//ex + sv/3sbL/97Gy//exsv/3sbL/97Gy//exsv+HRET/////AP///wCHRET/h0RE/4dERP+HRET/nVpa/9OO + jv8zMzP/MzMz/9OOjv+dWlr/h0RE/4dERP+HRET/h0RE/////wD///8A////AP///wD///8A////AP// + /wA4ODj/2NjY/9jY2P84ODj/////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wA/Pz//3d3d/93d3f/d3d3/3d3d/z8/P/////8A////AP///wD///8A////AP///wD///8A////AP// + /wBISEj/5OTk/+Tk5P/k5OT/5OTk/+Tk5P/k5OT/SEhI/////wD///8A////AP///wD///8A////AP// + /wBRUVH/7Ozs/+zs7P/s7Oz/7Ozs/+zs7P/s7Oz/7Ozs/+zs7P9RUVH/////AP///wD///8A////AP// + /wBaWlr/8/Pz//Pz8//z8/P/8/Pz//Pz8//z8/P/8/Pz//Pz8//z8/P/8/Pz/1paWv////8A////AP// + /wD///8AYWFho2FhYf9hYWH/YWFh//r6+v/6+vr/+vr6//r6+v9hYWH/YWFh/2FhYf9hYWGj////AP// + /wD///8A////AP///wD///8A////AGZmZv//////////////////////ZmZm/////wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wBmZmb//////////////////////2ZmZv////8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8AZmZmo2ZmZv9mZmb/ZmZm/2ZmZv9mZmaj////AP// + /wD///8A////AP///wCAATV7gAEAAIABAACAAf3/gAFUVIABVFSAAVRU/D+r//gfVFTwD1Sq4AdUVMAD + q//AA1RU+B9UAPgfVFT4H6v/ + + + \ No newline at end of file diff --git a/SOLVER/ShapesMerger/Program.cs b/SOLVER/ShapesMerger/Program.cs new file mode 100644 index 0000000..a8feaf1 --- /dev/null +++ b/SOLVER/ShapesMerger/Program.cs @@ -0,0 +1,20 @@ +using System; +using System.Collections.Generic; +using System.Windows.Forms; + +namespace ShapesMerger +{ + static class Program + { + /// + /// The main entry point for the application. + /// + [STAThread] + static void Main() + { + Application.EnableVisualStyles(); + Application.SetCompatibleTextRenderingDefault(false); + Application.Run(new MergeForm()); + } + } +} \ No newline at end of file diff --git a/SOLVER/ShapesMerger/Properties/AssemblyInfo.cs b/SOLVER/ShapesMerger/Properties/AssemblyInfo.cs new file mode 100644 index 0000000..d97bd72 --- /dev/null +++ b/SOLVER/ShapesMerger/Properties/AssemblyInfo.cs @@ -0,0 +1,33 @@ +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +[assembly: AssemblyTitle("ShapesMerger")] +[assembly: AssemblyDescription("dkxce Shapes Merger")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("Milok Zbrozek ")] +[assembly: AssemblyProduct("ShapesMerger")] +[assembly: AssemblyCopyright("Copyright © Milok Zbrozek 2021")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// Setting ComVisible to false makes the types in this assembly not visible +// to COM components. If you need to access a type in this assembly from +// COM, set the ComVisible attribute to true on that type. +[assembly: ComVisible(false)] + +// The following GUID is for the ID of the typelib if this project is exposed to COM +[assembly: Guid("0d00ba90-d8c6-4bd4-a1d9-4b892fa65598")] + +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +[assembly: AssemblyVersion("21.12.21.2")] +[assembly: AssemblyFileVersion("21.12.21.2")] diff --git a/SOLVER/ShapesMerger/Properties/Resources.Designer.cs b/SOLVER/ShapesMerger/Properties/Resources.Designer.cs new file mode 100644 index 0000000..0f044e6 --- /dev/null +++ b/SOLVER/ShapesMerger/Properties/Resources.Designer.cs @@ -0,0 +1,71 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version:2.0.50727.3662 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +namespace ShapesMerger.Properties +{ + + + /// + /// A strongly-typed resource class, for looking up localized strings, etc. + /// + // This class was auto-generated by the StronglyTypedResourceBuilder + // class via a tool like ResGen or Visual Studio. + // To add or remove a member, edit your .ResX file then rerun ResGen + // with the /str option, or rebuild your VS project. + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "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() + { + } + + /// + /// Returns the cached ResourceManager instance used by this class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Resources.ResourceManager ResourceManager + { + get + { + if ((resourceMan == null)) + { + global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("ShapesMerger.Properties.Resources", typeof(Resources).Assembly); + resourceMan = temp; + } + return resourceMan; + } + } + + /// + /// Overrides the current thread's CurrentUICulture property for all + /// resource lookups using this strongly typed resource class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Globalization.CultureInfo Culture + { + get + { + return resourceCulture; + } + set + { + resourceCulture = value; + } + } + } +} diff --git a/SOLVER/ShapesMerger/Properties/Resources.resx b/SOLVER/ShapesMerger/Properties/Resources.resx new file mode 100644 index 0000000..af7dbeb --- /dev/null +++ b/SOLVER/ShapesMerger/Properties/Resources.resx @@ -0,0 +1,117 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 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 + + \ No newline at end of file diff --git a/SOLVER/ShapesMerger/Properties/Settings.Designer.cs b/SOLVER/ShapesMerger/Properties/Settings.Designer.cs new file mode 100644 index 0000000..fc8f693 --- /dev/null +++ b/SOLVER/ShapesMerger/Properties/Settings.Designer.cs @@ -0,0 +1,30 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version:2.0.50727.3662 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +namespace ShapesMerger.Properties +{ + + + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "8.0.0.0")] + internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase + { + + private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings()))); + + public static Settings Default + { + get + { + return defaultInstance; + } + } + } +} diff --git a/SOLVER/ShapesMerger/Properties/Settings.settings b/SOLVER/ShapesMerger/Properties/Settings.settings new file mode 100644 index 0000000..3964565 --- /dev/null +++ b/SOLVER/ShapesMerger/Properties/Settings.settings @@ -0,0 +1,7 @@ + + + + + + + diff --git a/SOLVER/ShapesMerger/ShapesMerger.csproj b/SOLVER/ShapesMerger/ShapesMerger.csproj new file mode 100644 index 0000000..1b4d313 --- /dev/null +++ b/SOLVER/ShapesMerger/ShapesMerger.csproj @@ -0,0 +1,84 @@ + + + Debug + AnyCPU + 8.0.50727 + 2.0 + {818BA52B-47A1-4CD6-9694-56AA388822A5} + WinExe + Properties + ShapesMerger + ShapesMerger + merger.ico + + + true + full + false + ..\..\READY\TOOLS\ + DEBUG;TRACE + prompt + 4 + + + pdbonly + true + ..\..\READY\TOOLS\ + TRACE + prompt + 4 + + + + + + + + + + + + + Form + + + MergeForm.cs + + + + + Designer + MergeForm.cs + + + ResXFileCodeGenerator + Resources.Designer.cs + Designer + + + True + Resources.resx + + + SettingsSingleFileGenerator + Settings.Designer.cs + + + True + Settings.settings + True + + + + + + + + + \ No newline at end of file diff --git a/SOLVER/ShapesMerger/WaitingForm.cs b/SOLVER/ShapesMerger/WaitingForm.cs new file mode 100644 index 0000000..dea290d --- /dev/null +++ b/SOLVER/ShapesMerger/WaitingForm.cs @@ -0,0 +1,309 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.Text; +using System.Windows.Forms; +using System.Threading; +using System.Runtime.InteropServices; + +namespace KMZRebuilder +{ + public class WaitingBoxForm + { + private class WaitingForm : Form + { + private const int CP_NOCLOSE_BUTTON = 0x200; + protected override CreateParams CreateParams + { + get + { + CreateParams myCp = base.CreateParams; + myCp.ClassStyle = myCp.ClassStyle | CP_NOCLOSE_BUTTON; + return myCp; + } + } + + public WaitingForm() + { + this.tableLayoutPanel1 = new System.Windows.Forms.TableLayoutPanel(); + this.label1 = new System.Windows.Forms.Label(); + this.progressBar1 = new System.Windows.Forms.ProgressBar(); + this.tableLayoutPanel1.SuspendLayout(); + this.SuspendLayout(); + // + // tableLayoutPanel1 + // + this.tableLayoutPanel1.ColumnCount = 1; + this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 50F)); + this.tableLayoutPanel1.Controls.Add(this.progressBar1, 0, 0); + this.tableLayoutPanel1.Controls.Add(this.label1, 0, 2); + this.tableLayoutPanel1.Dock = System.Windows.Forms.DockStyle.Fill; + this.tableLayoutPanel1.Location = new System.Drawing.Point(0, 0); + this.tableLayoutPanel1.Name = "tableLayoutPanel1"; + this.tableLayoutPanel1.RowCount = 3; + this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 50F)); + this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 5F)); + this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 50F)); + this.tableLayoutPanel1.Size = new System.Drawing.Size(492, 145); + this.tableLayoutPanel1.TabIndex = 0; + // + // label1 + // + this.label1.Anchor = System.Windows.Forms.AnchorStyles.Top; + this.label1.AutoSize = true; + this.label1.Location = new System.Drawing.Point(209, 0); + this.label1.Name = "label1"; + this.label1.Size = new System.Drawing.Size(73, 13); + this.label1.TabIndex = 3; + this.label1.Text = "Please Wait..."; + // + // progressBar1 + // + this.progressBar1.Anchor = System.Windows.Forms.AnchorStyles.Bottom; + this.progressBar1.Location = new System.Drawing.Point(2, 2); + this.progressBar1.Name = "progressBar1"; + this.progressBar1.Size = new System.Drawing.Size(490, 23); + this.progressBar1.TabIndex = 2; + // + // WaitingForm + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.StartPosition = FormStartPosition.CenterParent; + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(492, 55); + this.Controls.Add(this.tableLayoutPanel1); + this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedToolWindow; + this.Name = "WaitingForm"; + this.Text = "Working in the background"; + this.Load += new System.EventHandler(this.WaitingForm_Load); + this.tableLayoutPanel1.ResumeLayout(false); + this.tableLayoutPanel1.PerformLayout(); + this.ShowInTaskbar = false; + this.ResumeLayout(false); + } + + private System.Windows.Forms.TableLayoutPanel tableLayoutPanel1; + private System.Windows.Forms.ProgressBar progressBar1; + private System.Windows.Forms.Label label1; + + private void WaitingForm_Load(object sender, EventArgs e) + { + progressBar1.Style = ProgressBarStyle.Marquee; + try + { + this.BringToFront(); + if(this.StartPosition != FormStartPosition.Manual) + this.CenterToScreen(); + } + catch { }; + } + + internal string Label + { + get + { + return label1.Text; + } + set + { + label1.Text = value; + } + } + } + + private Thread showThread; + private bool showForm = false; + private string formCaption = "Working.."; + private string formText = "Please wait..."; + private Point parentCenter; + private Form parent; + private bool isModal = true; + + public WaitingBoxForm(){} + + public WaitingBoxForm(Form parent) + { + if (parent != null) + { + this.parent = parent; + this.parentCenter = new Point(parent.DesktopLocation.X + (int)parent.Width / 2, parent.DesktopLocation.Y + (int)parent.Height / 2); + }; + } + + public WaitingBoxForm(string Caption, string Text) + { + this.formCaption = Caption; + this.formText = Text; + } + + public WaitingBoxForm(string Caption, string Text, Form parent) + { + this.formCaption = Caption; + this.formText = Text; + if (parent != null) + { + this.parent = parent; + this.parentCenter = new Point(parent.DesktopLocation.X + (int)parent.Width / 2, parent.DesktopLocation.Y + (int)parent.Height / 2); + }; + } + + public string Caption + { + get + { + return this.formCaption; + } + set + { + this.formCaption = value; + } + } + + public string Text + { + get + { + return this.formText; + } + set + { + this.formText = value; + } + } + + public bool Modal + { + get + { + return isModal; + } + set + { + isModal = value; + } + } + + public bool Activated + { + get { return showForm; } + } + + private bool ApplicationIsActive() + { + IntPtr foregroundWindow = GetForegroundWindow(); + if (foregroundWindow == IntPtr.Zero) return false; + + int foregroundWindowProcessID; + GetWindowThreadProcessId(foregroundWindow, out foregroundWindowProcessID); + + return foregroundWindowProcessID == System.Diagnostics.Process.GetCurrentProcess().Id; + } + + [DllImport("user32.dll", CharSet = CharSet.Auto, ExactSpelling = true)] + private static extern IntPtr GetForegroundWindow(); + + [DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = true)] + private static extern int GetWindowThreadProcessId(IntPtr handle, out int processId); + + [DllImport("user32.dll")] + private static extern bool SetForegroundWindow(IntPtr hWnd); + + private void ShowThread() + { + WaitingForm waitingform = new WaitingForm(); + waitingform.Text = this.formCaption; + waitingform.Label = this.formText; + + if (this.parentCenter != null) + { + waitingform.StartPosition = FormStartPosition.Manual; + waitingform.Location = new Point(parentCenter.X - waitingform.Width / 2, parentCenter.Y - waitingform.Height / 2); + }; + + waitingform.Show(); + waitingform.Refresh(); + + while (showForm) + { + Application.DoEvents(); + + if (waitingform.Text != this.formCaption) waitingform.Text = this.formCaption; + if (waitingform.Label != this.formText) waitingform.Label = this.formText; + waitingform.Refresh(); + + if (isModal && ApplicationIsActive()) + { + waitingform.BringToFront(); + waitingform.Activate(); + waitingform.Focus(); + waitingform.Refresh(); + }; + + System.Threading.Thread.Sleep(50); + }; + waitingform.Close(); + waitingform.Dispose(); + waitingform = null; + } + + public void Show() + { + if (this.showThread != null) + { + this.showForm = false; + this.showThread.Join(); + }; + if(this.parent != null) this.parentCenter = new Point(parent.DesktopLocation.X + (int)parent.Width / 2, parent.DesktopLocation.Y + (int)parent.Height / 2); + this.showThread = new Thread(new ThreadStart(ShowThread)); + showForm = true; + showThread.Start(); + } + + public void Show(Form parent) + { + this.parent = parent; + if (parent != null) + this.parentCenter = new Point(parent.DesktopLocation.X + (int)parent.Width / 2, parent.DesktopLocation.Y + (int)parent.Height / 2); + else + this.parentCenter = Point.Empty; + this.Show(); + } + + public void Show(string Caption, string Text) + { + this.formCaption = Caption; + this.formText = Text; + if(!this.Activated) + this.Show(); + } + + public void Show(string Caption, string Text, Form parent) + { + this.formCaption = Caption; + this.formText = Text; + this.parent = parent; + if (parent != null) + this.parentCenter = new Point(parent.DesktopLocation.X + (int)parent.Width / 2, parent.DesktopLocation.Y + (int)parent.Height / 2); + else + this.parentCenter = Point.Empty; + this.Show(); + } + + public void Hide() + { + this.showForm = false; + if(this.showThread != null) this.showThread.Join(); + this.showThread = null; + if (this.parent != null) + { + this.parent.BringToFront(); + this.parent.Activate(); + this.parent.Focus(); + this.parent.Refresh(); + }; + } + + } +} \ No newline at end of file diff --git a/SOLVER/ShapesMerger/merger.ico b/SOLVER/ShapesMerger/merger.ico new file mode 100644 index 0000000000000000000000000000000000000000..85eb760486b8f234ed767b5fba105b3d48ae940d GIT binary patch literal 86358 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

R;BRSYO=?PipJV4$K200x0U0t?I+ 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 V)Gd^fy7lUXV+tSFcMqi>{(pyd`|AJz literal 0 HcmV?d00001 diff --git a/SOLVER/ShapesMerger/obj/Debug/ShapesMerger.Properties.Resources.resources b/SOLVER/ShapesMerger/obj/Debug/ShapesMerger.Properties.Resources.resources new file mode 100644 index 0000000000000000000000000000000000000000..06c24d06c1cab750788146ce052b37770f3fa530 GIT binary patch literal 180 zcmX?i>is@O1_p+SK%5g?SzMBus~417oL^d$oLUTL1*ImYq!#HYB@`NoiUzETcr@=*-eeiA(7$%+Aid{pOqbp67d>cTdJ|w#8@U&W9?o22JYX_qozC zJ{35|cIyl*DwFkI#~ps!t$wauZlRY!?yS)5)=@svDmj4JsTo7o8+EqQ?etCB?aJ+r z*b)J^c~y!Y9|P_}wgXehBxH#KWGZzFcs@`XaAhPA4plY=$=^H5LgI{_RsEOcfb&oV zT!k>Bfc<~`#cUVlUyLg2Co^;~iTg%tYER3+cu(MGCq^2I237i}%I=>>7wABAXoMUH z9%AA5W@~*jnFnR3B>i31+7ef{P8TJG{IHMauW6bY zM5JkRvE{!S;`h=&aX4MVI=_TAGkD{DbN$}jcwe37En;kKosMSCMxWUlH)_+y(a!d1 zQ=7AW8(WJuwin-e*Y=sCNz*FDi-$a*SN--&n)arjzve%2StE6~1DeS%)Gr8!CQWPW zC)mU8#l8)@Hf*_dynm-`H}*vPd8_@7rvab;Oj?cZ;y@hZN9XGsQRYR|`vLEv-mLfK zy~GLi6X&lL!~Vj1OxoRwcO_e!rtuS~zaX2Yy{Zndtwo4d+SGuPELM44Jo zO|!K99Ovrr(UtvGG}*&7Ed+%tYT=LgYtLX0SBGg`@M|tr;1^NgS1hPh}I6dR1% z9TmU|cKids6|}H`$hzSHVF6+0pIQ`{#bu*Sc4QzdTE%jZLu2$Qx*|-|J1EAE%g_bx znj8;-6K;-rCd}->Q-q*V?eGMqVwRv-$i?i4;`6vg<>HD{2^`HNPm6BXaBXE(Y)>)Vw8i;} zn;&W9w{r8#82KIC{BlNq56Opc&CYo22iqS(OB|1KyG*g@HM6l}9^+O%YLo4WtWrwu zl&KObcTjVbUu2YDgrh27Us3Zz9)}TAvyBFkZ*akt^#hVzamxhAvYpV-*YLaplkhJp^+NM99JPvJ%wY6{WsU!iKSB|`MRyz%R* z5ChBNsD@uWq6=yk*#aXcvfhIsfsUuRVUlfeRObWrg!ZasEr#;4k@X795cuD|W!)lf zsqR_1iq+LgCavln`oq2@aTltDpeFw3w&yAR!hp8XeGL z7_!an$LnFQLDd9GRTC5z z#Hxn5*j1{=WC?b>j?02fv5>mi@doxyv0-Z0UR)?jv{a7WVcIK4OTV zxRv%RJR~fnazM4&U_;yLohf-E!81AUM`t;o!jCBiYTY7DQ7n|HnKhmT-Ccr*0M}D} z0&c4L`wRW=e2shgO|&gEuyhQ7W(kRj#&5A8=esy#EoH6c_?RmQayIokZqLU}tS`v( zB?9#7D?>8o@X(0xVo_0Hp<%@a71x4;z3vrmHU)*5?IpNkEvy)@RV=JnSg61jKh+w| z62yIuv;L(^$J9jg1fV0r10!072dVnsQT3OJlx2d$fYS%VE&7PyszOa+5T*SNu1xHf z3@jNGU?~w`hsv~QVZn}CsNH8PMuY{(lfsg4Wq}sSFv*^U@du{B62ZjYgtTkAyWn}MLcw}2b^&181;+N%0 zqgW;RXfIFjVK-ggW5{-hgpP!65^FdXWN}r{ zmIAQY-{(sjxG(YIy6=iBF?1j}r~-e{B)9kH(RRXHr9HyEa3zZ0WCFVmk$?*|>@Q6W?b&CbbZjkq^ZXqJ}{mdGQv)>k` zS)24mKlz3DN3?WcvISO5?f6?FEI+kyz~Kz3V3zy!L;(kG!nTz4*bgQ#uMwvCa|edV zUoQ|VF1jlu)GW%`dB0ex;w1trg<6D!Ate}q@Zw>`D+gJmh>MpnKlrA#Nz1zL`Qul% z?q1Pa;hV%cB-_5-SDaq>OqpI@asDywwT3G!MZmh+in?u5b!-9nZ2zb30#)lt|@em9ap#;J# zo;+3rfwDv}D?+ZS7gvRW$IS?E0PB`;Tp!|qI~5XsN7UOT@31%I-B46oGSuD(`;JfX z!>H!YD(zz9Y-2v#1V36-L?OOtnTGnBqJX$|RPr4q?>Ko`@*Z`!4&CTziMnwTYEGTR%|nDW zh6^T7S8VBF9$Se^bRV8$3JhKugXs3$T|FWYQK^`;;QJwBV4H_QgFBSKrOc3G)J*>N*4#oK>w(%{I2tgb@HJvS16PDyfBC~0is&w; z4R|4@7zdw1mzzy7ZFx6b?0(L>qERtoH`HAKwm_8yg0So4vbYy^V|W*K*=&;SifPA; zV&YtT-bH&*>m_cNG_y@0-~%CjBHd%=Eia>9f%)TYFwwjZ`WDk^p`koisgrJ zd?ia7*!(~~*!*xl*!-YA*!<8w*xUg|c4nq2{1& z7Cnp0)i!ycw@n`CZQ}!1+xWoxsAt2N=j?1~m?%`st6|J6>(IMjT=Ko4Va$kh7#fEB z#a&QgG2fxBj_+lI8Az@M^MUPDA)ztbIn>Y?W>`CV35}U$RAa;?iH627GF|uKgED12 zB*84_cEdfGVXfkI4`!BD_Yjw)81BI^FRP%<2YQGtLv&j|;5WkKrd-CEZn!BktZ#UM zT-K!bvbZF`-;G9QxO$ln(92K&dN2PVdzsZvq@#!XKvxn!x;f=k!?~<840kB6X}0Gg z%GfqQATd2r($ULZJkrtIePF%Q@ss-~0-a_Y&7#7mxykxyW`-EeHqNSfK%GxTst)D@ zJPkIMn4kInecU$zA2PPY^kx1pl8?tWJNjY2TyHohexZR8rdU?0BLgE%v8+-@29}lv zZ)9K@Q!J~~k%48Ul^Yr8_|;vDv!Fl9qpi$GGoXJhF~4y$`pXLVmd?+) zf&p%ZEs-mTkQEGc^POioFpqaLP$P!8F1|sM&uw>(G1SNm+j!J?w?~C+E1c^M<(T2? z&Z6K}E~wv`8Mrg*^}I9pku%p&BQt#5neCDDKC}Conc?fsqF`k%sNb0xxHD9)=bhQC zxdyB}(2WKkM0gG)W;tKrT6Ksq!?u^Z+*7kN-!*{6RqyaskBWW<;Fs3G&)d(%3I&NblL zmO)p`e79L^ zfG&dUIp@MB9j~HVJs?I(tp$!k0}*J5c&m6Y(olMA8TF7JBq7}z;ffwqgd1eF*~{WC z;{M1-2WXGsK7dY`R#t{qmI#x7-yxPrlYeAgY)hN`OY^pj$-fM5BkZI2)|^e}*f&6X z>gukykLK?2tVYyxH|h!Hc9`vBP$a~nN}AsGFKZvmSBd=jyC?@_a=&mN%A7!GVC5iZ zD~#8WsA`fgv$ui|M+;P(*xAdw>$^8jdvS*wKlG0ej>=c570yU5NThuiDB z7~3Hx`#tDG`vh($Paw>PKufa(o%L`{XNVEIpYbmG+H8vKjN&e73qLnN13EPzG3;tC z^@j@$|M_{i%$?C+W|O}o0c{8^>1T%$L*M~j7*e`^T{nA@U{988q5C_R!-W9Zg{!$S z?k66~EFK6?AY~7C;i{j(v#J2s69vd83h;QM0QE#}Ha}5-!`BmWoBYJOMIk>^EH_!m z2XU2r0D)PLGAtl>89p+ULD<1KW9hle@KND1EPhdj*5?r4^+GiE&v8>I_OB`Qs-<9rAIcK13>*VU7bz-+z-s$-70)-jhi)nFWvG@2(_ z^RbclR#QnBJjKxh?p?h(Je8og$*YjNnHE{O>`jD(cJv`84LBr3h4-Qj3*-$K%FQBd zD(Dw!*2nCNnGIoZM~4PhZ-C^G#j!+|eV#X^LPWo@?d5TWqLC;n@pTu^R`HdR=~${) z#)C+fsEOE*k38U~v-DBrRe*a_XB9#tPY71Q^TjMfp_t|P>CBCRCNMN&1vf&p8OaX4 z&2n7pMw(YHc;^88~Ez7VE>l)f); zrSA)H>H7lnEC+uvHw$A6?ATY~DMBn3$7*bCJYn3>u?D-y;Y!n|@m%pL@cGX*EgbU) z%5=7Jr^^(;ePVYlb8WmE%jdi@0L+SXtmE4C^Xsu+x;*B~pO4vqUB^cJRM5|D!oDe% zD~pJ5{D}i~kvzdSj3{k9;R+x4K3?7#vz$F)sFZicj53bD4ApMNzTTEC*mZ2hk7^5_ zi$ptruMy+(ToKpVPC>WX`l91Jymrw(M;z+JBk^-YI<^@Py15T*xU*Np#us>miOjIR z=H+EF(-n$}OQ!JCKPs!{UM;O|Dh@njZ)Q0+8oG-awiAAEW+OcwMOG9iYDNF}@LkK= zg}OGmd|2)i>pw*;o(?Q`i|($Lvu_twI*+0a${Qv313>FM$yx_?ImEt0K9lU#5$*%W zNUGlKIbqYwVcb2gsc|PjR@$+Pivi+tEZKMC5Nca$iap|7azF)5ONLLu`Aqg& zt(CO^JdPjR<1lbQtdH;GCz+2+grWSm&heMM5B21--@4s>0Oj3wmyd)FGxK^9p&Ou2 znG4{T1F5KAlWXcCQzXes7yJlkaUXw!A* zEAuVdSB2UYaM`{JF!Yu53lUT>Rv9cVf9_ex6*flkVPx3n!W36TNR(ZcHO$}XC+;wu z*dnSD_V?eY3r>K~y8dCf1b1-Xq=bH=Aw(~$5_P?OiMpODsxF)1gw^(;)mAsMZc9@v zkC`@gH@lu0xGu7tj~J@(XeY8c+;O5aRNb;l@3GATR==0*clZ|ECp>}$pVu0#MjOfs zzA2W6tiR(kbbuVwu{^S4AsL}B;?Lp=~T8D=!$oU)pNlm8ue0C!Sp z8LoSjQiV{rCA7#h#Z1xG-E!GOVJh5BlTtII8pgSbItZ#3I4JTxrSaR`Tw6#Rq-=r<3y_C3We(b zL@Z%~-}?g2*6S>cM_?QMp(BN9f$TUpz(x&zWtbMB-(1Z;o60y24=SH!osqE#}dM@-C{Z4sIS_ zzH333pieB?6!ghG?y(zD;E%z`>jx@_I=^uZLj)VF7<9v_cc1mX(1>FGJV9*13WsWG zj3@tKv8cf?YQ@5Z5S=d;J~)nZ=Z4DVetf6m7Hf$0xu6HJgrM%0A*NV%3REisa4uqq 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

=ZrQ3>Vqz70ef^O2&#{*iF^nzeObG9rWI#-E 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 literal 0 HcmV?d00001 diff --git a/SOLVER/ShapesMerger/obj/Debug/ShapesMerger.pdb b/SOLVER/ShapesMerger/obj/Debug/ShapesMerger.pdb new file mode 100644 index 0000000000000000000000000000000000000000..987ea7c9ce533afd4acc41dacdd01ddceddecac1 GIT binary patch literal 97792 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

OYHlL@9mt7k#V0 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 literal 0 HcmV?d00001 diff --git a/SOLVER/ShapesMerger/obj/ShapesMerger.csproj.FileListAbsolute.txt b/SOLVER/ShapesMerger/obj/ShapesMerger.csproj.FileListAbsolute.txt new file mode 100644 index 0000000..ac10acb --- /dev/null +++ b/SOLVER/ShapesMerger/obj/ShapesMerger.csproj.FileListAbsolute.txt @@ -0,0 +1,8 @@ +M:\NAVICOM_PROJECTS\_ROUTES_PSOURCE_\READY\TOOLS\ShapesMerger.exe +M:\NAVICOM_PROJECTS\_ROUTES_PSOURCE_\READY\TOOLS\ShapesMerger.pdb +M:\NAVICOM_PROJECTS\_ROUTES_PSOURCE_\SOLVER\ShapesMerger\obj\Debug\ResolveAssemblyReference.cache +M:\NAVICOM_PROJECTS\_ROUTES_PSOURCE_\SOLVER\ShapesMerger\obj\Debug\ShapesMerger.Properties.Resources.resources +M:\NAVICOM_PROJECTS\_ROUTES_PSOURCE_\SOLVER\ShapesMerger\obj\Debug\ShapesMerger.csproj.GenerateResource.Cache +M:\NAVICOM_PROJECTS\_ROUTES_PSOURCE_\SOLVER\ShapesMerger\obj\Debug\ShapesMerger.exe +M:\NAVICOM_PROJECTS\_ROUTES_PSOURCE_\SOLVER\ShapesMerger\obj\Debug\ShapesMerger.pdb +M:\NAVICOM_PROJECTS\_ROUTES_PSOURCE_\SOLVER\ShapesMerger\obj\Debug\ShapesMerger.MergeForm.resources diff --git a/SOLVER/ShapesPolygonsExtractor/DBFSharp.cs b/SOLVER/ShapesPolygonsExtractor/DBFSharp.cs new file mode 100644 index 0000000..8f59e75 --- /dev/null +++ b/SOLVER/ShapesPolygonsExtractor/DBFSharp.cs @@ -0,0 +1,1190 @@ +// http://www.realcoding.net/articles/struktura-dbf-failov-dlya-neprodvinutykh.html +// http://www.autopark.ru/ASBProgrammerGuide/DBFSTRUC.HTM#Table_9 + +using System; +using System.IO; +using System.Collections; +using System.Collections.Generic; +using System.Text; + +namespace DBFSharp +{ + public class DBFFile: FileStream + { + private const byte MAIN_HEADER_SIZE = 32; + private const byte FIELD_INFO_SIZE = 32; + + private bool _tenHeaderMode = true; + private bool header_exists = false; + private string filename; + private uint records = 0; + private uint _header_space = 0; + + private CodePageSet _cp = CodePageSet.Default; + private FieldInfos _FieldInfos = new FieldInfos(); + public CodePageList CodePages = new CodePageList(); + private MyBitConverter bc = new MyBitConverter(true); + + public bool ShortenFieldNameMode { get { return _tenHeaderMode; } set { _tenHeaderMode = value; } } + + public DBFFile(string fileName) : base(fileName, FileMode.OpenOrCreate, FileAccess.ReadWrite) + { + filename = fileName; + _cp = CodePageSet.Default; + if (this.Length < MAIN_HEADER_SIZE) + WriteHeader(); + else + ReadHeader(0); + } + + public DBFFile(string fileName, byte dbfCodePage) : base(fileName, FileMode.OpenOrCreate, FileAccess.ReadWrite) + { + filename = fileName; + SetCodePage(dbfCodePage); + if (this.Length == 0) + WriteHeader(); + else + ReadHeader(dbfCodePage); + } + + public DBFFile(string fileName, FileMode mode) : base(fileName, mode, FileAccess.ReadWrite) + { + filename = fileName; + _cp = CodePageSet.Default; + if (this.Length < MAIN_HEADER_SIZE) + WriteHeader(); + else + ReadHeader(0); + } + + public DBFFile(string fileName, FileMode mode, byte dbfCodePage): base(fileName, mode, FileAccess.ReadWrite) + { + filename = fileName; + SetCodePage(dbfCodePage); + if (this.Length == 0) + WriteHeader(); + else + ReadHeader(dbfCodePage); + } + + public FieldInfos FieldInfos + { + get + { + return _FieldInfos; + } + } + + public byte FieldsCount + { + get + { + if (_FieldInfos == null) return 0; + if (_FieldInfos.Count == 0) return 0; + return (byte)_FieldInfos.Count; + } + } + + public ushort RecordSize + { + get + { + if (_FieldInfos == null) return 0; + if (_FieldInfos.Count == 0) return 0; + return _FieldInfos.RecordSize; + } + } + + public ushort HeaderSize + { + get + { + if (_FieldInfos == null) return 0; + if (_FieldInfos.Count == 0) return 0; + return (ushort)(_FieldInfos.Count * FIELD_INFO_SIZE + MAIN_HEADER_SIZE + 1 + _header_space); + } + } + + private ushort StdHeaderSize + { + get + { + if (_FieldInfos == null) return 0; + if (_FieldInfos.Count == 0) return 0; + return (ushort)(_FieldInfos.Count * FIELD_INFO_SIZE + MAIN_HEADER_SIZE + 1); + } + } + + public bool HeaderExists + { + get + { + return header_exists; + } + } + + public uint RecordsCount + { + get + { + return records; + } + } + + private void SetCodePage(byte dbfCodePage) + { + _cp = CodePages[dbfCodePage]; + if (_cp.headerCode == 0) + { + base.Close(); + throw new Exception("Unknown Code Page"); + }; + try + { + if (_cp.Encoding == null) + { + base.Close(); + throw new Exception("Unknown Code Page " + _cp.codePage); + }; + } + catch (Exception ex) + { + base.Close(); + throw new Exception("Unknown Code Page "+_cp.codePage+"\r\n"+ex.Message); + }; + } + + private void ReadHeader(byte dbfCodePage) + { + byte[] buff; + // records count + this.Position = 4; + buff = new byte[4]; + this.Read(buff, 0, buff.Length); + records = bc.ToUInt32(buff, 0); + // header size + buff = new byte[2]; + this.Read(buff, 0, buff.Length); + ushort hdr_size = bc.ToUInt16(buff, 0); + // record size + this.Read(buff, 0, buff.Length); + ushort rec_size = bc.ToUInt16(buff, 0); + // code page + this.Position = 29; + byte cod_page = (byte)this.ReadByte(); + this.SetCodePage(dbfCodePage > 0 ? dbfCodePage : (cod_page > 0 ? cod_page : (byte)201)); + // read fields + this.Position = 32; + _FieldInfos = new FieldInfos(); + int tb = hdr_size - 2; + while (this.Position < tb) + { + buff = new byte[11]; + this.Read(buff, 0, buff.Length); + string fName = _cp.Encoding.GetString(buff).Trim('\0').Trim(); + byte ft = (byte)this.ReadByte(); + buff = new byte[4]; + this.Read(buff, 0, buff.Length); + int offset = bc.ToInt32(buff, 0); + byte fsize = (byte)this.ReadByte(); + byte dpnt = (byte)this.ReadByte(); + buff = new byte[14]; + this.Read(buff, 0, buff.Length); + FieldInfo fi = new FieldInfo(fName, fsize, dpnt, (FieldType)ft); + fi.offset = (ushort)offset; + _FieldInfos.Add(fi); + }; + this._header_space = (uint)hdr_size - this.StdHeaderSize; + this.Position = hdr_size; + header_exists = true; + } + + private void WriteHeader() + { + byte[] buff = new byte[0]; + this.Position = 0; + this.WriteByte(0x03); // 0 - TYPE + MEMO 0x83 + this.WriteByte((byte)(DateTime.UtcNow.Year % 100)); // 1 - YY + this.WriteByte((byte)DateTime.UtcNow.Month); // 2 - MM + this.WriteByte((byte)DateTime.UtcNow.Day); // 3 - DD + buff = bc.GetBytes((uint)0); + this.Write(buff, 0, buff.Length); // 4 - records count + buff = bc.GetBytes((ushort)0); + this.Write(buff, 0, buff.Length); // 8 - header size + buff = bc.GetBytes((ushort)0); + this.Write(buff, 0, buff.Length); // 10 - record size + this.WriteByte(0x00); // 12 - Reserved + this.WriteByte(0x00); // 13 - Reserved + this.WriteByte(0x00); // 14 - Ignored + this.WriteByte(0x00); // 15 - Normal + buff = new byte[12]; + this.Write(buff, 0, buff.Length); // 16 - reserved + this.WriteByte(0x00); // 28 - No Index + this.WriteByte((byte)_cp.headerCode); // 29 - Code Page + this.WriteByte(0x00); // 30 - Reserved + this.WriteByte(0x00); // 31 - Reserved + } + + public void WriteHeader(FieldInfos fields) + { + if (this.records > 0) throw new Exception("Can't write header if any records exists"); + _FieldInfos = fields; + WriteHeader(); + + byte[] buff = new byte[0]; + ushort hdr_size = MAIN_HEADER_SIZE + 1; + int mhl = 0; + + fields.ReIndex(); + for (int i = 0; i < fields.Count; i++) + { + buff = fields[i].BName(_cp.Encoding); + if (fields[i].GName.Length > 11) + buff[10] = (byte)(0x41 + (mhl++)); + if(_tenHeaderMode) buff[10] = 0; + this.Write(buff, 0, buff.Length); // 0 - Field Name + buff = new byte[] { (byte)fields[i].FType }; + this.Write(buff, 0, buff.Length); // 11 - Field Type + buff = bc.GetBytes((int)fields[i].offset); + this.Write(buff, 0, buff.Length); // 12 - Field Offset + this.WriteByte((byte)fields[i].FLength); // 16 - Field Size + this.WriteByte((byte)fields[i].FDecimalPoint); // 17 - No Decimal Point + buff = new byte[14]; + this.Write(buff, 0, buff.Length); // 18 - Reserved + + hdr_size += FIELD_INFO_SIZE; + }; + this.WriteByte(13); //TERMINAL BYTE + this.WriteByte(26); //TERMINAL BYTE + + this.Position = 8; + buff = bc.GetBytes(hdr_size); // header size + this.Write(buff, 0, buff.Length); + buff = bc.GetBytes(fields.RecordSize); // record size + this.Write(buff, 0, buff.Length); + + this.Position = hdr_size; + header_exists = true; + } + + private bool WriteData(Dictionary record, long position) + { + if (!header_exists) throw new Exception("Header doesn't created or exists"); + if (record == null) return false; + if (record.Count == 0) return false; + if ((_FieldInfos == null) || (_FieldInfos.Count == 0)) return false; + + _FieldInfos.ZeroValues(); + foreach (KeyValuePair kvp in record) + { + FieldInfo fi = _FieldInfos[kvp.Key]; + if (fi != null) + fi.FValue = kvp.Value; + }; + + this.Position = position; + this.WriteByte(0x20); //_BEGIN RECORD_ // + + for (int i = 0; i < _FieldInfos.Count; i++) + { + byte[] def = new byte[_FieldInfos[i].FLength]; + if ((_FieldInfos[i].FType == FieldType.Numeric) || (_FieldInfos[i].FType == FieldType.Float)) + { + for (int x = 0; x < def.Length; x++) + def[x] = (byte)' '; + if (_FieldInfos[i].FValue != null) + { + string ddd = _FieldInfos[i].FLength.ToString(); + string nf = "{0,-" + ddd + "}"; + if (_FieldInfos[i].FDecimalPoint > 0) { nf = "{0,-" + ddd + ":0."; for (int x = 0; x < _FieldInfos[i].FDecimalPoint; x++) nf += "0"; nf += "}"; }; + byte[] buff = _cp.Encoding.GetBytes(String.Format(System.Globalization.CultureInfo.InvariantCulture,nf, _FieldInfos[i].FValue)); + if (buff.Length > def.Length) + throw new Exception("Numeric Value is too large: " + _FieldInfos[i].FValue.ToString()); + Array.Copy(buff, 0, def, def.Length - buff.Length, buff.Length); + }; + }; + if ((_FieldInfos[i].FType == FieldType.Memo) || (_FieldInfos[i].FType == FieldType.Binary) || (_FieldInfos[i].FType == FieldType.General) || (_FieldInfos[i].FType == FieldType.Picture)) + { + for (int x = 0; x < def.Length; x++) + def[x] = (byte)' '; + if (_FieldInfos[i].FValue != null) + { + byte[] buff = _cp.Encoding.GetBytes(_FieldInfos[i].FValue.ToString().Replace(",", ".")); + if (buff.Length > def.Length) + throw new Exception("Meme Value is too large: " + _FieldInfos[i].FValue.ToString()); + Array.Copy(buff, 0, def, def.Length - buff.Length, buff.Length); + }; + }; + if (_FieldInfos[i].FType == FieldType.Integer) + { + def = bc.GetBytes((int)_FieldInfos[i].FValue); + }; + if (_FieldInfos[i].FType == FieldType.Character) + { + if (_FieldInfos[i].FValue != null) + { + byte[] buff = _cp.Encoding.GetBytes(_FieldInfos[i].FValue.ToString()); + if (buff.Length > def.Length) + Array.Copy(buff, def, def.Length); + else + Array.Copy(buff, def, buff.Length); + } + else + { + byte[] buff = new byte[def.Length]; + Array.Copy(buff, def, def.Length); + }; + }; + if (_FieldInfos[i].FType == FieldType.Logical) + { + byte[] buff = new byte[] { (_FieldInfos[i].FValue == null) || (((bool)_FieldInfos[i].FValue) != true) ? (byte)((char)'F') : (byte)((char)'T')}; + if (buff.Length > def.Length) + Array.Copy(buff, def, def.Length); + else + Array.Copy(buff, def, buff.Length); + }; + if (_FieldInfos[i].FType == FieldType.Date) + { + for (int x = 0; x < def.Length; x++) + def[x] = (byte)' '; + if ((_FieldInfos[i].FValue != null) && (_FieldInfos[i].FValue is DateTime)) + { + byte[] buff = _cp.Encoding.GetBytes(((DateTime)_FieldInfos[i].FValue).ToString("yyyyMMdd")+" "); + Array.Copy(buff, 0, def, def.Length - buff.Length, buff.Length); + }; + }; + if (_FieldInfos[i].FType == FieldType.DateTime) + { + for (int x = 0; x < def.Length; x++) + def[x] = (byte)' '; + if ((_FieldInfos[i].FValue != null) && (_FieldInfos[i].FValue is DateTime)) + { + byte[] buff = _cp.Encoding.GetBytes(((DateTime)_FieldInfos[i].FValue).ToString("yyyyMMddHHmmss")); + Array.Copy(buff, 0, def, def.Length - buff.Length, buff.Length); + }; + }; + this.Write(def, 0, def.Length); + }; + return true; + } + + public uint WriteRecord(Dictionary record) + { + long pos = (long)this.HeaderSize + (long)this.records * (long)this.RecordSize; + bool res = WriteData(record, pos); + if (res) return this.records++; + return 0; + } + + public uint WriteRecord(object[] record) + { + if ((record == null) || (record.Length == 0)) return 0; + if ((_FieldInfos == null) || (_FieldInfos.Count == 0)) return 0; + Dictionary rec = new Dictionary(); + for (int i = 0; (i < record.Length) && (i < _FieldInfos.Count); i++) + rec.Add(_FieldInfos[i].FName, record[i]); + return WriteRecord(rec); + } + + public uint WriteRecord(uint index, Dictionary record) + { + if (index < 1) return 0; + + uint tmpi = index - 1; + if (tmpi > this.records) return 0; + long pos = (long)this.HeaderSize + (long)tmpi * (long)this.RecordSize; + bool res = WriteData(record, pos); + if (res) return tmpi == this.records ? ++this.records : index; + return 0; + } + + public uint WriteRecord(uint index, object[] record) + { + if ((record == null) || (record.Length == 0)) return 0; + if ((_FieldInfos == null) || (_FieldInfos.Count == 0)) return 0; + Dictionary rec = new Dictionary(); + for (int i = 0; (i < record.Length) && (i < _FieldInfos.Count); i++) + rec.Add(_FieldInfos[i].FName, record[i]); + return WriteRecord(index, rec); + } + + public uint WriteRecord(Dictionary record, long position) + { + ushort hs = HeaderSize; + ushort rs = RecordSize; + if (position < hs) return 0; + if (position > this.Length) return 0; + uint index = 1; + for (long i = hs; i < this.Length; i += (long)RecordSize, index++) + { + if (position == i) return WriteRecord(record, index); + if (position < i) break; + }; + return 0; + } + + public uint WriteRecord(object[] record, long position) + { + if ((record == null) || (record.Length == 0)) return 0; + if ((_FieldInfos == null) || (_FieldInfos.Count == 0)) return 0; + Dictionary rec = new Dictionary(); + for (int i = 0; (i < record.Length) && (i < _FieldInfos.Count); i++) + rec.Add(_FieldInfos[i].FName, record[i]); + return WriteRecord(rec, position); + } + + private Dictionary ReadData() + { + byte x20 = (byte)this.ReadByte(); //_BEGIN OF RECORD_ // + if (x20 != 0x20) return null; + + Dictionary result = new Dictionary(); + + for (int i = 0; i < _FieldInfos.Count; i++) + { + byte[] def = new byte[_FieldInfos[i].FLength]; + this.Read(def, 0, def.Length); + string dv = _cp.Encoding.GetString(def).Trim('\0').Trim(); + object val = dv; + + if (_FieldInfos[i].FType == FieldType.Numeric) + { + int tmi; long tml; float tmf; double tmd; + if (int.TryParse(dv, out tmi)) + val = tmi; + else if (long.TryParse(dv, out tml)) + val = tml; + else if (float.TryParse(dv, System.Globalization.NumberStyles.Any, System.Globalization.CultureInfo.InvariantCulture, out tmf)) + val = tmf; + else if (double.TryParse(dv, System.Globalization.NumberStyles.Any, System.Globalization.CultureInfo.InvariantCulture, out tmd)) + val = tmd; + }; + if (_FieldInfos[i].FType == FieldType.Float) + { + float tmf; double tmd; + if (float.TryParse(dv, System.Globalization.NumberStyles.Any, System.Globalization.CultureInfo.InvariantCulture, out tmf)) + val = tmf; + else if (double.TryParse(dv, System.Globalization.NumberStyles.Any, System.Globalization.CultureInfo.InvariantCulture, out tmd)) + val = tmd; + }; + if ((_FieldInfos[i].FType == FieldType.Memo) || (_FieldInfos[i].FType == FieldType.Binary) || (_FieldInfos[i].FType == FieldType.General) || (_FieldInfos[i].FType == FieldType.Picture)) + { + int tmi; long tml; + if (int.TryParse(dv, out tmi)) + val = tmi; + else if (long.TryParse(dv, out tml)) + val = tml; + }; + if (_FieldInfos[i].FType == FieldType.Integer) + { + val = bc.ToInt32(def, 0); + }; + // if (_FieldInfos[i].FType == FieldType.Characters) { }; + if (_FieldInfos[i].FType == FieldType.Logical) val = dv == "T"; + if (_FieldInfos[i].FType == FieldType.Date) + { + DateTime dt; + if(DateTime.TryParseExact(dv,"yyyyMMdd", null, System.Globalization.DateTimeStyles.None, out dt)) + val = dt; + }; + if (_FieldInfos[i].FType == FieldType.DateTime) + { + DateTime dt; + if (DateTime.TryParseExact(dv, "yyyyMMddHHmmss", null, System.Globalization.DateTimeStyles.None, out dt)) + val = dt; + }; + result.Add(_FieldInfos[i].FName, val); + }; + + return result; + } + + public Dictionary ReadRecord(uint index) + { + if (records == 0) return null; + + uint tmpi = index - 1; + if (tmpi > this.records) return null; + + this.Position = (long)this.HeaderSize + (long)tmpi * (long)this.RecordSize; + return ReadData(); + } + + public Dictionary ReadNext() + { + if (records == 0) return null; + if(this.Position < this.HeaderSize) this.Position = (long)this.HeaderSize; + return ReadData(); + } + + public System.Collections.Generic.IEnumerable> ReadAllRecords() + { + if (this.records > 0) + { + this.Position = this.HeaderSize; + for (uint i = 1; i <= records; i++) + yield return ReadData(); + }; + } + + public Dictionary this[uint index] + { + get { return ReadRecord(index); } + set { WriteRecord(index, value); } + } + + private void WriteRecordsCount() + { + long pos = this.Position; + this.Position = 4; + byte[] buff = bc.GetBytes(records); + this.Write(buff, 0, buff.Length); + this.Position = pos; + } + + public override void Close() + { + WriteRecordsCount(); + this.Position = (long)this.HeaderSize + (long)this.records * (long)this.RecordSize; + WriteByte(26); // TERMINAL BYTE + base.Close(); + } + } + + public enum FieldType : byte + { + Numeric = (byte)'N', + Float = (byte)'F', + Character = (byte)'C', + Logical = (byte)'L', + Date = (byte)'D', + Memo = (byte)'M', + Binary = (byte)'B', + General = (byte)'G', + Picture = (byte)'P', + Integer = (byte)'I', + DateTime = (byte)'T' + } + + public class FieldInfo + { + public string FName; + public byte FLength; + public byte FDecimalPoint = 0; + public FieldType FType; + + internal ushort offset = 0; + internal object FValue = null; + + public FieldInfo(string fName, byte fLength, FieldType fType) + { + this.FName = fName; + this.FLength = fLength; + this.FType = fType; + } + + public FieldInfo(string fName, byte fLength, byte fDecimalPoint, FieldType fType) + { + this.FName = fName; + this.FLength = fLength; + this.FType = fType; + this.FDecimalPoint = fDecimalPoint; + } + + public string GName + { + get + { + return this.FName.ToUpper(); + } + } + + public byte[] BName(Encoding encoding) + { + byte[] res = new byte[11]; + byte[] bb = encoding.GetBytes(this.GName); + for (int i = 0; (i < bb.Length) && (i < res.Length); i++) + res[i] = bb[i]; + return res; + } + } + + public class FieldInfos : List + { + public void Add(FieldInfo fi) + { + if (this.Count > 0) + foreach (FieldInfo ff in this) + if (ff.FName.ToUpper() == fi.FName.ToUpper()) + throw new Exception(String.Format("Field with name {0} already exists.", ff.FName)); + CheckValidLength(fi.FType, ref fi.FLength, ref fi.FDecimalPoint); + base.Add(fi); + } + + public void Add(string fName, byte fLength, FieldType fType) + { + if (this.Count > 0) + foreach (FieldInfo ff in this) + if (ff.FName.ToUpper() == fName.ToUpper()) + throw new Exception(String.Format("Field with name {0} already exists.", ff.FName)); + CheckValidLength(fType, ref fLength); + this.Add(new FieldInfo(fName, fLength, fType)); + } + + public void Add(string fName, byte fLength, byte fDecimalPoint, FieldType fType) + { + if (this.Count > 0) + foreach (FieldInfo ff in this) + if (ff.FName.ToUpper() == fName.ToUpper()) + throw new Exception(String.Format("Field with name {0} already exists.", ff.FName)); + CheckValidLength(fType, ref fLength, ref fDecimalPoint); + this.Add(new FieldInfo(fName, fLength, fDecimalPoint, fType)); + } + + public ushort RecordSize + { + get + { + int res = 1; + if (this.Count > 0) + for (int i = 0; i < this.Count; i++) + res += this[i].FLength; + if (res > ushort.MaxValue) + throw new Exception("Record size is too big! Max allowed size is " + ushort.MaxValue.ToString()); + return (ushort)res; + } + } + + public FieldInfo this[string fieldName] + { + get + { + if (this.Count > 0) + for (int i = 0; i < this.Count; i++) + if (fieldName == this[i].FName) + return this[i]; + return null; + } + } + + internal void ReIndex() + { + ushort res = 1; + if (this.Count > 0) + for (int i = 0; i < this.Count; i++) + { + this[i].offset = res; + res += this[i].FLength; + }; + } + + internal void ZeroValues() + { + if (this.Count > 0) + for (int i = 0; i < this.Count; i++) + this[i].FValue = null; + } + + private void CheckValidLength(FieldType fType, ref byte fLength) + { + byte fdc = 0; + CheckValidLength(fType, ref fLength, ref fdc); + } + + private void CheckValidLength(FieldType fType, ref byte fLength, ref byte fDecimalPoint) + { + switch (fType) + { + case FieldType.Numeric: + case FieldType.Float: + if (fLength > 20) fLength = 20; + if (fDecimalPoint >= fLength) fDecimalPoint = (byte)(fLength - 1); + break; + case FieldType.Character: + fDecimalPoint = 0; + break; + case FieldType.Logical: + fDecimalPoint = 0; + fLength = 1; + break; + case FieldType.Date: + case FieldType.Memo: + case FieldType.Binary: + case FieldType.General: + case FieldType.Picture: + fDecimalPoint = 0; + fLength = 10; + break; + case FieldType.Integer: + fDecimalPoint = 0; + fLength = 4; + break; + case FieldType.DateTime: + fDecimalPoint = 0; + fLength = 14; + break; + }; + } + } + + public class CodePageSet + { + public byte headerCode = 0; + public int codePage = 0; + public string codeName = "UNKNOWN"; + + public Encoding Encoding + { + get + { + return System.Text.Encoding.GetEncoding(codePage); + } + } + + public CodePageSet(){} + + public static CodePageSet Default + { + get + { + CodePageSet result = new CodePageSet(); + result.headerCode = 201; + result.codePage = 1251; + result.codeName = @"Russian Windows \ Windows-1251 [0xC9]"; + return result; + } + } + + public override string ToString() + { + return codeName; + } + } + + public class CodePageList : List + { + public CodePageList() + { + this.Add(204, 01257, "Baltic Windows"); + this.Add(079, 00950, "Chinese Big5 (Taiwan)"); + this.Add(077, 00936, "Chinese GBK (PRC)"); + this.Add(122, 00936, "PRC GBK"); + this.Add(031, 00852, "Czech OEM"); + this.Add(008, 00865, "Danish OEM"); + this.Add(009, 00437, "Dutch OEM"); + this.Add(010, 00850, "Dutch OEM*"); + this.Add(025, 00437, "English OEM (Great Britain)"); + this.Add(026, 00850, "English OEM (Great Britain)*"); + this.Add(027, 00437, "English OEM (US)"); + this.Add(055, 00850, "English OEM (US)*"); + this.Add(200, 01250, "Eastern European Windows"); + this.Add(100, 00852, "Eastern European MS-DOS"); + this.Add(151, 10029, "Eastern European Macintosh"); + this.Add(011, 00437, "Finnish OEM"); + this.Add(013, 00437, "French OEM"); + this.Add(014, 00850, "French OEM*"); + this.Add(029, 00850, "French OEM*2"); + this.Add(028, 00863, "French OEM (Canada)"); + this.Add(108, 00863, "French-Canadian MS-DOS"); + this.Add(015, 00437, "German OEM"); + this.Add(016, 00850, "German OEM*"); + this.Add(203, 01253, "Greek Windows"); + this.Add(106, 00737, "Greek MS-DOS (437G)"); + this.Add(134, 00737, "Greek OEM"); + this.Add(152, 00006, "Greek Macintosh"); + this.Add(121, 00949, "Hangul (Wansung)"); + this.Add(034, 00852, "Hungarian OEM"); + this.Add(103, 00861, "Icelandic MS-DOS"); + this.Add(017, 00437, "Italian OEM"); + this.Add(018, 00850, "Italian OEM*"); + this.Add(019, 00932, "Japanese Shift-JIS"); + this.Add(123, 00932, "Japanese Shift-JIS 2"); + this.Add(104, 00895, "Kamenicky (Czech) MS-DOS"); + this.Add(078, 00949, "Korean (ANSI/OEM)"); + this.Add(105, 00620, "Mazovia (Polish) MS-DOS"); + this.Add(102, 00865, "Nordic MS-DOS"); + this.Add(023, 00865, "Norwegian OEM"); + this.Add(035, 00852, "Polish OEM"); + this.Add(036, 00860, "Portuguese OEM"); + this.Add(037, 00850, "Portuguese OEM*"); + this.Add(064, 00852, "Romanian OEM"); + this.Add(201, 01251, "Russian Windows"); + this.Add(101, 00866, "Russian MS-DOS"); + this.Add(038, 00866, "Russian OEM"); + this.Add(150, 10007, "Russian Macintosh"); + this.Add(135, 00852, "Slovenian OEM"); + this.Add(089, 01252, "Spanish ANSI"); + this.Add(020, 00850, "Spanish OEM*"); + this.Add(021, 00437, "Swedish OEM"); + this.Add(022, 00850, "Swedish OEM*"); + this.Add(024, 00437, "Spanish OEM"); + this.Add(087, 01250, "Standard ANSI"); + this.Add(003, 01252, "Standard Windows ANSI Latin I"); + this.Add(002, 00850, "Standard International MS-DOS"); + this.Add(004, 10000, "Standard Macintosh"); + this.Add(120, 00950, "Taiwan Big 5"); + this.Add(080, 00874, "Thai (ANSI/OEM)"); + this.Add(124, 00874, "Thai Windows/MS–DOS"); + this.Add(202, 01254, "Turkish Windows"); + this.Add(107, 00857, "Turkish MS-DOS"); + this.Add(136, 00857, "Turkish OEM"); + this.Add(001, 00437, "US MS-DOS"); + this.Add(088, 01252, "Western European ANSI"); + this.Add(255, 01251, "Default Unknown"); + } + + private void Add(byte headerCode, int codePage, string codeName) + { + CodePageSet cpc = new CodePageSet(); + cpc.headerCode = headerCode; + cpc.codePage = codePage; + try + { + cpc.codeName = codeName + " "; + Encoding enc = System.Text.Encoding.GetEncoding(cpc.codePage); + if ((enc.EncodingName.ToUpper().IndexOf("DOS") >= 0) && (enc.EncodingName.ToUpper().IndexOf("WINDOWS") < 0) && (enc.EncodingName.ToUpper().IndexOf("OEM") < 0)) + cpc.codeName += @"\ DOS-" + cpc.codePage.ToString() + @" \ " + enc.EncodingName; + else if ((enc.EncodingName.ToUpper().IndexOf("DOS") < 0) && (enc.EncodingName.ToUpper().IndexOf("WINDOWS") >= 0) && (enc.EncodingName.ToUpper().IndexOf("OEM") < 0)) + cpc.codeName += @"\ Windows-" + cpc.codePage.ToString() + @" \ " + enc.EncodingName; + else if ((enc.EncodingName.ToUpper().IndexOf("DOS") < 0) && (enc.EncodingName.ToUpper().IndexOf("WINDOWS") < 0) && (enc.EncodingName.ToUpper().IndexOf("OEM") >= 0)) + cpc.codeName += @"\ OEM-" + cpc.codePage.ToString() + @" \ " + enc.EncodingName; + else + cpc.codeName += @" \ " + enc.EncodingName; + } + catch + { + cpc.codeName = codeName + @" \ --**--UNKNOWN--**-- "; + }; + cpc.codeName += String.Format(@" -- 0x{0:X2}", cpc.headerCode); + this.Add(cpc); + } + + public CodePageSet this[byte headerCode] + { + get + { + if (this.Count == 0) return new CodePageSet(); + foreach (CodePageSet cpc in this) + if (cpc.headerCode == headerCode) + return cpc; + return new CodePageSet(); + } + } + + public CodePageSet this[int codePage] + { + get + { + if (this.Count == 0) return new CodePageSet(); + foreach (CodePageSet cpc in this) + if (cpc.codePage == codePage) + return cpc; + return new CodePageSet(); + } + } + + public CodePageSet this[string codeName] + { + get + { + if (this.Count == 0) return new CodePageSet(); + foreach (CodePageSet cpc in this) + if (cpc.codeName == codeName) + return cpc; + return new CodePageSet(); + } + } + } + + public class MyBitConverter + { + public MyBitConverter() {} + + public MyBitConverter(bool IsLittleEndian) { this.isLittleEndian = IsLittleEndian; } + + private bool isLittleEndian = true; + + public bool IsLittleEndian { get { return isLittleEndian; } set { isLittleEndian = value; } } // should default to false, which is what we want for Empire + + public byte[] GetBytes(bool value) + { + if (IsLittleEndian) + { + return System.BitConverter.GetBytes(value); + } + else + { + byte[] res = System.BitConverter.GetBytes(value); + Array.Reverse(res); + return res; + } + } + + public byte[] GetBytes(char value) + { + if (IsLittleEndian) + { + return System.BitConverter.GetBytes(value); + } + else + { + byte[] res = System.BitConverter.GetBytes(value); + Array.Reverse(res); + return res; + } + } + + public byte[] GetBytes(double value) + { + if (IsLittleEndian) + { + return System.BitConverter.GetBytes(value); + } + else + { + byte[] res = System.BitConverter.GetBytes(value); + Array.Reverse(res); + return res; + } + } + + public byte[] GetBytes(float value) + { + if (IsLittleEndian) + { + return System.BitConverter.GetBytes(value); + } + else + { + byte[] res = System.BitConverter.GetBytes(value); + Array.Reverse(res); + return res; + } + } + + public byte[] GetBytes(int value) + { + if (IsLittleEndian) + { + return System.BitConverter.GetBytes(value); + } + else + { + byte[] res = System.BitConverter.GetBytes(value); + Array.Reverse(res); + return res; + } + } + + public byte[] GetBytes(long value) + { + if (IsLittleEndian) + { + return System.BitConverter.GetBytes(value); + } + else + { + byte[] res = System.BitConverter.GetBytes(value); + Array.Reverse(res); + return res; + } + } + + public byte[] GetBytes(short value) + { + if (IsLittleEndian) + { + return System.BitConverter.GetBytes(value); + } + else + { + byte[] res = System.BitConverter.GetBytes(value); + Array.Reverse(res); + return res; + } + } + + public byte[] GetBytes(uint value) + { + if (IsLittleEndian) + { + return System.BitConverter.GetBytes(value); + } + else + { + byte[] res = System.BitConverter.GetBytes(value); + Array.Reverse(res); + return res; + } + } + + public byte[] GetBytes(ulong value) + { + if (IsLittleEndian) + { + return System.BitConverter.GetBytes(value); + } + else + { + byte[] res = System.BitConverter.GetBytes(value); + Array.Reverse(res); + return res; + } + } + + public byte[] GetBytes(ushort value) + { + if (IsLittleEndian) + { + return System.BitConverter.GetBytes(value); + } + else + { + byte[] res = System.BitConverter.GetBytes(value); + Array.Reverse(res); + return res; + } + } + + public short ToInt16(byte[] value, int startIndex) + { + if (IsLittleEndian) + { + return System.BitConverter.ToInt16(value, startIndex); + } + else + { + byte[] res = (byte[])value.Clone(); + Array.Reverse(res); + return System.BitConverter.ToInt16(res, value.Length - sizeof(Int16) - startIndex); + } + } + + public int ToInt32(byte[] value, int startIndex) + { + if (IsLittleEndian) + { + return System.BitConverter.ToInt32(value, startIndex); + } + else + { + byte[] res = (byte[])value.Clone(); + Array.Reverse(res); + return System.BitConverter.ToInt32(res, value.Length - sizeof(Int32) - startIndex); + } + } + + public long ToInt64(byte[] value, int startIndex) + { + if (IsLittleEndian) + { + return System.BitConverter.ToInt64(value, startIndex); + } + else + { + byte[] res = (byte[])value.Clone(); + Array.Reverse(res); + return System.BitConverter.ToInt64(res, value.Length - sizeof(Int64) - startIndex); + } + } + + public float ToSingle(byte[] value, int startIndex) + { + if (IsLittleEndian) + { + return System.BitConverter.ToSingle(value, startIndex); + } + else + { + byte[] res = (byte[])value.Clone(); + Array.Reverse(res); + return System.BitConverter.ToSingle(res, value.Length - sizeof(Single) - startIndex); + } + } + + public string ToString(byte[] value) + { + if (IsLittleEndian) + { + return System.BitConverter.ToString(value); + } + else + { + byte[] res = (byte[])value.Clone(); + Array.Reverse(res); + return System.BitConverter.ToString(res); + } + } + + public string ToString(byte[] value, int startIndex) + { + if (IsLittleEndian) + { + return System.BitConverter.ToString(value, startIndex); + } + else + { + byte[] res = (byte[])value.Clone(); + Array.Reverse(res, startIndex, value.Length - startIndex); + return System.BitConverter.ToString(res, startIndex); + } + } + + public string ToString(byte[] value, int startIndex, int length) + { + if (IsLittleEndian) + { + return System.BitConverter.ToString(value, startIndex, length); + } + else + { + byte[] res = (byte[])value.Clone(); + Array.Reverse(res, startIndex, length); + return System.BitConverter.ToString(res, startIndex, length); + } + } + + public ushort ToUInt16(byte[] value, int startIndex) + { + if (IsLittleEndian) + { + return System.BitConverter.ToUInt16(value, startIndex); + } + else + { + byte[] res = (byte[])value.Clone(); + Array.Reverse(res); + return System.BitConverter.ToUInt16(res, value.Length - sizeof(UInt16) - startIndex); + } + } + + + public uint ToUInt32(byte[] value, int startIndex) + { + if (IsLittleEndian) + { + return System.BitConverter.ToUInt32(value, startIndex); + } + else + { + byte[] res = (byte[])value.Clone(); + Array.Reverse(res); + return System.BitConverter.ToUInt32(res, value.Length - sizeof(UInt32) - startIndex); + } + } + + public ulong ToUInt64(byte[] value, int startIndex) + { + if (IsLittleEndian) + { + return System.BitConverter.ToUInt64(value, startIndex); + } + else + { + byte[] res = (byte[])value.Clone(); + Array.Reverse(res); + return System.BitConverter.ToUInt64(res, value.Length - sizeof(UInt64) - startIndex); + } + } + } +} diff --git a/SOLVER/ShapesPolygonsExtractor/PolyReader.cs b/SOLVER/ShapesPolygonsExtractor/PolyReader.cs new file mode 100644 index 0000000..8efad51 --- /dev/null +++ b/SOLVER/ShapesPolygonsExtractor/PolyReader.cs @@ -0,0 +1,501 @@ +using System; +using System.Drawing; +using System.IO; +using System.Collections; +using System.Collections.Generic; +using System.Text; +using System.Xml; +using System.Xml.Serialization; + +namespace ShapesPolygonsExtractor +{ + public class Polygon + { + public string nmsRegion; + public int nmsRegionID; + public string FileName; + + public double[] box; // Xmin, Ymin, Xmax, Ymax + public double[] cbox = new double[4] { double.MaxValue, double.MaxValue, double.MinValue, double.MinValue }; // Xmin, Ymin, Xmax, Ymax + public int numParts; + public int numPoints; + public int[] parts; + public PointF[] points; + + public PointF center; + public Dictionary Attributes = null; + } + + ///

+ /// Êëàññ äëÿ îïðåäåëåíèÿ âõîæäåíèå òî÷êè â ðåãèîí + /// + public class PolyReader + { + public List Regions = new List(); + + public PolyReader(string filename, bool readDBF) + { + FileStream fs = new FileStream(filename, FileMode.Open, FileAccess.Read); + long fileLength = fs.Length; + Byte[] data = new Byte[fileLength]; + fs.Read(data, 0, (int)fileLength); + fs.Close(); + + int shapetype = readIntLittle(data, 32); + if (shapetype != 5) return; + + DBFSharp.DBFFile dbff = null; + try { if (readDBF) dbff = new DBFSharp.DBFFile(filename.Replace(Path.GetExtension(filename),".dbf"), FileMode.Open); } catch { }; + + int left = Console.CursorLeft; + + int currentPosition = 100; + uint rCounter = 0; + while (currentPosition < fileLength) + { + rCounter++; + int recordStart = currentPosition; + int recordNumber = readIntBig(data, recordStart); + int contentLength = readIntBig(data, recordStart + 4); + int recordContentStart = recordStart + 8; + + Polygon Area = new Polygon(); + int recordShapeType = readIntLittle(data, recordContentStart); + Area.box = new Double[4]; + Area.box[0] = readDoubleLittle(data, recordContentStart + 4); + Area.box[1] = readDoubleLittle(data, recordContentStart + 12); + Area.box[2] = readDoubleLittle(data, recordContentStart + 20); + Area.box[3] = readDoubleLittle(data, recordContentStart + 28); + Area.numParts = readIntLittle(data, recordContentStart + 36); + Area.parts = new int[Area.numParts]; + Area.numPoints = readIntLittle(data, recordContentStart + 40); + Area.points = new PointF[Area.numPoints]; + int partStart = recordContentStart + 44; + for (int i = 0; i < Area.numParts; i++) + { + Area.parts[i] = readIntLittle(data, partStart + i * 4); + }; + int pointStart = recordContentStart + 44 + 4 * Area.numParts; + for (int i = 0; i < Area.numPoints; i++) + { + Area.points[i] = new PointF(0, 0); + Area.points[i].X = (float)readDoubleLittle(data, pointStart + (i * 16)); + Area.points[i].Y = (float)readDoubleLittle(data, pointStart + (i * 16) + 8); + if (Area.cbox[0] > Area.points[i].X) Area.cbox[0] = Area.points[i].X; + if (Area.cbox[1] > Area.points[i].Y) Area.cbox[1] = Area.points[i].Y; + if (Area.cbox[2] < Area.points[i].X) Area.cbox[2] = Area.points[i].X; + if (Area.cbox[3] < Area.points[i].Y) Area.cbox[3] = Area.points[i].Y; + }; + if ((Area.box[0] + Area.box[1] + Area.box[2] + Area.box[3]) == 0) Area.box = Area.cbox; + + if (dbff != null) Area.Attributes = dbff.ReadRecord(rCounter); + this.Regions.Add(Area); + + currentPosition = recordStart + (4 + contentLength) * 2; + + Console.SetCursorPosition(left, Console.CursorTop); + Console.Write("reading {0:0.00}%", ((double)currentPosition)/((double)fileLength)*100.0); + }; + Console.SetCursorPosition(left, Console.CursorTop); + if (dbff != null) dbff.Close(); + } + + private int readIntBig(byte[] data, int pos) + { + byte[] bytes = new byte[4]; + bytes[0] = data[pos]; + bytes[1] = data[pos + 1]; + bytes[2] = data[pos + 2]; + bytes[3] = data[pos + 3]; + Array.Reverse(bytes); + return BitConverter.ToInt32(bytes, 0); + } + + private int readIntLittle(byte[] data, int pos) + { + byte[] bytes = new byte[4]; + bytes[0] = data[pos]; + bytes[1] = data[pos + 1]; + bytes[2] = data[pos + 2]; + bytes[3] = data[pos + 3]; + return BitConverter.ToInt32(bytes, 0); + } + + private double readDoubleLittle(byte[] data, int pos) + { + byte[] bytes = new byte[8]; + bytes[0] = data[pos]; + bytes[1] = data[pos + 1]; + bytes[2] = data[pos + 2]; + bytes[3] = data[pos + 3]; + bytes[4] = data[pos + 4]; + bytes[5] = data[pos + 5]; + bytes[6] = data[pos + 6]; + bytes[7] = data[pos + 7]; + return BitConverter.ToDouble(bytes, 0); + } + + public static void ExtractPoly(Polygon poly, string fileName, int enlargeKm) + { + string fext = Path.GetExtension(fileName); + + string box = fileName.Replace(fext, "_[box].shp"); + string ext = fileName.Replace(fext, "_[ext].shp"); + + string kml = fileName.Replace(fext, ".kml"); + string kmb = fileName.Replace(fext, "_[box].kml"); + string kme = fileName.Replace(fext, "_[ext].kml"); + + string bbb = fileName.Replace(fext, "_[box].txt"); + string bbe = fileName.Replace(fext, "_[ext].txt"); + + Save2Shape(fileName, poly.points); + Save2KML(kml, poly.points); + + Save2TextUrl(bbb, Poly2TextUrl(poly.box)); + Save2Shape(box, poly.box); + Save2KML(kmb, poly.box); + + if (enlargeKm > 0) + { + double[] enl = Enlarge(poly.box, enlargeKm); + Save2TextUrl(bbe, Poly2TextUrl(enl)); + Save2Shape(ext, enl); + Save2KML(kme, enl); + }; + } + + private static double[] Enlarge(double[] box, double dist_in_km) + { + double[] res = new double[4]; + double lon_min = box[0]; + double lat_min = box[1]; + double lon_max = box[2]; + double lat_max = box[3]; + double d_buttom = 1.0 / (Utils.GetLengthMetersA(lat_min - 1, (lon_min + lon_max) / 2, lat_min, (lon_min + lon_max) / 2, false) / 1000.0) * dist_in_km; + double d_top = 1.0 / (Utils.GetLengthMetersA(lat_max, (lon_min + lon_max) / 2, lat_max + 1, (lon_min + lon_max) / 2, false) / 1000.0) * dist_in_km; + double d_left = 1.0 / (Utils.GetLengthMetersA((lat_min + lat_max) / 2, lon_min - 1, (lat_min + lat_max) / 2, lon_min, false) / 1000.0) * dist_in_km; + double d_right = 1.0 / (Utils.GetLengthMetersA((lat_min + lat_max) / 2, lon_max, (lat_min + lat_max) / 2, lon_max + 1, false) / 1000.0) * dist_in_km; + res = new double[4] { box[0] - d_buttom, box[1] - d_left, box[2] + d_top, box[3] + d_right }; + return res; + } + + private static string Poly2TextUrl(double[] box) + { + PointF[] pass = new PointF[4] { new PointF((float)box[0], (float)box[1]), new PointF((float)box[2], (float)box[1]), new PointF((float)box[2], (float)box[3]), new PointF((float)box[0], (float)box[3]) }; + return Poly2TextUrl(pass); + } + + private static string Poly2TextUrl(PointF[] poly) + { + // [BBIKE_EXTRACT_LINK] // + double xmin = double.MaxValue; + double ymin = double.MaxValue; + double xmax = double.MinValue; + double ymax = double.MinValue; + + string pll = ""; + for (int i = 0; i < poly.Length; i++) + { + xmin = Math.Min(xmin, poly[i].X); + ymin = Math.Min(ymin, poly[i].Y); + xmax = Math.Max(xmax, poly[i].X); + ymax = Math.Max(ymax, poly[i].Y); + if (pll.Length > 0) + pll += "|"; + pll += String.Format(System.Globalization.CultureInfo.InvariantCulture, + "{0},{1}", poly[i].X, poly[i].Y); + }; + + string url = "https://extract.bbbike.org/"; + url += String.Format(System.Globalization.CultureInfo.InvariantCulture, + "?sw_lng={0}&sw_lat={1}&ne_lng={2}&ne_lat={3}", + xmin, ymin, xmax, ymax); + url += "&format=mapsforge-osm.zip"; + url += "&coords=" + pll; + url += "&city=Noname"; + url += "&lang=en"; + + return url; + } + + private static void Save2TextUrl(string filename, string url) + { + if (filename == null) return; + + FileStream fs = new FileStream(filename, FileMode.Create, FileAccess.Write); + StreamWriter sw = new StreamWriter(fs, Encoding.ASCII); + sw.WriteLine("[BBIKE_EXTRACT_LINK]"); + sw.WriteLine(url); + sw.Close(); + fs.Close(); + } + + private static void Save2Shape(string filename, double[] box) + { + PointF[] pass = new PointF[4] { new PointF((float)box[0], (float)box[1]), new PointF((float)box[2], (float)box[1]), new PointF((float)box[2], (float)box[3]), new PointF((float)box[0], (float)box[3]) }; + Save2Shape(filename, pass); + } + + private static void Save2Shape(string filename, PointF[] poly) + { + double xmin = double.MaxValue; + double ymin = double.MaxValue; + double xmax = double.MinValue; + double ymax = double.MinValue; + + for (int i = 0; i < poly.Length; i++) + { + xmin = Math.Min(xmin, poly[i].X); + ymin = Math.Min(ymin, poly[i].Y); + xmax = Math.Max(xmax, poly[i].X); + ymax = Math.Max(ymax, poly[i].Y); + }; + + List arr = new List(); + arr.AddRange(Convert(BitConverter.GetBytes((int)9994), false)); // File Code + arr.AddRange(new byte[20]); // Not used + arr.AddRange(Convert(BitConverter.GetBytes((int)((100 + 8 + 48 + 16 * poly.Length) / 2)), false)); // File_Length / 2 + arr.AddRange(Convert(BitConverter.GetBytes((int)1000), true)); // Version 1000 + arr.AddRange(Convert(BitConverter.GetBytes((int)5), true)); // Polygon Type + arr.AddRange(Convert(BitConverter.GetBytes((double)xmin), true)); + arr.AddRange(Convert(BitConverter.GetBytes((double)ymin), true)); + arr.AddRange(Convert(BitConverter.GetBytes((double)xmax), true)); + arr.AddRange(Convert(BitConverter.GetBytes((double)ymax), true)); + arr.AddRange(new byte[32]); // end of header + + arr.AddRange(Convert(BitConverter.GetBytes((int)1), false)); // rec number + arr.AddRange(Convert(BitConverter.GetBytes((int)((48 + 16 * poly.Length) / 2)), false));// rec_length / 2 + arr.AddRange(Convert(BitConverter.GetBytes((int)5), true)); // rec type polygon + arr.AddRange(Convert(BitConverter.GetBytes((double)xmin), true)); + arr.AddRange(Convert(BitConverter.GetBytes((double)ymin), true)); + arr.AddRange(Convert(BitConverter.GetBytes((double)xmax), true)); + arr.AddRange(Convert(BitConverter.GetBytes((double)ymax), true)); + arr.AddRange(Convert(BitConverter.GetBytes((int)1), true)); // 1 part + arr.AddRange(Convert(BitConverter.GetBytes((int)poly.Length), true)); // 4 points + arr.AddRange(Convert(BitConverter.GetBytes((int)0), true)); // start at 0 point + + for (int i = 0; i < poly.Length; i++) + { + arr.AddRange(Convert(BitConverter.GetBytes((double)poly[i].X), true)); // point 0 x + arr.AddRange(Convert(BitConverter.GetBytes((double)poly[i].Y), true)); // point 0 y + }; + + FileStream fs = new FileStream(filename, FileMode.Create, FileAccess.Write); + fs.Write(arr.ToArray(), 0, arr.Count); + fs.Close(); + } + + private static void Save2KML(string filename, double[] box) + { + PointF[] pass = new PointF[4] { new PointF((float)box[0], (float)box[1]), new PointF((float)box[2], (float)box[1]), new PointF((float)box[2], (float)box[3]), new PointF((float)box[0], (float)box[3]) }; + Save2KML(filename, pass); + } + + private static void Save2KML(string filename, PointF[] poly) + { + FileStream fs = new FileStream(filename, FileMode.Create, FileAccess.Write); + StreamWriter sw = new StreamWriter(fs, System.Text.Encoding.UTF8); + sw.WriteLine(""); + sw.WriteLine(""); + sw.WriteLine("My Polygon"); + sw.Write("1"); + foreach (PointF p in poly) + sw.Write(string.Format(System.Globalization.CultureInfo.InvariantCulture, "{0},{1},0 ", p.X, p.Y)); + sw.WriteLine(""); + sw.WriteLine(""); + sw.WriteLine(""); + sw.Close(); + fs.Close(); + } + + private static byte[] Convert(byte[] ba, bool bigEndian) + { + if (BitConverter.IsLittleEndian != bigEndian) Array.Reverse(ba); + return ba; + } + } + + public class Utils + { + // Ðàññ÷åò ðàññòîÿíèÿ + #region LENGTH + public static float GetLengthMeters(double StartLat, double StartLong, double EndLat, double EndLong, bool radians) + { + // use fastest + float result = (float)GetLengthMetersD(StartLat, StartLong, EndLat, EndLong, radians); + + if (float.IsNaN(result)) + { + result = (float)GetLengthMetersC(StartLat, StartLong, EndLat, EndLong, radians); + if (float.IsNaN(result)) + { + result = (float)GetLengthMetersE(StartLat, StartLong, EndLat, EndLong, radians); + if (float.IsNaN(result)) + result = 0; + }; + }; + + return result; + } + + // Slower + public static uint GetLengthMetersA(double StartLat, double StartLong, double EndLat, double EndLong, bool radians) + { + double D2R = Math.PI / 180; // Ïðåîáðàçîâàíèå ãðàäóñîâ â ðàäèàíû + + double a = 6378137.0000; // WGS-84 Equatorial Radius (a) + double f = 1 / 298.257223563; // WGS-84 Flattening (f) + double b = (1 - f) * a; // WGS-84 Polar Radius + double e2 = (2 - f) * f; // WGS-84 Êâàäðàò ýêñöåíòðè÷íîñòè ýëëèïñîèäà // 1-(b/a)^2 + + // Ïåðåìåííûå, èñïîëüçóåìûå äëÿ âû÷èñëåíèÿ ñìåùåíèÿ è ðàññòîÿíèÿ + double fPhimean; // Ñðåäíÿÿ øèðîòà + double fdLambda; // Ðàçíèöà ìåæäó äâóìÿ çíà÷åíèÿìè äîëãîòû + double fdPhi; // Ðàçíèöà ìåæäó äâóìÿ çíà÷åíèÿìè øèðîòû + double fAlpha; // Ñìåùåíèå + double fRho; // Ìåðèäèàíñêèé ðàäèóñ êðèâèçíû + double fNu; // Ïîïåðå÷íûé ðàäèóñ êðèâèçíû + double fR; // Ðàäèóñ ñôåðû Çåìëè + double fz; // Óãëîâîå ðàññòîÿíèå îò öåíòðà ñôåðîèäà + double fTemp; // Âðåìåííàÿ ïåðåìåííàÿ, èñïîëüçóþùàÿñÿ â âû÷èñëåíèÿõ + + // Âû÷èñëÿåì ðàçíèöó ìåæäó äâóìÿ äîëãîòàìè è øèðîòàìè è ïîëó÷àåì ñðåäíþþ øèðîòó + // ïðåäïîëîæèòåëüíî ÷òî ðàññòîÿíèå ìåæäó òî÷êàìè << ðàäèóñà çåìëè + if (!radians) + { + fdLambda = (StartLong - EndLong) * D2R; + fdPhi = (StartLat - EndLat) * D2R; + fPhimean = ((StartLat + EndLat) / 2) * D2R; + } + else + { + fdLambda = StartLong - EndLong; + fdPhi = StartLat - EndLat; + fPhimean = (StartLat + EndLat) / 2; + }; + + // Âû÷èñëÿåì ìåðèäèàííûå è ïîïåðå÷íûå ðàäèóñû êðèâèçíû ñðåäíåé øèðîòû + fTemp = 1 - e2 * (sqr(Math.Sin(fPhimean))); + fRho = (a * (1 - e2)) / Math.Pow(fTemp, 1.5); + fNu = a / (Math.Sqrt(1 - e2 * (Math.Sin(fPhimean) * Math.Sin(fPhimean)))); + + // Âû÷èñëÿåì óãëîâîå ðàññòîÿíèå + if (!radians) + { + fz = Math.Sqrt(sqr(Math.Sin(fdPhi / 2.0)) + Math.Cos(EndLat * D2R) * Math.Cos(StartLat * D2R) * sqr(Math.Sin(fdLambda / 2.0))); + } + else + { + fz = Math.Sqrt(sqr(Math.Sin(fdPhi / 2.0)) + Math.Cos(EndLat) * Math.Cos(StartLat) * sqr(Math.Sin(fdLambda / 2.0))); + }; + fz = 2 * Math.Asin(fz); + + // Âû÷èñëÿåì ñìåùåíèå + if (!radians) + { + fAlpha = Math.Cos(EndLat * D2R) * Math.Sin(fdLambda) * 1 / Math.Sin(fz); + } + else + { + fAlpha = Math.Cos(EndLat) * Math.Sin(fdLambda) * 1 / Math.Sin(fz); + }; + fAlpha = Math.Asin(fAlpha); + + // Âû÷èñëÿåì ðàäèóñ Çåìëè + fR = (fRho * fNu) / (fRho * sqr(Math.Sin(fAlpha)) + fNu * sqr(Math.Cos(fAlpha))); + // Ïîëó÷àåì ðàññòîÿíèå + return (uint)Math.Round(Math.Abs(fz * fR)); + } + // Slowest + public static uint GetLengthMetersB(double StartLat, double StartLong, double EndLat, double EndLong, bool radians) + { + double fPhimean, fdLambda, fdPhi, fAlpha, fRho, fNu, fR, fz, fTemp, Distance, + D2R = Math.PI / 180, + a = 6378137.0, + e2 = 0.006739496742337; + if (radians) D2R = 1; + + fdLambda = (StartLong - EndLong) * D2R; + fdPhi = (StartLat - EndLat) * D2R; + fPhimean = (StartLat + EndLat) / 2.0 * D2R; + + fTemp = 1 - e2 * Math.Pow(Math.Sin(fPhimean), 2); + fRho = a * (1 - e2) / Math.Pow(fTemp, 1.5); + fNu = a / Math.Sqrt(1 - e2 * Math.Sin(fPhimean) * Math.Sin(fPhimean)); + + fz = 2 * Math.Asin(Math.Sqrt(Math.Pow(Math.Sin(fdPhi / 2.0), 2) + + Math.Cos(EndLat * D2R) * Math.Cos(StartLat * D2R) * Math.Pow(Math.Sin(fdLambda / 2.0), 2))); + fAlpha = Math.Asin(Math.Cos(EndLat * D2R) * Math.Sin(fdLambda) / Math.Sin(fz)); + fR = fRho * fNu / (fRho * Math.Pow(Math.Sin(fAlpha), 2) + fNu * Math.Pow(Math.Cos(fAlpha), 2)); + Distance = fz * fR; + + return (uint)Math.Round(Distance); + } + // Average + public static uint GetLengthMetersC(double StartLat, double StartLong, double EndLat, double EndLong, bool radians) + { + double D2R = Math.PI / 180; + if (radians) D2R = 1; + double dDistance = Double.MinValue; + double dLat1InRad = StartLat * D2R; + double dLong1InRad = StartLong * D2R; + double dLat2InRad = EndLat * D2R; + double dLong2InRad = EndLong * D2R; + + double dLongitude = dLong2InRad - dLong1InRad; + double dLatitude = dLat2InRad - dLat1InRad; + + // Intermediate result a. + double a = Math.Pow(Math.Sin(dLatitude / 2.0), 2.0) + + Math.Cos(dLat1InRad) * Math.Cos(dLat2InRad) * + Math.Pow(Math.Sin(dLongitude / 2.0), 2.0); + + // Intermediate result c (great circle distance in Radians). + double c = 2.0 * Math.Atan2(Math.Sqrt(a), Math.Sqrt(1.0 - a)); + + const double kEarthRadiusKms = 6378137.0000; + dDistance = kEarthRadiusKms * c; + + return (uint)Math.Round(dDistance); + } + // Fastest + public static double GetLengthMetersD(double sLat, double sLon, double eLat, double eLon, bool radians) + { + double EarthRadius = 6378137.0; + + double lon1 = radians ? sLon : DegToRad(sLon); + double lon2 = radians ? eLon : DegToRad(eLon); + double lat1 = radians ? sLat : DegToRad(sLat); + double lat2 = radians ? eLat : DegToRad(eLat); + + return EarthRadius * (Math.Acos(Math.Sin(lat1) * Math.Sin(lat2) + Math.Cos(lat1) * Math.Cos(lat2) * Math.Cos(lon1 - lon2))); + } + // Fastest + public static double GetLengthMetersE(double sLat, double sLon, double eLat, double eLon, bool radians) + { + double EarthRadius = 6378137.0; + + double lon1 = radians ? sLon : DegToRad(sLon); + double lon2 = radians ? eLon : DegToRad(eLon); + double lat1 = radians ? sLat : DegToRad(sLat); + double lat2 = radians ? eLat : DegToRad(eLat); + + /* This algorithm is called Sinnott's Formula */ + double dlon = (lon2) - (lon1); + double dlat = (lat2) - (lat1); + double a = Math.Pow(Math.Sin(dlat / 2), 2.0) + Math.Cos(lat1) * Math.Cos(lat2) * Math.Pow(Math.Sin(dlon / 2), 2.0); + double c = 2 * Math.Asin(Math.Sqrt(a)); + return EarthRadius * c; + } + private static double sqr(double val) + { + return val * val; + } + public static double DegToRad(double deg) + { + return (deg / 180.0 * Math.PI); + } + #endregion LENGTH + } +} diff --git a/SOLVER/ShapesPolygonsExtractor/Program.cs b/SOLVER/ShapesPolygonsExtractor/Program.cs new file mode 100644 index 0000000..8b39fa6 --- /dev/null +++ b/SOLVER/ShapesPolygonsExtractor/Program.cs @@ -0,0 +1,213 @@ +using System; +using System.IO; +using System.Collections.Generic; +using System.Text; +using System.Text.RegularExpressions; + +namespace ShapesPolygonsExtractor +{ + class Program + { + private static string new_file_syntax = "$FILE$ - $INDEX$"; + + static void Main(string[] args) + { + Console.WriteLine("Shapes Polygon Extractor by milokz@gmail.com\r\n"); + ConsoleColor cc = Console.ForegroundColor; + Console.ForegroundColor = ConsoleColor.DarkYellow; + Console.WriteLine(" run in folder with shapes files"); + Console.WriteLine(" or add files to extract in command line"); + Console.WriteLine(" use /km=.. to enlarge box in kilometers, ex: /km=5"); + Console.WriteLine(" use /path=.. where to find shape files, ex: /path=C:\\"); + Console.WriteLine(" use /f=.. as new file name syntax, ex: `/f=$FILE$ - $INDEX$`"); + Console.WriteLine(" where: $FILE$ - source file name without extention"); + Console.WriteLine(" $INDEX$ - polygon index in file from zero"); + Console.WriteLine(" or `/f={ID} - {NAME} - $INDEX$ in $FILE$`"); + Console.WriteLine(" where: {FIELD_NAME} - text from DBF field with FIELD_NAME"); + Console.WriteLine(" {ID,10} - padding zero to left while fld val len < 10 symbols"); + Console.WriteLine(" {ID,-8} - padding zero to right while fld val len < 8 symbols"); + Console.WriteLine(" {ID:LALB} - padding LALB to left while fld val len < 4 symbols"); + Console.WriteLine(" {ID*RABCD} - padding RABCD to right while fld val len < 5 symbols"); + Console.ForegroundColor = cc; + Console.WriteLine(); + + int[] ctr = new int[] { 0, 0 }; + int km = -1; + bool addCRLF = false; + string[] files = null; + if ((args != null) && (args.Length > 0)) + { + List f2a = new List(); + foreach (string arg in args) + { + if (!arg.StartsWith("/")) + f2a.Add(arg); + else + { + if (arg.StartsWith("/km=")) + { + int rkm = 0; + if (int.TryParse(arg.Substring(4), out rkm)) km = rkm; + }; + if (arg.StartsWith("/path=")) + { + string path = arg.Substring(6); + string[] ff = Directory.GetFiles(path, "*.shp", SearchOption.TopDirectoryOnly); + f2a.AddRange(ff); + Console.WriteLine("Added {1} files in {0}", path, ff.Length); + addCRLF = true; + }; + if (arg.StartsWith("/f=")) + { + new_file_syntax = arg.Substring(3).Trim(); + Console.WriteLine("Set new file name syntax: {0}", new_file_syntax); + addCRLF = true; + }; + }; + }; + if(f2a.Count > 0) + files = f2a.ToArray(); + }; + if (files == null) + { + files = Directory.GetFiles(AppDomain.CurrentDomain.BaseDirectory, "*.shp", SearchOption.TopDirectoryOnly); + Console.WriteLine("Added {1} files in {0}", AppDomain.CurrentDomain.BaseDirectory, files.Length); + addCRLF = true; + }; + if (addCRLF) Console.WriteLine(); + if ((files != null) && (files.Length > 0)) ctr = ProcessFiles(files, km); + + if(ctr[1] > 0) + Console.ForegroundColor = ConsoleColor.Green; + else + Console.ForegroundColor = ConsoleColor.DarkGreen; + Console.WriteLine("\r\nEXTRACTED {1} of {0} FILES\r\n", ctr[0], ctr[1]); + Console.ForegroundColor = cc; + + int sec = 5; + while (sec > 0) + { + Console.SetCursorPosition(0, Console.CursorTop); + Console.Write("Program will be closed in {0} seconds", sec--); + System.Threading.Thread.Sleep(1000); + }; + } + + static int[] ProcessFiles(string[] files, int km) + { + ConsoleColor cc = Console.ForegroundColor; + while (km < 0) + { + Console.ForegroundColor = ConsoleColor.Red; + Console.Write("Enter how to enlarge box in km: "); + Console.ForegroundColor = cc; + string rl = Console.ReadLine(); + int rkm = 0; + if (int.TryParse(rl, out rkm)) km = rkm; + if (km < 0) + { + Console.SetCursorPosition(0, Console.CursorTop - 1); + Console.Write("{0,-40}", ""); + Console.SetCursorPosition(0, Console.CursorTop); + }; + }; + Console.WriteLine("Enlarge each box to {0} km", km); + Console.WriteLine("New file name syntax: {0}\r\n", new_file_syntax); + + string dir = AppDomain.CurrentDomain.BaseDirectory + @"\EXTRACTED_DATA\"; + Directory.CreateDirectory(dir); + + int counter = 0; + int counted = 0; + Console.WriteLine("Processing files..."); + foreach (string file in files) + { + Console.Write(" {0} - ", Path.GetFileName(file)); + if(!File.Exists(file)) + Console.WriteLine("Not Found"); + else + { + int res = ProcessFile(file, dir, km); + Console.WriteLine("{0}", res > 0 ? "OK" : "Skipped"); + counter++; + if (res > 0) counted++; + }; + }; + return new int[] { counter, counted }; + } + + static int ProcessFile(string file, string dir, int km) + { + string dFile = dir + Path.GetFileNameWithoutExtension(file) +".shp"; + + bool readDBF = (new Regex(@"\{[\D\}]+}", RegexOptions.None)).Match(new_file_syntax).Success; + Regex rx = new Regex(@"(?\{(?(?\D\w+)(?[^\}]*?))\})", RegexOptions.None); + + PolyReader pr = new PolyReader(file, readDBF); + int left = Console.CursorLeft; + Console.Write("total {0} polygons - ", pr.Regions.Count); + if (pr.Regions.Count == 0) return 0; + + Console.SetCursorPosition(left, Console.CursorTop); + Console.Write("converting {0} polygons ... ", pr.Regions.Count); + int cCounter = 0; + for (int i = 0; i < pr.Regions.Count; i++) + { + Console.SetCursorPosition(left, Console.CursorTop); + Console.Write("converting {1}/{0} polygons ... ", pr.Regions.Count, i + 1); + string addt = new_file_syntax; + addt = addt.Replace("$FILE$", String.Format("{0}", Path.GetFileNameWithoutExtension(dFile))); + addt = addt.Replace("$INDEX$", String.Format("{0:000000}", i+1)); + if (pr.Regions[i].Attributes != null) + { + MatchCollection mx = rx.Matches(addt); + foreach (Match mc in mx) + { + string rsrt = pr.Regions[i].Attributes.ContainsKey(mc.Groups["name"].Value) ? pr.Regions[i].Attributes[mc.Groups["name"].Value].ToString().Trim() : ""; + Padding(ref rsrt, mc.Groups["suffix"].Value); + addt = addt.Replace(mc.Groups["repl"].Value, rsrt); + }; + }; + string dest = Path.GetDirectoryName(dFile) + @"\" + addt + Path.GetExtension(dFile); + PolyReader.ExtractPoly(pr.Regions[i], dest, km); + cCounter++; + }; + Console.SetCursorPosition(left, Console.CursorTop); + Console.Write("converted {1} of {0} polygons - ", pr.Regions.Count, cCounter); + return cCounter; + } + + static void Padding(ref string rsrt, string suff) + { + if (String.IsNullOrEmpty(suff)) return; + if (suff.Length < 2) return; + if (suff.StartsWith(",")) + { + int pl = 0; + if (int.TryParse(suff.Substring(1), out pl)) + { + if (pl >= 0) rsrt = rsrt.PadLeft(pl, '0'); + else rsrt = rsrt.PadRight(pl * -1, '0'); + }; + }; + if (suff.StartsWith(":")) + { + string bob = suff.Substring(1); + if (bob.Length <= rsrt.Length) return; + byte[] sa = System.Text.Encoding.UTF32.GetBytes(rsrt); + byte[] da = System.Text.Encoding.UTF32.GetBytes(bob); + Array.Copy(sa, 0, da, da.Length - sa.Length, sa.Length); + rsrt = System.Text.Encoding.UTF32.GetString(da); + }; + if (suff.StartsWith("*")) + { + string bob = suff.Substring(1); + if (bob.Length <= rsrt.Length) return; + byte[] sa = System.Text.Encoding.UTF32.GetBytes(rsrt); + byte[] da = System.Text.Encoding.UTF32.GetBytes(bob); + Array.Copy(sa, 0, da, 0, sa.Length); + rsrt = System.Text.Encoding.UTF32.GetString(da); + }; + } + } +} diff --git a/SOLVER/ShapesPolygonsExtractor/Properties/AssemblyInfo.cs b/SOLVER/ShapesPolygonsExtractor/Properties/AssemblyInfo.cs new file mode 100644 index 0000000..3121021 --- /dev/null +++ b/SOLVER/ShapesPolygonsExtractor/Properties/AssemblyInfo.cs @@ -0,0 +1,33 @@ +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +[assembly: AssemblyTitle("ShapesPolygonsExtractor")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("Milok Zbrozek ")] +[assembly: AssemblyProduct("ShapesPolygonsExtractor")] +[assembly: AssemblyCopyright("Copyright © Milok Zbrozek 2021")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// Setting ComVisible to false makes the types in this assembly not visible +// to COM components. If you need to access a type in this assembly from +// COM, set the ComVisible attribute to true on that type. +[assembly: ComVisible(false)] + +// The following GUID is for the ID of the typelib if this project is exposed to COM +[assembly: Guid("ea6ad33c-73c8-4e3e-be71-9c76c333427a")] + +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +[assembly: AssemblyVersion("21.12.21.2")] +[assembly: AssemblyFileVersion("21.12.21.2")] diff --git a/SOLVER/ShapesPolygonsExtractor/ShapesPolygonsExtractor.csproj b/SOLVER/ShapesPolygonsExtractor/ShapesPolygonsExtractor.csproj new file mode 100644 index 0000000..c957498 --- /dev/null +++ b/SOLVER/ShapesPolygonsExtractor/ShapesPolygonsExtractor.csproj @@ -0,0 +1,54 @@ + + + Debug + AnyCPU + 8.0.50727 + 2.0 + {93E84F02-9531-47CB-9FE6-9D88B6A263E1} + Exe + Properties + ShapesPolygonsExtractor + ShapesPolygonsExtractor + candybar.ico + + + true + full + false + ..\..\READY\TOOLS\ + DEBUG;TRACE + prompt + 4 + + + pdbonly + true + ..\..\READY\TOOLS\ + TRACE + prompt + 4 + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/SOLVER/ShapesPolygonsExtractor/ShapesPolygonsExtractor.csproj.user b/SOLVER/ShapesPolygonsExtractor/ShapesPolygonsExtractor.csproj.user new file mode 100644 index 0000000..04265ca --- /dev/null +++ b/SOLVER/ShapesPolygonsExtractor/ShapesPolygonsExtractor.csproj.user @@ -0,0 +1,5 @@ + + + "/path=..\Regions" "/f={REGION_ID:R000} - {NAME} - $FILE$ - $INDEX$" /km=15 + + \ No newline at end of file diff --git a/SOLVER/ShapesPolygonsExtractor/candybar.ico b/SOLVER/ShapesPolygonsExtractor/candybar.ico new file mode 100644 index 0000000000000000000000000000000000000000..5c187d978cc6d3393e3df039e50c571359a2cebf GIT binary patch literal 86358 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

lI=^n+5h{O~?pK3+%W0;fun4mf{&czEHr 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

i3A;sJ%513U=%`F&3Vjr5L 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

nlbjH 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 Y?!y=?EOXPq3yQs*ThWD5^H2l70DRB(sQ>@~ literal 0 HcmV?d00001 diff --git a/SOLVER/ShapesPolygonsExtractor/obj/ShapesPolygonsExtractor.csproj.FileListAbsolute.txt b/SOLVER/ShapesPolygonsExtractor/obj/ShapesPolygonsExtractor.csproj.FileListAbsolute.txt new file mode 100644 index 0000000..7c885c8 --- /dev/null +++ b/SOLVER/ShapesPolygonsExtractor/obj/ShapesPolygonsExtractor.csproj.FileListAbsolute.txt @@ -0,0 +1,5 @@ +M:\NAVICOM_PROJECTS\_ROUTES_PSOURCE_\READY\TOOLS\ShapesPolygonsExtractor.exe +M:\NAVICOM_PROJECTS\_ROUTES_PSOURCE_\READY\TOOLS\ShapesPolygonsExtractor.pdb +M:\NAVICOM_PROJECTS\_ROUTES_PSOURCE_\SOLVER\ShapesPolygonsExtractor\obj\Debug\ResolveAssemblyReference.cache +M:\NAVICOM_PROJECTS\_ROUTES_PSOURCE_\SOLVER\ShapesPolygonsExtractor\obj\Debug\ShapesPolygonsExtractor.exe +M:\NAVICOM_PROJECTS\_ROUTES_PSOURCE_\SOLVER\ShapesPolygonsExtractor\obj\Debug\ShapesPolygonsExtractor.pdb diff --git a/SOLVER/Syslib/DllExport/DllExportAttribute.cs b/SOLVER/Syslib/DllExport/DllExportAttribute.cs new file mode 100644 index 0000000..9890a83 --- /dev/null +++ b/SOLVER/Syslib/DllExport/DllExportAttribute.cs @@ -0,0 +1,65 @@ +#region Usings + +using System; +using System.Runtime.InteropServices; + +#endregion + +namespace RGiesecke.DllExport +{ + ///

+ /// Used to control how to create an unmanaged export for a static method. + /// + /// + /// You are not bound to using this class in this assembly. + /// By default, any attribute named "RGiesecke.DllExport.DllExportAttribute.DllExportAttribute" will do the trick. + /// Even if it is declared to be only visible inside the assembly with the static methods you want to export. + /// In such a case the naming and typing of the fileds/properties is critical or otherwise the provided values will not be used. + /// + [AttributeUsage(AttributeTargets.Method, AllowMultiple = false)] + partial class DllExportAttribute : Attribute + { + /// + /// Initializes a new instance of the class. + /// + public DllExportAttribute() + { + } + + /// + /// Initializes a new instance of the class. + /// + /// Name of the unmanaged export. + /// + public DllExportAttribute(string exportName) + : this(exportName, CallingConvention.StdCall) + { + } + + + /// + /// Initializes a new instance of the class. + /// + /// Name of the unmanaged export. + /// + /// The calling convention of the unmanaged . + /// + public DllExportAttribute(string exportName, CallingConvention callingConvention) + { + ExportName = exportName; + CallingConvention = callingConvention; + } + + /// + /// Gets or sets the calling convention that will be used by the unmanaged export. + /// + /// The calling convention. + public CallingConvention CallingConvention; + + /// + /// Gets or sets the name of the unmanaged export. + /// + /// The name of the export. + public string ExportName; + } +} \ No newline at end of file diff --git a/SOLVER/Syslib/DllExport/Mono.Cecil.dll b/SOLVER/Syslib/DllExport/Mono.Cecil.dll new file mode 100644 index 0000000000000000000000000000000000000000..5dd2799084cc0c23c6926498b3314a8f0aa306d4 GIT binary patch literal 412672 zcmce<37i~9dH>zpGt+bJt~9&StPWeVJ|vH~rS)x(S94Y;5_!CN|g&I}(S- zBaDp+hb3b!6LAF0m2ia1CXj>xfslmLHg^DH2zN*bgph=Q{eFK>RrmBBvVr9P>Z952 zdg`gCo_gx3r>dSh`m9S{8We&cDDr#s(IEIBPyIX5{yz4fTZkTQ{l#c-Z}qeLd~oQ@ z&+c>KA6(a+eELlCl$k4Un7sPR8*fauOVBenfK z>2o&*!I?va;I3z0xGBx;;UL_nK2!;UlcONuzy9sInwLplZV})__Z~XF0T};!1|KCJ z_*Xs>QLYnj4}!(^fAI7{Lk@ytp?i+rq5EnHV(z~;M8Pny_gobPd(Dk|tng$IP=f4V zh45)vC7?gq!ZY>1=6&8Z3K?i@%okT=~;2z&b|M{;@z3-kg z|L93aY}mhX$=Z$)EY)b=R%m=jGAc|7*kDr+SxwGc;W-&|M&;hcYS}&t6%!lBR&w`{mPFly6YvU-T(FC({|o}W#Qn0 zt4}x#yUT*0)~8mB{uM1RhLe9!Tz9#mD0?w%t=f595DfLphIbGu*QfNwaH3z+qrC!5 zQcMNo2Nwe<217y62nu1(qI-3ay00q)Q7sOlDdC(54prF*!k+R@RzhIs@uaIcK-5f7 zrCJcqK#A7EpQybzkoGG5A!$^PgEF+j;2)p`5%Q~-TkE!LBr+KHzjAB+bh+HxIvvK1 ziCX6kfQ!vXhH9Nx@m81=pO1t9hAZnfDE;J?5{lO>PkxVbJ5nO2UtFB1#aB)KCGUlU zYlX>=@$yI*4^5C(QKtrlb_?c4sv9MXG?|{#pY*Bs^e0$cCvDxBii=GX5Kxut5T4YA zD_3>PMmP(o0Q(`)KtBt&CMlj+@ad<5u-T?%MS;mjdP~|y5RZpFvZlUZFnS=FgxfV? z*rqC@HW*PYTK7#CY#lpYcW=!{ij3K}usx7dA-Ixw z7|Y`KReaQ{Ju>7fwv3w6=8IuZe;sTx2v?hOPHc86+;k`ted%ftj}omnqV;gfMn2Nr zlT;qd&*WH(5RofTIc%ed(M?go%GU~K-b9fK58R=~6S+rwKiG4nwDN_)&CsI?a&Qt(yyKrtFYv*xS*(8XRm9++sOiBUY%94|FW>!_=*Wp(9n>+!Wg`GMiE z(lks%3*)U(*ptoJb)B(k(0zkw*(GL9U{jIJYBOrDQQl$IEDRMbc(i(AbFK0^uQOiF z>SZS!BefIJOCBjxtA|nr@|2_Q0ni;U#z8}RTL_*_8LcgZg}#(2EcP)0#bTIXwU8VF zr!$OvW-cpq|3_gPEd)HUR!y@T#O)Q%Tt>b=s!e_a8+8+ev7(~4NRO!k?fNo!uz#uf zY?_XRONQ^?JAdL6`%GoU;_<%b0JK4#@3|- zM}SON?2#60RKGHh>JJ7~XIf#VF1~uxaw##5fbvJdjQpE5*`Q=WO2vao2i!cQY|sasT5??!oA$Gd`cZZ%2G*D>GPXWIb;pJ&i( z-ZV^XQx`fMI(-pfjel4F>NFPNE(<+W%4$hWbx?k%Ls2DH6XW3wX7}lpC}+5QDb#D{ z3-Mu74Oa-qA(klYNnzVd4b{4u*74JeeC-`%!osY;)t5X~mmpzC0c}g{wcS<6tduHD zrbte-j;SEt$2Zm}VYq^6F`0xtwGjsyNMEgfOxbDt5(d{(3}++ewhvl+7@rsR)D6;N z2rhR_=d5eO00l!bF+XB&SE78I^*yTV@6RV+*N-`H`~ci$~k24%HfsR+Kll4&KsgZM~`%pVHc3(Wj)*4U68erB&PP zF!pa^CQ*PzSHB?)&UGVmxZkZCd>-f^}cWV zPL;g0kXA`FbHCoDF*F-8Du-n=IRz}?w3>yhvoLro{L)jZ&TNS81+u3B5zXPU)ZRuB z!-e?ja_jiRs?mh?&Td$=kK{4tRpv6MGL?xf!f6=D@a*hGYn_)?`Vt@KwX8)yW!7V@6JZwK%ZI53;*r{SGpX5- z{v)zUv&O)vbTK&uQ4YqyVL-c0ZB`a93+3ipVL;EQS-!@|iZ3LGLcmPFqayo|!$D;h z#<>7G7K5x+oL*DXIIybCdNSh)lkWlpiN_=v2d=D+BTpYY7AT zXl8v;a{xuOQCinHReIHV$wQ%>%m}I+4A^ow3VE5K0;&CAWLjLiIPB?}oIp_+H_|;A%j8)I(5ryandk{8 zlgn@zcAr|qH6*BuvqZ8jIrGcYiB1LD46+5Rb#4JGY(I%C zNKM2lpXp^lW=@n+B&u<*6c>e7r)%-Vs5X-mO}-lCBVyAn!>+|^X<)*bIe9jTzH()f zCr&&IvhmlVN~e(xycC_DIFw-O?66R5U+$txeMum|bQOxF_ErZRE%v1>&R3+mMZA*Z zMMT#mNtlz13oE@SN?tM&L}7AZCG)=xnSaN%TdNLh*2-sU3J+lN(jl3=*=@jDjITS_ zw|RZPgk)X-6lzt_rFqnDf~T|(%;TLW237b4@O+yvdKcvIP>xyj7_3Xr49}?v^m6(6 zc4P4-5T9S3j%=GNztI^8L8*Kj#2}~k&uB?I4DrU$=9l&-t)@a>IGOEG+8q7lsx)nm zPhVb&P)tq>J#86dK?=#~fM(Il<8PXef5u#V+OOnf^v|4+f7V?5JpHp%{2afNIeOKPb-ybMy0hVfy)Q;o4mqTQ@_!Byzg&5Q?N_+RtK8$&?(s+NvD-afqsP?QsHlh}`$@|0#Z*b@ zS7Ph0p>Fq6{8I+_sa3f>46`5B{`YDXLNO@7a4$PEG|2b9nzl z6Xoq_9llshq^3001Or?PzG3Zbh^Ua>Xq)0e?Cd@HPNDRuvJ#=XhH);P~Z_#j)eJ8a(5sl;2`-SQrGW zt+`WLU3T2 z@u5d7C}fpWON1qfgFM)OJpB6aofh8O3 zeuyVyOW7^))Y{uIwNq9i&s3@NGBDxmS>o%bQqHl$B%orY_s%kNf}3G4Z+kp@FG|_7 zntcZx^xpxxlQNv%3S+yjTfVvV>#fP#CE8gr$$bK)h4>k{<_fWX#tjm6Vc;An85fo5)Us);Z}bN<^S^{S$V z-3h&_bYXY7UR5Am7I)Hw`w~(xg)8VEtc}uO#7;0J+xbrTI95Eu%?F82@ES1oc#0o; zv~0v!h{Qy!SC# zl%F@p+qsuJ-ZZa*@8EdTgF^c=$T;m>8K@PP49A_Q_f^Ezy+F3~LjKgt@=w%Ksm~Fc z8)LYg4Os2&SD@He>j-=Ln|xK3JZ0@l)r>A`UH*;mVE-_JtdnB|d(yW;^0%m-HwuO1 zIFyfobgq!><u0`Fmpirk@zh5|LvF-hE zKA01YR{Jsy>Mr4r8C=V2R{Z6U6TfvA=5lN=JO6@{FX+Ekug(7J^;p(_ zwH`Jz@BcBc6jFVl=Hwg1SL^VwCwKyvwar@TVNP!S(4hmFI6v!2R*oLknX@?x8BK>{ zG{fFKvv3reGEb|pnTZ+zJ_^Akd{{pe-mJJsnpe>3lZ)ZS5t+E^O5;d8p9by|#6w{_ z)4g!XBiiA_wC<3g@D>3`A{t|XJ=z!2(APE`8DPrOc>~$b<@dPZ)raO{(VV%LX6^{w zAs)h;m0;%Yfwnipj;+$WniDV6q%$2^&rn%@i zGSp72(+bHm==KXq*ZywjZ+9nu*d3KTk7sf#e-wYa0xwX&<(S+;+l`VLBE9?4=H*W% zuZ_wpk7fhe;kfOMbjd(r1LJI}`MKZ51p4{WcyQ$DseO)uSA;=u ziYs&Sbjn;z{*Ax&!uBs@S~Om3)Ygp#PV z^emMtes7Ea)vS28I9}K;=y19FYbcErlOnxq)m)F2}H2%8V>IT9uHO=-)n`L>uK=5breLV&Nf`WfaQM&NT!?+p;Rz>)HZPK`=u&!Wl(wCGgX-R{ zy3Y*Xs)DIcavqF|JPQb4l?vT0dB;clBsBN=NiI;5^HA1VNg}r{;CE$eo%DM0$L?Zt z6UGS9+6wMRo{Y9I8kOQi!k~fO?kb^1VE~V&FA*=M$hCOFg`#5jXJYL&lBum$7Y10i zTK$!v=$5PL7fQiv(UsF(zKlnh$;yZge6r=jNJra}3fsrC(wP@`JanL9`(H>l(s`mG z{r7C7vBGviitT?joI}C!hV1z?qJneg{xf{qXvye~hJ~p8Q$sI^r1`J6%X)cTmZx|L zV+1_4(Kf-`|IAxGKE|WoHc)$^u1Zk_PhLc}$pkv<6GdIf)NU%I>u1Ko!Q{FDn%0+> zU43+~0Km$>!}OMb3deZF%N=?lIgjuxd}nn`ZHC=@l$@`MDMZEgFQ_J}P?bgk_0y(AK4E;v2&v|aXVdXs)TYNEz-K= z&nY7aXMvE4US`1Qv#=_Po>qF(se&zT6%s936%s8(*}B7mnw8TYFTq6CB-5k|rAet; znNnOO&6urVgvo@e&K7UHC~sBm!j-L@nCzoCMsCz>ZJSK?NMvzgbr1G>;Hp~p_mAhN zN)^C(bAd`?{4bz!ez$X4XO*F2PaZNmt#uHMbiDT!uAfO?1}FMacLHNX$Aea#NGRMz};^i zZqd$bI2jk1EK9)cMRU;T_li~*Xg%{vRZ@+%967|uD#XuQLaiU^tdZ)>YRk$`bNaPv z+QU?Xe%fJkzCEOAH;s`&ty>y)BF&=AzJ~pUH|6~Imy>^Kkbj}~vLSTlNiuGQ-Z(1& z**5->&;i=G%3-b0TSROYSggQ=k7*Dn^u`2Q=JS%z3c0y|j-z~DzZ+-I}XETXimT9z;7UziI87G`^0Qh~6!tR!9P`CeYfr z^+D&{sD`bL?G?(8s6Qeq121;q5cqDTcXAO=Ga2nd4^!<)7kcles4jUeoN%e*GYdVe zya(6AR@1`|FZ9mM;49cRo@Q6*F*5bJ>CjC+?Dg+(^2emve#!mm)oo~K`+Qm(Jky0} zcY9K$^5ad(28;(yHv5sDaZxJM#pTLwiPG?AiSqk6L$DQA$v*EHCU^MNXnTd;18T_@ z>E4-8R9cI+Y@}P4e<(nuRR_Vo{N6Sc*qOS|^AvpU?-q~G(oOJ}{5r!Rh0VgYAM@z_ znx*IV?KEkZojU_UWTME|sCIIZ50bpFZCVNv^}Yy?)X8|YQC&BvmAzO)={+d+o$5!u zFDPJD9CYq70*mQy>*e0ta1n0b2{Av`6`>_Lus6H$n1}5G)x$cc8KFN0!WpLC6Ejt* z^cZy&M}S?N)pc0yeJPVCfiGu)pxVRNSRAi4nFu!g>5f^?{UpAd$o*nh3Xm4@%3S08>T$$y;Xi^ zQ-zp)VB45^guTzJ&K*c5$6|lC972DdboW%e@yXc1j{7@REGsj(mWH zd5;!f?D|eD>)MQI2XK+`p=g>F_Bs;w*uLmf#mm!(>lK0JNh26+ zNOxZg*QUD#=a0vTmpU)Dq8yIqPS~Pv823trp2C{G*R+p*Z|EK&)xPs^+Tt_xr_^4Z zDS6S&F|g7#)AR>Of8^ZsM_KwKm0o{J?E|v(4%?D`+1eQ6vEYf)4Z6#tNr%ma)ls>D z*NZM=rdpuLV+d(q_=-yP&Lc!xf2jUq`#@25d%}Hp^$jP3Ezrg*j^3Gfq84hb!QA3i-vAKjYldV)>f+8 z{b3`=G}&HhvU;&~o+rOZVibV~XX9R!;_k;N#gUeHne7}PT>iO zm!eY&8yBEE0q%a}TraQOvav!C)iY~B-Ra1WZEx1{$x42c{Nnvs@1I&xi`VQ`i}&5T z7Oz@Wi&wO&wRmZZ?dpqLb>*xrkVfSm-)T#fB3$*0|>*eUvn8I@5D=9JnQJ0IZ8&X$cT zkW8b-o7?y?ZV2w+_Y;0^=BFJjf5nq|lhzRMS_A=&DtOE9@!LU~O6%NX*7EEy9JR#~ z72qw5tcEzjj)&3LbcdnmAo@6>T?@Cfoze+|?@07JT*0{HoPIE`T_ zd9uOR=ixNqq2wBa)3FTlrST0Vm}%(L@^F-8D8ZNl|G8w8@|QT)*{9rmwEa|o zc<}g(McZ|qGyZP&lx|DYe&f#|t3vxW1{`ag?HRHLg?MOtJvz-|@)H!;*{jt!h1^V5 z^Fc&z|8jnf&w|goqLQ%(P$9PgQakR}Rhm0h8!-ntXUEu9x&G&s$em!hpI7-r3i9Oy zh+e!1Sh&OL=LSl({cIU)FM8aVES7Yih0()T=DiQO6j5>`Nw6V#8!OsW$3nEvoKL&^ zJJZI7Ekt`4l{bg)56QXuJMoQ%E<}6heA*xQooJtlOz6NCqCGQPCi`iZr|PWG-iU(W z8y-~9Y;mg|MfZw@>HcOm&pEod86S_X>hQ{i>7pca<$NSwsoz%4MV-?Ouw=-hP;9mt zc6i;Fe<&YUYM-~qxMsVPiz}I52`k80c(B)l_Nn74m_?_alGj_w8>^^#kc?SOZ$D3M z)CHrv=oPoFoE|B+7H@4WHv8fZnb%lNVd%@ohwI9FZN=>1g%AuEGq8*BRyT^1&<>AS z;$DWP+a5CAiVtzG(ex_!vSNCvds)dz*d>rT#K??hnP~3{J1m?pN_{pKdm-JSC|O;= z(cu*9vlMG!916)cOauer_N8R8urm3quydsV{SW8`l-ELpxU=N0l@woB-+rL-$+=shz*LUWB zNn@N?8ieHYaqY@zrxj1uQiSNP{>#X*;9O@`!xXXq=ky8%-yWGclIR@D(U(Up0|UgY zMSXeJ$S(?B{yXQlN*bm7-eZIvN0yzGvoAMXK0D(4Yy#XD0%6MP4>XB+F8f+~DGu&xv22#-HWlSImiDk;boc@p}~c{|o6! zKRXl+9c=`qT45*Si%?$S72Ycx79+%dGGc$8qRcN+@TZTy;Z_|*9r%!kb;$c5&%G?HF@>~TD=pGzmBsQa%N_SI*e zt`YMFO?Mq}7F(n4T1Kjau^!t;&~rw_tmiyK<2aK_-~E80Hs0E( zFRnb7PC$g?(<9G<5;jU=#%E^)ACppAb?1o?U7ilS!I$c6BTwcE*uAy&LQWa9KOn5f zak%R`z?*k=H3$qNg6%{j>OxcRM7ayDX36{zXx?BncOI%_SkepG@i!ioQ+ss=#k|Lk zsL(VR7ktlc*fgFZjq9{e8lDE}M@vgZn%6FNm6VgRv9oxtM$W7I^HXvz2a4z@{r(g)C6Eqq79x1M%1`UaEKDsLU({HX zE~T77neGXl|5U>wT}7p)bqP{hG+xZ;jF+m75^l&o9+P4<^KPXfewnnDK7vVlask-mSii}6lx54DlxG3!xls4H=(pC^GZyUljqDHx| z6&hX51d0Zg;}!O^8H$YzL8&;DMno2rCg?twqHCoj$C4Ijy6k<8*qE1RO$#)QT2|V= z)@br!Ez__hQ?vD&opO})zXC{0HOqnOy)o!IUO!l^u>>><74OS=iuf5EMZGwRU&~R{ z`yMDNK}NCKsP(nV)R17`f=YDXC*iOgGFNIX?4$sz39aokhQ~+aXJ$q2zE2f08b5ge zIhZC6^-Mw4UG%lO(-?scJIF7W5BL+4Q4>ae$V z>g(2$$BfToAQbi;D7D1VU8f$c9QCyVG`Q1H!>g{+Es?#7pM>Vs%b4SdEq<&K#%E>B z4r4JYTvS=Ev|4sj!@Bw~j=dMfg5_mhi~tu*y1dUNZ+Bmey88H!qqP&!{ptk3brdhH?}YMp+~)JZYM6ZunAP9S#DFCH4VxJbMT6vfR7g+TDpej zcN0CpNVVDL#4_ff_z+}m%&dK4Ix)HY#9%4ScSv&v?U8(@@-11i8n;2Z!Ia5!6*~ow zg-YL+Kz5w2S6j^(>0Cp?i8>p-sQFr7YbKGcoM6H%X?^DH8rzsFzm(+9&0iBlrNOev zPA#bzeFmV1Mz+{evBj1U<7jxfGxB3YbcYvEtlzE~^^;8|9x9K)Y+3}^BkaG_z&_`#LnKVarrswWM!RrXSDXZc8V z{hz36OWS^gX4wAp#c0q(Un@vs%<<8zT3_o&jF|OUyU4$=Hb`|l_sa@sH+O0osjt-! zjpT)kmU0o0$A5SbkDb^Ls8GwcP@;QFMvJ4R_GT4UbZm5Vy-#|h*^SQzaSUfhMiO^x zEc25#ipE6RL~Kk=r>Q$aWiJY?wFzp=Q6sHxVvN@{g96zl$f#B;G|LHywZ%h0p%u3d zvSqEsL#d?@`k6Ge&td1CgIISB6q0|!i-R&{MXD5dk|B#jP+JI6$ln;~a`@ zlqy~Pne@aH?DRe|pr_rv#DnN6^Bl6`z&xSG2K1BN+jxbY;p}K2P1QCusL&s7a5{HT zYL}?u_g^ik39&z3ZH`ziH`To^0Y%YF%IGubnI4&EcJCi;^+ zm+|}t&zPr%yT|ij0{fdg$v1P|3kV|6%}@lsxo{1E}QU zq5nF7N@5;bDX09#&+wpq2cXM6X#D_mh6g=y0P1+q%mB1{W)}f>c0t472S>&VGv5W& zz8N*Tr_w!M^IcXj)&IN=cF-?4;BDLZ%oMxuCeXZ@vfl#bq&8)BKYk@cO z5kvuFT-^)pc$S?j*?M}tY}%4;$Q9@7@1uC4MP3`yycQSow%ZCg%#^TsK7Gz_&=5y$ z9<6l;&8)4Ya@C{@r>(81JvbhXMT0`#(TEZDPD7|i_=-G8zyx(=-|J2mn~xsbYmY1v!t&DUWc{X#sL%8Z+0h9 zgLp9rY3&P56U%4iGF2WfQztoNKQy-7=73AkAgjmYn7i9c)mLbI5FRl@qF>x1MXRhG zR?&ur#$$tW$ z`4dzy+0MMh&Q}b_=^~2e0oseWLp-PL;pm^ENso;0_&kH%^>0K=TEkrsYO7~t6r1hm z+Ph5QgnyR-T;|_p_Llp1*`*c!T_$d&f0tp~%fHK2V}a~;pTFd z(Q4H#@W}Wr;?gr)9t+#Iz}(TS83mP%!%}d5tN0zxZxg>O_%Q+rUc~RU{NBy)Z}@$Q z-w*k9e#sw>3ajg6Onk@rn$k+UI^T8?Geq2ho6ti)?V!&S^nwg3`vH+#1-&qX{_%kH z9ZVcN1#to{!`9jzbnOlrKNAo(zjg;RK@Ykb(Cq@z%X-kcfLtx1xN_A|dxNM=LrvCW z!0awiX0x+6AAP4NFj5vn@fF>Jl)f|xnk*iox%kll|1QJlW(Uy^ z%Hw6mhwSpw8m|Uiw^&^cEbnzVSE*P@qVA?yk-t$Wo%0uiHKco<($PDa3e<|577rCy zZ;CcwXxl#UgC{RUq09lEzy9+9v^$tOG;A$u%gX_ssoeQ>?H`!{MoZBg`s>yd>`oR& zb%Q%u48DhZP84VAx(4R@3YiaO$i9P97Tp#bv{2_^ao)H68|GH#kqH_19Cmx~Hsirbjp@w%^o z(ZD|XMvC%m{nysMo<2Bng@uB6Q5ye5JVRKqshs%jj>C7n@4>t!!a@5}?xo4aZCT9RgLgJa#eBA*WZO*J#?u17=Ue!BWBBd*=TA{EC=-PWe zvcQ{Nj$kJNN8%%^?i}N(;+S#RGicE>e~n(J<8lZ=`1TRDf1Fwj@yNCkliwXUc>1**KsO~OAEmPUA_JNp zxeE_R9aN7V7daFsZy^IM;`6`1NRd5}qrPa2P0}lrY{Ac+e4Np7Uj^p=qOUN>>8p@F zhp@X2_WBYN2ko*W+jAN_R(^j#aJ&(g`{zUD4(p_~l)GW4Uy4TCJ<##_G_d0@C4sQX!KcFip@keP2YP z_^DO2O7HcIr4trT86EYsHg0E}TF%>Ol(c23*#1v2#!I@aURg!>$?Ot3!-yKJbjB+O zc!=Dv8pV4oDrl74SOk3tc9~9a$cxNMZ9X2uJ}h_4g-??y6itG)vS?QkssT|kgEjVo z?uJuabmd->EB8Rog3ghbOZU<=-S~p(1f7#EwEY2h8P7dwlX79$yq2wGtS+ss6q0B1 zWP0c$#tX^u@H}(BreEko?)w6zKud!!OL>^c@i0Ex7*(B(bSj{@I#YbK+h%|+x=i$s zhA<|sI=@VH@^OXa3urM{HmW+SHy@8w+cyzY?VYHaJzDjahijcx0uGOua4$pChkM9$ z+`%CnxKMNqQuOaDjyXPiUpZaspe}r5s;9h)?E-Z+j*szDIb9>p!T*X#e{@WxI+)sL zJUZGaTa5X<x~H1}dKi{`{zWG1TSkLVN(_Sxsbid^M$%XB-uT=a{ zoV{4M7>ZTQL|AR$Gifg~EoqdvhZnJtf^8?%hr4yfoq=(C$vhJujtcGHAY17af-oPX z`$pX>to>M-(*4bNJ;L~m$j%bi-J^NvQuh)jH&Y}2R%W++62>hDE!&mO!xeWKOjj4v zBx~uZHEgx9oNUc2EkA5}GuK`Rwnor7HpAJPSEcEeE|^Zx1=HP~ro)TAKwlu}g6UqJ zrdz&XIzi{8D+Z_0kpC!6w<4ELQ+(N@a%T-Fq@xc}d}@y@nrUW-0b^>9zV7YO3s^Kr z?NJYJOffmk8=*&as8z;k61hgs?#3UiHdI#4F6j09ByjibOCpy{|pP z>6$%PPVXBZ!igPA*Zu{?s>Q3b@PAl%X&NrJe`x@XEi_2g*y9Ir$XC8Y zZ)TkDP;SHF&V5#GHsErX;AHpTxHRWe=WdBiD}Sx&*KtcMi%hKI?YfS62vqAcQ`J<^ z<%!+p=5Fr5fgxK5Lt8T1{t_AFh_j4Q#`+`3n~Xa1! zz8Hede$g*RT>hTHF!)Evz1HiP)TwTLOYw-k?Kw1k zp*_RtV;y|@$sIW&El@dPsXe3V6I^)uS+?cS0!yYh*>ht0{P^jqqIpGpY8G~icxe_^ zA6Sde$in|+;bXG!qZW>{@FNypnT3%I>FYBulR{mG*zC}p^m!Frzs~8ihBw+~&{1Ms zQe1?fw(Slx3U?8>uQyzsqlk}wcrPjKjAQsq~-X&%E551 znjD;FypyIA_BH#Vc%wv>+w9+pJcl_%FR5<^@o?B2qzc>Y?vlfgF_RvP+=HgPjz?9>rvIHqhE`k-ji$-6LZh)v_R zL8)L?`$9{dXPOaK@rt{do_Z)-^0Z1ejSy-}>Pv>Bo3B&Nyb(30H~G-?CALq-g;q?r+{=C(xkGBiAEE5Kseq#k6){ZSRu`dmljo*a#MJ`IhGMB{~wj2w+qq}Uozxp}d+F}x{9W6EfF zh2S2Bw2eIA3H<{a<_P__2x)A`W%J*rG*aomBbLkN&jmVnv?aw`68gAov^5g1pMxH{ z!P$It*^?1$^^dd8ztTIKjH))9kXNA6JBM)cb;^oC3fn&?g>%=asw=(o6sxLEPJ&xd zRGU+Ii&#z0AcnfK>jT4{iibhU3}jY%*OJy(?4EhGw+|tzH#<3+$HUomGoLG*NVzve zAA4)=e31ml6t~#_ej<310O|DHRZYv_C(6{ zq#H`sVN)|wn8PS$n#(yK>r8rlnz+cK4wE4DEiPE@JfKR%3{7lF?u85NtIh10<-Su5 zVOnN;-W-?Mccje(GwEi?MVlcL#rD2p_gyq$*?UPF<2JD+*9DP6Q)q1{w4-cdeJ{2x zd3d8{OUO3APHuos5H@Pg<_mL_yGhl5)RG%$9tcQMRSu2XJ*+}eZi>^;HzB}YKS^b! zAI))IG9PizBlamsn|FN*Cf_n>4|}<~L%CetF+~dda@KUH?6hrs#kY;@BNRI`G;IC# zY8dvRi@6r2(qkg)G_ume0afg>kCKkM($l9ck{_tN1ol$kTNaQA{iib0E?msyy6}t# z$|kOFwRwCL)QW-5T+SJHn11>)PBbRwmhr2FS!Lt{EvDPwqPz@9WVcp1`6%rus(p&a zE}AED<4Gl1nHjDO-W=(yf~ePJ&C;uTP-2lpiL>&|Q{tOvE3pO3op)-y>y%hBml8`t zQi|Qy$2;v2^+VbHmaq-e1~!(RjI{Krnw%#a5-$RvZwCSRnbx{U;F=z@42=rWaJ-1c z?kv(EVMd&c_D5+@~PL&Hrqc@su>o=7yTi2c$tPoIQaU*{z!&rdP;@5Nps7 zN9)C)%~O(M?;)_QXJ`H~SA~kbZ)LHJPyNcTb(EqxQK3)ETn2QB@<-eg?>8G9wWe(! z4p({MoUJ(|S6R8@P+yQ-e;6GNWn$_6G0Jp+FH;y_!qS>6uZBfhq~YYv{8Hq~IGeY! zIW$@a{q_uAYYfJ%pn?U)pCqM~EUKK}NzS4C+$3e+i?s=qV!njBn4jkgo`0&k=K6T; z9LK2Ol3A~yHiAFAlgb{d(d{jd%D@IYzwP!EcNUJ@I45vjI(u64qyndcD6DTBbzK3R@zII_lQ^y;?uzL7c*sv zhaNZas7qX*IkuMi?gkdHl9prrDQG4J0KdDRpInscKry}B(N)EhA!8M;<;|kqciTgN^fi4$=2T`p*6AgDC+V*R)oqlagZTei= z#Mw&XuS-)jUly^u;gVA&00J)}gXAn9V7^jJPWOQqDsYAc#w(qtkeAQqDYLUl$YwKW z!#*2Dk5sC5A)GVD2M>?c9$C5q!_mMQ=VH1$WoFM4d2qE!F1f%5?oi+&AHd!elZ!0? z7vDx|o{K-2&BbwWaTREsrgWFXDIWdBLvNSKC0B}u1$T+$Ru_aOjHEQLpH1@sXkIIt zbSs{!FzjZz;Lf#Bw;+5})AMuIqZ zZ6|<-oSRWeZAaAACm+ll*x2U_%&Xq(_+tKSM@%QSY?Swy%G9ZaK>8yeI9S2Q`F)As z5BT9f3243n6A8Pef)liMO8rYbPk`zq@tFJIeg(uPg@HO^>gU?zpA$MV&Pk^<$!RC8G``yQtyxfKO$7QD+FG(CyAwj|$|c zkj?deK)z{^OzuEFZ4m9*HnR-mLk7{#?G*AhgJ`iNg}l-rS~5u?w;4nWCn@9^2GR0K z3fXE9Euy55vkao8loWD|LA0KdLJl;D_H(C@34>@qc?u~RM7zpU$iE}r&{khk$hQrm zC72ZQd4ptHM%h0Mq_CZ8581?GH_tjQ?g%y%paCe_MVSG`I525RJ$!!|PAX2BwUcj^j$4#T=*4)z>l|NyYrts4$ zasMHWQH+jTaOZT{q7KItV3PeV?111f#(A*LWbCc5f%obXLKtTO(@h*QUm~_&4s2hn z@u`we*;Kd_L)W3$_dwEEeZquXnRb%v6P4>Qx#~LujbXc0caW=q+fPBbz7O@eW?);p z^{LWa@1p@ba<;J{jrF7SgurXrS^123TU+vNU6reid?LL3P%saVC4$2X` zt~a-)tXescSof(OAFcIejswnGOHOMeM}b+3it@3>==h?T)#N2S*nZ>u!~4PFF4;GY zVN4g&eN#H8o$i}T?O_-UgOAk$eTY3>=6|Xq^KUF4QJehRkqFG!|{#g^5S$L2Fx~OAIfurp9;ar%DtxB z@l@1o-$^PvYcU)j!#!G0u>%dm@j<-XQ3+OEm)K%& z=}^t4j)i8M4O{M*MlIe(@Z}0#EQI(Pf^0`|$1`g26A8Xj!AmUmRDx^*ac3}UafjgD z3SMfl2NGnjJpvMlDe zo}W6v)A+6Br!BTm<~PGH-ofX)l$pv|k9&NPOCeAQ-4G2E&Fs44MaBe*RMH)VhRA*S-=U{M8Tt*XI>;gEQT>xs5s-yH5@t*!_yr;iW-qT;am{U3Hmet|| zInJ<}duI13o8_sO?WmbsTcZ0V04YlpxM#4sv4-h&yA9|5=;lu4o{&P#yn`A_0h@56%%M9Y@=z@U3)aAUk@$518 z^rUUVPrlj*eg+lvLD3-gY!cSvCI0*KmN!?f9;Kw&C+^vqzNb&zhwV+qn%~1+4fc)Q z{&baZjC`C8_e>z$yu1`&&X=Eni|1-52OUl zsN09CBwpUrDL(}hGTkrxsarF@pepZI$=yvIOmAvdv)wCrg$zA@SNh3Me_7 zfES-H~hZ&9xLOtYSPNVwrodg1n0>SLKp2CrfA zR%Tq;dh!Ic{vux|rjsXAy2sW@wmqT8Jyv?>>!g5zwz167#s8g-QcB!sxttDQrh^X~Kh{3dJ-5v1iyT2& z;ywbGyhKYI3CG_3tXwwQeIwnqhg9aFzR{pzAu>gNyK?P&U)$MU z>IeGD585m3ixm#hZ|WuHlfhE&8!QChg8sfnzr96ftc#+uZ!zqt=x*&tLyKgi%u0FY zG``;G-^2FlxrpmA04^e9)GSRBu!;JjpyJocWqgLqGfeb7cExXO^${25=+C_)$Hq7= z55FXC7`|MV+ucEV=JEjvyN)}(1JUVlr zM7-)sc)o2ZwS5+DPk6p98y**~Ie+H@^zwL{9s|$oyV28X-k$PZ>e_|j!TTQZ^7)>f z(#w@|GDio0lcRHq`)+dDyb66~U4k6L3cK%sfMqf}D zXUXQ+5yi?*={eVqXyEfyScC&N7rb~V2tJ~`OtEWWTi-dWm(<&{rs&=pW02=4I_h1AC8q*eqOy7Qp?e)04wz;VQHM?#CSN5hgmelzVB!0novs#T6qgLfzHz$ z^)wyDG_*7$C|&35Z=TP|03G&6^fF!#PH{Z1OFUge_WX{eut(V}J_2)QQvDoJ7 zOQZO{LgAABQF{1l(>+Ewdvpba+N+}0vSP01uIo5j&{G<)|S!aTyO~w$HEH;xcQla+jHAp*Mg{M{S(g zaMd&}&$`)~^O4=h9q-49Q})(K9W}$VE+^~>Jknuk@mHAu~x}axrB6P%>0&!_(_W&`=Gc?(hT)e9hL{*Re6>IV9oqRp$Vx2Yh}mc@uyU1`)OeLR4V2n#_MCdq7iCZ5CiBJE#1k(A3WH8po%jc>Bm@c{Kk5YU##Mzrjb zWp;JiB*z7V_FG8sT26IoJ6VH|@e0pYpGEZVVg`s4n};j*eM1#={ikT|EYaZ*mA}Z1 zd;Zq70X0UmA!ZvDGTZ2IyiGWI7LGzWoTj6*ein{GhBNDq0JiB4`u6mW00G0E{u&$4 zbfXCSY;%);-M3QK_D)GsJ-GUe(C(0w4fQrDy-&e^@yh0(H>ze$-+Yz^eRc*-JELOX z`k7MSx)83Cgb|;QlY#4-+PA@hF=(^1s~M=x1@`de}!PjHn#c^eJzlG!V?;Nij&`5d3BQxOD;CtXz zaRXiz^1R|YalG<9rvc#&^r4Z(Bu-@ zJ{&q5#$4I-s6I2WXYB_h7b6f_CMG;9bI8Xq1Kk@z+V+E>(QC2^XWS#-K=#}BW>BCJ zn0Rq1WoOj}KkMrFLPX)~_@aCr8+;FSthhlPD>Sc;7cE%F-*t8T<;Sbz4ZmF@eB4(0 ze}a%U_5TxM|9c{j$xa&i*Wt`AtVf|}D{>`wRnWW8f%c#Ahk7pdH&bmm#SvU&ia2{|tPfKx99v*b?8|T8m;NZzz_!k}g=_#D`k}t`(tLfEK z0ZOO^?gt&y$X5T@8z;Eknc`owJ6yt^B$oV)Wv65x{^U@TmW3_;7rb`g!qQb=Y(h|v z>$d)5)!k>>PYGMOjq>0|4BMoN3cye@{pa^g3*Ix#vrwZ~;7l#XxtiU{$teXHi+WvBKE z$$E0lkcB&!rcV78lBduYXJ|%q1vH%wZy!hO>+0e5|K`cM0FyPJx%#MIg7;0q{VzI`((*z)077i;S(tY4mjxM6RQ zWAzT@=Jw(0V_o}cfNtn4H*N$Q*dkFMYIa34-7<@;ioqvn4_`4EYzNhQv2EJ6jPFGY zl*n_}{s3ZNxA3b#FKmCoY|Ig#O}T?I!kUz?V7;Rxq{-5<6gUu0*$%4tCh`{8Vk3BA z`|YzSuSlz5n^F z3A!02??m!8>^M)8OS_^*atYF(dsyr| z33I<^XTy@*AqZyr!rkqvzfvtHm!JTgs*jGO~j*NLdoh?pZ$G;PE_bl42`IIy5_#)Jkml+t9MFxiVUT?v?fwX5L2^Yxm81kBFQr6AtX=xpubQo%@E~4;hnl6~_vg zp-I)YG0|eDV^0RxujUeSDlz7z`PxH!b7>H>)FJr-)WAf(LfxGP3hTKp<&GzD(kywm zK(_wkpq1p%EQhl0w{)Kn&2=lDUVY{hnmXGDoXXNH-S3|hiuYF=lgS~_^gg7!efG(F zfKjN+XBCP_nVoX-JuIqg0N#zR29N^IOIrjdOMd{OwU=fyxlUtqcXG7qs*S6X27-Cz z;|XRe7}|@1u&pUh0tUc(Up|z)aLC?QVu!i3Rd+>b%rU4>P72dQ!BcjrfvcHJk|X%- z)Uow-LX~&*b^V)puO`2Q{nYe45hsT)}aG_R@-W+ z-=I)_^&V%HYFp3>hev&FLz689voq0gz^ZR7-^SPPmh~dJSu%9ye z{WAGcE|W@FZ9jm;z|)`$7M%X3s)i8OKNTkz6{Qh~)3$1S=4^>#0h1TeDW^5Sl?cpS zG-LjpiJ+Lggg`1(ixnVwP_eVB;cbsw4Pj5CBF{*N8&j3uYS#o$t-4#El0RgumNGOh zNu5uxmb?(C=L)F;Nl|Wukh}fK37gvk8g)ll=Tpba`1q1Dusdl2icwC^1mMW=-GhNP z{Vm0)JKM1bZ6dF8bGbvzUv723Ni0f!GFzTe@-LFuU;5bZ&W-(^Vx6?3DkbIMO?GR3cmi(>NP`--R??fGbi&|3KP1QvwAgzjI zaYw3QvWZrnC%W#T$D=qEY+wqFt3=;ewfzx0d744tDfp*6{O5Dv2caTuU>EbuZqzQ-HV`_M-$yc2xX zxgCD<`HW!2_RtxLcD^&J+N~JmDt%XEsdE(6ID|>vrOfO-R-B~hLk`-04`##-Vmow* z;9d&ub_$e^+C*p4rP(iZ(c2W=es7jCezs4>R_}bWy~c{oG>M|x?;9l9=#%`@f;p{7 zlPS9W{z0-)$H@Ur$Fu7*xf;R-jMc$_F$HA(Wpcd@Z7Ozm3WnZ>HdT{^gV}&6-;3w! z)$HlxRV|aH4Tr-nQf%^*ejUp%)i1$&{9a3qaI!3eYabvo*GEpIcc`(ZEd0kU6~?Cm zQkOU!FZXxWYNo*;kwH9D6jQ*8=^yCde5{LW(|cS!9xr1Uh2Gp7|;IOX0v}` z%D!eL^^E;v)XV6WMJvN3$(gYVXkpU{3Z}_b@+4QVr!g#@U$8emUcp?s;^69Cu3Q>d z{Sn!HYr%5dIw;4xW|!lnv>Y}Z_T{j}PzK9mC7a|IlB-E%B}lGvTWm~=Ta9FNHt0y);P-}l2 z$>#LqYXgQJQ$MBx_D-#YJ?6+I-Gv%_Tl_eiz%Dd0=kT~@lEvfzjmR{RPOe54Ou2QH zg`d)yJ>>G$>~;%h1?<`Zj!HrX9i@4VxImbk3^97jQ;2cxlmn|p+ho@Myo$ok0(o&J zHuv>FfbxrU;ICx-B`=~L)*Toocj&oK=mt2}@DCmj?PdXE-kE{a8=~)l;mZlW`HhS^Il&8CR%%!e)8#1mbISGoT)Ehik?JAe9YK%gmn-$uW!|CW99KGBYLqV> zy;^q9(QHlAJQ6W4WQy(dp?2>I?=M&FUn7HJg8H7=JAQ=+_#xOZ2e z`5I8pDsoY{46!JjR&q5LH$j}jY1}aHIcZ*+Nt5bVaS^*7>I>xCQT_kO$?nrGC5h=a zN}V?lf)$eMu?O3KO~Cs-oLP zh%(D76wOy9Au-tgii&TIfc@rj`u#O+#5?`WJ{RoHlYhyT|227e?tnZ4$1#5|Q#9Tlxmdm|+~Av#Qlf}iH-{ArF($yg{_2@|%@ zY6x-|O*uncCG`P={VH(>mZE&P9vt2y8 zgS|Ax8F*_lu3$U>HQ*#e0rCX>YuHZ09e%xFAIJhDJywVgyQV#goMPdu5+dC>xiRndtm za>sS^6W@|cym*1c(y~OlwBsrB6SI<c<%*re!UX^ z3>&xO+JzENW{HiLOJ%o0!0=SIQ5Vl#i{+Jff(=Iup31XSC&D00Ma5))l!t!JcW{1@L2|u!o|jY5{2~L=vhEQ0`oD3G zR`>ZJZJ||nI48j@8-xSWn~}U_LU9}vLz?=O_N8LZrQmGe$ofvKP;fcFjlkZNgUhdQ z6_NN=HMg>q+k$?!e;D1PCLUj~hcm)9L*??Y6Q~3&0+ih%oBaNCvfQMV5nG1k*9DJZPa7*L$=?vyUx~3! z*Ennq;Sjn>meW*-clq@Vf&2j~!0UgBJc1=7B z{rN_JM^L5q(y}rJwO&Q0#*dYJr}Pdw7D#MFSH~-36?48M7f7+Z_aURdd~@s9Ta&k| zBXVhdOmd$&|FY7nBVU|1mtDD`VR}w-6RX+^@$bA_0v~4Gifnfz* zY;F-V*_+x-kq&TtOd>J_pKY}<9P6L2NZ#bwwYc2g8|#nnqAQj^&W)!_L!bP#TQ5}K ze+&Bf@6tcETpo=D(YgBvb?*M}$*i^Laqi{c)46+{uTRh2>l}T0?p|m17rK{UXYkW= z_jc4iJ$J7I`3s%9Uv2l~WcTtPE;M&9|7yFFt~Huo(yzk!GG$*5eIaG5Y+S@&HO+`$ zjUQ&nj$q3zEPqvt-+uhs{MPY1l;2VOj^($3Uwks>^fxZA#Tz)Qf81WR_-M}SAJJkn z;=wEVTo4_FnQAd$J}>-$5mWy zU){Ufm3AdrE6KYmw(sJ`qP0ae5f;UmZhE&(u|vm{3tB{gWfw!}U|L9n1PCqk4go?4 z2??#eCC|2=>7X!f3&bLPyvTL?9Jf=Bas^7_jO~#b z0i>G__7<$Ku>I;}gmTM_?#FT8QV?LiUUK$V$l10MZ!+PW=u;?xe^q?|q7H=_x3hL{ zvk+wy1@|>pMrh}b-=!-fZ+|lH^YZ>ha|s6TfHIe0^a3`QVDRD#QyE!d$E%FIG{ani z!AmntWn@Jj|9xJ$9z(s)J7ZMpta&6u>a3}Za#x0`jQTB&2~sm>jLKUYo!Y`Xocye* zvrMy2dbYc(r??!V+lDXKWP5h$f+$$b`7OY(W{$w@4ub_ax#19gQu=N?s2ha`rjpa|U z3>eGLV6p7pgk`e9dY}e7&W^5PI)^2QP(q`j(0&O;m z*dXQjIYWu*&~PVQ4jmNk(VcyYcEXhmR)I{30*S44bQzxzTr>-e)cf$?Uap~XuuW@~=VPk8h6ziDt@4bR z=z~=pVTV(B44r%xN8jshGnn`g(Fubv>yp-h>tJLszu1zQw8*m?X zuKFgvOw(LW{1A;~Y((`2YDh2!4L~bjjQWIZ%Zv&=V8W0eY(i40#4Xq4r&IVif@%@E z6^EjotNs8eaUx9>JL8m%fFeNCEpa%sF%B&iBKaI!P)1~KYK+tX!jce3!w75AMfrs{ zts#P+DWAu(0tG(XQbl{2;0^XsnH~~%6PX?=Zjk9t$R%&=wOH28KH4cSp_s9Mk{I=N z9iBA718;1b)wOS%v4p+O^kn2(I4KVW>{D^GZ7MTg6(p?^CRjnp83g*0l#Ge-K=*da zkFqkgdt=1#{;}X1gvOi1_2rDrwrm!+m37F%P?h(?;huDHc!x!W4%znZu2SI1PTfdd z&0$?u+*D~}j6k=WC-uve%Slf8B9t0l!j0*8E)Q3EPhqwbq`(ccDB-#?gS!z5N*0YX zHcNIvwM0MWIUC^%%>uflC&@0)MxyX=tEXfl7nfz!^F2cUFzEj-{oWWlSUmBn6?s(L z**Ld?PN04GYS75;?Tk}yMXhXW!HG_69aU>DRo;V{9D6<#C;g^d{6h6WU`qYTv2Vn2 zEiJw;I9#B#HL`K0DlRGlqH$9oQHS1J1i=lMVOZ+s%sPx2ME10p~UAGwEPnC zVqzU~o<@4XIbbrd z2T}&5+^3VXx*Oh?J!;^OHyhuD4CI z5_U-YvGdS}j;D^QymlX7X?kR}s=A}NRQPFY!DIpFH&PpDvY>|^xWQ%y z{Ip<&EmzvF%gI-_LmW!G655{7wuE*dv<0Dgfb^kwRE$g)hFuc*QWp|f`~_NtFhM00 zP6~wcSdSnO$VABl3zz6~F-jYVtnD5TQRStID@3Zww+6I2Ap7rrjB=7x z<%$c&<#W(%pq@mCP%0flGzC{Zks$Xl zO7Q2CfiCN0V{dqP)Rl)0g3A$#8}Qiz0T;F}#79zR%sA;PWz?^uS)iuHxAL=oy!R znuN0KyzU&fshZoxZq=s4o-p&guJc(45NrBuUv@wdDC3+6dZ@8Mq+Qn$jG|`miSD0H zner_5IM~^-D~PKXqiX`Z7hzn9PI!01mne7vVLnTcY^h>jbi$E4Pu#ImocU5Pr&D`* zHU|^v{ab_m;I%u`m06wZM;g>sEti7@aR-p?720wTEmvyGA+)T31vC0OL~0N2*z9G3=%R&8CXi+SCbWON78nc@JcFPrIXz;tgl7oGQ%mOjZuSk!39v$lGSU) zTS|MIEceAB77R)7v%TP0I=cbTk94)Sb9r7B~kdB#}>YW>|LXV9F5I zQTS2{7aX@iA0tacc~*zh(c4H@p&fb7c2;WiB}};BCLX+Fcv_LYN0lt>@&j5GFv1#> zVqM%CePfkt5m3A2^;9|3l^FgGVulWx^-RunAq9axN(2Al>X+#>g z-4}m{I!0ZBt8eh|4tD*-4u8Qda`X$_^kE>wJUj|i$Gi;>q--E_CPc+!?j~HTu{)em zG9cS{RH7?0gH2ckaB&Ol^taVsB-fePG<};U_M>pW%vp83f~iXv;D*kJV=ykA;Tjhg zk2c6U501(~ISaOdta;Czy075Nq&1g)dJxkXWhW!W$fcbLAR6wpU5@+`!swm0bkuj+ zuBPw}Ys4u%69vuOX*-?a0=o~~!#iyyY}^Fo`c7M>eEj=OmCVkAU#w<8kNgNE)_A8a{r^9_(>9Eb z%sya|U=4TLGCvoijlgCro1fV9#y%6XVN!9)ixqcAR9CN90`2UH`b-u(ew-=8FE5S8 zGe&YEn?+&IMXUl#T`+m+e`bx8ks6K6m$}Gw7oPN z6uXA)Bq@5dQ#k$5UP_kdBgAu5BQkpPR!2T8FgHSC_;rX z&Z@2Lwm3M=U8VK`to0}m21O88wi)He?2k)BBAY>9?m=$m^e@XuI<+;Hx5oIL= z%7FN%WB6Y;;M-LEwEtfjeC$#j@|p%-?LzC7Qz+T#@`LE~lI2bCn@J@DJXMd@%Z#to z{e~SvpDT8tPu5u@Z9+SEDO|n|M-K*9JOV6>6Jma2_#@YWU$PFo@b6p)|Fz(Se;n^R z^AP_DjOI!d)+W`uy?}}pe2YKd#t(*?=;G6P*+juj>B-2 zGcM-t&pO6-_zHZ{@FE^%s75Lh1B`^TitR5J;nQ-6%$0=cLt}IFPA+aUMh7DIgiIs( zZD>Tao)&RV1;1sFrZzM|XZhNye!Z0m?Xyv1^p+ANNskR$oVFeYj+PkDL+lhd(708c zx4^eMOdsVYQPyb-zK=*}l(0}fLSb>jPsuCg^!lN^SZ8|3&n>=0LHV|nupLr5&qRg4 z0eF3n|K>=%)XFvLJUQ`Gfs`6`9yTejIUEbV?z!gL(s@xD6y|umz)f( za9<@yRrqkw72eEtT!ii_68Oi-cqXJUmnB8R_=NBXU2;|Bf~Iv#DWJ|EZyw%4!*XdL zRwvMXY=OPbMJ|#fUy9L|+rLKtT#5w~`=Hh42F z?&>6-*h-c!MU|=EBoX4JN^a#Az{PnCdQdrhq2A%v&|#Eb5=C+SfOUhVyI zOoe#Gix2>YIt;?CFzDhXaM2_zgKUrTsys28;dW&&xC)e*v+hU+HzWC|PpE-t3ONOi z_E0;^u1G!UZTLw)o#+=2=%pvP6-op1vCQVu%tWuj;M!Bcyh4=-sLbdpu8nU8q4E6$ z@;dt+1PcVXHF^N-awEbt{0)pmZGs~!B{*7phWZLW687fTcJO;x+(+fv28O3<}d zd-#pScPjYz3I7^8d-A^!driUrB7T~y7xNRL?*VD9REj06QD!v1P&*IP% z@wlgt{GQ~ex%w18i0{+#ZLWS52pf1kA457$3%1keL?8Iq2vFcivL3@{tws1oBTHt`Yq6HG2VR1 z68w+nr@4AU7=0-(q@ODEEn5DMD0*zcC;ek}^pwjqq5mAUC-6UpGjECNvHYlnQZCGQ ztT&(>-mJ@EtBon~>^o)%eu0+n+ltSR`Dw1M;s^Q8w}6u!&DD4Kt&`(S@&9ElmwS|4 z?p1QR&xWSz1>?Q3(BCE1)T^F|$#BGb89!mXNmmp)%nVEVKF;!*s9tD`t;mh(gD#Ks zeW>O9pp_KUM?RPl1O9Isf3K43eU{A1ACp_4+fmEm2TUopN$}HLeXB0rEYFxN0{u(6 zyzQgP+rFy2?Z*$~wtro@V|*~n1%I39_#CC;b96jDHCH8qq|ZZ?KoC-Ku<#jBAL4qju#x4Fu9;gcQ7YJuOna)$95!aZHr z*Yi|;U9Rfu`E~V`pZSJ~X3($D z`SBrkS0EjjDKdnnK7B-mtIGw(%B0&(m5beVx!6O#&D90`M$*Z64~zd3bUXcaEZ&R< zc5osdJL&p{w~fjFw0Jz&p5Qzk=n6W2`T9HPj#T-?N9*gu9TEClbi8-6F*EYoR`6ff z`Iuu4C91e&f%%9B;$!?6&+UZ%23^mOQS`@#gyhTgZZCA$A|>TxUMyVVcM$yDI^XZK zIZgj8U+{r+qD2+|A5-PxELASf<_G2Y9QiiO1xYMlyc{W-e#&b{;WJ0e^+YAtW&AW( zPYT6r+nxDB|06Bmo2*1VjBl?4Kl#Ji>`*~@2yvY4^_Fnwdfc&sxA79yTafe^J^Fw~ zdO9k4Dp@i5hsUF*qoSt{hK9w1+&*dJr&O5=)f1)ZXyv9tO+_g<#)V2t+=c2(+=Yrv z+=VKQ=Im9d*A(%F1x9sVh00BFL|drgD9hlxn1K)lt3stF9xLiMaTlsO%4P5X>yg@x zc9isDJC^!0oT=W#<4H{??n0#}?n3n^?m|UK$H%Ks8?vdRN@P<Pl=3zx*-!N;Oft17Z5w>a7A~qzaRF0{vN549 zrCCZnqvmA9`m|+2eaU*E)?_13-AN~0HBzvLQKG`+=e3-rk)noVT_jP|iLB_P>@2L8 z9n~URN~s*#;He^63-u&j{vj-0C#fq7Y}A=dhCe`AQboc;s;1&nRkDnzFe!_YJJll{ zMb1CrXpQ`Z^H0^=kSt6+J?0GZjaYsdecRhVX zHw@`R-S8gJi*D%2TT7BTkclLcNs;+0<1k7G>W480s)sQLYKJigDu>2Fm{K?NkSwOI zcq8hsOnlLW@mDU?65}pZ6$jsRVw|Wc#vG_9#vG_84(=28MKw`$u$v{p_%U82iBu9} z4%8824pb3i4%85hgCvm(Vmyh|65|P?su*{nz8LpKrIF<);p|Z#R|$toV=Q3mj4=nQ zjNl0+@UxJ#5-v5z!JBNVg%j1rdOB*4gR3l^NQbIpEC6bb@YoySPyKQ5{kT7Bk6zw& z^TiuXJc<`$lqhp=@kCRZME*2~eSz1@0O~wa$MpO((w44AQQ?g9q|O5m#`vJeI2~P z=Dd_FYOkQ`kED`1EMJ4^bKSoBpsCKrnNp=4JcKfd@}Ocn_&_YE@_x{0tJH1lXsO&r zk|WWgYRhoK?4y1g51C4?w2#fs{`K`w$^eyIBX@D2j_dh&m=?NiU3sO(8xN35@8GkN z*@F@3Q1>0T7*Px693jiW0prGp8nK6~;il9FPVG1zI5lLrKraqU9~ET`Q{Wt}&QzAi zjSux^6Q2h8h>)o`8~KO>_2zgys64Ns6jGHQTTiP{THnluV><9dn>+9S@B9bv!UC*>IT>5hqn`BOg272TfGC)V{sRt~8z6DMTIJRJh4>Um0ojL zyw4f51e<_8-t;{QU>0b8djcHSzsnsBPT8b)QM&Vz;qZl6Z*|nom&AjCZ6uS~^-g(jA%dEAU^XXL_Lg4}>4o;Vg38?+soB zny+ST-qLylcWb@{oi2Etirs6#aE~8$wP06LPw+bIcN~iFGpl;!;6;m^FChAPz6S2d z*%(jWT11Ob$A3uikFb%!m~h9l=r-8Qs>yZCU+8L9>CQImP?!!+?utb_19`1HgHqU% z@eSUGli(mWEQp)Ep#`CitaM`JX!4Mw+6G7)Z0y%J1hxEFkL<^M4_>U~kz zWnjxfMcflX0%a_Gr(EVAT*1jc-f(`R$pKF7MOSY}qTDLCy+tNMi7Ku)BK6Bv`c(!Z z?M*I1Y%U8HwNxWYU@2eA-j(L0VO)DO+`Z&^$2j-sOr@8tie$>-qPln)A09Af& z7s`engBR>}A~_N;9eulXFG7dLnpV^W8nkMgc~961@WOxq$#g3WOx_{LlosmCvi`;f z0~_}$&jMG>2(Jp`m#pl7-mrKCMl;33@#9t)`O3@IaWOGO>&d+$7V;n{yYc^~Re5!v zRXcC9;{HE-l@*G;-v8I(9CwDfuikTTYSh69B?}pse*i&da3>}%iNM`HFTw{{<0^>s zSOrmTYe`la>u`FrY%T)(D+uwtf~K6ZFx?tFgEe&a3_O>GlNA(s zYh^p6NuB9$t!xiiLeM+aNjM>;+*Mq7B7=g|Zd)VJnf5X-k}t<8u=q`0bdBERl?r|c zU$|F8j;Kw?X7gy~APHcgw%;>*a6T=IGuL5q&COwC`{p_WQ>j$XPozrQ8O~U9=G}SO zX2n^qCBoxcXF~;-dx>y{wl|AjXyL+ivJVDVo8h%jePoU4j$uKNDONd_7}7EBtqq<1t*oI`0M)=sZYJMYLb4lNgoNPW90RR zOh%X5gl_ z-D8i>s*>Gk|MFTl+V_~jf!Y(_?abL-?XjoM#WAPWgBVS|6_gg~ov5@m=F?N4IY`o9 z>_i01xOEIWlH7`T7-I_AX2l%XWElsUMqrB-b6|s|S&#sYl&~YrQCBW04TW38#u~f_ z3D=qGOgpaJ;H@w3tc9k<(1b_XrLKPy>A>7Rbuk-tlr9Trk_AvKU&0=oVGOv*0y@w0 zmK4#GC0&*HXVEaUmAW-XJ3dE8&B;m-_k0R#I;0dMT`^Mea5`F4>8P?AmvEC%5eq>{ zu|-(4sxsPQkLM#z2`4~|u{>eZWJ5Ozqk}2=iks$1Ne4f|Pey87Du)gsxD40^hW8hz%hh&~l(HjpldgG}lw&awL;^_z#r**1qh;SCrX&sDKbZS1%VB{p1 zIg_?f$@Qzi>j8;ZoQRx3`>M2SVw}N4++wcL^#QA%mwo2uH$dx_rxN_8fHMfbARI7U zc!2|e64|&Fl6t{L%0gl4-6&%>AuP6|)tG-IGzxoqRwOcSBTm1$7 zDezYz`0Eh-O$h!r1b-KTzYoDbgy0`T@J|FqVlr<(rHqB#Wc9y8g8vbM7Kl^`{M{AB zpF@hj092_Ol2oB^ZRo!_rh~+rx-d_T|Njc+Qn-x!B2`EJX5624iwhVmr$k8XR`^>+ zABIOqkQQ{)<*#E$Y?VHo!I?OV{tYx63L20IV=g?{7Mo9TugYRLR8Qp$DG8?unoz+) zGX+w00aI{1Zwy`Y53<*FbSgT{D!b2Q0RmfEeN&nhMkpCP&BzF0CN(-_2vY?lbiNSc zl-YY2g!6JT`AQW2$N@R3p42Ul?N!}^8i2Z`hLgZwfG9!-U|nWl!E*@9tuV!by7PE} zmMep=$s%O{{!X(nTXh&ARX2+CwP*SS;+%6 z->2pIzDc9VleV}#>Ea9?;Cju)Q&~VDV|7B>wCA(I^9Yf#JiBP_9^@e}=y70o3{ za0RM|8w?^6GGQz6Q1=|_xk-k@0b+6#uY8>57BP2`l)E-0ry}vzea8nT-lksfsPb&J zaYyFntE56Pp`$8)D(&+X?T3a|(oUQ7QHn;-KcW$jlsDQUG)GFhEB}n~p)EqA&oTXn#aGuc@~bm@hcZ-Va5bA;z~l)`-_khW+16sk;dx! zSo$uX1cjnXSA`Q#CN4`^4bQxRJdN12;L=yCSxLANMZ^LJf*tyl`7#cfqy%^fyVIOUw3$u{_XH4HHP<(`tWk5{JB!f{Z6S6@j9`oq0u^UmoB2X z)v&(C{c&CV3md|}(7^vE>*7CeL-@~Y;Q!Tn{^)ykyQ5lx<*?TUA??N%hEB`KHca%; z5X^beU_=+H4~N?N28BZp4dHzFL9{_)`_K?hVMD`#hsJPzvd(a@w6$UBfrrL${<+R@ zAny$e2Ob*3IWHa#J0yqi?x8O$qRCFG8?)GL3_|fMVkQo1>pm{7$Ixm?vvfsjEe{H% zvsC&t)lhNX0gGJPt#&1~>LNDECCe!;k3R%R2>C{EbCctIRQv|$nvxjgo(y!*0zy~b zdMw{ha@V}bh-)L-fw_c4m*NMPWL$v{dP`usfuSuK?1Jt$K)}Q=$4A~TEgp=qKdL?` zCxG$-xCb96O{qPp7B!XCHE%rXz-lBskA&cMIW7A@y~R9B!Q3x~Y{QG)f=hYDECvC= z$%sLCZP)BK!aKXv%rtmM=cU`^RRuE#{g|`q&(wWgEYq7qmZBR#I(P6o1GlKtECY72 zc&vs#dcbzbD~^Wi)jzeJ7DG*+(`M9 zrsRza#+Q)%RY=shhvR^wl#Vlzs!VVh0m;Ud=`NdBI2K7e*OPmp3}NMZR6>1!-7<8-#y^PU5**Va=P|1OU4SxEIT#CYcv0sWIO8RY*D;cu zeefjxfXAh6;R7BAVGL>>@K_AkJm7I0VDo^-S%A$09?Jo%2Rv4HFDF~g-MnoxYwwm_ zSO(F`i^<^I12Y+BCQNCzTfPQs-FTeFEq`7B-z{&$aeOJ~md``n)1`K|T*jf#bcwU= za)p(Z+p#K-nQ}pKev)IUxYBkBBH;TC?U`wRTZg;xP84;$0Ndq?fRL*WIKvBGOMj049D;}wQc zq?ac*AdF4u;jsBIzoy(BVOlcNj6ee48k| zy20LN(c5bq>}@u^J+T3)8ls2F%{R6evd0-we}&N>%;gI20hr?NQJ{m${Y^>!>ksDa zx&AqW20k%pX4E3>#EXvW?_S*;Sd6Ua@S~;{w+X?K5Zo4^YOJ?p6ODB#)m|L0%J)2= z!*+@`-A=LHJwegz7^9&rLUW>`nIEH}O}C>y_^9z~Whc0D+{|yF9`J1(H!oBCND~`3 zzl1r9DqWR-T~}k{@|`t*e%CcFCrymMjLYfjR`{#=$L1+^HSW@e(x&CWxpcLEt%xh2 z(SBEUiILIpDay|t zp?ho$&62Qwa|EO;=s5zy7$foXN|nEA#4aRyj)1U|#dzVZ#~gt$YYdNb1a%?mIRX`8 z-5dcOk-qhqBUnRtoFk|UPtOsoExh%ZBUnRtoFk|UPtOsoExh%ZBUnRtoFk|UPtOso zExh%ZBUnRtoFk|UPtOsoExh%ZBUnRtoFk|UPtOsA;YH>M=(yf<1d3P(AhTq2Dd;(Z zHS;gj4d6I0H{KkC@Gms**K-7G=09&k_|I$LujdFt{*f^?9Sh6R#?=LZHqVngmDD&z z%`I|{zhhuBU~DMiNQ=gHbq({E63Bo5qvm)b>6vKq+?8THWxTWu z85&(KvbtDIY2g3&57(Iv4DQAYW4yUHl`rtn5YC5xTxU4*HZ&Y~Xbk78_2G0GS-2Hy zkA0Gsb=6%`7IYU!81m!il`4N#?GX~KR}daYub?x+TMxZLm^Fq+y@IGnh+3~uA=c>? zI=uDh=hqM(`}w-?B9RL31lKw>N&A<)vL5}sgr~c3!djl}=j+0Y5UnY^_&hl#=u}&& z%et%`ts%UI(8kHXNPAB%>)r1vVx1sqkR%ei-zD78z6!x|#D9J3m-WyPjPAEoFw$>D z+E?+$wYm)oM=$QtbC?`mk0asK%d1cq$eQ#BvcU6VDoeruexe#A6#&b3q`jl#dbf8% z+`wM9cZ$8pDZ-y4$9!G%rGFokCY#}u6KP?#0>%H`lbS?)8E9)`j$^c z+`wO#&yfH2ru}h?-57t*+SDz!^SiMtYX_rOVvbSvz~XF$a=F2{;Jq@tbT4I*_r&P7 zRduDJ6V0Bly841sU=^OdrRvFK^&Qsf%8G(JyH9~A1G77#-JJ=A^Dmf|Tj!ce_hw1i z=ghdcUPp6BvLjW*JF%Dx#e6L%A8=rYF?4a6AM27^`~VX?nE3B@NAE=Pa=D)J5gAMX zaEQ-&pQN*cP8;Uv4>p{Hh4PCM8-SSe&ue9M9G82xKveT{~ha545BdG`Nt`R_p@$NCpew z%-r}th@tV%;I?5hfX7e= z=a}%k#cMe8qAzI2W4tE3=t&|s_#Fa`h4ypKrHxE@?=ZaP zq#(1+#nq5w@G^@+RG6=>M{s;&$B4NH*-AT#)gvtazX6PGgDib1RpRh26kcFLc~<9) z{@`rxoAX46H*LPcz%Mp!`GJAwx?7xV&KbGRv8X4~2BNUuq}CPrc%v8K$_kbw7920Y zof2#+bdggljN*zl9#g^+QzIa1NC1gQU^!+iEyRig>O0ylLF8 zdXHmoX*X2-CF=X2tu8J?U5zB+RJV357QSo0KqQO5WK6l5$++3}bEb)#emD@a&5S;T zHobf+=+D8OU`KFCy!b0g=S&Fn*8&+iO58M6@c_0?(!7bB!+qagk+MUvLN!$cY$Lg@ zcABK4_#2>cL9qmu!;!mU6PDX#-yrW;6X)V@C1Ch5VViuxla2CL(Lqf8Ah&q_4y0Zp z_`ULB`ayNZRgl3S7$Bo6tFfPC$wONn(LX)&6b~elEMq*I=JoOtHun`EPo?~5i3@RY zUq(P>GI@pbI-bcHMYq3^(-cR&)MLKrt?Ecsni#GsUwVyoPgA~-BVLs@EVQHOUe1J| zca&`s%7VU|c)g5%EUSptRoO==8AkWYcA$`mWGG14LtDRB_H@WUeibTK<#c$gJM>;ai*_kh6CV=a-jM&?68&T3-@j_+0<W8P;-sMvf7l|8d8dvG_N8>rrFnnHWy>HT= zw>qI>n*zLukAaFRZ(P&L3dA%(c-be4fE5UmI8FhO!*^mRmpkBqnvFB~A`fh1`{Jf=}kF$sU~r;S08MaXsc7&72@=Jk1jk1*O18XJUT|_ zf<>J}%!*!mPsAX4B9C$Q9Oz|EnRP0c#%c9k+7Sv|94LfxT<5FZaSd=q}W-eb~U-;(y$T|ni)mz*k^j&Etp0$q~jbD@}KhR+5u9h!{8 z3EE-6I2;Ox+B4i^GQ8J%a84M1I3gvSTZ{wlToi}AargkS)|_!S0xrx#oPD2>?m>(| zEz1iV<2ww4{qD|Un3G`6g}Dp{ZI5#=%rh|Ghr!_p2YnBcgS>~C3bQ55&M?FK;imu` zp6*gy16cIY<_k81~;Ww&dGf}!|?c9>=yF3=7$jl=2MVPoU4R67)n z!@k;K&^T-l2c3Oe0`&68zC3e}#myAC(p09-N*G(bBr#Tg{{W$8@&|zHU2eYyVsf^b z`H*(7X}&q+d_6h$A$pS;Jr*oD*cveh@UAeWgA4ezS-nIvw1olfwFGJ9j`2`D4%p!$ z4mKljN1I7qC&0Cd$mTcBp$QXPB5;7tF!?UPwK1{MxK%T;rSRI2$;InnVlxYeRve1N za>ea7CMG+Q$vPStTex~OBU}7D?O;pW{~#D$41NXBW)|KLhumy-snTTQ!)jlEv8iNR zpxN94FpMCooiO3vnSPieOld1qElXz>=&lQP=>*zLTuX~-GlihEmttSqxiK3sh3u3j zk=m4@(iGZEbW5GuZ;Sq-x1!#A2s)}WRJ%W+sdzS;W!r(L&_ZJh1|#uS+aD|f%llzg zv9O^!odNTA7`8+en6JR#V7hZK4EB3E!x-P;T|QxqZXD1#2!eM}F>*~qc$k)eJCsqt zz))AI58-|d-jeyHnc*i1^a6Mg!00m^?8x&`Yvh?2!YiBP*)r6nfV}2;is5;T;dvN& zuCC`f&=Ak;{M*1#aZAqGQvpqL`m%}K$SEjI+F@iXz{77_2X|zag%cwk7EX>}#=#kW z)H<}znXFi}jIeMjxOKzq(``aOd&f)usE#Y?8pQXVppbiD9pj@qy^yfhHuZv zyOumZ@;$)Ab1ZrP$XgaUF!BQn7e?M7VVfnKY1mC0`KG0sIr2QIerX*x9%0Q;5h#v4 zZQ;R@CrS7f{2+s=Ku89&hmj0^i9jE6`kMs$0X#!s0KlUJCIPsIz+?blATR~MX9)PM zfUXiK4d_CFGJtR`AFyqJP7|md&~XBF06JWt34jg|s1wlc0%ZZQhe`TffVL8-8_*!2 z(d{SH6~cT&fk~M1+%nW!>O^w?8}&t!`)dHBSJrcAtQxK<#z|9*3%VHJX;^)p0ILRj zn90@f)|AmZ*UiCZPEvC? z$Z)`BJ!kZH^&A>AXPObwOcR-nb>_4hR;;@stG`2}qg!R`B-5BVk#uEBUE-DXNW{#G z5k}9c=g}Cira7Hxl7@VhkxfH0OM@m)@qBRsT&4}R;VO(w=@=Hq(vb|Nw2)zx4j6s0 zK7ht@ZQJSOP!c1bOlgwv$&Ge(nFNk5wxAjhxy}wK9Ah$G&!iZMw)t1!SHQ%ax$xo#hZFE9c6S7a{Iw5hREKdiUfEmb3NnFw&qH_KaL=5|9rW_K#pH%NgF+ zP!;C%3d4bsO|8?=)M0CxHZ()z7QU!Wa>5rcn%cAT*{_B(06BD8;scI-nn_={=3*2brF_R76N z%gHM@3oT1lo@u?64p@0kXxU}u)gjsNN^~lkd#SYYJE3LDN(^`nCcE;Ikb&8q&$0Dg zC=v*W{MZHgn0z!b(rB_;HNj;Cog(ZS;_U@g!`-V`04crZW?~29^Fs$6hY^28YY{8wBHkY zpF})~ddZ`Y-1P}{psnxD2UtTtu zfo_{$$h&;9xcUvZ0`X$G@1^p7XL1qd4vta}w6-T&T5oE_6>_+LPSzZ$_kT>UPvZ8?d;q;VctzLMZdvv>;V3!vkw=F`!pFn!0Fa5-;P(qTa+JXWM-;stUz z2@~?D8i(Vy-7-odUN3-8B%Wt^{tNyppepWDv@U6e03YmeI7Q&*{N}wnF)xVc;1w zess+^r2$7rL=z@cIlogKDssBqRFTosf>5z)xsu@qnDoT$l5*^5nZ|op?gLCBf>*03 zn6ZeJgL9Q^Pe4L-Irw6<9EkfG$^mg;nX$OhhPd$#yPc7@{Bw)XB6xhg>S@4Y55?*Hl=%XBbyUFZAk}I)1kVV;F@S0< z3PkKiP@ZHJRxO`l7Q97v3S>%C-3s{!7{MfidvVMVI|H~}>jqC@wN}qv^XgfK8T^8A zlJPm`ha@er(K*(+@ai&2^?iHT<|I~7)iA(T7w#dcDC@4g&4xOOx)a>QrD3&BJA!rE zbaLXB-CWJ3^B)i$DUR4o!TUk*2z0+j?T(y6p{Hvyk1H?LWcL8}j(i2OtEqJ7m@1us zJs~rhWX7a-5f|u#%2TWSso{@ujzC`+iXPc*b6VUSmf!+>x?8$hioXPV z?AK)7L*G7ovhoul_%#Uh{Q9sKWCZ&wi(QMyXn4Pehk>Dvmf%9fK;V2xviumnZ^I0?!Q*fWKPtLsv_b<>musrj=2VG5zqpVs zT`R8ZUWopSf?PHHGPoPE!x`u>r}~Wx!h*}aa8aqL_26lP;$M&)lND$NSrk>!cO1-? z=ooq`LEi<#lw(55qFE{u)&wmcIm)w2t8)v9{rfdGl&hIupUdtXojh{uRaq) zx(9PH?o|PmwiELttDNe&rc}G?|CR_100QR6>Dz^ z@PbgXHMj-^)9FeSkUZ>4qg!wVoQhn$L|VhJvxzIoUg@4$T&9X)PcwCFPu`qf&a@}g z8P)uvpa(p#+oysyC^6LHNg2Xz8uCpB*C3dMs$hld>FVAr(Sf*@{~fem1sQ4oI zLWH>C}M0@Mp z!?DvLr!V#3JtsJL?p(n5>-zI+_Gj2!hm7_oZrb7%zY7Q1^*R^5CXy#DLSFT+%A%>; z7WXgIwNbhEM(!Nfja=LCo#3Ijdj196IJ{t=o|N?2d%l$u1t_AgbEimkPFfPv5Eyop z>Ue(Xo(w2$FOn(DY!mln@g>RtvD^(p$fV}(4Uw(Ns|}}eX+L&SgqQYX=}EF(lHu>D z1>+UJFHBV1-ZuP&wI$nJTV0pxxbwJ)j+59lH#(1>WKGwQ;se&6VzymPlh|Gz?>xOx zQ(n^V9NF}Ew<|E~1@@#l=wmrfk+Rf_(xH`hTtN(^*>R#XY)ajB5>+bdx1Ff^eh9on znh+be*9KlKZDO%&5 zXeAu>XVPSj+lHpbX+zQ5+txD>9#Q_u;0~}=GYc|$XC87s2X`zu7peNs0coh1VBB~g zyv#0n!9Dy=Qvy^3XRvvgw`|i6FSr@VDbm+KB4}VZnc?(d5BhCDsD>_?;*Di+A|vJ0 zoWj8nNQYsjOwALUznN)Uh*SKv{;SCA<8h)=JalxuT&b;q7-T(3@ltd>Kx<9TRZOwG0EsOiE-vV?CCJp z_8iP}I~P;tUC!!>$PGjUQ*y~nmo7$l2Ln8+pT?bvsj+u~S2{Mj3?E)*R6YZQzsu5B zs{|B9a2lHWjFY0u9+Kxkp07f!1QijQDhvnDc_ynj0FSG|ofcCj5G4oG;<%4?4!W&$ zaz^DkkW5B^{G#Dxjjn!@aI(VB3MQh81u~B1r{lIBf~l+N>f##Omr;R=uRvVq)5S^U z7iLn*BfF&8FPp&GA5jUqlwr%fdxaAp0rpL#Ij-lxU$RV%@ROyTp_yVlkv@Z635NHo zlf)4L+aOS-Dot{QPm6T5`A8+mV}1cU)z!%Y&aplS^*uS(iRO)ZJJol(Mo$)KWj#4O zfQn;+r<&T1%wud@16E}=4Wajhyt2i;%#sAog0v=!Z$Ki8(x?z@P9z{Vmrk}8Uxz#9 zJ|a`XZZgxVMgr-sbkU9kWB`yJn#y4Sw1Oi|1UQipt?Q+oomQD$5S_ofE!W+SLjrBt z_8YpJl^;BJ5)n(b9XfnFh5&7L^7$29J|4#4x5x-8`MII)Y{%qq_lih6!OhN5sm^^v zsmp5>tP%~1MsN$H;|v--c{(x>BYo#=n5dq73+!7U3tojW?$nd7g8OCCo=J4mxI5{O zh;4hT-@RxTlp;~G(Yv!mA)H3D3*0(jN;^SK+65}wj=gQA?ZAeK#(f>q=)0vExCIVk zKBEU5q3cz_NY2z0-$d@s_IRqRt&}X!M?mMWVli&qPK5o}?6)}E#JK%|l0;eA1>LF4 z%y16B8^(MI(_r3JzV$e|*PD&t#!hK%rU?A-efY_>58sPVzJ2(1e0tl5KaWpe`|zjm zNwg1RNe#EuO^Hs$@QH!G$T6ZwlG{s1MI=Q+x3s{ENooxIW}}sc(9WgM*p{@Vf-?cn z>P*&-XGnjARHTc|%X_j_%A~NOrF;q;< z7w{AO51QI4_L*YxbvuMzJsY5Emz$73SfgbAu!^QVbWq~uckmKiiA9lM5t_1O@Jq~K z1}`9zZ7o3sJlb3PmN2GzBNyW2%zznw6hEof-lKzCS*BA{RM~b@Ek!&EjA^4!0N)}{ zSIm%ZBEM{r8Y#BOJLcVqlme7LST00hnwhppPmjeU9GZm0@E_bRVM*`Dc7+4Lb~h!{ zU%^uh)`pK|Kzb6AR=VOHVyGT6Hf4EjNAz|?RmS`f6hdc-h!t+c?Sb#71*ax;^~^0) z82!OpEzop57YL>vvePUk_GYvA@Ln0ElPq2r#BVeWYyz8OD>0QD%%PU9W59@%Q4 zbgny7%4XBqOhU@bP1y{ZbIb@Y%eI_~xmc#~r=*#lZ6ys_SEHoR)Ah?17XJ*V@w~m1 zO=Vkyi;z}lxKCnnF=Nq|O~u)?X&$OiQS`q-+Ej$lwbaqKk3;_y=(CCVBru~sk)9ds zm56wgicG1Sj;x7S%H*#K5mgt{X;{uAqWB|}Z5{O^V~8Jy2&xU)6s|UBJ!>t#6Jkn& zQHW@&x(%z3*M;#uvP%LNL?n!#3L+6)#MsLGt%~h;wEOvVKhP#^nA5^c-34?%D0Eko zg>Ho{S+D|CCBRGONfpE5Ta0;?j*9uoVA9p0krhs@bakj5k`uEN3n*oYInxx-G<3EC z+@bw7O3g5$;yTJ9jqQ2jDLHZnylTghR{;0keyls+l&=-3! zZ9D_N)E7_APH;UCQjZY@wfJLO;7j{z#2ILt2D&@5omZW>LU?C$-Cd=8Hk<8&=gw@` z_2TQ+Y!@1tu51?xbtChm?1XGq%MnS-DK(qX-J(jZj*$z2QW;biIFq zxDB>fcgJ+YlgiTK&y}qTs1}`6?J~_zKHn_rAp5ATP$;lu!nrNdCRD|xdOpUa$QuQ+ z)R-w@Aj{b~nJ<(@N3PxXqHmMt-^Y;Eu^pgDs??QZVt zhzY7GQGVNDnMAKVU^Fw=HvC0}VJk6tN%?8aTC}%f`Z17Z<1cVknQ|`>4iK#}t0=`v zw`+d|%|bP;;B_w_}b4Mvk7|S<1;Okt&GNR_9GU3p3GhnC=M_XN#T9#_uSU?p> zbd$hiYx5-vzqFm_LMsVV@*rK|=E=x4xEK{xvR=vNVe!+dJj{gJ#yb``{c^1;^HP8Q zz~<`bXlyb0CJw)c1J3TUhrm4ftzcQ&AVooAsRi-Vn37NMzol_MY9@9@(b44aeBDv-xUEN6_IJ-h6nvrS6@ui|c zs9BmNuSStRvW%;0nki>^Fo!T%yr|XTQOszbhP4h(1xlBKH%=v3u>LVb8@xuTLo-5i zi{jWS^Dhu5f}cAV#Z`@sC_Kl(eonM~GGlkfOz;ymdV9D0H&(Cx@BsDuKNxgH-{+juv%7;GP{~iL<1&H|W5dZJr9l+!C zk-G!1ZAc=o>Ww;|Z_3PX7(7zlKUz74gQI+Wa@jU+=?>197lD+ORt$0 zbORicGc8is6Y?1+Ew9_Oq~rxGwZ%k;{h{`bGjDkP9N%F_k4*BzA;`~Kiy07DGLB+ELxr%?$95 zm#T9RpY5fD+MPO7p2!$2jmC&_RB1+^&NwYpapFhCX;QL+IrvB@lTvjK(KPomgpWo; zF#K;+{CgCCeiZ-SWCf=TBm8?)bq-Pf1LS|yc>F)7_*WEveiZ-yWaapnl=@S34pIJ7 z$p7d#e^t&tulRpYl?i@Ko}CABoo5z|^4y3#kE!R0B`62?`B3J6P(1n3JkL!~B%Bsd zjO*-C?$gQr*eLg~ZeX_}`D56}a>kE|^L=4CvtX3##^j1ad(pD1nNV*_W(f=ocv)eW^N!DF4~ye?pwUiu0|CKSpPa zGe0KIheGMpakgNT=Vs)2Vw`8fsUh!fQ#_&aktaWjr;iJ}-iBtY_S4yx!pF4!IL<1p zXx*Ns+vWcP4^ezmfdz#+QlGbE?3P7i$GlhXrJTa}>HBHaT`k-}DGJ0I@2$CA{8UZ? zMrF>sV--WqAz zK&-|pl~ZDJp-tqXWT(Or$`FY9&Hp8RWWP#1Afp5&qD@pnwTg;a`W4xjDs%sq`z0m z;p3qkUXJFOxUWGD#D#L8tw9b`$CblRlpM}pmmId$nP$qdlmoYNNi1C2bhvEy?o;Wx zG)6;Pgl2C=b6Jdrwg}Dristed4Q-7ySHx&&i_kov_*@yIp-r{1Tw8^_o2v}oiM$); zRhcj}RE)bbxV4+ZjL4Nj%{S(9UQu~fdFjc0Sy);{8*?sw$Vs2HhPkN*_fhpgJX0d3 zSHl>SIyAKNOB$>WSla1;X^<*0#2dIYl*9oQMqc*cTy^5Y{>2N^rQYNe{B|X=FS68@ z?8R@A%^7N!v`lh}@;(mu2l=koE?~&N@L8{%df90O_!csszj*QbJp_f@D?$Yq{8%Tr zk3#ix#pBW5j_!kAGt&Ln)3E=qqv5lAs=rpUR`u+3k+s&3JXA5!8Kt;Kl%NC7oo)?m%*MAMhqP7`Z6- zHMA%6BZSfi(5CBA*sf*;U*8Edt4`qdb+soLXvW&UV^v(gC~=iM9FFMJ6>*Q=1<845 z-3AdCTy9!cDQoLHN2=azc|?VM7x<`oBXsjQ*Htb46G+L}_aV0`@ot5`l5&=5$_pc`YxVprCMSeXjGk8abGnK(7G)~ejwaAa7WC=id5yRwJ#@gA8)!%#*Q z2~0$>ZiaR>v_Z8uMFtz*Q07pf0` zc3pLDzO8dg7uEF#n}8$X(x$^@JE>`Y6r-W7k>>3f4Q-7yKaSDR7NL1k$?mNf4Q+#H zoiWHrqZE5pIyi%Oq9=G635HXm$~dFnX0&)sJcD*SnyX}wv6Att%Vv}F91`}FgoS0) zA0d$_MC_R4(t(-yZVt08%x*9Tz#IW{0t~tynV`TH4Ci{7n_=#Oc^u|BnD4@%iFJMo z^E((UbvZ7U4clRQVWzQg*gi56d3H^aXt=n70hR0Zijgg=4qI3 z!mNb(5zH@P{u}0BFe%j6E||$MMHt>pxIN4sFbBabfmsGK2D2On`j+!47~W=ucE-U0 zOXuq_--p2#aOY<*e}MT13@-9^CcyN=@a9eK$sU2(6=r{!!(p&V(;0=~-IABWd;;bs zn7d&fgZV1Vi!g7%yaV%Fn7_d^Aw%0>@-S0jX2T4_>;$t9%pw?Gn#R`S9GHt>u7SA` z=1!Q0VV;5c7R;+KKZe2KcIVG9t6^GE?0R5)m_e91F!Nycgy98rAB8y?=3_7yz^s7z z3=D1ta2|lc_DBZ@dYzYHuw~1^@p$J?F#m+X@))+~;3zc=rV5=cV77zV9R|1VJ4eEt z2!la|a~{m)FrS3E1qKb3gZAF}8qD`#egN|>%n0dFRVA`05; z2{sFO8NsB0HG+7~8w6#7c(5Db2?TMyKfogh;)YUy2N28%xEsMX0k=p1y zf_(zsPY{(61lX+M)CL6nG{H#%V!-3nCJTtG3>?|3ogO}upf9c`5iAI}l;B1JVwT0J zO%-qf!D#~GQhld3UBImfq6I*}n-H8SAXW>U+QtHQ6U0rhAZQ`DiGWxjc4~tH{tv;D zfWIO*OF(RWc51T)#F-GMHYDH+1UD7%%LLKvfbT;DHy7{@f?Ei91Hml?yqe%v0$xZE z2Ug(iY=T=0cq+k<2zWHXVF4Es#9fl0-J9TC0p}A$TL;&V5ZqS4Sp>Hea3g}-3z#Fg zgMb-=^8{qSSKCp*zoI>=%@+`_5;(P;1pEoXodtZI;4T7whaehQ1pF+)-2{A;;O+w6 zMQ{%RKTmLhfY%Y+Q$V~s@6`4Z@LYm>3wS!geFQv?;JyO#Hp<$50`5l;tvUkcjj^=@ z1e{CoKmj);c#we82_7t9AHhQe>>zlkfF8kx0=|dFzP3of-xFLc;JXA56YvKF(UlHS-JcHn|0-i|lI03=k zkwXUQVWiNhogl7|vQq;U0!B_dwPgaLv^lkt1Vo8_Zt0l!M{3IV@G@Ja!n zA-F=ohY4OK;GG1o7Vt)b*9dqG!D|J)h~RYso?ioB zfD;HlCSZc#;{swr#HpbMBVerXI<+qe_%nh}3iw|HpAry5c&GNXfL|y0WdXlL@EHN` zBlr~ozd-O=0Y63Xs{&p@@HqjO6GSV5ano6~ugmwe+Vk=~q4o{=F0Fl2z6)zF$alZm zx8%Ef?c4I5SNo29hifm&ceC1eI&Q#;XdGh3_GgUfqo-!rsO!ZEj zaid^s6hUQAA<}*th`dQDRX>Hu_?alefixAO&2Nh$nk=H-Z;v8ei|Ft>7=jg$XE77} z2?~=_qDxpzr{778jaakAWc@5KU6vb~cpbAYze`~>x0JtmlmhF zF~j~xasxRl&{-C-jX&HskhAifZ4q<*ZK8-Fix~0e_T_U{nwwh0w*E*Iv6)3|=WiQD zY;F*n3#S zA^yQYOfiTB7ICP52oUI`b1*X@i7JFI5B7b2NvA0Dm_7_DF`&h(b{^BTN zUyC^0KP-ya&mxZS504`Dw}>PCBcg}{EMkd&WE63rMJ)A~L=gvB#7F(5QN+O(ag_hj zDB=){INCodia69Fj`5Ff1)6CaX-=`PV$!tLYL|#7ICtFk|1=cUTP7i_$Noh_^3sk>Yow~ z<0y*={8M}TA|2q-7IT^(pk-*YHQ^YGIo&^vm_8$}V=ZRXKOLCXoUg0ZaTZhdM^!i) zbG*fz;g`t`cUf!H2^KZxpP^A&%qLpZnf_Q*1j{VqZ2wGD6tdHPPO_+T{EtmxLue|| z$re-b&l*4vgzL1G8gPomoa>*hFq+$`7E|@lAtqzE1r}5DE5KOw^E8V%&p%fXn%C(D zQCN<#hF=BF>Yt+)cRq17%Awx`Rkp|rh&(Tv=Vw^l$AJ^hQS_KaUr02WN6}|m^hHFI zy`Xj3{Fp^wOf*A?`aa8|FCm&CMA2tk^rb{IgedwPi@uC#h7b+AV$qiq%@Cr#&$Va{ zD+>%EimqDpl|(ZH78Be8u5!F)@hgaD5EOZz!JlXGR}s%J2Ba+Myj*VaR};@br0BMp zVtBqKxP}A_g$ykI0*k+vc!moH2=Sc;{|Sq~m3Rh1eAeKvxA@zLzeVsUUTvmL`=lkf zodgU;N~q=VDNAq%2^fqJ*jDk=mf%qmFq~)=`;0|DMl?f-qCacVT-_}&j41jBi++OW zJL}LlS~O>v3SX>4f6k(xB>Jv8^ye-5DWdN-XkB)1vgoIY<_fe#O`~tN=&uufub|m> z=(>N4#XnCx=e@+cF1cT@=og5-UwgOR=dBjMlK2M{K4S;bw^{rv#6Ku_C@VVj+b#N4 zq93Y5-(k_O5&du-`c8{}o#;pE(EpdYFM*S*sP?|Ox2Jpdq%)J5$=aPjLNlENNLYrj zF9|yWA|`+k7Eus#@%98YogTv?0g zpHp>j-Cib%-}n9A%P({L+*9YAI#qS5>eOnk z@Y4)txx2w%jDtC?SY)}o!C#7lpJ6b|-3`7m4*m&)S?+G|O>rt-P9%%ko9Q-VUzl8_Jp}050_}{n0;p-WG2g5N|PYAvo6a1V6cjAHQV`u8tIQTgR z-=)EEnSO=AZvZ(^yjz1}Yxt@S8Z6$UK||IOzGj1lir=may3GbnEz*W1Cyf1k-3Co7 z(tO>ZZ`h#e#rx`lzG;JI6z`WH%&r)Lx7(nZMH>8c%&)}G*tcw0p`-Yq1QvQ@N9m3@ zu(SA39B8E883%S1A2xxpw{%w=*j;=?1AAhzcgKM}#qY*}M(jOtU~lnzCNLKJ?Kp5^ zk<;DCn|Q2zZyc5{K87$@Pdvc>P8>G5h#kk?v}v3yGp2K29N1T6g~w!X9Cm*k)?Z|0 zcf%ft!=@Bj)7du1F+Lav4is6>k>}m9)Q950!6Iupk}=b2^KcwCRAd!*!ybvlrWRSh zAv8(GcjLfmMb>V3)^UX2i^FCVS+(hD#pdy795}Pcij5d!yMHVWn^k13p6=w$_YpR% z`(7s_2+aZZ2%7K1W;5WbX-O~ONyLR@58B^*?YAq--rKIWy)6$jo*iF!E|98 z>~BGpd><|uik*6YA@BeD@56ryv6^kNPq5GCFUpf;q?<-t-lYaf$8_*_*h(CPU1#R`9`Z7{I~1A!e7}s zBKs@(=G3EaDa~(FG<z5YrD*u((7Z|OC>~? zVc$$2Y2xzg_WjDcpm~j04U@Q-*T+Hr<;wFX<-sQ5Ucbth5E}tdC-(HKe|CfTVuI%S z)qmmB**GSibDCG2)li!n(eGl!g~fc9cMhMcfeU%v@9Ue~j8p0YzN`FBztj;E?1%$% zZ@T=DAo?)hBDun?4%s{ z=F}HM!}KRKd;<;71UVMzyNBru!krM6#Mg?>{iq4YYA$JYaJ2HGTtw7sXFgOM5RPIH)T)O_H+O|j7t_~OV9_kslZ?r6Xdu}Ljk z*$wR;I@qus6@-S4h9%8+?D%}0X+9c}>M(XO4jb@GQxIOs;efN!3_zk7&!FCY0=7p> z-4&J4l2Mzm9fW>3fjomG_rq@dz%;~qdl1%x_YfO-d3ss~)ZyW%8qziEr?4bkayGPR z2=DSk(+Y?%9L5v=4Ru?wqJ;t9gk~zlc8hE%iSt9#y40}|YuE%#*d#AeIAMk)tgbkF ztB9(%4B#ki%g5LJ48z?I*eje3Plq13Y9pzpRTb3hV{vz*^WQ2srq3F7BWX$#+jvR<@$m_@!<|{=O$Lj9Dj;xGyI>OD7chc7Cxpxch z%oesbOhPEhJdQmbJ_vvZSYoyXVZ;m@PJa>?w_V5*w!MEv(~-2Rd~@2~0i}5{MZ-7K zu55)oG``B;fJGL;2+@^UUxi4&%BMu(`YMdce5QUHl-0V)dVRFU`FDheb5ZOKoD7lg zb$su7(BH>040yj(cG3hr=O?l81s#Dj4n5_uAUp;ntI_i7d5dDFxHhe{6{63E-KZs9 z=2RdF%Jlb?56FesYn~0y#o3PPi-%94gnG)`8foXETj_4MrqSQtNSUo5+Ril{XfFb9 zXXtys)aO9HJ1=dGxaIUmO4;s?~19_IpAb@xr_T!hQqZYvo19_IVhgd;pvR&)Tdd&#lzq)>! z-Z8>_K-z$6&u46%f{OU=W7yQG4)3rP;@-oqGTyn+>%onr@8lp{j-~@;CF(^N^Bb~l zq2q!n26MH=Kx?>K$QR_v-;+G~hvdmZ$&&#%f+nQhM@}t>bBcb}a_EE4V)9;jUziBn zu}q14PL|I@z;6(swrk2@E=FENO8HEh;FXa<xCUuG`khFKPz4|&)vi;)il zV~XQr;}^%N+3*N9qi4g&f&@$oW`8t{Ab>Z6rzykj6}JGF2@#7caZo@k!2|3?hiqd@ z_;e#F+=aGqmz=~CPdBH0ufNHbZ{WQPDZ?I7v>VbI>HQ08x$w%5P%KK#STj8E-Qk;V zjgB*J*a8QZbTZ4qJSBBM5Ri|k{|>wIRbexhlz@Go=FZ z>85h6AL4@)^_znPjI;1qCp?vp`$#?tM>c#!nj;EQ*o|SD$;UXFH!{e~`!zF}AN|l# z{Z={KCXlCbHyQrfB)>3?;V4@S4R1-K#dLLDJ?z=VU>?#)RjL)?q&?I55jc} za1bC#kR1a&s%@@x>VC*nm@&W(zyj-`XpMMQvYUbzf1U{IYcsqsI&nH%T<`Da| zvjbO$l23lPb5m+!Q`C}5Kis7$HL)pb$xGDsaCe3riZ-Rm7=U5_@5cb*F5@6Ey335g zy31?>;nRBBUbtsQNM~-o(^kBD-T>zjzpib}D=<(gKRCRfK$_T`)rjYoYQB_1Tq(01@0!*Eem&%vQQ&Cj582vWeg>Z6zv(`GJ2xb#WE zY9SDnjK%zmbN5jo*A|)b&XiWLz*%i{+>IQtwy+stIxns^B10!=DCfWq;25{~ z99Y(|a9`w$j4b;T&<}AOBe19toARG^@hIr|ecDwJUW9y7Zw!62U)~!i9d%*ACk6%k z#-P#z5`PZ)FdaG;MO8Ecbz@Bje|%@&)^EZh79wu z3%avWh=UK5yCd9F%0Z@17&?H{fA){(U2sFdQiRV#4)IzyMXt^pZMofTLwnT2#B;z{Er=oHVbZ0Zwr_cnq+&PPA9vgVG4+A}++s%jPpxv^tQ92re?~q8Yhc z76dKz!^uvf>3}0nrRk}3Jcue7ES<|{7l#ro@(cOWajX=0v1Nt9@51>Ztfh9$c4 ztwGnmrn>%Kb-j9Hy6#t}>r<+0SEB2SuC9V_p)11@UHR6aYq6=W>s8m!ZcNu*VqJ9| z?*BQ#5>Qq}eG&!?#8noHpX*72h11DbfyC zcTUmp&7r~6BW((w$UAcQmO2ZE2s6!!b4BQI+5ScPQop*3<;Ss`1Mr7X)~Bms_|e%%zVp;d@ysZEM|8p&#gk50wJIDfp7{1+w0c$X z)K$fO-}L6<8R5xqU)a;riOxv={nPUcyUL}}b02?_2UvR(aD3IiOhs`WC~C_H7WOnG zm=iW6IJ+RDOU_#}$533-FLSJSqn7D@pa`7%f1b0I>nIdv5}48J#ihJ`S#(VC9}6zI z-g9*meg?YyT34P{d)XiHOC7B9Cm6LjIua;)Z_+-Y$R3^qv!QIWOM&9puLRy2$hwJX zH?ya3p}L}5FvVNB4&C({lW1Aazc^0Ts3eP{Q;^T#JQtVv16}CHS!ZUWfmfbmb1e~o z`+^`CE3T!d(Vn1pJKE6brF{N?;%(W?gnp(jX!gfSAa?jjNq*?Mz3gR3W`eQs9%r3+ zRC{bJMW8ZXS-&R8>|gMaEOE%LuxZl#2!Q8mJWi*9&*mHLt+|Bw+8y`HhclRFP16K9 zN70;PCd!dUTvly;xln}TU#)%WJ-|9|Uu7BUmNMo(6kRO0C<2(0og4lNo=TDRa%K2y zfL^)JA~$S!b;I!nxxcSsIL?wa6>x8F#SG-;hCf5)D6%%Md?LirNs!ZTu^aB@1d(Fn z^spVzY5h3>`bjFp&)}QX5w-CjtBoI&qT!oEbBod(Y-#BGICFM~0M9u){imu7dbEH5^6`yvBlI$SzN z=20SL2qX(yIIOd>4=a+6uY9?mc1YtoQ1wF`9e$NBo#mCyG#H9L%Bich%*|38Y{j_! z&DDsmZb}@hAqB(Ow6Ezx+GSiZHXmwAmSB^Ys2ul2I_{8}p*YVlrn2>tB{)^~MM$WQ zBloi5W>3VH9`-+wviKT$4D5d(Y*6|FYqccoR1Ar22O8tU@X3h}8k;!^HVWAVNM_6U z1~Ko+=$#nfaATxRG{%QJegDn)h8p90y*@tp6mEV_Yqrm1TT5f|w9lq-T4MySIuS5E zb@FFzmVDg7UY}tv)yc@LqY(+6DdKx>NY zhS9|1c6yTJ%(>#ZOzEG}joB5v1&@rod}sD5^?FP8*L6F_|4+pKQ)#p09t5ZT!4MO3 z15AZ8fn0eJF?N=>_mw(ng&L@F-dxsDn>&#)3-U8?OB(#}8ctO|L;ZpO3GqMWiyyuf zNklz@K(u&%xZGw6M&w1TH7`R`AzMJYvJ#d{Z2`&1%oTW_Tt6K%W@tSoaD!j45`8;E+=8 zzX{(-cRHTydAjvn4|*}3>zUy#I6&umXsacZ$z9q`iQ|- z*-!DeNk66iq48_5WaRXje3Sk#@Xmn_&oU3pT#a9fSP(Lgl8shjYE5BG-0a|C0+CZM z$l}zr3}%YB)|iu3NtxPI9y1Lifuf+yXM8goMX^|&gpnO~$0gG)LHK4UQKOo40PJ|> zcFn6d+5C`hhHpZn^MmW9JgYcNEXhyoMcD~uStHVyAg!0o&#jRDL6v)W9nWs$A=0n% z*_7vqW;{gtRX&^Yytx?@>^3hd~@>B zy~h2BmDa_ zAVwS^o2C>^(1ZqCE0x!dc!&@}i$EE(zOnzfR?1q|+bUU9V%b-wQAwMCX2|29~5E{0T1Y5rFLvIq!eJM+Pj`)$wK#tH2 zl$@HhMsr3a_>qQraYHuFq_to2ATkK~EKQWVf%Cun#XVsdQ9G`A$BDx9t^XXN5a9;%nCG9 zyq~Q*=ZBJq5QL4qvKt(?C}8Mg+ZEUa{qp6ALM%b*3*Vgj@=MXHic?{g#_~R|_@fhi zYAk^bh0;dzH#EbyhV}o`R0e6{ddBtt$51#mVsX74o}yb_A8;)2>;w4Qqz_2#O(#uC z{=1NWHDZTSE@I5H99nWb7+38G}wjf(C`g3Tw{43Z1Xot zvl3X<4}(Q4ZTVH^s&vCW<+)}TH|D%#ciR{Y00sg|jEu82@|L?i-PR4{6YHm$P2IYI z4Jc;=8$^@Au6=0VT<{hjVfQ&{9{g7IIsv4qyg6F!=HZr8U z7#!=FZr6XO`S(tV^+IU58k1d^8r$4$Y?i!!T6z~6_iWG}UVvY-+9g?l z11+Tu)czF*Lo)rVnEp`83X@JrSqZ*HSurdrE54bsO4fb0ZdzCy#1KonZ>+G6HH8(R zy+GZQe|`xg79FFVjTo_8^9B@j_+eIy_Y;w+t>aHy?HvA8e#v>6^9WY?9TiYQ zeHkoYR-Xn{w9wf!+t-`#UC`<0Gc}xBo+%$-X$IhRKZmFQt=Tj zy3|1O+e760(UK6sk_vZ{&dm4d_-kT*A}Wf++@7CkHw_rwv1J>Z4zl5GNJzfziP{;M zFfVlT{%Pj=KzJNv!v6SzTd1A40S+i^Q2fGdaY`~A1paD`O2!L?+)39D(J1?Rl^pxFe53)fW}L96Gs0vT75G z#IG{@)-vwWq0p)56>(<0mRwi#Y0T|acJA`BYq%F)iZcg?iluL?^gbAAcjY~92a2fpUJc_}%puN+8DW(!<6kTz>JB68 zo0OllG=Nq5=8to7<#|qSOs!$Kk8Ph0YDiJuWHdu;bWFO~u7;n1eUy&o<86Gb2K~$gOsf0dGVk)Ib^DQz-7gQu!(i#iN; zGt^(2fe~?(?TDFr80n8YFurK#snzYbQNt$vI zfOZTrCK?&xJDH#|zE~EKXQ&2nEFotR8zBC(@nN8tDg6|+S*mbaSqXa0{#$l1LMwY*h!y;jgEH943B4Ldze;bEI!Wvm{2~*2* zk+6hC#!Z2TRVnV7vu#Q#%k_Qn@x#+m>$LZpWiWdJv!WBz^Vo)U=Yh>AF92N;{WZ88b770sOWY5uADEGaz4l)14KliIr;Gaf; zuL=*Q9TsME;y4)T?CKp~Qi$op3gnjX$}vb9&m?&q?z5SFp1y6He8&JU33NJfEuZ&wMeS4KWrWIi zp)Te~I=IuT6AvMo5lse(!OjAOf|V{1tm(&$kkI2q=L%MjJG-)#M-XqWbS$*!Szqk- zWWEUNEekMT)J;Q=c85H_z0yMgUI&^5*$2TJ(F?1*;zYc%PGNV62Nx~Y7i*YZ(Q%2k zm!7I~D1twY_?3u%P32)k@5`m>qJzm>U#{hBkauY!FYJXrBJ7iO!dyAJ2J}TOJC=jU zU&4<_XHtDU3=7lA0uq%Lb{O(8bgh9Ax6i^ zD1TE=OYdM9=O#cWFee=>%-IABbDF@y9RFLG1A7Z|#BN~@#VyP+wuS%fz#J7@Jcqj$ z<~Y{E9H3g5BTox+NEuX#8T&LHy64dt>DUGXL{_s37K^gsoj`j*l__jRcRYQu`$=c= zX93C(OKx&z=%k?XXJk=`qY=>c@RK!DiEjf9-nQepKf}pt}J)2p%6<7>iuI(zOuXA(pjbHmUUT&5-5$Vf8 zZhmKWAXnK6)a5o=E3I*1Ob5!*9Czu9k-&M;_WE|o3#VC-g(PIC8VE(Wf$a8eAjicP z=3v;u906M1oQwR=yEkX>NBVQ8@Q!R;xiqfhP5maRm&S`kl{u_36M6|p3aau@+ z?S`ZdVq(DhO-XzE04!iF4NJzXW3OZZ9f>&9X8iI3xJIq0ODDnvxZ6lFibHbo&pu`A zQ9Wms6`|hT=9=ce@-&JeyqjfVqr8ilePrFyqGWkQbf$^xINNBE^cFP^@@?iy_AjbO zEEa@TZI0M2wG;)%<0%A(<4C471RQKzn4@S5b9iiFj(aW40j-5OQVpu)s?UW*aO#`^ zyPG6~f0mi?Qy4;RH}HGq?qERNO?kE1a|ei=83++$O5q*^sS_Gr&P^Zcn;e0%`bT{q z%=~rA>X+bzIlyCT8<`7w$0)^0J8kSq;jo}v6%L2PsoedDgOJifXAx5ff@9$n3x~of z1V_TiWidnsev2~M(xhaHY5oe)o7{=1WWfQs>a9E8S}+=wxPeLN+zJW7gx(jTWJN#iK1DnCVVTAZ|Quc3)g6)mpGju8^!8}*0{KsXg@UW$E!sOPl4 zemx?nLx_W3%QVHdHN|EH8&rj-$_PsDVcp9ayl_<+kK%C&IFb}pg-`Kkk-mfYKmiZ3{hD2vX$6X^KL!{L`~Zn!o>V?KB$sD>j&A=YRJ1zU7yob;wo`@ zZj(L`JvJ)6`bs-NHY3jdM@Dum`sLYBjVd~^X+dd|(uGs{=u$y0lLWcgzj(WNG=LAE)YjPGxBZynU!oEgU3Ql7rV0>Or zyH%fkCFH-{NwlP*(6BC_LRoPeW2STu2;04i)s@&f8Yg` z9xh$t#JFBMtq+R5ukXQ$ef{u?MZE4})Z<}$GzZ#Zofi-~zj_G*Md&>4eCM0Ag-RoF`qj%)G<*}9fb-KH zdNz)KF9lX7YhY*ah?J{x3?^M_3{wh?FFX)fHgyb0BIlcaZ^!+c7#DNAdoEHCVvDQ} zhj%xaAY7;(fR3R_FXJ9Ve-PwrP9@>5O4+EqgPVlA{L7kzAL8)uXTuYH_6N$$bCD3A z<~j6-G}0d`^zQCc=BxNLzU=ddN#HDBe*p7OQUIk{uyvCtjzn~+y(4}$C`EL z>Mmrf5b+ZN!PlSfG*!#%!#3-o!Y9B9zMw{=H_Sw-NaTr}>%{mbCwZ)aC_z^rhQm%- zW*Uwc4R=(*q9DHTO(KwUmUJJ&LMuOzMBtNAO#PVilbEXJ=O@WV(92~ryt9+m+PLTw z@Ix)tWMSnKtPq#e&`6WmP4#oYh5KVar{o?q6buf@;TBJryVRR{`U4y352~jxXnu?Q zgB$4&si#*vRDJXqbvbq@j=$*0;~|;#c0St)=fRwH>3MT~d|J;mzNKiM>gboT#d6cX zMr=;$ceV64$NQ?KjSn(yl_L>Rjj7h0?9GG{bxM}ni^{?^@=jU;?Uwh@E)8fyv3>h;JZj($7zt6+B6i25HF7D1bXY;hO!;C+LCElq zI0C$_bcuNrb3Z|Lx*zHn`pn@ssJS;t&BcK@)8hkiz-`-!*R{;P03x$D8Z$+4J5d#U zi@nhd6P=`g;G4Al+9yf*O|vRbW95d*awN_lsj*+W4MjKZKK28WeeBw%y`j3^oaox` z>MHmax-u-$m2XB@G&|Zh6}p=$`)gJ9?u{wCk5Sg<>ju^JD~YZHuC9V_p)11@UHR6a z>)fWg{z7$qXk)tWQK#$0qN{0}rLP!rbZy>OV6m8e`!}qvZeKy9+m!zg^%YD+s;?ko zoWA0}FxeNkL9BZiK{1Wrv}qJO=bIclj@C}9;ZdlDy_r%~Ua=>i1p56I>VT(ttHs4{ zQEoAj*na3HwUgUZaq!KQIrT6!-%8Q&&7s*><=l~?;hWItw^9?d%_Q&`w*7q>a zStHi3@+r#F2QMLRUwQ7T=lKDQtVXO~TxK*2 z{>ydQ!DycR4n>RPcWSh^{7#FGkl*RiiSj!misW}@bdLPaims5~LPvC+0-e#V3Uo#H zD$pJMK!Kj<7Yg)7FDfuG@&_4xVN%quKt9@1fyvSK3iL(G6zGqRQeaASvH}CqdleXr zE>d79`lJF=qnj0&7Tu%3^ymi)%!r;>U}p4B1!hI_2)_vn)f>=9kBz@E{K3hWi#uE5^WLkjE@J*B|D(enx{jb2n>S%i%gQBAqI5;|8fkUD(1rCiaRp3q0rxiFXx>bS0qX!f? zBKnB}Z;t+`z>(1#3cMwnG+ophw$zSpG){yh0i0rM&S<-zDnWq3E!sh2MPa3;R^`AsPKh^C(WV)at(2`P~i^| zf1tt_6Fx=ZO9-!0_)@}a73P=B(FF>BnDA8!UrzW&g|8rdkHY^!_(uw3*4c}GtMEq% zzoszenxR`kbi-gAd7?08n7wF6g)zAdJr&02%!`gw7$ZL~8dVrm$6j>4!k8}hqN^3g zOtBZ;tT1MZz35(rKTY^4g+D|1_X=M}_zi_WOSr!%x?N9rSmDnR-c#YP5I$1juM$38 z;ja-sPvP4Le^TME6aK2g_^Ql{zNhdv2|us!?Sx-b_+G;OvqgvR5H2bF0O2JHKTh~y zg`XgNtinGae7eFvB)nGP9}&Jt;U@`yTH&V%-=^@>gdb4&$Ao{T@H2$}s4xdPkv~Ut z!(^uyO;-44gi8uPOL%vM*AqTa;hz&eTH)sipQiA?2)|e1mkD2>@GFF`QutNEpI7)b z!rxH%b;1uR{08A4E4+d5Zx!~?zelerJb`fc7NWmTxL;v>dg(U# z;ZcQW5xz*^b$7$Fil^tCNsJ>rUuH#XKcoXTP~&>5e*BMBg|rWgWYdTJo%PY^*J14J z?MdIZ1S94t1K}n3;=FPK*TiA&7@TFpOM#ISE~*?-at4SZuxso0_<@&f{ntSKLt@1T zdC1LTVQGt6Aj^KID+zX;TQ2+`!zEr7k-KGZxp_f@NWU7i(nponhQS+5~hzfvMC1K4uW-$|BOP9H27H(I0_5k^23zD2a=t?| zuCu%#2+xMj%t`(_IjK}cc9wHy9tQVQvIs6i5n$(*X6wJ7p_`hQHn%^>%w_h6`yz9@ zu^q9OlTVtt!>FmHH8KnI0B72@#E!?9Ec_~1kUR`igAmmvTSN|(1}bZjiqh+>5t#SP zd1nFJ?%3Igs6n6F_!nPh|83>KTsbjzSz|8{{YqCa#sV+ zOSQ?`!2sK*$sU#5LYptGhU?Hu1mXLbpiw*qmzS6TENHp0*aU%@@^->+hm)r3lQacw zny8GV2Q!f?Gyy+HG}d69Jf*y>oOjl#wv`;!aVT0@F^exH(g$pg6;UFo99zrA?q;Na zU?5znQC^R7HBoxyoTnFSp;eCy6mbXM2-4E!q~*pWwuZ>U6IAj^C~cb<);+qH-IU?B zrrqV`<}@&AOQD|A;$_2IIK7d}hUZc7ub3BJ92S1rynKK!Uz3;ccD7`o{vlt@F=D7m z*KXR`Zl{c<&njutd6++;(wVslU4!b;eE35>eov+UV}kd+)krht_$BSog79eeBkXUq zUy|LVd(XAINzvg^F3w&cU5&C(o%j>p1D@~_^aQoPD3(9rS5OCPezePCp_8ot^E^NN$MP5!H&>to;FV8R5qk^72H_~4l62UB&V^3W zGz!hFLbDShwKN&|&Z<}Qhf3kHzspfwB#{>}k$b^z)&xapP#lyR7!H7+{rsPq1}CK- zg5p)QAepY*{B3j5SHZ0pnoZ0_55+It<^EtGEK&xbK?8LLLk2?akj#U-o~?4DY>{
)k0i!w7QAE^RV9{IcM-mZqgc0lveJ^h*z`cV|EBp{@f^KA7ayX7~fbC~^ z7c(j&+92G~h)gMzG@YIKPHe=w4uK|}Pip%nX?`3q?1gCgZ8PpNvJB$#t-CVxPhU^b*IWm81xKai81GaggkGWl^ZvBkq1xG3y zvOg0R95jmx%3^^l|FgL9K?S@HBweUX`*Cj&ONlFG(*6uqE|BlDwp?|8kcHPm z#ju7zuVcWpTwBoJf#r=b>-~-z)2*rZ!+8udwnY13O`4C3Xv75(_0(#thA0+VmnHZ( z3#4o0SXyhBo=kHzh8k!v@@>_pk@w)1l(mhF&}e~;%LzANNR#&vENVf}UWPXizlRuJ z;^YntEIZ|U6<$ZJj+m!_#isEZ0qQP75?XT71;uk6WMFiU@U#In$eO&TKs{UZxK+l?BkS_IIeD ze#%zRYl`aiHz3ttg0q4%-?oMA)riDBxOgW12lCt82@qrkN^-}2nY$I}zZ4OsKHdBQ z|I$EvrG4Im=cQcbJ8?Eu>FI}C-{|4Q+8@z-9*cA>07uNt@ zm+vZJ>Z^10)_Cdm*0;^`s0pVamS}fDHB&wT1H91?|*J;@odpThC117}W9Evob zYoDB5yFU=sT}XG?4rp_#dy}950-Q;-HyD;O$fROXBBDqUXh~a%=nrR$4D>*-1vC$| z1*C4t95BhXJ${Db zU$*$)C+%qECDe!-W5749H*rRgQUUJ{@1;gbfPasQS0lIh|2nQUW4l*?m3D9*hh=<2 z0<4}nEu&XcG<|;st zMPrP2sT8(FFkVTc&ixIkZcNpDToJ+Fa8C$~r!YAfR(xl9C^{KV18x8Vm0T`Ux)7w2 zH`dP8W?eg%X$% zAw1EAZ;md;uBWGH_|`}>BSpivMw*!^8opuMTwypUQ9YF#%AwR66Wi3P z#s^@=UgHBWW2x~0n9^!|*vsp!T`ki!msto((#bbRKU2pGDH^^t(iBrPd~2kcouc6z z(>cE}okdOOa+6MKRpSHcVeBA0sMkKv;; zkB>ERld{G~y?Ud9LR5HdYt6ts?S&L0iQ{ zq}nPX#%Zf?{6M--Hsy{PJ14*S=9Igk*)B!Hw^Un2CbU(=OP>>XtmCH7Ayx+f=wsSt zS8`_=iwtCv-X%IsdK=PdZ-f0C+S_1TTMgcR>S*Z263L>0OSVVTylz*#4dVrCp#Hi8 z_@eFOa>V~u?eh)Bv{5JS;8GxGG%Sfl~cGi10^uib!{+^u8988=bKK9^>PTa354s7al=4IKTW8@>} zuAqCM2Nwr);8W!uoYh-22T3?p-?ubl6UCoc^rDkM1hCQB!1nt+MKRl1P>Fw0DEGiwf|ys)BE^ zx0zu{+49ZgK|AtG>ULqWggffVrt#lNvPvIAg2vr6zRawl+rIc)nn!2YcrD(vBbWORCWayG%TxvwRyi<0iJg$@VDh%3JX;RX;L~oi)F+bvC1zx)XB$MtjOnYOZmRa zCrwJe>?J1FukzVU{%YW z0Oa2`A~XB~iXjtD14U-R?N_m|^YVDEiv=@GLw7T=M>2{K_>?m1i-N9R83iZ(!Sx5-9Wz z9DF`W=U?;rJn~Yo?fJZ&e`TbS0UGHDQbPgDAYk-y1oq&zigVE1R4&7#4+m!PrEl`& z$)!IbXZrf`eM|e1x%fKE`wV{n1Hb&c+kq{PzodgRA(OWuevyBIvosbraw!Nq!t)TB zA70B$!D52>c8BSjlE-1qF+ThN=)CgwNQ>a!geFFrN8!Qy;V#sm9yz>@ONgp|D;R#u)v-iWvGusxHdP?mmA^gC^ChnhbdLovK}==^VZj1 zXKIB`ol9itABM?I(Pgv)^X;5qz4X*eXsvyn1ASfPL7cAMT#Mp_<=1G1*4^=c2) zB#m-OHzxl4@QYALYhkvpccctkf(?8LNK@}eehG}Nf`4bCx;?Cyd;{|VmD};?>&fHZ z1z^627mfH!oGUQc8)NKE4))d<`xOWK)foFV!D=jh{rUc-Tw&oKW@Eha(tHojP!Ded zky`85NnT!PqP#g4^IsxH)w?Ceep#r&%T(eTfc2;jX{+f$&TOouLT;74eD5&Vi>TR= z_}d?UpTwVC{~`Wi{Ot!|Qjo?UoWZx-2wR3W$I|oOi-&;6Ni5hy zX$M(8Z2G#f^6*DkE0#jB4W@16B#sotR#OLst2km+rWzrFCc0)KSTFT~$x z@b^vpJ%PX9;g36PIW@i={`SV-oAJlxu+{iGpT9`T$MAbI{_e-$&+zv*{9)^ohoQTN zqgp()Y~CsOtKpCIoAUQL(B6i>2l4k~{J}NzUcz4+`1|lT8-Ls2Z#VoMgg;zukEX47 z2UOnW7{DXApvKFN-H}1BJ5c%wy1ddikWt>q!3loQ#c!YBhg|%O1V7cqX9Rz@%KvF1 zA0HkfUcnER9Q=Rl?<;ubPk1i7 zsFB5jxHCa;wKF?*SAxJ+3X?R$LSxU4-IGw@+%2Pop}>)7KuiI}6dmPiAv_qP2V6Av ze;MjQ7ya=VJ>;U#iP2MCG#B$U%4sh8$QV7{MPpE5sAst7c`9 zXiYXQU7&mLxwoMH2%YI+(H?_tev)7GMY3ZH62#4dSePKL5yUnL0@DOwLE~V`tvr?; z+b(%KGds2@c{?#Xwm5k^GCQ_?^0q8HwnOqZk{#PIc^l4-?UcOD$c~L9Z@t;ETaq`n zMC@UEI+mRJDq6~Ex`CEsakzA7hn%}ahxfvoA56xBo8VoG*6Bw4aZZc>c%SImcweOL zU6nqvUR^eV$l-d#exGgc`ZAL~%cMob{&3vr*$7^i z-`U45h0>B(wzNh3ZG*q^uGz7d0*oBAF)AOC9s8H_x=(iOW#@JK?AR;L>)c$C%cMGC z!pJ6P#{!guYHB2UBOQ`Bj&V%7VyCeyH?Cr@I&nd<*PK@<_PX;5#olmUn<<8?A?p=8 z6WOnWugz3!gA*4N!`La#KqxlBd4*!W^V&=?xU}_(J&j!b|7i}5#g?g4VuY+r~q zVX$EHcH}O>bUBzC1=HgSkL3y$PoLzUJg*d*umnCw{Ic|ABgHraXI zEjxw_x~xj&h3$oPi+b9N>kx?@5=*`7%Z~MfuKgVsv(2@20Sni9p&@COe3R|d40Ed? zR>wKyWHkb4hn#-tYjhGY<>9$))uE`%$Knsom;B@Y=Jx_Zm&rNJuagJG7dKg5<(*sj zXB?TLtw6izm#1V)w}De%b5@LPP8Zx6x25pfY+H&mLeSV^1E={OVT!lkv34JG;H`ln zY%eWU`OYrvz{Cxp`*kbG5k3aZkm?iUeVe34?e$XE)pumiq zz<$slD<%l`gZ|j;1i^mLADfdP*bn++Tf~U+m_N2<@^+>_HaB@Y(I1?nfp8P3kAszEpl)&Vk(24S2^#+kVwe4fK2zjU)3!a1)X{2@aS#a9>w zE_zQUt>1%i>}uza3_EM@1(eJ$AEfi$436jI=0azj7@7C5P{0~9UAC=vMG=-vDl1U| z)&!;RK?h*~E$0ajvOLMOTvxP?3~1Rp*BD8K?u9)T?2@mTxW&vBoGCpTOQzi2n#sM$ zmCNc;C>a&6OjL9wsg4IWlXYUIPRD7RqoSm}soZN_9hr-Rn=Q9#+P_#Ym;2+#%SBCl zEX!v9q=l0LX|zlKfO0T2_*M;Kv^h^ogt9W;6*eEOtjRI~1McZQPSz7s>#O+*x3hmP0KcHUD0zi?jzVSD+!wF>1bq0dp?XY z{2=`zh2i?5X7=byCcIEWGD-n*d57Oc-A>>9cn6m!F<-!#Rene~j+rke#=vNRm_K{)__!+q8I~X)r<*g4q(LUbL}1`thrgG5c8S$6VPgMKNXl%Tkhcd?TN~;dhar*bCiYpQq`Vj5I0vk1_v=#WhfP z#_~BKVCoxd>P#N1A%Rkt0{J#x!np#BMx)^QbESqC{&l?6ZSyKH??lzmDH^Eb*oHW; z%;m1DSs(Ju@5PF*YxKm3ywS z)`%ge^02?y$=YK>-T95`y9srN`{tecSr|HgR-72d(Yo%W%C9Q`_cPA~84S+qRa**g(H2b0Jpo<;fQJer#AUnZ>-Sm(L}nO_opMdifjh>Fjv& zF;Bkf@X$)B`2@4I=6*Ygd?+C}#V<&`TqAH0( z##Z#PurP!%L}?$)6pUhHk?!o4gNR_A7_FX$6OT*B$vgsfi^~A5O+7bk!snUfi!hkM zG73&b{w;^MI=~MMh3bHGV3g@6<)ixU*j?r$H!rAZ$yx<_ap!9d{BlE-GfEpfi9}W~)fc?9Q(0ys5 zq#ync6mWutVg{r6BM{-A@Zihu`SJ(8K-fR=Ye|nM;w6S2icIb6DHpL>Z5hB(EZ}kn zF2mY`(k&QQhi7o$jd0odNL7A_4QxHS)wVa^YZYwI_uAD&2>*M1Z2xE$+s6=FPc~#& zM^M@eN{5Ft>6;tdi%x7OFl~QxVw+>r#@PC>TF*dik=6MA%FXv~d{1mb>i$(9-^s7g}@O~JmzF`^YbtD@%^<~e5}`fIM{`Oc~~cFT=;g@+s%#dt*DH) zE{MG>2g25c*j`>``Z}^91M{%YJU2$4j>tDVzSo@et%TI@b*Ar0ln?6OY-^v-F+Q9K z$-sPP=?%07;rHvS!w)uUp4yt^v^Bv=FxX4lH9X-=2={LAwtHH)g!*3pgzc72n2Dwg z_;V&K{+fkfoUnMVZ}2Dji$7xFANY&g0)yW>SiIW8w+4%UW#KuQMMq|YhWEE}O z<-&X>TC~#9$jTtZsYHAcy9pnr!T2S%0YP{?lk1mQLxT{rdwgMA6ol_(z41%5?I6Ug z9$#3oFq5buw2B}MX%2pgMHYk+PxoGL|X8hze1WqlCx4ax~_oH{DoyJ!M$p`|fCY~IKlY>42E4Q>P+ z6V=Hd+8p^q4f0>#nEY9rBY#$d{FgQ+f7<5ApVlD%)du-I%gER%^S>~uE&`58xt&pH zO#XBHsl*Ktyx>N_{CCC+Y8M>SJ%IwQE8|6VaU_Psab1HUy^xgifxdilJ7pj!y)CY$ z;(O*G^9-qLVol~^jcwWRcsN0V`p}gGZASKcDXsdARn{?e9*>7q5x}!*xKnN)^&Pi@ zAV1t%p8J9ZEom7q($!X|N~a(4dM~6Dd#!pv%gek%xxUK}c~KYY3_@@~o4ny}A+pPL zUFe2*bC`B}8MuHMbphG!;Uiv#1eA1o??0ehAW#EUO z)IPyziJFa%a`_U3`$9=H+*HA|;t79j)!Y*nd;DnTnx7A&Jk?8(RWjtntv;=x^5Mhb;xm-3; zLo|F{-JgJdh<*CnVWU6kgedmH{F2>(*oiJ6J7nxpS2XvG{R?pkvBTGr_$47u`rN&= z@4DUEiS1AEeFN91zGd-a$j8%)P-VlaaB1#4iG?l(f=@Yd>kqevCy`M)yU&dEmR8dIziDq-BKW0Be8~{or#% zl+G4vUaKh`9(m%jnK(hB@#VQVk5`SGPwond*BX7aFhk$)OFMI@hI|cg zfX7$66Ig5n25Pq7*gUf^vFt>UFVm*`%X5$ zlpv6!`YlpkNn*6~loiL5R74|MqFDnHJAtKSon8V+%{P^;@jz8PF{0?{cCoBK14g6Qb9cU3hZcdE#?^AyGZFTWq)7t*u?C@`; z{KquJzkl=cUyS;5WWqm9+0k0mMgPsl?3ccr_3teSKW;de`g=oz{x_i3wn+a`4u6mG z&uZYm1+7ODe(L|$gnz2CU)G@i>y5=9>%TnVFU(W{moy0Yd!qpMK}`P&hku^(uV~=k zqj~<5|7eGQSosfcNdNa**S}*N{`ty}lLqPvaI4n(<9o>1{$?oupBm!7vbFua&EfA* z{tq?8|A*G`ALsCwlpjZ3*6II?*8J$BV*NXnA74Dy@&CAa{?mR|Cj2J(@I>m^AI2#R18_hS)KYR!sm!D~Xwrz<2l-B+4I~@M4 zRe!%B{d+YwV64B?|D6f{EM>=m9d+3^tI_;KfAXK2@SElXgQGhBYsX3dX$gN}P!+hW zLBKtY258%#cRBo1l>f60{8zPZe@}P#O#$xT!2glP1lah`aQO2Y|C0^;|JmC9S0(($ zd>?LLKc$g9&i^psH`#~TmAd?2+*tgv{hgWc7fc2GV1ofX(`W#kA6`2F2Ec##r2a#6 zP5nXhJ7j*Rn%`;Wce?qVVSZ?&}V^u z3rw+q)xKcWFIfExHUR~j0^Dez+4N=v%ppsC|O`@ z3k+MJY=QX-3Znae^YsN~WGFIZKnDvn~xJ-lb35|}2MrAzY(o`H89rKLJn8&5T z`3bQc9oLM?xW=Vf?a=7hWmLv4F3njEjgC)7Wqjh&yvL!@G05nVti&$OdmS1bXN<}? z!=-tjL!)DfQ5j3PG;16h9WRW^c)_KqIy5>a7?m-BOS9IYQNMpw{C<}P2YkeNsJ{KE z`1UT%m_wuf`>6QumIhM{-un|8?IK6TM<$n&urx|uJark^@~TvFLr4@;Lxb=J1V}fOLM+MqyFuv z__r?22OS!9;zq@Xb!jeeXw**~6+hLbxzM3eUvyM_QJ3Z-herL)QSmn|4fF6r35`)l zd`gnU<#lmFWBkTZ@f%$^mn1aWHI0gIn38j8LSy{DQStw*9G1mp4vqSFqvGRP8tVMv zght(f(SvOjjCH;|p(z+c6kpBCVO&=@H0qCyia%y)7}tL!H0pDWiqAz7iHkH>CN%0- zjf!6t(=aZ$C2{@I&VN*VCmR=OKI+h@e>5uokxPSvFk(3-@!|uyG*>w^>gSA#pJQpL z^T!h!^<_rImmx`B~Sy8 zUIU_YiA)ctA6%YkO?al)#ls zgKM@L@}SV+FwH?Ga0u-(6>v~{BUfh~7YDv6E?g_v$kkQH#p${f7e3-@Ug`;2_xq9okIH8x~>TSj~v5t$=m?^G_&A2AjadGl0#f9wyjT+|b zxH#lVapjwFO|IkOL}7|+ax<>JIxbERrnqoqaifO)bzGd(OmX4*yGE`lbzB@urnsgw z<8qrMS}zBXDXwO162`xmL%LZ+02hb7DXwO%5_-Kf7biPXT+P}g^tov+PSK>enzc;m z_0n9Nm`HIoYn#x9r@1(sOmQ`9oeFOA#609AT#Bn%`viY19T%rAQ(VnjD05R`lJi_} zNpTgMmGbPmxVTJ`;+oxzYfc>(7iUsjSU+mCL%owP(U40jDJ~o)-pI9OU0hrUNpWr2 zjB9Qk7nfgBTyvXo&8y?$q;HCAUNf$(>bN*npW@o88JFJNm*fT~NK;&;W?Wm>#l>l{ z6xY_xxQ6SvI2oPd8g9l_uH)hqVv4KWjB9=!7bmV$T-ayrl=83#ze>N?!BzqKa2z)m zidS|9*~+EN$?FlVhr`LH1R?K3u6&+q$hEzCG1wa!%u@ccg`7EwoHZ~~Bj@Xj(bAkuzKQ&gPU? zcOvJWB!BK^{@k}Y`O}-oSqMWm=~@7=vWSMgsp;xZeH9V`9xB`u4euE)aKN$tr9uQ68l+7`#Eqt`{BMyr@l{1#C$y|uG?5# z-)dD{P1}u0iJGo`D{`4erZiahn*OM%-pNv;tb#~}v&x7#DjX6KS+4AqwLvLozP3_Pz=rfY``E<6= z?;fvxuG43FlC0~K>V;XIY~>5Bs#jBeh7v*BC;79O`7<(J{?yxZIgxW=Vm}wqel8i$ ze(KUSkcjzQQZ24$wfI7-YSA=ZPJ@WEscnIsM1SL*o8xb6ohYT{iOiebgV9oT&C;EIYsb9FN8wRu)^~BLnh-t>6Aj%n_dJPb-$2g-(9qBWJ! z_3=TNm7Ty=qbL;^?Td3CRRx2%7dvVdK_&S8!GA+8YJT2(9MPHBOHeZ0njbz5+)&7488-XfD6m6 z+32oz^LencPQec1t(-VWyB}~{*Wng#G=_Zi2of5|?V5V!csui)=YOM1^R8ifp~L~m zF5KdElKsemYQy-(9z|;V+6MZv<(>0w`RvtQ{N92Z=j0M|x$V5Wz0`@!f#y63c|k{e z2}cZPd)DuVE0b{p2EMh-x5;fA4E-j~rqxen`SxLat(VbHWz7-6#5zX=_xF@>s<8bQ zpwk;2)9>?WGfaoteu#yTPMk&=KEmHVKg0qiZl?Fc$*NbpOht=?n1Ct zPQ_!5H}X+Ok1c_UmXK>(K(RVsoonTkPc!NW$kI zbu(Q0p$!Ere;|4QYF(FaAB=viz)S~9FJ(c(w|iMb0XW)Eufpx1#*{yN&@dii+|Nx`SEvX&TlAAnBJvW>0mi=5(hR$`Ug zK=Qn7^k?W3E=9mRjPYk9ka?85Yy}#P==mHK<2@0=Dm?YX+4f_P}qWq=4iY@ zDxhMczeBduwn!_wPr1);Ik%m0i5DGzRq!qD^JAD0&ZA_$p`m5|w?n?{ zA1VwN?f+sYKVKU0ns=LRW?*y7H|- z*Lh8K{j2KA$%S!sJ+w~O&#JCJO>{lh)m88DWfx=q%2gF;vZ|OlFFaGY=o>%+U3?oB%Mr+aA7=KQ#k9231(0#M*#7F3$V9z= z491SdJJJQ8BUV5*&GF}1h(GX(;FY!@YTp`t*jh3~55dRNkEBr5^&=_96MtVj(GzL- zhKuA*d+&TBTTg@fCxwFe#*@`%h{mG{9Ga<+C%#KveDZm(?AFluTG6%D>D3Q;dowSM zykL3dFxZR4NSzwOSER$4N5b#VZ}%mr+&1Y#spL1-xHnXm}SUS@c^-tnd>bVuv9b7KQHsYzPTf zcfdzvH9mB_@)pR%h=FZ%EDWnP)oVSF@d5Zs!h8V6hhv!oxup2LlWIT&KAz zgKv+<_hjfjK0@N$ zdMA{ZfcQLa{Z1Pjp^yjnQhYY3?g`EsAAt8F%m?6o2=igM)%H1efaVQ$>dqa&36J|| z#b?3{axK{h{B^bM$*2}m{oL=gi8SA7p9Pg;(UR{{cKV(6=czYB4~699J8g*@9_xF^ z`ak`hwyS^Z@3ci#t@oT0(EJQary>RXo+e^SOk3m3V=$qqc?=?&&tqtPKNhkdU|E?w z>n?B6u0}3-mJQJ;;y58wzv1DcsMnX{%SC=T?&Tu=_}tXXnfqlryzQ3Q`(>POkb~CW zhqKI+kHS;mhhI-ujx^8acX?_N!_ZfRTr@6f`p(%SKVq^C9MJLY^dy_o-AGJ4@c?)~H zuHN3h#5DNT>0k-MMQChR&v5Kb@tF_<3)8;ANOXLmJmGd=G46->obVyF?~1><*YoEN z5xW-3p;Y11}WNwzH!EJ;kF`#;RRcYIXU+C9F{oS8E-DL_a}fDjTOfq_Y(2!tXa zf*@T=q!&esl#zrI2$4_(6i~ndB2p}X2#Sgd2nxy#HWUyA%S9CAVsD_LsK52BeWoOo z_rBlvpI<((X0QG1^6XyDKKtmM&t5?X`kRH?GQ!u@<$OJ(wUYMC&Pa7>^ za`28>%((a+q873)K%P}bYm=p*8Q3VJIriqTuGiirtN(Ul?)@ni=OaUF9{t`wHq)dW z{m4p25uDT8_O&l#pK%%cx|gx9SKi)UUtE0|dwjaNtUk8;ra^nILWFS)&}sQnr=>>F zjfwkYgl zNPYqx#iFKI=E)z2k&Lr#>xj{JPsq3A zouf#wtZyH^(6?lxqew91g!c8t9&aegZ^1n5;})lhO#y{cwze@dY|Mg@?V!xP5RwUH z>cM8+&L#O}?Cts?nNi06echfUdfHEy`%oprP3FCCFbcpoAXp004t4x`eL|OZc&4l$ z)fS20%*3bJ+ajYd6~sSm&|!ur-;JE)D3UTTgS#oP#z|CdC3`ndU>amZ`@88v33P!~ z0JF=e@z{o;D{GOs(AzHBkxz=#4B-10QGsp%G!9*$9%-@>^E|EJ(^|i1Gh+8pW(kQg z{;6gnY<*3n({L0?DTa1^-~xJTtB{^C{tmiqBlN`SX}WTk(Nijb1U&~e3MT_ewX$w| zT8(@))zo1AIf|qPnv2j+8WCBAW2zDMAw8n~*Ex!$o<`__1caTI%`|a|?A zs-P5c5+2(m)o}Zsm5|a>E2O5{<^*?Y-Rz3))U50%H@*jGS6O&LcNF7~w>xLqorT>R z)D&!H2iNg>JaRVhI?dpR1nu^q-#NZj`nZC5sEK%(F&jT-abK*?Ez5UE)@gUb1{o{O zm~SdtftTblth6&z;jJ7!-q|HP3Dr9dRYKjysBryCy-2@-=ixP@2yf{-UBeC+%dc6j zI2}LA?>4K@M7_~Bt7j#@97WQrlr1W;L0t`CVJU5iG*}XJeFl}-ZdViFK)NV1=s-w- z4uW&t&WP(d9hdamdSewYxyeEotsmDf7nQZYXAC~dn8pM`?uNO4wBM`JN)V8)rpOzo zYJ%sx&of*-82WaiRB=NO^$8K_?jn*`+yESIBpsJ=<0uk06Z(%YZYXXel*5~gRuZmQ zwl96VK_V+3ej|qOdr|t!#`Mq8r%22v7R#1=FsJB~IfWeHV0FE0IfwUKx?U=L8Gd!F zo6 zj&y`OAqg!p6k1(`HsGSro@Hp_r-}{@AxPJFIekhl3Slcl5I@y|`Y?cCzDmy#4y{T^ zpK8#jFdQ2DpHL#$78jyjCKV4xOSK!PwirYUnQ=tBJD>(C2mZ^pAl92ohJ%pje0eBW zJQVKz*^$=r1WsGy1&6R}dEBP0kqM#RfGwK$F*%B4gbq}ZBN2Mq5Kb5JS-LEA2N+vI zej|)Jn8VWFY)6i99V+iq?}pO+)3w7a8VGd*Lv+KJ3ThTf4#>6E(iLbM$%3*rLoV_q z$quxIud4l0FANQKCF0*_Vc0Q?=pb^)4mXEjJj2Sx6PcbZNW~$og!D7={9H~YY?J-~ zn@~F;j(6o^&W?{_>&<~&c`$(VOAj3FzPL5?Mr_*FT_k3m3+^K6t78-6o!TUi&zmnm zjB!@}f*5-nF{=d_+lp*DWVHfgT_?K^jP;hRH5lt1S#y6|U6e6#&eSUX@Wj8RH$MS8 z=zQXaccY|n#`saF(nexrKTv9Sj2}}Gso639==>URULaSqPLFeX!d0T`ZOHiBhK@&| zI#qbiA5pF>1#g)-Q@8*m&#)UDB~K|^?7|lha4f)erDFl1Z<|LUXKIFSMP=(Nx4>OpMg&APwmBM4`ObB3T3|2|>NYa;~%Z^MU z^8yz`iaUK>;>-2`A(^Q=|FZUy+qOM)lJWf@e)Sr~^l9IA8^A?Aq5S0P#R_!>(jmw? z)t_c26%UjlII$S_?l}FGFak&NV7?TIrM>zHHnEFrWGpZ1X2?Z0xE;qC7!}SJvuIe@ zMpv{;C0nZ0rR=4K+4eHtc0`%JsLLrdT46>b+y0IsS=SXeMQoQEFQsq7Vm3iL&fr6W zRD3)|o)b8Va^O{usc_R+yRia05Ny$V*r(NH%LRy|NEVseqJP0>a8Z0UgOGtb6h!7F zf{+p24no{&zs=}Z2J9>P6$iFo8N{_;T0-&Bi^SuLbyi3NNgY;ZUcth-0aFQVYweX9Zw8j2+1S$s z)M#}7!8IIuGMNLmKq#EEPKj7#=SsY0V3@3+o5L)FM$jL&WW-;~pg(CVvZra^e<5B2 z1K`mN96)>wdY&xY#e-R}O#0zP0A&`ufSx*VkC>$&kH`9d6zbVax}Hh2ypDrQz$hH| zqRnJf@nRXN^mvulu6O5l_Gzc+{Od#gVbFQLIG16pjD?J1K??>bgIGia(Xwb@54c%M z$d>d)SX3s)t*2V?&ct|^KQkzw2l-(cB;eWhkLNhm;+%1=3>?0~nXOgmU2k(w_}j@d zAp7H7EWB78N%JP+K*&S{fRkmir1d6xF$+f#MR8u>aZj-Nqg(G6@x!gD zk92uCR5HqIyOdWjGUlcXp=B)kz(Sv1@z;sWtwYRc$tymI^H;zJ!PAiDIw}d{;RmKZ zlENjE$-$V@3OjqnOLYFYP?75@Y1eluEmfa=)C}n=e4iklfwuvXS;qp6HH$>WpdwDM zr+=&$*&XYZ+`d@a55sdP^SwIr&A@;(|Y zfOGJzPq~^VaVa#xQWtZ&==}Rb2{aQ~xPe@0-}O1~S%|Q7y9d?X$ z-Jo(=0hW*qVKCzv92!%ES;nfMJy(#n8yRn4e<$l>gjvQIbzHK!qU^V*PobB7)>&8e zn<+LpkrK{;2&1%jQ{mBXaQqMDr*7{N8T{WD>_sz$esOS)y%El;&2x12*08<p9wb_OX&|Q-=Qq5vvthbS8j`a3+#0dkQIr>eXjggm5u6Q=4PiRkD zj~hF+uI<9QPKeZ%_LtFBWMN%}U8HL|<>hrfsdbeX7_X>n+X!9#$k$mM`+TS2FDbi% z!*>RTG;GPJett`{s5@Sj2h1yjduk5Oh3)4O9iU;F`UkhQ6SJkVBvCX(c7kIQ0JQZXL(qv0E>5gwB_-?-I5*RSER6`@5}~7l`*5+u;Hcm^Tr5H2T5E(ATn<;c;}@LbcixM4)g6wBg0lqtiFcg6 zlznJk6j4@o-stmDuSuHB$r1*hA=+EoRm~^FBC4`te(PLEKOq+vGr!Axb3syuBTw>k z`Lj%yawK&_HX4{uIP+7+4f>^U9n$4nN!QaaQ9UV=o5z3Q2}Ol_)Er7yvHXL*SGR@p zaEn>vANuD{{c}P8{H1^X)<6H~A5=*3VCWx*{xS8BQ~$X1kEMUy{7ERr&0$VQLUE%0 zsUj0%nfpzHLa*z3gI5Zisrn6ZduDJmj={h(a2Wky6donC#v#{0Ed&_j@D$yQ{PY<} zMyxk*9A`jabqlP#flomS`lGA#nUDrX%b=+A>)-)-d64&1V>TvJiKm0*CG+xq5qjvm zMQlC#+j_ii>(NB?ID)`M4_wFO^qoaE<1}v(mcdT_MJtdzA^g@=FnW3CIWqc}xHl_f z#lIrr);E;cad)-je#eg6CvmSsnj~)AF6s3BZpS?aBrsFPwP19Q!C7Q<`(&(etNnE5+PXbS{TPq-=kYt^-0?V<9_Qu;IV03oR=hWNH}sOPKOxgzhUW1| zP711BTvSmNsSY{F+IT!|iIu7tnukD|BvNL7Ty)X%m=<9rl8V|1Q6fYINyusWYFiqD zPmLmTE0(!)W<~TjV+srO)1@0o$}6?dLyE&_02c@#vIG~ zODSvVZ*u2_%X)uAS-)YIwY*}l%R1x*W!=Iq>jyB?ld{%p1SxCzxST5&X<%8y{t{&k zTPf>M&~{nNTli(lTEeQ#vX*#?ZWVtQm9;num-XUsSsTz?%KD;m#S}4Eu2DtXKv1sI z4We8z19cX3kaCTViU3G3Fj!19A()>mn%CsZ!sdG>_TZp z*@^6#P}w=u4amGVBg#(S?j!4GypAi-_sDokMwx&ORnp##Zz<` zB=EUZJI{QR)@HttjnQCa%9FE|>P8KfYv#=JEzSbf2t+`pZvtU=T)8 z80yaDU_a{+@)a4@;#4SKUA!X|FWbxfi{q%iU(6mu2HSny5uK_2=8~hQ?QwJis)ap% z@k@EgymJEYVo4381 zaeh@Dh)A=(DUQ2au3TJL8BFuP>@;JvWSVzlv`1NQmH9(NTIG#HS8huxGNd;G;C&DXQwwUFCQCZ5vYSKj;j3!m_{#Z+#Radq}%V%NEZ3nN~!qJkClIYFZ zQuZ0`AX>g44y%S7CNxRW5>LyIL#`59NCr{`9z z5*FtQx{~1Cx2J$SH_b4pXI-{ zj3ql@%b!`s63_=w$=?Rap;LB6%s1UW!Cv)Qukd*f#(ys4lwEO0l!)ZTYr+ulN_NR~oXs?+5 zmuauk={x*m6VPo@#HIi>(%{V*?1(+tiGCl_9rCP~DR_<l!ydG`3%$1dFWbOQYiq-1~4J#f)x z>3V}}sHZ>zvm{c7*Owt#7|e6IPA4MrtX-iuvLd#b8YM0+z{WsHF9f6a?!6xS>k7m9m>RED31G9Trd6wdAa8LcQ~EA@UT1C<@cu&;ziB^au1 zIs-Un96Y~!9l|**`tabdEaGe09^ETrJkp${I(aNl0J|J`1fXA6WypLrR;2H;j!1s$ zeA4G`bw1q?kx%k&P=CbtzQl)fwEt%L*%>Mh!-wA`H}KL(;1N`*|LSE61n0H41?|1= zL{%%7kHDap-qXa6fb=heq?`lXf1N73M1Fh!mG+m}(-avU){*^JVRpTca%a7$L2*P~ zpDEF>$FH+X@41AMHbdon60ZPsB3EGC6)a}%ERH4 zJ(w#h+cRSSRra;9Ya;o2YgpH!NL^`v8C^vd)>YU=x>mTPuK&@x$|UHDy0)jT5yb+1 zWxT12U$o&kIOcy8o(7c;e@@TM3i9q|F`etN2G71 za-?;|G^H4GVkbUTkBe31=XUu?I|1#ACrT`M+U*F`myT3kKg6NdC@5eS7eIzlN%F|4 zX5;r5%hn9+hYMd@BqDgLhupX^Qrkzn1I>^IcOVxScoHt%yd$Cj7pTL%JJ4M0XG@8J zVDyLz;97YS`bdY5z$6xEkth%-K|EF4>#XEC9M+rFsZNg4l%+kKw!Yazr2W2_?DHFsv)Ek~eLJ+GF z1Rvi_Js%zUndA-abh=Hc@p)O znP`Z+Hv%f?$nEv4jPS2Fo$&14PEDyhKR*Cc8)ysA3qQHnLbMHsTur;-{W)br!MaVx zM3dhp{#e%+41YKnpTqI-0ERXhv2b%D< zNApTX0U^TZAG^kkiMy44hkXK-@**`6xxRm zX^-}&M=BZPFx^hy4U8^2e+lwZf3z1dCnIJw{a9~{$yg$|?Jl1AG6rRELh{87;CNe9 zrpFoRjqKA2@HmqKePl*x1}iCI&$X*c6b?Aaz>Sj}m`EmR=5`kR1cd_+BSrQ~!G34p zGdZj&H{eJ+a;a`8kI!|ylKolHp`=KYmsxHF$-S;fPHb*1I5vI3o<@YRkaeNVg3KPC z=EB0%-573_&?9FsD9hK4&W|E~96>0B(!MsZi8ezWm4w>>`5;{w&zPVHBu@&4A(?nH zO}o@3s$V%&Qt!mM$$qPh`%soqgSK|2>8q>Kd39BcuBje|U={ov%C~a2REb{i;=OBB zd@F#J6y}V2IF|HUfpZ+TW!0$j)>IkDk}p`-vGs$|%^A_P<6QzhE(LQ61H9az(?YHz z(`MbPYU1$qLL~N}lQjaPYQ)GgITP*E*IRP&;^D=L7+x&*C59Kg>=GPatcc+SQQQ_C z)Ws3#gaVMkt8v-Et4!z^yaL!q*TcTnyZi{Y*UBFfP9eu(z0;@jOfoCjFX!(>)45W= z|M8{d)k6M#J&_^OuivP1?&5yk?x$sJ%D-|yt;Yd3$D;tx+9CH-bHulo?(|w*sAE>Gb76$pU;-&Wc72m7>(g`O@UP-pUwvU_3+)k6r2Y z7~sMffH67F$pVxo6^Grde$uWxVXk(H@#}m*hbZ}g{)A795*+3v(ZJ>FD{)2VR)u@r zu%ghRx!s(~;DRcd>(Iw{TI$ZOV6wjH+Y*A|^}|^N*1|q;AA^-E&R$2wUWnbe3QZ=4GW=qG)X-3eeF5QXO>=xWUX&27b;SkMQVC_WvQJ(!|hN~bC{McS5x zc0({FEQE@Z0$*H3qyUdLTpa7L#V37DoGY@c2~BV6@5RaQyzOKgFb~d`E~hcF zL04T)Cd5qw>b>p8jHueS+@bnG{$)g;=m=m0itI7M9iyJBM)sMP>mBvUOimu9?#q1U zw66R8kruh~ffeUY3^~zmR2z(*PK>^-bbTo^pn!-%x}gab^gA4XD?5BlA zxM4kY6wNQ=Mp%TKGrGUOE9fQ|{#V-m?(+6uYx{-e?QyrD=(DK2{kPhFae4diwEewd zdsF$)w!YW)_rP9nJ78Zp2A{I+j@44J*gA>?nPzFXsloQ>C|Ux0+^@=Cu5K}h3r*ss z&yeuZ)+doj=K33b`SKhv@ z)@fPL9#5dmVqrLEiY*3b{T5hKCnWlovYIGOT_MVT={GwcP@6KaAjRWHojksUF${}| zf=4l(n11o?7IZKHFNA6bsDzSEseMvYaJd&|H^ox1Wd01tc9UUJ;wEbt+r#gfZ>KCGWz;XY0&D{&F11-E9vg;}p2h-JPhg!vETn)+{s;8Zg!FMK@J)^_**j-^YEIeZUrP8yLfPSpxwU&+7IcfZt5JLh#cPT%q}0f`=?5YBpOPmy}G$_naX zPR_!dRj(D%@>3(jqsUh7CMs7}EbB>I+^>x86R#Yn!`8iA+-VobZ6`=aURKV?ZFxBM zaNgsYVc9gVzEa)~D5JmR{gwP*A@4&0{r7c1YGtqvoJOS%wvGR79nj&}SrQ5;sK*uR zfSvD=dYrjPk1P2vn;&KL2n7_><4XCe+eD-u|G7wyEBU{I9-)9_43l;{jAM-H!{M-C zcfkHYWO}WJ9a8j(c2^OSy~MG@^fg6S7M7V@d)u;z{PaB;tXL9nH-vpQqF!R7KC(}+ zM-bXxA8w&e--8Imw?RU3_~zip3Y?Jb1MCAS`@In--}kWN$B@eISTfT0R8RrLE&Vat zjXK9Z(Zt@x7D$!pa{5-lprddGeu6(Ma4QmMMIhV!LN_)nJ!-=PM9sX|&f4sckqQjT{2HCI2ZBjBO%D9YFVKW0?YYh#Mj=)x#TH-OK z6lLHHN)pcq@o-v>Q(lj;Z4w>`;{FN9Bmvy2zXkZG>$?;3s<;j?FCDSLvZ@=PNv=5%Vfl`_-U1TfOqFHjfMri82{+ z_?k!_>p<@oEz7&r0O`-gtUt>n&;ooK;U-Bd* z203JR1k%UgxRUyf<9*;)R4t6@UNi7JOi}*EX5cIghz7PP_N`iC6G+CKliOds<|E4Q z)lrx4-&X5+b2t;70e5h+Cv8ji2)1Z9GL6_J70D1?GIq=++aN0E5I z39xwBFxpZ%2Qpe_)()Q>yD$TVQsW&ydEdtjjFl524&Q8&n((CRFB2b&q`v5;Wd^=N z+CccYEAY2?*Xw`jJAP-|=2{KMUnZb~!ts~s_>rp>W%|tv)%f)ld*4#ecduglBJcjK zfXYafhldGUu%*CR-ReV%VYPq{|=qj?XuEH+THRY1J{-|}86USH7wOct||JJ%b z9oBV8q^`8TjIJUJ>nhCF6hRMfsX=NoBETC(6pJc~{I=T|-5|S3 zgJzAIiH(c*aJGHHP_^$+YBPT4zOGd5-jnjjOc+%lE*ea8s1;eT>)Ttsfe!}Yv6`yg zvF{Bs$2bO_hJ{A$cH;s!i(~v@_r20hYaaD`qd@*J8q3E+B=-6E|1b<6qB2&)poVWP zDbyIbgBd-nQaIZue(`J?cZ=XB9>0e%e5b>V=Yo_;IN~M)|HUjLsQ$IofvTldEp>$W z5%JfmCt>5NCiYhmQ>%%M9~h^O(R>j56Swd+0vc#T8oU~kQ zZl|<}())-98G9#6dl2)8!-*4!MZ`hGQN&rq*BL^eU6Pi&cLjD?s>yDNrPX8mc3W!C zYQd{p3!bBWrB@_%Da47dh|8rkKTq@NS0tquh#g)P>0si7S0zOcy(-cjv^hXb*dsOr z_K3>@;+uO!lVddZ-YdEBe7fKmnrH46m+#R0(OxO*ul7p0-(iWl`fDO>{hGwJI8CtN zHSt>vj8YF!`e5Q)uc4N{F4B?2lR2fbePFj4-78eWj)D*UfUrj)YbXw|GgF1^TAQUR z6A#q8fVm*6gCHv5gn|!Ww5q5YsCBR(rO<)k7QGf^ciF5J*&{Z)hU__;wZ^?HmDKBC zF8I5aviB)VL`)LqcQ)$=-6|=|xC6T;iCB9YX!HqSUVM>kBv~q1dz&>U>jEaBbO%#v z0GPx#4lEaJ6lHf%Hc(AQD3#Q`U|rQfH52YDsmH)v*hg8)7`7R&7+y6(Jwktn!SHcM zn|*Dw)ePl4m0~}+~@!hGm zQC1A*0((KNg{E^TyI*}s*+RN#&3oP??CWl4?Vj zhtv?tI)ZIeht*KBE|h(M{Xfb1JX3PwV>O)YR*XtRAbyWSz?@BvsRWStz6zAwQl84Zkq4D&o#g3-_zPnQ*4qIDxWd$SSGTU~#I%_>M8`0K?5uhT)WQcpJ2yGbTOtu=kToH@+sLA<1KB-BHd#-yB}NVzUiyQ- zrA7niT7)(RG004+p;PK-G2>fiG-B-Y!L}Or8%>;1h!2k{(RVL5aw%H}**46`G~3{Q z#Ta3%GMZDigX}S51ylPrm{Ly}Z!mqw-CN8!us6xR2dkeM(l-ae(YAuar@S;{&?ftE0bT5o7p-E^l_+ zNA@k*2**mg{F5$6I#yBUjFvD*Io6R~MK;E<5%FQw5xvFqs75wE)_6uWGJtJWvYoLUcE)mABs7Pyv{d=)8D5tQqq%c_7&Mwb2MdV$%@U}$egj_ za;7X?l~1)_B_WwXtxWPY-_<{f0sW2H{aH%q8X2eQTHGRTzb6)WX_uX#UR zj*6AkK4!B5usE>gl-x_o5*i~jxr^Qz6Z>Vk5HBhmZ47B>@U{HFP%SAmJ3;o z;~S^pk$mX_)>ZxFOvU3i%;dmaU}@-oE2)uWXPtHFaw=GL^PIB@*?h1#^@p>YN7~pU zVCYSq!#q+acF^CS&hd2lE?8H{W_YBZI95UWi3`p$5im`k;Hy-v2KqU2IXS1H+Uuv~S6>loR)U|m&r*KcIsG3R@@ z{$iM4&|g2-RbI)7a}}lk9O23&Q>dNv;sYF+jw2yLSlT{%b<7$G}$||YaU|k*K zT+JxUp=`XX6qV|s`;0xyUxSo~OU)I7$0P*EX_5vQ4g+$x_L-xOS6WP4wF zlX=f}*L!3Oz>cULu8+M^cOM4BX@1uUvQ0MooOxXe=7Q`C>iG`YtFCXsuzv>TReN0D zBTS{fCi@pzCG}67)R(txnY*&|As@MZVkn7~?@(*a(>AL^_Kgc?&`?HA!O*5%aZyqW zdV%V})dYxa!j7Lc09Nbu}1HDuLkvmDMIn>dQ-XSw$Gad>!m@ zXEp13vLj?Qte#|N$ZA;w$bKcOZ4DuF#f!fTYXlg+j|}Ejb*#~pH3o}QIX3GC=28u; z0%|=d{;Xq?qmea@>}D{mbFAr6GN%pTSX-=WZWWOgl3ioXAS)(o4<>1t7cX_bvsFy? zAec*av1Uifj^-0^=~BI|1=M9HWj9$1qhy5LPuT!#8D$?+cC+;W*%`7C)+#WZD2bQS z9BHkl>>n_f8gH|x1YuLHos2ypLHdbl)=9d|Opw+;-TIQUmXKYe=3BYZqIJ)NSBx0f ze5+No&*=Jx|jja~mo`&ojFqeA4noOpy64^`ElxW#m@Lu(b5vz7uxDp2}32czD z+nPt_C);anr)F)gl9p3yCB#VVeXkPD-mp?*qz>K!=2Gu~Noothdb-}VvSK96C5UgE zde3SAf0fh&2-BqwS`EoIksY>j$##={V6`CIPj=M0mh3&UkFD#-J}3Ls>I{bSkkHJl zKDWA3m%qSVSj}~%EFn=^+;>*@7)fmnuvqm6nCMaq%%v_^L#byrm=i}qhSOi0L`h$) zdkkIn0*h0XZ8nZ9-aU;j=h0wv+5;cRjKrWFy>uveRTE-HjOguh7$lHSg82>(K9dsz|>(&fT0W(Pk~^ zFTIMC(KvTY`fFH4>RExiHD&F{CbsX0$ed@hiC}SRx%*Yh?j&2` zevAIr(BDJuBa}T|MRIqQ&32Kkc7H}Rqk+^5N0RV9=S?(fJF z$)0roK$cGSl>1k*24q{@zmv5ld&d0_S!c4XZli*fLtnDz+#a$aWG}d*$O2?9x#P(0 zs4983#~n|$lx(m2DzZn&O5I6h&yekRSH+VYr7G@{{_{O|a)o&0=ZZbjCm*%hpCM+b zgV>uk)JZ)4G1QOMDg*x_x|0)OuAf{L*f2Q-*ebau@P_1cV4q|kus?B_woiEsHob`p zQZ~T+F!8Yz3A1qx39UtqFM#c9oCbES@eOcls@Ts-m5`Ui>{O4^yfqb>rnaY62JTHw z0=}18-LS0nX+D)#@^soTBd_Fn;>*NWhI%5h|XH#z9KQ1=p!~EwgnpM##&#X zM8?%Ff_Yx;`+)b>UIBct_A1~S;>OzRVBT4KJ@BpCPXRv$idKgZ{^GPF!0pk3TZy-% zi+K!jP`sEwp#AN%`Htr4G#9%?dMC{biT4wSB#HfMnl})iCvGSHi`XMZ+?=Z@_#ti5 zYKZyYG`lmT-bQBxOgz&`7d<0w>Sdh9leGln5Yo~hV~dG8pYa^9OU6sUAsM@XV>0#v zr)HD_7iGK+T#<1QxIW_p;LePXfp2Ae20WH=3V1r>E8q_q-viA$zaZZJzC#YgPMnHc zel0bZxYQTt!gD>^uk$6s{2a}%6N}x+uz8o}!@fj(^Zul-Ha1?)z@?$ii@lxm)9MX$ z<&`WTE+alfTuvS5_!;pe@eJ_?;_pP$FD~PO!JeT`rqsQLnHktg>Xaq<+#{MFPc#!yM({nJN zYWgSeyQbKxSHCuO1I=c!z)H<315=t+0XA$_1GD5d&178Y+$xs~*OgIleE8(r3;TFGcNt<~eOnbT?`aA7N{Y0HTlTWx{O^E5|}apBReY`t1| zQU5b2zI;vV*joArsezX2)mrc-;$Wbz^JT;A&_>*^YqYt7rMk9}-c0<)sa|cq!MGXO z*F8#?Pq&dU>t#r2;W1tEvu#{niKpXrz)Hj%&{=P-|=>!ZqX+?PKNpWj?;mEbd=KZbdsD;=rj{HwL3iqb0cC~ zVmIROPBNpILR{2IQnZq|fw+yhmw2d?^ccGS_`9~p1Sz-c4ZssEY9v_dx2_n4m8aWq zm}9$%Ik}tk73st*;+yD!aaN(5;B~|vL@m|6V!Mq)2$SlG-}be8#Nr%9H_7c`-K75+ z$#BMXD})=}I~|I-1Lh)1m-?iqTI!RTlJ41NbrYSJbeofabahKddwd)r7-}1FKk=m- zWxe{!jRD-Ie&9yw53lV0M2p368Qm)xJ?e=TjwD0%>m~U-gf_SK>HwR`G?x%{-LBaC z7TBA0WF|1Zw~U6fdW&v%_m*;5LEPATT{$-;O#_LRdZ~}-{7Rq4kOP++2S4p|F3D2g z^!WpLq0c|S*Ev4M^p!k}Csyk#Ia!<7jM%NOjFF)byl&|3QC_OzSLJ*$E(Es z#6!eSi2ot}LYEhaR-VKXM@&d`BeWWM5<=ZP2|1V8iP(=giY^O?wGwMXpQTj==j72$ zTuXeG_%Gty#1Dv{5zi2RCpvEuzaHWrUNQgDSH}I({UrZy@7KSIp|0{yM-(@wOI zHuXJh&~r9A0I8lo|IlCB(fR(;E*t}7&fpm!eOKiHVxKnPFkJcud{8AgiY2$+h`#jO zL4w9$!3xB>z+jElwKS);)aPczc7uCC+GDWP`J)LQoQKJ)9Sa;ln_GZod!coW>Orde zx23-FyA)dk zb1QKg@owUB;xok8hg|E==A)`4mn~BnO)NEe)FDSr zHG5R~ap$EzBE1D;pVTy2>8u=8gbiC9dWOI%1?Mtq3)2yq?p3F0Q= zR^m3|4&v*?cZi3H$B4&?r-)w@e<5BVy2eS0DiD*1)rhr-^@v%-hQubs=EQ4=?TKB8 zy@>sZ!-%7Zw-cukXA>6^?GqD$O0P$wxZNz-ybmDB{-NgHd4-wZ8pCE1~ zzDV3n+)q3}e4qFc@dWWS@jK!<;sv5(f}}T&m`2PYwkCEX4kC^vPA4uPK1f_iTu0nM ze1^D#_&V_b@hI_g;y1)|#J`E2fM`;gm_n>WY(Q*5Y)|Y?>_@zrhz}9NZy|9GaWU~B z;uFMYiMxq!5{cCGIC4A|53kC!QjHP5g=Y8&OS^R74RIh$+Nc#QMah#8$-i z#E!%s#603~U~sIzZQ|Ifc_kBxvxv)pdQ54mPE0(RD)>F|7vk^4zle@Bk-CX7#5iIi zF`1Y~%ple$=A=pZR|9{VD03A(x9pRz=bvITK3~>fZ{+KhwXE-s*1sbmujG$>!N|4D zx<=SfuxAldvHOGr8wIlV@fL_V9$40W%lcyfPrSIP0heW^E$FKwF%KxSCYiO~T5uBD zPAHI>QenXvnCB4hF8B^9+E7zw5!sV4XRyb$#*?n8nOD+|*o$}zaWZipaRqS;aX0ZD z;>W}vh^18}oWE&yOcrxRVk)sNu@O-6b1bD9v~hhzEAv6W4ieLH^V9F zCgzW-3bw2-_&M!!++zNc=1wEU{1eT;5YG`0(AS?dn^VM%hZsk!N~}d3Fj%C2b3v6v?Y*Q+%}y)ozNEcz5C;;z(d{UXebvORc<;#>6(nj>MkC z!Nk$TeByNCT;fvVYT`!X^Tgf6H;Mlyeog$1Xccy;)mSAJ_5@}Co2n_dokXphPAnlV zATA-UAg(2DByJ^cC+;D>K|Dx2Mm#}0L;Q(&o@k7fxT1)aiB*ZUiJ8PE#MZ=)#Gb_d z#G8p@iIa%M#JR+U#AU>Xh>sB05uYG#B5oyaBkmx+PJD-Wn0SnMoOp`(HSrhX1)^)5 zq^JThiCB$Ti&&4CMQliHLTpaFhS;9ih1iSOpE!&-ig-J58gVvpA@P3VBgFN@r-?5S z_YmJA9wGjlc$)YF@pqyzUQ#h4g{4Dt1!84lA~A(nljtL65_5=+iOq;DiS3Bj6FU=o z5eE=&Cf-KOCr&5MCf-fFkN6OA4e<%$X5x#)-NgOG1H|`<9}!OwPZPf*o+Dl$IwnYZ zm5C|D zI>ZLV7R2_%?!_n^5CaS(9?@nyOkNAvB(NyN`+e-ap6i5C{iK4%Gb$b&oQ_ZB{ck>#O6 zS+PD|C@c5Q*!>8u_Z`!!VfQ$O7`Z2-cQzvTllAks&W-M?9rXJseQhSbNYs0qUli3# z*X#YVvw|_{GTt?qQGQ<3dd3vE?=nNA10l84$cx_=aR6~VaT0Mlv4psYxQzG^aV>EJ@fqTaKeXU9LBu|FS6x91Iqh`wf)g6cpCZg92ranZ)fxNzc+Ng^FlKR&&Ad7z__X5uESWi1Y9{-%r<#i2Ux{kAm}80h zX-;Hq)OGBtIqMKk>YVk!$o;5#bEJM|&v^>=xpTGx+su)j#*(Hlz}$7tPC-1=zj$Y< zY~8CoS8A8u@sqi_p=!-7zeltuTJog%+;BbVG&ipf=B51w`_gRs#XOqkLgE7A1H>*f zMEW?*&l4*X_XC4_*E$vYiNmaJ@^t&?T-nY3Vy^5p{Xp}dG<)w9`-D5iKJU)i2tn_$ z%O0$(eZGQ?UaefXQ+DT$wUjy_dvqd=tt+)%cDm}%J5VLBqy@1Xu`h9Ty4Vk=c{FiZ zJ+UdEc{*_paUpSFeUUyy^KP0=zu5dv^AoVw&+aWX8c!$XNq6PCWlLclc7`px6l9H1 zR;uU2^7KK^ipxsNua7LX0eym`w|`y92dO8Y%#)UKlK9oU?XdrO-frNZ^IoglSY12+ z{ZO8CoPQL$^&mbmO3cpygZ;yR`J2(MhY?2+1H|k}vX44&h~VV;f-``Ynmu1?&aL&N zeceOzb9|D%YQES!ODvr)z0=3U{=V6m|EJXuzb9q)7$qgS@%{WbJZt`y_$Sf1Kx{n3 zoz=t~OLIIig;U%v}-(3 zHTaAb=PMTUgw4qX_4xEtw?28^J*&6uln%XXGo-m)p9Shsz)W*mWx#Ky#Hh~0_(h{K3o>Wi;|#E0m2 z6zzA@=569s*cfWT-FWX1wJ53{S`f`A?-u>PC!QzjXI1$NWtU(!aS8F*-7@lOH`?!c zpI)y?ySuP(a|P`DED}s0)*xmQ+Ytv4rvXKWKG5O8MH2gCz`PR2VyQE4%q{}P&>X*b zQ9ZngOmm&Z%V2&B=b$Y0=VZYwKIv<)ctyQ<^~OYT*>thkf0!<~)F*fiZMrU&6==gL zhtVF#EW}<1_QplJkf^1D7EApM#II&(%j(s%`^<5$&nuZQN^la*DP6@pkLHCyJeywp z3DUB5@d@al_ulomBXvIb^kn(ssQSStN>c0cO00XN9qH#R`gDpO-}N{(5zoQp35ev$ z-^hWo{e#~BuOcDXqkOG<+SSi1$s#r;wj{PEb^!+ajlTCto)06Ay+>L^AO)8)YLnyv!=+H@UIkAR&Utw(5)vohV=>nAnx)J*Ek@t9zG zr`7ugdk)Kp-R6n;#THU7wU!HJ5!(_^=7`OKs)C}q?79dZBX**j9>hH2AmVW1DB=X- zBw`V97I6XbUgC1%QarPky%)hFz@WB&PuiN1SF(P&;M2h12^n1j^|QRl=S2F6-iym+ zWZAVmDJNKC!)^@q+H%R~A-#@Zd^{QP6npJr>CMhBmnZxB$&P+bt?h4pxLN&J~;JR;IWVqIc3u`y8c zT%Pbc28hm=d(N&$z1@$9o7ad(h+jM+W92!bbG4YOtLxHZN|D^|wpyM+ z_XA2kNIx*Jem(T|yNSOO1*t(Fl}Ki$*w&kt6A(GX$sl!&fHpRbmg?GLMEhW0njQESAUv_|Y}(ws?iF3lZ? zJ%|H|Tu0nYe3AGj@e|^AYb3YzXs&05awh6h=W|-t56^xto_EQ) zvfym0-J@;MMmj&*1Nm?xaVT*daXRrHV6X-rt=}OjucXyuf_qkX!1LK~d&K<=kIVVD zA&(zwgquw4daHNT4>igwxdrxlC8L1yJojUuw8ye7XdU`MoQ=6l`h1zamz8#HBbpzI zDc`dG#40$rzdEb%kmJUZNslM08%yQ^4>Y#a*2g8x?L>Vl^3BI3wBy9@Y2V)` z``db6bYQ*AFgrJzg4NKG_0rpKPu+ZVum<*hatdaQLx{H#rxEWY-cS5`qqtd1^A_SR z;#T@l8)I&gkx0+bqBi~KYODn|eG9Cy=_g?NreA@XoBjkg-lXtZ>}xi; zfO>S$^F4i9qvIx-@Acjk1!>ng6@hYsF5EhvZ5nI~=bk!_9>dx!7`b14ah=g)`Z}D@ z3-(~rFO~JBpLbk~x>wd-pRbT-@n!8VwyC-q?bKc`{Fq-poGY*W(>F_L>J=Z?{!02- zoSxb&eaj#NR-;j8WCI zH5*4JW~EA9h1JLMJ}b@UgT+!Jviqw~RD3akE+4C2h<8);U#V+r^Jvm`&aY~^|QGIOoK+03NX=fbS zX+v_ph6>nB@-tQC+e~t>rYf|VltV2Q&ntya8&VGGD${0?^BJm@&7}NTkq~=n?2{>5 zRb5d8f2FZ6r@R=!K1z8V_YUd5QrEeZ17Q|>A*H`!1*AV$jlu|4p~ewhx7e2Pm3qZx zebvuq;7;MYBw`)@GtvrrJ#Qxp!QR*KsSsXJnF}gSnBy+jdT10C}pu<)|eB)GExnL#YLAbQbpEQhvJbmgWv{y81tlHX4v~H}%*-TQ@Sgj>1^=74I!{rgOd7frz;_|F5YoFF1?D4B5 z%(=+3Vz5`p=73#oG*O4iBtNe)a@85KQsc(7jz%k0y@~iMHTtI=!9D#sWOLM*v~G|! z*D@t}eT`~wGbxAG;t79Jdv0*FR)e&R`PoKIvzg>)8#UKvlAmqWI-5y;wpE*LCi!`- zdedf-pVz7*Hj}isQ)g`^x!X>~;Zx3t-6Of%PE{wH=NVe-h`LT)ZL>hFAHdq$E+v=R ztHETFFF%0I&@v@y?;ru5lg)x` ztD~2iqM7=-wqNy8n{4(Y*&dsnCu`qA!d$A(*WTgiqt24eQqk#t)mOE@M$1ytUv>0V zBgkf{x{%$Zez)1xWP4b(XQ{Sip0?s|mg+&4PWGVcoBpQbCK2FIT0md3zb2>!r_(#* zW;Fd*8v9-PAT!K+GO5Xau&=cYy<%T;sM3F;*?e=Da$hT4yBw}6lbwdk`Q~tyMkc!4XWp!?vsrS+ zL*^~2k9J92ZdK!KCc50J3T-C3j8u!rbPOZaaxJ4SBh|JD*(mjDNH*UbrPX8(t~W=k zcPN|Z@z(jx9HUOzEUC_4U>9uWt7AIHsDyUnb)M&%I$p3$n{}>J5v;w<2GqFxL zcDzm}u-|QVwoZ4jO4n&Ut-5`{d^St0I{@rzvN@hQb%#60tFAU{TXz&#KilPix)Yoe z)a_cvlAfTx4zU8rE@+o(LfvW3fZEqy;+v!9)-7?~u7y=Bra=QYY4%1?qlwVoTNMb(cCPsqJJBs-NmU?3|)b*zB*m>%jOyY4xD` ztL{eURF%f=PS{pwp(ujCQdcLRUrkfjP^N3hG}Vdhw4r5%Wb@P~zEsyVwbGV}F4NRT zE%T^)KG$@$$7b>MvccZ5S)F>Rt|E2HW;ykmfPJqS@~nkxhC-()x~SZGopGmNrp?;d zYlr*ZN^B;h+Dx^b>_JbLdL3Oe)mfX}1U5@Gyg@=)T4ngl&sLZtM*Nk!s`;OFg;}=$ zW!Ifr1le`|{jT|{J^jt|$jEh<8l)LCs|$9!W~#sceb?RUQ?glVG}uBlqO$}vOU?3s z>RP1Ix(QpV7W+@T?on&WW~p`lpIu8-mF^-dHAI(XYEKW%M3?(j`<}vPsb`_fgDT-h zEfdXFs5g3P*{l9PT`R?izf#v>zr(_n?))oto$`CFRU!7PzmoMxh&eNptkofQRb~xq zjq2H3EJ_UtWv%LMGYMs#%Cnh-@~G->GYRD}HOOWX%HwJ%napPV>IpT9Oh$|P))Q(j z*(`NUW~ytw+N@=&Q)WYJy?VoD{W5c{4eFH5MrXFMHYyAs_?xGuW?pYSsjAy-PG&c2 zlgcHVrIuy(v7S;RY}uO3f!1cV#AZ)r-fV4AyKJ^2bBy)0I%Bi_nYUZds7ifx3?FAs zx1LqGHv2jAPV0F!&SqxTVr!dvglv}jIP(GP1+|^5R7sv~SLt~YN~w}O+o2}fO!91} zT5B`OvzOIbn@OJSQt2F$WUPAB+N}nK*e2^0wLQe1wO&=Z{Uio)x!u~M3PWtK^_toc zVsBcnt8F26(AuXO4Gj7_YW+*~2(jZ+@8fLR+{e|w&)pnb` zo;B0`g-RHuT^`Pw=RT<#gxC`Im#S-sJ?uWCMu*sX_t$EP&A!Nb&i$QgKU#KdS0uM5gQ6PpYTQq@Mk(=Gsi^*)Qs>&7_{4RrlYf{YgDLr#xeY%~DC( zZ@Pa~zuU~0{ek-rb@g~HYo7hN`)^ffv##0S;?AqC6SQnd_HS;dalg&RW-E_noUqyS zY_G?I*QCVdQZ+9-!4qxtA)BREWY_k@8uy1-15ccRfenAN)Q0RfoXS8lCA+Vux=~`YquIkesm6Ajoz5QXsb%z;qFtWLp6bak_SwwLneFizt)^<3nX}mA zH%=95mXPzXC&xH5O|zOgn><$=eTp<|p0m}{#MooAE;+kBxyG(yk7~htY~m&p&T8`q)h7d^Z}y zY$kKQUdALcJ)-wAW@;Jde7%fS5whOKhLCK&+1uDgCb3`V?PDCZS#m~aZ(rk#cF7s% zO$M(!$C^Z9zsZQ1FIr>22eJ1v(#Uk|{S3dBG4_5&rwCbpqjyL)-|TNl7&6A4OX=?& zU<{*d9#=L4jY6Br%4VQ3*Jh0xbXJ3mRW@tYpgY(`n_b`Fh#G9{vDr-xegJz*GnB&* zYKZY^hz;}N&R#qA8`DO6Z#I6XOz&&l9FmD&g7=n?Y(axU@2y6s1rm(bdXzED zW}@{dW1P)yYV@Obv@zFa!yEkywuDUYv5YbH*|M?!A654r*VFk20Q`K<^*N_|y6GFz zO)8fWQbtmigb-q(Z6Rip%dBB0r82jowQMfg8irZSC6+DIl6$s>ZP{Y9kh!(Z%;xue zp6BDNU;n*dpXYYY`E8-QO^H3*8naDx=y^w&W2#3_Z)2{hkv%&Z^Gr?c z*~NIx)LXRPd{e7?h8nM%+D>B`rpkLp7;l)W?HOe(F!fWKz(eYHDlfTqDcW!O#Upwy6uDnZ`0xw?gxb z98*TGHAb$f4!w$uJW~UEZ8Vmf8sDqbc-z#XUOSByrrznb*H~$4U#~;PDpMzVRT`^J z-RO1PSYzr*ud_zJDaYQOECrUGEGMchu-(^McB5dsue0ny!FDgS>_fqJf5&nV1>3#I zau@~M{awou6m0imOC<`n`+CbU6m0kREY&F3?(bVppkTXiu$)H0cHd|@hl1_C$?^>f zw)5~Y%M}!C_fpF>6m0j8EWe^)yKlAJM8S67 zX1R@m?Y`Y|7X{n>W6J{+Z1)|OKTxpUcUt~J!FJzed5nVX{)y!Y3by-hi}*JD7gt+g zyMJn-(+eip?qwE&g6+P?VuOP1zSm-pg6;m9#R&!5eV@ez1>1eU#e*qZ2Y zi|!eMg@a~>g!j%gT5F?GZpNPLJ5qHAaQ07kjTUj#CO)${WvO7wA`AP3*_^VZt$=0VGsRPuC8(S} z{b{TiRoEw*sti@yCyuHH^+}%uss_{-ea2EXqu|`dX^Xs)^+2~#C(CI|J(qB<&qSLu z7ME2lCe-&ywK;2vN8RW%!{(etSPijE;m!4(gP!x8|=87c=RT_5E=BgzhbvW$2%`cW~g}mg+upe!%TTIOBz$QaHy}J?H`u%k9q8D-yXJq zS-f_Da)gGy18g5#Vok-{KC#SW$`=0WJJD7a%P{s=->J5W*n%^ ztu9u6!qqc8&(=mv+RgP`c%iMG81@+`Qy3q<+15c!V=54)h3~L+5|=P#3$KKKYU?Z} z?}L&B!W-cSZC%8E`?(6J+(eH9plo4l_!`4Qe0UJV&q}uyy~?@Z>~dSNKNB1a-=T`< zqDP#+*m{byP*(q&wpMWosyX~QOFOaHtmkaB6L)aY=XEw3?Zqk-Tn+3Xh8%+aa)d|W z_ia0f@hBFpxQPMIuiGr&ieZ?dcT>a=PrlR2LN4S`ef~z0lVii-P4p-p9#k(lD0v9g& z9pSyhm633<9}2FFgo}fj;8=K}U4%H#6us&tu4IB7TxJ(3?&J07HMg#IgT=cjz27=2 z`3vZQU;P*?rZVwa!C*1rONix=U{*2>^=!W=W3V`niT?*YCl;V!?LH@NK*5@b6%V0c zO~i^-D7dyXM7)B6wL3&?M#0*R6ZJ~yy_&$>82y42oSN68oXxx-Wf?JPNM+ z(s$USV9gH`vr(|-hlyL5U=2nY!^CnP6JWgz7cVh2>X0GBMcbnS{cF@ALxziem|*Qj z8Nt%#k$CN`3_Zu%Hh|Q?#ei>B4F{qbAzUjBuZlvge z`l;VRsu0w;9!Km(iP5MRdK{xlK;7(@Mc=%ij{3V_4Apj&?Xy`zqF9CM^lS{(LsS%v zjS;=7c<*CqY>b$MN_+OC-B>XlHUHUjRC%au8XG6}_?p*ym&V44(J0stCW)oh5GxXH zSiiGN5@Tz4$sNzu+l?1fP!-Q!rJBi9t)HcBP7t$E7ipUl#C#@x-TrxTI|{DbKQHcM z;&aMm@mD6;D#1dsNKUZ+sBYLLi|I^!8%-ATxab~ih&Wj+jv0CfI+r zv!5!ygtGek*-sPa@sjL}#B^~b3VNR|7Nel|8RAYR-un#k0FSZWXNcdnioGoUWX5vo z_jH<>p!c5kGew6}d>dK)!|h)Yy_xv3&l1B>(EBVg8U?+li{qGh@9E-;JjQxY7vE|X zn=QU=#&V_EBJ>7F&C~i1v7ck=js6Mtb4?ZWA7?+$)TjL?*}rD$SpO;Z^G#juKhyqo zQ@8rhwa+m1xc>tCH%!?M$h2Qz%5y-T{X$dS1`M%ZB)-GOS#5!ly(t!>U}THM_fasi zx5P~-7}*kW3kpV-DVCyOWJ|?uC>U9mxB~?v%N9RD!N``0WhfX~j`$f0MwTlcVB$yc zdEysLkn?No^TZ!`NdZQ^T>KpcqkdZyPP26_z^GS<$tdW3rMQv_vY^O*mG~*j>c7!` zwOGl-vmjr*gn}%{7q6ip3kt-COgsw;MClCl$NvKgL~kY@TPp^ev0Q1b*qaHixCaaC z#Av1hVd8*2_UpvQOhv+s0sE=K&O)0-!ny&6?F+?pCKz?4{X611l-2*ZeUVto#7A8$ zR-jJu$oux2O?8U=%f7_afJnh%i>XPGn!^XC=0(~&d}t~+($%5V z)RssuhmTB^NBTN!HB}QCWq9!yI;* ziW)fD;S*D122OC;Z7OZx3l5)}dVOG;Lz$`717|txG4<)d`3`$c9Ub_l!)KA>T`z* zQ$<2YF95WR#=z&9( zsjxwh9KJRcH^|~xZEE763--rN%^yS@YeY|$k<}K+!5Xn03Ucs-=#7FLJSqC3AO}y0 z0Vv49(_&{79BdG$pdbgYh-oOu!K>oSD9FKI#8**}gV)5_D9FL<;ye`O zV59gt3UcsQaRCZ)ut|Iq1vz*_T!MleyeVd(AO~-WIVi}%W^p+Ra`3je5(PQ_Qy|CfWmi(6QX{~rBr#*Fh}|o zYgG5>0gm)L(WrsZgB|IYm{H@ShdDkm^=fpYqaZzvEsB2L(PC;<^ox$7sZG(-9VJtr zMW;K;rjACx?x>jhE_$(}YU*Zmwxee1@8}hd^o!y+7TcJ$j=HI~G3y=a2gWhhHKxST z#?-KwZH~64CdTY`v@NP6La0s)s*evW=A(u?FT<_bT`#w@FPbLQ;~x$PHjz%988=%O}#kS z!O3cB{$MvJFH>(1Zs*j_RLNjJr}n1G1_wKJFjYCYhm*Id^MhZMI!Yg7enQsyNV`yw zb-vQ4D9AcLX)g-0&R^P(f~*UW%2AMYoutoEkadC57bwWO&eBm7WL=O{g@UXLmX4z! z>q4ZHD9E}l(is$FU010V1zFck`W6LQ*Il}Rf~nO;&-cl0^vaXMG3k6vhCjEwjtm`Y?LqXPsOD!nKx(Mk{6l7gL=@AOD?pf&{ z6l7h0NvLI+Wr3_4AW105x=2YyLDmhFbQEM=lw^y7tQ#abpdjm_C1(_5U5w<4f~*@X zd7vQco|CL7$hugmJqogJh}01USr;eyp&;vqN}W)Ub@5UV3bJmP)CC1uH(ct@#P@t7 zq%bCaZ~X`<0tI))CrJHKa5w!(X&?&jrXMXuqu_4(MCmyc+=V|zibKI2`eUVGOniQu zB#klE*C|QL<04IiKNh%27YZW;;DE)uJB6zD;!vr41=?N|qj@+=gV)uhqGn zhwYa`0*1s;d82v{8Bf1m7lw)%l0g-XN*wa8(X|ZyQ$vD<6zTCdY-GZPAv;KlRnN9q++5?z+=7sp0}x z`?%XqX;RTe5I;XZT`EDr`S}@A`uDu#GjYN6>v)Mj@se=8@nz|B0~cK9nkhwJ;eu<5 zuSj=MaGw2D>2DNVMVuuGS9wXeikL3dpy0aUY-!0aJO)<^=SYs%K=dqs+#gPJr81@h zVSJp$dA`)bR4u@j!q=rs*Lgj-8kiwPH*&$%z&E5)6kH8lAT9cp$Kd+kLMgI|3$Fhy zl1fl;{qId_(G4Dh>wk--gqvJ&#qTZY^ery9j<-beY6fKruf`GQOv&pu*P^&JMwXOp z%Gt=4N>O=nPR`4uYp5c+cJrjWcX_=nOx_Pb)dE}_%#%uf2Nekis%o96CsuvKm|hJ(2GumQVUa#@L8AX&hJRgGH>O>F0-AB zq(u6>Aha1i^bO~CrEHaJ$k3(E#ZoycY3SR|>!m=Aw>f?2I_LMKB-Fy8#m?_bY4oNg zcE{4tEzTRIK>8#!=$)ZEoHt8Ln2Lnbq5GXbl=5tN?0%OooJ*zd^vOu*{qWFEmXD+s zdr&47y^O=-JpMr%uoqiwc)@Gm7?9BVSHMB#U0}_Ex+t8)GHMDb^a>>tB&o+mpNG5*0 zqe7aCg6kbeq{U49s=^mfk38(O_>*>DnsSWK5=<#0y+JE^4`fjM@HSscrKqv-iB!9} z=sJ78O{H|o)QfG7O3hrtw4j&U9FuHa_^77^&1q95g_v5{=If`u)BfIWQ{74hZH`Mr zSxJ6YrAA6(DiEf}zt^Tl$}?5k=A=}LdM&=R%_*spsfd>Rq|Irm!PLGsXC%QD#saa5 zHfJSo)N8clIVsZAzBaW|im8e==cOe~1;X<9sy5$9r!iI>f0C-%R9%}oiQY!XdMJ*+ z(&nNxmZ?D47JsMBk5U@O_Q#(PFH2RX9=7>ex@$^wxgwRi^HzR}w{iJJYBA;Ja$Rzv zZ(pEUK=azyrBUjGvib+P{3^wwn!|gz+>lbZ=r#(Yn!`o&dVtGKDI4`De6Y(csT3te z40CCgzCzj1S61GZzC}4l3~;$4U1Q?8dsk}TmW_q>FxBOr)ZG-lnkyyzpOXGhbN){Y z{!et_=pWo;HrwUCwA76CQXWX~zHqwiw7+1X#mpBd*&=Oi75iP&YVoS3fxn)oz5H zYbQAk)pLZWYmi)wiWR# zIRjNPBFQyeEM=EU*6_NBh%cL$YD&?0?Z;a}EMP|!2 zD40bqlT-b9Nti|E$Olm{i_DdOM8PaFPj(F8C1Do1TpoymS>)UDt03Pj zK8u1`Cmwel$x%p%vx^(dG{ z7RquUZxd#b@5rGjm_-)JOHnY3d{_Pe1+&Ov`3eeVk?UolGj9cEk?+aFQ80^qUtWZQ zS>y)!HVS5u8)eTRUJquGo8({=%py0-$tajbmdJ}xFpJzG*P>t+`GMSkf?4E;@)H!y zB1`3-!Mq2UMSdhlqhJ=fRi2B2S>!f(9SUZV+vSf?FpKLVi}tgHVv4N97qP z$j`6jVie@(F?lx%^0P{YH;_Opke^@6E*P$Rk zzmd12AV0sA&!Zqe>txc0*Mt20PHvBa{JbEKML~XEl$W3&KQGDeq98xNmv^BcKYx(B zhw(NcKYx_pL_vPm%XDSJ`lLq?Ic}HbLKcJLrL}H9$p=yN8BMpJupr`x#;oIZnvwl+!y+TJC^pl{UZCJq=*W)YjPCICStwYb$K+(IbyfluW~9AKVE8* zH!;DH_;~$>yo;A4&ZBDGZpu|m{CM}KT+d^4EZ@$<$FWEbSjgu~|=Ke??grfHXxc@CDqMF0q-2ahha?u{Vs1|e4rS*0HSI$R0 z3J-FBBA210h-cgd=R3)vaD>bMyG-fCb zs0JD{lx7s%uVJIe&+>H!_iNZF_FQzmWC*rO2*#ZKr@7lHBT!cVSKaNE6sAVqeRLfC zCh`(g$I)3-g{aWc^W7blZA|<+tfTS;7hTt`vZHbq1v5-1rGW|ZY=OIzBJ^h?6Qqbt zcW0$NQ82zyHChIa&U1HH(ol(`^WEDjc_?^7w5?Lj z1pD$*cTeRp7k#=bSZJrj4&c4-9t~!;Cs+&d`r z!5bF4F}lLNqtc905|6q2DA_SQ=9PHT-B+nY^-ZMr^C`k$9*a&47W@@YCK%aycYh^> zi@tU61vx-jf+a^KI#AI^dsu%{661sbB?L7q5lXh8mL^_u4^V1idC7MYf1-*W!u4_D zb@xt+6bFKBG+gMUxS9$U0u^tj98!~b%RNvD<6UZG-8@1~?HSkGqnD|gajtT2Q{Rny)}xQ9+v9r4VW$2a z7by2NWtSA~5pJq|(ol~GQ@xT#dGs?Cn>0aw*3|f<^X~nX-`KKOTVQDiDECmXw2?{+ z3YK=D@+S(GHcEMff~6g#{DXp}jaGzVu;!~Ru(UCXgo33VtkB2HSPYi-IYmdo(#9&b zC|KGdiUSIkHcoLy!O{*@Tv4#J@rnlumUft8MZwYzSK6asX-6m>nfN*X1SNzihrE$A z$s<9DMr9?XQYCY-|Gxxf1yi*E>t&?!4hq)9C}lGW*3xKY9}3n)qVfd_*3uZI1_kS7 ztWt-9^)gQBGn}m#0oF^B5{-g2FJ@E<-zd|8QS${~;F(#}*;QDpobs#lrdzkh+pD@rDh zQSJ4Zr4%#48*M)Kn4{EjvG)bdG1rTI`{ykGX+nEv<3D+i&l2XEC3}pIX{Bfyn`g!* z(%64mKmMr4Yi8`@@n?AxL7GhHPCu*Ddnh#wBB0^N#yk$pU)DOD1oRB&&N<@ zpt{mnrc#WGps`G)2^C9YOBFJPw=$W=mMTdocoH&8$w0xAkXcF%YCf%(tu&*uXuWJD za4c^npT?Fc@uSQ7p_ zRw{Pmc`NYWu~PA1g5#H8Jyt0pOw|JXkL4?oJSK!DgVLDRQQf0jIRRRMbCqX=waN)5 zXocQes9g9zT`|>5S*P4K6)Y4gf0^o~6e_mQKW%fi%R7oY6K}If@io;;DN?$%D*3L` zkH_e2qD|XkWira@@7Z>}lFr2MP<&s>L%|)2?<<8UxI=M+vYm+^d2CQV<1xC=8Y68` zYFouNDnFXBTxp}y!~`?9u5C9dHp#FIIrPblUTrrkUQE3AElMZ~df%c%qM-K=l+jGQ z_YagwJjQzeKv~!-_Mwtv#&V?(l|m-|oN%eK3$=0LNxM>|3bl3OIjXZv(8KVyA1O^t zMZ%$pW7}?1PETZ`7QUW1x$So48dH_!+{7tVbaCh(pQnDT%uRuk{Fix$;ynpez}}X! zLs`gTd>M8qIZXU`aEEdT1xI;1p0;UsW>R|Fou(QmWeGc#DpoRwy2*#BY*AY$SGN5`@k4zv`D?1~O!T>O+QV)o83n!XR`OA>=i9AR zpx~`-yOq04IRy5}yA|>x?+^CLyA>DIg~@L2pDI03KTr0eibOR{KGn8NNkToGJl7~w zQc)x&OW332quQpNZ@WjSLUl^HNL7!5ed`|OF$(srdzAQ>_*h`yx>uQrf_>{=r2+-} z*3XoB6zp3+Q$kXCJ=nMIQ{qvuZ{4SCK*7FszfysMed~V3b_%Zt`_=H_)7aNaB5D|oeXW$D z#?n}|QiXbn#;O&UnY>;)jU87)QHyEpxRQ-pNnV6g>y(HR|vi{+;py3Vy@CQ)V*3FXiR77nBMn*bCojds)%uvi_+4Z2Pm~ z$CM>lUkVnkD%+Xh*S@RWRi%QLq`&W=1}6Bmw|HJvuFZ#5_^?Kb@_`v!;BiAKL&3b`mQusisKc44TS`3&&P3f(?lN7`Q&S-(XFz{f z^!J%OP<5&OJZ~w_p#Df5=-I5qFu|Ij&-5y(Ty!pTN4TRDF*RD?4Axzx1Y?iFpYyz{ zRGJ#*c~5CTNfDzw?<@KnY-t7Oh&#dq#fz!Y0%x#VlyDTB!TMc^N5L7aKb7eyI70eU zna7kVcuW!O9xBC5S1j$PBzgX&RH7oL(D}O3h?+=ae=EPC7Ec-I`B?b_wTZU!uj06X zZwL6bf1(7U;Me|%(u0exiGOrK9boEJPf;Ds1Y2{6sHiDe54NVNW}#qfYHA^>Is8pe zUERe++dOXQ>K9yW?HXz=3f8BMdKU$2&{nly$k(7vL@!S}wF3&)r-Ry^iO&=r)tNj- zkEND-I;m?=R{wlYXSD|^=l@6yyT;vF-ryuKI#wur(c=)nROqvg{epwKlOyCkDC7`jJimeMdh#BF6LS> z^&8JXwG#Eg)bBlm)beZ|`)ukjo*}B&3eY;?#MIlKUDdQzTsKCxc+w9<&_9XYr65@8 z3+S1uEk94)>=J6qGEKGiGG#Z-$r`45eYQnS&_I=ez6us-i8m>-4 zS^Ya(Bh*<;uwR;F|E#)%$Al@tzt3iXfu{8#i%JvIppnW$ArOZ z1{WLkV6_Zm&iL>Wa7&(LhZ?8Y#BzV39VuY>hoqSS4v=84362Wrg^!KG*vfkiFK5z zJJWKlqfH5EtF4KqywiN$$C&D!_KtO|sid?G)^VoN(>}B&nOc^%+ikq5{4_833F=ff zvT6&A<#}~F3dWMG&P2gjCaSYgFqTQ`92AUYviced#*(6DpkOR7s0&drmKW8YC2 zY9Pn^@(wIiy*`=1E9;C%km2uJSzQa0I6$;sw7KG{htZC{HrfLC} zXu6ujlqon)KOoFdH!#sRi%&mdeOY~oC1Gh_Q6Ih!tz-&areAh?RrT1w6+ZpAb(ZR~ z5mX=yonC8ASCdg=reC(sRr66P({Ebms|lNUy{XezTVGeVmvH4!WvKENuHxyw?r*4R zOw|Icvju9x2N0_kU`;Gkt3Cwf2%k*9XI-SGmU12I^2qw8+Q5`49G$+zx>)tz2C)L+ z{B+6dEwuvm({#gYiE8^XkKLSp(J4#q$^^f@u3p({G811*%hZ`Wpk$Gt&+zifQS(ra zGdgNcB3zmXBWJ8|ArGjX}Y0_%=0#i60YfS94HsO!To@ zjDlmLo$7uR924zSE1CE)(Ju8G6F(;UM72H4mcatYM7z}@zhD6+yL6eV+-|M6j@5EoEx7+?d_eVZWO8Ia@v!JE$fz@$(u7)pRCa z@}T-htCEM*o2^P7qMu%ZR(Q!nYCIF~?{hVhiMRQ=n%Ju3=jyIjC6A~jtx6tI_q8f{ zMD2g%zj1!4_F&>|eyPSX@!r2wOInpYsus2?c~srrs^n2s_~O4dkEt!KN*+@Qi}5y( zsVS{Weyt`l@!r2y(^{4MTHV*G zRwYlV$*oGBQqxcOqn}`A4Kd2W`&Jp8`dbNp(AK_kBeZGQm z!V&Hn;U~2_Qw|a4)CoVUu_&iGcc>DX_*+OC)C?57f1*L%z?3QY%mL8`>0gyyXQrFH z6}k*Fy=m+i^jAe7c2#v}g8z=0-d9z>RuM4DNEQkXQlT&)%$DK3Y}{Y zZ}UJ+i>cFpXyyEe*F2DN~&2Fus3l2rMjTt`16t4iHRS7K2m$|7(4!aq>gA6`&*r0#&V^< z)ifqJC%(t~vAP0f^)L7SN8P|nvbSwKQTL(XocI&95(T{rS{)PbUC@5!G1j}FJ#H1V zXxeeM3^bN2Su|%Rs5i-8)clxo=sg)z+Dcj^s{7pI-m>-*6F+8Gv~(V$qdw!UYU@x| z|2l6?D`n#AOxG$IZqZWpeA{KS@(Z-@|BGNkgYSU285yuUGErW^gTLZMcOnl$kNvq@~>B!b}4Ag!> zS^bMTcGg;WN%sE`tl6H1vG5sfu;zh+%nH#$n0WStXnlB$Wmbrm*ecdVn{38%r7qe` zCirhW)Um6!24(fH?AT2!;U(GKVb5rlC^#qgj8=z&d`G0OnZoA$`qpx7LD!vj@Gk&~tob&i>9meY9~XtAAUcFfEOV{}+dAOHlA% z9ImZI!McvnN|^Y%j?i}U7+cp7T1~51KkZvHmMits8klm(ocVFWv)V({lKI1_~TXX>5QNkE*7zNG%mrM`Mv%I_m2DEyC;$H&qQ(FIbbU_t8KTWVS^cN_ z#Az93>{Xw5t;meM<}*wyMZwHwgjT`CXEr0WS`=i~2<;jZpV^Gi9-?4oGeV=UHKb#? zqQlH)gyxTenN5P$mkIv+J6T3)NnA90oQ=_1Arqh3Bx;W__9*;KpG3{;Pqsw#?!{rA zW3+xKDI(ivtTqMZ9N}z?)0QytnN54$ zz|Qtg)Iv}&vzergLcz>tvNiz)Gn*9cMHI|zUep#a@tMs_S{@2!HmO<-Qx4ggvB_tO z)_^*YQA*W}I-0T5XR0Ru#kc0S8GEQ4nHqI?u5OwZh_UM#F;t-#gD3FPw0Ml&&p1bw z#Ds5|)>iNs-43Nb)3uFE@SjueGeaxqF?wwCmCsDAmIMb~v{Y0N8cWv}p(1H4UCU$26o$WX(`U9O{KNZ$durxr9w@k{ zW{%b!1^3j<(V|i8&LeFmirsmn?Lx6TkF+`zyYonM`4`7Y@8x(+>xY7SIbPEiG4bm_ z^R@LTxDGU5E9E8Wnt$N)x>n8vS9dZ!7HFrLiiBxz{NuAglb=8jMZ)V;3$=bsIdrRJ zdMwgXnP3~KzKgU<0bc3Bk17{y?^w8C8!gs8VdB5OZ)p`wjqHnYOSC!^ypeB-)_{Vq z!ewd?QSf%TOidP{O`c0jwLVPHW`?j-8^Tmg_q#*HEG?18*q0l!wb^D#58rGpn~N@O z2j68{s03~1P<8Un(H1ck2nBC+_s!K@wWNL+Pv6e?z?=-KAec#hc zP@5-gqS}S3q&fJ$R)soCbMSqw7FADU8?+|WZ5rF4wV?i`v5gviO)D%raab_Lpr0LP z;@_m(q(!6P?uJcT1`6_XlU9O){M@89pdddtYs7#y8+FLf%~~u9u0@t;Q&5nDC0aTY zY`>3uw`kc+kb~>IOSNLABEfsXr@p0HEvh@!M;ft#9*TrPR9m%3CdkNj-rKY^CdkNg z-)&lzEtG^~_A|oAT0IjS+uU>Bp*=yt^V2&uM?1bI;Q8rKv_LL8GH2rxEu4$~T1+u^ zYl$ehHu$Mlfr96!Kh^3{@ceX{_6P;fPw&y%*s~t!wZSRIXIcmft_|+f;+gpI;C?NS zDN9(e;H2*X&C8M3D_HQYZ@Cs`>ay=)Ez#7kz7<+J6Mtg*3++P`JTd*Hwws9`V^(T( zrNDYoN)~wd9yL|I;GXYSrs@_v^gU+kuLZ@PRi<1PKJoq9RLDZrui8}9LOZ|Xrp7LG z@vAWf?@vBqYR*Ed-$_$z7Z!P(GPP}?kKbui)eAj*&uE9(GE`e&)MvE{6pZ?u_9Y5N zU8{YCf>EE>zDB{QztL(?FzRo$Qz#g9opu%lqyA1ikAhKO(CSby>WkV%6pZ?k_5%t= z{k?V>1*85!YhdE-Up(z|27JS8X%O>Oak|Nh{+e*{tWLR)d1xZ)$ZY=>3+~#Ke2Qr9I#=*845Z(G`|~ z$C@=O6Z}8qO3hjz6ZF2&@3uA+W%Xa`_nVf?OS0bYYV%Og`(14b3VOe%6*BQ2?rEEO zjP-s`t7sLwuN^mIxzc^DjtP1%@Oz;BiL&|^`?YAq?Y}kuhvtof-v7`-P|*9IS|k(i z{ZDNukFnnW)Y4kT9%^&VSg!O?Tf&q>Toym^{!1%HbzGcl{YxuFb)~UKS_P^vjXlz8 zP|-B@x7L74q_MxXW>hMTJ=SD*mV;ytjXl;JQA=p-A1x47Kx6-Cp{NgN>|ZS&wTH(3 z)sj$^i|d3ZS~}|N;yYA}P+Lar@e@cPYR9O9RGYZyf51UM3n^oQ?LJ-?Nd=bd@m7`~ zkvg;FNq33dHg(odCYlFZ2HFb!t}|(C>Vls}LQD-8bTYtHuwampOnj>tq=AXw=V*}j zZP~V^W7#ShB!mgF;EJCONkm!woBV9aOfz=Z&z=;TvA_Hr$SzcKxa99ds!;F*mlL^$ zf;qYqd5D6UloPS>e7ZzBtry5ef8%x<&SWeO559lgkD)OU1idXa~yrnd(Bdy$ZK&_gwWZ;yJBVidd)+KaSn z&tq`>=|uuj@CDO$WB>}jVA_tvqF}$qzQQnKagsIC}GXB{b$kLQ&N;=0nm^%{1mq3Q>-k zF;wT7AP3|9{YVRsQH}NwARZmrveTok=PZFFgoz$KWlr!9B)gs}xlsuwl|E3iKp1P@|U~6MB+|s7XvA{?KL?d4(wjwTP*ZiO*qsl3h$W z1m>_kNjb(~4jW2pF$QzkP*Tst=N-L>L%`EfM;X0HpsB_Fy-75euzKkZ5=PQc?^E?9 zD^NR^F7OB^8&Ks`{YV)qG&$G5KdECXphvN*sA4-oe{f9uj(;S{V9FE*jy_~Wk%T~q z@pcDj62$vkm35xV8?`>` zlK*og4D~_QPgK#Uomm|%v80|UiyY3n?jK89F!ps;j2265gL#|ZWZj}M4<^3FhLCtB z_z$?}JA@ROy6+!HK4yab(hxD8Tw>yL*kR;%CYYgISBDWTg!MpGs}3h#Ty%f!88Ctj zKw14e1|*OKCVsp$ilm|7S9=thhk{@2(Il6N|2~W+Yk7?QYL6zLwu&W^!)7d3N+dN* z@N3aMU<~o>!k3-iLl7{QbZ3G#C)p>Fc&1DtB)faScyfe^U&WX}YOtQOe`LV(|{v6*_LV9t*lY7%h zAqt+{OCxe09)lxtIas%d*ekgdNaXv|8f^)H}Xe^znfL^aE3dkVEOhr^%0v3?iXlMnrJzyazHdPj| zh%_+e2;JwF2fRrhGF1!kyy%-mi-CHX!n|c&mBl2GiLc$aNI44D?h+C?n3r6>>_|W+ z$ws}qEKtcL+fkdB9i_2arfLDULnaA{g?iNjY=@D46aS9GCbAy|zYm*84GQ-2n@JN2 z_Vb$w84JDhCj~c?Kop$S+)QFna8`3ONkYNXfF z=-%zOfDg#eD64-{eT=Xcmld+YApdN+)9k7kWqofE+ zr|o10$|j;E;A657?A9h_}Q3Uq?(Bzw|+v-Gx2L7yGcF9!a65;?j|ive2aZb z=;t=rT7s{td`jA(;HxU1lI|$@s!ACdhJvrEl#vt^e5qv*c@qU+YS}~bQE>9jkwv_u z#nm@XC?^}3_%Ad^v6|F}*kNjfjddOuC_P|*8nQiy`y&yej* zyoWR7Gah5TpCPraVrR*ZW-M1aOPZLV_eq`35u1rm*Zh=DwZse69R5nDZ%8N?-O_WZ z26NH>xDD2CNfL^_>!VX0$w1L}eRTSc6rpS)rgXYMwxOIOHdrr_awh&C_dU7K#OLTg z5MdG@%ltWA?S3R4sLVN2j30>)7ahwTp`LU#^-ibDB$^4%C#UIG$T$?t`>zn1R`jph zZck20r>mxpVqx85a- zUg0I-eCs`OnkiG5nAbk=K5=-J$KZVHAH)j<=VJdPD^YO1^&u%n!MWJKNIeS9zCI#( zv!In6Qk<71{7p(wALsQ7{F{`c;K=H4Qp-ixbp(x#OlS3|q5>b2RHjVfP~Mcb|B?-; zukyMFJRy}#d@Tw3>DheLu$C-(2K$6gwE$~L)Klj27_1jb4}6UamQU92zRm?pr0DZ9 zxL_Gny@d&KVyLF+wr@a;-ie-<7^v%!T*AG)skXYF%v2ye$r~SNqvx5i$$_@I*Fvb5 zDMT)RInY6`TEts%_RkD-)qh1<{qq9d^oJ<;h4s)K-()3e@13Z8xaj|TeqdWY6!j?l z-9S%05hX=z3bg8TP&N^HfnItR$~huGu)SW$#Q)zr=x3Su49r`v=OyVJ??7Njy#Me-kbVwj^}ih$tT&*V!)*h*=nuJQ4<5c8g979)kqQ^a!p86stzEwi?15A9Y^wO(%NwW5B zht9qAdeqjpr@Hjkn^4W+E}i@6LMGovhu`+3GPvkCJ9ZA!eVMB1zV3_=u6IX;W(IYR z&=atpw8EitKRpfQxMHeHKYbpm-3ofAjJ^^Tw1VC#qZgz4&{%)H3>8gd{q+jeNE#cU z*P$lT*Z}<}E;=&L&XIaEQ#C#F71Vj49=4P(1H8v9N>4zoUlHdXr6;34STSB0q|Za` zTaiJv1XWFA(RwlJ0*yuMrKm<4i_t4k_h>9eujXQ78LZba@v%IoduQ>nNGtkxj@83Z zjw_<6qPSSSA$kH6uNS9hU`bf^p?W?FmVKzc0R`(iUf+j;bsevN!NuAfrk`fwZ4TFk zY(AEN&h&{R-2>IF^KdF3E>QjntE{q_clg=TZ7Xl+}N7=h6B~RCD;W&SUga zF51dWssmg!uMZhx^%~Tp@Hw5w=}jmp;*HKpy1I;wjJ`>1a_8~7JIXoYkny}8$i(wH zS$~lU^7@Q0QBUV3N!iLcVUnJQ`f}xPszTIR8k?-|LS3e@$@&2L;1t*M5@yRK1A_ z>X|)AT91&>ugilcuLL<&bTwu6LfU=b`qlnqog)FGL+#b*u9XeHW^F)jg^MO#FD_ zWxbXO)>4k!%erG8-|j!In%s7#9>~PUGE)y{;w4|vW3lA6RSrR~>M5wbs}k&A)n}p_ zSGfkw(z8+bSBm@wK&IQfZ%b9o&v-Rs{$zWlQeivi#)~`9b?Q$3= zFF8l|V1i@Xkf6DG1j_2)GiaV3&r7l+>iK#q3XZ7f>***sqJCY^X5#DRb$tzw(e*M$ zdR^buDwd%iG-J6^hF-;#Luc$=?cUJqQCn8W32*2vsNJiFQweYLwfi}ZEzmtsH8i$B z_d|WRn!c4s?}xg!I)*A1^?=q}q^F>iHN&Z9qTJVv4SG{ALHVyqrrL$-x#p#y#d;Mg zdJTQ^j(!(4am{oZ^IO43HkZW`m>St}>ta0{W7#ZLhA}w8U94Z@F}gLU7>jjzCA6|m z=rvwHK{nADr ztD>VGC`V6af-D%XFV`dzsj07nR_k|7oe#>_V@r4|WAZNtt<_6R-3Thwn@v3kD$>KYJT3W8P_cf=lotG+ zp8CPlm{afueS;}$@Fu;^lz(uEZu{ZWlHGzo&{IuC1efY%recG)>ZJ5($;9C8dJ0p4 zker_qyhC4PYI^Way%U>a{E`P+^Ow0c|Xs;e<>T=LNJ>Jxf zpaXiksegjX^+Hn*f)4BDrnKM+z21~l@E5wU^=S{*;7Z-klz;G7daS8#!BzT9QxU<{ zdcLXH;2M3Osl?!u`X$sW`E!F$>j~R<4-2Ty>NTjG{9J3T-hDfdt)j8>`aG0#M6UH) zy@`uvPliyZKQi@Z@OQf7$E+T`KWl67MLiI;dBQHLP}Hyab;2b*9@Ub6hbjpL@A>*( zPe)k_J`4U{&qFyC9HiQS>R8Z0`9a@@>Q>N;ss{CJL6-2N-hvuYP!as29=L;#Y!Ztl zqGlI-MPqrWOcvXR$}gy)u_n|87IWFjTPZ6zOJlL9qbxQLHF{|sjcrGrW3f8a<$@n* zjO^mAG_hDHYSPjM8cSp1SDJp*3sG>T=|{Z=OFm-tno!2t7`n6}pYS%}Ei(0bJPO_- zQ?D1IJlAFkm-T(9F0|fd{V^(%#(vVhcJo#eY3wIG6_rL~KkM13g*5iFej2r!#v1fy z)Q2?Ipof0STPdfpD|#a80*zhKH=tT*?5bXYa#|NdC71DfUDss^zvzCb0W|iDo`y=G zv1@uBY8s7Q(`!+SY3#aw7qyPYuIpiYc$?d4tWi%w?W3_qeFLhJ#(vc+P_;Dnt1j>5 z_28{FO?n^--dfY7r=l8Yy&HNS>Nc%+L$6}uZ?w6oH=*FJz?-_?XS~fvwB9W}7Nr%& zP-UZB3bTY}eLJcXjWz4nP~kLoTPOQ?D{(Y-TTehupt0Zd4Ad($_M2XVT0&!Y^t-5h z8oQ%M?&qzP(AZr)6?K5d?&>8>{0%zy^ePnGy?9R-4)A*L2A%u59}3=}b6-zEou+L* z&w2}#~0zV4=ThFh6Hu;^6|LB27K>QfxU%jWP4B=mWfT{41C;CWJ14AsvBvZkH zWK1`eLG_xc@DSO^H8n6qH404y3&hxLDuZgLsqhfpIAUsGh>dZY3GUR64Y4z>p*Bw# zPIZ@wUsbR-$QOK_!Bqu&!y5%x73_^rCOEQMXXjwVqu^SIgOP+K;kt#Rk&S}u7LG0oHbcz^KJ zhPUB?g8O29jP6{tcW1-Lh~lENGiSrsNJhauLw-gT3ZA0yGp?cFxe0$mtYSUTx!P2p z0K1wE7KV2`gUAh@gOuSxq!|VUl$y6_;yV0{%y=RO_9wRmHc2Ig4 zNvPU)+jZ+pSMrYoAjEAV` z&QUZLQVpZd6rwx#=oV(AFcp!Zo%?p{Yb-*Iqlz##F!6cnv&Oefd@lN|afJz%Hn!Wd zhTn0%jfCQU@&KbBQ?&r!xE)|5Vr+EYw15G|OeXqHi{eq;1{k|g-o?X(NaHS+3@%RU zHqhu^!`tjvJc%kDHKI6`sth%~cm~y7)SJcWQ11k)kG14fRms`a-COa$Nr&)I)V#Ujp?`@p?VhZ-siO=hp9ndZ;n$_d-3?^!4RX z?=-Ksc>NKmhg!4#7}P_RtUm$uP@k+n2ldYIdS9*o4(g$gc|pdM=Adw)SaRN{M2px!xNZ|Zw;_y4i?E^s%8{bYtKeF#U7bwfUQ=na$Y^KbBa~X zYXla(kHft>FOfbeuNrkXLKUOd>M~Lkqt@y&1}H|Y)n!akj9RP9Sfv=XR+q6)F>0+YKIRmt zwYrQr#i+HqjJ}FdYjqjp6{FVbGL|Stt<`1hQjA)w%Q&MLwN{r=?;xi@t<`13Dn_l< zWt1sKt<`0WRg7Az%cxR}TC2<0p%}GRmvK@tYOOBAd5BY>*6K2%6{FVbGKv(V*6K1w zDn_ll03aTC2-ws~ELbmyxd+wN{rgTrp~`E@Q4@ z)LLD}M#ZSLx{RZWQEPP>_D@wF&{|zalw{mmQ7gyE?JYrH1@B>uSB$<2-qYBn7=0By z&8T;RebQIK(~UC4=&RrvMwMdpRq#yXq+;|{@GK+xD-K6r1lEcwg!Fw4)6r-<#7a406qpyM& z8{!oEq_2XP80m`9SHVk-S&GqD!OM(;iqTiW%Z>1FI2?Tyytgq>G5RWaA7iy*^i}Y_ z#zn>GtKc^qDW^FceHHu`V~S$*Rq$JleTvan!TT9OXV@ow75p}%pJJ)_D){Zja>eMY z;QftriqTiW2N-eRaya@b_#MW0#ptWxcN)7CqpyPBWz_qQebQIK2O4FH(O1C-8C8nW zSHbT#PAW!U1;59LKFi_gtKfr;k&4k*!S6M;C`Mlezt8YG$3E$+;P)H(lF>?TK=cq} zm|`K3_e2jhCMrhXN*QJ>V1^Mh6l}X>^fvY6km1GwcEdZb!=fKFE+}S8934HvXmFm= zqc3*c6aA3ULNVGa8D+#u#;di_#(k3UF5DPnlw^~{y!j)=SYxVUFM&O5EKqFw{7UhN zu}d=g+wG70KVp2vZgM3z&Itcr<`!<1{^JaM1|7CkisSRAM2|Q2DRyE0Q_+taUKiNy z*ZI#zR~Q$6B=)p$EOo7fdS z%XmYvkjTB!mBudiDR;r2GL9-nsXt|$QH)ZbZHQmUYEFH&VM<1ITWp(cL|NSC7#(We zCfnv1DUwm@$D*G$`YRR^`AzgQ#&Gs2Q-9W&t{A2MtT9(HN`0QON-|D;p792|$<*f= z2P|&$jU%;glWp^jZoiV%{I=BsATe?m1N?zF1vA`IhSo*?_VD~XYtLx}k zXpEGM*WQbaS&Grxdy%n6vH4BP#dF3*$!P8E6Z4!AdYMvx+N%_-+HfgWxX>qNu`y7w zTfmkY(-pfH>;+?uV&lPHG!85F^uoZHmBwYoo(Fr$2>p#ycx7R;n3s)|S{4ydPaQne^6W}PuzGHMg0G3$+&6$^>H zC1!)MMKQYHtT7HUgJlhj8si&g7^P+!n+&@~aZVC+zq#2Mtk^FJcgAcsrYmMkyf&NMdrfoN-b+6J~smDkS#PH?TGo@h>(nH`iK#$*e?lh#~d+= z6vOA;V~!dRC}t+s#C%~?DApixN6azfDaEKHjvLD*FmA(CWBfw;Ksmf^o zy)joYt@`(vAB=1#xm60k>hh=y#ty|=Ro83(qj6la38G!~NO94K@FAZQL{fEN`%A`H z$tH>PYJ2<3#%{%ms`vW*W}H+$@2GC-xMHOEQnb-64s(1% zj?>w7f^Qvju42Jmr})-2S4%cQyikqZP}3gBKHGK8@bxmsOE$@Cc4wFAZO&ze8cU4w zHrFzfHD;Lm6l?taRJ&pRAQ|V+G=qXTPRgItoZgrj<ZB=cC#;G|x!(mZ1Cv zntj8_CyfQs?Sss5iiJdWZr|9PB^j@6Ld@lg(fl4_u2GEU_fT_}WIQ{Cnjf&6oZmyu za~8KS^VeFp$+j@ltBE`Hp6#2MZ4?WM%xT}$Op=UKZ)O%LMyWS5`zc1LH#dh%#;G?q z$FZACy}7x-;?}}^q1J7(t%bQpGJ1!qTtt{>6r-~-5oS>bW)f1_Ei8HJHx!OV&4n-R4V{-jdl0$?Q?g zUT2@JnQfQsuww5^cHjnfJ1W_(Hq0(bHuffFzDvlm+uJb^Y z`Nx`{Uc4eEVR~d9n#SZm5jfx*x5`{jOND9X1-!HH+D7$ zsBkqiK55q394i^s=4ju}=6q(D8w=aTnXA|*?$wU8k2m)#w+4xY?Gnr{CF40R(Y&DC z1}`}s*u`|UC(FLlXpZY*4p5BN^Igotl2M;N(LUMyU9phJGwr*Y^*YFKa?Re&j8cqx zRW~zMG3r&RW}0N&t5VHEc9Xp-)x6*0*4-Rk>o(ce-JBvBrT%Msm$_20kVw5l4|5~? zl&Png2Na{!)6AoaQR?aD1<5$|bn|z1lc}ehp|O+)cFQnZNk(g%$+iqLRx(Pxeuqr6 zRI!lApblB)K=vt9&oRd^NeIq<1MZCJLH?;9m(paaW?zY4h5!5vP!XJ$t%9S%;}2J{cSH3-tg}&M_xo| z;8pf^$cYX`<|gTrEh{m1OU9?hOU!eM(Op4_`Kx5y!%NM2ohbE5qP)#_9m>oq$*|UM z^HYa%GpaLN=DYOw4!zB?cw&{J=~72*A9J>3Pm4B7&DfjGHOeg>>=yHYV%cD~nimus z0M^e8P2gBYEUh1Vo0+ZH%%wrGx0_=nn;;f14Ug?_?o)2BBHW#(NaS!c+T0j>mpNE6 zyk*`dE_RSPF^SwJi0U?}vGD6rw?1;u7Ay*c(lGa`k)xXNXBQ( zCYlEoo7MZ3*oo#j#h&Z^2H0iA`d5^T$IO5pGIg&9Dn^2ZD;5~ODRz<>r&#mwr-LS$ zF2%lBhHsOZ0~I^B4BsX*mnil-+@_d26bpC(-zGBydU6V_U%E;2&cEW9jd0DZ;aGPP~ zr*kal;r4_%QZdK!9$Ph1)E1hhoFvR%xD5 z>~XkNnq4zxIE>eK7*Co7wQNW1Q|2(q_)h8>b3D6w^;@y8(Oh$`VuMy>2F^8?DE7dL z3h}JDQL!;AdVuXxY~qT5j`Pf;ip^gU40chm)hoim>Sb{rHmzt07Nyv(6>Y&%6#H~V zd$2Oa&aH?8n=TpuEvR|sTE*x&`aJWD@=5QL%rouTltP7oW|eI2xoSP$aBu>SBWiBx{ z*0Q@gE;SEJHbFFA*}!>_M>MwQi4ee9@d+>o&RL3UiHQ zlf+#&Jk@cPd7+lg>-dtHl*g&xb;FX5FPp1t*-IT)o6-4hw{;y~HHXx)Z5>}T*VeLo z{9iXO*0T3H{@qL|aEE)qf2}#bmL2T4&fHbY#`teAy$anvk9XW?=1W#7Vpg6H+GGw^ zEN!J0yv3ZN*exr6X|v5-qQVVZd9LFQb5||9)bUL-q8GwjX-s%0a^r{=0!*1ywXbB|(^R^HR;bF*zJr!Z;duuezJ ziHe<{@{4)YTwcrWbbe`Gl#I?nWa!7u8_Fmg_stV#zGS@K{mPso8LbQ21%G9(RE+*+ z|JUY5#b{6GlzD&|T5AL2l=&4itk%woZ_JB|(O=C!Z3dOIo%DC|&zPMQqc7ilYo;ki ze>MNCStc3p+nh6>l#J~>Z&tBSY1#MYcE!lDAIt-aok{q6rytET%wX9@uq(`@Wj~qq zdb2HL+0SOQVr1DxGgmRP?2>t_Vr1E`<`Bu)vdiWwc7rXuJN;(vRV*ZOU#BbPQOWpz zOgJwpMyn^`wD*xE?@g;G%^4&auTeB-3wD#MC(W5+anqeywQiGby0c6&s-q*FY|b%? zg+zYU$?lxaKIPi2j&q4(lzJWKYQ-q^y3QSvaq4xQd)ZB^!9K&uhbsy(ki<_@= zajn~Ao3C@VWR!Qav!C+=#X=$*bgt(-&OT+{8#pg3MyWS&dfj}rUZ`98bJ)Ehg`THJ!2ztp--wgo%AZgH1<=guL{Hj0HrCU*{XCP~I6-^5v@7^U9C z*-tS_y{U7!WSn|a=QwtgsW){lu(*XgU#NAPYzud;k&N=5)47@RW5q%ui#j)Vo@Adg z?-5RME0;B;9^rH%f+^HDQgg9(g5uI@HZb)kvb7R@s<>^zHxOM^$DDPa`$IqBzW+t$Q?EW68%dkvMLO}r%I zd0nQ(rFvC%yRMh6p7H;AsgkQMC^nm@`J0aZ&SN;WnSZ4J_8L8v30p#8Z7Qr=V|BI4 zSABBJzkoP3ac#_3E%`@!j3(le4CPMiYMlRdni`pRYmGQwzFJD8w_j6Jjv{4abuaLY7~RK@-_B2F`n- zMJ|;xkBzrV`EH3rC61CvBdR7QN_n!xrzG+Svq;K31JbCjiRDtmz4C8TUL$dX#LW_U z+9XDQ2fco-Y{x|Cg^InMW=w{5c}zn)-_-xWu>yS!VR~ z^RI;ER>Wo7T&8{%b-^<-%_F)Tw{1#u)sH5)Es@6UpJo$Xu3BxPCG>U`if8KBKcu1w zYi!ndk}Yw%WGK>Ta#nSZ%sekp+hdI;a-<(_Cj~MFo{zYN(~PDG#@SN78rCLy%dphK zbwPHz^LvYo=Prwe`yJ_Rg4WD-L9Py!)4`B6@c>X4qomAbGC|7Iq@HWGQp#M;G;6!d zkY;MP%=Yuxdv%=D#nUo2(zs=7oADf@ICamFgnV8*j&a!MWc<9U=UQguapqr%pJV2D zJngY+xSVNCZj)Czeb(?@%=M7N{_8P(B-6FV!=vA)Qt#QK zJWGShP!o)Q#XraYxeWEc8Mz$(uQa#~SWDx$Y#aZZ@&8K0TKilYf4(Eg}}%&?=KcVyu#tNJ+I7pJ#Ssf zUy=TK4bOh;uaJeb!n6q!GIAl2SMr{#cV1C=uG@LV&g*l38K-rn$}+8sbh$pX3BIS` zbtcb}v{T_;by#z1%`d0Umh2YauOS?(>Y%hHtll#w% zyaz}-oSNWOfv1M;>?*^u?1F3)tVxqG7fB82?MhF(e7d+58cndwF&}$Lhn`bpJ*Ug^ z?X~{@(f#;eFL`bQgJf*Hni_l^d4$xD`G=^hJCtPfCS6oWKYY(ZwV(^$7o7yXE-HaG z@f;Al7C?ts53D2J2G$k(fnMS;&|7>7)Wm6^E-nFW!uwUyG?qy5VE0VwDIU9w$06gX zBO>6Zu8hY^#^WtI$xwfc%`Upt#;Geg7aCpk0ouf!()B*6A=xH|OAX1oAiY~NMrznk zh4k~J)KFe*Vv*Evs28QYMk3`}7aJhk#9KhS*avioBNkVV;jGmB0z|ubjmm*z^OiDe z8bWrva?Bi-^Byc+NpBO)A=_p7;OzD4VPoPSGJKFLlJ@mYC;AKh;vRM&d@GE=a~bX02Wq2c&#Vx~jAw+r^JS zhqx?VNw0~zYbb^Qpe9q-MFeD<%JoeaJ;y_}=`Pid(zUxpE_rKt=0I;3Wk83x4OmAE zmOe)Ubs4`+kRMIvR1-X7TIbOJo$^#!COk6mD8VDc|CJB7hwI(X{;`JB`c^B|jI0ZDBe~0bL4*UnM~`1#8VPE)EOzCmH2~1ezwK&|M#TAPeuPc7wpP; z`B~cOnG3d`ON`e}m!;2tZyV#7yxsCDq?Ru*? z&+_E_THEJe@x!5LMauiw?o~1E!MdNbaGd{>%k#g-Hm)@~Z{Xeu_eTqK$eq|aawoQ~ zWzSZZyXEfoNq306bF0Za#B1x?v!?i7hR{6*diwF4O*oXbG&q#!m}&K6mC3(5MXR3k z9%kurB-`W@VRt+ED;9E`o~iIW@~_8WZL3#pwuu(fa(4YIPmSsHi@O|dKv?%P7nbS% zND~+2tU>D^U9^*>kswpal>T|2;p!6~T@*+^LE*0ar?CBr`1 zm61bv`uyuL+$OEMQ{pg*qa;2oalAx6mGQWgo5~X4Q2%UL-c#aGoR><(={|$OdlBr) zrA@LfCdhG#E#w`5=cFZcl0g^GL&m+{bu^q8D_Zl#X>smuwxqI5#x`G`@gUhIUX>b^ zy7cL3C)WboY?bMGJx*0223@T;SY|!hgH|W^tggoC9xJ%~*U8lRbe3mb|IZmWxO^CE zWWF{_%m2S3dzP)|c+2gUe7eU9)_AUp`Pt=GSpwISIV_`f?BabS?!{I=RJPbrk$sT& z#0YhPE)KzFn>Z>hzpBxsURQeZ z<4*nLb@KS1tF^yU4xWCf*0gI*KYGr*o}vEPQuO&en1-;1b^nxC7`u8D%}K&GJBtE2m2}{*T5V zJ~7DWuLjGshDsb$E9>g?CTZL3+@g2};o9FTbHOsr zFYdA0A@lp^ST6l|)|9p1Sz{od*I(K4sBZP|DPQj$6Ygt&c20~(%WG5r^ESz;|LcDK zbEUzl^9g6p9hII-csTm(NI=DR%WJoT1rliaVbH|z0gnf%y980LDr z*e^qQ&VxKBa{M1jKZLsA=jPUD#8w-4=H=8mPDb`ad++XEM&mYC@-k+|s~Y#a46NaM zUOGW)m+vMxpYYePmKc23S$&roqjGnpR z*sOl6@q5aAXRW%ryzq*M(@n5g>zNnwsSBdNQS=SicZnLDGP#1jH#`0aYdc1k}pK|?IO6*>lI_HAU^|_zLu%241 zdqs4;ao~ERD2*8Iv4}0?F@)DSo_C|ydp5`W)t}3`kN5vsen?u*Z<2bxPilS7bi6E8 zp8YAT`^^!)$0XNlHSFhqGkT8pf4!EiyR{Q#*)sB88MQR`Q@kgn>tn$1@ zWAOyUf>%q)-TVG}-C27mm%L{`{qK*TPeXZ*a%71+kJb^!y0fuemKB#I`=NEUE@)lN zXHe~e&Ye2co78;g$nzAx`}wq-Uz^ zweQjJh(w_@_16HdC-VuM&t;t4Hdtf5Yi9X+G5k@F`v@5u$KzS2Tvl9e*Bkjg{d|cy zb@3Gt_eyA!cJU2lhxiFtM`&y5Y?TktOVkJAytG7K|6H%v@LdLtRpM7k(#UMj+6Z8GL+i}ewxp#dh+k~ z$tzeoFXz_q+nv@L{CCN`ispRrxsjV-iCw+#86flMnHJRr?z^SyRoN!uW!|kC+5xjG zeX^X(XyxEO`^|X|#R!AGFJmLwooin0Ti1$KYuP`S72&@Y${GWg2FGtr-D(fp{6|-| z0q@<*99iQ@uB~5BSGUG$!&TYs%6o}CDrU%XCUl=+;5RJFrT*%>x9;azydT1~$>`aa z|N1;=UBmqA@p#7YUpMmnPfN>MBW~Ft>R~o;3PXhA7mi;9&elfZ7m8mvei3jD6}}=G zKf1<>h9X}y7X3u97=T|tXa|chF$BNCq6u_Oplb@=6ug-jFItEx_>D)b3&ag#31S+6 zUq2B8KQZvr9=ttx2k;Ky9mPHohqU8Fx=0YmMUprpy26eW{8Euxcl=zi!G%~{kb4TJ z))Ut>;iaX?YdGX|{2zc{KaqiWGZ1ekcqVujcoujzcs6(rcn)};h|>z7D}b&LxC0(!HdC5MVVGE`f0sUD!0I%JH>46F8l`KHweGG@f$2wX~U3*2l0CdrScF;;UVOI zEXrXlt`Fn-Fs_f_`UtM$a2<#11az>8uy_(mY7+7>31u(|X-q7VMn`dn>^!!Jh0RKYrSdyU&701x#j>&5{=zro=5g5L{%ANYOX55n(*@cSTiBj7dy*N5Qt5Zp$Bj|3kD zJ_>v^_-ODk;A6la*1CyD@EeD67>D#HAngj|r$Y16Dv+NFlvxFI6Y-mju#*vX3c^l7 z*s0)C!5;^I9DEx1H1O%*)4^we&j5b{{0Z=x;4{HzfzJZ31g`{t68uT2$(Cr0JgzsNBAr-7jKNPCa_ng zh!@>@O$j`&9avWqcV0WR?&i2t+PQUi$2}`1%^DXsRlFIJiIMbeAi2(s^A_~|qi2O} zeJ)zO@A_p3H8|w8xJvjO5m+g|(eteMDwO<}wtf??yM{J`?7#jU_*r-l`3YVxe9miG zaIF?(L$#oiIWJ^V`Wjxigl&Yn*-a3`Qi;xNP*N4QvD9YDA4EfIWBSn3< zwvnkM#W$02p4Z5R#!}x*Vrz+10#pu@W<3_)SX;Y(L||iW$NCD)GViW$Bf1ItEBVc2 z>bHpx*Vn}F7MsRxi@#0eMeOxyCS79?&+pI-4)IASfIL!^ON>D|?Dg3y^;>1w+n|3t z!CQXGb*MhS$#j(bzzr7@M(Ok&i3xCRBPizSiG**oA?)Zlug#csA#tjV^SoHP!7GXM zei8#DHkQ~#Vy=vVEgaU8aynARJW|AKuWV?O6tAt{5R>!@O1KL!Br-LLYE5*ZQbpU) z-`=n+ZmT%3;k7oq#Vh09=&~Di_ePhk;>d=ku*8=5QJ3@DHyb9SY`@v?DdYcQ2#@m3~Hr@ezcVoZyTgAs4GckXC zv5`_ay>SrqKW?mP8IOnIbCRi@{4F_N)u2(66HJ;XQuZTe%2Df@Hc6NC)SBFGm-OtK zX5y0Gr=}m|+iUIu-d%Ga@PV2Kfun220xN1NfYWOp2hORf1TLzX+pU?{P;(l!EZdB5 zg_jG>Ry->z)f;$IYJJ-mHL^3i`5m zeUY`Pe(ZViY14AV^9Vwn63=fs?256a)_e)W@nnFb=Vw=KUa)aosJbMS})bhk@WLo z%;xXX_lvC77t_5pM_8AnQTk(>!!inFKN<@EZNyO9bDJ@;*K;76MsnGSkJcGQi*ZNmiQqw$y-K3lde19g2Zwx|y<3dgvMoMFdu)qOLX7s_(6@c2+D;8U*_7Jnl$>tpQ!AS{ z6ZFNY^J2!9i@DXd(_0Gjx@m2<-UV#Gbx0oiAjbArL{Qj6dF#+?%F&*?Y;BXYU!-k) z+lTsiN&YJ~YK`k`w{LyjcPngr7%My~|J{&>U6R>InW8=?x& z+gfgGS9o4jj_O?Kt##a%nsgptbx1C}Wb3%CMyy9-C5955>ZsV^K_SHFnlZf!Ao zBVXr5VEBm=&7QT5Y`A^f>5?zd9tu;v?bEjTm0m(B%}TxPlrI{4<4UXLJXkGzO0}E; ztK|$>E$5?WZO?AoT}oCRDlgEePZem(x1E5zcH7%N1=@-(-$16aIxoK2RssA?qPhKI z!g&$Aoir`CV-6A>Adk|0n_Nt|WOIah_on=kpVL`Ez00*DcarAkrWIJ_m4L|QRpWoYC`=#t+!hSJod!s&HxLX;Zd10kF2sjbz8856nhXJQ! z-QtD&i-&=;#iPKvSbccm{%$(33iG!Y?hc*?E*JBGt3(xWwO9&VBUS*{ikE>K#Twui z%;;WXhu8$%CAI_iV1@35mF~O11LA$)LGdy0us94nikaRE_k~{pPm0sPGvXZZocIxV zLHq)|D1HZC7IxhW>s@c4UGoKcY5qVbR*iMBUX1_-X{~^v+6};P?M7gP77dKjIsl`! z1YoSz1sEs&CrSS)Qty(X(j{g~Klw6jk(L7gWm|a0*uz%(45Yz3YJ`OR6*`T^e5XQz16$gsfsZq(yyZ>sAx-qbhO zdQ)9*^p1v~Gv1V!bKd<>%NM+9)VkV+jwKeWW%+ba`Xkv|ffpG?nT1f_tZz=c=r;wI4jgFS1srS+1`aWY0*9L;fFsQ@z_I3d z;CS;f;6#(=#3|VfRz%AxJ;12Uc;4bqM;2!e`aG!Y`c)&abJZOFgJZ$~|JZfG99yfmj zo;39)D1Y;Qw6}9+UC0+qC-9P!ZPJG%oToaw+QXAZEfvk(~VECt3o`vT*fw*ix!cLGzK_W)haA;5I!gTQR(Xkfl` z9I(ha5m@G&3he8A0@%;_6mWoZE^wf8A#kwsdEgM|3&7#dRlt$XSAb)ke+Q0tZU9bn zZUIhlz6qS}d>c5+xfeLwc>p-qc?h_``8lx4c?`J3c@ntX`7Lmj^LyZG=g+`3&db2H zPOT}*-&qH^#c2X}IO_p-IU54^ID>)voK1lToDsl-&ep)g&YOToogIM3opHdE&Mv?+ z&Q#zzXBzN=GaGo(SpdB3ECC9iK0v!qKcJV-9YCkg-N1T2_X7ibh696qMgc>89s!2? zQ~)Db=Sq4n;SqXIctOln0ybjFvSr5$j*$gc5 z+0oQn^!1?;xStQr<^z0a?i=Vc!{HEnd}!|2=kshhatc@2??a=Om+v{Pu1N8v8P?@X zqi(t{&9K?NH0tL2(hOVVODm-^-_&MU?fBBlr=M>R$OC-SfdhTBfP;N=fkS+0E*|bn zbMZ*u0%*qi76HfmmI5dG_6AOYj5_tDF?OvljprMEX*}QJOIGdhrSW{1FOBDWd}%!2 z=S$=H0bd%=5Bk!0e%P1B^P|2ro*(z6@%*GOjpt{4X*@sYOXK+kUmDLZ`qFrQS*9iY zXgs(3(Rl9VN8`EEkH+(Qel(s3_|ZrnPKUExF3z-5q>m=NBPkh-qw%C@Mu38 z!(;tu43G1p@i57c#={gp8vR^;G=io3(Fm69N8?q#A6Yook8(QRk8(QEk8(Q2k8(QQ zk8(Q8k8(QOk8(QKk8--ek8)b&M>$>MM>$pX1pt*ZT0M+|0 zY59VNWapZOH1qCiNS5!Bntct)@&gUY@`DY@^1}_u@}mvO^5YH3@{sr6sF^ z3R+`DDlJ(f!>*M!?1CSZOyk9^Q8JC!0Am}k1I9Jp1WanY8<^7gKx>p$<5oAI-8QB+ zxu7wXb5&z1=OvA)oR>GIwzR4-)zs?7)RvNhsTHLJlOI>`Ak;#7@B?jqMRsrnFh6)U zuqb#xuq^mXVBg?Nz<$92H~NYJ!R>$pgR_BygZl%A1U~{C9{enDWbmuNvBA568zO}=7!a13x(a3*ke@EyRp!Q+7of)@g-f_DLz1Rnt|4;JlUZ7}6!jkI$u z>_nRhAx%^WS>85;G$|p}%Zfs1O*=4z*0fWkpXt)iEa_)<2$jIx5GsKMAyfiYA=I0e zgitvw51FjtE+B+j$i@(AAzMPIh3p8S7P2dZ+RvVl0^q(7Y8wYau0+=r2Sc?&?^{X zjs`|Ft?Yc05Mqp&+=s3e;$3-tO6-)^Ve0yt_)+qE#53}`Qk;?3`O1BRxFUIf#ADNO zJAj>q7V6sFCd4#7IAOcGF1EA#c6GJYVfXIpdJIV?ceSdXb ztghSL*M=OQt&xf^NL?GNaO%2UUAyCi6Xm-CS4w}ex*k*47C84#`eW+4JygYmGnUf7 zx*k*47EM@hYpTMjYm0E^-QCw_%qwt}_12tue|24~uE*51B0|NduC_>3Zt7}lsod4I zqLt!Ne6_V^|J`p;dUeI;7G*yAyRU6kdEhGZr>@(T-gcw%uda*T*PB?sU0rSMn0I$y zqgA}P%6QfFn7X!zQSqwlVs$;Ht}WUtcXe&iL5S0~evax>LcH2?P}x>_eWdIQd3~zP zo}!69qMu`ly1KeC*F+L}+&oPaDY(wp3gY_54UHQe_gLK2xF_PCjC(F_L)`wjLvcsq zzKZ)c?n2zfxcc#p;+w^{iI0x&6yH5QJw7+SIKFRu|M+|3hsBSI9~VC@es+9S{Hpk! z@dx8i#rr2jB(zRwmk^tfkdTtlGa);nFrh5rmV^NbcP9)<7?ChG;n9RC2{RJrCA^rh zCSgm$TM7FUK2A82a4O-qgrpBc z5=Byrq|Qm{Nrg#$lkQ9!k~BJLV$u^yvy&Diy^!=;()OhNNuMQsopd(I>=M`|qDzM^ zt}YLBdAQ5WE(^P?=(3^9&Mqgrh-B~NfaGS$9g^=&9+o^ad13PN$;*@1B(G0?GxXze+xn{6q4kWV367u8q5fca7|t-SyV4cXu7yb!69ZT_<&2+V!Qb8@g`m`cBvV zU4QCYH^n!lVM=65YD#{}Hb@OiZJz2%?VWm0>iEQAYcQ}ym%-Tk_Uckk3atNSh8$9JFGeM$G%yYK9NxciyzKXm`CdmUFjSFkI> zb(1U3mFeo|y2~}fHO@7~Rq2}RTI)LC>eQo0kI_9UdOX!*UXR5+{@$ae$BrKF_c+qy z#~xRDc=z<{*|g_PJ-hTQ>N&FKlRcO8e4}Sg&+R?;_B`72RL_e&uk`d!Yo69B?Z&hY zX$fiF)3Vcw({4$-D{V;HsI*7ZrlrkJTbQ;i?d7z!X9OgF>8|vg^pf;j(+8#xO&^_Jkv=_rPWqzs7t&X!uS?&Qz9apUbdlkc zaYIJOjKqv?8EF|=83h?PXN=6K%vhYUBIAvWw=+J996%vPB>!_^RdinnNMcU&3rENMCQ57pE56J*3D{=)i|qlR=cd& ztc0wtS(#b+S+{0Ami0{5qO28Jf6v;O^>)?=Sx2(I$*Pwfmfa>hAv-;LeD>_@McFT8 zZ^+)CeKh-Y_D|WrXM5-P=QPb}ozo$wOHNu&K~A5XJ96&Lc_^nM=ZT!zIrDRtEiWzaw!E=H@AbTzyzO~=^A6^HnfGnp4|$jJe$R8{2jmCmhv(mrAD!PPe?b1-`D5~@=FiHX zoj)&sasKlB)%kzV-<-cE|NZ=f`Jd$<%RiNWHvh-`%lWnfuY%x$h=S;Xq=Fs=xdmkf zw-pR27*Q~$U}C|O1+Nu+RB*iDTtS1voWg;H_Z1E=99=lRa8lv4!pg#Vg^LScEPS96>tk%BJi z+TQE!Ui*6;>~*BqSG|IYniNGBbu3CO>QR(eR9@7-=-#4-iY63IE1FaET+xd~uNBo4 z?JU|~^l8ztqHl|SF4Bt4;)cadi(40WDDG06R$NeAUfjR<-r|RfClpUBo>Tl>@r%W; z71tE+EZ$%IY4M5T)5YhDe=h#5*jD0Q;#bnJB&4KSNvo0@OFERqmvk-ZQIc7bUs6)i zx8(McfhG5q3@;g7GQMO|$@G%Sl4nX5mMkuLvE=2F*Go2(Y%SSY@@~loC5K9ml$Dtno((R@DOAnSFE&aOmOzHQfmr8xh z8k99IYgyK=tYcYXS=X}eWf^68WyNKE%5E!LUiSC09cAyA9mP?=rsW;WyO;MWzq9<2 z@|ooe%U71aQogZ#XZgG3ACw;{KUe-+dA;6Edq?%YsdsYkp1t#X_wM~b?+LxDd++M~ zUhhM_kMus#`*iQ~y?^fgTW?z*qffm)A$`L8wCr{Ht3=05%V4C-@# zp9lMl=`*2^U1&JN@4(r8JO{vOO#>%1P2q#ni1mT~IG@=N7%l=tD@ZruoMva7(TvBL z%p}oFo}$bZQ6gWo#aW$boN#Q9Q;i)(8O~bv5nXUTELq$IUxP5)+#^!Oy*O)mpK#&q zSr0K%^u*bbG_3y8amFSS&;7D-O0Yo8!}-XC2wf#^7SH2MqGJ@fc3_;k)%X=lC9;G491loc%b* zcp52vhck=kaaQpMr1m48Gq%>A6*1a8(O#R6=W+`~C+&IBSzC-}%u8`fY?(;bR^oZ^ z%QywLT6EX8iY#rL$kDdrx#|v_{(4jN(%urq+D<$N-Hnr8?}(cRTyc+PnM zr@21F39gUD5S$SlrG1KXbw_YE=_pPneSwow$1n#U7mKtL;yLXrJgYl}r--Kt7(V9z-!IQ_%TDl&mW$5u* zmY$$x>q%O!-c>8WS-D$qKJE!UO`EUhX$$p2?K!5)bG$< z(g$iU<4NFa`rX<_{T{7GzgOF$->+@gAJpE{M`$15nczqIXzh?bK|8EhXs7jwc!K$u z_8XoC{;p5eblWsM#hjse*=A~{ty1%~J*CyhioZqJ(^%cy5H=6kK5P*%PU7|S-VJNu z=Tz7(V0e>5z{n<_{Xu3wOPY|MD@}d{)@w@f7dEY{3DIB59QL7bieW-Hxy}eLs&!?b z9ExLjtA1~|&XztG%21v$upf@+9UroaeKu=B@wb!MS)!}OAYF)(7WV^hYw;k^)0IP6 z{a91vv^f6XBd84Z$U!L2h{y>*mRTPWS@j3a9KW@=w~7eb1RUq-s?NY`tt$M3hI2PCn(}gA^wm18ZtuXI8`tIw?WrVJOZLalU)CD2whgYqyrgGq zQ&kiJY(4WZb%o zRH?DH|A@#&&|h2f*b@4KCe=f;)I+oP51Pw8siw3v!bS~t;%+$Cd>6Pgi!A&gi*oUK z)(6luwH*SkZ*&A0*zg4Kg}SGK5s_VRugrB3mQ6Woo=st2b54XlBC-f~${C4$fDw_~ z8sv^qKsOgwWcB>S3;kWNTWofa&nDqLak^-Ifb1l@r?#M z;pdo?_m~uaLSJ%yqlkJ$lSb4#()&_Qi~Iie2cJAH@yNsR^pjz^wLd83sS;;PTqsfX z2q~|VxI^N564|!TrOXyyyn*at%OfJ2H~wQw=<){*x5;BSlg;|ABj6f%E5%UU*C!aY z(BB`}p??sN_3X!*7tVEBf2yg}pfLE%?mrJPl=p7|xqtuGz<)NU17!?DB#xFiN#c_d z7f4(x(OLqlrH0Gl9a#?Bq-LkYeG)&B_?5(S5`U9u4j`Mk<#cRLajEvF8&J*-2s+(AwW;-$nCaMC7f~b@(4#&kvdh*Xp64VfTkq`RletMD`0OtL_3O zJaBcy<`F6F0qT`jc4-qzy7%VZ+tB3SIP2!WlztSFl9l0Mq zCye|U$fG5XoIF1k_ifO^y~5#<#5#hV&Z3!a@+d;<7-b#7tm6Zhm321Z*}S;#4x~~t zn&Rmv@m`76UT=-l-SV%F_CaG^5t!H7QJJ(DOSOM(y_Cb%T80sk_j_m__s~@RL38*K zs{IoZ&q%x|Q6EQoKZ(KPs2x^DZ9>?bab!tEWRpn3NMJ_dO+e2!kT-!WFYfyQT(i4U z`zf11VegtS5*l8cagKO}$vtA2^fO-KbcqWjz9I3DMC*Eh*QFeG*Q3-^4m?V;)i;k) zk3KK)vc$R-r15MITzBD3F2kxL6*_iYuQy76T|u?^c{4Bg`M$yz_;Uq~F#5y*$leoa z6~}EXBC<6!*VaxVG!c<`f6(u4bPO7vRk^3%)Yn#oB8F?NP4dtbdT6G|bY}twMNr9XoU{z`{zs1vj6L32*Zzt3(2*_=cAMsq?TH<9v9bDBd=l=3%^MnUc& z<-9pJK`xQ<`A1_RTl>oZspl2f5Gjw7I8)*xi7!jsE%8f-S%iKu}k;vuA%LJ+6QG&_zq9r-?pc>*SnV0Is;d}*;?Zfkso_#zW;+JW(36+5jh6WOx*Wk z%PjI?$eyF_Yt_x$3sEESZHXUB{7T~aYKqhGJYm)?gvAYMG~>I%h{&!8d##wp*hHv@n7c@r48_#I$tiM$5$wEUwPv_go8ya1oq z+F;=6(6yTIKWMlI759BVR*0`Fs29%&KM1*cIn~`Ni8T`6k$70*Hxe&P^m&ndhDmHE zF;!w=GTk4|SxK(*R*vZ;#7iqD0Q=lB8MyJ88Nf{|p8~$S@>$^LE1v^e+Y*m;->h5; zz4yeGKV@BBwU!5*4u4^2-GP2X!YI^IpU;jbBl zW9tInT*GcEzP*SYRs6LL?5672JM{s!5q`k7*jd%_9=gBKL?TefPHID7vIvBxD^M3H z*k{%8PF)BzsX!h3reTm>KplIhO(FLL>exSR2F$|y@H+NSBY`|kT>)5p=EXDisI(Bb60?V<}tBc;)>&2G=VW}?qVnw+@6C`auve^M z|MynNkKz3zd`%L&#`ya@;tt4@ftq+6R_oXgCY%PVHN1T?2=WZrj=w7ot97vm_To#6 zVklgzfcPR9cAhotM-PL%7*=a|ALT*FOJTK+J?c@=tODxTs~!XSZ$KS;)(-<;hrK%9 zQl9{P12*b-TjeqMSr3bJynRHt0T$_ae`Olz_!@q z*6|+lQs{37>e#V<0rCJK{+_e;BJghPeQVgkUI}@y_7dcKfv8jLhvV-WX|F&Y4n*B) zuR$ImaisP-G@~Rws=WdI1c?>eI_M_?Q9IfO;3TaEn#n-?)h2B-e?On(%^}WDW`hH+*{R8;90f-)_e+Z1%KZYg& zh`-pQ9|F4cPoe1n)J0GIGhmv21ey%}3&`mbGxcN8WJ%1yJNW2d5_9#hA?N9*fcg4q zV1fQEeD>1MLN1ipM?ViuUx~NqKR|yoP!s+1A0gi=@izTuXl@6hFC2LMs>`md1h zlsHiT4Vt?o4$^;ze7CM?=vlfAc%SY74%O@8Y5oI1{Iy2BXRnFjK=dr#gggSMi-+($ zKocV+j@JF486|NHo)2hZti(s~oB;g`h@OS#1?XiGC*ZjO`WF!W3(pQvcX)E3iAg~8 zDLoAG6d?MP-W2lVK=dp;ST={Vu&D^24v4mDD+g-!K0w`mGth3o6|N4TE}GeIgWMdb zix&3&kl(i70eQE?ckFjTK42dN{KS3_Tt5ZkJDc`^hh_YyDIABOy+eH`#7`vhR1qXHP_cntoV z05QurCIhn_Q-OUP)1dDQMB8@E0N&!53C-<}O31fK?C*FA@?ggt= z!to;HM@K7eM0#8r+Dp{xRTC`19e<0Y5(cdEj3Re*yT3;V%OJa`;Px`6O^C{MGQ6!9NA$+aJSU0sk}* zX+Qi`;Ae*S3?c1@_X0mVJUj%i8vMKA8kEl&{QU43^uIUwKZYlue*w5B{KN1R_!kX+ zX?Q=Be+2U7m*K0y|0i%Ld}a7r@c(5nj9drhtHakp85+4Be2>AsBR4>~%HYVzjnIb; z)<$lEK5B4$XxcZQ$1!eC)`Rpj->& zmAsKBgI{Ox`jOkAd?Rou+%WP~@NWVRg&Ri>fq%2XZyC7@%1yvM;lRk<;Eyx-_>p^| zJOPM28F?D`EkLx;k*9-ytHCFZ+y~`0AoJtMGr^x^@W~_7P@ZD&;K&U0+YLT-WET1z zz@czx>#)7&%Lrxse9=Ng(s)$TIj@gDWFVC{5r{SRGjdwnth} zIzV*Gkqh829N7Th2JQ*38R>xkpury+c>$Ck1~Ps}df@*O$oL)E0{>UQq43&~OTeEP z*#`d9$cv!A!Qjt~yco(G4ZdmQCD4Bs$k-ft8Sp(Lk3jhiAfsU96~Ir8yb{V^8~mG* zS3&u-!Ox7m8vMVHyaxE$ksk*B?Z}S+KR5EDz`q;$F=Bn*;61h1Lb==Ey|veYe`oFW z_)Y_d!qM7K0%vM(0M6Fl2s}}H6R=);Gw^}hTL^g)$cmu$bKs|d=qk0hf}a7h3aGse zd=ZHLUwb?7!P+lEd0y=u;Qz#6qxMcH=M1jY-UWTxV6*ls;Lor9D!vzh$obm4!8d^P zNbNnqOSRvGav4Zp)P4*6g+Sza?YDt1t-Tk@%YaDi+WWvC0S<+i*WM5Q3LtX3_5tu$ z8hlml_n>?~a8G!3?f1cdz~H~E{Q>xo)jkM(ZS6z&{x}fXTl-`1H`P82{xb%Dw)PPy zZw8`8)IJLS?`j_df2+Z_)jkgX^R-U^-(LG9@E2;I0{&v{)4+dU`wZ|Mwa)^7srEVI zzPt8$@Lx0d>$NXHc@Gd>z4k@mZ`ZyA<#&K+DYY+y|0jdLTl)%>_W}2W|6Kbj`1=ih zptfi4p739Q%=@*y;2$*jp&Ftv{Gq`=s@1^%xHbm-Z?y^Fhig;7KdJ2}{GZmY2LA{U z{;6FH{&xodzIGjyF94a@YuAH+5y&?;Yd3&@2{;t~v34VH&*)81hJZt1@95)zSB*X% zI6QhYaAfpWU~Tj^!i)luexpwU9|sPF$*yu$e{1mHjc!AEo58n_z6koy1NVeq9DOnPFBtsyqc4H-4ukI;eHrv$GWg4*k3fGH zkTvP(E5LsR2v?8368Jl#uY&SkgYO%CHI)Bk@OMXF1OEQe9|r#C(H{YRVDv|Ue>D1I zg#Tk8{5kqs@DBsw&(YTbKQj7y;Gd5EB=Do7Z@~9sqi+QNGlPFV`X(qJ2ckKQz8U;4 zN8bYe34@;;{W&OqW$>>@-wORxz&+t_M&AbhX@j2`eLIx@Zt!nMe-Zj;4SsR-9pL{k z`c8cRar9l_Uo!aR(O&`o%IL2`|6f2ffzfvZ!`OR(d&YhfI5hTKz`bL?O_<@a_kv#q z+!JbJ?*kt(I6C%z@ax7t0R0<)XwGB52mHpd-v{0>_6NXk8v7vd#<33pzj^GBfj5nP znDE~MWCkDm2>1aY>w>Y5fC6)uN>P8{{3Uaz*mjcfIl!cb`|m&$ecSi0sb0; zKQcB2<)0h;7i0Uue`@S%eBS_M6*hJ)_!|wrY3w>EKV$G`$F2u|^Vki*e=~L?Vcr59 z3jf#GP2fKVWE6}&4*2t9j|cwJ*v-)23B=wqb}RV1fbjO%ZNPVrJqgOM1DUVKo(%pQ zK@MK%jol69{{aq#-ygdd_}|8!2Ia#*czEpT zz>kgH2j$~q&jkN-gMTqL4doLCKRGr7{Vxsv)z~cfr^ZeIKQ~qf?j3&sc-8nEaCm$k zc+L2;iTjP?3*grqykUF^{0ZX^0dF3E7o}(d)*W;0J+xhj)Ap{O<7<_+f+hj9-BAo#Pu&o(V)wj(5PP4IUqV0hAL!bhhyx zcpZq&HogV^fWf)(OHfV%_k?GUZ-bvUcxL=XP!jlUTBqQM8pUjqFhgU=m*8T9W0 z?g?kd9|8ZT2ETj!6;K+$A>KB4C3q7!#0v+n0&fA)L&jeX?2W$$O5fnc@gIh=W$?x0 zKLY)G3_ddcqtL$>h>kJ-W8g10`2FLr1%LJU>!AOj!5&D**{!`;`0={AV&4l@BgFiF=7AS8t_@?ongZ{Gy|IPSYp}!f(YHs{(;BPVb zbK`FZ|F`462z=}KJAnUg{GGtJjlT={^W(n)eEayX0zWbSZsPtWkhTB#d%*t+2rrHQ zCithve+&Gt4gSseZ$tSE5N&h(y}-|ozYqAgXiWBfzFFOL5)@E^uM4E)mgM}Yr0{!!qU$3F)ApW`0~er5a8HAYS6z0hz2q-27bWc6DB60+-&gHi7Du}82r|W{m^eS_@s%ep+6D0Cp>xL zTJUc(_>_t3pxh2bN>5x5eCosvz&j>xgnr22?8Hq_ju|{Y@i_1k6OYIDeju9s#LeK( z0;11P+zLE7aT{=M;z`g?0nt(>o(z5(h;Bb|JNOxcixW?UvS4s&;t=!)4L)b$F6a*d z`Lg!J-QW)!Y)sq>QNZ96#)JTy52btwZjsuXfLIzQF9CmRavS&ulP`k)Ux7p6gOe`? z|3lzV_|W7_fPXUiGAJJbqT5V90{&4TGs5I6fS;IrCGamNUj_W+g`Z&1!6Ow`bFTAr``eODL`h2 zsds`O1j4IR?*jglsb2v;Z|YZ}|5G4q@Tqr$e>V^--_(1+&ly~q`b{Xy2AfmA1$`BW z?Rx6B!OsKf&8hc-KOabMPQ4F&9f&o1>iyttgPT(yfYLGef~ntw-Zj{t`hDmT|#!occUz{?ODHz+YqVJyTzV@*6<3 zh^a3De|PH3P~HzjH=gMp8~=;Q~QCRow^#z-vW{6Q`dt39T0gwbsg{@rmlzbB_MKp z>IU#H1CiTPHv;$Uy9vq=5ZzLnJaBy9%}^$QNZ@_9f=>bAy?wWhOt43G znfo2%doPC*;Twi8bBE%`Cu_ie#bNCq=iQXOz<)i-`&Yb)G6DSM$tmD}nA{KikCRse ze{J$w?s5$6n*#nhcbR`7{KXV^-l;DyVg&>}@Xx090|z-=0)Sj zTyvS1+)e?f_AFj|nfHSK>0>X4eNX#=`|kgaKbrpLYyAi7-}S)k$y>hbyT6f9 zU;Am`AJ(pVDO=jSZaxO&5L0;jz25_5#w-3|6}Ul;D(!cSwioJE{0;Nh^}Z`Ud4O|f4{`vJNf%%{@%skf8g&|`1_Ci{VIRI z#^1a7`*r@_!{2Z4cX-cTd+z4%9{!%T=g6L?^A2)P{p}dNKG*CwRvP`rV&_7$eY)GZ*jh=cTArlSZg={P zeydY@*UvOp*PF|tJ=p5C`i*nz%|KEc=bBx-n%!o5xfurC^%Ko@v)fuG>&8a2-|QCI z)n~SP{mzC8+B&z@Zx$Yl+ndcY!BdptVpBBI?w{|hEHpP7?S5;ySH$c^AJsJ@W(8j8 zcej@NTis?^a;3PiNei#GmaU?yi>2RMYc~`&9N%hNbx(I%v~t(VFx~4>m5Ywe zXmxs`)1}EsX0@@k-Y?wsh19xMluqPj=k&s_7mhZ1&BB?27KDdjW)d&lXS~d~ts_n^ zo(a?4Zex4ld_!zwV+xM)rYW3im(-mw-*U6p>%8xa3n6=@srrGOkbs0Vx&!$?dDM&OQdNf=8 z7-P7#9&26=6NzP{lHjA%TdCWDfBV~XQLEjuQgzm2E@A#+v)e@~%#jG%5Z zhAcfLcj7Sdp099$h6cIW5X~EWke1wawNzuh^+MP$mu#MBPEk>2V0{G1Qops{3p4AD zUhiaMyR+5z&>6wlE9GInyA`J5Q52iFy9Lh3aS*0SqB@z(US4i)T1Tc?V%k^~o=iL! zha2UiBX?yN*!BfmNC@%q`bGEyX(9<=)6?ZX^GOt&9)QM6gfuX0ydG<9G}}FmkBseH ztTDFfsREbe_AyQ)YZ{4OqMfYSGXnbTfJF(STDTHPy`XP2x7VubSd5ebW zYaSmMr%7$g{Nodt@|76QQ9vsY*!lH6`MkOk$7q`&6O4M zv212&HB;bxvO!cyIN9Wq*wh^PNJ=BP9OQ+Nc7c^OhUH%dq@AUJlw8RS*61Zh5tqmf zA4(eaeWuI;7i_rRSnGv_@0vbyX8PecxvKk}=gF>g5L=E^=Gcl+C}|*j9H+nUiVaRdLfuj7eqXoxRMY(U$zqnq-z1SXpTzW8*Ah)$KOWTCz~7 zsugLvi~q@1`$Cphy}h~BpWo^O>-{EY31?5uo~h5&Pc1A4Z!L*8q++udtj;vSOlM09 zle@(gn?-ZYH8!g)20@Lc!C(Qce{(UJ5z5w$Y>ECGr{u_Ixm$P~7eeEh5E{-`(nLMi z3MrP}Mm6(Fv$2syo?UNBWLqH;D|i~orRWPxn_4zmiNZX34YJqb%x{WOd#+Z-bYiRR z)Yg(LD!VqEZnfLZqEA^13I{7-q0%LnVk9=GGKDp5zp;GbX!CsI zVhh!J$Mm{$I-G6yS=}TVs+r9x$L1HJwAp2ZW<5U0Nl8CUO0Bg-DsR@>WfP9sP{>QglsxbJ`!LE%y(Q{I>-mG z>X*zDVyURX?O;c1|Kw?FZ(BAxIgPg1f5kv6`p~UA*~Afj5;JF2qXFU?Pa?Z3J-b`Z z4Mp$AMf0w$;|!7YYOZbBpw9^d>bWWIgFtBzL|`N{c~p&4T*TB)9Du>=|zz@kV{W-prvwOQDGa*D-Sm$Gc*u+Ur5n&81^dxfcWVe1@&L7KPJK2IP@zRu>h z$?~+WO6{BVh{?{fN3&)z9=x(omPTq8N%!gXwGPI&^OQyej;{4pDPRai+FLNhvKKFT;tEw!iDD!EjnK@s602B`{J z6rfxHR7eWr^Z$d>o=S2RK80RrKGD=?-0cwzRp^Y<+$SSgSxn=ZUReTptdS!9z$6CG3PR|NG_SkE( ztZ!|!$-LK;NksTTEpNhXw+mcqH!ss*tlekZD^9BSR4T0;Lp@J<;X-S(%%~UKT9;E! zH=7rj@)|1=*5Ux+OQ_lFhACMoBlPsldb82q;)BEl&@4bx#PqyQm=Yq@LZm%|o<(5j zyKT&)C(kOmJqw{T=p>&vET+g~+>4+kmSlQ%D zAT?Z%-}+j+V@z7MP+&Gbd$QSH>z_BY-kaUn>~AApjS=)~!^J$EH59{Wy$~a&NbVo~ zOye`2R{y(~u;{Jk#_+tdlK3i#W!Y72e>ByrD=qG1r?H|v*2Rt>0odT|hn_L63Y4Zi z*HK`s0SW`b3=(X+Syjp{Rn((mdlh_H2Kb`3K`9xNC==J|XuXn+-$s^+60Jtewy)}Cap+H5xgAvIB^gs!C+eMFBVHayY2*{5>?=L1D0B8s zkDZiVgDKSkt-nZg2Ym;DBzMrf4PA004)r5p=}0(pIGi~WPM%(1Og*PkC7nssz*_ARY=<1jX3l)oy(sgeD@t^qEGWpY z_VW2|r_DAb(|f1hW|EWOo@-q8g^9E&*c1+oQ>?M8_#}!rbBoV%xBM9&NPZYKAFGS! zTRmevd=0mhE^n^4mRtS8lj*J`D8$aaV&%A#s;~o@X6B|7&3>{{F+1j^OQoq~yfgVM z=`2|dYCqm#HOqV&aj!C5@?!=pcx>b#`|Zrf3VK8`qMVIkXfLx7BzKB)wl779#*0yt zTf%hHhLolm(*(NSbu9n2l`_NPE)7}Vra0Z`FP}&6XD>yVhwizbf!=JTgCVAr?+IyBjT*P1w&(UoQ4*%F`2t{#+p9QLPCo3*8;cf7IM;BwmLU-B_YBC!*{=K)$hMtKCTbOIF1l2cF|%GLZ8~n8-E3wnBRSJ1MqDgy zobCDksU&kBoieFH2=$$+KcalSRmAiFQPGdV^QFMX+4I%Kz*#g(?58QlN_L!PuQuZ!UuWkV&mMVrd9X4Nk3&Ne>sWuFrUswZNsk++-F=2S&BU+%Vc-C1do%dJQo zt;NQq{PI&l^3C1yhp&8VL3Jwg@Kz|@dCQ4fT}X+-kSDs)sPftp9>t@5sZ}bc3EilQ_fM>tFNBw z^kr-hGu-co zH2c~rnbZqwR?-RI)$Dc{eiy5a&d`*ndTF4|)ujU@g;JSJZW}_=F&Eg1G|aw$&g_NG z=2^oy^(egFW~YsFJGcf?vjk*8JEvXjZJU+pp3__Bn9M@_aTTcQ=(a9uvFu*Q8yl_l z?dT|kZQ(b4>X;GB(DP@U;9Iqp>-1K?6L)TXUr;BFA|Xw2(P>-E$s}o!ebc$HorLLg zOgS7egN+*NXbI6EV140M4SYDU#!)7>A(+A24aHs>4&r#COYPP&n>y}LAssu~T-Cug znQV2IBb@OgA`MfXHB-aDwyHuyVF_Mu2Tl?2JZ#Gh!YGj#^2FdE1djYF)RK%_2q;Kf zJ&Nx|7CV*;T&G#+L88xZgVds5;FpA}LCSD=D37@5&>vip!2i!jzpsS%tWu0(MvZH8 zGtGJsYA8i6qmWKPv1$~qWXUZE=@^m-nm?jxP~&DT;*>p(Mh(+So`pN+h&#^#XOTU4 zo)=ECjOKY9MeBfPHJ6J8KgUm1KwJZBEYz8eO-YU`(Tn_3z*Gnc4w<@&)rU%;Jx22= zH`$MOI~#?Ulm{jteq2$DB75WPIgS&U+_HxAYWZZD_#sXTrt24lQqyw4M|A_OG;QII zO^Z7fJqFLK?9rprm69tPj>t&l_KF=kh|No$Dt;x?k`QwhA!TbP)p{1GLNZFxe`ONJ zx^kv%8oJ;dMl&xrt3XeyqD41k9%AHZHKeFY){r=2s@pmW5k0iOCg(ung){SX+m#WD zjXIw%#ShAn%4a69Dy8BQb7-Mc6jP(#_WD#7`6M=5Vz<1zzMTv%@?JpqIX8d6r*0c&MlrsyS!7)kqI^B>x)i3*pq(hUOklof*V=vU8M!Q?z%1z;(VO z0xz?Z#zsC@b6qQ@>2<`?p`+Vad>y|t!w+Zpkqkd{Pv*EQk8w{P<kh^t2e4>Yk#So#pw9t5(@)Yf9Bc|Cqr(<29Bt z(vW3(5IMZ2ev7Ct`mp|$CU7ytaXa8BPH@Z^rx!IEnSKm^zd2Dj9|=j*7N9+Miu{*v~mk#H{X(0jP2bb6rO1|z0!e{IN4UbJx-x1 z4W?gsc(~c!4qRHYrH_Y9XY~dXOmq+BDxunBFkI>5Aqxq6<;L43h{r8vi`Wx`c@6q| zEQT&hO+ESS9INtZdm@8A__dC)>krX)S1WKG2k z(QImegCw#sMj#BMLh-?*TZ<8u}Wpt=XE(ytI+N;3-qq}%oeX$$eYCbJokf4zw@l&N#T_!)Nr=;dGO|r#) zRkHK3s)*)4#ItFN2xYT?J%5D?Uct*_v65}*(4Xnk9=bwOsA|@wtK#R?RSHD_ zCn*%gwKnkcaIpdzC51_KgDqpTS1Njin$&xhA{Y5blO%2CC8?G|E@x!7anG@v&k>|$ zc2t0N6Kf^v8M&$6^d|VIFy6_#xjk-3ZO zALhF>a4@%2kFt_$UCnG5<}Y#YykvDPs%3UCzV9IdO^&3KASbX3nJLsZ24X1FZBJ-! zvPkAU&9Nnx`ermXGiYHx_N|`5)=4G-tC%-VBBi70R<%S#qUA>*D}KoHU6O&iYf8{} zOUw%G%3zjQnh0`Iagf1o=Vw0BpVM5GkxgS5bQedSttJ+vIIriV9cN^XY%_P3n7MZp z+o*AN91L8|#zJy{wh}6x*R>p@Ah+2$3zd_tmFzZC762=Bd1u8^Dprv4%0dpFf6Tp- z23Mg;v)w@$Ow{z4YGr*wNZSMPD5DiE`k*=G>Dsb=2cgPtzB)DT$wCgcmbt5iNt$II zD=y)x%#i|CqnGwj^ouMFDLBmS1C(l+6-N4~2P&k6IkSPv5NF%j+K01%_KQ0UV5Brc z@fsY*J4nUA+u=h2ccaZO>_*+0Og4Ip2x;t=gzCsG==r!Uh&Cjvu6XInYMn-G86q36 z1<^-WYM5-SRzt**S|!rmRRW_lBlt;rD@#5Uix4@n9G``E9G#^*9e9>UK^+{KrAHc< z8O2^RNOkoARZT37$bmS;cpRj|p(V-Rswk3oXT~(yI4mOBsH?j2R!sw|3{j519ke`R zW$YCpKne$bspE;5!Yo?4xORAb2f41M?ScrO?6Im_HPv(lz*~xBgaQHepi`~ZPrp#X6m5TKyATyzEEZ z@?p<%M!S-hpgXesoDg%hS1z!a3|!N~lEDoFEqRJ-$kCKiY~FQ?2Ly=T;Gmb86QrOw zdK-S{8rwMmXmEoqaZDKk!TY)0Nn?q%5&W7*a1sC<5PG}5Ft57HD)CYC%});bm?b1S$v zmQEX(ww*aGQ)|~e$DCjx(k5q?XVQmvA=wnN3mrC()VM;{F@+OaXh*{b_?gxU+w5qd zX`m>8aHcaembhLIv9Rl8lw|F4QZg~b=rFt=8S&M#$%VK_XU}t#hvzgnt)yx8a96Yv znop8fVIiHwDXk|_>RL0Hxr7R`y}Q}LY!J^Xv)rHyi{z<}CUB~$>c;r2Mx&+6Z6~(b zh<8zN)_-dQCL2-ey`yY-#Ld5yW)gETMUlnm(OGIfk>EEX6w1y-xM@r)=4g&f2B7Fn z<{sIACKq#*xRq|}DsF7u7e}@q4nOhw1It0IEolps2dBhPG$cFU9N3SYB;oBZS%9^Y zT+|@~*}&^7mls}06f3r0$xfuT_?m^gEj4vtI-lX(Vw=Vll2*qRf(@_=B?+ZMB=~Zd z6InVg={ap%ZGDZ})d92A(i-*7=!xQrXO&h_JF8x_(atm=?v@PXT~Zp*U_JRHCCao1 zY^kNkpc3l|6k2TNjB0E~iMmas3@EZrEi~E8=|ZtAf`!R+*(_)!2T#kj*%ZdrS$D-T zX`EfAo>Q$|Y{6OjXBw?1Q(117;nG-^#L#iz%qLfBJq;H?c@UfWqmG=1snjqERVhh& z#%wUYhH*wKRNI(duG>0kK)H3|K>L`pQi>$_%d8Tm!UBm{iMvC^^*kj$5PD^bB2<`P zgj7G2uzvSqAw1$nk*Q{dK}}+|9F{nw;J9*S167fZW&;=bjxcarv=CyLwOtl{i3t(( zE4Q2Bjop&XN?yfoB_-SH>M}r|Li2OJVz}HmyPjSlD$#iPc#WxJiKv=F^eeY&ZUjR_ zNjH{_S~zl_n4FSH{*k0q6RAL=AJZBqzTNijLR)EKFU_w%h$Mm?0M@DbMZR$uFGuQz z-w8iI##KqV1|k;`vCwlAo3^>+XZ|@^9v=YlO-YyWv)t5nH#Z#ph#Q^W(G?$^a3wb@xZBGORX#J? zXYZl;96Nc^&)?WuE=IIqMqn+l(L%|lk))mE{&HvDvV=Fgo>o#HV)L_D_UXb|wz$^o z&KZ{B{$6Ul^Q_jfgG{#D;DPMyI~}&U&AplPYbJv{#cw&yKw@ zv9Ztybq;~Cx82}r1G%;7$yFJRT{8mt5qU$)3liq6T#S#DwC49F^%Sa%nEMR!WbQY> zp1D^XSebppa!=#U99|iAwY$aLa--)L1&mPMzR2Qvt7U}z0)>&QHzFIN3TSuuN>b~$lq%Qnp@$n=cjVdBaq_wb;*cvR!F@8*xg<#DZ5;yGQdO_WyD02R#I zkFB?)$C|rvC~)D(L)lDhGxo;Wj?W*=Ll+zLi+Y7=-6!iJveqN4lGJZr7&{W6!jY`2 zsg|55Q79|(h>9vvD3X5Vj^flc2zgWp3Q=egeo-rPT72rfv5A!GQb>PJXeEl$T|7L7 z-<6o=m~*;lXBqc)(mnh@u)>+A7W0hPFmj*yZV@5RCL?=j!~!~OOeZ?rM@?b|M~`1P z-Iwzc=oYRb)qBb1ejMFgh?gvo@E*NN^Kj|a4)pC9DyJw6{fj(no5Pj*Gp)u$gR1AQJNuO_ z@7cB{i)Ymrmz~8HxzD1_*T8Ans*l9{1`{8zNn?E1nGU$|qF!0hn|xaBr!!9|Vb$lz z-CK()pARjLy&+%=dtJnGUC@S$DGllXLrQ&~>0tACeB$|p4)J#tQCgCn|FvT{PP2$J zo10-qXL&cJjKFozYB1_&I=mK5p}BU>%`h$uKWo9JzOXPi6Xq<=IlrqFB~&_0VOqxk zt<-+pQjq3#j+-+~+iQ}Z7_Q>Y4(Ua1IqAl^#(uDYZEg1A_0D|qde+tk^k{2w^G%!) zZ5DwW{YXgKCeDsr7Ds7z_1l$5a=X%J>}#2v&Y|MJ?}N`S$Rj7mATM!dRPld z%TX6SZ7tGf%b(R`X{0O8HX31tY{=N4t&$Wf8AtO+=oNG~y29I|UJ77{C}}L{r5<_Y zZuwK`baL1WR&^EEuo;%R)*t1D3i2Q=T2gxZO#>_kE;(x4D zG!#qF#hiC6iL+M$6e)9hvJ3u{fhQOp?sFpdi4OPi+Z!Imai=30=G(C#jyt`08^NO# zPWQD36Wqs8r<$(gXV9(V=vo^xS~3_SQJsy?-3FY6tBjv=?AW+TW2PJ<^%Ao2c}0B2gQ32%&5K{ zV7*N4-Ys>GAlf4o9OATRC@79Kze*jSqEPiX+^5;TIM6Q*!P;f#15^j?9VmP8MTs=% zOm7xXoThJk{lt4VBdPV=NRUaix*@RaPq{gt#VQi7sLxq~AwkjN2M4@>o z5LyQ2I`yjbajiaOb?i6SP?oAxX#=I7nVWV-f%($vuiSxDs#Pk%syl+V?2m6)*Qa~3 z*EM_E#W7qgeooujN1ME~5rc8sIAT0&V(N(NYSOjDSv}b*%yx38-dDpUs*Os&i=ga$ z*0hMebcrYf!LShBX-yiHKABxTs%)riZW>%{wYM3oyc`gYH~JBq!_J0c!W9N-zqX;o zgU$Ljj?~bO%PU{C$8pGY=W-xKgGTA)gu>?HPm8gzDjt1{>-zY?hUo9H(oU9b)!8oa zV7#3nJf^(?G#J<)1}e-3S$%Yt**5o#L!^0ekInA=rv0&=eLx_-o1GDtFL<{}LP(bK z`5a#q6%I=>%gfxwPM4|X+RnBCizaWo=7qPINN)=lgyN|%u3N701s2_!5VTYurIpQ} zfb7_Lkv&FiZZiw;%^>Ap*+bMeum%jqU>KH#5&TS;(_6js*t0M;%F)?$oS8=#L5rGe z#ox1|5%%N*K{+O1F^bCr&{7xr$Zf5gK!|_rv6li zWk|Q#xDZbA-G{Zacf{XA@%PU7dl$bniTUeS{`!@_e($0>?(e^cqWjMHtN2QP!G9Yd zv{ED}qCEI@k3?weos5$!%V+C{&(0}J!&F8?3W`c$6lG(`;e_0skb4qxZ$fyQ$^$EJ z#qu8~^LCYpykB*USNiC?@GM@-P|F!;(bj!hj&dLEuJY(a(=d9`kmd{ITr+$Pjt@uI z4PQ6B-8{S0jsYUV7K>2`7Li2Z8ycPgze*lC`2r=)9|hpd%TXlhQA^TtTx!dQR4h;X zG1tPS7B2@;saAXCEH8FB!n<9OqBfKlZ+JzDTEHj?;Z?8b6@RUf6hzN_Sy-EPcvT#d zCLqJeEF$6t`O(x7IT8_4atbM7A`k5Hv(&$+KUIZUR)0dV9fkRBcn%A{h4Yva&g-`; zpHs~>_?hb-tp8O*|GhK*9*)09{Fe;PpZx5XN6Y*dH=TTu^;4MH?3{Z(6?4cCC5uaP za5}8NtWWwNRWx>EQYyq!`&{R8SmcGSOT=7V=c5UN4XWpkUil-UIeG6}sjA%E3a0Ez zsdV01bsnxdk5rsX)woO5xJ%WzOVzmbYD#h)r7~2y(d|-?b)FVHxzglVMkD?@BZ+d> zILR;`g7Z+$OHLCHdAI^Ic5>h3X$)l~<0!|Bkz%-oz9V8O$HY^PiG>^!R~cq(1LR_z}yOvvi0o|M+=|QPI=eMWHNL~&u)ly(yzLXA!MZZD-t8iNby%BrUVKA$CGiB z(>x9lPH}*Geq_*HTi3S*XOKQKNFM$aeMZ--kZPdtd0$XN$1&tPZlD<59Y}Ua67-PF zAq7H+6=a)mN_jE%4ZF z>#}DZ1KK`FB~Wshk9JvTJtbWnk2J*2C+Gm0*Tc@DS$?Lw8g-gpxnw6Iq)jNCzgndo zNz`Wl#zQrb1&CLBi=7=io>T1Xl&%u<&y`?lOY=XQ6tR0q~&L9_`W>MYa zyW?u3h&t8NaI)i~vzYf3Ab+%ZEbK0gS&GG6D{ke5&If8zR+Ubb9_q| z2bVZFZICEhVSMfYXSW9U^& zr+x8jqqCC3{q=A*-c7_dE`NoODAlIR(!o4Xt>Uy$R7X;V^u-ho!uaj7coN$k>H;0l zvj}o%%~v>7hZJ9)zHBVKX^P6%B2MrYnKG81eYDfj6VKQ$cz9Sl;3)7gt?fWa7KD0O z3dh^>S$Lrfi#Y|EVFV+Sjv2z{27<$FLB;2oG$~6s+N(5r1~GmiPStI6`|5V9Iyg%^ zov+vFjFm_Si&Rxea@k`T=M}EPFNQ6Av$)jK(v)Aq6%Ra%Rl4MtKG0-ipm3C>Ff7JS zX_hJ2W2eod-9>S!T4tTPn!Jd3J^dbuh>MWuh;NZ8(&_W9NaSf+OGZn$h*_s6hpWx* z!}2ncO`thZo#vP=Qqe{+ML3}-X-2E(0nX$OC6op9)aKjVf#ryii><{=9UBidDy&&3ZyU_^InGD{2|L zQ87xFGF+(ml`h*EEsO>*R63IEXZ*@U++9X2F~T@&O=Ia{$4o7?VsCMQv3F$UlSO2s zC@F$7D{1LcN!^~6c~=MuVRAA)PGIAsLhyo?X}WutAeD5>@D*|;8Wly?L{!@AFNL_N zlHFdEtc<0lsY;jD@o0XiWBzJa)+1)vN(n20B9Nyoe$gS;!6>ubTUp^8W%BpXNTmD= zhLyy3^F!M5fwZ#BgSoi>K#>NBS)9UZmMT=H4A-orZ=AZ3vG_odJMCpKV->DG@Vc{4 z3RxgF0!q5;lRUp=V~5kO>}Rg|KDOT-VZvqt*Bc*x0Le5$N8Q4QF;q9!> vVxxm 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 literal 0 HcmV?d00001 diff --git a/SOLVER/Syslib/DllExport/RGiesecke.DllExport.targets b/SOLVER/Syslib/DllExport/RGiesecke.DllExport.targets new file mode 100644 index 0000000..fc7cfb5 --- /dev/null +++ b/SOLVER/Syslib/DllExport/RGiesecke.DllExport.targets @@ -0,0 +1,24 @@ + + + + + + \ No newline at end of file diff --git a/SOLVER/Syslib/Properties/AssemblyInfo.cs b/SOLVER/Syslib/Properties/AssemblyInfo.cs new file mode 100644 index 0000000..29565e9 --- /dev/null +++ b/SOLVER/Syslib/Properties/AssemblyInfo.cs @@ -0,0 +1,36 @@ +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +[assembly: AssemblyTitle("Syslib")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("Milok Zbrozek ")] +[assembly: AssemblyProduct("Syslib")] +[assembly: AssemblyCopyright("Copyright © Milok Zbrozek 2021")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// Setting ComVisible to false makes the types in this assembly not visible +// to COM components. If you need to access a type in this assembly from +// COM, set the ComVisible attribute to true on that type. +[assembly: ComVisible(false)] + +// The following GUID is for the ID of the typelib if this project is exposed to COM +[assembly: Guid("df4a7550-3670-4ebe-8110-ed61443a8167")] + +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +// You can specify all the values or you can default the Build and Revision Numbers +// by using the '*' as shown below: +// [assembly: AssemblyVersion("1.0.*")] +[assembly: AssemblyVersion("21.12.21.1")] +[assembly: AssemblyFileVersion("21.12.21.1")] diff --git a/SOLVER/Syslib/SYSID.cs b/SOLVER/Syslib/SYSID.cs new file mode 100644 index 0000000..f8337bb --- /dev/null +++ b/SOLVER/Syslib/SYSID.cs @@ -0,0 +1,142 @@ +using System; +using System.Collections.Generic; +using System.Text; +using System.IO; + +using System.Management; +using System.Security.Cryptography; +using System.Security; + +namespace System +{ + public class SYSID + { + public static string _BIOSID + { + get + { + ManagementObjectSearcher mos = new ManagementObjectSearcher("SELECT * FROM Win32_BIOS"); + ManagementObjectCollection moc = mos.Get(); + string motherBoard = ""; + foreach (ManagementObject mo in moc) + motherBoard = (string)mo["SerialNumber"]; + return motherBoard; + } + } + + public static string _MotherBoardID + { + get + { + ManagementObjectSearcher mos = new ManagementObjectSearcher("SELECT * FROM Win32_BaseBoard"); + ManagementObjectCollection moc = mos.Get(); + string motherBoard = ""; + foreach (ManagementObject mo in moc) + motherBoard = (string)mo["SerialNumber"]; + return motherBoard; + } + } + + public static string _ProcessorID + { + get + { + ManagementObjectSearcher mos = new ManagementObjectSearcher("SELECT * FROM Win32_processor"); + ManagementObjectCollection moc = mos.Get(); + string motherBoard = ""; + foreach (ManagementObject mo in moc) + motherBoard = (string)mo["ProcessorID"]; + return motherBoard; + } + } + + public static string _DiskCID + { + get + { + ManagementObject dsk = new ManagementObject("win32_logicaldisk.deviceid=\"C:\""); + dsk.Get(); + return dsk["VolumeSerialNumber"].ToString(); + } + } + + public static string _CurrentDiskID + { + get + { + ManagementObject dsk = new ManagementObject("win32_logicaldisk.deviceid=\"" + AppDomain.CurrentDomain.BaseDirectory.Substring(0, 1) + ":\""); + dsk.Get(); + return dsk["VolumeSerialNumber"].ToString(); + } + } + + public string GetSysID() { return SYSID.GetSystemID(true, true, false, true, false); } + + public static string GetSystemID(bool BIOS, bool MotherBoard, bool CPU, bool DiskC, bool CurrDisk) + { + string code = ""; + try + { + if (BIOS) code += "/" + _BIOSID; + } + catch { }; + try + { + if (MotherBoard) code += "/" + _MotherBoardID; + } + catch { }; + try + { + if (CPU) code += "/" + _ProcessorID; + } + catch { }; + try + { + if (DiskC) code += "/" + _DiskCID; + } + catch { }; + try + { + if (CurrDisk) code += "/" + _CurrentDiskID; + } + catch { }; + + int codeType = (BIOS ? 1 : 0) + (MotherBoard ? 2 : 0) + (CPU ? 4 : 0) + (DiskC ? 8 : 0) + (CurrDisk ? 0x10 : 0); + + //return codeType.ToString("X2") + "-" + + + return GetHash(code); + } + + private static string GetHash(string s) + { + MD5 sec = new MD5CryptoServiceProvider(); + ASCIIEncoding enc = new ASCIIEncoding(); + byte[] bt = enc.GetBytes(s); + return GetHexString(sec.ComputeHash(bt)); + } + + private static string GetHexString(byte[] bt) + { + string s = string.Empty; + for (int i = 0; i < bt.Length; i++) + { + byte b = bt[i]; + int n, n1, n2; + n = (int)b; + n1 = n & 15; + n2 = (n >> 4) & 15; + if (n2 > 9) + s += ((char)(n2 - 10 + (int)'A')).ToString(); + else + s += n2.ToString(); + if (n1 > 9) + s += ((char)(n1 - 10 + (int)'A')).ToString(); + else + s += n1.ToString(); + if ((i + 1) != bt.Length && (i + 1) % 2 == 0) s += "-"; + } + return s; + } + } +} diff --git a/SOLVER/Syslib/Syslib.cs b/SOLVER/Syslib/Syslib.cs new file mode 100644 index 0000000..4d4df5c --- /dev/null +++ b/SOLVER/Syslib/Syslib.cs @@ -0,0 +1,224 @@ +// +// DO NOT BUILD `AnyCPU` +// in AnyCPU build DLL will not work! +// !!! Build only x86 or x64 !!! +// + +using System; +using System.IO; +using System.Collections; +using System.Collections.Generic; +using System.Runtime.InteropServices; +using System.Text; +using System.Text.RegularExpressions; +using RGiesecke.DllExport; + +using System.Management; +using System.Security.Cryptography; +using System.Security; +using System.Runtime; +using System.ServiceProcess; + +namespace System +{ + internal static class UnmanagedExports + { + // System::Call 'Syslib.dll::GetSysId(v) t.r0' + [DllExport("GetSysId", CallingConvention = CallingConvention.Cdecl)] + static IntPtr GetSysId() + { + string res = SYSID.GetSystemID(true, true, false, true, false); + return Marshal.StringToHGlobalUni(res); + } + + // System::Call 'Syslib.dll::GetInstallPath(v) t.r0' + [DllExport("GetInstallPath", CallingConvention = CallingConvention.Cdecl)] + static IntPtr GetInstallPath() + { + long fs = long.MinValue; + string drv = @"C:\ROUTES\"; + foreach (DriveInfo drive in DriveInfo.GetDrives()) + { + if (drive.IsReady && drive.DriveType == DriveType.Fixed) + { + if (drive.TotalFreeSpace > fs) + { + fs = drive.TotalFreeSpace; + drv = Path.GetFullPath(drive.RootDirectory.ToString() + @"ROUTES\"); + }; + } + }; + return Marshal.StringToHGlobalUni(drv); + } + + // System::Call 'Syslib.dll::ServiceIsInstalled(v) b.r0' + [DllExport("ServiceIsInstalled", CallingConvention = CallingConvention.Cdecl)] + static byte ServiceIsInstalled() + { + ServiceController service = null; + try + { + ServiceController[] svcs = ServiceController.GetServices(); + foreach(ServiceController s in svcs) + if(s.ServiceName == "dkxce.Route.ServiceSolver") + service = s; + } + catch (Exception) {}; + return service == null ? (byte)0 : (byte)1; + } + + // System::Call 'Syslib.dll::SetPorts(t "File", i 7755, i 8080)' + [DllExport("SetPorts", CallingConvention = CallingConvention.Cdecl)] + static void SetPorts(IntPtr f, int tcp, int http) + { + string file = Marshal.PtrToStringUni(f); + if (!File.Exists(file)) return; + FileStream fs = new FileStream(file, FileMode.Open, FileAccess.Read); + StreamReader sr = new StreamReader(fs, System.Text.Encoding.UTF8); + string data = sr.ReadToEnd(); + sr.Close(); + fs.Close(); + data = Regex.Replace(data, @">(\d*)", ">" + tcp.ToString() + ""); + data = Regex.Replace(data, @">(\d*)", ">" + http.ToString() + ""); + fs = new FileStream(file, FileMode.Create, FileAccess.Write); + byte[] arr = System.Text.Encoding.UTF8.GetBytes(data); + fs.Write(arr, 0, arr.Length); + fs.Close(); + } + + // System::Call 'Syslib.dll::GetTCPPort(t "File") i .r0' + [DllExport("GetTCPPort", CallingConvention = CallingConvention.Cdecl)] + static int GetTCPPort(IntPtr f) + { + string file = Marshal.PtrToStringUni(f); + if (!File.Exists(file)) return 0; + + FileStream fs = new FileStream(file, FileMode.Open, FileAccess.Read); + StreamReader sr = new StreamReader(fs, System.Text.Encoding.UTF8); + string data = sr.ReadToEnd(); + sr.Close(); + fs.Close(); + Regex rx = new Regex(@">(\d*)"); + Match rc = rx.Match(data); + if (rc.Success) + return int.Parse(rc.Groups[1].Value); + return 0; + } + + // System::Call 'Syslib.dll::GetHTTPPort(t "File") t .r0' + [DllExport("GetHTTPPort", CallingConvention = CallingConvention.Cdecl)] + static int GetHTTPPort(IntPtr f) + { + string file = Marshal.PtrToStringUni(f); + if (!File.Exists(file)) return 0; + + FileStream fs = new FileStream(file, FileMode.Open, FileAccess.Read); + StreamReader sr = new StreamReader(fs, System.Text.Encoding.UTF8); + string data = sr.ReadToEnd(); + sr.Close(); + fs.Close(); + Regex rx = new Regex(@">(\d*)"); + Match rc = rx.Match(data); + if (rc.Success) + return int.Parse(rc.Groups[1].Value); + return 0; + } + + // System::Call 'Syslib.dll::GetProtocol(t "File") t .r0' + [DllExport("GetProtocol", CallingConvention = CallingConvention.Cdecl)] + static IntPtr GetProtocol(IntPtr f) + { + string file = Marshal.PtrToStringUni(f); + if (!File.Exists(file)) return Marshal.StringToHGlobalUni("tcp"); + + FileStream fs = new FileStream(file, FileMode.Open, FileAccess.Read); + StreamReader sr = new StreamReader(fs, System.Text.Encoding.UTF8); + string data = sr.ReadToEnd(); + sr.Close(); + fs.Close(); + Regex rx = new Regex(@">([\w\n\r\t\s]*)"); + Match rc = rx.Match(data); + if (rc.Success) + return Marshal.StringToHGlobalUni(rc.Groups[1].Value.Trim()); + return Marshal.StringToHGlobalUni("tcp"); + } + + // System::Call 'Syslib.dll::GetArea(t "File") t .r0' + [DllExport("GetArea", CallingConvention = CallingConvention.Cdecl)] + static IntPtr GetArea(IntPtr f) + { + string file = Marshal.PtrToStringUni(f); + if (!File.Exists(file)) return Marshal.StringToHGlobalUni("one"); + + FileStream fs = new FileStream(file, FileMode.Open, FileAccess.Read); + StreamReader sr = new StreamReader(fs, System.Text.Encoding.UTF8); + string data = sr.ReadToEnd(); + sr.Close(); + fs.Close(); + Regex rx = new Regex(@">([\w\n\r\t\s]*)"); + Match rc = rx.Match(data); + if (rc.Success) + return Marshal.StringToHGlobalUni(rc.Groups[1].Value.Trim()); + return Marshal.StringToHGlobalUni("one"); + } + + // System::Call 'Syslib.dll::GetOneRegion(t "File") t .r0' + [DllExport("GetOneRegion", CallingConvention = CallingConvention.Cdecl)] + static IntPtr GetOneRegion(IntPtr f) + { + string file = Marshal.PtrToStringUni(f); + if (!File.Exists(file)) return Marshal.StringToHGlobalUni("unknown"); + + FileStream fs = new FileStream(file, FileMode.Open, FileAccess.Read); + StreamReader sr = new StreamReader(fs, System.Text.Encoding.UTF8); + string data = sr.ReadToEnd(); + sr.Close(); + fs.Close(); + Regex rx = new Regex(@">([^<]*)"); + Match rc = rx.Match(data); + if (rc.Success) + return Marshal.StringToHGlobalUni(rc.Groups[1].Value.Trim()); + return Marshal.StringToHGlobalUni("unknown"); + } + + // System::Call 'Syslib.dll::SetOneRegion(t "File", t "RegFile")' + [DllExport("SetOneRegion", CallingConvention = CallingConvention.Cdecl)] + static void SetOneRegion(IntPtr f, IntPtr r) + { + string file = Marshal.PtrToStringUni(f); + if (!File.Exists(file)) return; + FileStream fs = new FileStream(file, FileMode.Open, FileAccess.Read); + StreamReader sr = new StreamReader(fs, System.Text.Encoding.UTF8); + string data = sr.ReadToEnd(); + sr.Close(); + fs.Close(); + data = Regex.Replace(data, @">([^<]*)", ">\r\t\t" + Marshal.PtrToStringUni(r) + "\r\t"); + fs = new FileStream(file, FileMode.Create, FileAccess.Write); + byte[] arr = System.Text.Encoding.UTF8.GetBytes(data); + fs.Write(arr, 0, arr.Length); + fs.Close(); + } + + // System::Call 'Syslib.dll::SetModeMap(t "File", t "Mode", t "Map")' + [DllExport("SetModeMap", CallingConvention = CallingConvention.Cdecl)] + static void SetModeMap(IntPtr f, IntPtr mode, IntPtr map) + { + string file = Marshal.PtrToStringUni(f); + string proto = Marshal.PtrToStringUni(mode); + string area = Marshal.PtrToStringUni(map); + if (proto == "dual(tcp+http)") proto = "dual"; + if (!File.Exists(file)) return; + FileStream fs = new FileStream(file, FileMode.Open, FileAccess.Read); + StreamReader sr = new StreamReader(fs, System.Text.Encoding.UTF8); + string data = sr.ReadToEnd(); + sr.Close(); + fs.Close(); + data = Regex.Replace(data, @">([\w\n\r\t\s]*)", ">" + proto + ""); + data = Regex.Replace(data, @">([\w\n\r\t\s]*)", ">" + area + ""); + fs = new FileStream(file, FileMode.Create, FileAccess.Write); + byte[] arr = System.Text.Encoding.UTF8.GetBytes(data); + fs.Write(arr, 0, arr.Length); + fs.Close(); + } + } +} \ No newline at end of file diff --git a/SOLVER/Syslib/Syslib.csproj b/SOLVER/Syslib/Syslib.csproj new file mode 100644 index 0000000..9c0f8f3 --- /dev/null +++ b/SOLVER/Syslib/Syslib.csproj @@ -0,0 +1,78 @@ + + + + Debug + AnyCPU + 2.0 + {46715A67-B134-473C-ACE4-EF6AA1C0E688} + Library + Properties + Syslib + Syslib + bin\Debug\ + + + x86 + + + x64 + + + true + DEBUG;TRACE + full + prompt + + + TRACE + true + pdbonly + prompt + + + ..\..\READY\TOOLS\ + x86 + + + ..\..\READY\TOOLS\ + + + ..\..\READY\TOOLS\ + + + ..\..\READY\TOOLS\ + + + bin\Debug\x64 + + + bin\Release\x64\ + + + + + 3.5 + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/SOLVER/Syslib/obj/Debug/ResolveAssemblyReference.cache b/SOLVER/Syslib/obj/Debug/ResolveAssemblyReference.cache new file mode 100644 index 0000000000000000000000000000000000000000..4bb3ff5ddd64567903863908b522395d5a2099b6 GIT binary patch literal 4493 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 literal 0 HcmV?d00001 diff --git a/SOLVER/Syslib/obj/x86/Debug/Syslib.pdb b/SOLVER/Syslib/obj/x86/Debug/Syslib.pdb new file mode 100644 index 0000000000000000000000000000000000000000..943a5b998cca5a33202110ddbcaf14342716a2c1 GIT binary patch literal 32256 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 literal 0 HcmV?d00001 diff --git a/SOLVER/Syslib/obj/x86/Release/Syslib.dll b/SOLVER/Syslib/obj/x86/Release/Syslib.dll new file mode 100644 index 0000000000000000000000000000000000000000..44c10e21b38de999227fba86223e6e8bb5374c9b GIT binary patch literal 24576 zcmeHOeQ;dWbw6+S?b{DoYjzb&azJ>EjU(IgMjw_f8{0@;$+iNrWbMje5Ru>RK1+*s z_bu z3-0gS_f}e2GT`t>)#jW4fGP36p3$r_25Ky;&o2p)Sut$I68p4D|yfT$gsn63T%UWY%-a<8qw!j79Y9KT2pf=jo_+Dy+pffM3;3Da1n43 za1n43a1n43a1n43a1n43a1r=_gg`I9S0nMesfTBWMuGaE(T!aFQ><7C#WLisfUxP+ zb70&25E~)B&LNV7YCU*y-gtxk$~({R@c)wE-@8n|fB&1ew*fd`0~|bz^S`j)CSU`c z0cA)rR!I($I*<$ju!eS-c2?~NklXrcWaw9dG&bqz@R0FE*0zBA(5m81O^r>Bt$ref z`{BxVFQM5yULvA*L!P#XV%)=Zq5Bn4Vd$K9-8u5kW+3R=40$#KwbW+#W;1ZSQ=1W< zE8?428~6d{?6eIF6WC z1C)@t3bfAe(POwTQvy1&L#;vKjq&x;S=b|-$X)1|P^hu4=QI=^|LJ9c`rxYN6Ag0k z(;2?|BED6@jw==1LWfrM-TX>}5>;B)aCK|B22;Cv62kgos-#*b4aWc&d_sB1-jsJ;;s ze{V1%Kd>yIZ-k<4b3kvyeP!3ifW8Tg(s7N=gaUdTvKYd~!_`K#eipjAh}?8@gB+2A zr*fT7`fcyL2K2!n#%APGq1JY`^9z5g9Df~98Gpt#b%Ja21VXj-ye5XJ(&lN}(8z7& zHHK$c_g3;EQi^lI1N@M_8>BS> zB0%JI=ac(qM1FJs_b%H0I^$M`RgBw@+j~al!vbkp2!!6xXb2xQ?hp^-a;dn!e)(}d z{0ZWkbN3N(y?Xg^z4-~^nsX=O^3iYO{>kPZhhsE&spJ*Y*JuG-GxaWGV)0t=w}>Y+ zH?QnE>ts>&GQV*hS1#5W#W)1MZoy(vADmk(cxH*^0uxIX3r0{Z7!jWsbYea58<}|l z^Bgp|>qTzB_`*fG)%Mg2HyE8U1l*tmBT8dLaaIc3%ZA;_&+V4@F^R#t+pP;J*?eVZ?kD#{*jVb6ULC*^MqM$z&^gThFyj(+{ zH||Z)7}}`NNpIGx&?BHB`lDQn>`T$fSKcu-AuZPZqdg)(5C1TBoQxBcPSg>tS7QB~!;a^Q} zQJmHb+9BvR&`IpRSU)J}0YMK5stTGD^bSF11ic$HkG8*sJ;E8#b@Y(XKSayr3ii`+ z`5tYt&rwnSL-2RW_t7i#6?q-KAS_>i zQ}i=Y^P7UcO=;g>)4Md|`#y4i-?xi`5|?Gmf1-%sgTiv9^cKB={^6+BOaJcsj?^JV zmD@ZW(pAcR)FE{$S@6Be?Vzes^bAVJG5-!ok16fm1Jbh!*ZBiwt9QNhrt*$gmEKq0 z_2y9L2i~`7jXx;g4L&TNmTvHe>9jQFUq|-}dPb`Fp9247f0KL$HgP&5o$~)kJ}W)o zzmFc0{@nkX{Df4L&&$tAFQIHi`jP()`6YT4d>rHO-9VhaKu-tbm=i(JHPi*#CFpgu z4Sa&`0KI|k1WgM4t%7ERewrSJ-lWHZ8M+SspO?}Ukj{fXDUl~lcY9)>!`@!dHu*5< z`*H>JTfPTDhm_|*-&W3pKHw*Bni7Hg=@I%%`XRkemS?ATmHaFD-vSs=tZ(zHCt9qvfKND`@e-qNN#nDXAGpbBLD`YCexGLqabeMSMBE zNH!e%)q+-yGt10i(X?PYqFPhrlpZu4rIv-t8Uf@co2C*Y%!`(!QnNgwwe*ahXMLZc zseB(UYNOgDyF~@_1oW~tq?VjcjgM+a^5_({>@!WRkj~HS$>p_!nqfjW*HzWb1sQwG zx$K--LN6T5nYnaco6}W`CdzrMY%G$IGSsYAP>tzD%IKvTBR4r!Gv=z*q1oATW|0iU zP*RICi&a)UlAA0WDmQmwcE4t3j9h8)%v8>*ZIjdc{W*2AsGC+UV^Y7CE>BLX^O|n! zFb)`Xa~5-F%y6K<+L#+OLLtH%)$;0b!I^WBI)hC#(8{HA`J7eLOvJ>q%n5BsOu_;N zAI-7$3`}aOk-JeZHPW1e-KwcM(|i(>+nF*8Y7(=3 zkQWtaJ`U+ewf+1nyF5Skui2Mogl7@IXn&={E}LxYyjVQ!k8&p{6nwO)C>*vciXbl zXBdP>b6G&?luB_M`jUyk!GU5%&!XpPmH}qFXDkc@UXJ?mlRB!ODj>K*32UiXqfkAi zEgC44tQks7sRm(P>FS(YGRI7HvUUblSK^dv0B@5tu|SJOCbM7#8d42&O2w)!P)X_g z_Tn`~&5spx)$j+0so%&Q)dq`4bnaszn09ZOqnetXvGY?iB~56B!K{?hv6SsGG%Z}o8vr-uQA4dcN*Zx`U6cQkxU=>x?qCGxtdRl#KothbZpylUWKV4!VShfIP>I}TdP zGiWzqRA`tmRtAqOLob&E&dIVJg3#1VQw~Y!_=!{E84rgsmBMWqc{0@Env6>d-VLJ&q zBjV12Gie(8$1G|(D)bs?7T*l60UFyu>Dq%RlNT*S=ZQ8h(&}x$sTcAIFJ2t)dN+}@ zg1wFl^vBQ}1MoObw48gRM()ZY>f@sQaoFmJ&O&6oujO8;wj?PcKPq&zdKa~#t}Oa@ zJ?)^+iZ&m?k0lvBi*UH<#kFG5oJ*A5hX_-sVSc$9t=~e77-U=7_pR`L3|A4Cfy=^W z(rpXk;hwc{p;o^RYmKP;*u@<3lF0x!{dVe zp=59u)nm_%Q<@gOGbW4LwPb-j&wy4$%q`tWQ{XIcc!dpCbE&Bo)tdIzpj{I;rsQkt z_UJQD#`ZsY=G@xySANIy5jCcF6hm%ZFIE)jDaElLm$s54y zRZNn?O3WjLBlTV-Qtwg1DAtS%ha+C8IS@dhKr={lGu|>lg}S+!3wnGYkpX4{fyb|( z_+sQIq3v>vqGL=BF}V$yS8)`cI=?S^AUYO~s>tz6Q5Emw(Sk4L2?qkGGmPZ*OJP*m z;zLBBExw@N8?D?OEw}jK8wMeNARO=o0s*fV7E+{gdZk3Y070UZr@k+r*N+WhvzRMk zX|6mhQ2-AKJYWa25+%p(bRM;r*m=hn?7Z7z)i;o~n6rJ|$%lUU*A{a&r8|pS*)r68 zTWqA9&gU{WXfr8&S}X2MZ{4bPXS%m^Z0p*rwfAg`EU4atxEa@Q<*YU#juq zJ+LKOIpd2_r1A~)Y6x7k^3XEBFBFEJ^8%IcNECIRtTk^WOS?&DF~BgwA{eBVvuMUy z=N1sdsQNOsRNH`I6y`bV35Q}{Oy$aRk;?aYe$50hwWF2qM`!%VXu;G$SD~k#j#gg4 zDp2{BL?Mhk=LK=8HV<<>T6qOa1IF5`LimYTmcm!~m1<+6m6u^tc@zh(XwW|AHFv4D zs2XSW6@1CY`Ar;|0#803Sh6wxiA2i~=2gp6H##IYK_3(F?m`o$a0QQzwyv ztpy*U(6thMWHEfA#W67+{(`~hTBNJ_3sTC{coR+w_Upyj_s`Unp&v6vc-6oE;*v*j zJ-7!Ken~N!>`&hL#G6+u+fNSOv+KQ`=kI#_6c-rUKEA*2;9z2SXkuh^_;Uk^RC0V` zba*T^kenDv4v&o{1}4Un!#5rr7#+96AJ@~jk00;ZGLADO4JRUwI$p}6Wz@bG#7X;^ zk5#4l_v-KE=Cl(D-M}&L5TCz@9hIhuLt?hLa4p4p=S*GBMZiVCMZiVCMZiVCMPSJx zz`yemzq_i;56%8%SUb@IJ=^WWb@O4Oaq(@PHO%9Ov2+mUuoIvIIGat1GxPnB2XRim z2j_^Kz9;|32YkR~f61?Y(O*IMWvNJb&7b#GpOyW%B-F}h<$G{ena7#sAkHg~;M9`S zS{ytP&SMQ&6mhbe$K7(yG=%{@F8>uan%Mb6&u91ea<)iK_Y0eL{As@ZZ!=EzfdS5o zSEFnK-U>M1WFIqVkqQYXv`9lDCLJfPG5iK04G%h~eKAB=f_YUE2zWv2$UkYnG z);{zLfA!(-MR_0=!-$^WTbC-&{@vsv;3D86;3D86;3D86;3D86;3D86aM=j-+JEnL tSp1#WWtVmfxCpoixCpoixCpoixCpoixCpoixCpoixCpoi{2xHze*hh~n;8HA literal 0 HcmV?d00001 diff --git a/SOLVER/Syslib/obj/x86/Release/Syslib.pdb b/SOLVER/Syslib/obj/x86/Release/Syslib.pdb new file mode 100644 index 0000000000000000000000000000000000000000..b0c6a63e5b462a6a492f9ffca923907d48a9f497 GIT binary patch literal 24064 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 + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.textBox1 = new System.Windows.Forms.TextBox(); + this.SuspendLayout(); + // + // textBox1 + // + this.textBox1.BorderStyle = System.Windows.Forms.BorderStyle.None; + this.textBox1.Dock = System.Windows.Forms.DockStyle.Fill; + this.textBox1.Location = new System.Drawing.Point(0, 0); + this.textBox1.Multiline = true; + this.textBox1.Name = "textBox1"; + this.textBox1.ReadOnly = true; + this.textBox1.ScrollBars = System.Windows.Forms.ScrollBars.Both; + this.textBox1.Size = new System.Drawing.Size(496, 614); + this.textBox1.TabIndex = 0; + this.textBox1.WordWrap = false; + // + // DescrForm + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(496, 614); + this.Controls.Add(this.textBox1); + this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle; + this.MaximizeBox = false; + this.MinimizeBox = false; + this.Name = "DescrForm"; + this.ShowIcon = false; + this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent; + this.Text = "DescrForm"; + this.TopMost = true; + this.FormClosed += new System.Windows.Forms.FormClosedEventHandler(this.DescrForm_FormClosed); + this.Shown += new System.EventHandler(this.DescrForm_Shown); + this.FormClosing += new System.Windows.Forms.FormClosingEventHandler(this.DescrForm_FormClosing); + this.ResumeLayout(false); + this.PerformLayout(); + + } + + #endregion + + private System.Windows.Forms.TextBox textBox1; + } +} \ No newline at end of file diff --git a/SOLVER/TEST_MAP/DescrForm.cs b/SOLVER/TEST_MAP/DescrForm.cs new file mode 100644 index 0000000..70a87ed --- /dev/null +++ b/SOLVER/TEST_MAP/DescrForm.cs @@ -0,0 +1,34 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.Text; +using System.Windows.Forms; + +namespace TEST_MAP +{ + public partial class DescrForm : Form + { + public DescrForm(string txt) + { + InitializeComponent(); + this.textBox1.Text = txt; + } + + private void DescrForm_FormClosing(object sender, FormClosingEventArgs e) + { + + } + + private void DescrForm_FormClosed(object sender, FormClosedEventArgs e) + { + this.Dispose(); + } + + private void DescrForm_Shown(object sender, EventArgs e) + { + textBox1.SelectionLength = 0; + } + } +} \ No newline at end of file diff --git a/SOLVER/TEST_MAP/DescrForm.resx b/SOLVER/TEST_MAP/DescrForm.resx new file mode 100644 index 0000000..19dc0dd --- /dev/null +++ b/SOLVER/TEST_MAP/DescrForm.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 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 + + \ No newline at end of file diff --git a/SOLVER/TEST_MAP/Form1.Designer.cs b/SOLVER/TEST_MAP/Form1.Designer.cs new file mode 100644 index 0000000..f37c961 --- /dev/null +++ b/SOLVER/TEST_MAP/Form1.Designer.cs @@ -0,0 +1,490 @@ +namespace TEST_MAP +{ + partial class TestForm + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(TestForm)); + this.panel1 = new System.Windows.Forms.Panel(); + this.textBox1 = new System.Windows.Forms.TextBox(); + this.groupBox1 = new System.Windows.Forms.GroupBox(); + this.checkBox1 = new System.Windows.Forms.CheckBox(); + this.comboBox1 = new System.Windows.Forms.ComboBox(); + this.sPort = new System.Windows.Forms.TextBox(); + this.panel2 = new System.Windows.Forms.Panel(); + this.button3 = new System.Windows.Forms.Button(); + this.comboBox2 = new System.Windows.Forms.ComboBox(); + this.button2 = new System.Windows.Forms.Button(); + this.button1 = new System.Windows.Forms.Button(); + this.mLon = new System.Windows.Forms.TextBox(); + this.mLat = new System.Windows.Forms.TextBox(); + this.label1 = new System.Windows.Forms.Label(); + this.eLon = new System.Windows.Forms.TextBox(); + this.eLat = new System.Windows.Forms.TextBox(); + this.label3 = new System.Windows.Forms.Label(); + this.sLon = new System.Windows.Forms.TextBox(); + this.sLat = new System.Windows.Forms.TextBox(); + this.label2 = new System.Windows.Forms.Label(); + this.panel3 = new System.Windows.Forms.Panel(); + this.textBox2 = new System.Windows.Forms.TextBox(); + this.label4 = new System.Windows.Forms.Label(); + this.button4 = new System.Windows.Forms.Button(); + this.textBox3 = new System.Windows.Forms.TextBox(); + this.tabControl1 = new System.Windows.Forms.TabControl(); + this.tabPage1 = new System.Windows.Forms.TabPage(); + this.webBrowser1 = new System.Windows.Forms.WebBrowser(); + this.tabPage2 = new System.Windows.Forms.TabPage(); + this.textBox4 = new System.Windows.Forms.TextBox(); + this.panel4 = new System.Windows.Forms.Panel(); + this.label5 = new System.Windows.Forms.Label(); + this.button5 = new System.Windows.Forms.Button(); + this.panel1.SuspendLayout(); + this.groupBox1.SuspendLayout(); + this.panel2.SuspendLayout(); + this.panel3.SuspendLayout(); + this.tabControl1.SuspendLayout(); + this.tabPage1.SuspendLayout(); + this.tabPage2.SuspendLayout(); + this.panel4.SuspendLayout(); + this.SuspendLayout(); + // + // panel1 + // + this.panel1.Controls.Add(this.textBox1); + this.panel1.Controls.Add(this.groupBox1); + this.panel1.Controls.Add(this.panel2); + this.panel1.Dock = System.Windows.Forms.DockStyle.Left; + this.panel1.Location = new System.Drawing.Point(0, 21); + this.panel1.Name = "panel1"; + this.panel1.Size = new System.Drawing.Size(200, 518); + this.panel1.TabIndex = 1; + // + // textBox1 + // + this.textBox1.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + this.textBox1.Dock = System.Windows.Forms.DockStyle.Fill; + this.textBox1.Location = new System.Drawing.Point(0, 104); + this.textBox1.Multiline = true; + this.textBox1.Name = "textBox1"; + this.textBox1.ScrollBars = System.Windows.Forms.ScrollBars.Both; + this.textBox1.Size = new System.Drawing.Size(200, 360); + this.textBox1.TabIndex = 20; + // + // groupBox1 + // + this.groupBox1.Controls.Add(this.checkBox1); + this.groupBox1.Controls.Add(this.comboBox1); + this.groupBox1.Controls.Add(this.sPort); + this.groupBox1.Dock = System.Windows.Forms.DockStyle.Bottom; + this.groupBox1.Location = new System.Drawing.Point(0, 464); + this.groupBox1.Name = "groupBox1"; + this.groupBox1.Size = new System.Drawing.Size(200, 54); + this.groupBox1.TabIndex = 21; + this.groupBox1.TabStop = false; + this.groupBox1.Text = "Service"; + // + // checkBox1 + // + this.checkBox1.AutoSize = true; + this.checkBox1.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.checkBox1.Location = new System.Drawing.Point(10, 35); + this.checkBox1.Name = "checkBox1"; + this.checkBox1.Size = new System.Drawing.Size(76, 17); + this.checkBox1.TabIndex = 21; + this.checkBox1.Text = "Description"; + this.checkBox1.UseVisualStyleBackColor = true; + // + // comboBox1 + // + this.comboBox1.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.comboBox1.FormattingEnabled = true; + this.comboBox1.Items.AddRange(new object[] { + "127.0.0.1", + "192.168.0.97", + "192.168.0.18"}); + this.comboBox1.Location = new System.Drawing.Point(11, 15); + this.comboBox1.Name = "comboBox1"; + this.comboBox1.Size = new System.Drawing.Size(108, 21); + this.comboBox1.TabIndex = 20; + this.comboBox1.Text = "127.0.0.1"; + // + // sPort + // + this.sPort.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + this.sPort.Location = new System.Drawing.Point(125, 16); + this.sPort.Name = "sPort"; + this.sPort.Size = new System.Drawing.Size(60, 20); + this.sPort.TabIndex = 19; + this.sPort.Text = "7755"; + // + // panel2 + // + this.panel2.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + this.panel2.Controls.Add(this.button3); + this.panel2.Controls.Add(this.comboBox2); + this.panel2.Controls.Add(this.button2); + this.panel2.Controls.Add(this.button1); + this.panel2.Controls.Add(this.mLon); + this.panel2.Controls.Add(this.mLat); + this.panel2.Controls.Add(this.label1); + this.panel2.Controls.Add(this.eLon); + this.panel2.Controls.Add(this.eLat); + this.panel2.Controls.Add(this.label3); + this.panel2.Controls.Add(this.sLon); + this.panel2.Controls.Add(this.sLat); + this.panel2.Controls.Add(this.label2); + this.panel2.Dock = System.Windows.Forms.DockStyle.Top; + this.panel2.Location = new System.Drawing.Point(0, 0); + this.panel2.Name = "panel2"; + this.panel2.Size = new System.Drawing.Size(200, 104); + this.panel2.TabIndex = 18; + // + // button3 + // + this.button3.Location = new System.Drawing.Point(153, 76); + this.button3.Name = "button3"; + this.button3.Size = new System.Drawing.Size(37, 23); + this.button3.TabIndex = 2; + this.button3.Text = "Calc"; + this.button3.UseVisualStyleBackColor = true; + this.button3.Click += new System.EventHandler(this.button3_Click); + // + // comboBox2 + // + this.comboBox2.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.comboBox2.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.comboBox2.FormattingEnabled = true; + this.comboBox2.Items.AddRange(new object[] { + "red", + "lime", + "blue"}); + this.comboBox2.Location = new System.Drawing.Point(4, 77); + this.comboBox2.Name = "comboBox2"; + this.comboBox2.Size = new System.Drawing.Size(68, 21); + this.comboBox2.TabIndex = 29; + // + // button2 + // + this.button2.Location = new System.Drawing.Point(114, 76); + this.button2.Name = "button2"; + this.button2.Size = new System.Drawing.Size(39, 23); + this.button2.TabIndex = 28; + this.button2.Text = "Clear"; + this.button2.UseVisualStyleBackColor = true; + this.button2.Click += new System.EventHandler(this.button2_Click); + // + // button1 + // + this.button1.Location = new System.Drawing.Point(75, 76); + this.button1.Name = "button1"; + this.button1.Size = new System.Drawing.Size(39, 23); + this.button1.TabIndex = 2; + this.button1.Text = "Load"; + this.button1.UseVisualStyleBackColor = true; + this.button1.Click += new System.EventHandler(this.button1_Click); + // + // mLon + // + this.mLon.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + this.mLon.Location = new System.Drawing.Point(106, 54); + this.mLon.Name = "mLon"; + this.mLon.Size = new System.Drawing.Size(84, 20); + this.mLon.TabIndex = 27; + // + // mLat + // + this.mLat.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + this.mLat.Location = new System.Drawing.Point(20, 54); + this.mLat.Name = "mLat"; + this.mLat.Size = new System.Drawing.Size(84, 20); + this.mLat.TabIndex = 26; + // + // label1 + // + this.label1.AutoSize = true; + this.label1.Location = new System.Drawing.Point(2, 56); + this.label1.Name = "label1"; + this.label1.Size = new System.Drawing.Size(19, 13); + this.label1.TabIndex = 25; + this.label1.Text = "M:"; + // + // eLon + // + this.eLon.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + this.eLon.Location = new System.Drawing.Point(106, 26); + this.eLon.Name = "eLon"; + this.eLon.Size = new System.Drawing.Size(84, 20); + this.eLon.TabIndex = 24; + // + // eLat + // + this.eLat.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + this.eLat.Location = new System.Drawing.Point(20, 26); + this.eLat.Name = "eLat"; + this.eLat.Size = new System.Drawing.Size(84, 20); + this.eLat.TabIndex = 23; + // + // label3 + // + this.label3.AutoSize = true; + this.label3.Location = new System.Drawing.Point(2, 28); + this.label3.Name = "label3"; + this.label3.Size = new System.Drawing.Size(17, 13); + this.label3.TabIndex = 22; + this.label3.Text = "E:"; + // + // sLon + // + this.sLon.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + this.sLon.Location = new System.Drawing.Point(106, 4); + this.sLon.Name = "sLon"; + this.sLon.Size = new System.Drawing.Size(84, 20); + this.sLon.TabIndex = 21; + // + // sLat + // + this.sLat.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + this.sLat.Location = new System.Drawing.Point(20, 4); + this.sLat.Name = "sLat"; + this.sLat.Size = new System.Drawing.Size(84, 20); + this.sLat.TabIndex = 20; + // + // label2 + // + this.label2.AutoSize = true; + this.label2.Location = new System.Drawing.Point(3, 6); + this.label2.Name = "label2"; + this.label2.Size = new System.Drawing.Size(17, 13); + this.label2.TabIndex = 19; + this.label2.Text = "S:"; + // + // panel3 + // + this.panel3.Controls.Add(this.textBox2); + this.panel3.Controls.Add(this.label4); + this.panel3.Controls.Add(this.button4); + this.panel3.Dock = System.Windows.Forms.DockStyle.Top; + this.panel3.Location = new System.Drawing.Point(0, 0); + this.panel3.Name = "panel3"; + this.panel3.Size = new System.Drawing.Size(924, 21); + this.panel3.TabIndex = 3; + // + // textBox2 + // + this.textBox2.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + this.textBox2.Dock = System.Windows.Forms.DockStyle.Fill; + this.textBox2.Location = new System.Drawing.Point(32, 0); + this.textBox2.Name = "textBox2"; + this.textBox2.Size = new System.Drawing.Size(857, 20); + this.textBox2.TabIndex = 0; + this.textBox2.KeyPress += new System.Windows.Forms.KeyPressEventHandler(this.textBox2_KeyPress); + // + // label4 + // + this.label4.Dock = System.Windows.Forms.DockStyle.Left; + this.label4.Location = new System.Drawing.Point(0, 0); + this.label4.Name = "label4"; + this.label4.Size = new System.Drawing.Size(32, 21); + this.label4.TabIndex = 2; + this.label4.Text = "URL:"; + this.label4.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; + // + // button4 + // + this.button4.Dock = System.Windows.Forms.DockStyle.Right; + this.button4.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.button4.Location = new System.Drawing.Point(889, 0); + this.button4.Name = "button4"; + this.button4.Size = new System.Drawing.Size(35, 21); + this.button4.TabIndex = 1; + this.button4.Text = "GO"; + this.button4.UseVisualStyleBackColor = true; + this.button4.Click += new System.EventHandler(this.button4_Click); + // + // textBox3 + // + this.textBox3.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + this.textBox3.Dock = System.Windows.Forms.DockStyle.Bottom; + this.textBox3.Location = new System.Drawing.Point(200, 519); + this.textBox3.Name = "textBox3"; + this.textBox3.ReadOnly = true; + this.textBox3.Size = new System.Drawing.Size(724, 20); + this.textBox3.TabIndex = 4; + // + // tabControl1 + // + this.tabControl1.Controls.Add(this.tabPage1); + this.tabControl1.Controls.Add(this.tabPage2); + this.tabControl1.Dock = System.Windows.Forms.DockStyle.Fill; + this.tabControl1.Location = new System.Drawing.Point(200, 21); + this.tabControl1.Name = "tabControl1"; + this.tabControl1.SelectedIndex = 0; + this.tabControl1.Size = new System.Drawing.Size(724, 498); + this.tabControl1.TabIndex = 5; + // + // tabPage1 + // + this.tabPage1.Controls.Add(this.webBrowser1); + this.tabPage1.Location = new System.Drawing.Point(4, 22); + this.tabPage1.Name = "tabPage1"; + this.tabPage1.Padding = new System.Windows.Forms.Padding(3); + this.tabPage1.Size = new System.Drawing.Size(716, 472); + this.tabPage1.TabIndex = 0; + this.tabPage1.Text = "Map"; + this.tabPage1.UseVisualStyleBackColor = true; + // + // webBrowser1 + // + this.webBrowser1.Dock = System.Windows.Forms.DockStyle.Fill; + this.webBrowser1.Location = new System.Drawing.Point(3, 3); + this.webBrowser1.MinimumSize = new System.Drawing.Size(20, 20); + this.webBrowser1.Name = "webBrowser1"; + this.webBrowser1.Size = new System.Drawing.Size(710, 466); + this.webBrowser1.TabIndex = 1; + // + // tabPage2 + // + this.tabPage2.Controls.Add(this.textBox4); + this.tabPage2.Controls.Add(this.panel4); + this.tabPage2.Location = new System.Drawing.Point(4, 22); + this.tabPage2.Name = "tabPage2"; + this.tabPage2.Padding = new System.Windows.Forms.Padding(3); + this.tabPage2.Size = new System.Drawing.Size(716, 472); + this.tabPage2.TabIndex = 1; + this.tabPage2.Text = "XML"; + this.tabPage2.UseVisualStyleBackColor = true; + // + // textBox4 + // + this.textBox4.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + this.textBox4.Dock = System.Windows.Forms.DockStyle.Fill; + this.textBox4.Location = new System.Drawing.Point(3, 33); + this.textBox4.Multiline = true; + this.textBox4.Name = "textBox4"; + this.textBox4.ScrollBars = System.Windows.Forms.ScrollBars.Both; + this.textBox4.Size = new System.Drawing.Size(710, 436); + this.textBox4.TabIndex = 1; + // + // panel4 + // + this.panel4.Controls.Add(this.label5); + this.panel4.Controls.Add(this.button5); + this.panel4.Dock = System.Windows.Forms.DockStyle.Top; + this.panel4.Location = new System.Drawing.Point(3, 3); + this.panel4.Name = "panel4"; + this.panel4.Size = new System.Drawing.Size(710, 30); + this.panel4.TabIndex = 0; + // + // label5 + // + this.label5.AutoSize = true; + this.label5.Location = new System.Drawing.Point(229, 9); + this.label5.Name = "label5"; + this.label5.Size = new System.Drawing.Size(13, 13); + this.label5.TabIndex = 1; + this.label5.Text = "0"; + // + // button5 + // + this.button5.Location = new System.Drawing.Point(3, 2); + this.button5.Name = "button5"; + this.button5.Size = new System.Drawing.Size(220, 23); + this.button5.TabIndex = 0; + this.button5.Text = "Get XML with nmsRoutesDirectCall.dll ..."; + this.button5.UseVisualStyleBackColor = true; + this.button5.Click += new System.EventHandler(this.button5_Click); + // + // TestForm + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(924, 539); + this.Controls.Add(this.tabControl1); + this.Controls.Add(this.textBox3); + this.Controls.Add(this.panel1); + this.Controls.Add(this.panel3); + this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); + this.Name = "TestForm"; + this.Text = "Route TEST MAP 2021.11"; + this.Load += new System.EventHandler(this.Form1_Load); + this.panel1.ResumeLayout(false); + this.panel1.PerformLayout(); + this.groupBox1.ResumeLayout(false); + this.groupBox1.PerformLayout(); + this.panel2.ResumeLayout(false); + this.panel2.PerformLayout(); + this.panel3.ResumeLayout(false); + this.panel3.PerformLayout(); + this.tabControl1.ResumeLayout(false); + this.tabPage1.ResumeLayout(false); + this.tabPage2.ResumeLayout(false); + this.tabPage2.PerformLayout(); + this.panel4.ResumeLayout(false); + this.panel4.PerformLayout(); + this.ResumeLayout(false); + this.PerformLayout(); + + } + + #endregion + + private System.Windows.Forms.Panel panel1; + private System.Windows.Forms.GroupBox groupBox1; + public System.Windows.Forms.TextBox sPort; + private System.Windows.Forms.Panel panel2; + public System.Windows.Forms.TextBox eLon; + public System.Windows.Forms.TextBox eLat; + private System.Windows.Forms.Label label3; + public System.Windows.Forms.TextBox sLon; + public System.Windows.Forms.TextBox sLat; + private System.Windows.Forms.Label label2; + public System.Windows.Forms.TextBox textBox1; + public System.Windows.Forms.ComboBox comboBox1; + public System.Windows.Forms.TextBox mLon; + public System.Windows.Forms.TextBox mLat; + private System.Windows.Forms.Label label1; + public System.Windows.Forms.CheckBox checkBox1; + private System.Windows.Forms.Button button1; + private System.Windows.Forms.Button button2; + public System.Windows.Forms.ComboBox comboBox2; + private System.Windows.Forms.Button button3; + private System.Windows.Forms.Panel panel3; + public System.Windows.Forms.TextBox textBox2; + private System.Windows.Forms.Button button4; + private System.Windows.Forms.Label label4; + public System.Windows.Forms.TextBox textBox3; + private System.Windows.Forms.TabControl tabControl1; + private System.Windows.Forms.TabPage tabPage1; + private System.Windows.Forms.WebBrowser webBrowser1; + private System.Windows.Forms.TabPage tabPage2; + private System.Windows.Forms.TextBox textBox4; + private System.Windows.Forms.Panel panel4; + private System.Windows.Forms.Button button5; + private System.Windows.Forms.Label label5; + } +} + diff --git a/SOLVER/TEST_MAP/Form1.cs b/SOLVER/TEST_MAP/Form1.cs new file mode 100644 index 0000000..f020fbf --- /dev/null +++ b/SOLVER/TEST_MAP/Form1.cs @@ -0,0 +1,270 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.Text; +using System.Text.RegularExpressions; +using System.Xml; +using System.Xml.Serialization; +using System.Runtime; +using System.Runtime.InteropServices; +using System.Diagnostics; +using System.Windows.Forms; +using System.Web; + +using NavicomMapServices.Routes; +using Newtonsoft.Json; + +namespace TEST_MAP +{ + public partial class TestForm : Form + { + public ScriptManager sm; + + public TestForm() + { + InitializeComponent(); + comboBox2.SelectedIndex = 2; + webBrowser1.ObjectForScripting = sm = new ScriptManager(this); + } + + private void Form1_Load(object sender, EventArgs e) + { + string ff = "file:///" + XMLSaved.GetCurrentDir().Replace(@"\", "/") + "map.html"; + webBrowser1.Navigate(ff); + } + + + public void ConsoleWrite(string txt) + { + textBox1.Text += txt; + Application.DoEvents(); + } + + public void ConsoleWriteLine(string txt) + { + textBox1.Text += txt + "\r\n"; + Application.DoEvents(); + } + + private void button1_Click(object sender, EventArgs e) + { + OpenFileDialog ofd = new OpenFileDialog(); + ofd.DefaultExt = ".gpx"; + ofd.Filter = "Garmin GPX files (*.gpx)|*.gpx|All Types (*.*)|*.*"; + if (ofd.ShowDialog() == DialogResult.OK) + { + System.Xml.XmlDocument xd = new XmlDocument(); + xd.Load(ofd.FileName); + foreach (XmlNode xn in xd.DocumentElement.ChildNodes) + if (xn.Name == "wpt") + { + if(comboBox2.SelectedIndex == 0) + webBrowser1.Document.InvokeScript("AddMarker1", new object[] { xn.Attributes["lat"].Value, xn.Attributes["lon"].Value, xn.ChildNodes[0].ChildNodes[0].Value }); + else if (comboBox2.SelectedIndex == 1) + webBrowser1.Document.InvokeScript("AddMarker2", new object[] { xn.Attributes["lat"].Value, xn.Attributes["lon"].Value, xn.ChildNodes[0].ChildNodes[0].Value }); + else + webBrowser1.Document.InvokeScript("AddMarker3", new object[] { xn.Attributes["lat"].Value, xn.Attributes["lon"].Value, xn.ChildNodes[0].ChildNodes[0].Value }); + }; + }; + ofd.Dispose(); + } + + private void button2_Click(object sender, EventArgs e) + { + webBrowser1.Document.InvokeScript("ClearMarkers"); + } + + private void button3_Click(object sender, EventArgs e) + { + //webBrowser1.Document.InvokeScript("ClearMarkers"); + webBrowser1.Document.InvokeScript("AddStart", new object[] { sLat.Text.Replace(",", ","), sLon.Text.Replace(",", ","), "Start" }); + webBrowser1.Document.InvokeScript("AddEnd", new object[] { eLat.Text.Replace(",", ","), eLon.Text.Replace(",", ","), "End" }); + string grdata = sm.GetRoute(sLat.Text.Replace(".", ","), sLon.Text.Replace(".", ","), eLat.Text.Replace(".", ","), eLon.Text.Replace(".", ",")); + webBrowser1.Document.InvokeScript("ThroughRoute", new object[] { grdata }); + webBrowser1.Document.InvokeScript("CenterMap", new object[] { sLat.Text.Replace(",", ","), sLon.Text.Replace(",", ","), "Start" }); + } + + private void ParseURL(string url, bool calc) + { + url = String.IsNullOrEmpty(url) ? System.Windows.Forms.Clipboard.GetText() : url; + if (String.IsNullOrEmpty(url)) return; + // textBox2.Text = url.Trim(); + try + { + System.Collections.Specialized.NameValueCollection kvs = System.Web.HttpUtility.ParseQueryString(url); + string xx = kvs["x"]; + string yy = kvs["y"]; + string[] xa = xx.Split(new char[] { ',' }); + string[] ya = yy.Split(new char[] { ',' }); + if ((xa.Length > 1) && (xa.Length == ya.Length)) + { + sLat.Text = ya[0].Trim(); + sLon.Text = xa[0].Trim(); + eLat.Text = ya[1].Trim(); + eLon.Text = xa[1].Trim(); + if (calc) button3_Click(this, null); + }; + } + catch { }; + } + + private void textBox2_KeyPress(object sender, KeyPressEventArgs e) + { + if (e.KeyChar != (char)13) return; + ParseURL(textBox2.Text.Trim(), true); + } + + private void button4_Click(object sender, EventArgs e) + { + ParseURL(textBox2.Text.Trim(), true); + } + + private void button5_Click(object sender, EventArgs e) + { + string xml; + textBox4.Text = xml = sm.GetDirectRoute(sLat.Text, sLon.Text, eLat.Text, eLon.Text); + nmsRoutesDirectCall.nmsRouteClient dc = new nmsRoutesDirectCall.nmsRouteClient(); + nmsRoutesDirectCall.Route rr = dc.XMLToObject(xml); + label5.Text = "Length: " + rr.driveLength.ToString(System.Globalization.CultureInfo.InvariantCulture); + } + } + + [ComVisible(true)] + public class ScriptManager + { + private TestForm form; + + public ScriptManager(TestForm form) + { + this.form = form; + } + + public void Mouse(string lat, string lon) + { + form.mLat.Text = lat.Replace(",","."); + form.mLon.Text = lon.Replace(",", "."); + } + + public void Start(string lat, string lon) + { + form.sLat.Text = lat.Replace(",", "."); + form.sLon.Text = lon.Replace(",", "."); + } + + public void End(string lat, string lon) + { + form.eLat.Text = lat.Replace(",", "."); + form.eLon.Text = lon.Replace(",", "."); + } + + public string GetDirectRoute(string _sLat, string _sLon, string _eLat, string _eLon) + { + double sLat = double.Parse(_sLat, System.Globalization.CultureInfo.InvariantCulture); + double sLon = double.Parse(_sLon, System.Globalization.CultureInfo.InvariantCulture); + double eLat = double.Parse(_eLat, System.Globalization.CultureInfo.InvariantCulture); + double eLon = double.Parse(_eLon, System.Globalization.CultureInfo.InvariantCulture); + + nmsRoutesDirectCall.nmsRouteClientStopList stc = new nmsRoutesDirectCall.nmsRouteClientStopList(); + stc.AddStop("ÑÒÀÐÒ", sLat, sLon); + stc.AddStop("ÔÈÍÈØ", eLat, eLon); + + nmsRoutesDirectCall.nmsRouteClient rcc = new nmsRoutesDirectCall.nmsRouteClient(form.comboBox1.Text, Convert.ToInt32(form.sPort.Text)); + string xml = rcc.GetRouteXML("TEST", stc, DateTime.Now, 1 + (form.checkBox1.Checked ? 2 : 0)); + + return xml; + } + + public string GetRoute(string _sLat, string _sLon, string _eLat, string _eLon) + { + double sLat = double.Parse(_sLat); + double sLon = double.Parse(_sLon); + double eLat = double.Parse(_eLat); + double eLon = double.Parse(_eLon); + + JsonSerializerSettings jss = new JsonSerializerSettings(); + jss.Formatting = Newtonsoft.Json.Formatting.Indented; + + NavicomMapServices.Routes.Route rt = new Route(); + + dkxce.Route.ISolver.RStop[] st = new dkxce.Route.ISolver.RStop[2]; + st[0] = new dkxce.Route.ISolver.RStop("ÑÒÀÐÒ", sLat, sLon); + st[1] = new dkxce.Route.ISolver.RStop("ÔÈÍÈØ", eLat, eLon); + + string txt = "Ïîèñê ìàðøðóòà:\r\nÍà÷àëî â " + DateTime.Now.ToString("HH:mm:ss.ms"); + form.textBox1.Text = txt; + form.textBox1.Refresh(); + DateTime sdt = DateTime.Now; + + dkxce.Route.ISolver.RouteClient rc = new dkxce.Route.ISolver.RouteClient(form.comboBox1.Text, Convert.ToInt32(form.sPort.Text),"D6AEA3EC848644258DCD06A781B2C036"); + dkxce.Route.ISolver.RResult rr = rc.GetRoute(st, DateTime.Now, 1 + (form.checkBox1.Checked ? 2 : 0), null); + + txt += "\r\nÊîíåö â " + DateTime.Now.ToString("HH:mm:ss.ms") + "\r\n"; + TimeSpan ts = DateTime.Now.Subtract(sdt); + txt += "Âûïîëíÿëîñü: " + String.Format("{0:00}:{1:00}:{2:00}.{3:000}", new object[] { ts.Hours, ts.Minutes, ts.Seconds, ts.Milliseconds }) + "\r\n\r\n"; + form.textBox1.Text = txt; + form.textBox1.Refresh(); + + rt.driveLength = rr.driveLength; + rt.driveTime = rr.driveTime; + rt.startTime = rr.startTime; + rt.finishTime = rr.finishTime; + rt.LastError = rr.LastError; + rt.stops = new Stop[rr.stops.Length]; + for (int i = 0; i < rr.stops.Length; i++) + rt.stops[i] = new Stop(rr.stops[i].name, rr.stops[i].lat, rr.stops[i].lon); + if (rt.LastError != "") + return JsonConvert.SerializeObject(rt, jss); + + if (rr.vector != null) + { + List vec = new List(); + for (int i = 0; i < rr.vector.Length; i++) + vec.Add(new XYPoint(rr.vector[i].X, rr.vector[i].Y)); + rt.polyline = vec.ToArray(); + rt.polylineSegments = rr.vectorSegments; + }; + txt += "Ìàðøðóò:\r\nÄëèíà: " + (rt.driveLength / 1000).ToString().Replace(",", ".") + " êì\r\nÂðåìÿ: " + rt.driveTime.ToString().Replace(",", ".") + " ìèí\r\n" + + "Ñòàðò: " + rt.startTime.ToString() + "\r\nÔèíèø: " + rt.finishTime.ToString() + "\r\n\r\n"; + + if (rr.description != null) + { + rt.instructions = new RoutePoint[rr.description.Length]; + for (int i = 0; i < rt.instructions.Length; i++) + { + rt.instructions[i] = new RoutePoint(i, (double)rr.description[i].Lon, (double)rr.description[i].Lat, 0, 0, (double)rr.description[i].dist, rr.startTime.AddMinutes(rr.description[i].time)); + rt.instructions[i].iStreet = rr.description[i].name; + + if (rr.description[i].instructions.Length > 0) + rt.instructions[i].iToDo = rr.description[i].instructions[0]; + if (rr.description[i].instructions.Length > 1) + rt.instructions[i].iToGo = rr.description[i].instructions[1]; + }; + rt.instructionsSegments = rr.descriptionSegments; + + // // // + + txt += "Îïèñàíèå:\r\n"; + for (int i = 0; i < rr.description.Length; i++) + { + txt += "[" + rt.instructions[i].no.ToString() + "] " + rt.instructions[i].iStreet + "\r\nLat: " + rt.instructions[i].y.ToString().Replace(",", ".") + "\r\nLon: " + rt.instructions[i].x.ToString().Replace(",", ".") + "\r\n"; + if (rt.instructions[i].iToDo.Length > 0) txt += rt.instructions[i].iToDo + "\r\n"; + if (rt.instructions[i].iToGo.Length > 0) txt += rt.instructions[i].iToGo + "\r\n"; + txt += "\r\n"; + }; + }; + + form.textBox1.Text = txt; + + string pp = "http://127.0.0.1:8080/nms/route?k=test&f=2&minby=time&x={0},{1}&y={2},{3}&n=S,F"; + pp = String.Format(pp, new object[] { form.sLon.Text.Trim().Replace(",", "."), form.eLon.Text.Trim().Replace(",", "."), form.sLat.Text.Trim().Replace(",", "."), form.eLat.Text.Trim().Replace(",", ".") }); + form.textBox2.Text = pp; + pp = "http:///127.0.0.1:8080/nms/help/example_Routes2.html?{lat:" + form.sLat.Text.Trim().Replace(",", ".") + ",lon:" + form.sLon.Text.Trim().Replace(",", ".") + ",zoom:11,s:{lat:" + form.sLat.Text.Trim().Replace(",", ".") + ",lon:" + form.sLon.Text.Trim().Replace(",", ".") + "},f:{lat:" + form.eLat.Text.Trim().Replace(",", ".") + ",lon:" + form.eLon.Text.Trim().Replace(",", ".") + "}}#TEST"; + form.textBox3.Text = pp; + + return JsonConvert.SerializeObject(rt, jss); + } + } +} \ No newline at end of file diff --git a/SOLVER/TEST_MAP/Form1.resx b/SOLVER/TEST_MAP/Form1.resx new file mode 100644 index 0000000..bd2f715 --- /dev/null +++ b/SOLVER/TEST_MAP/Form1.resx @@ -0,0 +1,1565 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 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 + + + + + AAABAAYAICAAAAEACACoCAAAZgAAABAQAAABAAgAaAUAAA4JAACAgAAAAQAgACgIAQB2DgAAMDAAAAEA + IACoJQAAnhYBACAgAAABACAAqBAAAEY8AQAQEAAAAQAgAGgEAADuTAEAKAAAACAAAABAAAAAAQAIAAAA + AAAAAAAAAAAAAAAAAAAAAQAAAAAAAP///wDM//8Amf//AGb//wAz//8AAP//AP/M/wDMzP8Amcz/AGbM + /wAzzP8AAMz/AP+Z/wDMmf8AmZn/AGaZ/wAzmf8AAJn/AP9m/wDMZv8AmWb/AGZm/wAzZv8AAGb/AP8z + /wDMM/8AmTP/AGYz/wAzM/8AADP/AP8A/wDMAP8AmQD/AGYA/wAzAP8AAAD/AP//zADM/8wAmf/MAGb/ + zAAz/8wAAP/MAP/MzADMzMwAmczMAGbMzAAzzMwAAMzMAP+ZzADMmcwAmZnMAGaZzAAzmcwAAJnMAP9m + zADMZswAmWbMAGZmzAAzZswAAGbMAP8zzADMM8wAmTPMAGYzzAAzM8wAADPMAP8AzADMAMwAmQDMAGYA + zAAzAMwAAADMAP//mQDM/5kAmf+ZAGb/mQAz/5kAAP+ZAP/MmQDMzJkAmcyZAGbMmQAzzJkAAMyZAP+Z + mQDMmZkAmZmZAGaZmQAzmZkAAJmZAP9mmQDMZpkAmWaZAGZmmQAzZpkAAGaZAP8zmQDMM5kAmTOZAGYz + mQAzM5kAADOZAP8AmQDMAJkAmQCZAGYAmQAzAJkAAACZAP//ZgDM/2YAmf9mAGb/ZgAz/2YAAP9mAP/M + ZgDMzGYAmcxmAGbMZgAzzGYAAMxmAP+ZZgDMmWYAmZlmAGaZZgAzmWYAAJlmAP9mZgDMZmYAmWZmAGZm + ZgAzZmYAAGZmAP8zZgDMM2YAmTNmAGYzZgAzM2YAADNmAP8AZgDMAGYAmQBmAGYAZgAzAGYAAABmAP// + MwDM/zMAmf8zAGb/MwAz/zMAAP8zAP/MMwDMzDMAmcwzAGbMMwAzzDMAAMwzAP+ZMwDMmTMAmZkzAGaZ + MwAzmTMAAJkzAP9mMwDMZjMAmWYzAGZmMwAzZjMAAGYzAP8zMwDMMzMAmTMzAGYzMwAzMzMAADMzAP8A + MwDMADMAmQAzAGYAMwAzADMAAAAzAP//AADM/wAAmf8AAGb/AAAz/wAAAP8AAP/MAADMzAAAmcwAAGbM + AAAzzAAAAMwAAP+ZAADMmQAAmZkAAGaZAAAzmQAAAJkAAP9mAADMZgAAmWYAAGZmAAAzZgAAAGYAAP8z + AADMMwAAmTMAAGYzAAAzMwAAADMAAP8AAADMAAAAmQAAAGYAAAAzAAAAAADuAAAA3QAAALsAAACqAAAA + iAAAAHcAAABVAAAARAAAACIAAAARAADuAAAA3QAAALsAAACqAAAAiAAAAHcAAABVAAAARAAAACIAAAAR + AADuAAAA3QAAALsAAACqAAAAiAAAAHcAAABVAAAARAAAACIAAAARAAAA7u7uAN3d3QC7u7sAqqqqAIiI + iAB3d3cAVVVVAERERAAiIiIAERERAAAAAAD///////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////////////////////////////////////////////////////6z8/v////////////// + ///////////////////////79QAr+////////////////////////////////fv7/IEAAAD1//////// + ///////////////////////4AAAA+foAAPX//////////Pr5/P////////////////gAAAD2/fUA9f// + /vys/f9WAAD1rP///////////////4H1APb99gD1/f/7APX2+/31AAD8//////////////////gA9v32 + AAD7/6z2AAD4/6wAAPn/////////////////VgD2/fYAAPz////6APWs/fUAVv////////////////9W + APb99gAAgf////31AFb4AAD4/////////////////1YA9vv49QD2+Pn7/Pb29gAAAPr///////////// + ////+QD2+vz7KwAAAPX29vb1AAAA/P/////////////////69Vb8+/v69fX19fX19fUAAPf///////// + /////////1b1gfz7+/kAAPX1AAAA9QAA+v/////////////////9K/X5/PuB9gAAAAAAAAAAAAD7//// + /////////////6z19fb6gSsAAAD29/j5KwAAAPz/////////////////+fX1APX1AAAr+vz9/f39+AAA + /P///////////Pz8+1b29QAAAAAAVvysrKysrP2s9gBW//////////kAAAAAAAAAAAAAAFaB+/v8/Kys + rKz3AACB///////9AAAAAAAAAAAAAPaB//38/Pv7/PysrFYAACv////////6AAAAAAAAAAD1/f////// + //7+/v7///gA9f/////////89wAAK/UAAPn///////////////////gA////////////+AAAAAAArP// + ////////////////rPb/////////////9gAAAPf////////////////////////////////////19fcA + 9fv//////////////////////////////////wBW/1YAVv////////////////////////////////// + /P7///z///////////////////////////////////////////////////////////////////////// + ////////////////////////////////////////////////////8H///+B///8AP//+AD8P/gAyB/4A + IAP+AAAD/wAAA/+AAAP/gBAD/4AAA/+AAAP/gAAH/4AAB/+AAAf/AAAH8QAAB8AAAAfAAAADgAAAA4AA + AAOAA+CD4AP/w/gH/8P4A//3+AP///iD///8x/////////////8oAAAAEAAAACAAAAABAAgAAAAAAAAA + AAAAAAAAAAAAAAABAAAAAAAA////AMz//wCZ//8AZv//ADP//wAA//8A/8z/AMzM/wCZzP8AZsz/ADPM + /wAAzP8A/5n/AMyZ/wCZmf8AZpn/ADOZ/wAAmf8A/2b/AMxm/wCZZv8AZmb/ADNm/wAAZv8A/zP/AMwz + /wCZM/8AZjP/ADMz/wAAM/8A/wD/AMwA/wCZAP8AZgD/ADMA/wAAAP8A///MAMz/zACZ/8wAZv/MADP/ + zAAA/8wA/8zMAMzMzACZzMwAZszMADPMzAAAzMwA/5nMAMyZzACZmcwAZpnMADOZzAAAmcwA/2bMAMxm + zACZZswAZmbMADNmzAAAZswA/zPMAMwzzACZM8wAZjPMADMzzAAAM8wA/wDMAMwAzACZAMwAZgDMADMA + zAAAAMwA//+ZAMz/mQCZ/5kAZv+ZADP/mQAA/5kA/8yZAMzMmQCZzJkAZsyZADPMmQAAzJkA/5mZAMyZ + mQCZmZkAZpmZADOZmQAAmZkA/2aZAMxmmQCZZpkAZmaZADNmmQAAZpkA/zOZAMwzmQCZM5kAZjOZADMz + mQAAM5kA/wCZAMwAmQCZAJkAZgCZADMAmQAAAJkA//9mAMz/ZgCZ/2YAZv9mADP/ZgAA/2YA/8xmAMzM + ZgCZzGYAZsxmADPMZgAAzGYA/5lmAMyZZgCZmWYAZplmADOZZgAAmWYA/2ZmAMxmZgCZZmYAZmZmADNm + ZgAAZmYA/zNmAMwzZgCZM2YAZjNmADMzZgAAM2YA/wBmAMwAZgCZAGYAZgBmADMAZgAAAGYA//8zAMz/ + MwCZ/zMAZv8zADP/MwAA/zMA/8wzAMzMMwCZzDMAZswzADPMMwAAzDMA/5kzAMyZMwCZmTMAZpkzADOZ + MwAAmTMA/2YzAMxmMwCZZjMAZmYzADNmMwAAZjMA/zMzAMwzMwCZMzMAZjMzADMzMwAAMzMA/wAzAMwA + MwCZADMAZgAzADMAMwAAADMA//8AAMz/AACZ/wAAZv8AADP/AAAA/wAA/8wAAMzMAACZzAAAZswAADPM + AAAAzAAA/5kAAMyZAACZmQAAZpkAADOZAAAAmQAA/2YAAMxmAACZZgAAZmYAADNmAAAAZgAA/zMAAMwz + AACZMwAAZjMAADMzAAAAMwAA/wAAAMwAAACZAAAAZgAAADMAAAAAAO4AAADdAAAAuwAAAKoAAACIAAAA + dwAAAFUAAABEAAAAIgAAABEAAO4AAADdAAAAuwAAAKoAAACIAAAAdwAAAFUAAABEAAAAIgAAABEAAO4A + AADdAAAAuwAAAKoAAACIAAAAdwAAAFUAAABEAAAAIgAAABEAAADu7u4A3d3dALu7uwCqqqoAiIiIAHd3 + dwBVVVUAREREACIiIgAREREAAAAAAP/////////////////////////+//////////////////////8A + ////////////////////AP//////////AP///////wD+///////+AAD///////8AAP//////AAD///// + /////gAAAAAAAAAA//////////4AAAAA//8AAP////////4AAAD+/////gAA//////4AAAD///////// + AP//AAAAAAD///////////////8A/wD//////////////v///wAA/////////////////////wD///// + //////////////////////////////////////////////////////AB4/n///H44/nx+PH48fDx+PAA + 8fDwAfAA8AHwAfAA8AGAAPAAAfyAAIP+AfzD/4P+4f/D//v/4f////v/KAAAAIAAAAAAAQAAAQAgAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAABAAAAAgAAAAUAAAAIAAAACwAAAAwAAAAMAAAACgAAAAgAAAAFAAAAAgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8AAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAcAAAAOAAAAFgAAAB0AAAAiAAAAJQAA + ACUAAAAhAAAAHAAAABUAAAANAAAABgAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAA////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAA + AAQAAAALAAAAFwAAACUAAAAzAAAAPwAAAEYAAABKAAAASgAAAEUAAAA9AAAAMgAAACQAAAAXAAAADAAA + AAUAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAADQAAAB06OTk+mpmZi8bExcnh4OD15uXl/+Tj + 4//S0dHssK+vxImIiJkAAABSAAAARAAAADMAAAAgAAAAEQAAAAYAAAABAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAA + AAkAAAAbmpmZdODe3/Tp6en/6+vq/+np6f/o6Of/5+fn/+bm5v/m5uX/3d3d/8fHxux0cnORAAAAUAAA + AD0AAAAmAAAAEwAAAAcAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAEcC+v5Xs6+z/7e3t/+vs6v/q6ur/6enp/+jo + 5//n5+f/5ubm/+bm5f/l5eX/5eXl/9zc2/+3tbbPJSQlYgAAAEIAAAApAAAAFAAAAAcAAAABAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAW+vL1e7+7u/+/v7//t7Oz/7e7t//Hx8P/09PT/+Pj4//j4+P/19fX/7u/u/+np6f/l5eX/5OXk/9/f + 3//LysvjJCQkZAAAAEIAAAAnAAAAEAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8AAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAMAAAAFAAAABgAA + AAgAAAAHAAAABgAAAAQAAAACAAAAAQAAAAAAAAAAAAAABc/Nzor29vb/8PDw//f39//8/Pz///////// + /////////////////////////Pz8//Ly8v/n6Of/5OTk/+Tk5P/Ozc3jJSQlYgAAADsAAAAcAAAACQAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAABAAAAAwAAAAcAAAAMAAAAEgAAABYAAAAaAAAAHAAAABwAAAAZAAAAFQAAABAAAAAKAAAABgAA + AAIAAAAD1NLTh/b19v/+/v7//////////////////////////////////////////////////v7+//T0 + 9P/s7Oz/5eXl/+bm5v/Ny8ziAAAASQAAACUAAAANAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAYAAAAOAAAAGQAAACQAAAAtAAAANQAA + ADoAAAA9AAAAPAAAADkAAAAzAAAAKgAAACAAAAAWAAAADAAAAAaurK0p7ezs//////////////////// + /////////////////////////////////////////v7+//Pz8//v7+//5eXl/+Df3/8AAABQAAAALAAA + ABEAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAIAAAAIAAAAFAAAACUAAAA3Z2ZnaKCfn5ynpqarxsTFy7m4uMKlpKWtjoyNl0RERGkAAABNAAAAQgAA + ADMAAAAiAAAAEwAAAAvU0tOH9fT1//////////////////////////////////////////////////// + ////////+vr6//Hx8f/v7+//4N/f/3JxcX4AAAAvAAAAEgAAAAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAABJCQkI2srGyoOXj5PTz8vP/+/v7//// + ///////////////////5+fn/8fDx/9HP0OKKiYqbAAAAUgAAAEAAAAAqAAAAFwAAAA7Y1tem+fn5//// + ////////////////////////////////////////////////////////8/Pz//Hx8f/o6Oj/cnFxfgAA + ADAAAAATAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAMAAAAFAAAABgAAAAYAAAAGAAAABQAAAAMAAAABAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAEAAAALkI+QSt7c3ef7+/v///////////////////////////////////////////////////////X0 + 9f/Ix8jZQUBAbwAAAEYAAAAuAAAAGAAAAA3a2Nml8/Lz//////////////////////////////////z8 + /P/////////////////39/f/8fHx/+rp6f9ycXF+AAAAMAAAABMAAAADAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAACAAAABQAAAAkAAAANAAAAEQAA + ABUAAAAYAAAAGgAAABkAAAAXAAAAEgAAAAsAAAAFAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAABDh3+Dk/f39//////////////////// + //////////////////////////////////////////////39/f/k4uP2V1ZWfAAAAEYAAAAqAAAAEwAA + AAnU0tOH7+7v//////////////////v7+//19fX//P38//////////////////r6+v/x8fH/6unp/29u + b38AAAAyAAAAFAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAABAAAABAAAAAsAAAAUAAAAHQAAACUAAAAsAAAAMwAAADcAAAA6AAAAOQAAADUAAAAtAAAAIQAA + ABMAAAAJAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAA////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAADu7m6T/Py8/////////////////////////////////////////////////////////////// + ///////////////////m5eX2WVhZeAAAADwAAAAcAAAACQAAAATJx8hH5OPj4/r6+v/5+fj/9/f2//3+ + /f///////////////////////Pz8//Hx8f/q6en/amlpgAAAADQAAAAWAAAABQAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAAAALAAAAGwAAAC4EBQQ/SklJY4yL + i5Oenp6unZydr52bnLCcnJytaWhogQAAAE4AAABAAAAALAAAABcAAAAJAAAAAgAAAAAAAAAAAAAAAAAA + AAD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAALGxMVU9/b3//////////////////// + //////////////////////////////////////////////////////////////39/f/T0tPiAAAARwAA + ACMAAAALAAAAAAAAAAJwb28g7u3t//z8/P/////////////////////////////////8/Pz/8fLx/+rq + 6f96eXmMAAAANwAAABgAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAABWFhYSOvra6Jt7a2vdTT0+zl5eX/6+vr//Lz8v/y8/L/8vPy//Dw8P/n5ub/z87O7FNS + U3oAAABHAAAALQAAABUAAAAHAAAAAQAAAAAAAAAAAAAAAP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8AAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAcPBwT3y8fH////+//////////////////////////////////////////////////// + /////////////////////////////+/u7/8AAABMAAAAJgAAAA0AAAAAAAAAAAAAAA3v7u////////// + //////////////////////////////z8/P/y8vL/8vLy/6KhoawAAAA5AAAAGQAAAAYAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAIAAAADAAAAAwAAAAMAAAACAAAAAQAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHvbu8f+7u7f/z8/P/8/Pz//Pz + 8//z8/P/8/Pz//Pz8//z8/P/8/Pz//Pz8//z8/P/2tna9lNTU3sAAABEAAAAJgAAAA8AAAADAAAAAAAA + AAAAAAAA////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABd7d3sT///////////// + ////////////////////////////////////////////////////////////////////////7+7v/wAA + AE0AAAAnAAAADQAAAAAAAAAAAAAADe/u7///////////////////////////////////////+/v7//Lz + 8v/y8/L/oqGirAAAADoAAAAaAAAABgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAABAAA + AAgAAAANAAAAEAAAABIAAAASAAAAEgAAABAAAAAOAAAADAAAAAoAAAAIAAAABgAAAAQAAAACAAAAAQAA + AAAAAAAAAAAAAAAAAAjV1NS49PT0//T09P/09PP/9PTz//T08//29vX/+Pn4//n5+f/4+Pj/9vb2//Pz + 8//z8/P/19bW9iMjI2EAAAA4AAAAGgAAAAgAAAAAAAAAAAAAAAD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAACycfIR+vq6v////////////////////////////////////////////// + ///////////////////////////////////v7u//AAAATgAAACkAAAAOAAAAAQAAAAAAAAAN7+7v//// + ///////////////////////////////////5+fn/8/Pz//Pz8/+ioKGtAAAAOgAAABoAAAAHAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAANAAAAGQAAACQAAAArAAAALgAAAC8AAAAuAAAAKwAA + ACgAAAAlAAAAIQAAAB0AAAAZAAAAEwAAAA4AAAAHAAAAAwAAAAAAAAAAAAAABtvZ2sX19fT/9vf2//n5 + +f/8/Pz//v7+/////////////////////////////v7+//j4+P/w8O//mpiZsQAAAEcAAAAmAAAADgAA + AAIAAAAAAAAAAP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADycfIR97d + 3sTz8vP////////////////////////////////////////////////////////////+/v7//////+/u + 7/8AAABQAAAAKwAAABAAAAACAAAAAAAAAA7v7u////////////////////////////////////////n5 + +f/z9PP/8/Tz/6GfoK0AAAA8AAAAGwAAAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAACgAA + ABwAAAAzYF9eaGxrantqaWl9amlofkBAP2kAAABSAAAATQAAAEoAAABFAAAAPwAAADgAAAAwAAAAJQAA + ABYAAAAKAAAAAwAAAAAAAAAE0M7Pif7+/v////////////////////////////////////////////// + //////////////f39//d3Nz2JiUlXgAAADEAAAAUAAAABAAAAAAAAAAA////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAABcTCw0ne3d7E8/Lz//////////////////7+ + /v/29vb//v7+//////////////////z8/P/9/f3/8O/w/0RERGgAAAAuAAAAEgAAAAMAAAABAAAADu/u + 7///////////////////////////////////////+vr5//T09P/09PT/nZycrgAAAD4AAAAdAAAACAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJhX18jxsTDytbV1P/a2df/3Nva/9zb2v/c29r/2djW/9jX + 1f/W1dT/u7q42qmnpsWZl5auZmVlg0JBQWcAAABDAAAALgAAABcAAAAIAAAAAQAAAALNy8xX8fDx//// + ////////////////////////////////////////////////////////+fn5/+vr6/98e3uNAAAAOgAA + ABoAAAAHAAAAAAAAAAD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAgAAAAXEwsNJ3t3exPPy8//+/v7/9vb2//f49///////////////////////+vr6//v7 + +//09PT/cnFxfgAAAC8AAAATAAAAAwAAAAIAAAAR7+7v//////////////////////////////////// + ///6+vr/9PT0//T09P+zsrPCAAAAQQAAAB8AAAAJAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA6Wk + pFDc29r/4ODe/+Dg3v/g4N7/4ODe/+Dg3v/g4N7/4ODe/+Dg3v/g4N7/4ODe/9/f3f/c29r/2NfV/4SD + g5kAAABFAAAAJwAAAA8AAAADAAAAAAAAAATW1NWV9/f3//////////////////////////////////// + //////////////39/f/39/b/9vb1/6inp7gAAABAAAAAHgAAAAkAAAAAAAAAAP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8AAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAFt7W2Tu7t + 7f/7+/v////////////////////////////5+Pj/+vn5//Py8v9ycXF+AAAAMAAAABMAAAADAAAAA6qo + qT/z8vP///////////////////////////////////////j4+P/19fX/9fX1/8rJytcAAABCAAAAIAAA + AAkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADqaemTuLi4P/r6+n/7Ozq/+zs6v/s7Or/6+vp/+np + 5//o6Ob/5ubk/+Pj4f/h4d//4ODe/+Dg3v/g4N7/z87M9iQkI2EAAAA3AAAAGAAAAAYAAAAAAAAAAQAA + AAXa2Nml9fT1///////////////////////////////////////+/v3/9/f3//f39v/39/b/y8rK1wAA + AEIAAAAgAAAACQAAAAAAAAAA////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK5uXm4/////////////////////////////////f3 + 9v/4+Pj/8vHx/29ubn8AAAAxAAAAFAAAAAQAAAADt7W2Tvf39/////////////////////////////// + ////////+Pj4//X19f/19fX/y8rK1wAAAEMAAAAgAAAACQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAK2tLNJ5+bl//Dw7v/s7Or/7Ozq/+zs6v/s7Or/7Ozq/+zs6v/s7Or/7Ozq/+zs6v/q6uj/6Ojm/+Xl + 4//f393/oaCfuQAAAEIAAAAgAAAACQAAAAAAAAAAAAAAAQAAAAXU0tOH7+7v//////////////////// + //////////////7+/v/4+Pf/9/f3//f39//LysrXAAAARAAAACAAAAAKAAAAAAAAAAD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAnh3+DH////////////////////////////////9/f2//f39v/w7+//bWxsgAAAADMAAAAVAAAABAAA + AAO3tbZO9/f3///////////////////////////////////////4+Pj/9vb1//b29f/LysrXAAAARAAA + ACAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAb27uiXt7Ovw/v7+//////////////////// + ///7+/v/+fn4//T08//t7ev/7Ozq/+zs6v/s7Or/7Ozq/+zs6v/Ew8LYAAAASwAAACcAAAAOAAAAAQAA + AAAAAAAAAAAAAQAAAATEwsNJ4+Lj8f////////////////////////////////r6+v/4+Pj/+Pj4/8jH + x9gAAABHAAAAIwAAAAsAAAAAAAAAAP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB9vZ2rf///////////////////////////// + ///49/f/9vb1/+/u7v9sa2uBAAAANwAAABcAAAAFAAAAA7e1tk739/f///////////////////////// + //////////////f39//29vb/9vb2/8vKytcAAABFAAAAIQAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAr+9vDfc29ri8fHw//7+/v////////////////////////////7+/v/u7u3/7Ozq/+zs + 6v/s7Or/7Ozq/+Lh3/8AAABSAAAALwAAABMAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAO8urtM8/Lz//// + /////////////////////////v7+//n5+f/5+fn/ycjI2AAAAEsAAAAnAAAADgAAAAEAAAAA////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAGzMrLjP////////////////////////////////f39v/19PT/9PPz/6OioqwAAAA4AAAAGQAA + AAYAAAADt7W2Tvf39///////////////////////////////////////9/f2//f39v/39/b/x8fH2AAA + AEgAAAAjAAAACwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAp6dnBbPzcyH4uHf8fb1 + 9f////////////////////////////Hx7//s7Or/7Ozq/+zs6v/s7Or/5OPi/1dWVngAAAA6AAAAGgAA + AAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAng3t/j/////////////////////////////////f38//r6 + +v/p6On/AAAAUAAAAC0AAAARAAAAAgAAAAD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAXOzM2L//////////////////////// + ////////9vb1//Tz8v/19PP/o6KirAAAADoAAAAaAAAABgAAAAO3tbZO9/f3//////////////////// + ///////////////////39/f/9/f3//f39//X19fsAAAASgAAACUAAAAMAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAOurawo0c/OpuPi4f/39/b////////////6+vr/7Ozq/+zs + 6v/s7Or/7Ozq/+zs6v/q6uj/k5KRpgAAAEYAAAAmAAAADgAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAB8/N + zqr9/f3//////////////////////////////////Pz7/+/u7/9cW1t1AAAAMwAAABUAAAAEAAAAAP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAABMfFxmz5+fn///////////////////////7+/v/09fT/8vLx//Tz8v+hn5+tAAAAOgAA + ABoAAAAHAAAAA7e1tk739/f//////////////////////////////////f39//j49//4+Pf/+Pj3/+rp + 6f8AAABMAAAAJgAAAA0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAEAAAAErq2sKM3Lyojk4+Lx8fHw/+zs6v/s7Or/7Ozq/+zs6v/s7Or/7Ozq/+zs6v/LysjjAAAAVQAA + ADYAAAAZAAAACAAAAAEAAAAAAAAAAAAAAAAAAAAHysjJjfn5+f////////////////////////////// + ////////9PT0/4B/f4wAAAA3AAAAFwAAAAUAAAAA////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADubi5Tff39/////////////// + ///+/v///fz8//Hx8v/y8fH/8/Lx/56cnK0AAAA8AAAAGwAAAAcAAAADt7W2Tvf39/////////////// + ///////////////////9/f3/+Pj3//j49//4+Pf/6unp/wAAAE0AAAAmAAAADQAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAABJGQjxjLyciK5ubk/+zs + 6v/s7Or/7Ozq/+zs6v/m5uT/5ubk/+Li4P93dnWTAAAASAAAACkAAAARAAAABAAAAAAAAAAAAAAAAQAA + AArBv8CQ9fX1/////////////////////////////////////////v7/pqWlrAAAADkAAAAZAAAABgAA + AAD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAK8urtM9/f3///////////////////+///5+vr/8fHx//Hx8P/y8fH/nJubrgAA + AD4AAAAdAAAACAAAAAO3tbZO9/f3//////////////////////////////////z8/P/4+Pj/+Pj4//j4 + +P/q6er/AAAATQAAACYAAAANAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAnZ2NbU7Ozq/+zs6v/s7Or/6+vp/+bm5P/m5uT/5ubk/9XT + 0fYkJCNiAAAAOwAAAB0AAAAJAAAAAQAAAAAAAAAFAAAAE7e2tpby8vL//v7+//////////////////// + //////////////////+mpaWsAAAAOgAAABoAAAAGAAAAAP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8AAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAaKgoSzx8PH///////// + /////////f3+//j49//t7+//8PDv//Hx8P+ysLDCAAAAQQAAAB8AAAAJAAAAA7e1tk739/f///////// + ////////////////////////+/v6//n5+P/5+fj/+fn4/+vq6v8AAABNAAAAJwAAAA4AAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABcnH + xovs7Or/7Ozq/+zs6v/r6+n/5+fk/+fn5P/n5+T/5eTi/7CvrsUAAABLAAAAKgAAABAAAAADAAAAAwAA + AA5JSEgx1NPT5/Ly8v/6+vr//////////////////////////////////////6alpawAAAA6AAAAGgAA + AAYAAAAA////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAADe/u7//////////////+///8/P3/9vb1/+/v7v/v7+7/8PDv/8jH + x9cAAABCAAAAIAAAAAkAAAADubi5Tff39//////////////////////////////////6+vn/+fn4//n5 + +P/5+fj/6uno/wAAAE4AAAApAAAADgAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEuri3Xujn5f/s7Or/7Ozq/+zs6v/n5+T/5+fk/+fn + 5P/n5+T/4N/d/0FAQGwAAAA3AAAAGAAAAAgAAAAKAAAAHcXFxcHu7u7/9PT0//7+/v////////////// + ////////////////////////pqWlrAAAADkAAAAZAAAABgAAAAD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAN7+7v//// + /////////v////v9+//y8/L/7+7t/+7u7f/v7+7/x8fH1wAAAEMAAAAgAAAACQAAAAK8urtM9/f3//// + //////////////////////////////n5+f/5+fn/+fn5//n5+f/q6en/AAAAUQAAAC0AAAASAAAAAgAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AASxr69P6Ofl/+zs6v/s7Or/7Ozq/+np5//n5+X/5+fl/+fn5f/l5eP/lJOSpQAAAEEAAAAgAAAAEQAA + ABirqqqM6ejo//Pz8//+/v7///////////////////////////////////////////+mpaWsAAAANwAA + ABgAAAAGAAAAAP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAzv7u/////////+///+/v7/+vz6//Hz8P/u7+3/7u7t/+/v + 7v/Fw8PXAAAARAAAACAAAAAKAAAAAaKgoSzx8PH////////////////////////////9/f3/+vr5//r6 + +f/6+vn/+vr5/+7t7f9aWVp3AAAAOAAAAB4AAAANAAAABwAAAAQAAAACAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABK6trFDo5+X/7Ozq/+zs6v/s7Or/6uro/+jn + 5f/o5+X/6Ofl/+jn5f/EwsHYAAAASgAAACoAAAAfjYyNYOPi4//y8vL/+vr6//////////////////// + /////////////////////////////6empqsAAAA0AAAAFgAAAAUAAAAA////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAC+3s + 7P////7///7///3+/v/4+vn/7vDw/+3t7P/t7ez/7u7t/8HAv9gAAABGAAAAIgAAAAsAAAAAAAAADe/u + 7////////////////////////v7+//r6+v/6+vr/+vr6//r6+v/6+vr/8vLy/2loaIgAAABJAAAAMwAA + ACQAAAAbAAAAFQAAAA8AAAAKAAAABwAAAAQAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAFrKqpUejn5f/s7Or/7Ozq/+zs6v/r6+n/6Ojl/+fn5P/n5+T/5ubj/9/d3P8AAABRAAAANzY2 + NkDZ2Njz8vLy//Pz8//////////////////////////////////////////////////5+fn/kI+QlAAA + AC8AAAATAAAAAwAAAAD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK4d/gx/7//////v///P38//f49//s7+7/7Ozs/+3t + 7P/u7u3/wb+/2AAAAEoAAAAkAAAADAAAAAAAAAAO7+7v///////////////////////9/f3/+vr6//r6 + +v/6+vr/+vr6//r6+v/x8PD/lJOUtSIiImgAAABSAAAARgAAADwAAAAzAAAAKQAAACEAAAAaAAAAFAAA + AA4AAAAKAAAABgAAAAMAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAe3tbRx5eTi/+rq6P/q6ef/6Ojm/+bm + 4//i4t//4eHe/+Dg3f/f393/2tnX/yMjI2QAAABIxMLD0/Dx8P/y8/L/9fb1//////////////////// + //////////////////////////////f39/91dHV6AAAAKQAAAA8AAAABAAAAAP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8AAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAnh3+DH/f39/v/+/v/7/fr/8/j2/+7u7f/r7Ov/7Ozr/+3t7P/h4OD/AAAATwAAAC0AAAAWAAAADAAA + ABnv7u////////////////////////v7+//7+vr/+/r6//v6+v/7+/r/+/v6//Ly8f/V1dP/z8/N/7u6 + uuKXl5e6c3JyjiYlJl8AAABMAAAARAAAADoAAAAxAAAAKAAAACAAAAAZAAAAEwAAAA4AAAAJAAAABgAA + AAMAAAACAAAACrm2tZLg4N3/4N/d/+Dg3v/h4d7/3t7b/93c2v/c3Nn/3NvZ/9vb2P/a2df/ZGNiipOS + k6Lp6Oj/8/Py//Pz8v/09PP/////////////////////////////////////////////////7+7v/ysq + K1MAAAAkAAAADAAAAAAAAAAA////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACeHf4Mf8/f39/f38//n8+//z9fT/7e7t/+zs + 6//s7Ov/7e3s/+Pi4f8AAABYAAAAPgAAACsAAAAkAAAAL+/u7//////////////////+/v7/+/v6//v7 + +v/7+/r/+/v6//v7+v/7+/r/7+/u/+Hh4P/d3dz/3Nzc/9zc3P/V1dX/zs7N/7OysdqQj46wZWRkhQME + A1UAAABLAAAAQgAAADkAAAAvAAAAJwAAAB8AAAAYAAAAEgAAAA4AAAAWv768xNzc2f/c29j/29vY/9vb + 2P/a2tf/2trX/9na1//Z2df/2dnW/9XV0/92dXSe19bW9fLy8v/z8/P/8/Pz//Pz8//8/Pz///////// + ///////////////////////////////////m5eX1AAAAQAAAAB4AAAAJAAAAAAAAAAD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAJ4d/gx/r7+vr8/f3/+Pr4//Pz8v/r7Ov/6urq/+zs6//t7ez/4d/f/gAAAGUAAABWAAAASwAA + AEign5+c9/f3//////////////////39/f/7+/v/+/v7//v7+//7+/v/+/v7//v7+//r6+r/5ufm/97e + 3f/f4N7/4eHg/97e3f/d3d3/3d3d/9zb2//V1NT/0tDQ/7a1tduIh4aoVFNTfAQFBFUBAQFLAAAAQQAA + ADgAAAAuAAAAKBEREDHHxsTr2dnX/9nZ1//Z2df/2NnW/9jY1v/Y2Nb/2NjW/9jY1v/Y2Nb/1NTS/8rI + yO/u7u3/8vLx//Pz8//z8/P/8/Pz//j4+P///////////////////////////////////////////8bF + xsoAAAA2AAAAFwAAAAUAAAAAAAAAAP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAArh3+DH+fn5+Pr7+v/3+Pf/8PLx/+np + 6f/o6On/6+vr/+vr6v/Y19b/wMC/+LCwr9+ysrHesrKx5pKSkf92eHX/UFJP/3Fzcf+Sk5L/0dHR//v7 + +//7+/v/+/v7//v7+//7+/v/+vn5/+zr6v/p6ef/4uLg/+Pj4f/o6Of/5+fm/+Tj4v/g4N//39/e/9/f + 3v/f397/39/e/9zc2v/V1dP/zMvK9q2trdGKiIioVVRUewYHBlUDAwJLTU1Ma9HQz//Y2Nb/2NjW/9jY + 1v/Y2Nb/2NjW/9jY1v/Y2Nb/2NjW/9bW1P/Ozsz/4+Li//Dw8P/x8vH/8/Tz//P08//z9PP/8/Tz//7+ + /v/////////////////////////////////7+/v/oJ+fnAAAACwAAAARAAAAAwAAAAAAAAAA////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAACuHf4Mf29fb2+Pn4//T09f/u7u7/5+jo/+bl5v/g4N7/393d/9TV1P/X19b/2NjX/729 + vP9PUU7/RkhF/01PTP9RU1H/UlRR/1FTUf9QUlD/e3x7/9zc2//8/Pv//Pz7//z8+//5+fj/6uro/+rq + 6P/n5+X/5ebk/+np6P/p6ej/6eno/+np6P/m5uX/4+Ti/+Hi4P/h4uD/4eLg/+Hi3//g4t//4OLf/93e + 3P/X19b/xcXE7aWjo8impKPWy8rI/9DPzf/S0c//0tLQ/9HRz//R0c//0dHP/8/PzP/MzMn/ysnG/8TC + wf/x8PD/8fHw//Ly8f/09PP/9PTz//T08//09PP/+vr6//////////////////////////////////Hw + 8f9PTk5bAAAAIgAAAAsAAAABAAAAAAAAAAD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL09LTyvHw7/X08/P/8fLw/+vs + 6//l5eb/4+Li/9vb2v/Pz87/y8zL/9DRz/66u7r/T1FO/0ZJRv9JTEn/UFJO/1NVUv9TVVL/UlVS/1FU + Uf9RVFH/W11b/7y9u//8/Pz//Pz8//n5+P/q6un/6urp/+rq6P/p6ef/6eno/+np6P/p6ej/6eno/+np + 6P/p6ej/6Ojn/+bm5P/k5OP/5OTi/+Pk4f/j5OH/4+Th/+Pj4f/j4+H/4+Pi/93d3P/U1NP/y8vK/8TE + w//ExML/ycrG/8rLyP/Ky8j/ysrH/8nJx//FxMP/2NjW/+/v7//x8fH/8vHx//T09P/09PT/9PT0//T0 + 9P/29vb/////////////////////////////////1tXW3wAAADcAAAAYAAAABgAAAAAAAAAAAAAAAP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAABscGxTNzMzO7Ozt9e/x8f/s7e3/5efm/+Li4v/f39//1dXU/8vLyf/Hycf/vL28/2Fh + Yf9JS0j/TlBM/1BTT/9SVFH/VFdT/1RXU/9TVlL/U1VS/1JUUf9SVFH/UVRR/7y9vP/8/Pz/+fn5/+rq + 6v/q6ur/6urp/+rq6f/p6un/6enp/+np6f/p6en/6enp/+np6f/p6en/6eno/+np6P/o6Of/5+fl/+bm + 5P/l5uT/5ebk/+Xm5P/m5uT/5ubk/+bm5P/m5uT/5ubk/97e3P/U09L/ycnH/8LAv//Bv7//xsXF/9vb + 2v/r7Or/7+zt//Ly8f/x8vH/9PT0//T09P/09PT/9PT0//T09P/+/v7///////////////////////n5 + +f+koqOZAAAAKQAAAA8AAAADAAAAAAAAAAAAAAAA////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABHB0cFtnY2PPq6en17O3s/+nq + 6f/i4uP/3+Df/93c2//S09L/yMnI/7u8uv+AgX7/TU9M/09STv9RU0//UVRQ/1VXVP9VWFT/VVhU/1RW + U/9UVlP/U1ZS/1NVUv9SVFH/UVRR/7y9vP/39/f/6+rq/+vq6v/r6ur/6+vp/+vr6f/q6un/6urp/+rq + 6f/q6un/6urp/+rq6f/q6un/6urp/+rq6P/q6uj/6uro/+np6P/p6ej/6ero/+nq6P/p6uj/6ero/+nq + 6P/p6uj/6ero/+nq6P/p6uj/6uro/+jo5v/q6un/6eno/+vr6//v8O//8fLw//Lz8f/08/P/9fT0//X1 + 9P/19fT/9fX0//r6+v//////////////////////5uXl9TIxMkgAAAAcAAAACQAAAAEAAAAAAAAAAAAA + AAD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAElJiUb397e/+Xm5frj5eP/4uPh/9/f3//b3Nz/29rY/9TV0//R0M//paWj/1BR + Tv9QUk7/UFNP/1JUUP9VWFT/V1lW/1dZVv9WWVX/VVhU/1VYVP9UV1P/VFZT/1NWUv9TVVL/XF9c/+Pj + 4f/s7Or/7Ozr/+zs6//s7Or/7Ozq/+zs6v/r6+r/6+vq/+vr6v/r6+r/6+vq/+vr6v/r6+r/6+vq/+vr + 6v/r6+r/6+vp/+vr6f/r6+n/6+vp/+rr6f/q6+n/6uvp/+vr6f/r6+n/6+vp/+vr6f/r6+r/6+vq/+vr + 6v/r6+r/6+vp/+3u7P/x8fD/8vPy//L08v/19PT/9fX0//X19P/19fT/+fn4//////////////////v7 + +/++vL27AAAAKwAAABEAAAAEAAAAAAAAAAAAAAAAAAAAAP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8AAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAiIjIh7Z2dj/2tva/dze + 3P/c39z/3N3a/9rb2f/a2Nn/2NjX/7q5uf9SVVL/T1JO/1FTT/9RU1H/VFZT/1daVv9XWlb/V1pW/1da + Vv9WWVX/VlhV/1ZYVf9VWFT/VFdT/1NWUv9TVVL/mZqY/+3t7P/s7Oz/7Ozs/+zs7P/s7Oz/7Ozr/+zs + 6//s7Ov/6+vr/+vr6//r6+v/6+vr/+vr6//r6+v/6+vr/+vr6//r6+v/6+vr/+vr6//r6+r/6+vq/+vr + 6v/r6+r/6+vq/+vr6//r6+v/6+vr/+vr6//r6+v/6+vr/+vr6v/q6+v/6+vr//Dw7v/z8vP/8vPy//X1 + 9P/19fX/9fX1//X19f/4+Pj/////////////////5uXl9VVUVFQAAAAdAAAACQAAAAEAAAAAAAAAAAAA + AAAAAAAA////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAEfXx8PNPT0v/Y2Nf/2NnX/9jZ2P/Z2tj/2trZ/9vb2v/Kysr/Wl1Z/09S + Tv9QU0//UlRQ/1JUUf9XWlb/WVtX/1lbV/9ZW1f/WFpW/1daVv9XWlb/VllV/1ZYVf9VWFT/VFdT/1NW + Uv97fXr/7u7s/+3t7P/t7ez/7e3s/+3t7P/t7ez/7e3r/+3t6//t7ev/7Ozr/+zs6//s7Ov/7Ozr/+zs + 6//s7Ov/7Ozr/+zs6//s7Ov/7Ozr/+zs6//s7Ov/7Ozr/+zs6//s7Ov/7Ozr/+zs6//s7Ov/7Ozr/+zs + 6//s7Ov/7Ozr/+zs6//s7Ov/7u3r//Ly7//z8/P/9PTz//X29f/29vX/9vb1//j4+P////////////n5 + +f+rqaqnAAAALQAAABIAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAaZmJhd1tbW/9jZ + 2P/Y2dj/2drY/9na2f/a2tn/29va/4SFgv9PUk7/UFNP/1FTUP9TVVH/VVdT/1haVv9ZXFj/WVxY/1pc + WP9YW1f/WFtX/1haVv9XWlb/VllV/1ZYVf9VWFT/VFZT/36Aff/x8e//7u7s/+7u7P/t7ez/7e3s/+3t + 7P/t7ez/7e3s/+3t6//t7ev/7e3r/+3t6//t7Ov/7ezr/+3s6//t7Ov/7e3r/+3t6//t7ev/7e3r/+3t + 6//t7ev/7e3r/+3t7P/t7ez/7e3s/+3t7P/t7ez/7e3s/+3t7P/t7ez/7e3s/+7u7P/u7Oz/7u7s//Pz + 8//09PP/9fb0//X19v/29vb/+Pj4////////////5uXl9SwrLFEAAAAiAAAACwAAAAEAAAAAAAAAAAAA + AAAAAAAAAAAAAP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAACbGxsYfV1dX/2dnY/9na2f/Z2tn/2tvZ/9rb2v/S09H/T1FN/1BT + T/9RU1D/UlVR/1RWUv9WWVX/WVtX/1pcWP9aXVn/Wl1Z/1lcWP9ZW1f/WVtX/1hbV/9YWlb/VllV/1ZY + Vf9UV1P/foB9//T08//v7+7/7+/t/+/v7f/u7u3/7u7t/+7u7f/u7u3/7u7t/+7u7f/u7uz/7u7s/+7u + 7P/u7uz/7e3t/+3t7f/t7e3/7e3t/+3t7f/t7e3/7e3t/+3t7f/t7e3/7e3t/+3t7f/t7e3/7e3t/+3t + 7f/t7e3/7u7t/+7u7f/u7+3/7+7t/+/v7P/t7+3/8vLx//T08//29vT/9/b2//f39v/6+vr///////// + ///Rz9DWAAAAPQAAABwAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAMtLOzp9nZ + 2P/Z2dn/2trZ/9rb2v/b29r/29za/7i5t/9PUk7/UVNQ/1FUUP9TVVH/VFdT/1lbV/9ZXFj/Wl1Z/1te + Wv9bXlr/Wl1Z/1pdWf9aXFj/WVtX/1lbV/9YWlb/V1lV/1ZYVP+foZ7/9vb1//Pz8v/w8O//8PDu//Dw + 7v/w8O7/7+/u/+/v7v/v7+7/7+/u/+/v7v/v7+3/7+/t/+/v7f/v7+3/7+/t/+/v7f/u7+3/7u7t/+7u + 7f/u7u3/7u7t/+7u7f/u7u3/7u7t/+7v7f/v7+3/7+/t/+/v7f/v7+3/7+/t/+/v7v/v7+7/7+/u/+/v + 7//w8e//9fXz//b29f/39/X/9/f3//z8/P///////////7Cur7UAAAA3AAAAFwAAAAUAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAABDKycnb2dnZ/9ra2f/a2tr/29va/9vc2//c3Nv/ubq4/1BT + T/9RU1D/UlVR/1RWUv9WWFT/WVxY/1pdWf9bXlr/XF5a/1xeWv9cXlr/XF5a/1teWv9aXVj/WVxY/1lb + V/9XWlb/V1lW/+np6f/39/j/9fb2//Lx8f/x8fD/8PDv//Dw7//w8O//7+/v/+/v7//v7+//7+/v/+/v + 7//v7+//7+/v/+/v7v/v7+7/7+/u/+/v7v/v7+7/7+/u/+/v7v/v7+7/7+/u/+/v7v/v7+7/7+/u/+/v + 7v/v7+7/7+/u/+/v7//v7+//7+/v//Dv7//w7+//8PDu//Hx8P/19fT/9vb2//f29v/39/j//f7+//// + ///7+/v/nZydnwAAADEAAAAUAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8AAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFhoSFMtXU + 1f/a2tn/2trZ/9vb2v/b3Nv/3Nzb/93d3P+6u7n/UFNP/1FUUP9TVVH/VFdT/1haVv9aXVn/W11Z/1te + Wv9dYFv/XWBb/1xfW/9cX1v/XF5a/1pdWf9aXFj/WVtX/1hbV/+Wl5X//v7+//n5+f/39vb/9fb1//Ly + 8P/x8fD/8fHv//Hx7//x8e//8fHv//Dw7//w8O//8PDv//Dw7//w8O//8PDv//Dw7//w8O//8PDv//Dw + 7//w8O//8PDv//Dw7//w8O//8PDv//Dw7//w8O//8PDv//Dw7//w8O//8PDv//Dw7//w8O//8PDv/+/v + 7//x8e//8vPy//Xz9P/29vX/9/b2//n5+P////////////f39/9zcnN8AAAAKwAAABAAAAACAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAerqqpj2NjX/9ra2v/b29r/29vb/9zc2//d3dz/3t7d/97e + 3f9RVFD/UlVR/1RWUv9UV1P/WlxY/1pdWf9bXVn/XF9a/11gW/9eYFz/XWBb/1xfW/9cXlr/W15a/1pc + WP9ZXFj/Y2Vh/+nq6f/+/f7/+/v6//f49//39/f/9vX1//Lz8f/x8fH/8fHx//Hx8f/x8fD/8fHw//Hx + 8P/x8fD/8PDw//Dw8P/w8PD/8PDw//Dw8P/w8PD/8PDw//Dw8P/w8PD/8PDw//Dw8P/w8PD/8PDw//Dw + 8P/w8PD/8PDw//Dw8P/w8PD/8PDw//Hx8P/w8fD/8e/w//Hx8P/y8vL/9fPz//f39//49/f//Pz8//// + ////////8fDx/0lISGIAAAAnAAAADgAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACsC+ + v53b3dv/29za/9vc2//c3Nv/3d3c/93e3P/e3t3/39/e/3V3dP9TVlL/VFdT/1dZVf9aXVn/W15a/1xe + Wv9cX1v/XWBb/15gXP9dYFv/XF9b/1xeWv9bXlr/Wl1Z/1lcWP/Awb///v7+//7+/v/9/Pv/+Pj3//j4 + 9//3+Pf/9/b2//b09P/y8vH/8vLx//Ly8f/y8vH/8vLw//Ly8P/y8vD/8vLw//Hx8P/x8fD/8fHw//Hx + 8P/x8fD/8fHw//Hx8P/x8fD/8fHw//Hx8P/x8fD/8fHw//Hx8P/x8fD/8fHw//Ly8P/x8vD/8fLw//Lx + 8P/x8vD/8/Hy//Tz8v/19PT/+Pj3//n5+P/+/v7////////////v7u//AAAARwAAACMAAAALAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAOysnJyNzc2/7c3dv/3N3b/93e3P/d3tz/3t7d/9/f + 3v/g4N//oqOh/1NWUv9VV1P/WFtX/1pdWf9bXlr/XF5a/1xfW/9dYFv/XWBb/11gW/9cX1v/XF5a/1te + Wv9aXFj/l5mW//7+/v/+/v7//v7+//7+/v/4+Pj/+Pn4//n4+P/5+Pj/+Pj4//j3+P/29fT/8/Py//Py + 8v/z8vL/8/Ly//Py8f/z8vH/8/Lx//Ly8f/z8vH/8vLx//Ly8f/y8vH/8/Lx//Ly8f/y8vH/8vLx//Py + 8f/z8vH/8/Px//Pz8f/z8/H/8/Px//Pz8f/y8vD/8fLw//Ly8f/y8/L/8/Ty//j29//5+Pj//Pz8//7+ + /v///////////9fV1uEAAABDAAAAIAAAAAkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAA + ABLW1NX63N3c/93e3f/e3tz/3t/d/97f3f/f4N7/4OHf/+Hh4P/Z2dj/U1VS/1ZYVP9aXFj/WlxY/1pd + Wf9bXlr/XF5a/1xfW/9cX1v/XF9b/1xeWv9bXlr/Wl1Z/3l6d//+/v7//v7+//7+/v/+/v7//v7+//v7 + +v/5+fn/+fn5//n5+f/5+fn/+fn5//n5+f/5+fn/9/f3//X19P/z8/P/8/Pz//Pz8//z8/L/8/Py//Pz + 8v/z8/L/8/Py//Pz8v/z8/L/8/Py//Pz8v/z8/L/9PTy//T08v/09PL/9PTy//Tz8v/z8/P/8/Py//Pz + 8v/y8/P/8vTz//T08//39vf/+vr5//v7+//////////////////4+Pj/0c/Q1gAAAD8AAAAdAAAACAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFmJWWQ9XU1Pbd3dz/3t/d/9/f3v/f397/4ODf/+Hh + 3//h4uD/4eLg/+Lj4f+Ki4j/V1pW/1pcWP9aXVn/W15a/1teWv9cXlr/XF5a/1xeWv9cXlr/W15a/1pd + Wf95e3f/9PT0//7+/v/+/v7//v7+//7+/v/+/v7//f39//r6+f/6+vn/+vr6//r6+v/6+vr/+vr6//r6 + +v/7+vr/+/v6//v7+v/5+fj/+Pj3//f39v/19vX/9fX0//X19P/19fT/9fX0//X19P/19fT/9fX0//X1 + 9P/19fT/9fX0//T19P/09fT/9PTz//T09P/09PT/9fX0//b19P/29vb/+Pn4//v6+f/7+/r//v7+//// + /////////v7+//Ly8v+6uLnBAAAAPAAAABsAAAAHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAmrqqh219jW9d3e3P/g397/4eDf/+Hh4P/h4eD/4uLh/+Pi4f/j4+L/5OTi/8DBwP9YW1f/WVxY/1pc + WP9aXVn/W11Z/1tdWf9bXlr/W15a/1pdWf9aXVn/eXt4//X19f////////////////////////////// + /////////Pz8//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//8+/v//Pv6//z7 + +v/7+/r/+vr6//n5+f/5+Pj/+fj3//n49//5+Pf/+fj4//n4+P/4+Pj/+Pj4//j49//5+Pf/+Pj3//n4 + 9//6+fj/+/r5//r7+f/8/Pr//Pz7//39/f/////////////////6+vr/8fHx/6Wkpa0AAAA6AAAAGgAA + AAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAwMCEbe1tbba29n93d3c/+Dg3v/i5OH/4+Ph/+Li + 4f/j4+L/5OPj/+Tk4//l5eT/5ujk/4+Qjv9ZXFj/WlxY/1pdWP9bXVn/WlxY/1pcWP9aXFj/WlxY/3l7 + d//19fX////////////////////////////////////////////+/v7//Pz8//z8/P/8/Pz//Pz8//z8 + /P/8/Pz//Pz8//z8/P/8/Pz//Pz8//z8/P/8/Pz//Pz8//z8/P/8/Pz//Pz8//z8/P/8/Pz//Pz8//z8 + /P/8/Pz//Pz8//z8/P/8/Pz//Pz7//z8+//7/Pz//Pv8//z8/P/8/Pz//Pz8//z8/P/9/f3///////// + //////////////X19f/x8fH/pqWlrAAAADoAAAAaAAAABgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAURExAbx8fG9trZ2P/b3dn/4uLg/+Xl4//k4+P/5eTi/+Tl4//l5eT/5ubk/+bm5f/q6er/4ODf/6Gh + of9ZXFn/W15b/11fW/9bXFn/W11Y/1ldWf94enf/9fX1//////////////////////////////////// + ///////////////////9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3/+/39//n6 + +v/k4uP/sLCy/4iGif91d3f/WFlY/1FSUv9VU1X/VlhX/15dXv9mZWX/gH9//8vJyv/9/f3//f39//39 + /f/8/f3//f39//39/f/9/f3//f39////////////////////////////8vLy//Hx8f+mpaWsAAAAOgAA + ABoAAAAGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8AAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAADJeWlW/O0M3/2djX/9zc2//j4+H/5ubl/+bl + 5P/l5eT/5ubk/+bn5f/n5eT/5ujm/+vq6//q6un/5+jn/9ze2/+bnpv/dXd0/2ZqZf9xc3H/q6yr//T1 + 9f/////////////////////////////////////////////////////////////////+/v7//v7+//7+ + /v/+/v7//v7+//7+/v/+/v7/0NDQ/5OTk/9aW1r/NDU0/x0eHf8mKCb/Ky0r/zAyMP8wMjD/MDIx/zAx + Mf8wMTH/MTIx/zExMv8xMzL/Jikn/1NWU//Q0dD//v7+//7+/v/+/v7//v7+//7+/v////////////// + //////////////7+/v/x8fH/8fHx/6Wkpa0AAAA6AAAAGgAAAAYAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAA////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAA + AAYKCgkYsrCvxNXW0//Y2Nb/297b/+Tm4//n5+b/5ubm/+fn5f/n5ub/6Ofl/+fo5v/s6+r/6+vr/+zt + 6//u7+7/8fDw//Hx8P/w8fD/9PLx//b39v/7+/v////+//////////////////////////////////// + //////////////////////////////////////////////////+io6L/amtq/yssK/8mJyb/MDEw/zI0 + Mv8yMzL/MjMx/zEzMf8xMzH/MDIw/zAyMP8wMjD/MDIw/zAyMP8wMTD/MDEw/zAxMP8wMTD/MDEw/yQl + JP+Wlpb//////////////////////////////////////////////////Pz8//Ly8v/x8fH/o6KirQAA + ADsAAAAbAAAABwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAD2xsa03Kysj/1dXU/9nY1v/e3tz/5+fl/+vr + 6P/o6ef/6Onn/+np5//p6ef/6+vq//Dv7//v7+//7+/t//Ly8P/z8fL/8/Lw//X08//09vb//Pr5//7+ + /v/+//////////////////////////////////////////////////////////////////////////// + //+Wl5b/LzEv/zAyMP81NzX/NTc0/zQ2M/8zNTP/MzQz/zI0Mv8yNDL/MjMy/zIzMf8xMzH/MTMx/zAy + MP8wMjD/MDIw/zAyMP8wMjD/MDEw/zAxMP8wMTD/MDEw/yssK/9tbW3///////////////////////// + ///////////////////8/Pz/8vPy//Hy8f+gn5+uAAAAPwAAAB0AAAAIAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAABQAA + AA8ICAcjtLOy0tHR0P/V1dT/2tjW/9/f3v/q6+n/7Ovr/+vq6P/p6un/6+vp/+rr6P/u7u3/8fHw//Dy + 8P/y8/H/8vLy//Pz8//08/T/9fX1//j59//+/f3///////////////////////////////////////// + //////////////////////////////Dw8P+HiIf/QEJA/zY4Nf84Ojf/Nzk2/zY4Nv82ODX/NTc1/zU3 + NP80NjP/MzUz/zM0M/8yNDL/MjQy/zIzMv8yMzH/MTMx/zEzMf8wMjD/MDIw/zAyMP8wMjD/MDIw/zAx + MP8wMTD/MDEw/y4vLv9tbW3///////////////////////////////////////v7+v/09PP/8vLy/6Oh + oroAAABFAAAAIwAAAAwAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAACAAAABAAAAAUAAAAFAAAABAAAAAQAAAADAAAAAwAA + AAMAAAADAAAAAwAAAAQAAAAFAAAABwAAAAwAAAAVAAAAJZWUk5fKysn/1NTS/9bW1P/Z2tb/4ODf/+zs + 6//t7ev/7ezs/+vs6v/t7Or/7+3r//Hw8P/y8vL/8/Px//Pz8v/z8/P/8/X0//b39f/5+fn//Pr6//7+ + /v///////////////////////////////////////////////////////////+Dg4P9sbWz/Ojw5/zo8 + OP88Pjv/Oz06/zo8Of85Ozj/ODo3/zc5Nv82ODb/Njg1/zU3Nf81NzT/NDYz/zM1M/8zNDP/MjQy/zI0 + Mv8yMzL/MjMx/zEzMf8xMzH/MDIw/zAyMP8wMjD/MDIw/zAyMP8wMTD/MDEw/y4vLv+qqqr///////// + ////////////////////////+/v7//X19f/z8/P/w8LC2QAAAE8AAAAtAAAAEgAAAAQAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAMAAAAHAAAADAAA + ABAAAAATAAAAFgAAABYAAAAVAAAAFAAAABMAAAATAAAAEwAAABMAAAATAAAAFAAAABYAAAAaAAAAIwAA + ADCFhIOPysnI/9TU0v/V1tT/2NfV/9va2P/j4+L/7O3r/+/t7v/t7e3/7u3t/+/v7P/x7+7/8vLx//Pz + 8f/z8/P/8/Pz//P08//29fT/+vn3//z7/P///v3///7///////////////////////////////////// + //////////////Dw8P91dXT/Njc0/0NEQf9BQz//QEI+/z5APf89Pzz/PD46/zs9Ov86PDn/OTs4/zg6 + N/83OTb/Njg2/zY4Nf81NzX/NTc0/zQ2M/8zNTP/MzQz/zI0Mv8yNDL/MjMy/zIzMf8xMzH/MTMx/zAy + MP8wMjD/MDIw/zAyMP8wMjD/MDEw/ykqKf/R0dH////////////////////////////8/Pv/9/f2//X1 + 9P/g39//IiIiZAAAADwAAAAfAAAACgAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8AAAAAAAAA + AAAAAAAAAAAAAAAAAAIAAAAGAAAADgAAABkAAAAjAAAAKwAAADAAAAAzAAAANAAAADMAAAAxAAAAMAAA + ADAAAAAwAAAAMAAAADAAAAAxAAAANAAAADpHR0dfqqmpyszLy//V1dT/1tbU/9fY1v/a2tf/3dza/+Tk + 4//s7Oz/7+/v//Dw7v/v7e7/8fDu//Hx8f/z9PL/8/Tz//T09P/09PP/9fbz//b39v/6+fr//fz9//7/ + /f////////////////////////////////////////////////+2t7b/RkdE/0lKRv9HSEX/RkdD/0RG + Qv9DREH/QUM//0BCPv8+QD3/PT87/zw+Ov87PTr/Ojw5/zk7OP84Ojf/Nzk2/zY4Nv82ODX/NTc1/zU3 + NP80NjP/MzUz/zM0M/8yNDL/MjQy/zIzMv8yMzH/MTMx/zEzMf8wMjD/MDIw/zAyMP8wMjD/MDIw/1pb + Wv////////////////////////////7+/v/4+Pj/9vb2//Dw8P+amJmyAAAATgAAADEAAAAXAAAABwAA + AAEAAAAAAAAAAAAAAAAAAAAA////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wAAAAAAAAAAAAAAAAAAAAACAAAACQAAABUAAAAlAAAAN2dm + Z2h1dHV6kI+QlKimp6pwb2+AcG9vgHFwcH9ycXF+cnFxfnJxcX5ycXF+bGtrfmloaICNjIujr66tzs7N + zf/W1tX/2NjW/9jY1v/Z2df/29rZ/93d2//g4N3/4+Pi/+zq6f/w8vD/8fHw//Lx8f/z8vH/9PTz//T0 + 8v/09PP/9fX0//b19P/29vT/9/j3//z8/P/9/f7///3///////////////////////////////////// + ////////8PDw/05PS/9PUEv/TU5J/0tMSP9JSkb/R0hF/0ZHQ/9ERkL/Q0RB/0FDP/9AQj7/PkA9/z0/ + O/88Pjr/Oz06/zo8Of85Ozj/ODo3/zc5Nv82ODb/Njg1/zU3Nf81NzT/NDYz/zM1M/8zNDP/MjQy/zI0 + Mv8yMzL/MjMx/zEzMf8xMzH/MDIw/zAyMP8wMjD/LjAu/8bHxv///////////////////////v7+//r6 + +v/4+Pf/9vb1/97d3fZWVVV9AAAARgAAACoAAAATAAAABgAAAAEAAAAAAAAAAAAAAAD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AAAA + AAAAAAAAAAAAAgAAAAkAAAAXPz4/Oa6srKHh4OD07Ovr/+/v7v/x8PD/9PT0/+/u7v/v7u7/7+7u/+7t + 7f/t7e3/7Ovr/+rq6f/p6ej/6Ojn/+rq6f/t7ez/5+fm/+fm5f/k4+L/4eHg/9zc2//e3t3/4ODf/+Pj + 4f/n5uX/6+vp//T08v/z8/P/8vPx//Tz8//09PP/9PX0//b19f/39vX/9vf2//b29v/4+vj//fz9//79 + /v////////////////////////////////////////////Dw8P9aWlj/VVZR/1NUT/9RUk3/T1BL/01O + Sf9LTEj/SUpG/0dIRf9GR0P/REZC/0NEQf9BQz//QEI+/z5APf89Pzv/PD46/zs9Ov86PDn/OTs4/zg6 + N/83OTb/Njg2/zY4Nf81NzX/NTc0/zQ2M/8zNTP/MzQz/zI0Mv8yNDL/MjMy/zIzMf8xMzH/MTMx/zAy + MP8wMjD/eXp5/////////////////////////////Pz8//n5+f/39/f/8/Pz/83LzOMkJCRkAAAAQgAA + ACYAAAARAAAABQAAAAEAAAAAAAAAAP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8AAAAAAAAAAAEAAAAGAAAAFX9+flTY19fo9PPz//f3 + 9//39/f/9/f3//f39//39/f/9/f2//f39v/39/b/9/f2//f39v/39/b/9vb1//b19f/19fT/9fX0//X1 + 9P/19PT/9PTz//T08//19PP/9fXz/+7t7P/m5uT/6Ofm/+rp5//v7uz/9vX0//T19f/19vT/9fX1//b1 + 9f/39/X/9/f2//f39v/39/b/+Pj3//v8/P/+/v7///////////////////////////////////////// + ///w8PD/aWlm/15dWv9bW1f/WFhU/1VWUf9TVE//UVJN/09QS/9NTkn/S0xI/0lKRv9HSEX/RkdD/0RG + Qv9DREH/QUM//0BBPv8+QD3/PT87/zw+Ov87PTr/Ojw5/zk7OP84Ojf/Nzk2/zY4Nv82ODX/NTc1/zU3 + NP80NjP/MzUz/zM0M/8yNDL/MjQy/zIzMv8yMzH/MTMx/zEzMf87PDv///////////////////////// + ///+/v7/+/v7//n5+P/39/b/8fDw/8zKy+MAAABXAAAAPQAAACIAAAAOAAAAAwAAAAAAAAAA////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wAAAAAAAAAABAAAAA+HhoZP3tzd8/b29v/4+Pj/+Pj4//j4+P/4+Pj/+Pj4//j49//4+Pf/+Pj3//j4 + 9//4+Pf/+Pj3//j49//4+Pf/+Pj3//j49//4+Pf/+Pf3//j39//49/b/+Pf2//j39//39/f/9/f3//P1 + 8//s7Or/7u3s//Hw7v/19PT/+Pf2//f39v/39/b/9/j2//j49//4+Pf/+Pj3//j49//5+fn//v79//7/ + //////////7/////////////////////////////yMjH/2FhXf9mZmL/Y2Nf/2BgXP9eXVr/W1tW/1hY + VP9VVlH/U1RP/1FSTf9PUEv/TU5J/0tMSP9JSkb/R0hF/0ZHQ/9ERkL/Q0RB/0FDP/9AQT7/PkA9/z0/ + O/88Pjr/Oz06/zo8Of85Ozj/ODo3/zc5Nv82ODb/Njg1/zU3Nf81NzT/NDYz/zM1M/8zNDP/MjQy/zI0 + Mv8yMzL/MjMx/zEzMf/T1NP////////////////////////////+/v3/+/v6//j4+P/29vb/7+/u/7Oy + ssYAAABTAAAANwAAABsAAAAJAAAAAQAAAAD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AAAAAAEAAAAJVVRUKtjW19r39/f/+fn5//n5 + +f/5+fn/+fn5//n5+P/5+fj/+fn4//n5+P/5+fj/+fn4//n5+P/5+fj/+fn4//n5+P/5+fj/+fn4//n5 + +P/5+fj/+fn4//n5+P/5+fj/+fn4//n5+P/5+fj/+Pj4//Py8f/w8O//8fHv//X18//49/j/+fj4//n4 + +P/5+Pj/+fj4//n4+P/4+Pj/+fn4//38/P/////////////+/////v///////////////////////6am + pf9sa2j/b29r/2xsZ/9paWT/ZmZi/2NjX/9gYFz/XV1Z/1tbVv9YWFT/VVZR/1NUT/9RUk3/T1BL/01O + Sf9LTEj/SUpG/0dIRf9GR0P/REZC/0NEQf9BQz//QEE+/z5APf89Pzv/PD46/zs9Ov86PDn/OTs4/zg6 + N/83OTb/Njg2/zY4Nf81NzX/NTc0/zQ2M/8zNTP/MzQz/zI0Mv8yNDL/MjMy/8zMzP////////////// + ///////////////////9/f3/+vr6//j49//29vX/7ezs/6elproAAABKAAAAKgAAABEAAAADAAAAAP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8AAAAAAwAAAA/Ix8eh9/b2//v6+v/7+vr/+/r6//v6+v/6+vr/+vr6//r6+v/6+vr/+vr6//r6 + +v/6+vn/+vr5//r6+f/6+vn/+vr5//r6+f/6+vn/+vr5//r6+f/6+vn/+vr5//r6+f/6+vn/+vr5//r6 + +f/6+vn/+Pf3//Ty9P/08/H/9vf1//r5+P/6+Pj/+vn5//r5+f/6+fn/+fn5//n5+f/5+fr//f79//// + //////7////+/v///////////////9PS0v+Kioj/fXx5/3l4df91dXL/cnJu/29va/9sbGf/aWlk/2Zm + Yv9jY1//YGBc/11dWf9aWlb/WFhU/1VWUf9TVE//UVJN/09QS/9NTkn/S0xI/0lKRv9HSEX/RkdD/0RG + Qv9DREH/QUM//0BBPv8+QD3/PT87/zw+Ov87PTr/Ojw5/zk7OP84Ojf/Nzk2/zY4Nv82ODX/NTc1/zU3 + NP80NjP/MzUz/zM0M/8yNDL/zMzM///////////////////////////////////////9/f3/+fn5//f3 + 9//19fX/5eTk/z4+Pm0AAAA5AAAAGgAAAAcAAAAA////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wAAAAAEj42OMu3s7f/8/Pv//Pz7//z8 + +//8/Pv//Pv7//z7+//8+/v//Pz8//z8/P/9/f3//f39//39/f/+/v7//v7+//7+/v/9/f3//f39//z8 + /P/8/Pv/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+/r/9/f2//f19f/3+Pf/+vn4//r7 + +v/6+/r/+/v6//v7+v/7+/r/+/v6//v7+v/////////////+/////////f3+/+/w7//Lycqxk5GRZ2lp + Z1JoZ2ZQZ2ZkTmRjYU5hYV5OXl5bTlxcWU5YWFRPZ2dilGpqZutmZmL/Y2Nf/2BgXP9dXVn/WlpW/1hY + VP9VVlH/U1RP/1FSTf9PUEv/TU5J/0tMSP9JSkb/R0hF/0ZHQ/9ERkL/Q0RB/0FDP/9AQT7/PkA9/z0/ + O/88Pjr/Oz06/zo8Of85Ozj/ODo3/zc5Nv82ODb/Njg1/zU3Nf81NzT/NDYz/zM1M//j4+P///////// + ///////////////////////////////////9/f3/+fn4//f39v/z8/L/paOjuwAAAEQAAAAiAAAACwAA + AAD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AAAAAAXHxsZ9+Pf3//39/f/9/f3//f39//39/f/+/v7//v7+//////////////////// + /////////////////////////////////////////////////////////v79//39/P/8/Pz//Pz8//z8 + /P/8/Pz//Pz8//v6/P/7+vr/+fn4//n5+f/8+/v/+/z7//z8/P/8/Pz//Pz8//z8/P/8/Pz//f39//// + //////////////Hw8f/PzM3Ac3JzPgAAABQAAAALAAAABgAAAAQAAAADAAAAAwAAAAMAAAADAAAAAwAA + AAQAAAAFAAAACF5dWlpmZmKhY2Nf42NjX/9gYFz/XV1Z/1paVv9YWFT/VVZR/1NUT/9RUk3/T1BL/01O + Sf9LTEj/SUpG/0dIRf9GR0P/REZC/0NEQf9BQz//QEE+/z5APf89Pzv/PD46/zs9Ov86PDn/OTs4/zg6 + N/83OTb/Njg2/zY4Nf81NzX/S01L//////////////////////////////////////////////////// + ///7+/v/+Pj4//b29v/Ny8zkAAAATQAAACkAAAAPAAAAAv///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8AAAAABNDOz4r///7////+//// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////7+/v/+/v3//v79//7+/f/9/f3//f38//z9/P/6+/z//Pz8//z9 + +//9/f3//f39//39/f/9/f3//f39//39/f////////////39/f/k4uPzn56ecAAAABoAAAAMAAAABQAA + AAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAQAAAAIXl5aM1pa + VmtbW1eZXFxYxl1dWf9aWlb/WFhU/1VWUf9TVE//UVJN/09QS/9NTkn/S0xI/0lKRv9HSEX/RkdD/0RG + Qv9DRED/QUI//0BBPv8+QD3/PT87/zw+Ov87PTr/Ojw5/zk7OP84Ojf/Nzk2/zY4Nv+urq3/7+7v/+3s + 7P/r6ury/f39//////////////////////////////////7+/v/6+vr/+Pj3/+bl5f8pKChgAAAAMAAA + ABMAAAAE////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wAAAAAD0M7PePv7+/////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////7///7//v/+//7//v7+//////////////////////////////////// + ///5+fn/19XW3EFAQDcAAAAVAAAACQAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAwAAAAUAAAAHAAAACjU1MxxOTkpLTU1JXFFR + TYpNTkmMTU5JqU5OSsZLTEjHSUpGx0dIRMc/PzzjQ0RB/0ZHQ/9ERkL/Q0RA/zo7OP85OzfWOz05yDo9 + Occ5OzjHODo3xzY4NrkzNDKOMTMxf7Cur1FpaGgiAAAAEKyrrD7h4OHU/f39//////////////////// + //////////////38/P/5+fn/7+/v/21sbIQAAAA2AAAAFwAAAAX///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AAAAAAGysbIo7ezs//// + //////////////////////////////////////////////////////////////////////////////// + /////////////////////////////////////////////////////////////////v////////////// + /////v//////////////////////////////////+/v7/9TT1NxAP0A4AAAAFAAAAAcAAAABAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAADAAAABAAAAAYAAAAHAAAACAAAAAkAAAAJAAAACgAA + AAoAAAALAAAADAAAAA0AAAANAAAADQAAAAwAAAALAAAACgAAAAkAAAAJAAAACQAAAAgAAAAHAAAABQAA + AAMAAAACAAAAApuZmhfd3N3T+fn5/////////////////////////////v7+//v7+//19fT/lZSUpAAA + ADwAAAAbAAAAB////wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8AAAAAAAAAAAPV09SG8/Lz//////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ///X1tfeOTg5PwAAABgAAAAIAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAaKgoRbc2tvE+fn5//// + /////////////////////////v79//v7+v+ioKCyAAAAQAAAAB4AAAAJ////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wAAAAAAAAAAAQAA + AATV09SG7+7v//////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ////////////////////////////////////////7+7v/2xrbGMAAAAgAAAACwAAAAIAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAbd3N3T+fn5/////////////////////////////f39/8rI + ydcAAABCAAAAHwAAAAn///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AAAAAAAAAAAAAAAAAQAAAATJx8hH3t3exPHw8f/9/f3///////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////39 + /f+/vb69AAAAMAAAABQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAZuZ + mhfd3N3T+/v7////////////////////////////zs3O1wAAAEMAAAAgAAAACf///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8AAAAAAAAA + AAAAAAAAAAAAAAAAAAIAAAAFqqipKtXT1Kbq6enx+/v7//////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ////////////////////////////////////////8fDx/01MTV0AAAAkAAAADAAAAAEAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAZuZmhfh4eHT/f39//////////////////// + ///Pz8/XAAAAQwAAACAAAAAJ////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAABJWT + lBjS0NGI6unp8f39/f////////////////////////////////////////////////////////////n5 + +f/z8/P/9vb2//////////////////////////////////////////////////////////////////// + ///Y1tfgAAAAOwAAABsAAAAHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAZuZmhfk4+Tw/////////////////////9DPz9cAAABCAAAAIAAAAAn///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAOysbIo29natfPy8/////////////// + ///////////////////////////////////39/f/goSC/x0hHv9oa2n/8/Pz//////////////////// + /////////////////////////////////////////f39/7KxsrMAAAAwAAAAFAAAAAQAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAsC+vzjr6ur///////// + ////////0c/Q1gAAAEAAAAAeAAAACf///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAEAAAAFzszNaOrp6fH///////////////////////////////////////////Pz + 8/9oa2n/HSEe/1xfXf/s7Oz///////////////////////////////////////////////////////// + ///z8vP/eXh4dgAAACYAAAAOAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAA87MzWjz8vP////////////T0dLUAAAAOgAAABoAAAAH////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwL6/OOrp + 6fH/////////////////////////////////////9PT0/9na2v+0tbT/2dra/+/v7/////////////// + /////////////////////////////////////////////+Tj5PUAAAA8AAAAHAAAAAgAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABdvZ + 2rX7+/v//////7i2t64AAAAxAAAAFQAAAAX///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACwL6/OOrp6fH///////////////////////////// + ///9/f3/7+/v/+np6f/u7u7//f39//////////////////////////////////////////////////// + ///9/f3/vLq7vQAAAC4AAAATAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABhIODG+rp6fH5+fn/pqWlgQAAACMAAAAOAAAAAv// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAADzszNaPX09f////////////////////////////////////////////////////////////// + //////////////////////////////////////////////Py8/9qaWllAAAAIQAAAAsAAAABAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAH5OLjxOvq6v9OTU0uAAAAFQAAAAgAAAAB////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAF29natf39/f////////////// + //////////////////////////////////////////////////////////////////////////////// + ////////z87P0wAAADEAAAAVAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPe3N2y0M7PeAAAAA4AAAAJAAAAAwAA + AAD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAGbmZoX6Obn8f////////////////////////////////////////////////// + ////////////////////////+/v7//j49//8/Pz///////Py8/+Af39wAAAAIQAAAAwAAAACAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAQAAAAMAAAAEAAAABAAAAAIAAAAAAAAAAP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8AAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAALHxcZa8fDx//// + //////////////////////////////////////////////////////////////39/f/4+Pj/9fT0//Py + 8v//////z87P0wAAADAAAAAUAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAA////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAzKyMme8vLy//////////////////////////////////// + /////////////////////////f39//j4+P/19PT/6unn/+/u7/9mZWZpAAAAJgAAAA4AAAACAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAADs/N + zK7v7u7/9fX1///////////////////////////////////////////////////////9/f3/+Pj4//X0 + 9P/o5+T/oZ+gsQAAAEgAAAApAAAAEAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAT5ePj8vLy8f/v7+7/8PHw//7+/v////////////// + ///7+/r//v79//////////////////39/f/4+Pj/9fT0/+7u7P+jop+0AAAAVAAAADkAAAAfAAAADQAA + AAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABri3 + tmHv7u3/8vLx/+/v7v/u7u7//Pz8///////7+/v//f39//z8/P/z8u///////////////////f39//j4 + +P/19PT/8vLx/+Xk4v+Ih4WeAAAAUAAAADYAAAAdAAAACwAAAAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIysjHjvf39v/y8vH/8PDv//z8/P//////+/v7/9PR + 0d7Hxse05OTk5Oro5//7+/r///////////////7/+Pj4//X09P/y8vH/8PDv/+Lh3v+GhYOeAAAATgAA + ADMAAAAZAAAACAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8AAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAnZ2Ne59/f2//Ly8f/6+vr////////////m5eX1MDAwSgAAACEAAAAQAAAADubl4tT+/v3///////// + ///7+/v/9fT0//Ly8f/w8O//7u7u/+Lh3v+LioecAAAASAAAACkAAAAQAAAABAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACeLh4Mf39/b/8/Pz////////////+/v7/6qo + p6kAAAAwAAAAEwAAAAQAAAACv726J+7s6fD////////////////4+Pj/8vLx//Dw7//u7u7/7e7t/97d + 2/ZFRURsAAAAOAAAABkAAAAHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAH4+Lhxvf39v/19fX////////////z8/L/ZWRkagAAACUAAAANAAAAAQAAAAAAAAACzMrHN/Dv + 7PH////////////////8/Pz/+vr6//Pz8//t7u3/7Ozr/727uMEAAAA9AAAAHAAAAAgAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAXa2Nem9/f2//X19f///////////+fm + 5vQAAAA3AAAAGgAAAAgAAAAAAAAAAAAAAAAAAAACzMrHN+7s6fD+/v3///////////////////////39 + /f/y8vL/29nX6QAAADQAAAAYAAAABwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAtHPzmfv7u3/9vb1///////7+/v/xMLBtgAAACQAAAAOAAAAAwAAAAAAAAAAAAAAAAAA + AAAAAAACoqCeF+Xj38T39vX///////////////////////z8/P/l5OHlAAAAIAAAAA4AAAAEAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABd3b2sP19PT//f39/9/e + 3ddMTEsvAAAAEgAAAAYAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAABc/Oykjc2teX6Ojlxejn + 5Mbm5OHHzMrHgGVkYiUAAAANAAAABQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAABAAAABdHPzmfT0dCIcG9vIAAAAAwAAAAGAAAAAQAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAQAAAAGAAAACAAAAAkAAAAIAAAABQAAAAMAAAABAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAA + AAMAAAAEAAAAAgAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///////////////////////////// + ////////////////////////////////////////////////////////////////+AD///////////// + //////AAP//////////////////AAA//////////////////wAAH/////////////////4AAA/////// + //////////+AAAH/////////////////gAAB///////////////4AYAAAf//////////////wAAAAAD/ + /////////////4AAAAAA//////////////8AAAAAAP//////////////AAAAAAD/////AH///////gAA + AAAA////8AAf//////4AAAAAAP///+AAD//////+AAAAAAD////gAAf//////gAAAgAA////4AAD//// + //4AAAMAAP/Af+AAA///////AAADAAD+AADgAAP//////wAAAQAA/gAAYAAB//////+AAAEAAPwAACAA + Af//////wAAAAAD8AAAAAAH///////AAAAAA/AAAEAAB///////8AAAAAPwAABAAAf///////wAAAAD8 + AAAYAAH///////8AAAAA/AAADAAB////////AAAAAP4AAA8AAP///////wAAAAD/AAAPgAD///////8A + AAAA/4AAB4AA////////AAAAAP/gAAOAAP///////wAAAAD/+AADAAD///////8AAAAA//4AAQAA//// + ////AAAAAP//AAAAAP///////4AAAAB//wAAAAD///////+AAAAAf/8AAAAA////////gAAAAA//AAAA + AP///////4ABAAAA/wAAAAD///////+AAQAAAA8AAAAA////////gAAAAAAAAAAAAf///////4AAAAAA + AAAAAAH///////+AAAAAAAAAAAAB////////gAAAAAAAAAAAAf///////4AAAAAAAAAAAAH///////+A + AAAAAAAAAAAD////////gAAAAAAAAAAAA////////wAAAAAAAAAAAAP///////8AAAAAAAAAAAAH//// + ////AAAAAAAAAAAAB////////wAAAAAAAAAAAA////////8AAAAAAAAAAAAP////////AAAAAAAAAAAA + H////////gAAAAAAAAAAAB////////4AAAAAAAAAAAAf///////+AAAAAAAAAAAAH////////gAAAAAA + AAAAAB////////4AAAAAAAAAAAA////////8AAAAAAAAAAAAP////////AAAAAAAAAAAAD////////wA + AAAAAAAAAAA////////8AAAAAAAAAAAAP///////+AAAAAAAAAAAAD////////gAAAAAAAAAAAA///// + ///wAAAAAAAAAAAAP///////4AAAAAAAAAAAAD///////+AAAAAAAAAAAAA///////+AAAAAAAAAAAAA + H////8AAAAAAAAAAAAAAAB////4AAAAAAAAAAAAAAAAP///8AAAAAAAAAAAAAAAAB///+AAAAAAAAAAA + AAAAAAP///AAAAAAAAAAAAAAAAAB///gAAAAAAAAAAAAAAAAAf//4AAAAAAAAAAAAAAAAAD//8AAAAAA + AAAAAAAAAAAA///AAAAAAAAAAAAAAAAAAP//wAAAAAAAAAAAAAAAAAD//8AAAAAAAAAAAAAAAAAAf//A + AAAAAAAP/AAAAAAAAH//wAAAAAAAP/+AAAAAAAB//8AAAAAAAH///gAAAAAAf//gAAAAAAD////////A + AH//4AAAAAAB////////4AB///AAAAAAA/////////AAf//8AAAAAAP////////4AH///wAAAAAH//// + /////AB////AAAAAB/////////4Af///8AAAAAf/////////AH////wAAAAP/////////4B////+AAAA + D/////////+Af////wAAAA//////////wH////+AAAAf/////////8D/////gAAAH//////////B//// + /8AAAD/////////////////AAAA/////////////////wAAAP////////////////8AAAB////////// + ///////AAAAP////////////////wAAAB////////////////8AAAAf////////////////AAAAH//// + ////////////wAQAB////////////////8AOAAf////////////////ADwAH////////////////4A+A + B////////////////+Af4A/////////////////4P/////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////////////////////////////////////////////////////ygAAAAwAAAAYAAAAAEA + IAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wAAAAACAAAABQAA + AAcAAAAHAAAABQAAAAMAAAAB////AP///wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAMAAAAJAAAAEgAAABkAAAAbAAAAFgAAAA4AAAAGAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8AAAAAAQAAAAkAAAAXAAAAKQAAADcAAAA7AAAAMwAAACUAAAAUAAAACAAAAAIAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AAAA + AAIAAAAFAAAACQAAAAsAAAALAAAADAAAABStrKxrzs3Ow8vLytSUlJOiIiEhXgAAAEEAAAApAAAAEgAA + AAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8AAAAAAgAAAAkAAAATAAAAHQAAACMAAAAkAAAAIbGxsWnt7ez/7/Dv//Dw7//o6ej/3Nzb9lta + WncAAAA9AAAAHQAAAAkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAACAAAABQAA + AAYAAAAGAAAABAAAAAIAAAAAAAAAAAAAAAD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8AAAAABQAAABIAAAAoAAAAPAAAAEgAAABJAAAAQrSzs5H9/f3///////// + ///+/v7/8PDw/97d3vUAAABJAAAAJAAAAAsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAA + AAUAAAALAAAAEgAAABgAAAAXAAAAEgAAAAoAAAAEAAAAAAAAAAD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8AAAAAB8LCwmHu7e7m9/f3//f39//p6enroqGhpAAA + AE7m5eXb///////////9/fz/+/v7/+fn5/8AAABMAAAAJgAAAA0AAAABAAAAAwAAAAUAAAAIAAAACAAA + AAYAAAAEAAAABQAAAAwAAAAaAAAAKwAAADYAAAA2AAAAKwAAABoAAAALAAAAAwAAAAD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8AAAAAB/X19fD///////////// + /////////////66tra0AAABE1tXWtPr6+v/9/f3//////+rp6f8AAABNAAAAJwAAAA0AAAADAAAACQAA + ABMAAAAaAAAAHAAAABkAAAATAAAAD4aEhDOwr696tLOzpMC/v8CPjo6VAAAARwAAAC8AAAAVAAAABgAA + AAD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8AAAAABO/u + 7sP//////////////////////////9nZ2dcAAABGiomKZ////////////////+vr6/8AAABOAAAAKQAA + AA4AAAAHAAAAEwAAACgAAAA3AAAAPQAAADkAAAAtAAAAIc3MzI/09PT/9vb2//f39//19fX/m5ubpAAA + AEAAAAAfAAAACQAAAAD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8AAAAAAcHAwCXp6Oml+/v7//39/f/8/Pz//f39/9jX19cAAABJiYiJaP///////////f39/+zs + 7P8AAABQAAAAKwAAABACAgILx8bFmszMyszAv7/HoKCeq4eGhZYnJyZVAAAAN8XExIX+/v7///////// + ////////4ODg6wAAAEsAAAAmAAAADQAAAAH///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AAAAAAEAAAAEmJeXL/Pz8/L+/v7/+/v7/9XU1NcAAABMiIaHaf// + /////////f38//Hx8f9ERERoAAAALgAAABIAAAAI6Ojn/+7u7P/s7Or/5ubk/+Pj4f/CwcDWAAAASAAA + ACzh4OGr///////////8/Pz/7+/v/wAAAE8AAAArAAAAEAAAAAL///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AAAAAAAAAAAAAAAACerq6sf/////+Pj4/+jn + 5vUAAABOh4WGav///////////f39//f39v9ubW1+AAAALwAAABMAAAAG5OPihfj49////////f38/+zs + 6v/o5+X/AAAAVAAAADcAAAAi4eDgu//////+/v7/9vb1/0NCQmgAAAAuAAAAEgAAAAP///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8AAAAACOvr + 68b/////8/P0/+vr6v8AAABQhoWFa////////////Pz8//j49/9tbGyAAAAAMwAAABYAAAAFAAAABK6t + rCjj4+Kn7e3r8uzs6v/q6uj/fHx7jgAAAEYAAAAvnJyccP39/f///////v7+/3FvcH4AAAAvAAAAEwAA + AAP///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AAAA + AAAAAAAAAAAAB+Tj5Kn///7/8O7x/+no6P8AAABRg4KDbf//////////+/v7//n5+P9ramqDAAAAPAAA + ACMAAAASAAAACwAAAAkAAAANz8/Onezs6v/n5+T/1tbU6wAAAFYAAABFs7Kyovn5+f///////////3Jx + cX4AAAAvAAAAEgAAAAP///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8AAAAAB9nY2Y39/f7/7+7u/+bo5/8AAABXe3p7dP//////////+/v6//r6 + +f9mZWWJAAAATgAAADsAAAArAAAAIgAAABwAAAAbpqWka+zs6v/p6Ob/6Ofl/2NiYotra2uE8vLy//7+ + /v///////////3Nyc3wAAAAtAAAAEQAAAAL///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AAAAAAAAAAAAAAAABtnY2Y39/Pz/7ezs/+jm5v8AAABgcnFxfv// + ///+/v3/+/r6//r6+v+np6bHbGtrlCAgIGIAAABOAAAARQAAADwAAAA3s7KwnuTk4v/h4d//3t7b/6Kh + oMDm5ub2+Pj4/////////////////3d2dngAAAAoAAAADgAAAAH///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8AAAAAB9nY2Y37/Pr/5eXl/+Xl + 5f9oZ2efdnZ2taeop//c3dz/+/v7//f39//i4uH/4ODf/9nZ1//FxMPjo6Oiu3JycZAICAhbr66txtnZ + 1//Y2Nb/19fV/9ra2f/y8vL/9fX1////////////+fn5/y4uLk0AAAAgAAAACgAAAAD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AAAAAAAAAAAAAAAAB8vK + yo/u7+7/4+Pj/9LRz/+mp6X/SEpH/1JUUf9SVFH/kZOQ//b29f/p6ej/6eno/+np6P/m5uX/5OTj/+Pk + 4v/c3Nv/zMvL+c3My//HxsT/ycnH/+fn5v/z8/L/9PT0//z8+///////5OTk3wAAADQAAAAXAAAABQAA + AAD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8AAAAACb+/vpXg4+H/3t7e/7q6uf9UVlP/UlRR/1ZZVf9VV1T/U1ZS/5eZl//s7Ov/7Ozq/+vr + 6v/r6+r/6+vq/+vr6f/q6+n/6uvp/+rr6f/p6ej/5ubl/+7u7f/z8/P/9fX0//r6+v//////npydjgAA + ACgAAAAOAAAAAgAAAAD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AAAAAAAAAAAAAAAAC7+/v7DY2dj/2trZ/2BiX/9SVFD/V1lW/1lbV/9YWlb/VllV/3t9 + ev/u7uz/7e3s/+3t7P/t7ev/7Ozr/+zs6//s7Ov/7Ozr/+zs7P/t7ez/7e3s/+3t7P/y8vD/9vb1//v7 + +v/p6enrAAAAPwAAAB4AAAAJAAAAAAAAAAD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wAAAAACAAAAD8nJydva2tn/uLm3/1BTT/9UV1P/Wl1Z/1te + Wv9aXVn/WFtX/4mKiP/y8vH/8PDv/+/v7v/v7+7/7+/u/+/v7v/v7+7/7+/u/+/v7v/v7+7/7+/u/+/v + 7v/w8O//9vb2//z8+/+9vLy2AAAANwAAABgAAAAGAAAAAAAAAAD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AAAAAAAAAAAEXVxcJNjY1//c3Nv/zMzL/1JV + Uf9XWVX/W15a/11gW/9cX1r/WlxY/9TV1P/39/b/8/Py//Lx8P/x8fD/8fHw//Hx8P/x8fD/8fHw//Hx + 8P/x8fD/8fHw//Hx8P/y8vH/9vb2//7+/v+mpqagAAAAMwAAABUAAAAEAAAAAAAAAAD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wAAAAAIl5aWVt3d + 3P/e393/4ODf/25wbf9ZXFj/XF5a/1xfW/9bXlr/oqOh//7+/v/6+vr/+fn5//j49//19fX/8/Pz//Pz + 8v/08/L/9PPy//T08v/09PL/9PTz//T08//29vX//Pz7//v7+/9ycXF+AAAAMQAAABQAAAAEAAAAAAAA + AAD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8AAAAAAQAA + AAQAAAARs7Oxl9/g3v/h4uD/4+Pi/7q7uf9ZXFj/W11Z/1pdWf+YmZf////////////+/v7//Pz8//z8 + /P/8/Pz//Pz8//v7+v/r6+v/vb29/7y8vP/5+fn/+vr6//v7+//8/Pz///////X19f9xcHB/AAAAMQAA + ABQAAAAEAAAAAAAAAAD///8A////AP///wD///8A////AP///wD///8AAAAAAgAAAAUAAAAJAAAACwAA + AA0AAAANAAAADgAAABQGBgYmycjG6N3d3P/m5eT/5+fm/+/v7v/BwsH/k5WS/7a3tv////////////// + /////////v7+/9/f3/+RkpH/W1xb/zc4Nv8rLSv/MDIw/zAxMP82Nzb/ubm5/////v////////////Pz + 8v9vbm+BAAAANwAAABkAAAAGAAAAAAAAAAD///8A////AP///wD///8A////AP///wAAAAACAAAACQAA + ABIAAAAdAAAAJAAAACYAAAAnAAAAKQAAADCNjIuM09PR/+Df3f/q6un/7e3s//Lz8v/y8vL/+/v7//// + ///////////////////FxcX/f4B+/zY4Nf83OTb/NTc0/zM1M/8yNDL/MTMx/zAyMP8wMjD/Li8u/62t + rf////////////T09P9kZGSHAAAAQwAAACQAAAANAAAAAwAAAAD///8A////AP///wD///8A////AAAA + AAEAAAAHAAAAFgAAACoAAAA9AAAASAAAAEwAAABNKikpXY+PjqDOzcz32dnX/+bl5P/w8O//9PPz//T0 + 9P/09PT//v7+/////////////////4iJhv9ISUX/Q0VB/z9BPf88Pjr/OTs4/zc5Nv81NzT/MzUz/zI0 + Mv8xMzH/MDIw/z0/Pf/j4+P///////n5+P+vr6++AAAAUwAAADYAAAAZAAAACAAAAAH///8A////AP// + /wD///8A////AAAAAAMAAAAOnp2dXObm5enw7+//8O/v/+/v7//t7ez/7Ozr/+/v7v/p6ej/5ubk/+3s + 6//29vb/9/f2//f29v/5+fn/////////////////jY2L/1laVf9TU0//TU5J/0hJRf9DRUH/P0E9/zw+ + Ov85Ozj/Nzk2/zU3NP8zNTP/MjQy/zEzMf+VlpX///////39/f/19fX/kI+PnAAAAEgAAAAoAAAADwAA + AAP///8A////AP///wD///8A////AAAAAASVk5Qw8/Pz8vr6+v/6+vn/+vr5//r6+f/6+vn/+vr5//r6 + +f/6+fn/+Pj4//j39//5+fn/+fn5//n5+P/9/fz//////+bm5v+Ojoz/cnFt/2lpZP9hYFz/WVlV/1NT + T/9NTkn/SElF/0NFQf8/QT3/PD46/zk7OP83OTb/NTc0/zM1M/+ZmZn////////////8/Pz/8vLy/0FB + QWkAAAA1AAAAFwAAAAX///8A////AP///wD///8A////AAAAAAPh4OGI/v7+//7+/v/+/v7//v7+//// + /////////v7+//39/f/9/f3//f39//39/f/9/f3//f38//39/P//////29vbwm5tbkEAAAAXAAAAD0lJ + RhdhYVxrYmJdtmFhXetZWVX/UlNP/01OSf9ISUX/Q0VB/z9BPf88Pjr/OTs4/zc5Nv+hoaD/+fn5//// + ////////+vr6/62srKwAAAA8AAAAHAAAAAj///8A////AP///wD///8A////AAAAAALc2ttm//////// + //////////////////////////////////////////////////////////////39/f+wr6+XAAAAJwAA + ABEAAAAFAAAAAQAAAAEAAAACAAAABQAAAAhDQ0AVT09LSkZHQ01BQj5NPD05Tjg5Nk40NjNOMTMwTi8x + L00bHBshr66vQPn4+fH//////v7+/9LR0ckAAAA8AAAAHgAAAAn///8A////AP///wD///8A////AP// + /wAAAAAE5eTlhvf29vH//////////////////////////////////////////////////////////9PT + 08oAAAA0AAAAFwAAAAYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAIAAAADAAAAAwAA + AAMAAAADAAAAAwAAAAMAAAADAAAABMnHyDj5+Pnx/////+Lh4c4AAAA0AAAAHAAAAAn///8A////AP// + /wD///8A////AP///wAAAAABAAAAA5uZmhfh4OGI+fj58f///////////////6Kko//d3d3///////// + /////////////42MjYIAAAAnAAAADgAAAAL///8A////AP///wD///8A////AP///wAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPLyspJ/f39/+jo6MkAAAAmAAAAFgAA + AAf///8A////AP///wD///8A////AP///wD///8A////AAAAAAEAAAAExcTEOfn4+fH//////////8LD + wv/k5eT/////////////////8PDw9QAAADwAAAAcAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAF5eTlhu3t + 7cQAAAAVAAAADQAAAAX///8A////AP///wD///8A////AP///wD///8A////AP///wD///8AAAAAA8XF + xUv9/f3///////////////////////7+/v/+/v3/ycjJvwAAADUAAAAXAAAABf///wD///8A////AP// + /wD///8A////AP///wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAABzszNNN7d3VUAAAAJAAAABQAAAAL///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AAAAAArW1dWd/Pz8//////////////////v7+//q6un1REREaQAAADcAAAAZAAAABgAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAIAAAACAAAAAQAAAAD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AAAAAAnj4uK48fHw//z8/P/5+Pj///////v7+//q6un0KSkoXAAA + ADoAAAAdAAAACQAAAAH///8A////AP///wD///8A////AP///wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AAAAAAfv7u7i+/v6/9DPz6aAfn5V8vHx1v39 + /f/x8vH/4ODe5zY2NUAAAAAcAAAACgAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AAAAAATr6unD+/v7/5WU + k0gAAAAWeXh2H/T08tL+/v7/9vb2/6CfnVgAAAASAAAABwAAAAH///8A////AP///wD///8A////AP// + /wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AAAA + AALQz8414eDgdgAAAAwAAAAIAAAABQAAAAXS0M1HysjFSgAAAA0AAAAIAAAAAwAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wAAAAABAAAAAgAAAAIAAAAB////AP///wAAAAABAAAAAgAAAAIAAAAB////AP// + /wD///8A////AP///wD///8A////AP///wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///////8AAP//wH///3////+AP///Pw///wAf//8gA//gAB///wAD/8AAH+A/EAP/wAAfwB8AA//A + AAAADwAH/8AAAAAPAAf/wAAAAA8AB//AAAAABwAD/+AAAAAH4IP/+AAAAAf/w//4AAAAB/////gAAAAH + ////+AAAAAf////4AAAABwAA//gAAAAP////+AAAAA/////4AAAAD/////gAAAAf////8AAAAB/////w + AAAAH/////AAAAAfAP//wAAAAB/+//AAAAAAHwD/4AAAAAAPAP/AAAAAAAf//8AAAAAABwAAwAAAAAAH + ///AAAAAAAcAAMAAAAAAB///4AAH8AAHAADgAAf//AcA//gAD//+BwD//gAP//4HAP//AA///w////8A + B////////wAH////////AAf//////v8AD////////4Yf//////////////////////////////////// + //////////////////////////////////8oAAAAIAAAAEAAAAABACAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAA////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AAAAAAMAAAAHAAAABwAAAAMAAAAB////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wAAAAABAAAAAwAAAAoAAAAQAAAACwAAAAP///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AAAAAAEAAAACAAAAAgAAAAQ1NDU1Q0NDZx0dHE8AAAArAAAAFAAAAAT///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wAAAAACAAAABgAAABEAAAAQWVlZRO7u7t/39/b+z8/O4ltaWogAAAAtAAAAC/// + /wD///8A////AP///wD///8A////AAAAAAEAAAADAAAAAwAAAAH///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////ACkpKRtSUlJrUlJSgkVFRXBkZGRz////////////////4N/g9wkJ + CUcAAAAP////AP///wAAAAABAAAAAf///wAAAAADAAAACgAAABYAAAAZAAAAEAAAAAP///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8ApaWlkf///////////////oiIiKFzcnKG+/v78v// + ///n5+f6CQkJSgAAABH///8AAAAAAwAAAA4AAAAQAAAACUFAQCF/fn5rhoaGlkdHR20AAAAsAAAADgAA + AAH///8A////AP///wD///8A////AP///wD///8A////AP///wCjoqJt////+P//////////2dnZ4CQk + JETh4eHO/////+bm5vkGBgZLAAAADxUVFRVFRERUOTk4YiYmJlMAAAAllpWVcv//////////7e3t8DIy + MmQAAAAVAAAAAv///wD///8A////AP///wD///8A////AP///wD///8A////AP///wBsbGw85+fnzP// + ///R0NDdKyorTt/e387/////7u7u+ygoKFkAAAAHUVFRT//////p6ej62djX5VtbWowpKSk/5+bn0f// + ////////TU1NiAAAABkAAAAE////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wChoKCL/////9vc2/EtLCxU397ezv/////6+vn+UVFRbQAAAA8yMjEd3d3cp/////b/////r6+u0wAA + AC8/Pz9F9/f36P////+DgoKdAAAAIAAAAAX///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AJubm33/////3Nzb9ywrLFfd3d3P//////r6+f5JSUlvAAAAHwAAAAb///8AeHh3WfHx + 7+/s7Or3MDAwciIiIkbs6+vg/////52cnKcAAAAiAAAABf///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8AlZSVZv/////Z2dj3IiEiXN7e3tH/////+vr6/mFhYY0EBAVCAAAAKAAA + ABgnJyYs4uLg2fT08f+SkpG2paWlvP//////////oJ+gpgAAACAAAAAD////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wCVlJVm/////9/e3vpaWVmWp6en4urr6v/+/v7/09PS7qio + p9OCgYGwUFBQfEFBQXXX1tXw2trY/9LS0fX09PX//v7+//////9+fn6QAAAAEwAAAAH///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AImIiGjx8fH/09PT/3x9e/9IS0f/X2Fe/8DB + v//z8/L/9PTz//Ly8f/o6ef/19fW+tXU0/7Q0M7/5OTj//X19P/8/Pz//v7++UJBQl4AAAAH////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8Af39/eOrr6v+Wl5X/TU9L/1da + Vv9QUk7/cHNw/+vr6f/u7u3/7e3s/+7t7P/u7+3/7e7t/+3u7P/t7ez/8/Py//////+1tbXCDAwMJQAA + AAX///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wCWlpaj5OTj/25w + bf9OUU3/XF9b/1JVUP+IiYf/8/Py//Dw7//v7+7/7+/u//Dw7//w8O//8PDv/+/v7v/y8vL//////318 + fI4AAAAVAAAAA////wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8AJiYmDczL + ysnq6+n/ioyJ/05RTP9UV1L/Y2Vh/9jY1/////7/+Pj3//v7+/////7//fz8//r6+P/9/fv/9PTz//j4 + 9//+/v3+XFxccgAAABUAAAAC////AP///wD///8A////AP///wD///8A////AAAAAAEAAAACAAAAAv// + /wA1NTU+4OHf7+jo5//Q0c//cnRx/2ttav/Mzcz/////////////////2tva/7+/v/+jpKP/jo6O/8fH + x/////////////n5+f5PTk9sAAAAFwAAAAL///8A////AP///wD///8A////AAAAAAEAAAADAAAADwAA + ABUAAAAVAAAAHYKCgJzj4+H/6unp//Pz8//l5eX/6Onp////////////yMjH/3p8ev9ERkT/KSsp/yMl + I/8iJSL/LS4t/6enp///////+Pj4/kdHR3QAAAAjAAAAB////wD///8A////AP///wD///8ABgYGCkVE + RFRPT09/TU1NhlBQUIeVlZSx3Nzb/eXk4v/z8vL/9fT0//z8/P//////+/v8/5iZlv9FR0L/ODo1/zc5 + Nf84Ojb/NTc1/zM1M/8rLSv/NTc2/9fX1///////lZWVswcHBz8AAAAVAAAAA////wD///8A////AA4N + DQGJiIlY////9v/////////////////////29vX/9PPz//j5+f/5+fj///////b29v2bm5n1YWJd9mBf + Wv9YWFT/S0xI/0NFQf89Pzv/OTs4/zU3NP8wMzD/uLm4///////8/Pz8YmJiigAAACQAAAAH////AP// + /wD///8AJyYmDfDv8Kz////////////////////////////////+/v7//v7+///////a2trSYGBgUAEB + ABUkJCIXRUVBW0JCP5tTVFC7UlNPy0lKRspCQz/KOz05yzQ2M8mYmZi5////8//////HxsbLBAQENQAA + AAv///8A////AP///wAMDAwCd3Z2SP///93////////////////7+/v//f39////////////6enp5CMj + Iz8AAAAC////AP///wD///8A////AP///wAYGBcPFBQTDxISEg8QERAPCwwLDf///wCioaJV////+uHh + 4d8ICAgzAAAADP///wD///8A////AP///wD///8ATk1NEbq5uXb////x/////8jJyP/i4uL///////// + //+Ojo6aAAAAEwAAAAL///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wCsra1w8PDw2goKCiUAAAAI////AP///wD///8A////AP///wD///8A////AKWkpV39/f348/Pz//f4 + 9///////+vn59jo6OmEAAAAJ////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////ADs6OhHa2dlmCwsLEgAAAAP///8A////AP///wD///8A////AP///wD///8ABgYGAtva + 2r3///////////////+zs7LHAAABNwAAABMAAAAB////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wAAAAAB////AP///wD///8A////AP///wD///8A////AP// + /wAICAgL6Ojn5+fm5tW9vbyg/////+Lj4fdQUE9oAAAAEQAAAAL///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AAoJCQb5+Pe2kpGRbv///wCUlJNv////zJeXlm8BAQEGAAAAAf///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AEdGRhASEhIM////AP///wBCQUAMDw8PBQAAAAH///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP////////////B////gf///AD///gA/D/4AMgf+ACAD/gAAA/8A + AAP/gAAD/4AQA/+AAAP/gAAD/4AAB/+AAAf/gAAH/wAAB/EAAAfAAAAHwAAAA4AAAAOAAAADgAPgg+AD + /8P4B//D+AP/9/gD///4g////Mf/////////////KAAAABAAAAAgAAAAAQAgAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wARERH/AAAA/wAAAP////8A////AP///wD///8A////AP// + /wD///8AAAAA/wAAAP////8A////AP///wD///8A////AAAAAP//////AAAA/////wD///8A////AP// + /wD///8A////AAAAAP8AAAD/AAAA/////wD///8A////AP///wAAAAD//////wAAAP////8A////AP// + /wD///8A////AP///wAAAAD//////wAAAP////8A////AP///wD///8AAAAA//////8RERH/////AP// + /wD///8A////AP///wARERH///////////8AAAD/////AP///wD///8A////AAAAAP///////////wAA + AP8AAAD/AAAA/wAAAP8AAAD///////////8AAAD/AAAA/////wD///8A////AP///wAAAAD/ERER//// + ////////////////////////////////////////AAAA/////wD///8A////AP///wD///8AAAAA/xER + Ef//////////////////////AAAA/wAAAP///////////wAAAP////8A////AP///wD///8A////ABER + Ef////////////////8RERH/AAAA/wAAAP8AAAD/ERER////////////AAAA/////wAAAAD/AAAA/xER + Ef////////////////8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD//////wAAAP8AAAD///////// + //////////////////8AAAD/////AP///wD///8A////AP///wD///8A////AAAAAP8AAAD/////AAAA + AP//////AAAA//////8AAAD/////AP///wD///8A////AP///wD///8A////AP///wD///8AERER//// + /wD///8AAAAA////////////AAAA/////wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wAAAAD/AAAA//////8AAAD/////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wAAAAD/////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD//zV74/kAAPH4AADx+PH48fDx+PAA8fDwAfAA8AHwAfAA8AGAAPAAAfyAAIP+ + AfzD/4P+4f/D//v/4f////v/ + + + \ No newline at end of file diff --git a/SOLVER/TEST_MAP/GraphUtils.cs b/SOLVER/TEST_MAP/GraphUtils.cs new file mode 100644 index 0000000..e4b0567 --- /dev/null +++ b/SOLVER/TEST_MAP/GraphUtils.cs @@ -0,0 +1,480 @@ +/* + * RouteLL c# class by Milok Zbrozek + * Ìîäóëü äëÿ èíäåêñàöèè êîîðäèíàò óçëîâ ãðàôà + * Author: Milok Zbrozek + */ + + +using System; +using System.Collections.Generic; +using System.Text; + +namespace dkxce.GraphUtils +{ + public class PointNLL + { + public uint node; + public float lat; + public float lon; + public PointNLL(uint node, float lat, float lon) + { + this.node = node; + this.lat = lat; + this.lon = lon; + } + public override string ToString() + { + return "{" + node + "; " + lat.ToString() + " " + lon.ToString() + "}"; + } + } + + public class PointNLLD : PointNLL + { + public float dist; + public PointNLLD(uint node, float lat, float lon) + : base(node,lat,lon) + { + this.dist = 0; + } + public PointNLLD(uint node, float lat, float lon, float dist) + : base(node, lat, lon) + { + this.node = node; + this.lat = lat; + this.lon = lon; + this.dist = dist; + } + public PointNLLD(PointNLL point) + : base(point.node, point.lat, point.lon) + { + this.dist = 0; + } + public PointNLLD(PointNLL point, float dist) + : base(point.node, point.lat, point.lon) + { + this.dist = dist; + } + } + + public class PointNLLIndexer + { + /* + * main file [s0] geo: + * HEADER + * [int] nodes_count + * array[1..nodes] of [[float][float]] - lat,lon = 8 bytes + * + * + * lat lon file [s1] .ll: + * HEADER + * [int] nodes_count + * array[1..nodes] of [[uint][float][float]] - node,lat,lon = 12 bytes + * + */ + + private static byte[] header0 = new byte[] { 0x52, 0x4D, 0x50, 0x4F, 0x49, 0x4E, 0x54, 0x4E, 0x4C, 0x4C, 0x30 }; + private static byte[] header1 = new byte[] { 0x52, 0x4D, 0x50, 0x4F, 0x49, 0x4E, 0x54, 0x4E, 0x4C, 0x4C, 0x31 }; + + List arr = new List(); + + public void Add(PointNLL point) { arr.Add(point);} + + /// + /// Add Lat Lon as Node & get a number + /// + /// Latitude + /// Longitude + public uint AddNew(float lat, float lon) + { + arr.Add(new PointNLL((uint)arr.Count + 1, lat, lon)); + return (uint)arr.Count; + } + + /// + /// Find Bode By Coordinates + /// + /// Latitude + /// Longitude + /// node number + public uint NodeByLatLon(float lat, float lon) + { + uint res = 0; + for (int i = 0; i < arr.Count; i++) + if ((arr[i].lat == lat) && (arr[i].lon == lon)) + { + res = arr[i].node; + break; + }; + return res; + } + + public void OptimizeSaveAndClose(string fileName) + { + arr.Sort(PointNLLSorter.SortByNode()); + System.IO.FileStream fs = new System.IO.FileStream(fileName, System.IO.FileMode.Create); + fs.Write(header0, 0, header0.Length); + byte[] ba = BitConverter.GetBytes(arr.Count); + fs.Write(ba, 0, ba.Length); + for (int i = 0; i < arr.Count; i++) + { + ba = BitConverter.GetBytes(arr[i].lat); + fs.Write(ba, 0, ba.Length); + ba = BitConverter.GetBytes(arr[i].lon); + fs.Write(ba, 0, ba.Length); + }; + fs.Flush(); + fs.Close(); + + arr.Sort(PointNLLSorter.SortByLL()); + fs = new System.IO.FileStream(fileName+".ll", System.IO.FileMode.Create); + fs.Write(header1, 0, header1.Length); + ba = BitConverter.GetBytes(arr.Count); + fs.Write(ba, 0, ba.Length); + for (int i = 0; i < arr.Count; i++) + { + ba = BitConverter.GetBytes(arr[i].node); + fs.Write(ba, 0, ba.Length); + ba = BitConverter.GetBytes(arr[i].lat); + fs.Write(ba, 0, ba.Length); + ba = BitConverter.GetBytes(arr[i].lon); + fs.Write(ba, 0, ba.Length); + }; + fs.Flush(); + fs.Close(); + } + + private class PointNLLSorter: IComparer + { + private byte sortBy = 0; + private PointNLLSorter(byte sortBy) { this.sortBy = sortBy; } + public static PointNLLSorter SortByNode() { return new PointNLLSorter(0); } + public static PointNLLSorter SortByLL() { return new PointNLLSorter(1); } + public int Compare(PointNLL a, PointNLL b) + { + if (sortBy == 0) return a.node.CompareTo(b.node); + + int res = a.lat.CompareTo(b.lat); + if (res == 0) res = a.lon.CompareTo(b.lon); + if (res == 0) res = a.node.CompareTo(b.node); + return res; + } + } + } + + public class PointNLLSearcher + { + private static byte[] header0 = new byte[] { 0x52, 0x4D, 0x50, 0x4F, 0x49, 0x4E, 0x54, 0x4E, 0x4C, 0x4C, 0x30 }; + private static byte[] header1 = new byte[] { 0x52, 0x4D, 0x50, 0x4F, 0x49, 0x4E, 0x54, 0x4E, 0x4C, 0x4C, 0x31 }; + + private System.IO.Stream s0; + private System.IO.Stream s1; + private int size = 0; + + /// + /// Nodes count + /// + public int Nodes { get { return size; } } + + private PointNLLSearcher() { } + + public static PointNLLSearcher LoadToMemory(string fileName) + { + PointNLLSearcher schr = new PointNLLSearcher(); + schr.s0 = new System.IO.MemoryStream(); + schr.s1 = new System.IO.MemoryStream(); + + System.IO.FileStream fs = new System.IO.FileStream(fileName, System.IO.FileMode.Open); + byte[] block = new byte[8192]; + int read = 0; + while ((read = fs.Read(block, 0, 8192)) > 0) + schr.s0.Write(block, 0, read); + fs.Close(); + + schr.s0.Position = 0; + byte[] ba = new byte[header0.Length]; + schr.s0.Read(ba, 0, ba.Length); + if (System.Text.Encoding.GetEncoding(1251).GetString(ba) != "RMPOINTNLL0") + { + schr.s0.Close(); + throw new System.IO.IOException("Unknown file format:\r\n" + fileName); + }; + ba = new byte[4]; + schr.s0.Read(ba, 0, 4); + schr.size = BitConverter.ToInt32(ba, 0); + + fs = new System.IO.FileStream(fileName + ".ll", System.IO.FileMode.Open); + block = new byte[8192]; + read = 0; + while ((read = fs.Read(block, 0, 8192)) > 0) + schr.s1.Write(block, 0, read); + fs.Close(); + + schr.s1.Position = 0; + ba = new byte[header1.Length]; + schr.s1.Read(ba, 0, ba.Length); + if (System.Text.Encoding.GetEncoding(1251).GetString(ba) != "RMPOINTNLL1") + { + schr.s0.Close(); + schr.s1.Close(); + throw new System.IO.IOException("Unknown file format:\r\n" + fileName + ".ll"); + }; + ba = new byte[4]; + schr.s1.Read(ba, 0, 4); + int size = BitConverter.ToInt32(ba, 0); + + return schr; + } + + public static PointNLLSearcher WorkWithDisk(string fileName) + { + PointNLLSearcher schr = new PointNLLSearcher(); + schr.s0 = new System.IO.FileStream(fileName, System.IO.FileMode.Open); + schr.s1 = new System.IO.FileStream(fileName + ".ll", System.IO.FileMode.Open); + + schr.s0.Position = 0; + byte[] ba = new byte[header0.Length]; + schr.s0.Read(ba, 0, ba.Length); + if (System.Text.Encoding.GetEncoding(1251).GetString(ba) != "RMPOINTNLL0") + { + schr.s0.Close(); + throw new System.IO.IOException("Unknown file format:\r\n" + fileName); + }; + ba = new byte[4]; + schr.s0.Read(ba, 0, 4); + schr.size = BitConverter.ToInt32(ba, 0); + + ba = new byte[header1.Length]; + schr.s1.Read(ba, 0, ba.Length); + if (System.Text.Encoding.GetEncoding(1251).GetString(ba) != "RMPOINTNLL1") + { + schr.s0.Close(); + schr.s1.Close(); + throw new System.IO.IOException("Unknown file format:\r\n" + fileName + ".ll"); + }; + ba = new byte[4]; + schr.s1.Read(ba, 0, 4); + int size = BitConverter.ToInt32(ba, 0); + + return schr; + } + + public void Close() + { + s0.Close(); + s1.Close(); + } + + /// + /// Èùåì òî÷êè â çàäàííîé çîíå + /// + /// + /// + /// + /// + /// âîçâðàùàòü ëè êîîðäèíàòû òî÷åê + /// Ìàêñèìàëüíîå ÷èñëî òî÷åê ê îòâåòå + /// + public PointNLL[] FindIn(float StartLat, float StartLon, float EndLat, float EndLon, bool getLatLon, int maxResults) + { + List res = new List(maxResults); + + s1.Position = header1.Length + 4; + byte[] buff = new byte[1020]; // 1020 bytes - 85 points // 8184 bytes - 682 points + int read = 0; + bool brk = false; + while ((read = s1.Read(buff,0,buff.Length)) > 0) + { + float lastlat = BitConverter.ToSingle(buff, read - 8); + if (lastlat < StartLat) continue; // goto next block if last lat < needed + + int offset = 0; + while (offset < read) + { + uint node = BitConverter.ToUInt32(buff, offset); + float lat = BitConverter.ToSingle(buff, offset += 4); + float lon = BitConverter.ToSingle(buff, offset += 4); + if (lat > EndLat) // stops find if lat > needed + { + brk = true; + break; + }; + // (lat <= EndLat) - already checked + if ((lat >= StartLat) && (lon >= StartLon) && (lon <= EndLon)) + { + res.Add(new PointNLL(node, lat, lon)); + if (res.Count == maxResults) // if found points count = maxResults then return + { + brk = true; + break; + }; + }; + offset += 4; + }; + if (brk) break; + }; + return res.ToArray(); + } + + /// + /// Èùåì òî÷êè â çàäàííîé çîíå + /// + /// + /// + /// + /// + /// âîçâðàùàòü ëè êîîðäèíàòû òî÷åê + /// + public PointNLL[] FindIn(float StartLat, float StartLon, float EndLat, float EndLon, bool getLatLon) + { + return FindIn(StartLat, StartLon, EndLat, EndLon, getLatLon, 1000); + } + + /// + /// Èùåì òî÷êè â ðàäèóñå + /// + /// Øèðîòà öåíòðà + /// Äîëãîòà öåíòðà + /// Ðàäèóñ â ìåòðàõ + /// Ïîëó÷àòü êîîðäèíàòû òî÷åê + /// Ïîëó÷àòü ðàññòîÿíèå äî òî÷êè + /// Ñîðòèðîâàòü òî÷êè ïî óäàëåííîñòè + /// + public PointNLL[] FindIn(float Lat, float Lon, float metersRadius, bool getLatLon, bool getDistance, bool sortByDist) + { + return FindIn(Lat, Lon, metersRadius, getLatLon, getDistance, sortByDist); + } + + /// + /// Èùåì òî÷êè â ðàäèóñå + /// + /// Øèðîòà öåíòðà + /// Äîëãîòà öåíòðà + /// Ðàäèóñ â ìåòðàõ + /// Ïîëó÷àòü êîîðäèíàòû òî÷åê + /// Ïîëó÷àòü ðàññòîÿíèå äî òî÷êè + /// Ñîðòèðîâàòü òî÷êè ïî óäàëåííîñòè + /// Ìàêñèìàëüíîå ÷èñëî òî÷åê â îòâåòå + /// + public PointNLLD[] FindIn(float Lat, float Lon, float metersRadius, bool getLatLon, bool getDistance, bool sortByDist, int maxResults) + { + float dLat = metersRadius / GetLengthMetersC(Lat, Lon, Lat + 1, Lon, false); + float dLon = metersRadius / GetLengthMetersC(Lat, Lon, Lat, Lon + 1, false); + PointNLL[] res = FindIn(Lat - dLat, Lon - dLon, Lat + dLat, Lon + dLon, getLatLon || getDistance, maxResults); + PointNLLD[] wd = new PointNLLD[res.Length]; + if (getDistance) + { + for (int i = 0; i < res.Length; i++) + wd[i] = new PointNLLD(res[i], GetLengthMetersC(Lat, Lon, res[i].lat, res[i].lon, false)); + if (sortByDist) + Array.Sort(wd, new PointNLLDSorter()); + } + else + { + for (int i = 0; i < res.Length; i++) + wd[i] = new PointNLLD(res[i]); + }; + return wd; + } + + /// + /// Find node with Coordinates + /// + /// Latitude + /// Longitude + /// Node Id + public uint FindNode(float Lat, float Lon) + { + PointNLL[] pnts = FindIn(Lat, Lon, Lat, Lon, false); + if (pnts.Length == 0) return 0; + else return pnts[0].node; + } + + /// + /// Ïîëó÷àåì êîîðäèíàòû òî÷åê + /// + /// Íîìåðà òî÷åê + /// + public PointNLL[] GetCoordinates(uint[] nodes) + { + PointNLL[] res = new PointNLL[nodes.Length]; + byte[] ba = new byte[8]; + for (int i = 0; i < nodes.Length; i++) + { + s0.Position = header0.Length + 4 + (nodes[i] - 1) * 8; + s0.Read(ba, 0, ba.Length); + float lat = BitConverter.ToSingle(ba, 0); + float lon = BitConverter.ToSingle(ba, 4); + res[i] = new PointNLL(nodes[i], lat, lon); + }; + return res; + } + + /// + /// Ïîëó÷àåì êîîðäèíàòû òî÷åê è ïóòü + /// ïî ïðÿìîé èç ïðåäûäóùåé òî÷êè â êàæäóþ + /// + /// + /// + public PointNLLD[] GetCoordinatesDist(uint[] nodes) + { + PointNLLD[] res = new PointNLLD[nodes.Length]; + byte[] ba = new byte[8]; + for (int i = 0; i < nodes.Length; i++) + { + s0.Position = header0.Length + 4 + (i - 1) * 8; + s0.Read(ba, 0, ba.Length); + float lat = BitConverter.ToSingle(ba, 0); + float lon = BitConverter.ToSingle(ba, 4); + float dist = i == 0 ? 0 : GetLengthMetersC(res[i-1].lat, res[i-1].lon, res[i].lat, res[i].lon, false); + res[i] = new PointNLLD(nodes[i], lat, lon, dist); + }; + return res; + } + + /// + /// Ðàññ÷èòûâàåì äëèíó â ìåòðàõ îò òî÷êè äî òî÷êè + /// + /// A lat + /// A lon + /// B lat + /// B lon + /// Radians or Degrees + /// length in meters + private static float GetLengthMetersC(double StartLat, double StartLong, double EndLat, double EndLong, bool radians) + { + double D2R = Math.PI / 180; + if (radians) D2R = 1; + double dDistance = Double.MinValue; + double dLat1InRad = StartLat * D2R; + double dLong1InRad = StartLong * D2R; + double dLat2InRad = EndLat * D2R; + double dLong2InRad = EndLong * D2R; + + double dLongitude = dLong2InRad - dLong1InRad; + double dLatitude = dLat2InRad - dLat1InRad; + + // Intermediate result a. + double a = Math.Pow(Math.Sin(dLatitude / 2.0), 2.0) + + Math.Cos(dLat1InRad) * Math.Cos(dLat2InRad) * + Math.Pow(Math.Sin(dLongitude / 2.0), 2.0); + + // Intermediate result c (great circle distance in Radians). + double c = 2.0 * Math.Atan2(Math.Sqrt(a), Math.Sqrt(1.0 - a)); + + const double kEarthRadiusKms = 6378137.0000; + dDistance = kEarthRadiusKms * c; + + return (float)Math.Round(dDistance); + } + + public class PointNLLDSorter : IComparer + { + public int Compare(PointNLLD a, PointNLLD b) + { + int res = a.dist.CompareTo(b.dist); + if (res == 0) res = a.node.CompareTo(b.node); + return res; + } + } + } +} diff --git a/SOLVER/TEST_MAP/Newtonsoft.Json.dll b/SOLVER/TEST_MAP/Newtonsoft.Json.dll new file mode 100644 index 0000000000000000000000000000000000000000..406f6475ea709f18140b1c098ea1752233e281c2 GIT binary patch literal 383488 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

t3}tc-ch*NmOaQt=_Zq*?UVpbO?=$w`ci@O_N6 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%0AE; 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%0DcfPeg5`%N7w46}YypI~NV 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%0Ah-eOn) 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 O`w1!5r^WcsIPfnM))+Pb literal 0 HcmV?d00001 diff --git a/SOLVER/TEST_MAP/PreSolvedRoutes.cs b/SOLVER/TEST_MAP/PreSolvedRoutes.cs new file mode 100644 index 0000000..4d6c5ed --- /dev/null +++ b/SOLVER/TEST_MAP/PreSolvedRoutes.cs @@ -0,0 +1,617 @@ +/* + * + * C# Class by Milok Zbrozek + * Ìîäóëè äëÿ ðàññ÷åòà ìàðøðóòîâ ïî ãðàôàì, + * èñïîëüçóÿ àëãîðèòì Ôëîéäà — Óîðøåëëà + * â ïàìÿòè è ÷åðåç äèñêîâûå ôàéëû + * Author: Milok Zbrozek + * + */ + +using System; +using System.IO; +using System.Drawing; +using System.Collections; +using System.Collections.Generic; +using System.Text; +using System.Xml; +using System.Xml.Serialization; + +namespace dkxce.PreSolvedRoutes +{ + /// + /// Êâàäðàòíàÿ ìàòðèöà ðàññòîÿíèé + /// äëÿ ïðåäâàðèòåëüíîãî ïðîñ÷åòà + /// + public class RMMatrix + { + /* + * rm.main file: + * 0x00 .... 0x07 : Header - RMHEADER + * 4 bytes (int) : Nodes + * 4 bytes (single): max distance between modes + * array of nodes: + * prev[uint]; 4 + * cost[float]; 4 + * dist[float]; 4 + * time[float]; 4 + */ + + /// + /// Çàãîëîâîê äëÿ ôàéëà ìàòðèöû + /// + private static byte[] rmheader = new byte[] { 0x52, 0x4d, 0x48, 0x45, 0x41, 0x44, 0x45, 0x52 }; + + /// + /// Èñï-ñÿ äëÿ string-->float + /// + private System.Globalization.CultureInfo ci = System.Globalization.CultureInfo.InstalledUICulture; + /// + /// Èñï-ñÿ äëÿ string-->float + /// + private System.Globalization.NumberFormatInfo ni; + public System.Globalization.NumberFormatInfo DotDelimiter { get { return ni; } } + + + /// + /// Ìàêñèìàëüíàÿ äëèíà ìåæäó óçëàìè + /// + private Single maxDistBetweenNodes = 0; + + /// + /// Ìàêñèìàëüíàÿ äëèíà ìåæäó óçëàìè + /// + public Single MaxDistanceBetweenNodes { get { return maxDistBetweenNodes; } } + + /// + /// Ìàêñèìàëüíàÿ îøèáêà äëÿ ðàñ÷åòîâ (èñï-ñÿ äëÿ îïðåäåëåíèÿ íàçàïîëíåííûõ êëåòîê) + /// + private const Single maxError = (Single)1e-6; + + /// + /// Ìàêñèìàëüíîå çíà÷åíèå îöåíêè, áîëüøå êîòîðîãî îöåíêà ÿâëÿåòñÿ áåñêîíå÷íîé + /// + private const Single maxValue = (Single)1e+30; + + /// + /// Ñìåùåíèå ïðåäûäóùåãî óçëà ïóòè â ìàòðèöå îòíîñèòåëüíî íà÷àëà ÿ÷åéêè + /// + private const byte prevOffset = 0; + + /// + /// Ñìåùåíèå îöåíêè â ìàòðèöå îòíîñèòåëüíî íà÷àëà ÿ÷åéêè + /// + private const byte costOffset = 4; + + /// + /// Ñìåùåíèå äèñòàíöèè â ìàòðèöå îòíîñèòåëüíî íà÷àëà ÿ÷åéêè + /// + private const byte distOffset = 4 + 4; + + /// + /// Ñìåùåíèå âðåìåíè â ìàòðèöå îòíîñèòåëüíî íà÷àëà ÿ÷åéêè + /// + private const byte timeOffset = 4 + 4 + 4; + + /// + /// Ðàçìåð ÿ÷åéêè ìàòðèöû + /// + private const uint recordLength = 4 + 4 + 4 + 4; // prev_node + cost + dist + time + private const uint max_nodes = 10000; // Max file size: 2GB + + /// + /// Ìàòðèöà + /// + private Stream matrixStream = null; + + /// + /// Ôàéë ìàòðèöû + /// + private string matrixFile = null; + + /// + ///  ïàìÿòè ëè ìàòðèöà èëè â ôàéëå + /// + private bool inMemory = false; + + /// + /// Åñëè ìàòðèöà óæå ïðîñ÷èòàíà è çàãðóæåíà äëÿ ðàáîòû, + /// à íå äëÿ äîáàâëåíèÿ ïóòåé + /// + private bool inReadMode = false; + + + /// + /// ×èñëî óçëîâ ìàòðèöû + /// + private int size = 0; + + /// + /// Matrix File Name + /// + public string FileName { get { return matrixFile; } } + + /// + /// Matrix In Memory Or Not + /// + public bool InMemory { get { return inMemory; } } + /// + /// Åñëè ìàòðèöà óæå ïðîñ÷èòàíà è çàãðóæåíà äëÿ ðàáîòû, + /// à íå äëÿ äîáàâëåíèÿ ïóòåé + /// + public bool InReadMode { get { return inReadMode; } } + + /// + /// Nodes in Matrix + /// + public int NodesCount { get { return this.size; } } + + /// + /// PRIVATE CREATE ONLY + /// + private RMMatrix() + { + ni = (System.Globalization.NumberFormatInfo)ci.NumberFormat.Clone(); + ni.NumberDecimalSeparator = "."; + } + + /// + /// Ñîçäàåì ìàòðèöó â ôàéëå(àõ) + /// + /// ×èñëî óçëîâ ìàòðèöû + /// Ïóòü ê ôàéëàì + /// + public static RMMatrix CreateOnDisk(int nodes, string fileName) + { + if (nodes > max_nodes) throw new OverflowException("Maximum nodes count is " + max_nodes.ToString()); + + RMMatrix rm = new RMMatrix(); + rm.inMemory = false; + rm.matrixFile = fileName; + rm.size = nodes; + rm.matrixStream = new FileStream(fileName, FileMode.Create, FileAccess.ReadWrite); + rm.matrixStream.SetLength(rm.size * rm.size * recordLength + rmheader.Length + 8); // header + count + max_dist + data + rm.matrixStream.Write(rmheader, 0, rmheader.Length); + byte[] ba = BitConverter.GetBytes(nodes); + rm.matrixStream.Write(ba, 0, ba.Length); + ba = BitConverter.GetBytes(float.MaxValue); + rm.matrixStream.Write(ba, 0, ba.Length); + rm.matrixStream.Flush(); + return rm; + } + + /// + /// Ñîçäàåì ìàòðèöó â ïàìÿòè + /// + /// ×èñëî óçëîâ ìàòðèöû + /// + public static RMMatrix CreateInMemory(int nodes) + { + if (nodes > max_nodes) throw new OverflowException("Maximum nodes count is " + max_nodes.ToString()); + + RMMatrix rm = new RMMatrix(); + rm.inMemory = true; + rm.matrixFile = ""; + rm.size = nodes; + rm.matrixStream = new MemoryStream(); + rm.matrixStream.SetLength(rm.size * rm.size * recordLength + rmheader.Length + 8); // header + count + max_dist + data + rm.matrixStream.Write(rmheader, 0, rmheader.Length); + byte[] ba = BitConverter.GetBytes(nodes); + rm.matrixStream.Write(ba, 0, ba.Length); + ba = BitConverter.GetBytes(float.MaxValue); + rm.matrixStream.Write(ba, 0, ba.Length); + rm.matrixStream.Flush(); + return rm; + } + + /// + /// Îòêðûâàåì ôàéëû äëÿ ðàáîòû ñ ìàòðèöåé áåç çàãðóçêè â ïàìÿòü + /// + /// + /// + public static RMMatrix WorkWithDisk(string fileName) + { + RMMatrix rm = new RMMatrix(); + rm.inReadMode = true; + rm.matrixStream = new FileStream(fileName, FileMode.Open, FileAccess.Read); + byte[] ba = new byte[rmheader.Length]; + rm.matrixStream.Read(ba, 0, ba.Length); + if (System.Text.Encoding.GetEncoding(1251).GetString(ba) != "RMHEADER") + { + rm.matrixStream.Close(); + throw new IOException("Unknown file format:\r\n" + fileName); + }; + ba = new byte[4]; + rm.matrixStream.Read(ba, 0, ba.Length); + rm.size = BitConverter.ToInt32(ba, 0); + rm.matrixStream.Read(ba, 0, ba.Length); + rm.maxDistBetweenNodes = BitConverter.ToSingle(ba, 0); + rm.inMemory = false; + rm.matrixFile = fileName; + + return rm; + } + + /// + /// Çàãðóæàåì ìàòðèöó èç ôàéëà â ïàìÿòü + /// + /// + /// + public static RMMatrix LoadToMemory(string fileName) + { + RMMatrix rm = new RMMatrix(); + rm.inReadMode = true; + rm.matrixStream = new MemoryStream(); + + FileStream fs = new FileStream(fileName, FileMode.Open, FileAccess.Read); + int read = 0; + byte[] ba = new byte[8192]; + while ((read = fs.Read(ba, 0, ba.Length)) > 0) + { + rm.matrixStream.Write(ba, 0, read); + rm.matrixStream.Flush(); + }; + fs.Close(); + + rm.matrixStream.Position = 0; + ba = new byte[rmheader.Length]; + rm.matrixStream.Read(ba, 0, ba.Length); + if (System.Text.Encoding.GetEncoding(1251).GetString(ba) != "RMHEADER") + { + rm.matrixStream.Close(); + throw new IOException("Unknown file format:\r\n" + fileName); + }; + ba = new byte[4]; + rm.matrixStream.Read(ba, 0, ba.Length); + rm.size = BitConverter.ToInt32(ba, 0); + rm.matrixStream.Read(ba, 0, ba.Length); + rm.maxDistBetweenNodes = BitConverter.ToSingle(ba, 0); + rm.inMemory = true; + rm.matrixFile = fileName; + + return rm; + } + + /// + /// Óñòàíàâëèâàåì ïðåäøåñòâóþùóþ òî÷êó next ïóòè èç X â Y + /// + /// íà÷àëüíàÿ òî÷êà + /// êîíå÷íàÿ òî÷êà + /// êîíå÷íàÿ òî÷êà - 1 + private void SetPrev(uint x, uint y, uint prev) + { + if (x == y) return; + + matrixStream.Position = rmheader.Length + 8 + (x - 1) * size * recordLength + (y - 1) * recordLength + prevOffset; + byte[] arr = BitConverter.GetBytes(prev); + matrixStream.Write(arr, 0, arr.Length); + } + + /// + /// Ïîëó÷àåì ïðåäøåñòâóþùóþ òî÷êó ïóòè èç X â Y + /// + /// íà÷àëüíàÿ òî÷êà + /// êîíå÷íàÿ òî÷êà + /// êîíå÷íàÿ òî÷êà - 1 + private uint GetPrev(uint x, uint y) + { + if (x == 0) return 0; + if (y == 0) return 0; + if (x == y) return y; + + matrixStream.Position = rmheader.Length + 8 + (x - 1) * size * recordLength + (y - 1) * recordLength + prevOffset; + byte[] arr = new byte[4]; + matrixStream.Read(arr, 0, 4); + return (uint)BitConverter.ToUInt32(arr, 0); + } + + /// + /// Ïîëó÷àåì ðàññòîÿíèå èç òî÷êè X â Y + /// + /// íà÷àëüíàÿ òî÷êà + /// êîíå÷íàÿ òî÷êà + /// Ðàññòîÿíèå + public Single GetRouteDist(uint x, uint y) + { + if (x == 0) return 0; + if (y == 0) return 0; + if (x == y) return 0; + + matrixStream.Position = rmheader.Length + 8 + (x - 1) * size * recordLength + (y - 1) * recordLength + distOffset; + byte[] arr = new byte[4]; + matrixStream.Read(arr, 0, 4); + Single s = BitConverter.ToSingle(arr, 0); + return s < maxError ? Single.MaxValue : s; + } + + /// + /// Óñòàíàâëèâàåì ðàññòîÿíèå èç òî÷êè X â Y + /// + /// íà÷àëüíàÿ òî÷êà + /// êîíå÷íàÿ òî÷êà + /// Ðàññòîÿíèå + private void SetDist(uint x, uint y, Single distance) + { + matrixStream.Position = rmheader.Length + 8 + (x - 1) * size * recordLength + (y - 1) * recordLength + distOffset; + byte[] arr = BitConverter.GetBytes(distance); + matrixStream.Write(arr, 0, 4); + } + + /// + /// Ïîëó÷àåì âðåìÿ äâèæåíèÿ èç òî÷êè X â Y + /// + /// íà÷àëüíàÿ òî÷êà + /// êîíå÷íàÿ òî÷êà + /// Âðåìÿ äâèæåíèÿ + public Single GetRouteTime(uint x, uint y) + { + if (x == 0) return 0; + if (y == 0) return 0; + if (x == y) return 0; + + matrixStream.Position = rmheader.Length + 8 + (x - 1) * size * recordLength + (y - 1) * recordLength + timeOffset; + byte[] arr = new byte[4]; + matrixStream.Read(arr, 0, 4); + Single d = BitConverter.ToSingle(arr, 0); + return d < maxError ? Single.MaxValue : d; + } + + // + /// Óñòàíàâëèâàåì âðåìÿ äâèæåíèÿ èç òî÷êè X â Y + /// + /// íà÷àëüíàÿ òî÷êà + /// êîíå÷íàÿ òî÷êà + /// Âðåìÿ äâèæåíèÿ + private void SetTime(uint x, uint y, Single time) + { + matrixStream.Position = rmheader.Length + 8 + (x - 1) * size * recordLength + (y - 1) * recordLength + timeOffset; + byte[] arr = BitConverter.GetBytes(time); + matrixStream.Write(arr, 0, 4); + } + + /// + /// Ïîëó÷àåì îöåíêó ïóòè + /// + /// íà÷àëüíàÿ òî÷êà + /// êîíå÷íàÿ òî÷êà + /// Îöåíêà + private Single GetCost(uint x, uint y) + { + if (x == 0) return Single.MaxValue; + if (y == 0) return Single.MaxValue; + if (x == y) return 0; + + matrixStream.Position = rmheader.Length + 8 + (x - 1) * size * recordLength + (y - 1) * recordLength + costOffset; + byte[] arr = new byte[4]; + matrixStream.Read(arr, 0, 4); + Single d = BitConverter.ToSingle(arr, 0); + return d < maxError ? Single.MaxValue : d; + } + + /// + /// Îöåíêà ïóòè èç X â Y + /// + /// íà÷àëüíàÿ òî÷êà + /// êîíå÷íàÿ òî÷êà + /// Îöåíêà + private void SetCost(uint x, uint y, Single cost) + { + if (x == 0) return; + if (y == 0) return; + if (x == y) return; + + matrixStream.Position = rmheader.Length + 8 + (x - 1) * size * recordLength + (y - 1) * recordLength + costOffset; + byte[] arr = BitConverter.GetBytes(cost); + matrixStream.Write(arr, 0, arr.Length); + } + + /// + /// Äîáàâëÿåì ïóòü â ìàòðèöó èç òî÷êè X â Y + /// + /// íà÷àëüíàÿ òî÷êà + /// êîíå÷íàÿ òî÷êà + /// îöåíêà ïóòè + /// äëèíà ïóòè + /// âðåìÿ äâèæåíèÿ â ïóòè + public void AddWay(uint x, uint y, Single cost, Single dist, Single time) + { + if (inReadMode) throw new IOException("Matrix in read-only mode"); + + if (dist > maxDistBetweenNodes) maxDistBetweenNodes = dist; + + SetCost(x, y, cost); + SetPrev(x, y, x); + SetDist(x, y, dist); + SetTime(x, y, time); + + matrixStream.Flush(); + } + + /// + /// Ðàñ÷åò ìàòðèöû ïî àëãîðèòìó Ôëîéäà — Óîðøåëëà + /// (minimize by cost) + /// + public void Solve() + { + Console.WriteLine("Begin Solve..."); + Console.WriteLine("Initialize..."); + for (uint k = 1; k <= size; k++) + { + for (uint i = 1; i <= size; i++) + { + float ik = GetCost(i, k); + for (uint j = 1; j <= size; j++) + { + float ikj = ik + GetCost(k, j); + if (ikj < GetCost(i, j)) + { + SetCost(i, j, ikj); + SetPrev(i, j, k); + SetDist(i, j, GetRouteDist(i, k) + GetRouteDist(k, j)); + SetTime(i, j, GetRouteTime(i, k) + GetRouteTime(k, j)); + }; + DoProgress(k, i, j); + }; + }; + }; + matrixStream.Flush(); + Console.WriteLine("Done"); + } + + + /// + /// Èíäèêàöèÿ ïðîöåññà àíàëèçà ìàòðèöû + /// + /// + /// + /// + private void DoProgress(uint k, uint i, uint j) + { + if (i != last_i) + { + last_i = i; + Console.SetCursorPosition(0, Console.CursorTop - 1); + Console.WriteLine(String.Format("Optimize Route: {0:00000}->-{1:00000}", k, i, j)); + }; + } + private uint last_i = 0; + + /// + /// Âîâçðàùàåì âåêòîð ïðîìåæóòî÷íûõ óçëîâ èç òî÷êè X â Y + /// + /// íà÷àëüíàÿ òî÷êà + /// êîíå÷íàÿ òî÷êà + /// + public uint[] GetRouteWay(uint x, uint y) + { + if (x == 0) return null; // NO WAY + if (y == 0) return null; // NO WAY + if (x == y) return new uint[0]; // ALREADY + if (GetCost(x, y) == 0) return new uint[0]; // ALREADY + + uint intermediate = y; + List arr = new List(); + while (((intermediate = GetPrev(x,intermediate)) > 0) && (intermediate != x)) + arr.Add(intermediate); + uint[] a = arr.ToArray(); + Array.Reverse(a); + return a; + } + + /// + /// Âîçâðàùàåì îöåíêó ïóòè èç òî÷êè X â Y + /// + /// íà÷àëüíàÿ òî÷êà + /// êîíå÷íàÿ òî÷êà + /// Îöåíêó + public Single GetRouteCost(uint x, uint y) + { + return GetCost(x, y); + } + + /// + /// Åñëè ìàòðèöà â ïàìÿòè, òî ñîõðàíÿåì åå â ôàéë + /// + /// + public void SaveToFile(string fileName) + { + if (!inMemory) return; + this.matrixFile = fileName; + + FileStream fs = new FileStream(fileName, FileMode.Create); + byte[] ba = BitConverter.GetBytes(size); + fs.Write(rmheader, 0, rmheader.Length); + fs.Write(ba, 0, ba.Length); + ba = BitConverter.GetBytes(maxDistBetweenNodes); + fs.Write(ba, 0, ba.Length); + int read = 0; + ba = new byte[8192]; + matrixStream.Position = rmheader.Length + 8; + while ((read = this.matrixStream.Read(ba, 0, ba.Length)) > 0) + { + fs.Write(ba, 0, read); + fs.Flush(); + }; + fs.Flush(); + fs.Close(); + } + + /// + /// Äëÿ îñâîáîæäåíèÿ âñåõ ðåñóðñîâ + /// íåîáõîäèìî âûçûâàòü ïîñëå êîíöà âñåé ðàáîòû ñ ìàòðèöåé + /// + public void Close() + { + matrixStream.Position = rmheader.Length + 8; + byte[] ba = BitConverter.GetBytes(maxDistBetweenNodes); + matrixStream.Write(ba, 0, ba.Length); + matrixStream.Flush(); + + matrixStream.Close(); + matrixStream = null; + + inMemory = false; + inReadMode = true; + } + + ~RMMatrix() + { + if (matrixStream != null) Close(); + } + + /// + /// Âûâîäèò íàãëÿäíóþ ìàòðèöó â òåêñòîâûé ôàéë + /// (ðåêîìåíäóåòñÿ òîëüêî äëÿ íåáîëüøèõ ìàòðèö) + /// + /// Ïîëíûé ïóòü ê ôàéëó + public void SaveToTextFile(string fn) + { + FileStream fout = new FileStream(fn, FileMode.Create); + StreamWriter sw = new StreamWriter(fout); + sw.Write("COST;"); + for (uint y = 1; y <= size; y++) sw.Write(y.ToString() + ";"); + sw.WriteLine(); + for (uint x = 1; x <= size; x++) + { + sw.Write(x.ToString() + ";"); + for (uint y = 1; y <= size; y++) + if (GetCost(x, y) > maxValue) + sw.Write(". . .;"); + else + sw.Write(GetPrev(x, y).ToString() + "(" + GetCost(x, y).ToString("0.000").Replace(",", ".") + ") ;"); + sw.WriteLine(); + }; + sw.WriteLine(); + sw.Write("DIST;"); + for (uint y = 1; y <= size; y++) sw.Write(y.ToString() + ";"); + sw.WriteLine(); + for (uint x = 1; x <= size; x++) + { + sw.Write(x.ToString() + ";"); + for (uint y = 1; y <= size; y++) + if (GetCost(x, y) > maxValue) + sw.Write(". . .;"); + else + sw.Write(GetPrev(x, y).ToString() + "(" + GetRouteDist(x, y).ToString("0.000").Replace(",", ".") + ") ;"); + sw.WriteLine(); + }; + sw.WriteLine(); + sw.Write("TIME;"); + for (uint y = 1; y <= size; y++) sw.Write(y.ToString() + ";"); + sw.WriteLine(); + for (uint x = 1; x <= size; x++) + { + sw.Write(x.ToString() + ";"); + for (uint y = 1; y <= size; y++) + if (GetCost(x, y) > maxValue) + sw.Write(". . .;"); + else + sw.Write(GetPrev(x, y).ToString() + "(" + GetRouteTime(x, y).ToString("0.000").Replace(",", ".") + ") ;"); + sw.WriteLine(); + }; + sw.WriteLine(); + sw.Flush(); + fout.Close(); + } + } +} diff --git a/SOLVER/TEST_MAP/Program.cs b/SOLVER/TEST_MAP/Program.cs new file mode 100644 index 0000000..435d90f --- /dev/null +++ b/SOLVER/TEST_MAP/Program.cs @@ -0,0 +1,20 @@ +using System; +using System.Collections.Generic; +using System.Windows.Forms; + +namespace TEST_MAP +{ + static class Program + { + /// + /// The main entry point for the application. + /// + [STAThread] + static void Main() + { + Application.EnableVisualStyles(); + Application.SetCompatibleTextRenderingDefault(false); + Application.Run(new TestForm()); + } + } +} \ No newline at end of file diff --git a/SOLVER/TEST_MAP/Properties/AssemblyInfo.cs b/SOLVER/TEST_MAP/Properties/AssemblyInfo.cs new file mode 100644 index 0000000..ddd5dd5 --- /dev/null +++ b/SOLVER/TEST_MAP/Properties/AssemblyInfo.cs @@ -0,0 +1,33 @@ +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +[assembly: AssemblyTitle("TEST_MAP")] +[assembly: AssemblyDescription("Проверка ÑервиÑа поÑика маршрута Ñ ÐºÐ°Ñ€Ñ‚Ð¾Ð¹")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("Milok Zbrozek ")] +[assembly: AssemblyProduct("TEST_MAP")] +[assembly: AssemblyCopyright("Copyright © Milok Zbrozek 2021")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// Setting ComVisible to false makes the types in this assembly not visible +// to COM components. If you need to access a type in this assembly from +// COM, set the ComVisible attribute to true on that type. +[assembly: ComVisible(false)] + +// The following GUID is for the ID of the typelib if this project is exposed to COM +[assembly: Guid("d1c0cdfc-6b55-4416-9370-19cbfd5d76b0")] + +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +[assembly: AssemblyVersion("21.12.21.3")] +[assembly: AssemblyFileVersion("21.12.21.3")] diff --git a/SOLVER/TEST_MAP/Properties/Resources.Designer.cs b/SOLVER/TEST_MAP/Properties/Resources.Designer.cs new file mode 100644 index 0000000..c55d3bb --- /dev/null +++ b/SOLVER/TEST_MAP/Properties/Resources.Designer.cs @@ -0,0 +1,63 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version:2.0.50727.3053 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +namespace mapRouteTest.Properties { + using System; + + + /// + /// A strongly-typed resource class, for looking up localized strings, etc. + /// + // This class was auto-generated by the StronglyTypedResourceBuilder + // class via a tool like ResGen or Visual Studio. + // To add or remove a member, edit your .ResX file then rerun ResGen + // with the /str option, or rebuild your VS project. + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "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() { + } + + /// + /// Returns the cached ResourceManager instance used by this class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Resources.ResourceManager ResourceManager { + get { + if (object.ReferenceEquals(resourceMan, null)) { + global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("mapRouteTest.Properties.Resources", typeof(Resources).Assembly); + resourceMan = temp; + } + return resourceMan; + } + } + + /// + /// Overrides the current thread's CurrentUICulture property for all + /// resource lookups using this strongly typed resource class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Globalization.CultureInfo Culture { + get { + return resourceCulture; + } + set { + resourceCulture = value; + } + } + } +} diff --git a/SOLVER/TEST_MAP/Properties/Resources.resx b/SOLVER/TEST_MAP/Properties/Resources.resx new file mode 100644 index 0000000..af7dbeb --- /dev/null +++ b/SOLVER/TEST_MAP/Properties/Resources.resx @@ -0,0 +1,117 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 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 + + \ No newline at end of file diff --git a/SOLVER/TEST_MAP/Properties/Settings.Designer.cs b/SOLVER/TEST_MAP/Properties/Settings.Designer.cs new file mode 100644 index 0000000..5932535 --- /dev/null +++ b/SOLVER/TEST_MAP/Properties/Settings.Designer.cs @@ -0,0 +1,26 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version:2.0.50727.3053 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +namespace mapRouteTest.Properties { + + + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "8.0.0.0")] + internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase { + + private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings()))); + + public static Settings Default { + get { + return defaultInstance; + } + } + } +} diff --git a/SOLVER/TEST_MAP/Properties/Settings.settings b/SOLVER/TEST_MAP/Properties/Settings.settings new file mode 100644 index 0000000..3964565 --- /dev/null +++ b/SOLVER/TEST_MAP/Properties/Settings.settings @@ -0,0 +1,7 @@ + + + + + + + diff --git a/SOLVER/TEST_MAP/RealTimeRoutes.cs b/SOLVER/TEST_MAP/RealTimeRoutes.cs new file mode 100644 index 0000000..8ae51f5 --- /dev/null +++ b/SOLVER/TEST_MAP/RealTimeRoutes.cs @@ -0,0 +1,4571 @@ +/* + * C# Class by Milok Zbrozek + * Ìîäóëè äëÿ ðàññ÷åòà ìàðøðóòîâ ïî ãðàôàì, + * èñïîëüçóÿ àëãîðèòìû Äåéêñòðû è A* + * â ïàìÿòè è ÷åðåç äèñêîâûå ôàéëû, + * ñ ïîääåðæêîé ðàñ÷åòà ñ ó÷åòîì òðàôèêà + * Author: Milok Zbrozek + * Âåðñèÿ: 13305C5 + */ + +using System; +using System.IO; +using System.Collections; +using System.Collections.Generic; +using System.Text; +using System.Xml; +using System.Xml.Serialization; + +namespace dkxce.RealTimeRoutes +{ + /* + * FILES IN GRAPH: + * lines - region.lines.bin - LINES info (node1,node2,segments,oneway) + * - region.lines.id - LINK_ID for LINES + * segm - region.segments.bin - LINE SEGMENTS + * graph - region.graph.bin - GRAPH NODE INFOS + * - region.graph.bin.in - INDEX FOR NODE POS IN GRAPH + * - region.graph[r].bin - GRAPH NODE INFOS (FOR INVERSE SOLVE ALGORITHM) + * - region.graph[r].bin.in - INDEX FOR NODE POS IN GRAPH (FOR INVERSE SOLVE ALGORITHM) + * - region.graph.geo - NODES LAT LON + * - region.graph.geo.ll - INDEXED LAT LON OF NODES + * ways - region.rgnodes.xml - èíôîðìàöèÿ î òî÷êàõ ìåæðàéîííûõ ìàðøðóòîâ + * info - region.analyze.txt - èíôîðìàöèÿ îá îøèáêàõ â óçëàõ + * + * + * lines file: (lines.bin) + * RMLINES, count[int], + * RECORDS: 2 + 4 + 1 + 4 + 4 = 15 + * segments_count[word]; 2 + * pos[int]; 4 + * oneway[byte]; 1 + * node1[uint]; 4 + * node2[uint]; 4 + * + * lines segments file: (segments.bin) + * RMSEGMENTS, count[int], + * RECORDS: 4 + 2 + 4 + 4 + 4 + 4 + 4 + 4 + 7 = 30 bytes + * line_no[uint]; 4 + * segment[word]; 2 + * lat0[single]; 4 + * lon0[single]; 4 + * lat1[single]; 4 + * lon1[single]; 4 + * k[single]; 4 + * b[single]; 4 + * + * Lines link ids (lines.id) + * RMLINKIDS, count[int], // lines count + * array[1..LINES] of LINK_ID[int] + * + * * + * * Lines tmc file (lines.tmc) // creates for making the traffic.costs & traffic.times files) + * * RMTMC, count[int] // lines count + * * array[1..LINES] of + * * reversed[byte]; 1 + * * tmc_code[ushort]; 2 + * * + * * Lines Costs External File (Traffic) -- not impemented yet // ôàéë ïîïðàâîê îöåíêè äëÿ ðàñ÷åòà ìàðøðóòîâ (òðàôèê) + * * (traffic.costs & traffic.times) -- äîëæåí ñîçäàâàòüñÿ âî âíåøíåì ïðèëîæåíèè, àíàëèçèðóÿ ôàéë lines.tmc + * * RMEXTCOSTS, count[int] // lines count + * * array[1..LINES] of + * * normal_cost[single]; 4 + * * inverse_cost[single]; 4 + * * + * + * Graph file: (graph.bin) + * RMGRAF2, count[int], max length between nodes[single] + * RECORDS: + * next_nodes_count[byte]; 1 + * IF(count>0) array[0..count-1] of next_nodes_count elements + * ARRAY ELEMENT: 4 + 4 + 4 + 4 + 4 = 21 + * next[uint]; 4 + * cost[single]; 4 + * dist[single]; 4 + * time[single]: 4 + * line[uint]: 4 + * inverseDirection[byte]: 1 + * + * Graph Index: (graph.bin.in) + * RMINDEX, count[int], + * RECORDS: + * pos_in_graph_file[uint]; 4 + * + * Graph geo: (graph.geo) + * RMPOINTNLL0, count[int] + * RECORDS: 4 + 4 = 8 + * lat[float]; 4 + * lon[float]; 4 + * + * Graph geo lat lon: (graph.geo.ll) + * RMPOINTNLL1, count[int] + * RECORDS: 4 + 4 + 4 = 12 + * node[uint];4 + * lat[float];4 + * lon[float];4 + * + */ + + /// + /// Òî÷êà XY + /// + [Serializable] + public struct PointF + { + [XmlAttribute("x")] + public float X; + [XmlAttribute("y")] + public float Y; + public PointF(float X, float Y) + { + this.X = X; + this.Y = Y; + } + public override string ToString() + { + return "X = " + X.ToString() + " Y = " + Y.ToString(); + } + public float Lat { get { return Y; } } + public float Lon { get { return X; } } + } + + /// + /// Òî÷êà XY ñ ïðèâÿçêîé ê ëèíèè è óçëó + /// (èñï-ñÿ äëÿ îïèñàíèÿ ìàðøðóòà) + /// + [Serializable] + public struct PointFL + { + [XmlAttribute("x")] + public float X; + [XmlAttribute("y")] + public float Y; + /// + /// Íîìåð ëèíèè, íà êîòîðîì íàõîäèòñÿ òî÷êà + /// + [XmlAttribute("l")] + public uint line; + /// + /// Íîìåð óçëà, ñ êîòîðîãî íà÷èíàåòñÿ ïîëèëèíèÿ + /// (óêàçûâàåò íà ñúåçä ñ îäíîé ëèíèè íà äðóãóþ) + /// + [XmlAttribute("n")] + public uint node; + /// + /// Ñîäàíèå òî÷êè ñ ïðèâÿçêîé + /// + /// Êîîðäèíàòû òî÷êè + /// Íîìåð ëèíèè + /// Íîìåð óçëà + public PointFL(PointF point, uint node, uint line) + { + this.X = point.X; + this.Y = point.Y; + this.node = node; + this.line = line; + } + public override string ToString() + { + return "X = " + X.ToString()+"; Y = "+Y.ToString()+ "; N = " + node.ToString() + "; L = " + line.ToString(); + } + public float Lat { get { return Y; } } + public float Lon { get { return X; } } + } + + /// + /// Ðåçóëüòàò ðàñ÷åòà ìàðøðóòà + /// + [Serializable] + public struct RouteResult + { + /// + /// Îöåíêà ìàðøðóòà + /// + public float cost; + /// + /// Äëèíà ìàðøðóòà (ì) + /// + public float length; + /// + /// Âðåìÿ â ïóòè (ì) + /// + public float time; + /// + /// Óçåë ñòàðòà + /// + public uint nodeStart; + /// + /// Ïðîìåæóòî÷íûå óçëû + /// + [XmlArrayItem("n")] + public uint[] nodes; + /// + /// Óçåë ôèíèøà + /// + public uint nodeEnd; + /// + /// Ëèíèè äâèæåíèÿ (ðåáðà) + /// + [XmlArrayItem("l")] + public uint[] lines; + /// + /// Âåêòîð ïåðåìåùåíèÿ + /// + [XmlArrayItem("p")] + public PointFL[] vector; + /// + /// Óðåçàí ëè ðàçâîðîò âíà÷àëå + /// + public bool shrinkStart; + /// + /// Óðåçàí ëè ðàçâîðîò â êîíöå + /// + public bool shrinkEnd; + } + + /// + /// Ðåçóëüòàò ðàñ÷åòà ìàðøðóòà âìåñòå ñ + /// îöåíêàìè, ðàññòîÿíèÿìè è âðåìåíàìè äëÿ ñîõðàíåíèÿ + /// + [Serializable] + public struct RouteResultStored + { + /// + /// Ìàðøðóò + /// + [XmlElement("route")] + public RouteResult route; + /// + /// Ðàññòîÿíèÿ äëÿ âñåõ óçëîâ ìàðøðóòà, + /// âêëþ÷àÿ ïåðâûé è ïîñëåäíèé + /// + [XmlArray("distances")] + [XmlArrayItem("d")] + public float[] distances; + /// + /// Âðåìåíà ïðîõîæäåíèÿ âñåõ óçëîâ ìàðøðóòà, + /// âêëþ÷àÿ ïåðâûé è ïîñëåäíèé + /// + [XmlArray("times")] + [XmlArrayItem("t")] + public float[] times; + /// + /// Îöåíêè ïðîõîæäåíèÿ âñåõ óçëîâ ìàðøðóòà, + /// âêëþ÷àÿ ïåðâûé è ïîñëåäíèé + /// + [XmlArray("costs")] + [XmlArrayItem("c")] + public float[] costs; + + public RouteResultStored(RouteResult route, float[] distances, float[] times, float[] costs) + { + this.route = route; + this.distances = distances; + this.times = times; + this.costs = costs; + } + } + + /// + /// Óçåë ãðàôà + /// + public class TNode + { + /// + /// Èäåíòèôèêàòîð (íîìåð óçëà) (íóìåðàöèÿ ñ 1) + /// + public uint node; + /// + /// Øèðîòà â ãðàä + /// + public float lat; + /// + /// Äîëãîòà â ãðàä + /// + public float lon; + /// + /// Èñõîäÿùèå ñâÿçè (ðåáðà) + /// + public List links = new List(); + /// + /// Âõîäÿùèå ñâÿçè (ðåáðà) + /// + public List rlinks = new List(); + + /// + /// Ñîçäàåì óçåë + /// + /// Íîìåð + /// Øèðîòà + /// Äîëãîòà + public TNode(uint node, float lat, float lon) + { + this.node = node; + this.lat = lat; + this.lon = lon; + } + + /// + /// ×èñëî âûõîäÿùèõ ñâÿçåé (ðåáåð) + /// + public int Outs { get { return links.Count; } } + + /// + /// ×èñëî âõîäÿùèõ ñâÿçåé (ðåáåð) + /// + public int Ins { get { return rlinks.Count; } } + + /// + /// N Y X I O + /// + /// + public override string ToString() + { + return "{N" + node + "; Y" + lat.ToString() + " X" + lon.ToString() + " I" + Ins.ToString() + " O"+Outs.ToString() + "}"; + } + + /// + /// Äîáàâëÿåì èñõîäÿùóþ ñâÿçü (ðåáðî) + /// + /// óçåë + /// îöåíêà + /// ðàññòîÿíèå (ì) + /// âðåìÿ (ìèí) + /// ëèíèÿ + /// ëèíèÿ â îáðàòíóþ ñòîðîíó? + public void AddLink(uint node, float cost, float dist, float time, uint line, bool line_rev) + { + this.links.Add(new TLink(node, cost, dist, time, line, line_rev)); + } + + /// + /// Äîáàâëÿåì âõîäÿùóþ ñâÿçü (ðåáðî) + /// + /// óçåë + /// îöåíêà + /// ðàññòîÿíèå (ì) + /// âðåìÿ (ìèí) + /// ëèíèÿ + /// ëèíèÿ â îáðàòíóþ ñòîðîíó? + public void AddRLink(uint node, float cost, float dist, float time, uint line, bool line_rev) + { + this.rlinks.Add(new TLink(node, cost, dist, time, line, line_rev)); + } + + /// + /// Ñîðòèðîâùèê óçëîâ (äëÿ èíäåêñàöèè) + /// + public class Sorter : IComparer + { + private byte sortBy = 0; + private Sorter(byte sortBy) { this.sortBy = sortBy; } + + /// + /// Ñîðòèðóåì ïî èäåíòèôèêàòîðó + /// + /// + public static Sorter SortByNode() { return new Sorter(0); } + + /// + /// Ñîðòèðóåì ïî êîîðäèíàòàì + /// + /// + public static Sorter SortByLL() { return new Sorter(1); } + + /// + /// Ñîðòèðóåì äâà óýåëåìíòà ìàññèâà + /// + /// 1-ûé ýëåìåíò + /// 2-îé ýëåìåíò + /// + public int Compare(TNode a, TNode b) + { + if (sortBy == 0) return a.node.CompareTo(b.node); + + int res = a.lat.CompareTo(b.lat); + if (res == 0) res = a.lon.CompareTo(b.lon); + if (res == 0) res = a.node.CompareTo(b.node); + return res; + } + } + } + + /// + /// Óçåë ñ èíôîðìàöèåé î ðàññòîÿíèè + /// îò óêàçàííîé òî÷êè äî òåêóùåé + /// + public class TNodeD : TNode + { + /// + /// Ðàññòîÿíèå (ì) + /// + public float dist; + + public TNodeD(uint node, float lat, float lon, float dist) + : base(node, lat, lon) + { + this.dist = dist; + } + + public TNodeD(TNode node) + : base(node.node, node.lat, node.lon) + { + this.dist = 0; + } + + public TNodeD(TNode node, float dist) + : base(node.node, node.lat, node.lon) + { + this.dist = dist; + } + + public class DSorter : IComparer + { + public int Compare(TNodeD a, TNodeD b) + { + int res = a.dist.CompareTo(b.dist); + if (res == 0) res = a.node.CompareTo(b.node); + return res; + } + } + } + + /// + /// Ñâÿçü ìåæäó óçëàìè (ðåáðî) + /// + public class TLink + { + /// + /// óçåë ñâÿçè + /// + public uint node; + + /// + /// îöåíêà + /// + public float cost; + + /// + /// ðàññòîÿíèå (ì) + /// + public float dist; + + /// + /// âðåìÿ (ìèí) + /// + public float time; + + /// + /// ëèíèÿ + /// + public uint line; + + /// + /// ÷òîáû äîáðàòüñÿ â óêàçàííóþ òî÷êó íóæíî + /// ïðîåõàòü ïî ëèíèè â îáðàòíóþ ñòîðîíó + /// + public bool inverse_dir; + + /// + /// Ñîçäàåì ñâÿçü + /// + /// ñâÿçóþùèé óçåë + /// îöåíêà ïåðåäâèæåíèÿ + /// ðàññòîÿíèå â ì + /// âðåìÿ â ìèí + /// íîìåð ëèíèè + /// â îáðàòíîì íàïðàâëåíèè + public TLink(uint node, float cost, float dist, float time, uint line, bool inverse_dir) + { + this.node = node; + this.cost = cost; + this.dist = dist; + this.time = time; + this.line = line; + this.inverse_dir = inverse_dir; + } + + public override string ToString() + { + return node.ToString() + " " + dist.ToString() + "m " + time.ToString() + "min [line: " + line + (inverse_dir ? "R" : "") + "]"; + } + } + + /// + /// Èíôîðìàöèÿ î ïîïðàâêå îöåíêè äëÿ CallExternalCostService + /// + public struct LineExtCostInfo + { + /// + /// Ïîïðàâêà äëÿ ïðÿìîãî íàïðàâëåíèÿ + /// + public float costN; + + /// + /// Ïîïðàâêà äëÿ îáðàòíîãî íàïðàâëåíèÿ + /// + public float costR; + + /// + /// + /// + /// Ïîïðàâêà äëÿ ïðÿìîãî íàïðàâëåíèÿ + /// Ïîïðàâêà äëÿ îáðàòíîãî íàïðàâëåíèÿ + public LineExtCostInfo(float costN, float costR) + { + this.costN = costN; + this.costR = costR; + } + + public override string ToString() + { + return "N" + costN.ToString() + " R" + costR.ToString(); + } + } + + /// + /// Ðåçóëüòàò ïîèñêà ñòàðòîâîé/êîíå÷íîé òî÷êè ïî êîîðäèíàòàì + /// + public struct FindStartStopResult + { + /// + /// Âåêòîð îò òî÷êè äî óçëà êîíöà ëèíèè (äëÿ end - íà÷àëà) + /// + public PointF[] normal; + + /// + /// Âåêòîð îò òî÷êè äî óçëà íà÷àëà ëèíèè (äëÿ end - êîíöà) + /// + public PointF[] revers; + + /// + /// ðàññòîÿíèå îò òî÷êè äî ëèíèè + /// + public float distToLine; + + /// + /// ðàññòîÿíèå îò òî÷êè äî óçëà êîíöà ëèíèè (äëÿ end - íà÷àëà) + /// + public float distToN; + + /// + /// ðàññòîÿíèå îò òî÷êè äî óçëà íà÷àëà ëèíèè (äëÿ end - êîíöà) + /// + public float distToR; + + /// + /// áëèæàéøàÿ ëèíèÿ + /// + public uint line; + + /// + /// Ñòàðòîâûé óçåë (start - normal - last_point; end - normal - first_point) + /// + public uint nodeN; + + /// + /// Íîìåð óçëà íà äðóãîì êîíöå ëèíèè + /// + public uint nodeR; + + public override string ToString() + { + return " N" + nodeN.ToString() + ", " + distToN.ToString() + " ì, L" + line.ToString(); + } + } + + /// + /// Îïòèìèçèðîâàòü ìàðøðóò ïî + /// + public enum MinimizeBy : byte + { + /// + /// Ïî îöåíêå (èñï-ñÿ òîëüêî äëÿ Äåéñòðû) + /// + Cost = 0, + + /// + /// Ïî ðàññòîÿíèþ + /// + Dist = 1, + + /// + /// Ïî âðåìåíè + /// + Time = 2 + } + + //// /// // / // /// //// /// // / // /// //// + //// /// // / // /// //// /// // / // /// //// + //// /// // / // /// //// /// // / // /// //// + + /// + /// Èíôîðìàöèÿ î ïîëÿõ shape ôàéëà + /// + [Serializable] + public class ShapeFields: XMLSaved + { + /// + /// Ïîëå óêàçûâàþùåå íà îäíîñòîðîííåå äâèæåíèå 0/1, + /// ïîëå íå ìîæåò áûòü ïóñòûì + /// + [XmlElement("OneWay")] + public string fldOneWay = "ONE_WAY"; + /// + /// Ïîëå ñ îãðàíè÷åíèåì ìàêñèìàëüíîé ñêîðîñòè (êì/÷), + /// ïîëå íå ìîæåò áûòü ïóñòûì + /// + [XmlElement("SpeedLimit")] + public string fldSpeedLimit = "SPD_LIMIT"; + /// + /// Ïîëå ñ òèïîì ëèíèè, + /// ïîëå íå ìîæåò áûòü ïóñòûì + /// + [XmlElement("GarminType")] + public string fldGarminType = "GRMN_TYPE"; + /// + /// Ïîëå ñ èäåíòèôèêàòîðîì ëèíèè, + /// èñïîëüçóåòñÿ äëÿ çàïðåòîâ ïîâîðîòîâ, + /// ïîëå íå ìîæåò áûòü ïóñòûì + /// + [XmlElement("LinkId")] + public string fldLinkId = "LINK_ID"; + /// + /// Äëèíà ëèíèè â ìåòðàõ, + /// åñëè íå óêàçàíî, òî äëèíà ðàñ÷èòûâàåòñÿ + /// + [XmlElement("Length")] + public string fldLength = "LEN"; + /// + /// Format: L0000;F0000; + /// F0000 - from first line point to link_id 0000 + /// L0000 - from last line point to link_id 0000 + /// + [XmlElement("TurnRestrictions")] + public string fldTurnRstr = "TURN_RSTRS"; + /// + /// Êîäèðîâêà DBF ôàéëà (1251/1252/866) + /// + [XmlElement("CodePageId")] + public int CodePageId = 1251; + /// + /// Èíâåðñèðîâàòü ëè øèðîòó ( Lat = -1*Lat ) + /// + [XmlElement("InverseLat")] + public bool InverseLat = false; + /// + /// Èíâåðñèðîâàòü ëè äîëãîòó ( Lon = -1*Lon ) + /// + [XmlElement("InverseLon")] + public bool InverseLon = false; + /// + /// Ïîëå ñ èíôîðìàöèåé î TMC êîäå + /// @E0+000+00000;@E0-000-00000; + /// @E0+000+00000 or @E0-000-00000 (TMC ñîíàïðàâëåí ñ ëèíèåé) + /// @E0+000-00000 or @E0-000+00000 (ÒÌÑ ïðîòèâîïîëîæåííî íàïðàâëåí ëèíèè) + /// Max TMC no: 65535 (2 bytes) + /// + [XmlElement("TMC")] + public string fldTMC = null; + /// + /// Ïîëå ñ íîìåðîì òî÷êè ñòûêîâêè ìåæðàéîííûõ ìàðøðóòîâ + /// ôîðìàò: F0001IO / L0002I / F0003O; + /// I (In) - ÷åðåç ýòîò óçåë ìîæíî âúåõàòü â ðåãèîí; + /// O (out) - ÷åðåç ýòîò óçåë ìîæíî âûåõàòü èç ðåãèîíà + /// + [XmlElement("RGNODE")] + public string fldRGNODE = null; + /// + /// Ïîëå ñ íàèìåíîâàíèåì ëèíèè + /// + [XmlElement("NAME")] + public string fldName = null; + + + /// + /// Îáîçíà÷åíû ëè çàïðåòû ïîâîðîòîâ + /// + public bool NoTurnRestrictions { get { return (fldTurnRstr == null) || (fldTurnRstr == String.Empty); } } + + /// + /// Êîäèðîâêà DBF ôàéëà + /// + public System.Text.Encoding CodePage { get { return System.Text.Encoding.GetEncoding(CodePageId); } } + } + + /// + /// Òî÷êà ñòûêîâêè ìåæðàéîííûõ ìàðøðóòîâ + /// + [Serializable] + public struct TRGNode + { + /// + /// Èäåíòèôèêàòîð ìåæðàéîííîãî óçëà + /// + [XmlAttribute("id")] + public int id; + + /// + /// Íîìåð óçëà â ãðàôå + /// + [XmlAttribute("node")] + public uint node; + + /// + /// Òî÷êà ïîääåðæèâàåò âõîä èç äðóãèõ ðåãèîíîâ + /// + [XmlAttribute("in")] + public bool inner; + + /// + /// Òî÷êà ïîääåðæèâàåò âûõîä â äðóãèå ðåãèîíû + /// + [XmlAttribute("out")] + public bool outer; + + /// + /// Êàê õðàíèòñÿ â DBF ïîëå + /// + [XmlAttribute("labal")] + public string label; + + /// + /// Íîìåð ðåãèîíà + /// + [XmlAttribute("region")] + public int region; + + /// + /// Lat + /// + [XmlAttribute("lat")] + public float lat; + + /// + /// Lon + /// + [XmlAttribute("lon")] + public float lon; + + /// + /// Ññûëêè íà èäåíòèôèêàòîðû äðóãèõ ìåæðàéîííûõ óçëîâ, â êîòîðûå ìîæíî äîáðàòüñÿ + /// + [XmlArrayItem("l")] + public int[] links; + + /// + /// Îöåíêè äî äðóãèõ ìåæðàéîííûõ óçëîâ, â êîòîðûå ìîæíî äîáðàòüñÿ + /// + [XmlArrayItem("c")] + public float[] costs; + + /// + /// Äèñòàíöèÿ äî äðóãèõ ìåæðàéîííûõ óçëîâ, â êîòîðûå ìîæíî äîáðàòüñÿ + /// + [XmlArrayItem("d")] + public float[] dists; + + /// + /// Âðåìÿ äî äðóãèõ ìåæðàéîííûõ óçëîâ, â êîòîðûå ìîæíî äîáðàòüñÿ + /// + [XmlArrayItem("t")] + public float[] times; + + public TRGNode(uint node, bool inner, bool outer, int id, string label, float lat, float lon) + { + this.node = node; + this.inner = inner; + this.outer = outer; + this.id = id; + this.label = label; + + this.lat = lat; + this.lon = lon; + + this.region = 0; + this.links = null; + this.costs = null; + this.dists = null; + this.times = null; + } + } + + + /// + /// Garmin Shapes 2 Graph Files Converter + /// + public class ShpToGraphConverter + { + /// + /// Èíôîðìàöèÿ î ëèíèè Shape ôàéëà + /// + private class TLine + { + /// + /// Bounds + /// + public double[] box; + /// + /// Numer of line parts + /// + public int numParts; + /// + /// Number of points + /// + public int numPoints; + /// + /// Links To Parts Start Point + /// + public int[] parts; + /// + /// Points + /// + public PointF[] points; + + public override string ToString() + { + return "Pts in line: " + numPoints.ToString(); + } + } + + /// + /// Èíôîðìàöèÿ î çàïðåòå ïîâîðîòà + /// + private class TurnRestriction + { + /// + /// Ïðè äâèæåíèè ïî ëèíèè fromLine + /// + public uint fromLine = 0; + /// + /// ×åðåç óçåë throughNode + /// + public uint throughNode = 0; + /// + /// Íåëüçÿ ïîâåðíóòü â LINK_ID + /// + public int toLineLinkID = 0; + + /// + /// Ñîçäàåì çàïðåò ïîâîðîòà + /// + /// Ïðè äâèæåíèè ïî ëèíèè fromLine + /// ×åðåç óçåë throughNode + /// Íåëüçÿ ïîâåðíóòü â LINK_ID + public TurnRestriction(uint fromLine, uint throughNode, int toLineLinkID) + { + this.fromLine = fromLine; + this.throughNode = throughNode; + this.toLineLinkID = toLineLinkID; + } + + public override string ToString() + { + return fromLine.ToString() + "->-" + throughNode.ToString() + "->-" + toLineLinkID; + } + } + + // çàãîëîâêè ôàéëîâ + private static byte[] RMLINES = new byte[] { 0x52, 0x4D, 0x4C, 0x49, 0x4E, 0x45, 0x53 }; + private static byte[] RMSEGMENTS = new byte[] { 0x52, 0x4D, 0x53, 0x45, 0x47, 0x4D, 0x45, 0x4E, 0x54, 0x53 }; + private static byte[] RMGRAF2 = new byte[] { 0x52, 0x4D, 0x47, 0x52, 0x41, 0x46, 0x32 }; + private static byte[] RMGRAF3 = new byte[] { 0x52, 0x4D, 0x47, 0x52, 0x41, 0x46, 0x33 }; + private static byte[] RMINDEX = new byte[] { 0x52, 0x4D, 0x49, 0x4E, 0x44, 0x45, 0x58 }; + private static byte[] RMPOINTNLL0 = new byte[] { 0x52, 0x4D, 0x50, 0x4F, 0x49, 0x4E, 0x54, 0x4E, 0x4C, 0x4C, 0x30 }; + private static byte[] RMPOINTNLL1 = new byte[] { 0x52, 0x4D, 0x50, 0x4F, 0x49, 0x4E, 0x54, 0x4E, 0x4C, 0x4C, 0x31 }; + private static byte[] RMLINKIDS = new byte[] { 0x52, 0x4D, 0x4C, 0x49, 0x4E, 0x4B, 0x49, 0x44, 0x53 }; + private static byte[] RMTURNRSTR = new byte[] { 0x52, 0x4D, 0x54, 0x55, 0x52, 0x4E, 0x52, 0x53, 0x54, 0x52 }; + private static byte[] RMTMC = new byte[] { 0x52, 0x4D, 0x54, 0x4D, 0x43 }; + + private const byte line_record_length = 15; + private const byte segm_record_length = 30; + + private bool writeLinesNamesFile = false; + /// + /// Ïèñàòü ëè ôàéë íàèìåíîâàíèÿ äîðîã + /// + public bool WriteLinesNamesFile { get { return writeLinesNamesFile; } set { writeLinesNamesFile = true; } } + + /// + /// Ñïèñîê òî÷åê ñòûêîâêè ìåæðàéîííûõ ìàðøðóòîâ + /// + private List rgNodes = new List(); + + /// + /// Èìåíà ïîëåé DBF ôàéëà + /// + private ShapeFields shpf; + + /// + /// Ìàêñèìàëüíàÿ îøèáêà â ðàñ÷åòàõ + /// + private const Single maxError = (Single)1e-6; + + /// + /// Êîäèðîâêà DBF ôàéëà + /// + private System.Text.Encoding DBFEncoding; + + /// + /// Èìÿ shp ôàéëà + /// + private string shFile; + /// + /// Èìÿ ôàéëà ãðàôà + /// + private string grFile; + /// + /// Èìÿ ïðåôèêñà ôàéëîâ ãðàôà + /// + private string grMain; + + /// + /// Îáùåå ÷èñëî ëèíèé + /// + private int linesCount = 0; + /// + /// Îáùåå ÷èñëî ñåãìåíòîâ + /// + private int segmCount = 0; + + /// + /// Pointer to Lines + /// + private Stream lnStr; + /// + /// Pointer to Segments + /// + private Stream sgStr; + /// + /// Pointer to Line Index + /// + private Stream liStr; + /// + /// Pointer to Line TMC + /// + private Stream tmcStr; + /// + /// Pointer to WriteLinesNamesFile + /// + private Stream lnmsStr; + + /// + /// Óçëû ãðàôà + /// + private List nodes = new List(); + + /// + /// Ìàêñèìàëüíîå äëèíà ëèíèè + /// + private float maxLengthBetweenNodes = 0; + /// + /// Ìàêñèìàëüíîå âðåìÿ äâèæåíèÿ ïî ëèíèè + /// + private float maxTimeBetweenNodes = 0; + /// + /// Ìàêñèìàëüíàÿ îöåíêà ìåæäó óçëàìè + /// + private float maxCostBetweenNodes = 0; + + /// + /// Ñïèñîê íàéäåííûõ çàïðåòîâ ïîâîðîòîâ + /// + private List noTurns = new List(); + + /// + /// ×èñëî äîáàâëåííûõ çàïðåòîâ ïîâîðîòîâ + /// + private int noTurnsAdded = 0; + + /// + /// Êîíâåðòîð Shape ôàéëà + /// + /// Ïîëíûé ïóòü + public ShpToGraphConverter(string ShapeFileName) + { + ni = (System.Globalization.NumberFormatInfo)ci.NumberFormat.Clone(); + ni.NumberDecimalSeparator = "."; + this.shFile = ShapeFileName; + + //shpf = new ShapesFields(); + //ShapesFields.Save(ShapesFields.GetCurrentDir()+@"\fldcfg.xml", shpf); + + string fieldConfigFileName = Path.GetDirectoryName(shFile)+@"\"+ Path.GetFileNameWithoutExtension(shFile)+".fldcfg.xml"; + if (File.Exists(fieldConfigFileName)) + shpf = ShapeFields.Load(fieldConfigFileName); + else + shpf = new ShapeFields(); + + DBFEncoding = shpf.CodePage; + } + + /// + /// Êîíâåðòàöèÿ Shape ôàéëà â ãðàô + /// + /// + public void ConvertTo(string GraphFileName) + { + Console.WriteLine("dkxce Shape-Graph Converter v0.3.2.9"); + Console.WriteLine("Copyrights (c) 2012 Karimov Artem "); + Console.WriteLine(); + Console.WriteLine("Input file: " + Path.GetFileName(shFile)); + Console.WriteLine("Output file: " + Path.GetFileName(GraphFileName)); + string fieldConfigFileName = Path.GetDirectoryName(shFile)+@"\"+ Path.GetFileNameWithoutExtension(shFile)+".fldcfg.xml"; + if (File.Exists(fieldConfigFileName)) + Console.WriteLine("Config file: " + Path.GetFileName(fieldConfigFileName)); + Console.WriteLine("DBF Encoding: " + this.DBFEncoding.CodePage.ToString()+" "+this.DBFEncoding.EncodingName); + DateTime started = DateTime.Now; + Console.WriteLine(); + Console.WriteLine("Started: " + DateTime.Now.ToString("HH:mm:ss")); + Console.WriteLine(); + + + this.grFile = GraphFileName; + this.grMain = GraphFileName.Remove(GraphFileName.LastIndexOf(".")); + + Console.WriteLine("Preparing: " + Path.GetFileName(grMain) + ".lines.bin"); + lnStr = new FileStream(grMain + ".lines.bin", FileMode.Create); + lnStr.Write(RMLINES, 0, RMLINES.Length); + byte[] ba = new byte[4]; + lnStr.Write(ba, 0, ba.Length); + + Console.WriteLine("Preparing: " + Path.GetFileName(grMain) + ".segments.bin"); + sgStr = new FileStream(grMain + ".segments.bin", FileMode.Create); + sgStr.Write(RMSEGMENTS, 0, RMSEGMENTS.Length); + ba = new byte[4]; + sgStr.Write(ba, 0, ba.Length); + + Console.WriteLine("Preparing: " + Path.GetFileName(grMain) + ".lines.id"); + liStr = new FileStream(grMain + ".lines.id", FileMode.Create); + liStr.Write(RMLINKIDS,0,RMLINKIDS.Length); + ba = new byte[4]; + liStr.Write(ba, 0, ba.Length); + + if ((shpf.fldTMC != null) && (shpf.fldTMC != String.Empty)) + { + Console.WriteLine("Preparing: " + Path.GetFileName(grMain) + ".lines.tmc"); + tmcStr = new FileStream(grMain + ".lines.tmc", FileMode.Create); + tmcStr.Write(RMTMC, 0, RMTMC.Length); + ba = new byte[4]; + tmcStr.Write(ba, 0, ba.Length); + }; + + if ((shpf.fldName != null) && (shpf.fldName != String.Empty) && (writeLinesNamesFile)) + { + Console.WriteLine("Preparing: " + Path.GetFileName(grMain) + ".lines.txt"); + lnmsStr = new FileStream(grMain + ".lines.txt", FileMode.Create); + ba = System.Text.Encoding.GetEncoding(1251).GetBytes("Ôàéë íàèìåíîâàíèé ëèíèé\r\n"); + lnmsStr.Write(ba, 0, ba.Length); + }; + + Console.WriteLine("Open Shape Files..."); + ReadInnerFiles(this.shFile); + Console.WriteLine("Shape Files Reading Completed"); + + // do not save yet, until TurnRestriction check + //lnStr.Position = RMLINES.Length; + //ba = BitConverter.GetBytes(linesCount); + //lnStr.Write(ba, 0, ba.Length); + //lnStr.Flush(); + //lnStr.Close(); // .lines.bin + //Console.WriteLine("Write: " + Path.GetFileName(grMain) + ".lines.bin Completed"); + + sgStr.Position = RMSEGMENTS.Length; + ba = BitConverter.GetBytes(segmCount); + sgStr.Write(ba, 0, ba.Length); + sgStr.Flush(); + sgStr.Close(); // .segments.bin + Console.WriteLine("Write: " + Path.GetFileName(grMain) + ".segments.bin Completed"); + + liStr.Position = RMLINKIDS.Length; + ba = BitConverter.GetBytes(linesCount); + liStr.Write(ba, 0, ba.Length); + liStr.Flush(); + List linkids = new List(linesCount); + for (int i = 0; i < linesCount; i++) + { + liStr.Read(ba, 0, ba.Length); + linkids.Add(BitConverter.ToInt32(ba, 0)); + }; + liStr.Close();// .lines.id + Console.WriteLine("Write: " + Path.GetFileName(grMain) + ".lines.id Completed"); + + if ((shpf.fldTMC != null) && (shpf.fldTMC != String.Empty)) + { + tmcStr.Position = RMTMC.Length; + ba = BitConverter.GetBytes(linesCount); + tmcStr.Write(ba, 0, ba.Length); + tmcStr.Flush(); + tmcStr.Close();// .lines.tmc + Console.WriteLine("Write: " + Path.GetFileName(grMain) + ".lines.tmc Completed"); + }; + + if ((shpf.fldName != null) && (shpf.fldName != String.Empty) && (writeLinesNamesFile)) + { + lnmsStr.Flush(); + lnmsStr.Close(); + Console.WriteLine("Write: " + Path.GetFileName(grMain) + ".lines.txt Completed"); + }; + + SaveNodes(linkids); + + // TurnRestrictions Checked ->- Save Lines + lnStr.Position = RMLINES.Length; + ba = BitConverter.GetBytes(linesCount); + lnStr.Write(ba, 0, ba.Length); + lnStr.Flush(); + lnStr.Close(); // .lines.bin + Console.WriteLine("Write: " + Path.GetFileName(grMain) + ".lines.bin Completed"); + + // DONE // + + DateTime ended = DateTime.Now; + TimeSpan elapsed = ended.Subtract(started); + + FileStream rtStr = new FileStream(GraphFileName, FileMode.Create); + StreamWriter sw = new StreamWriter(rtStr); + sw.WriteLine("dkxce shape-graph converter result main file"); + sw.WriteLine("Started: " + started.ToString("yyyy-MM-dd HH:mm:ss")); + sw.WriteLine("Converted: " + ended.ToString("yyyy-MM-dd HH:mm:ss")); + sw.WriteLine("Elapsed: " + String.Format("{0:00}:{1:00}:{2:00}", elapsed.TotalHours, elapsed.Minutes, elapsed.Seconds)); + sw.WriteLine("Source file: " + Path.GetFileName(shFile)); + sw.WriteLine("Source path: " + Path.GetDirectoryName(shFile)); + sw.WriteLine("DBF CodePage: " + this.DBFEncoding.CodePage.ToString()); + sw.WriteLine("DBF Encoding: " + this.DBFEncoding.EncodingName); + sw.WriteLine("Latitude Inversed: " + this.shpf.InverseLat.ToString()); + sw.WriteLine("Longitude Inversed: " + this.shpf.InverseLon.ToString()); + sw.WriteLine("Max Cost Between Nodes: " + maxCostBetweenNodes.ToString(ni)); + sw.WriteLine("Max Length Between Nodes: " + maxLengthBetweenNodes.ToString(ni) + " m"); + sw.WriteLine("Max Time Between Nodes: " + maxTimeBetweenNodes.ToString(ni) + " min"); + sw.WriteLine("Lines: " + linesCount.ToString()); + sw.WriteLine("Segments: " + segmCount.ToString()); + sw.WriteLine("Nodes: " + nodes.Count.ToString()); + sw.WriteLine("Turn Restrictions: " + noTurnsAdded.ToString()); + sw.WriteLine(); + sw.WriteLine("Files:"); + sw.WriteLine(" " + Path.GetFileName(grMain) + ".lines.bin - Lines information (segments count, pos, oneway, node start, node stop)"); + sw.WriteLine(" " + Path.GetFileName(grMain) + ".lines.id - Lines LINK_ID"); + sw.WriteLine(" " + Path.GetFileName(grMain) + ".segments.bin - Lines segments"); + sw.WriteLine(" " + Path.GetFileName(grMain) + ".lines.txt - Lines names"); + sw.WriteLine(" " + Path.GetFileName(grMain) + ".graph.bin - Graph nodes information"); + sw.WriteLine(" " + Path.GetFileName(grMain) + ".graph.bin.in - Index for node position in graph"); + sw.WriteLine(" " + Path.GetFileName(grMain) + ".graph[r].bin - Graph nodes information for inverse solve"); + sw.WriteLine(" " + Path.GetFileName(grMain) + ".graph[r].bin.in - Index for node position in graph (inverse solve)"); + sw.WriteLine(" " + Path.GetFileName(grMain) + ".graph.geo - Nodes Lat Lon information"); + sw.WriteLine(" " + Path.GetFileName(grMain) + ".graph.geo.ll - Indexed Lat Lon for nodes"); + sw.WriteLine(" " + Path.GetFileName(grMain) + ".rgnodes.xml - Region Nodes Information"); + sw.WriteLine(" " + Path.GetFileName(grMain) + ".analyze.txt - Nodes In/Out fail information"); + sw.Flush(); + sw.Close(); + rtStr.Close(); + + Console.WriteLine(); + Console.WriteLine("Convertion Done: " + ended.ToString("HH:mm:ss")); + Console.WriteLine("Elapsed: " + String.Format("{0:00}:{1:00}:{2:00}",elapsed.TotalHours,elapsed.Minutes,elapsed.Seconds)); + } + + /// + /// Ñîõðàíÿåì óçëû è âñå ÷òî ñ íèìè ñâÿçàíî + /// + private void SaveNodes(List linkIds) + { + Console.WriteLine(); + + // // // // TEST // // // // + //nodes.Add(new TNode(1, 0, 0)); + //nodes[0].links.Add(new TLink(5, 0, 0, 0, 1, false)); + //nodes[0].rlinks.Add(new TLink(5, 0, 0, 0, 1, false)); + //nodes.Add(new TNode(2, 0, 0)); + //nodes[1].links.Add(new TLink(5, 0, 0, 0, 2, false)); + //nodes[1].rlinks.Add(new TLink(5, 0, 0, 0, 2, false)); + //nodes.Add(new TNode(3, 0, 0)); + //nodes[2].links.Add(new TLink(5, 0, 0, 0, 3, false)); + //nodes[2].links.Add(new TLink(6, 0, 0, 0, 6, false)); + //nodes[2].links.Add(new TLink(7, 0, 0, 0, 7, false)); + //nodes[2].rlinks.Add(new TLink(5, 0, 0, 0, 3, false)); + //nodes[2].rlinks.Add(new TLink(6, 0, 0, 0, 6, false)); + //nodes[2].rlinks.Add(new TLink(7, 0, 0, 0, 7, false)); + //nodes.Add(new TNode(4, 0, 0)); + //nodes[3].links.Add(new TLink(5, 0, 0, 0, 4, false)); + //nodes[3].rlinks.Add(new TLink(5, 0, 0, 0, 4, false)); + //nodes.Add(new TNode(5, 0, 0)); + //nodes[4].links.Add(new TLink(1, 0, 0, 0, 1, false)); + //nodes[4].links.Add(new TLink(2, 0, 0, 0, 2, false)); + //nodes[4].links.Add(new TLink(3, 0, 0, 0, 3, false)); + //nodes[4].links.Add(new TLink(4, 0, 0, 0, 4, false)); + //nodes[4].rlinks.Add(new TLink(1, 0, 0, 0, 1, false)); + //nodes[4].rlinks.Add(new TLink(2, 0, 0, 0, 2, false)); + //nodes[4].rlinks.Add(new TLink(3, 0, 0, 0, 3, false)); + //nodes[4].rlinks.Add(new TLink(4, 0, 0, 0, 4, false)); + //nodes.Add(new TNode(6, 0, 0)); + //nodes[5].links.Add(new TLink(3, 0, 0, 0, 6, false)); + //nodes[5].rlinks.Add(new TLink(3, 0, 0, 0, 6, false)); + //nodes.Add(new TNode(7, 0, 0)); + //nodes[6].links.Add(new TLink(3, 0, 0, 0, 7, false)); + //nodes[6].rlinks.Add(new TLink(3, 0, 0, 0, 7, false)); + //noTurns.Add(new TurnRestriction(1, 5, 1004)); + //noTurns.Add(new TurnRestriction(4, 5, 1003)); + //noTurns.Add(new TurnRestriction(3, 5, 1002)); + //noTurns.Add(new TurnRestriction(4, 5, 1001)); + //noTurns.Add(new TurnRestriction(3, 3, 1007)); + //linkIds.Clear(); + //linkIds.Add(1001); + //linkIds.Add(1002); + //linkIds.Add(1003); + //linkIds.Add(1004); + //linkIds.Add(1006); + //linkIds.Add(1007); + + + // save turn restrictions + Console.WriteLine("Turn Restrictions Analyze (TRA)... "); + Console.WriteLine("Found ... "); + + int noTurnsWas = noTurns.Count; + int noTurnsSkipped = 0; + int newNodesAdded = 0; + while (noTurns.Count > 0) + { + TurnRestriction ctr = noTurns[0]; + TNode nd = nodes[(int)ctr.throughNode - 1]; // óçåë throught + List nns = new List(); // óçëû ïîäìåíû + + // äëÿ êàæäîé âõîäÿùåé ñâÿçè) + for (int _in = 0; _in < nd.rlinks.Count; _in++) + { + List canLine = new List(); // ñïèñîê ëèíèé êóäà ìîæíî åõàòü + for (int _ot = 0; _ot < nd.links.Count; _ot++) canLine.Add(nd.links[_ot].line); + + for (int nt = noTurns.Count - 1; nt >= 0; nt--) // óäàëÿåì êóäà íåëüçÿ åõàòü + if ((noTurns[nt].fromLine == nd.rlinks[_in].line) && (noTurns[nt].throughNode == nd.node)) + { + int lid = linkIds.IndexOf(noTurns[nt].toLineLinkID); + if (lid >= 0) + { + uint line = (uint)lid + 1; // find line by link_id + if (line == nd.rlinks[_in].line) + { + // No U-Turn + }; + canLine.Remove(line); // remove line from can go list + noTurnsAdded++; + } + else + noTurnsSkipped++; + noTurns.RemoveAt(nt); // remove turn restriction + }; + TNode nn = new TNode((uint)(nodes.Count + _in), nd.lat, nd.lon); // ñîçäàåì íîâûé óçåë + nn.rlinks.Add(nd.rlinks[_in]); // äîáâëÿåì èíôîðìàöèþ î ëèíèè ïî êîòîðîé ïðèøëè + for (int _ot = 0; _ot < nd.links.Count; _ot++) // äîáàâëÿåì êóäà ìîæíî ïîéòè + if (canLine.Contains(nd.links[_ot].line)) + { + TLink link = nd.links[_ot]; + nn.links.Add(link); + }; + nns.Add(nn); + }; + // replace nd node + nns[0].node = nd.node; + nodes[(int)nd.node - 1] = nns[0]; + // add new + for (int i = 1; i < nns.Count; i++) + nodes.Add(nns[i]); + // update near nodes + for (int i = 0; i < nns.Count; i++) + { + for (int _in = 0; _in < nns[i].rlinks.Count; _in++) + { + TNode upd = nodes[(int)nns[i].rlinks[_in].node - 1]; + for (int _ot = 0; _ot < upd.links.Count; _ot++) + if (upd.links[_ot].node == nd.node) + upd.links[_ot].node = nns[i].node; + }; + for (int _ot = 0; _ot < nns[i].links.Count; _ot++) + { + TNode upd = nodes[(int)nns[i].links[_ot].node - 1]; + for (int _in = 0; _in < upd.rlinks.Count; _in++) + if (upd.rlinks[_in].node == nd.node) + upd.rlinks[_in].node = nns[i].node; + }; + }; + // update changes in noTurns + for (int i = noTurns.Count - 1; i >= 0; i--) + { + // ïðîâåðêà ñõîäèìîñòè + if (noTurns[i].throughNode == nd.node) + { + string txt = "NoTurn from LINK_ID " + linkIds[(int)noTurns[i].fromLine - 1].ToString() + " to LINK_ID " + noTurns[i].toLineLinkID.ToString(); + // åñëè â óçëå íåñêîëüêî çàïðåòîâ ñ ïîâîðîòîâ è íà÷àëüíûå + // ëèíèè íå áûëè íàéäåíû ðàíåå, òî âîçìîæíî äîðîãà îäíîñòîðîííÿÿ, + // à çàïðåò ïîâîðîòà óêàçàí â çàïðåùåííîì íàïðàâëåíèè äâèæåíèÿ. + // Ïîýòîìó ñïåðâà èùåì ëèíèþ â èñõîäÿùèõ ñâÿçÿõ + bool deleted = false; + for (int _out = 0; _out < nd.links.Count; _out++) + if (noTurns[i].fromLine == nd.links[_out].line) + deleted = true; + // åñëè ëèíèÿ íàéäåíà, òî äîðîãà îäíîñòîðîíÿÿ è ïîâåðíóòü + // â óêàçàííîì â çàïðåòå íàïðàâëåíèè íåëüçÿ - óäàëÿåì ëèøíþþ èíôîðìàöèþ + if (deleted) + { + Console.SetCursorPosition(0, Console.CursorTop - 1); + Console.WriteLine(txt+" ignored - WRONG WAY DIRECTION"); + Console.WriteLine(""); + noTurns.RemoveAt(i); + } + else + { + // åñëè ëèíèÿ íå íàéäåíà, òî åå íåò â èñõîäíîì shp ôàéëå + throw new StackOverflowException("Çàïðåòû ïîâîðîòîâ íå ñõîäÿòñÿ, ïðîâåðüòå èñõîäíûå äàííûå!!! " + txt); + }; + }; + }; + // update incoming lines + for (int _in = 0; _in < nd.rlinks.Count; _in++) + { + lnStr.Position = RMLINES.Length + 4 + line_record_length * (nd.rlinks[_in].line) - 8; + byte[] ba = new byte[8]; + lnStr.Read(ba, 0, 8); + uint node1 = BitConverter.ToUInt32(ba, 0); + uint node2 = BitConverter.ToUInt32(ba, 4); + if (node1 == nd.node) node1 = nns[_in].node; + if (node2 == nd.node) node2 = nns[_in].node; + lnStr.Position -= 8; + ba = BitConverter.GetBytes(node1); + lnStr.Write(ba, 0, ba.Length); + ba = BitConverter.GetBytes(node2); + lnStr.Write(ba, 0, ba.Length); + }; + lnStr.Flush(); + // + newNodesAdded += nns.Count - 1; + Console.SetCursorPosition(0, Console.CursorTop - 1); + Console.WriteLine(String.Format("NoTurns with new analyzed added: {0} from {1} found; skipped {2}", noTurnsAdded, noTurnsWas, noTurnsSkipped)); + }; + // TRA DONE + + Console.WriteLine("New nodes to add (after Turn Restrictions Analyze): "+newNodesAdded.ToString()); + Console.WriteLine("Turn Restrictions Analyze (TRA) Completed"); + Console.WriteLine(); + ///// + + // save graph + Console.WriteLine("Preparing: " + Path.GetFileName(grMain) + ".graph.bin"); + FileStream grStr = new FileStream(grMain + ".graph.bin", FileMode.Create); + grStr.Write(RMGRAF2, 0, RMGRAF2.Length); + byte[] nodesC = BitConverter.GetBytes(nodes.Count); + grStr.Write(nodesC, 0, nodesC.Length); + byte[] maxl = BitConverter.GetBytes(maxLengthBetweenNodes); + grStr.Write(maxl, 0, maxl.Length); + + // save reversed graph + Console.WriteLine("Preparing: " + Path.GetFileName(grMain) + ".graph[r].bin"); + FileStream grStrR = new FileStream(grMain + ".graph[r].bin", FileMode.Create); + grStrR.Write(RMGRAF3, 0, RMGRAF2.Length); + BitConverter.GetBytes(nodes.Count); + grStrR.Write(nodesC, 0, nodesC.Length); + BitConverter.GetBytes(maxLengthBetweenNodes); + grStrR.Write(maxl, 0, maxl.Length); + + // save graph index + Console.WriteLine("Preparing: " + Path.GetFileName(grMain) + ".graph.bin.in"); + FileStream giStr = new FileStream(grMain + ".graph.bin.in", FileMode.Create); + giStr.Write(RMINDEX, 0, RMINDEX.Length); + giStr.Write(nodesC, 0, nodesC.Length); + + // save reversed graph index + Console.WriteLine("Preparing: " + Path.GetFileName(grMain) + ".graph[r].bin.in"); + FileStream giStrR = new FileStream(grMain + ".graph[r].bin.in", FileMode.Create); + giStrR.Write(RMINDEX, 0, RMINDEX.Length); + giStrR.Write(nodesC, 0, nodesC.Length); + + // graph nodes lat lon + Console.WriteLine("Preparing: " + Path.GetFileName(grMain) + ".graph.geo"); + FileStream geoStr = new FileStream(grMain + ".graph.geo", FileMode.Create); + geoStr.Write(RMPOINTNLL0, 0, RMPOINTNLL0.Length); + geoStr.Write(nodesC, 0, nodesC.Length); + + Console.WriteLine("Write Node..."); + FileStream ninf = new FileStream(grMain + ".graph.analyze.txt", FileMode.Create); + StreamWriter nw = new StreamWriter(ninf); + nw.WriteLine("Àíàëèç óçëîâ ãðàôà íà íàëè÷èå ðåáåð... "); + for (int i = 0; i < nodes.Count; i++) + { + bool nl = false; + if (nodes[i].Ins == 0) + { + Console.SetCursorPosition(0, Console.CursorTop - 1); + string ln = String.Format("... â óçåë {0} íåëüçÿ ïîïàñòü {1} {2} ", i + 1, nodes[i].lat, nodes[i].lon); + Console.WriteLine(ln); + nw.WriteLine(ln); + nl = true; + }; + if (nodes[i].Outs == 0) + { + if (!nl) Console.SetCursorPosition(0, Console.CursorTop - 1); + string ln = String.Format("... èç óçëà {0} íåëüçÿ âûåõàòü {1} {2} ", i + 1, nodes[i].lat, nodes[i].lon); + Console.WriteLine(ln); + nw.WriteLine(ln); + nl = true; + }; + if (nl) Console.WriteLine(); + + byte[] lat = BitConverter.GetBytes(nodes[i].lat); // Write nodes Lat Lon + geoStr.Write(lat, 0, lat.Length); + byte[] lon = BitConverter.GetBytes(nodes[i].lon); + geoStr.Write(lon, 0, lon.Length); + + byte links = (byte)nodes[i].links.Count; // Write Node links pos + byte[] pos = BitConverter.GetBytes((uint)grStr.Position); + giStr.Write(pos, 0, pos.Length); + + byte rlinks = (byte)nodes[i].rlinks.Count; // Write Node rlinks pos + byte[] posR = BitConverter.GetBytes((uint)grStrR.Position); + giStrR.Write(posR, 0, posR.Length); + + grStr.WriteByte(links); + grStrR.WriteByte(rlinks); + + for (int x = 0; x < nodes[i].links.Count; x++) // Write Node links + { + byte[] next = BitConverter.GetBytes(nodes[i].links[x].node);// 4 + grStr.Write(next, 0, next.Length); + byte[] cost = BitConverter.GetBytes(nodes[i].links[x].cost);// 4 + grStr.Write(cost, 0, cost.Length); + byte[] dist = BitConverter.GetBytes(nodes[i].links[x].dist);// 4 + grStr.Write(dist, 0, dist.Length); + byte[] time = BitConverter.GetBytes(nodes[i].links[x].time);// 4 + grStr.Write(time, 0, time.Length); + byte[] line = BitConverter.GetBytes(nodes[i].links[x].line);// 4 + grStr.Write(line, 0, line.Length); + byte rev = nodes[i].links[x].inverse_dir ? (byte)1 : (byte)0;//// 1 + grStr.WriteByte(rev); + }; + grStr.Flush(); + + for (int x = 0; x < nodes[i].rlinks.Count; x++) // Write Node rlinks + { + byte[] next = BitConverter.GetBytes(nodes[i].rlinks[x].node);// 4 + grStrR.Write(next, 0, next.Length); + byte[] cost = BitConverter.GetBytes(nodes[i].rlinks[x].cost);// 4 + grStrR.Write(cost, 0, cost.Length); + byte[] dist = BitConverter.GetBytes(nodes[i].rlinks[x].dist);// 4 + grStrR.Write(dist, 0, dist.Length); + byte[] time = BitConverter.GetBytes(nodes[i].rlinks[x].time);// 4 + grStrR.Write(time, 0, time.Length); + byte[] line = BitConverter.GetBytes(nodes[i].rlinks[x].line);// 4 + grStrR.Write(line, 0, line.Length); + byte rev = nodes[i].rlinks[x].inverse_dir ? (byte)1 : (byte)0;//// 1 + grStrR.WriteByte(rev); + }; + grStrR.Flush(); + Console.SetCursorPosition(0, Console.CursorTop - 1); + Console.WriteLine("Nodes added: " + (i+1).ToString()); + }; + nw.WriteLine("Çàâåðøåíî"); + nw.Flush(); + nw.Close(); + ninf.Close(); + + Console.WriteLine("Write: " + Path.GetFileName(grMain) + ".graph.bin Completed"); + grStr.Flush(); + grStr.Close(); + + Console.WriteLine("Write: " + Path.GetFileName(grMain) + ".graph[r].bin Completed"); + grStrR.Flush(); + grStrR.Close(); + + Console.WriteLine("Write: " + Path.GetFileName(grMain) + ".graph.bin.in Completed"); + giStr.Flush(); + giStr.Close(); + + Console.WriteLine("Write: " + Path.GetFileName(grMain) + ".graph[r].bin.in Completed"); + giStrR.Flush(); + giStrR.Close(); + + Console.WriteLine("Write: " + Path.GetFileName(grMain) + ".graph.geo Completed"); + geoStr.Flush(); + geoStr.Close(); + + Console.WriteLine(); + + Console.Write("Saving " + Path.GetFileName(grMain) + ".graph.geo.ll ..."); + nodes.Sort(TNode.Sorter.SortByLL()); + + // graph nodes lat lon indexed + FileStream gllStr = new FileStream(grMain + ".graph.geo.ll", FileMode.Create); + gllStr.Write(RMPOINTNLL1, 0, RMPOINTNLL1.Length); + gllStr.Write(nodesC, 0, nodesC.Length); + for (int i = 0; i < nodes.Count; i++) + { + byte[] ba = BitConverter.GetBytes(nodes[i].node); // Write Node Lat Lon Indexed + gllStr.Write(ba, 0, ba.Length); + ba = BitConverter.GetBytes(nodes[i].lat); + gllStr.Write(ba, 0, ba.Length); + ba = BitConverter.GetBytes(nodes[i].lon); + gllStr.Write(ba, 0, ba.Length); + }; + gllStr.Flush(); + gllStr.Close(); + Console.WriteLine(" Completed"); + + Console.WriteLine(); + if (rgNodes.Count > 0) + { + Console.WriteLine("Saving RGNodes: "+rgNodes.Count.ToString()+" - in "+ Path.GetFileName(grMain)+".rgnodes.xml"); + XMLSaved.Save(grMain + ".rgnodes.xml", rgNodes.ToArray()); + Console.WriteLine(); + }; + } + + /// + /// Ïðîâåðÿåì íàëè÷èå â DBF ôàéëå âñåõ íåîáõîäèìûõ ïîëåé + /// + /// Ñïèñîê ïîëåé ôàéëà + private void CheckNeededFields(string[] fields) + { + List flds = new List(fields); + bool exc = false; + if (!flds.Contains(shpf.fldGarminType)) + { + exc = true; + Console.WriteLine(String.Format("Field '{0}' as {1} not found!", shpf.fldGarminType, "GarminType")); + }; + if (!flds.Contains(shpf.fldLinkId)) + { + exc = true; + Console.WriteLine(String.Format("Field '{0}' as {1} not found!", shpf.fldLinkId, "LinkId")); + }; + if (!flds.Contains(shpf.fldOneWay)) + { + exc = true; + Console.WriteLine(String.Format("Field '{0}' as {1} not found!", shpf.fldOneWay, "OneWay")); + }; + if (!flds.Contains(shpf.fldSpeedLimit)) + { + exc = true; + Console.WriteLine(String.Format("Field '{0}' as {1} not found!", shpf.fldSpeedLimit, "SpeedLimit")); + }; + if ((shpf.fldLength != null) && (shpf.fldLength != String.Empty)) + if (!flds.Contains(shpf.fldLength)) + { + exc = true; + Console.WriteLine(String.Format("Field '{0}' as {1} not found!", shpf.fldLength, "Length")); + }; + if(!shpf.NoTurnRestrictions) + if (!flds.Contains(shpf.fldTurnRstr)) + { + exc = true; + Console.WriteLine(String.Format("Field '{0}' as {1} not found!", shpf.fldTurnRstr, "TurnRestrictions")); + }; + if ((shpf.fldTMC != null) && (shpf.fldTMC != String.Empty)) + if (!flds.Contains(shpf.fldTMC)) + { + exc = true; + Console.WriteLine(String.Format("Field '{0}' as {1} not found!", shpf.fldTMC, "TMC")); + }; + if((shpf.fldName != null) && (shpf.fldTMC != String.Empty)) + if(!flds.Contains(shpf.fldName)) + { + exc = true; + Console.WriteLine(String.Format("Field '{0}' as {1} not found!", shpf.fldName, "NAME")); + }; + if ((shpf.fldRGNODE != null) && (shpf.fldRGNODE != String.Empty)) + if (!flds.Contains(shpf.fldRGNODE)) + { + exc = true; + Console.WriteLine(String.Format("Field '{0}' as {1} not found!", shpf.fldRGNODE, "RGNODE")); + }; + if(exc) + throw new Exception("Some fields in DBF not found"); + } + + /// + /// ×èòàåì shp è dbf + /// + /// Èìÿ shp ôàéëà + private void ReadInnerFiles(string filename) + { + // Read shp file to buffer + FileStream shapeFileStream = new FileStream(filename, FileMode.Open, FileAccess.Read); + long shapeFileLength = shapeFileStream.Length; + Byte[] shapeFileData = new Byte[shapeFileLength]; + shapeFileStream.Read(shapeFileData, 0, (int)shapeFileLength); + shapeFileStream.Close(); + + // check valid records type + int shapetype = readIntLittle(shapeFileData, 32); + if (shapetype != 3) throw new Exception("Shape doesn't contains roads (not polyline)"); + + // read DBF + string dbffile = filename.Substring(0,filename.Length - 4) + ".dbf"; + FileStream dbfFileStream = new FileStream(dbffile, FileMode.Open, FileAccess.Read); + + // Read File Version + dbfFileStream.Position = 0; + int ver = dbfFileStream.ReadByte(); + + // Read Records Count + dbfFileStream.Position = 04; + byte[] bb = new byte[4]; + dbfFileStream.Read(bb, 0, 4); + int total = BitConverter.ToInt32(bb, 0); + Console.WriteLine("Total lines: " + total.ToString()); + + // Read DataRecord 1st Position + dbfFileStream.Position = 8; + bb = new byte[2]; + dbfFileStream.Read(bb, 0, 2); + short dataRecord_1st_Pos = BitConverter.ToInt16(bb, 0); + int FieldsCount = (((bb[0] + (bb[1] * 0x100)) - 1) / 32) - 1; + + // Read DataRecord Length + dbfFileStream.Position = 10; + bb = new byte[2]; + dbfFileStream.Read(bb, 0, 2); + short dataRecord_Length = BitConverter.ToInt16(bb, 0); + + // Read Çàãîëîâêè Ïîëåé + dbfFileStream.Position = 32; + string[] Fields_Name = new string[FieldsCount]; // Ìàññèâ íàçâàíèé ïîëåé + Hashtable fieldsLength = new Hashtable(); // Ìàññèâ ðàçìåðîâ ïîëåé + Hashtable fieldsType = new Hashtable(); // Ìàññèâ òèïîâ ïîëåé + byte[] Fields_Dig = new byte[FieldsCount]; // Ìàññèâ ðàçìåðîâ äðîáíîé ÷àñòè + int[] Fields_Offset = new int[FieldsCount]; // Ìàññèâ îòñòóïîâ + bb = new byte[32 * FieldsCount]; // Îïèñàíèå ïîëåé: 32 áàéòa * êîë-âî, íà÷èíàÿ ñ 33-ãî + dbfFileStream.Read(bb, 0, bb.Length); + int FieldsLength = 0; + for (int x = 0; x < FieldsCount; x++) + { + Fields_Name[x] = System.Text.Encoding.Default.GetString(bb, x * 32, 10).TrimEnd(new char[] { (char)0x00 }).ToUpper(); + fieldsType.Add(Fields_Name[x], "" + (char)bb[x * 32 + 11]); + fieldsLength.Add(Fields_Name[x], (int)bb[x * 32 + 16]); + Fields_Dig[x] = bb[x * 32 + 17]; + Fields_Offset[x] = 1 + FieldsLength; + FieldsLength = FieldsLength + (int)fieldsLength[Fields_Name[x]]; + + // loadedScript.fieldsType[Fields_Name[x]] == "L" -- System.Boolean + // loadedScript.fieldsType[Fields_Name[x]] == "D" -- System.DateTime + // loadedScript.fieldsType[Fields_Name[x]] == "N" -- System.Int32 (FieldDigs[x] == 0) / System.Decimal (FieldDigs[x] != 0) + // loadedScript.fieldsType[Fields_Name[x]] == "F" -- System.Double + // loadedScript.fieldsType[Fields_Name[x]] == "C" -- System.String + // loadedScript.fieldsType[Fields_Name[x]] == def -- System.String + }; + // end read dbf + + CheckNeededFields(Fields_Name); + + int currentPosition = 100; + int lines = 0; + Console.WriteLine("Read data..."); + while (currentPosition < shapeFileLength) + { + // Read Shape + int recordStart = currentPosition; + int recordNumber = readIntBig(shapeFileData, recordStart); + int contentLength = readIntBig(shapeFileData, recordStart + 4); + int recordContentStart = recordStart + 8; + + TLine line = new TLine(); + int recordShapeType = readIntLittle(shapeFileData, recordContentStart); + line.box = new Double[4]; + line.box[0] = readDoubleLittle(shapeFileData, recordContentStart + 4); + line.box[1] = readDoubleLittle(shapeFileData, recordContentStart + 12); + line.box[2] = readDoubleLittle(shapeFileData, recordContentStart + 20); + line.box[3] = readDoubleLittle(shapeFileData, recordContentStart + 28); + line.numParts = readIntLittle(shapeFileData, recordContentStart + 36); + line.parts = new int[line.numParts]; + line.numPoints = readIntLittle(shapeFileData, recordContentStart + 40); + line.points = new PointF[line.numPoints]; + int partStart = recordContentStart + 44; + for (int i = 0; i < line.numParts; i++) + { + line.parts[i] = readIntLittle(shapeFileData, partStart + i * 4); + } + int pointStart = recordContentStart + 44 + 4 * line.numParts; + for (int i = 0; i < line.numPoints; i++) + { + line.points[i] = new PointF(0, 0); + line.points[i].X = (float)readDoubleLittle(shapeFileData, pointStart + (i * 16)); + line.points[i].Y = (float)readDoubleLittle(shapeFileData, pointStart + (i * 16) + 8); + }; + // move to next shape file record + currentPosition = recordStart + (4 + contentLength) * 2; + + // Read DBF + string[] FieldValues = new string[FieldsCount]; + Hashtable recordData = new Hashtable(); + for (int y = 0; y < FieldValues.Length; y++) + { + dbfFileStream.Position = dataRecord_1st_Pos + (dataRecord_Length * lines) + Fields_Offset[y]; + bb = new byte[(int)fieldsLength[Fields_Name[y]]]; + dbfFileStream.Read(bb, 0, bb.Length); + FieldValues[y] = DBFEncoding.GetString(bb).Trim().TrimEnd(new char[] { (char)0x00 }); + recordData.Add(Fields_Name[y], FieldValues[y]); + }; + + OnReadLine(line,recordData); + lines++; + }; + + dbfFileStream.Close(); + } + + /// + /// Èñï-ñÿ äëÿ string-->float + /// + private System.Globalization.CultureInfo ci = System.Globalization.CultureInfo.InstalledUICulture; + /// + /// Èñï-ñÿ äëÿ string-->float + /// + private System.Globalization.NumberFormatInfo ni; + + // REQ: ONE_WAY, SPD_LIMIT, HWY, LINK_ID, LEN, TURN_RSTRS + /// + /// Âûçûâàåì äëÿ êàæäîé ëèíèè shp ôàéëà + /// + /// ëèíèÿ + /// ïîëÿ DBF + private void OnReadLine(TLine line, Hashtable data) + { + // Inverse Latitude + if(shpf.InverseLat) + for (int i = 0; i < line.points.Length; i++) line.points[i].Y *= -1; + // Inverse Longitude + if (shpf.InverseLon) + for (int i = 0; i < line.points.Length; i++) line.points[i].X *= -1; + + linesCount++; // ñ÷åò÷èê ëèíèé â ôàéëå + segmCount += line.points.Length - 1; // ñ÷åò÷èê ñåãìåíòîâ ëèíèé â ôàéëå + uint LINE = (uint)linesCount; + + bool one_way = data[shpf.fldOneWay].ToString() == "1"; // îäíîñòîðîííåå äâèæåíèå + int link_id = int.Parse(data[shpf.fldLinkId].ToString()); // LINK_ID + + int speed_max = int.Parse(data[shpf.fldSpeedLimit].ToString()); // îãðàíè÷åíèå ñêîðîñòè íà ó÷àñòêå + int speed_normal = speed_max > 60 ? speed_max - 15 : speed_max - 10; // ñêîðîñòü äâèæåíèÿ íà ó÷àñòêå + if (speed_normal <= 0) speed_normal = 3; // åñëè ñêîðîñòü îòðèö. èëè íîëü - 3 êì/÷ (ãðóíòîâêà) + + if ((data[shpf.fldGarminType].ToString().IndexOf("HWY") >= 0) && (speed_max < 110)) speed_max = 110; // ìàãèñòðàëü/øîññå + + float dist = 0; // äëèíà ó÷àñòêà â ìåòðàõ + if ((shpf.fldLength != null) && (shpf.fldLength != String.Empty)) + dist = float.Parse(data[shpf.fldLength].ToString(), ni); // faster // read from DBF + else + for (int i = 1; i < line.points.Length; i++) // slower // calculate + { + float _lat1 = line.points[i - 1].Y; + float _lon1 = line.points[i - 1].X; + float _lat2 = line.points[i].Y; + float _lon2 = line.points[i].X; + dist += GetLengthMeters(_lat1, _lon1, _lat2, _lon2, false); + }; + + float lat1 = line.points[0].Y; + float lon1 = line.points[0].X; + float lat2 = line.points[line.points.Length - 1].Y; + float lon2 = line.points[line.points.Length - 1].X; + + uint sn = NodeByLatLon(lat1, lon1); // íà÷àëüíûé óçåë + if (sn == 0) sn = AddNode(lat1, lon1); + uint en = NodeByLatLon(lat2, lon2); // êîíå÷íûé óçåë + if (en == 0) en = AddNode(lat2, lon2); + + if (dist > maxLengthBetweenNodes) maxLengthBetweenNodes = dist; // ìàêñ äëèíà ó÷àñòêà + if (dist < maxError) dist = maxError + (float)0.00001; // íóæíî äëÿ êîððåêòíîãî ðàñ÷åòà + + float time = dist / 1000 / (float)speed_normal * 60; // âðåìÿ äâèæåíèÿ ïî ó÷àñòêó â ìèíóòàõ + float cost = dist / 1000 / (float)speed_max * 60; // îöåíî÷íîå âðåìÿ äâèæåíèÿ ïî ó÷àñòêó â ìèíóòàõ + if (time > maxTimeBetweenNodes) maxTimeBetweenNodes = time; + if (cost > maxCostBetweenNodes) maxCostBetweenNodes = cost; + + // Turn Restrictions // çàïðåòû ïîâîðîòîâ + if (!shpf.NoTurnRestrictions) + { + string tr = data[shpf.fldTurnRstr].ToString(); + if (tr.Length > 0) + { + string[] restrictions = tr.Split(new string[] { ";" }, StringSplitOptions.RemoveEmptyEntries); + foreach (string r in restrictions) + { + bool fromStart = r.Substring(0, 1) == "F"; + int lineTo_linkId = int.Parse(r.Substring(1)); + if(fromStart) + noTurns.Add(new TurnRestriction(LINE, sn, lineTo_linkId)); + else + noTurns.Add(new TurnRestriction(LINE, en, lineTo_linkId)); + }; + }; + }; + + nodes[(int)sn - 1].AddLink(en, cost, dist, time, LINE, false); // äîá. èñõ. ñâÿçü â íà÷. óçåë + nodes[(int)en - 1].AddRLink(sn, cost, dist, time, LINE, false); // äîá. âõ. ñâÿçü â êîí. óçåë + if (!one_way) + { + nodes[(int)en - 1].AddLink(sn, cost, dist, time, LINE, true); // äîá. èñõ. ñâÿçü â êîí. óçåë + nodes[(int)sn - 1].AddRLink(en, cost, dist, time, LINE, true); // äîá. âõ. ñâÿçü â íà÷. óçåë + }; + + byte[] seg = BitConverter.GetBytes((ushort)(line.points.Length - 1)); // ñåãìåíòîâ â ëèíèè + byte[] pos = BitConverter.GetBytes((int)sgStr.Position); // ïîçèöèÿ ïåðâîãî ñåãìåíòà ëèíèè â ôàéëå ñåãìåíòîâ + byte one = (byte)(0 + + (one_way ? (byte)1 : (byte)0) // îäíîñòîðîíêà ? + ); + byte[] nd1 = BitConverter.GetBytes(sn); // íà÷. óç. + byte[] nd2 = BitConverter.GetBytes(en); // êîí. óç. + + // ïèøåì ëèíèþ â ôàéë + lnStr.Write(seg, 0, seg.Length); + lnStr.Write(pos, 0, pos.Length); + lnStr.WriteByte(one); + lnStr.Write(nd1, 0, nd1.Length); + lnStr.Write(nd2, 0, nd2.Length); + lnStr.Flush(); + + byte[] linkid = BitConverter.GetBytes(link_id); // LINK_ID + liStr.Write(linkid, 0, linkid.Length); // ïèøåì LINK_ID + + // ïèøåì tmc êîä + if ((shpf.fldTMC != null) && (shpf.fldTMC != String.Empty)) // ïèøåì TMC + { + // @E0+000+00000;@E0-000-00000; + string tmc = data[shpf.fldTMC].ToString(); + bool inverse = false; + ushort code = 0; + if (tmc.Length > 10) + { + tmc = tmc.Split(new string[] { ";" }, StringSplitOptions.RemoveEmptyEntries)[0]; + inverse = (tmc.IndexOf("+") > 0) && (tmc.IndexOf("-") > 0); + code = (ushort)(int.Parse(tmc.Substring(8))); + }; + tmcStr.WriteByte(inverse ? (byte)1 : (byte)0); + byte[] btw = BitConverter.GetBytes(code); + tmcStr.Write(btw,0,btw.Length); + }; + + // ïèøåì lines names + if ((shpf.fldName != null) && (shpf.fldName != String.Empty) && (writeLinesNamesFile)) + { + string nam = data[shpf.fldName].ToString(); + byte[] btw = System.Text.Encoding.GetEncoding(1251).GetBytes(nam + "\r\n"); + lnmsStr.Write(btw, 0, btw.Length); + }; + + // ñîõðàíÿåì RGNode + if((shpf.fldRGNODE != null) && (shpf.fldRGNODE != String.Empty)) + { + string val = data[shpf.fldRGNODE].ToString(); + if(val.Length > 0) + { + bool inner = val.IndexOf("I") >= 0; + bool outer = val.IndexOf("O") >= 0; + bool begin = val.IndexOf("F") >= 0; + int len = 1; + int id = 0; int number = 0; + while (int.TryParse(val.Substring(1, len++), out id)) number = id; + TRGNode rgn = new TRGNode(begin ? sn : en, inner, outer, number, val, begin ? lat1 : lat2, begin ? lon1 : lon2); + rgNodes.Add(rgn); + }; + }; + + // ïèøåì ñåãìåíòû ëèíèè + byte[] lno = BitConverter.GetBytes(LINE); // íîìåð ëèíèè + for (int i = 1; i < line.points.Length; i++) + { + byte[] sno = BitConverter.GetBytes((ushort)i); + byte[] lt0 = BitConverter.GetBytes((Single)line.points[i - 1].Y); + byte[] ln0 = BitConverter.GetBytes((Single)line.points[i - 1].X); + byte[] lt1 = BitConverter.GetBytes((Single)line.points[i].Y); + byte[] ln1 = BitConverter.GetBytes((Single)line.points[i].X); + float k = ((Single)line.points[i].X - (Single)line.points[i - 1].X) / (line.points[i].Y - line.points[i-1].Y); + byte[] ka = BitConverter.GetBytes((Single)k); + float b = line.points[i - 1].X - k * line.points[i - 1].Y; + byte[] ba = BitConverter.GetBytes((Single)b); + + sgStr.Write(lno, 0, lno.Length); + sgStr.Write(sno, 0, sno.Length); + sgStr.Write(lt0, 0, lt0.Length); + sgStr.Write(ln0, 0, ln0.Length); + sgStr.Write(lt1, 0, lt1.Length); + sgStr.Write(ln1, 0, ln1.Length); + sgStr.Write(ka, 0, ka.Length); + sgStr.Write(ba, 0, ba.Length); + sgStr.Flush(); + }; + + Console.SetCursorPosition(0, Console.CursorTop - 1); + Console.WriteLine("Lines/Segments/Nodes/NoTurns found: " + String.Format("{0}/{1}/{2}/{3}", new object[] { linesCount, segmCount, nodes.Count, noTurns.Count })); + } + + /// + /// Äîáàâëÿåì óçåë â ñïèñîê + /// + /// øèðîòà + /// äîëãîòà + /// Íîìåð óçëà + public uint AddNode(float lat, float lon) + { + nodes.Add(new TNode((uint)nodes.Count + 1, lat, lon)); + return (uint)nodes.Count; + } + + /// + /// Íàõîäèì óçåë â ñïèñêå + /// + /// øèðîòà + /// äîëãîòà + /// Íîìåð óçëà (åñëè 0 - íå ñóù) + public uint NodeByLatLon(float lat, float lon) + { + uint res = 0; + for (int i = 0; i < nodes.Count; i++) + if ((nodes[i].lat == lat) && (nodes[i].lon == lon)) + { + res = nodes[i].node; + break; + }; + return res; + } + + /// + /// Ìåòîä äëÿ ÷òåíèÿ shp ôàéëà + /// + /// + /// + /// + private int readIntBig(byte[] data, int pos) + { + byte[] bytes = new byte[4]; + bytes[0] = data[pos]; + bytes[1] = data[pos + 1]; + bytes[2] = data[pos + 2]; + bytes[3] = data[pos + 3]; + Array.Reverse(bytes); + return BitConverter.ToInt32(bytes, 0); + } + + /// + /// Ìåòîä äëÿ ÷òåíèÿ shp ôàéëà + /// + /// + /// + /// + private int readIntLittle(byte[] data, int pos) + { + byte[] bytes = new byte[4]; + bytes[0] = data[pos]; + bytes[1] = data[pos + 1]; + bytes[2] = data[pos + 2]; + bytes[3] = data[pos + 3]; + return BitConverter.ToInt32(bytes, 0); + } + + /// + /// Ìåòîä äëÿ ÷òåíèÿ shp ôàéëà + /// + /// + /// + /// + private double readDoubleLittle(byte[] data, int pos) + { + byte[] bytes = new byte[8]; + bytes[0] = data[pos]; + bytes[1] = data[pos + 1]; + bytes[2] = data[pos + 2]; + bytes[3] = data[pos + 3]; + bytes[4] = data[pos + 4]; + bytes[5] = data[pos + 5]; + bytes[6] = data[pos + 6]; + bytes[7] = data[pos + 7]; + return BitConverter.ToDouble(bytes, 0); + } + + /// + /// Ðàññ÷èòûâàåì äëèíó â ìåòðàõ îò òî÷êè äî òî÷êè + /// + /// A lat + /// A lon + /// B lat + /// B lon + /// Radians or Degrees + /// length in meters + private static float GetLengthMeters(double StartLat, double StartLong, double EndLat, double EndLong, bool radians) + { + return RMGraph.GetLengthMeters(StartLat, StartLong, EndLat, EndLong, radians); + } + } + + /// + /// Ìîäóëü ðàñ÷åòà ìàðøðóòîâ ãðàôà + /// ïî Àëãîðèòìàì Äåéêñòðû, Äåéêñòðû(reversed) è A* (A* rev) + /// + public class RMGraph + { + /// + /// Êîãäà ïîäãðóæàòü ñåãìåíòû ëèíèé â ïàìÿòü + /// + public enum SegmentsInMemoryPreLoad: byte + { + /// + /// Ñåãìåíòû ëèíèé çàãðóùàþòñÿ â ïàìÿòü + /// + inMemoryCalculations, + /// + /// Ñåãìåíòû ëèíèé íå çàãðóæàþòñÿ â ïàìÿòü, + /// à èäåò ðàáîòà ñ ôàéëîì íà äèñêå + /// + onDiskCalculations, + } + + + // çàãîëîâêè ôàéëîâ + private static byte[] RMGRAF2 = new byte[] { 0x52, 0x4D, 0x47, 0x52, 0x41, 0x46, 0x32 }; + private static byte[] RMGRAF3 = new byte[] { 0x52, 0x4D, 0x47, 0x52, 0x41, 0x46, 0x33 }; + private static byte[] RMINDEX = new byte[] { 0x52, 0x4D, 0x49, 0x4E, 0x44, 0x45, 0x58 }; + private static byte[] RMLINES = new byte[] { 0x52, 0x4D, 0x4C, 0x49, 0x4E, 0x45, 0x53 }; + private static byte[] RMSEGMENTS = new byte[] { 0x52, 0x4D, 0x53, 0x45, 0x47, 0x4D, 0x45, 0x4E, 0x54, 0x53 }; + private static byte[] RMPOINTNLL0 = new byte[] { 0x52, 0x4D, 0x50, 0x4F, 0x49, 0x4E, 0x54, 0x4E, 0x4C, 0x4C, 0x30 }; + private static byte[] RMPOINTNLL1 = new byte[] { 0x52, 0x4D, 0x50, 0x4F, 0x49, 0x4E, 0x54, 0x4E, 0x4C, 0x4C, 0x31 }; + private static byte[] RMLINKIDS = new byte[] { 0x52, 0x4D, 0x4C, 0x49, 0x4E, 0x4B, 0x49, 0x44, 0x53 }; + private static byte[] RMTURNRSTR = new byte[] { 0x52, 0x4D, 0x54, 0x55, 0x52, 0x4E, 0x52, 0x53, 0x54, 0x52 }; + private static byte[] RMEXTCOSTS = new byte[] { 0x52, 0x4D, 0x45, 0x58, 0x54, 0x43, 0x4F, 0x53, 0x54, 0x53 }; + + private const byte line_record_length = 15; + private const byte segm_record_length = 30; + + /// + /// Çàãðóæàòü ñåãìåíòû ëèíèé â ïàìÿòü èëè íåò + /// + private SegmentsInMemoryPreLoad inMemSeg = SegmentsInMemoryPreLoad.inMemoryCalculations; + /// + /// Çàãðóæàòü ñåãìåíòû ëèíèé â ïàìÿòü èëè íåò + /// + public SegmentsInMemoryPreLoad PreLoadedLineSegments { get { return inMemSeg; } } + + /// + /// Ñòðîèì ïóòü îò îáðàòíîãî? + /// + private bool calcReversed = false; + /// + /// Ñòðîèì ïóòü îò îáðàòíîãî? + /// èñï-ñÿ äëÿ ïóòè ÈÇ ÌÍÎÃÈÕ â ÎÄÍÓ (x[] --> y) + /// + public bool CalcReversed { get { return calcReversed; } } + + /// + /// Êðèòåðèé îïòèìèçàöèè ìàðøðóòà + /// + private MinimizeBy minBy = MinimizeBy.Cost; + /// + /// Êðèòåðèé îïòèìèçàöèè ìàðøðóòà + /// + public MinimizeBy MinimizeRouteBy { get { return minBy; } set { minBy = value; } } + + /// + /// Ìàêñèìàëüíàÿ äëèíà ìåæäó óçëàìè ãðàôà + /// + private Single maxDistBetweenNodes = 0; + /// + /// Ìàêñèìàëüíàÿ äëèíà ìåæäó óçëàìè ãðàôà + /// + public Single MaxDistanceBetweenNodes { get { return maxDistBetweenNodes; } } + + /// + /// Ìàêñèìàëüíàÿ îøèáêà äëÿ ðàñ÷åòîâ (èñï-ñÿ äëÿ îïðåäåëåíèÿ íåçàïîëíåííûõ êëåòîê) + /// + private const Single maxError = (Single)1e-6; + /// + /// Ìàêñèìàëüíîå çíà÷åíèå îöåíêè, áîëüøå êîòîðîãî îöåíêà ÿâëÿåòñÿ áåñêîíå÷íîé + /// + private const Single maxValue = (Single)1e+30; + + /// + /// Ñìåùåíèå ñëåäóþùåãî áëèæàéøåãî óçëà â ìàòðèöå îòíîñèòåëüíî íà÷àëà ýëåìåíòà ìàññèâà + /// + private const byte nextOffset = 0; + /// + /// Ñìåùåíèå îöåíêè ïóòè îòíîñèòåëüíî íà÷àëà ýëåìåíòà ìàññèâà + /// + private const byte costOffset = 4; + /// + /// Ñìåùåíèå äëèíû ïóòè îòíîñèòåëüíî íà÷àëà ýëåìåíòà ìàññèâà + /// + private const byte distOffset = 8; + /// + /// Ñìåùåíèå âðåìåíè â ïóòè îòíîñèòåëüíî íà÷àëà ýëåìåíòà ìàññèâà + /// + private const byte timeOffset = 12; + /// + /// Ñìåùåíèå ëèíèè äî òî÷êè + /// + private const byte lineOffset = 16; + /// + /// Ñìåùåíèå ðåâåðñà ëèíèè äî òî÷êè + /// + private const byte revOffset = 20; + + + /// + /// Ðàçìåð ÿ÷åéêè ãðàôà + /// + private const int vtGraphElemLength = 4 + 4 + 4 + 4 + 4 + 1; // next_node cost dist time line rev + + /// + /// Ðàçìåð ÿ÷åéêè âåêòîðà + /// + private const int vtArrElemLength = 4 + 4 + 4 + 4; // next_node cost dist time + + /// + ///  ïàìÿòè ëè ãðàô èëè â ôàéëå + /// + private bool inMemory = false; + + /// + /// ×èñëî óçëîâ â ãðàôå + /// + private int size = 0; + /// + /// ×èñëî òî÷åê â ãðàôå + /// + private int lines = 0; + /// + /// ×èñëî ñåãìåíòîâ â ãðàôå + /// + private int segments = 0; + + /// + /// Óêàçàòåëü íà ôàéë ãðàôà + /// + private Stream graph_str = null; + /// + /// Óêàçàòåëü íà èíâåðñíûé ôàéë ãðàôà + /// + private Stream graphR_str = null; + /// + /// Óêàçàòåëü íà èíäåêñíûé ôàéë ãðàôà + /// + private Stream index_str = null; + /// + /// Óêàçàòåëü íà èíäåêñíûé ôàéë èíâåðñíîãî ãðàôà + /// + private Stream indexR_str = null; + /// + /// Óêàçàòåëü íà ôàéë ëèíèé + /// + private Stream lines_str = null; + /// + /// Óêàçàòåëü íà ôàéë ñåãìåíòîâ + /// + private Stream segm_str = null; + /// + /// Óêàçàòåëü íà ôàéë êîîðäèíàò ãðàôà + /// + private Stream geo_str = null; + /// + /// Óêàçàòåëü íà èíäåêñíûé ôàéë êîîðäèíàò ãðàôà + /// + private Stream geoll_str = null; + + /// + /// Îòêðûòûé âåêòîð, ñîäåðæàùèé èíôîðìàöèþ î âñåõ êîíå÷íûéõ òî÷êàõ (óçëàõ) è ìàðøðóòàõ + /// + private Stream vector_str = null; + + /// + /// Èìÿ ôàéëà ãðàôà + /// + private string fileName = null; + /// + /// Ïðåôèêñ èìåí ôàéëà ãðàôà + /// + private string fileMain = null; + + /// + /// ×èñëî óçëîâ â ãðàôå + /// + public int NodesCount { get { return size; } } + /// + /// ×èñëî ëèíèé â ãðàôå + /// + public int LinesCount { get { return lines; } } + /// + /// Îáùåå ÷èñëî ñåãìåíòîâ â ãðàôå + /// + public int SegmentsCount { get { return segments; } } + + /// + /// Private only + /// + private RMGraph() { } + + /// + ///  ïàìÿòè ëè ãðàô èëè â ôàéëå + /// + public bool InMemory { get { return inMemory; } } + + /// + /// Èìÿ ôàéëà ãðàôà + /// + public string FileName { get { return fileName; } } + + /// + /// Èíôîðìàöèÿ î ïîïðàâêàõ cost äëÿ ðàñ÷åòà ìàðøðóòà (òðàôèê) + /// + private LineExtCostInfo[] extCostInfo = null; + + /// + /// Èñïîëüçóåòñÿ ëè âíåøíÿÿ ïîïðàâî÷íàÿ èíôîðìàöèÿ äëÿ îöåíêè ïóòè (òðàôèê) + /// + public bool ExternalCostInfoUsed { get { return extCostInfo != null && extCostInfo.Length > 0; } } + + /// + /// Èíôîðìàöèÿ î ïîïðàâêàõ time äëÿ ðàñ÷åòà ìàðøðóòà (òðàôèê) + /// + private LineExtCostInfo[] extTimeInfo = null; + + /// + /// Èñïîëüçóåòñÿ ëè âíåøíÿÿ ïîïðàâî÷íàÿ èíôîðìàöèÿ äëÿ âðåìåíè â ïóòè (òðàôèê) + /// + public bool ExternalTimeInfoUsed { get { return extTimeInfo != null && extTimeInfo.Length > 0; } } + + /// + ///  òå÷åíèè êàêîãî âðåìåíè îò íà÷àëà äâèæåíèÿ èñïîëüçóåòñÿ + /// âíåøíÿÿ èíôîðìàöèÿ î äîáàâî÷íîé îöåíêè ïåðåäâèæåíèÿ äëÿ + /// ïîñòðîåíèÿ ìàðøðóòà (èíôîðìàöèÿ î òðàôèêå èñïîëüçóåòñÿ + /// â ïåðâûå extCostTimeLimit ìèíóò ïóòè) + /// + private int extCostTimeLimit = 25; + + /// + ///  òå÷åíèè êàêîãî âðåìåíè îò íà÷àëà äâèæåíèÿ èñïîëüçóåòñÿ + /// âíåøíÿÿ èíôîðìàöèÿ î äîáàâî÷íîé îöåíêè ïåðåäâèæåíèÿ äëÿ + /// ïîñòðîåíèÿ ìàðøðóòà (èíôîðìàöèÿ î òðàôèêå èñïîëüçóåòñÿ + /// â ïåðâûå ExternalCostTimeLimit ìèíóò ïóòè) + /// + public int ExternalCostTimeLimit { get { return extCostTimeLimit; } set { extCostTimeLimit = value; } } + + /// + /// Çàãðóæàåì ãðàô èç ôàéëà äëÿ ðàáîòû ñ íèì íà äèñêå + /// + /// Èìÿ ôàéëà äëÿ õðàíåíèÿ ãðàôà + /// + public static RMGraph WorkWithDisk(string fileName) + { + RMGraph v = new RMGraph(); + v.inMemSeg = SegmentsInMemoryPreLoad.onDiskCalculations; + v.fileName = fileName; + v.fileMain = fileName.Substring(0, fileName.LastIndexOf(".")); + v.graph_str = new FileStream(v.fileMain + ".graph.bin", FileMode.Open, FileAccess.Read); + byte[] bb = new byte[RMGRAF2.Length]; + v.graph_str.Read(bb, 0, bb.Length); + if (System.Text.Encoding.GetEncoding(1251).GetString(bb) != "RMGRAF2") + { + v.graph_str.Close(); + throw new IOException("Unknown file format:\r\n" + v.fileMain + ".graph.bin"); + }; + bb = new byte[4]; + v.graph_str.Read(bb, 0, 4); + v.size = BitConverter.ToInt32(bb, 0); + v.graph_str.Read(bb, 0, 4); + v.maxDistBetweenNodes = BitConverter.ToSingle(bb, 0); + + v.graphR_str = new FileStream(v.fileMain + ".graph[r].bin", FileMode.Open, FileAccess.Read); + bb = new byte[RMGRAF3.Length]; + v.graphR_str.Read(bb, 0, bb.Length); + if (System.Text.Encoding.GetEncoding(1251).GetString(bb) != "RMGRAF3") + { + v.graph_str.Close(); + v.graphR_str.Close(); + throw new IOException("Unknown file format:\r\n" + v.fileMain + ".graph[r].bin"); + }; + + v.index_str = new FileStream(v.fileMain + ".graph.bin.in", FileMode.Open, FileAccess.Read); + bb = new byte[RMINDEX.Length]; + v.index_str.Read(bb, 0, bb.Length); + if (System.Text.Encoding.GetEncoding(1251).GetString(bb) != "RMINDEX") + { + v.graph_str.Close(); + v.graphR_str.Close(); + v.index_str.Close(); + throw new Exception("Unknown file format:\r\n" + v.fileMain + ".graph.bin.in"); + }; + + v.indexR_str = new FileStream(v.fileMain + ".graph[r].bin.in", FileMode.Open, FileAccess.Read); + bb = new byte[RMINDEX.Length]; + v.indexR_str.Read(bb, 0, bb.Length); + if (System.Text.Encoding.GetEncoding(1251).GetString(bb) != "RMINDEX") + { + v.graph_str.Close(); + v.graphR_str.Close(); + v.index_str.Close(); + v.indexR_str.Close(); + throw new Exception("Unknown file format:\r\n" + v.fileMain + ".graph[r].bin.in"); + }; + + v.lines_str = new FileStream(v.fileMain + ".lines.bin", FileMode.Open, FileAccess.Read); + bb = new byte[RMLINES.Length]; + v.lines_str.Read(bb,0,bb.Length); + if (System.Text.Encoding.GetEncoding(1251).GetString(bb) != "RMLINES") + { + v.graph_str.Close(); + v.graphR_str.Close(); + v.index_str.Close(); + v.indexR_str.Close(); + v.lines_str.Close(); + throw new Exception("Unknown file format:\r\n" + v.fileMain + ".lines.bin"); + }; + bb = new byte[4]; + v.lines_str.Read(bb, 0, bb.Length); + v.lines = BitConverter.ToInt32(bb, 0); + + v.segm_str = new FileStream(v.fileMain + ".segments.bin", FileMode.Open, FileAccess.Read); + bb = new byte[RMSEGMENTS.Length]; + v.segm_str.Read(bb, 0, bb.Length); + if (System.Text.Encoding.GetEncoding(1251).GetString(bb) != "RMSEGMENTS") + { + v.graph_str.Close(); + v.graphR_str.Close(); + v.index_str.Close(); + v.indexR_str.Close(); + v.lines_str.Close(); + v.segm_str.Close(); + throw new Exception("Unknown file format:\r\n" + v.fileMain + ".segments.bin"); + }; + bb = new byte[4]; + v.segm_str.Read(bb, 0, bb.Length); + v.segments = BitConverter.ToInt32(bb, 0); + + ////////// + + v.geo_str = new FileStream(v.fileMain + ".graph.geo", FileMode.Open, FileAccess.Read); + byte[] ba = new byte[RMPOINTNLL0.Length]; + v.geo_str.Read(ba, 0, ba.Length); + if (System.Text.Encoding.GetEncoding(1251).GetString(ba) != "RMPOINTNLL0") + { + v.graph_str.Close(); + v.graphR_str.Close(); + v.index_str.Close(); + v.indexR_str.Close(); + v.lines_str.Close(); + v.segm_str.Close(); + v.geo_str.Close(); + throw new IOException("Unknown file format:\r\n" + v.fileMain + ".graph.geo"); + }; + + v.geoll_str = new FileStream(v.fileMain + ".graph.geo.ll", FileMode.Open, FileAccess.Read); + ba = new byte[RMPOINTNLL1.Length]; + v.geoll_str.Read(ba, 0, ba.Length); + if (System.Text.Encoding.GetEncoding(1251).GetString(ba) != "RMPOINTNLL1") + { + v.graph_str.Close(); + v.graphR_str.Close(); + v.index_str.Close(); + v.indexR_str.Close(); + v.lines_str.Close(); + v.segm_str.Close(); + v.geo_str.Close(); + throw new IOException("Unknown file format:\r\n" + v.fileMain + ".graph.geo.ll"); + }; + + return v; + } + + /// + /// Çàãðóæàåì ãðàô èç ôàéëà â ïàìÿòü äëÿ ðàáîòû ñ íèì + /// + /// Èìÿ ôàéëà + /// + public static RMGraph LoadToMemory(string fileName) + { + return LoadToMemory(fileName, SegmentsInMemoryPreLoad.inMemoryCalculations); + } + + /// + /// Çàãðóæàåì ãðàô èç ôàéëà â ïàìÿòü äëÿ ðàáîòû ñ íèì + /// + /// + /// + /// + public static RMGraph LoadToMemory(string fileName, SegmentsInMemoryPreLoad preload) + { + RMGraph v = new RMGraph(); + v.inMemSeg = preload; + v.fileName = fileName; + v.fileMain = fileName.Substring(0, fileName.LastIndexOf(".")); + v.inMemory = true; + v.graph_str = new MemoryStream(); + + FileStream fs = new FileStream(v.fileMain + ".graph.bin", FileMode.Open, FileAccess.Read); + byte[] block = new byte[8192]; + int read = 0; + while ((read = fs.Read(block, 0, 8192)) > 0) + v.graph_str.Write(block, 0, read); + fs.Close(); + + v.graph_str.Position = 0; + byte[] bb = new byte[RMGRAF2.Length]; + v.graph_str.Read(bb, 0, bb.Length); + if (System.Text.Encoding.GetEncoding(1251).GetString(bb) != "RMGRAF2") + { + v.graph_str.Close(); + throw new IOException("Unknown file format:\r\n" + v.fileMain + ".graph.bin"); + }; + + v.graph_str.Position = RMGRAF2.Length; + v.graph_str.Read(block, 0, 4); + v.size = BitConverter.ToInt32(block, 0); + v.graph_str.Read(block, 0, 4); + v.maxDistBetweenNodes = BitConverter.ToSingle(block, 0); + + v.graphR_str = new MemoryStream(); + fs = new FileStream(v.fileMain + ".graph[r].bin", FileMode.Open, FileAccess.Read); + block = new byte[8192]; + read = 0; + while ((read = fs.Read(block, 0, 8192)) > 0) + v.graphR_str.Write(block, 0, read); + fs.Close(); + + v.graphR_str.Position = 0; + bb = new byte[RMGRAF3.Length]; + v.graphR_str.Read(bb, 0, bb.Length); + if (System.Text.Encoding.GetEncoding(1251).GetString(bb) != "RMGRAF3") + { + v.graph_str.Close(); + v.graphR_str.Close(); + throw new IOException("Unknown file format:\r\n" + v.fileMain + ".graph[r].bin"); + }; + + v.index_str = new MemoryStream(); + fs = new FileStream(v.fileMain + ".graph.bin.in", FileMode.Open, FileAccess.Read); + block = new byte[8192]; + read = 0; + while ((read = fs.Read(block, 0, 8192)) > 0) + v.index_str.Write(block, 0, read); + fs.Close(); + + v.index_str.Position = 0; + bb = new byte[RMINDEX.Length]; + v.index_str.Read(bb, 0, bb.Length); + if (System.Text.Encoding.GetEncoding(1251).GetString(bb) != "RMINDEX") + { + v.graph_str.Close(); + v.graphR_str.Close(); + v.index_str.Close(); + throw new Exception("Unknown file format:\r\n" + v.fileMain + ".graph.bin.in"); + }; + + v.indexR_str = new MemoryStream(); + fs = new FileStream(v.fileMain + ".graph[r].bin.in", FileMode.Open, FileAccess.Read); + block = new byte[8192]; + read = 0; + while ((read = fs.Read(block, 0, 8192)) > 0) + v.indexR_str.Write(block, 0, read); + fs.Close(); + + v.indexR_str.Position = 0; + bb = new byte[RMINDEX.Length]; + v.indexR_str.Read(bb, 0, bb.Length); + if (System.Text.Encoding.GetEncoding(1251).GetString(bb) != "RMINDEX") + { + v.graph_str.Close(); + v.graphR_str.Close(); + v.index_str.Close(); + v.indexR_str.Close(); + throw new Exception("Unknown file format:\r\n" + v.fileMain + ".graph[r].bin.in"); + }; + + v.lines_str = new MemoryStream(); + fs = new FileStream(v.fileMain + ".lines.bin", FileMode.Open, FileAccess.Read); + block = new byte[8192]; + read = 0; + while ((read = fs.Read(block, 0, 8192)) > 0) + v.lines_str.Write(block, 0, read); + fs.Close(); + + v.lines_str.Position = 0; + bb = new byte[RMLINES.Length]; + v.lines_str.Read(bb, 0, bb.Length); + if (System.Text.Encoding.GetEncoding(1251).GetString(bb) != "RMLINES") + { + v.graph_str.Close(); + v.graphR_str.Close(); + v.index_str.Close(); + v.indexR_str.Close(); + v.lines_str.Close(); + throw new Exception("Unknown file format:\r\n" + v.fileMain + ".lines.bin" ); + }; + bb = new byte[4]; + v.lines_str.Read(bb, 0, bb.Length); + v.lines = BitConverter.ToInt32(bb, 0); + + if (v.inMemSeg == SegmentsInMemoryPreLoad.inMemoryCalculations) + { + v.segm_str = new MemoryStream(); + fs = new FileStream(v.fileMain + ".segments.bin", FileMode.Open, FileAccess.Read); + block = new byte[8192]; + read = 0; + while ((read = fs.Read(block, 0, 8192)) > 0) + v.segm_str.Write(block, 0, read); + fs.Close(); + } + else + { + v.segm_str = new FileStream(v.fileMain + ".segments.bin", FileMode.Open, FileAccess.Read); + }; + + + v.segm_str.Position = 0; + bb = new byte[RMSEGMENTS.Length]; + v.segm_str.Read(bb, 0, bb.Length); + if (System.Text.Encoding.GetEncoding(1251).GetString(bb) != "RMSEGMENTS") + { + v.graph_str.Close(); + v.graphR_str.Close(); + v.index_str.Close(); + v.indexR_str.Close(); + v.lines_str.Close(); + v.segm_str.Close(); + throw new Exception("Unknown file format:\r\n" + v.fileMain + ".segments.bin"); + }; + bb = new byte[4]; + v.segm_str.Read(bb, 0, bb.Length); + v.segments = BitConverter.ToInt32(bb, 0); + + ////////// + + v.geo_str = new MemoryStream(); + v.geoll_str = new MemoryStream(); + + fs = new FileStream(v.fileMain + ".graph.geo", FileMode.Open, FileAccess.Read); + block = new byte[8192]; + read = 0; + while ((read = fs.Read(block, 0, 8192)) > 0) + v.geo_str.Write(block, 0, read); + fs.Close(); + + v.geo_str.Position = 0; + byte[] ba = new byte[RMPOINTNLL0.Length]; + v.geo_str.Read(ba, 0, ba.Length); + if (System.Text.Encoding.GetEncoding(1251).GetString(ba) != "RMPOINTNLL0") + { + v.graph_str.Close(); + v.graphR_str.Close(); + v.index_str.Close(); + v.indexR_str.Close(); + v.lines_str.Close(); + v.segm_str.Close(); + v.geo_str.Close(); + throw new IOException("Unknown file format:\r\n" + v.fileMain + ".graph.geo"); + }; + + fs = new FileStream(v.fileMain + ".graph.geo.ll", FileMode.Open, FileAccess.Read); + block = new byte[8192]; + read = 0; + while ((read = fs.Read(block, 0, 8192)) > 0) + v.geoll_str.Write(block, 0, read); + fs.Close(); + + v.geoll_str.Position = 0; + ba = new byte[RMPOINTNLL1.Length]; + v.geoll_str.Read(ba, 0, ba.Length); + if (System.Text.Encoding.GetEncoding(1251).GetString(ba) != "RMPOINTNLL1") + { + v.graph_str.Close(); + v.graphR_str.Close(); + v.index_str.Close(); + v.indexR_str.Close(); + v.lines_str.Close(); + v.segm_str.Close(); + v.geo_str.Close(); + v.geoll_str.Close(); + throw new IOException("Unknown file format:\r\n" + v.fileMain + ".graph.geo.ll"); + }; + + return v; + } + + /// + /// Âûçâàòü ïîñëå îêîí÷àíèÿ ðàáîòû ñ ãðàôîì äëÿ âûñâîáîæäåíèÿ âñåõ ðåñóðñîâ + /// + public void Close() + { + graph_str.Close(); + graph_str = null; + + index_str.Close(); + index_str = null; + + graphR_str.Close(); + graphR_str = null; + + indexR_str.Close(); + indexR_str = null; + + lines_str.Close(); + lines_str = null; + + segm_str.Close(); + segm_str = null; + + geo_str.Close(); + geo_str = null; + + geoll_str.Close(); + geoll_str = null; + } + + ~RMGraph() + { + if (graph_str != null) Close(); + } + + /// + /// Çàãðóæàåì ôàéë äîáàâî÷íûõ îöåíîê äëÿ ðàñ÷åòà ìàðøðóòà (òðàôèê) + /// + /// + public void LoadExternalCostInfoFile(string fileName) + { + FileStream fs = new FileStream(fileName, FileMode.Open, FileAccess.Read); + byte[] ba = new byte[RMEXTCOSTS.Length]; + fs.Read(ba, 0, ba.Length); + if (System.Text.Encoding.GetEncoding(1251).GetString(ba) != "RMEXTCOSTS") + { + fs.Close(); + throw new IOException("Unknown file format:\r\n" + fileName); + }; + ba = new byte[4]; + fs.Read(ba, 0, ba.Length); + extCostInfo = new LineExtCostInfo[BitConverter.ToInt32(ba,0)]; + ba = new byte[8192]; + int i = 0; + int read = 0; + while ((read = fs.Read(ba, 0, ba.Length)) > 0) + { + int cp = 0; + while (cp < read) + { + extCostInfo[i++] = new LineExtCostInfo(BitConverter.ToSingle(ba, cp), BitConverter.ToSingle(ba, cp + 4)); + cp += 8; + }; + }; + fs.Close(); + } + + /// + /// Óäàëÿåì èíôîðìàöèþ î äîáàâî÷íûõ îöåíêàõ äëÿ ðàñ÷åòà ìàðøðóòà (òðàôèê) + /// + public void RemoveExternalCostInfo() + { + extCostInfo = null; + } + + /// + /// Çàãðóæàåì ôàéë äîáàâî÷íîãî âðåìåíè äëÿ ðàñ÷åòà ìàðøðóòà (òðàôèê) + /// + /// + public void LoadExternalTimeInfoFile(string fileName) + { + FileStream fs = new FileStream(fileName, FileMode.Open, FileAccess.Read); + byte[] ba = new byte[RMEXTCOSTS.Length]; + fs.Read(ba, 0, ba.Length); + if (System.Text.Encoding.GetEncoding(1251).GetString(ba) != "RMEXTCOSTS") + { + fs.Close(); + throw new IOException("Unknown file format:\r\n" + fileName); + }; + ba = new byte[4]; + fs.Read(ba, 0, ba.Length); + extTimeInfo = new LineExtCostInfo[BitConverter.ToInt32(ba, 0)]; + ba = new byte[8192]; + int i = 0; + int read = 0; + while ((read = fs.Read(ba, 0, ba.Length)) > 0) + { + int cp = 0; + while (cp < read) + { + extTimeInfo[i++] = new LineExtCostInfo(BitConverter.ToSingle(ba, cp), BitConverter.ToSingle(ba, cp + 4)); + cp += 8; + }; + }; + fs.Close(); + } + + /// + /// Óäàëÿåì èíôîðìàöèþ î äîáàâî÷íîì âðåìåíè äëÿ ðàñ÷åòà ìàðøðóòà (òðàôèê) + /// + public void RemoveExternalTimeInfo() + { + extTimeInfo = null; + } + + /// + /// Èùåì çàäàííûé óçåë â ãðàôå è âîçâðàùàåì èíôîðìàöèþ î áëèæàéøèõ òî÷êàõ + /// + /// Óçåë êîòîðûé íàäî íàéòè + /// Ìàññèâ óçëîâ â êîòîðûå ìîæíî äîáðàòüñÿ + /// Îöåíêà ïóòåé â êîòîðûå ìîæíî äîáðàòüñÿ + /// Äëèíû ïóòåé â êîòîðûå ìîæíî äîáðàòüñÿ + /// Âðåìÿ äâèæåíèÿ äî óçëîâ â êîòîðûå ìîæíî äîáðàòüñÿ + /// Ëèíèè ïî êîòîðûì ìîæíî äîáðàòüñÿ + /// Íàïðàâëåíèå ëèíèé ïî êîòîðûì ìîæíî äîáðàòüñÿ + /// ×èñëî áëèæàéøèõ èñõîäÿùèõ ñâÿçåé + private int SelectNode(uint i, out uint[] _n, out Single[] _c, out Single[] _d, out Single[] _t, out uint[] _l, out byte[] _r) + { + index_str.Position = 4 * (i - 1) + RMINDEX.Length + 4; + byte[] ib = new byte[4]; + index_str.Read(ib, 0, ib.Length); + uint pos_in_graph = BitConverter.ToUInt32(ib, 0); + + byte nc = 0; + byte[] dd = new byte[vtGraphElemLength]; + graph_str.Position = pos_in_graph; + nc = (byte)graph_str.ReadByte(); + + _n = new uint[nc]; + _c = new Single[nc]; + _d = new Single[nc]; + _t = new Single[nc]; + _l = new uint[nc]; + _r = new byte[nc]; + + for (int x = 0; x < nc; x++) + { + graph_str.Read(dd, 0, dd.Length); + _n[x] = BitConverter.ToUInt32(dd, nextOffset); + _c[x] = BitConverter.ToSingle(dd, costOffset); + _d[x] = BitConverter.ToSingle(dd, distOffset); + _t[x] = BitConverter.ToSingle(dd, timeOffset); + _l[x] = BitConverter.ToUInt32(dd, lineOffset); + _r[x] = dd[revOffset]; + }; + + return nc; + } + + /// + /// Ïîëó÷àåì îöåíêó ïóòè èç òî÷êè (X)->Y + /// Âûçûâàåòñÿ òîëüêî ìåæäó ìåòîäàìè BeginSolve è EndSolve + /// + /// êîíå÷íàÿ òî÷êà + /// îöåíêà + private Single GetCost(uint y) + { + vector_str.Position = (y - 1) * (vtArrElemLength) + costOffset; + byte[] bb = new byte[4]; + vector_str.Read(bb, 0, 4); + Single d = BitConverter.ToSingle(bb, 0); + if (d < maxError) + return Single.MaxValue; + else + return d; + } + + /// + /// Óñòàíàâëèâàåì îöåíêó ïóòè èç òî÷êè (X)->Y + /// Âûçûâàåòñÿ òîëüêî ìåæäó ìåòîäàìè BeginSolve è EndSolve + /// + /// êîíå÷íàÿ òî÷êà + private void SetCost(uint y, Single cost) + { + vector_str.Position = (y - 1) * (vtArrElemLength) + costOffset; + byte[] bb = BitConverter.GetBytes(cost); + vector_str.Write(bb, 0, 4); + } + + /// + /// Óñòàíàâëèâàåì ïðåäøåñòâóþùóþ òî÷êó previous ïóòè èç (X)->Y + /// Âûçûâàåòñÿ òîëüêî ìåæäó ìåòîäàìè BeginSolve è EndSolve + /// + /// êîíå÷íàÿ òî÷êà + /// êîíå÷íàÿ òî÷êà - 1 + private void SetPrev(uint y, uint previous) + { + vector_str.Position = (y - 1) * (vtArrElemLength) + nextOffset; + byte[] bb = BitConverter.GetBytes(previous); + vector_str.Write(bb, 0, 4); + } + + /// + /// Ïîëó÷àåì ïðåäøåñòâóþùóþ òî÷êó ïóòè èç (X)->Y + /// Âûçûâàåòñÿ òîëüêî ìåæäó ìåòîäàìè BeginSolve è EndSolve + /// + /// êîíå÷íàÿ òî÷êà + /// êîíå÷íàÿ òî÷êà - 1 + private uint GetPrev(uint y) + { + vector_str.Position = (y - 1) * (vtArrElemLength) + nextOffset; + byte[] bb = new byte[4]; + vector_str.Read(bb, 0, 4); + return BitConverter.ToUInt32(bb, 0); + } + + /// + /// Ïîëó÷àåì ïàìÿòü èëè ìåñòî íà äèñêå, à òàêæå + /// ïîäãîòàâëèâàåì ðåñóðñû äëÿ íàõîæäåíèÿ ïóòè + /// Âûçûâàåòñÿ ïåðåä ìåòîäîì Solve è âñåìè Get... ìåòîäàìè + /// + /// Ñ÷èòàåì â ïàìÿòè èëè íà äèñêå + /// fileName? åñëè inMemory = false + public void BeginSolve(bool inMemory, string fileName) + { + if (vector_str != null) vector_str.Close(); + + if ((!inMemory) && (fileName == null)) throw new IOException("filename not specified"); + + if (inMemory) + vector_str = new MemoryStream(); + else + vector_str = new FileStream(fileName, FileMode.Create); + + vector_str.SetLength(this.size * (vtArrElemLength)); + } + + /// + /// Âûñâîáîæäàåì ïàìÿòü è ðåñóðñû ïîñëå íàõîæäåíèÿ ïóòè + /// Âûçûâàåòñÿ ïîñëå ìåòîäà Solve è âñåõ Get... ìåòîäîâ + /// + public void EndSolve() + { + if (vector_str == null) throw new Exception("Call BeginSolve first"); + vector_str.Close(); + vector_str = null; + } + + /// + /// Äîáàâëåíèå ïîïðàâêè íà îöåíêó èç âíåøíåãî èñòî÷íèêà + /// + /// Íà÷àëî îòðåçêà + /// Êîíåö îòðåçêà + /// Íîìåð ëèíèè + ///  êàêîì íàïðàâëåíèè äâèãàåìÿ + /// Ñêîëüêî âðåìåíè ïðîøëî îò íà÷àëà äâèæåíèÿ + /// ïîïðàâêà îöåíêè + private Single AddExternalCostError(uint x, uint y, uint line, bool reverse, Single elapsed) + { + if ((extCostInfo == null) || (extCostInfo.Length == 0)) return 0; + if (elapsed > extCostTimeLimit) return 0; + return reverse ? extCostInfo[line - 1].costR : extCostInfo[line - 1].costN; + } + + /// + /// Äîáàâëåíèå ïîïðàâêè íà âðåìÿ èç âíåøíåãî èñòî÷íèêà äëÿ îòðåçêà + /// + /// Íà÷àëî îòðåçêà + /// Êîíåö îòðåçêà + /// Íîìåð ëèíèè + ///  êàêîì íàïðàâëåíèè äâèãàåìÿ + /// Ñêîëüêî âðåìåíè ïðîøëî îò íà÷àëà äâèæåíèÿ + /// ïîïðàâêà âðåìåíè + private Single AddExternalTimeDelay(uint x, uint y, uint line, bool reverse, Single elapsed) + { + if ((extTimeInfo == null) || (extTimeInfo.Length == 0)) return 0; + if (elapsed > extCostTimeLimit) return 0; + return reverse ? extTimeInfo[line - 1].costR : extTimeInfo[line - 1].costN; + } + + /// + /// Ðàñ÷åò ïóòè èç òî÷åê starts â òî÷êó end + /// + /// Òî÷êè ñòàðòà + /// Òî÷êà íàçíà÷åíèÿ + public void SolveDeikstra(uint[] starts, uint end) + { + Stream tmp_g = graph_str; + Stream tmp_i = index_str; + graph_str = graphR_str; + index_str = indexR_str; + + SolveDeikstra(end, starts, true); + + graph_str = tmp_g; + index_str = tmp_i; + } + + /// + /// Ðàñ÷åò ïóòè èç òî÷êè start âî âñå èëè â êàæäóþ èç ends + /// + /// Òî÷êà ñòàðòà + /// Òî÷êè íàçíà÷åíèÿ + public void SolveDeikstra(uint start, uint[] ends) + { + SolveDeikstra(start, ends, false); + } + + /// + /// Ðàñ÷åò ïóòè èç òî÷êè start âî âñå èëè â êàæäóþ èç ends + /// + /// Òî÷êà ñòàðòà + /// Òî÷êè íàçíà÷åíèÿ + /// Èñïîëüçîâàòü íàõîæäåíèå ïóòè îò îáðàòíîãî + public void SolveDeikstra(uint start, uint[] ends, bool reversed) + { + if (vector_str == null) throw new Exception("Call BeginSolve first"); + calcReversed = reversed; + + PointF start_latlon = GetNodeLatLon(start); + + uint[] _n; Single[] _c; Single[] _d; Single[] _t; uint[] _l; byte[] _r; + + List togoList = new List(); + togoList.Add(start); + + List togoHeurist = new List(); + togoHeurist.Add(0); + + List wasList = new List(); + + List finishList = new List(); + if (ends != null) finishList.AddRange(ends); + int founded = 0; + + while (togoList.Count > 0) + { + // Áëîê îïòèìèçàöèè ((dkxce)) + // âûáèðàåì íàèáëèæàéøóþ òî÷êó ê íà÷àëó èç âñåõ êîòîðûå ïðåäñòîèò ïðîéòè ïî îöåíêå + // ìîæíî ñêàçàòü ÷òî â êàæäîé òî÷êå îïòèìàëüíûé ìàðøðóò èìåííî äëÿ ýòîé òî÷êè + float heuristValue = float.MaxValue; + uint curr_node = 0; + int index = -1; + for (int i = 0; i < togoList.Count; i++) // select closest point to yy + if (togoHeurist[i] < heuristValue) + { + heuristValue = togoHeurist[i]; + curr_node = togoList[i]; + index = i; + }; + + togoList.RemoveAt(index); // remove closest point from togoList + togoHeurist.RemoveAt(index); + + wasList.Add(curr_node); // add point to wasList + if (SelectNode(curr_node, out _n, out _c, out _d, out _t, out _l, out _r) > 0) + { + Single curr_cost_xi = start == curr_node ? 0 : GetCost(curr_node); + Single curr_dist_xi = start == curr_node ? 0 : GetRouteDistance(curr_node,curr_node); + Single curr_time_xi = start == curr_node ? 0 : GetRouteTime(curr_node,curr_node); + for (uint next_node_i = 0; next_node_i < _n.Length; next_node_i++) + { + uint next_node = _n[next_node_i]; + if (wasList.Contains(next_node)) continue; + + bool update = false; + + Single cost_from_st = curr_cost_xi + _c[next_node_i];// + CallExternalCostService(curr_node, next_node, _l[next_node_i], _r[next_node_i] == 1 ? true : false, curr_time_xi); + Single dist_from_st = curr_dist_xi + _d[next_node_i]; + Single time_from_st = curr_time_xi + _t[next_node_i];// + CallExternalTimeService(curr_node, next_node, _l[next_node_i], _r[next_node_i] == 1 ? true : false, curr_time_xi); + + int index_in_togo = togoList.IndexOf(next_node); + if (index_in_togo < 0) + { + index_in_togo = togoList.Count; + togoList.Add(next_node); + togoHeurist.Add(0); + update = true; + }; + + switch (minBy) + { + case MinimizeBy.Cost: + Single xyc = start == next_node ? 0 : GetCost(next_node); + update = update || (cost_from_st < xyc); + heuristValue = cost_from_st; + break; + case MinimizeBy.Dist: + Single xyd = start == next_node ? 0 : GetRouteDistance(next_node, next_node); + update = update || (dist_from_st < xyd); + heuristValue = dist_from_st; + break; + case MinimizeBy.Time: + Single xyt = start == next_node ? 0 : GetRouteTime(next_node, next_node); + update = update || (time_from_st < xyt); + heuristValue = time_from_st; + break; + }; + + if (update) + { + SetCost(next_node, cost_from_st); + SetPrev(next_node, curr_node); + SetRouteDistance(next_node, dist_from_st); + SetRouteTime(next_node, time_from_st); + + togoHeurist[index_in_togo] = heuristValue; + }; + }; + }; + if (finishList.Count > 0) + { + if (finishList.Contains(curr_node)) + founded++; + if (founded == finishList.Count) + togoList.Clear(); + }; + }; + + return; + } + + /// + /// Ðàñ÷åò ïóòè èç òî÷êè start â òî÷êó end + /// ïî Àëãîðèòìó A* + /// + /// Òî÷êà ñòàðòà + /// Òî÷êà êîíöà + public void SolveAstar(uint start, uint end) + { + SolveAstar(start, end, false); + } + + /// + /// Ðàñ÷åò ïóòè èç òî÷êè start â òî÷êó end îò êîíöà + /// ïî Àëãîðèòìó A* îò êîíöà + /// + /// Òî÷êà ñòàðòà + /// Òî÷êà êîíöà + public void SolveAstarRev(uint start, uint end) + { + Stream tmp_g = graph_str; + Stream tmp_i = index_str; + graph_str = graphR_str; + index_str = indexR_str; + + SolveAstar(end, start, true); + + graph_str = tmp_g; + index_str = tmp_i; + } + + // Àëãîðèòì ïîèñêà A* + // http://ru.wikipedia.org/wiki/%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%BF%D0%BE%D0%B8%D1%81%D0%BA%D0%B0_A* + /// + /// Ðàñ÷åò ïóòè èç òî÷êè start â òî÷êó end + /// ïî Àëãîðèòìó A* + /// + /// start + /// end + /// Èñïîëüçîâàòü íàõîæäåíèå ïóòè îò îáðàòíîãî + private void SolveAstar(uint start, uint end, bool reversed) + { + if (vector_str == null) throw new Exception("Call BeginSolve first"); + calcReversed = reversed; + + PointF first_node_latlon = GetNodeLatLon(start); + PointF last_node_latlon = GetNodeLatLon(end); + + uint[] _n; Single[] _c; Single[] _d; Single[] _t; uint[] _l; byte[] _r; + + float heuristValue = GetLengthMeters(first_node_latlon.Y, first_node_latlon.X, last_node_latlon.Y, last_node_latlon.X, false); + if (minBy == MinimizeBy.Time) heuristValue = heuristValue / 1000; // 60 kmph average speed + + List togoList = new List(); + togoList.Add(start); + + List togoHeurist = new List(); + togoHeurist.Add(heuristValue); + + List wasList = new List(); + + while (togoList.Count > 0) + { + float curr_heuVal = float.MaxValue; + uint curr_node = 0; + int index = -1; + for (int i = 0; i < togoList.Count; i++) // select closest point to yy + if (togoHeurist[i] < curr_heuVal) + { + curr_heuVal = togoHeurist[i]; + curr_node = togoList[i]; + index = i; + }; + + togoList.RemoveAt(index); // remove closest point from togoList + togoHeurist.RemoveAt(index); + + if (curr_node == end) return; // !!! DONE !!! // end node found + + wasList.Add(curr_node); // remove closest point from togoList + if (SelectNode(curr_node, out _n, out _c, out _d, out _t, out _l, out _r) > 0) + { + Single curr_cost_xi = start == curr_node ? 0 : GetCost(curr_node); + Single curr_dist_xi = start == curr_node ? 0 : GetRouteDistance(curr_node, curr_node); + Single curr_time_xi = start == curr_node ? 0 : GetRouteTime(curr_node, curr_node); + + for (uint next_node_i = 0; next_node_i < _n.Length; next_node_i++) + { + uint next_node = _n[next_node_i]; + if (wasList.Contains(next_node)) continue; + + bool update = false; + + Single cost_from_st = curr_cost_xi + _c[next_node_i];// + CallExternalCostService(curr_node, next_node, _l[next_node_i], _r[next_node_i] == 1 ? true : false, curr_time_xi); + Single dist_from_st = curr_dist_xi + _d[next_node_i]; + Single time_from_st = curr_time_xi + _t[next_node_i];// + CallExternalTimeService(curr_node, next_node, _l[next_node_i], _r[next_node_i] == 1 ? true : false, curr_time_xi); + + PointF next_node_latlon = GetNodeLatLon(next_node); + float next_node_dist_to_end = GetLengthMeters(next_node_latlon.Y, next_node_latlon.X, last_node_latlon.Y, last_node_latlon.X, false); + + int index_in_togo = togoList.IndexOf(next_node); + if (index_in_togo < 0) + { + index_in_togo = togoList.Count; + togoList.Add(next_node); + togoHeurist.Add(0); + update = true; + } + else + { + switch (minBy) + { + case MinimizeBy.Cost: update = cost_from_st < GetCost(next_node); break; + case MinimizeBy.Dist: update = dist_from_st < GetRouteDistance(next_node, next_node); break; + case MinimizeBy.Time: update = time_from_st < GetRouteTime(next_node, next_node); break; + }; + }; + + if (update) + { + SetCost(next_node, cost_from_st); + SetPrev(next_node, curr_node); + SetRouteDistance(next_node, dist_from_st); + SetRouteTime(next_node, time_from_st); + + if (minBy == MinimizeBy.Time) + { + float fl = time_from_st + next_node_dist_to_end / 1000; + if(float.IsNaN(fl)) + { + + }; + togoHeurist[index_in_togo] = fl; + } + else + { + float fl = dist_from_st + next_node_dist_to_end; + if (float.IsNaN(fl)) + { + + }; + togoHeurist[index_in_togo] = fl; + }; + }; + }; + }; + }; + + return; + } + + /// + /// Ïîëó÷àåì êîîðäèíàòû óçëà + /// + /// íîìåð óçëà + /// Lat Lon + public PointF GetNodeLatLon(uint node) + { + geo_str.Position = RMPOINTNLL0.Length + 4 + 8 * (node - 1); + byte[] latlon = new byte[8]; + geo_str.Read(latlon, 0, 8); + return new PointF(BitConverter.ToSingle(latlon, 4), BitConverter.ToSingle(latlon, 0)); + } + + /// + /// Ïîëó÷àåì âåêòîð ïðîìåæóòî÷íûõ òî÷åê ïóòè èç (X)->Y + /// Âûçûâàåòñÿ òîëüêî ìåæäó ìåòîäàìè BeginSolve è EndSolve + /// + /// óçåë íà÷àëà ïóòè + /// óçåë êîíöà ïóòè + /// íîìåðà ïðîìåæóòî÷íûõ óçëîâ + public uint[] GetRouteNodes(uint start, uint end) + { + uint y = calcReversed ? start : end; + + if (vector_str == null) throw new Exception("Call BeginSolve first"); + + if (y == 0) return null; // NO WAY + if (GetCost(y) == 0) return new uint[0]; // ALREADY + + uint intermediate = y; + List arr = new List(); + while (((intermediate = GetPrev(intermediate)) > 0) && (intermediate != start)) + arr.Add(intermediate); + uint[] a = arr.ToArray(); + if (this.calcReversed) return a; + + Array.Reverse(a); + return a; + } + + /// + /// Âîçðàùàåò íîìåðà ëèíèé ìàðøðóòà + /// + /// íà÷ + /// ïðîìåæ + /// êîí + /// ñïèñîê ëèíèé + public uint[] GetRouteLines(uint start, uint[] way, uint end) + { + uint[] arr = new uint[way.Length + 1]; + + uint[] _n; float[] _c; float[] _d; float[] _t; uint[] _l; byte[] _r; + + if (way.Length > 0) + { + SelectNode(start, out _n, out _c, out _d, out _t, out _l, out _r); + for (int i = 0; i < _n.Length; i++) + if (_n[i] == way[0]) arr[0] = _l[i]; + + for (int x = 1; x < way.Length; x++) + { + SelectNode(way[x - 1], out _n, out _c, out _d, out _t, out _l, out _r); + for (int i = 0; i < _n.Length; i++) + if (_n[i] == way[x]) arr[x] = _l[i]; + }; + SelectNode(way[way.Length - 1], out _n, out _c, out _d, out _t, out _l, out _r); + for (int i = 0; i < _n.Length; i++) + if (_n[i] == end) arr[arr.Length - 1] = _l[i]; + } + else + { + SelectNode(start, out _n, out _c, out _d, out _t, out _l, out _r); + for (int i = 0; i < _n.Length; i++) + if (_n[i] == end) arr[0] = _l[i]; + + }; + + return arr; + } + + /// + /// Ïîëó÷àåì âåêòîð êîîðäèíàò òî÷åê + /// + /// Íà÷àëüíàÿ òî÷êà + /// Ïðîìåæóòî÷íûå òî÷êè + /// Êîíå÷íàÿ òî÷êà + /// + public PointF[] GetRouteVector(uint start, uint[] way, uint end) + { + List ww = new List(); + ww.Add(start); + ww.AddRange(way); + ww.Add(end); + + List vec = new List(); + + uint[] _n; float[] _c; float[] _d; float[] _t; uint[] _l; byte[] _r; + ushort segments; int pos; bool oneway; uint node1; uint node2; + + for (int x = 0; x < ww.Count - 1; x++) + { + SelectNode(ww[x], out _n, out _c, out _d, out _t, out _l, out _r); + for (int i = 0; i < _n.Length; i++) + if (_n[i] == ww[x + 1]) + { + GetLine(_l[i], out segments, out pos, out oneway, out node1, out node2); + PointF[] pts = GetLineSegments(_l[i], pos, segments, _r[i] == 1, false); + vec.Add(pts[0]); + for (int si = 1; si < pts.Length - 1; si++) vec.Add(pts[si]); + if (x == (ww.Count - 2)) + vec.Add(pts[pts.Length - 1]); + }; + }; + + ww.Clear(); + + return vec.ToArray(); + } + + /// + /// Ïîëó÷àåì âåêòîð êîîðäèíàò òî÷åê ñ ïðèâÿçêîé + /// ê óçëàì è ëèíèÿì (âåðøèíàì è ðåáðàì ãðàôà) + /// äëÿ äåòàëèçàöèè è îïèñàíèÿ ìàðøðóòà + /// + /// Íà÷àëüíàÿ òî÷êà + /// Ïðîìåæóòî÷íûå òî÷êè + /// Êîíå÷íàÿ òî÷êà + /// + public PointFL[] GetRouteVectorWNL(uint start, uint[] way, uint end) + { + List ww = new List(); + ww.Add(start); + ww.AddRange(way); + ww.Add(end); + + List vec = new List(); + + uint[] _n; float[] _c; float[] _d; float[] _t; uint[] _l; byte[] _r; + ushort segments; int pos; bool oneway; uint node1; uint node2; + + for (int x = 0; x < ww.Count-1; x++) + { + SelectNode(ww[x], out _n, out _c, out _d, out _t, out _l, out _r); + for (int i = 0; i < _n.Length; i++) + if (_n[i] == ww[x+1]) + { + GetLine(_l[i], out segments, out pos, out oneway, out node1, out node2); + PointF[] pts = GetLineSegments(_l[i], pos, segments, _r[i] == 1, false); + vec.Add(new PointFL(pts[0], ww[x], _l[i])); + for (int si = 1; si < pts.Length - 1; si++) vec.Add(new PointFL(pts[si], 0, _l[i])); + if(x == (ww.Count-2)) + vec.Add(new PointFL(pts[pts.Length - 1], end, 0)); + }; + }; + + ww.Clear(); + + return vec.ToArray(); + } + + /// + /// Ïîëó÷àåì ëèíèþ ïî íîìåðó + /// + /// íîìåð ëèíèè + /// ÷èñëî ñåãìåíòîâ ëèíèè + /// ïîçèöèÿ ïåðâîãî ñåãìåíòà â ôàéëå ñåãìåíòîâ + /// îäíîñòîðîííåå äâèæåíèå + /// òî÷êà íà÷àëà ëèíèè + /// òî÷êà êîíöà ëèíèè + private void GetLine(uint line, out ushort segments, out int pos, out bool oneway, out uint nodeStart, out uint nodeEnd) + { + lines_str.Position = RMLINES.Length + 4 + line_record_length * (line - 1); + byte[] ba = new byte[15]; + lines_str.Read(ba, 0, 15); + segments = BitConverter.ToUInt16(ba, 0); + pos = BitConverter.ToInt32(ba, 2); + oneway = (ba[6] & 1) == 1; // bit mask - 0 bit + nodeStart = BitConverter.ToUInt32(ba, 7); + nodeEnd = BitConverter.ToUInt32(ba, 11); + } + + /// + /// Ïîëó÷àåì âñå îòðåçêè ëèíèè ïî íîìåðó + /// + /// íîìåð ëèíèè + /// ïîçèöèÿ ïåðâîãî ñåãìåíòà â ôàéëå ñåãìåíòîâ + /// ÷èñëî ñåãìåíòîâ â ëèíèè + /// ðàçâåðíóòü + /// íå äîáàâëÿòü ïåðâûé ýëåìåíò + /// âåêòîð ëèíèè + private PointF[] GetLineSegments(uint line, int pos, ushort segments, bool reverse, bool skip_first) + { + List arr = new List(); + + segm_str.Position = pos; + byte[] ba = new byte[segm_record_length]; + for (int i = 0; i < segments; i++) + { + segm_str.Read(ba, 0, ba.Length); + uint line_no = BitConverter.ToUInt32(ba, 0); + ushort segm = BitConverter.ToUInt16(ba, 4); + float lat0 = BitConverter.ToSingle(ba, 6); + float lon0 = BitConverter.ToSingle(ba, 10); + float lat1 = BitConverter.ToSingle(ba, 14); + float lon1 = BitConverter.ToSingle(ba, 18); + //float k = BitConverter.ToSingle(ba, 22); + //float b = BitConverter.ToSingle(ba, 26); + + if(i == 0) arr.Add(new PointF(lon0,lat0)); + arr.Add(new PointF(lon1,lat1)); + }; + if (reverse) arr.Reverse(); + if (skip_first) arr.RemoveAt(0); + return arr.ToArray(); + } + + /// + /// Ïîëó÷àåì âñå îòðåçêè ëèíèè ïî íîìåðó + /// (èñïîëüçóåòñÿ äëÿ ñîáèðàíèÿ âåêòîðà ìàðøðóòà) + /// + /// íîìåð ëèíèè + /// ðàçâåðíóòü + /// íå äîáàâëÿòü ïåðâûé ýëåìåíò + /// âåêòîð ëèíèè + private PointF[] GetLineSegments(uint line, bool reverse, bool skip_first) + { + lines_str.Position = RMLINES.Length + 4 + line_record_length * (line - 1); + byte[] ba = new byte[15]; + lines_str.Read(ba, 0, 15); + ushort segments = BitConverter.ToUInt16(ba, 0); + int pos = BitConverter.ToInt32(ba, 2); + bool oneway = ba[6] == 1; + uint node1 = BitConverter.ToUInt32(ba, 7); + uint node2 = BitConverter.ToUInt32(ba, 11); + return GetLineSegments(line, pos, segments, reverse, skip_first); + } + + /// + /// Ïîëó÷àåì LINK_ID ëèíèé èç ôàéëà .lines.id + /// + /// íîìåðà ëèíèé + /// LINK_ID[] + public int[] GetLinesLinkIDs(uint[] lines) + { + int[] res = new int[lines.Length]; + FileStream fs = new FileStream(fileMain + ".lines.id", FileMode.Open, FileAccess.Read); + byte[] ba = new byte[RMLINKIDS.Length]; + fs.Read(ba, 0, ba.Length); + if (System.Text.Encoding.GetEncoding(1251).GetString(ba) != "RMLINKIDS") + { + fs.Close(); + throw new IOException("Unknown file format:\r\n" + fileMain + ".lines.id"); + }; + for (int i = 0; i < lines.Length; i++) + { + fs.Position = RMLINKIDS.Length + 4 + 4 * (lines[i] - 1); + ba = new byte[4]; + fs.Read(ba,0,ba.Length); + res[i] = BitConverter.ToInt32(ba, 0); + }; + fs.Close(); + return res; + } + + /// + /// Ïîëó÷àåì ìàðøðóò ìåæäó äâóìÿ óçëàìè ãðàôà + /// + /// start node + /// end node + /// Îò÷åò + public RouteResult GetRoute(uint nodeStart, uint nodeEnd, uint nodeStartReversed, uint nodeEndReversed) + { + RouteResult res = new RouteResult(); + res.nodeStart = nodeStart; + res.nodeEnd = nodeEnd; + res.nodes = new uint[0]; + res.lines = new uint[0]; + res.vector = new PointFL[0]; + + res.cost = GetRouteCost(nodeStart,nodeEnd); + res.length = GetRouteDistance(nodeStart, nodeEnd); + res.time = GetRouteTime(nodeStart, nodeEnd); + res.nodes = GetRouteNodes(nodeStart, nodeEnd); + res.shrinkStart = false; + res.shrinkEnd = false; + + //ÏÐÎÂÅÐßÅÌ íà ïðåäìåò, åñëè óæå ïðîåõàëèñü ïî ëèíèè + if (res.nodes.Length > 0) + { + if (res.nodes[res.nodes.Length - 1] == nodeEndReversed) + { + if (true) // åñëè oneway, òî ìàðøðóò íå ïðîéäåò ÷åðåç ïîñëåäíèé îòðåçîê â îáðàòíîì íàïðàâëåíèè + { + res.shrinkEnd = true; + res.nodeEnd = nodeEndReversed; + if (calcReversed) + { + res.cost -= GetRouteCost(res.nodeEnd, res.nodeEnd); + res.length -= GetRouteDistance(res.nodeEnd, res.nodeEnd); + res.time -= GetRouteTime(res.nodeEnd, res.nodeEnd); + } + else + { + res.cost = GetRouteCost(res.nodeEnd, res.nodeEnd); + res.length = GetRouteDistance(res.nodeEnd, res.nodeEnd); + res.time = GetRouteTime(res.nodeEnd, res.nodeEnd); + }; + }; + }; + if (res.nodes[0] == nodeStartReversed) + { + bool ow = false; // îäíîñòîðîííÿÿ? + uint[] _n; float[] _c; float[] _d; float[] _t; uint[] _l; byte[] _r; + SelectNode(nodeStartReversed, out _n, out _c, out _d, out _t, out _l, out _r); + for (int i = 0; i < _n.Length; i++) + if (_n[i] == (res.nodes.Length > 1 ? res.nodes[1] : nodeEnd)) + { + ushort seg; int pos; uint n1; uint n2; + GetLine(_l[i], out seg, out pos, out ow, out n1, out n2); + }; + if (!ow) + { + res.shrinkStart = true; + res.nodeStart = nodeStartReversed; + if (calcReversed) + { + res.cost = GetRouteCost(res.nodeStart, res.nodeStart); + res.length = GetRouteDistance(res.nodeStart, res.nodeStart); + res.time = GetRouteTime(res.nodeStart, res.nodeStart); + } + else + { + res.cost -= GetRouteCost(res.nodeStart, res.nodeStart); + res.length -= GetRouteDistance(res.nodeStart, res.nodeStart); + res.time -= GetRouteTime(res.nodeStart, res.nodeStart); + }; + }; + }; + if (res.shrinkStart || res.shrinkEnd) // óäàëÿåì ëèøíèå ðàçâîðîòû âíà÷àëå èëè â êîíöå, åñëè åñòü + { + List arr = new List(res.nodes); + if (res.shrinkStart && (arr.Count > 0)) arr.RemoveAt(0); + if (res.shrinkEnd && (arr.Count > 0)) arr.RemoveAt(arr.Count - 1); + res.nodes = arr.ToArray(); + res.lines = GetRouteLines(res.nodeStart, res.nodes, res.nodeEnd); + } + else + { + res.lines = GetRouteLines(nodeStart, res.nodes, nodeEnd); + }; + }; + + if (res.lines.Length == 0) + { + uint[] _n; float[] _c; float[] _d; float[] _t; uint[] _l; byte[] _r; + SelectNode(res.nodeStart, out _n, out _c, out _d, out _t, out _l, out _r); + for (int i = 0; i < _n.Length; i++) + if (_n[i] == res.nodeEnd) + res.lines = new uint[] { _l[i] }; + }; + res.vector = GetRouteVectorWNL(res.nodeStart, res.nodes, res.nodeEnd); + + return res; + } + + /// + /// Ïîëó÷àåì ìàðøðóò ìåæäó äâóìÿ óçëàìè ãðàôà + /// + /// start node + /// end node + /// óáèðàòü íåíóæíûå ðàçâîðîòû ïî êðàÿì + /// Îò÷åò + public RouteResult GetRoute(FindStartStopResult nodeStart, FindStartStopResult nodeEnd, bool shrinkStartStopIfNeed) + { + RouteResult res = GetRoute(nodeStart.nodeN, nodeEnd.nodeN, shrinkStartStopIfNeed ? nodeStart.nodeR : 0, shrinkStartStopIfNeed ? nodeEnd.nodeR : 0); + if (shrinkStartStopIfNeed) + { + if (res.shrinkStart) ReverseStop(nodeStart); + if (res.shrinkEnd) ReverseStop(nodeEnd); + }; + return res; + } + + /// + /// Ïîëó÷àåì ìàðøðóò ìåæäó äâóìÿ ëèíèÿìè ãðàôà + /// + /// íà÷ ëèíèÿ + /// êîí ëèíèÿ + /// Îò÷åò + public RouteResult GetRoute(uint lineStart, uint lineEnd) + { + ushort seg; + bool ow; + int pos; + uint ns1; uint ns2; uint ne1; uint ne2; + GetLine(lineStart, out seg, out pos, out ow, out ns1, out ns2); + GetLine(lineStart, out seg, out pos, out ow, out ne1, out ne2); + return GetRoute(ns2, ne1, ns1, ne2); + } + + /// + /// Ïîëó÷àåì ìàðøðóò ìåæäó äâóìÿ êîîðäèíàòàìè + /// + /// íà÷àëüíûé óçåë + /// êîíå÷íûé óçåë + /// Îò÷åò + public RouteResult GetRoute(PointF start, PointF end) + { + FindStartStopResult nodeStart = FindNodeStart(start.Y, start.X, 2000); + FindStartStopResult nodeEnd = FindNodeStart(end.Y, end.X, 2000); + BeginSolve(true,null); + SolveDeikstra(nodeStart.nodeN, new uint[] { nodeEnd.nodeN }); + RouteResult res = GetRoute(nodeStart.nodeN, nodeEnd.nodeN, nodeStart.nodeR, nodeEnd.nodeR); + + if (res.shrinkStart) ReverseStop(nodeStart); + if (res.shrinkEnd) ReverseStop(nodeEnd); + EndSolve(); + + float dL = nodeStart.distToN + nodeEnd.distToN; + res.length += dL; + res.time += dL / 1000; // 60 km/h + + List vec = new List(); + //vec.AddRange(nodeStart.normal); + for (int si = 0; si < nodeStart.normal.Length; si++) vec.Add(new PointFL(nodeStart.normal[si], 0, 0)); + vec.AddRange(res.vector); + //vec.AddRange(nodeEnd.normal); + for (int si = 0; si < nodeEnd.normal.Length; si++) vec.Add(new PointFL(nodeEnd.normal[si], 0, 0)); + res.vector = vec.ToArray(); + + return res; + } + + /// + /// Ðàçâåðíóòü òî÷êó íà÷àëà/êîíöà â äðóãóþ ñòîðîíó ëèíèè + /// (èñïîëüçóåòñÿ äëÿ óáèðàíèÿ ðàçâîðîòîâ ïî êðàÿì) + /// + /// + public void ReverseStop(FindStartStopResult StartStop) + { + float d = StartStop.distToN; + StartStop.distToN = StartStop.distToR; + StartStop.distToR = d; + + uint n = StartStop.nodeN; + StartStop.nodeN = StartStop.nodeR; + StartStop.nodeR = n; + + PointF[] p = StartStop.normal; + StartStop.normal = StartStop.revers; + StartStop.revers = p; + } + + /// + /// Ïîëó÷àåì îöåíêó ïóòè èç (X)->Y + /// Âûçûâàåòñÿ òîëüêî ìåæäó ìåòîäàìè BeginSolve è EndSolve + /// + /// íà÷àëüíûé óçåë + /// êîíå÷íûé óçåë + /// îöåíêà + public Single GetRouteCost(uint start, uint end) + { + uint y = calcReversed ? start : end; + + if (vector_str == null) throw new Exception("Call BeginSolve first"); + return GetCost(y); + } + + /// + /// Óñòàíàâëèâàåì ðàññòîÿíèå èç (X)->Y + /// Âûçûâàåòñÿ òîëüêî ìåæäó ìåòîäàìè BeginSolve è EndSolve + /// + /// êîíåö ïóòè + /// äëèíà ïóòè â ìåòðàõ + private void SetRouteDistance(uint y, Single dist) + { + vector_str.Position = (y - 1) * (vtArrElemLength) + distOffset; + byte[] bb = BitConverter.GetBytes(dist); + vector_str.Write(bb, 0, 4); + } + + /// + /// Ïîëó÷àåì äëèíó ïóòè èç (X)->Y + /// Âûçûâàåòñÿ òîëüêî ìåæäó ìåòîäàìè BeginSolve è EndSolve + /// + /// íà÷àëüíûé óçåë + /// êîíå÷íûé óçåë + /// äëèíà ïóòè â ìåòðàõ + public Single GetRouteDistance(uint start, uint end) + { + uint y = calcReversed ? start : end; + + if (vector_str == null) throw new Exception("Call BeginSolve first"); + + vector_str.Position = (y - 1) * (vtArrElemLength) + distOffset; + byte[] bb = new byte[4]; + vector_str.Read(bb, 0, 4); + Single s = BitConverter.ToSingle(bb, 0); + if (s < maxError) + return Single.MaxValue; + else + return s; + } + + /// + /// Óñòàíàâëèâàåì âðåìÿ äâèæåíèÿ èç (X)->Y + /// Âûçûâàåòñÿ òîëüêî ìåæäó ìåòîäàìè BeginSolve è EndSolve + /// + /// êîíåö ïóòè + /// âðåìÿ äâèæåíèÿ + private void SetRouteTime(uint y, Single time) + { + vector_str.Position = (y - 1) * (vtArrElemLength) + timeOffset; + byte[] bb = BitConverter.GetBytes(time); + vector_str.Write(bb, 0, 4); + } + + + /// + /// Ïîëó÷àåì âðåìÿ äâèæåíèÿ èç (X)->Y + /// Âûçûâàåòñÿ òîëüêî ìåæäó ìåòîäàìè BeginSolve è EndSolve + /// + /// íà÷àëüíûé óçåë + /// êîíå÷íûé óçåë + /// Âðåìÿ äâèæåíèÿ â ìèíóòàõ + public Single GetRouteTime(uint start, uint end) + { + uint y = calcReversed ? start : end; + + if (vector_str == null) throw new Exception("Call BeginSolve first"); + + vector_str.Position = (y - 1) * (vtArrElemLength) + timeOffset; + byte[] bb = new byte[4]; + vector_str.Read(bb, 0, 4); + Single s = BitConverter.ToSingle(bb, 0); + if (s < maxError) + return Single.MaxValue; + else + return s; + } + + /// + /// Ñîõðàíÿåò âåêòîð ðàñ÷åòà â ôàéë + /// + /// Èìÿ ôàéëà + public void SaveSolvedVector(string fn) + { + FileStream fs = new FileStream(fn, FileMode.Create, FileAccess.ReadWrite); + byte[] bb = new byte[8192]; + int read = 0; + vector_str.Position = 0; + while ((read = vector_str.Read(bb, 0, bb.Length)) > 0) + fs.Write(bb, 0, read); + fs.Flush(); + fs.Close(); + } + + /// + /// Ïðåäâàðèòåëüíûé ïðîñ÷åò ïóòåé ìåæäó òî÷êàìè ñòûêîâêè ìåæðàéîííûõ ìàðøðóòîâ + /// + public void CalculateRGNodesRoutes() + { + CalculateRGNodesRoutes(0); + } + + /// + /// Ïðåäâàðèòåëüíûé ïðîñ÷åò ïóòåé ìåæäó òî÷êàìè ñòûêîâêè ìåæðàéîííûõ ìàðøðóòîâ + /// + /// Íîìåð ðåãèîíà + public void CalculateRGNodesRoutes(int region_id) + { + if (!File.Exists(fileMain + ".rgnodes.xml")) + { + Console.WriteLine("File " + Path.GetFileName(fileMain) + ".rgnodes.xml doen't exists!"); + return; + }; + + Console.WriteLine("Loading RGNodes: " + Path.GetFileName(fileMain) + ".rgnodes.xml"); + TRGNode[] nodes = XMLSaved.Load(fileMain + ".rgnodes.xml"); + + if (nodes.Length == 0) + { + Console.WriteLine("RGNodes not found!"); + return; + }; + + if ((nodes == null) || (nodes.Length == 0)) return; + + string dir = Path.GetDirectoryName(fileName) + @"\RGWays\"; + Directory.CreateDirectory(dir); + + Console.WriteLine("Ïðåäâàðèòåëüíûé ïðîñ÷åò ïóòåé ìåæäó òî÷êàìè ñòûêîâêè ìåæðàéîííûõ ìàðøðóòîâ"); + Console.WriteLine("Îïòèìèçèðîâàòü ìàðøðóò ïî: "+this.minBy.ToString()); + for (int x = 0; x < nodes.Length; x++) + { + if (!nodes[x].inner) continue; + + List li = new List(); + List lc = new List(); + List ld = new List(); + List lt = new List(); + + for (int y = 0; y < nodes.Length; y++) + { + if (x == y) continue; + if (!nodes[y].outer) continue; + + dkxce.RealTimeRoutes.FindStartStopResult nodeStart = new dkxce.RealTimeRoutes.FindStartStopResult(); + nodeStart.nodeN = nodes[x].node; + dkxce.RealTimeRoutes.FindStartStopResult nodeEnd = new dkxce.RealTimeRoutes.FindStartStopResult(); + nodeEnd.nodeN = nodes[y].node; + + DateTime s = DateTime.Now; + Console.Write(nodes[x].node.ToString() + "(" + nodes[x].id + ") -> " + nodes[y].node.ToString() + "(" + nodes[y].id + ")"); + + BeginSolve(true, null); + //MinimizeRouteBy = dkxce.RealTimeRoutes.MinimizeBy.Time; + SolveAstar(nodeStart.nodeN, nodeEnd.nodeN); // A* + DateTime e = DateTime.Now; + TimeSpan ts = e.Subtract(s); + + Console.Write(" - "); + + float c = GetRouteCost(nodeStart.nodeN, nodeEnd.nodeN); + float d = GetRouteDistance(nodeStart.nodeN, nodeEnd.nodeN); + float t = GetRouteTime(nodeStart.nodeN, nodeEnd.nodeN); + RouteResultStored rrs = new RouteResultStored(); + rrs.route = GetRoute(nodeStart, nodeEnd, true); + rrs.costs = new float[rrs.route.nodes.Length + 2]; + rrs.times = new float[rrs.route.nodes.Length + 2]; + rrs.distances = new float[rrs.route.nodes.Length + 2]; + for (int i = 0; i < rrs.costs.Length - 2; i++) + { + rrs.costs[i + 1] = GetRouteCost(nodeStart.nodeN, rrs.route.nodes[i]); + rrs.times[i + 1] = GetRouteTime(nodeStart.nodeN, rrs.route.nodes[i]); + rrs.distances[i + 1] = GetRouteDistance(nodeStart.nodeN, rrs.route.nodes[i]); + }; + rrs.costs[rrs.costs.Length - 1] = GetRouteCost(nodeStart.nodeN, nodeEnd.nodeN); + rrs.times[rrs.times.Length - 1] = GetRouteTime(nodeStart.nodeN, nodeEnd.nodeN); + rrs.distances[rrs.distances.Length - 1] = GetRouteDistance(nodeStart.nodeN, nodeEnd.nodeN); + + XMLSaved.Save(dir + String.Format("{0}T{1}.rgway.xml",nodes[x].id,nodes[y].id),rrs); + + EndSolve(); + + Console.Write(String.Format("{0:0} km, {1:0} min", d / 1000, t, rrs.route.nodes.Length)); + Console.Write(String.Format(" - {0}:{1:00}:{2:000}", ts.Minutes,ts.Seconds,ts.Milliseconds)); + Console.Write(" - "); + Console.WriteLine(String.Format("{0}T{1}.rgway.xml", nodes[x].id, nodes[y].id)); + + li.Add(nodes[y].id); lc.Add(c); ld.Add(d); lt.Add(t); + }; + + if(region_id > 0) nodes[x].region = region_id; + nodes[x].links = li.ToArray(); + nodes[x].costs = lc.ToArray(); + nodes[x].dists = ld.ToArray(); + nodes[x].times = lt.ToArray(); + }; + + Console.WriteLine("Saving RGNodes: " + Path.GetFileName(fileMain) + ".rgnodes.xml"); + XMLSaved.Save(fileMain + ".rgnodes.xml", nodes); + + Console.WriteLine("Done"); + } + + /// + /// Âûâîäèò íàãëÿäíóþ ìàòðèöó â òåêñòîâûé ôàéë + /// (ðåêîìåíäóåòñÿ òîëüêî äëÿ íåáîëüøèõ ìàòðèö) + /// + /// Ïîëíûé ïóòü ê ôàéëó + public void ToTextFile(string fn) + { + FileStream fout = new FileStream(fn, FileMode.Create); + StreamWriter sw = new StreamWriter(fout); + + sw.Write("NODE \t"); + for (uint y = 1; y <= size; y++) sw.Write(y.ToString() + "\t\t\t"); + sw.WriteLine(); + + sw.Write("COST \t"); + for (uint y = 1; y <= size; y++) + if (GetCost(y) > maxValue) + sw.Write(". . .\t"); + else + sw.Write(GetPrev(y).ToString() + "(" + GetCost(y).ToString("0.000").Replace(",", ".") + ") \t"); + sw.WriteLine(); + + sw.Write("DIST \t"); + for (uint y = 1; y <= size; y++) + if (GetCost(y) > maxValue) + sw.Write(". . .\t"); + else + sw.Write(GetPrev(y).ToString() + "(" + GetRouteDistance(y,y).ToString("0.000").Replace(",", ".") + ") \t"); + sw.WriteLine(); ; + + sw.Write("TIME \t"); + for (uint y = 1; y <= size; y++) + if (GetCost(y) > maxValue) + sw.Write(". . .\t"); + else + sw.Write(GetPrev(y).ToString() + "(" + GetRouteTime(y,y).ToString("0.000").Replace(",", ".") + ") \t"); + sw.WriteLine(); ; + + sw.Flush(); + fout.Close(); + } + + /////// + /////// + + /// + /// Èùåì òî÷êè ãðàôà â çàäàííîé çîíå + /// + /// + /// + /// + /// + /// âîçâðàùàòü ëè êîîðäèíàòû òî÷åê + /// çàïîëíÿòü ñâÿçè + /// Ìàêñèìàëüíîå ÷èñëî òî÷åê ê îòâåòå + /// Óçëû + public TNode[] FindNodesInRect(float StartLat, float StartLon, float EndLat, float EndLon, bool getLatLon, bool fillLinks, int maxResults) + { + List res = new List(maxResults); + + geoll_str.Position = RMPOINTNLL1.Length + 4; + byte[] buff = new byte[1020]; // 1020 bytes - 85 points // 8184 bytes - 682 points + int read = 0; + bool brk = false; + while ((read = geoll_str.Read(buff, 0, buff.Length)) > 0) + { + float lastlat = BitConverter.ToSingle(buff, read - 8); + if (lastlat < StartLat) continue; // goto next block if last lat < needed + + int offset = 0; + while (offset < read) + { + uint node = BitConverter.ToUInt32(buff, offset); + float lat = BitConverter.ToSingle(buff, offset += 4); + float lon = BitConverter.ToSingle(buff, offset += 4); + if (lat > EndLat) // stops find if lat > needed + { + brk = true; + break; + }; + // (lat <= EndLat) - already checked + if ((lat >= StartLat) && (lon >= StartLon) && (lon <= EndLon)) + { + res.Add(new TNode(node, lat, lon)); + if (res.Count == maxResults) // if found points count = maxResults then return + { + brk = true; + break; + }; + }; + offset += 4; + }; + if (brk) break; + }; + + if (fillLinks) + { + uint[] _n; float[] _c; float[] _d; float[] _t; uint[] _l; byte[] _r; + for (int i = 0; i < res.Count; i++) + { + int ttl = SelectNode(res[i].node, out _n, out _c, out _d, out _t, out _l, out _r); + for (int x = 0; x < ttl; x++) + res[i].AddLink(_n[x], _c[x], _d[x], _t[x], _l[x], _r[x] == 1); + }; + }; + + return res.ToArray(); + } + + /// + /// Èùåì òî÷êè ãðàôà â çàäàííîé çîíå + /// + /// + /// + /// + /// + /// âîçâðàùàòü ëè êîîðäèíàòû òî÷åê + /// çàïîëíÿòü ñâÿçè + /// Óçëû + public TNode[] FindNodesInRect(float StartLat, float StartLon, float EndLat, float EndLon, bool getLatLon, bool fillLinks) + { + return FindNodesInRect(StartLat, StartLon, EndLat, EndLon, getLatLon, fillLinks, 1000); + } + + /// + /// Èùåì òî÷êè ãðàôà â ðàäèóñå ì + /// + /// Øèðîòà öåíòðà + /// Äîëãîòà öåíòðà + /// Ðàäèóñ â ìåòðàõ + /// Ïîëó÷àòü êîîðäèíàòû òî÷åê + /// Ïîëó÷àòü ðàññòîÿíèå äî òî÷êè + /// Ñîðòèðîâàòü òî÷êè ïî óäàëåííîñòè + /// çàïîëíÿòü ñâÿçè + /// Óçëû + public TNodeD[] FindNodesInRadius(float Lat, float Lon, float metersRadius, bool getLatLon, bool getDistance, bool sortByDist, bool fillLinks) + { + return FindNodesInRadius(Lat, Lon, metersRadius, getLatLon, getDistance, sortByDist, fillLinks, 1000); + } + + /// + /// Èùåì òî÷êè ãðàôà â ðàäèóñå ì + /// + /// Øèðîòà öåíòðà + /// Äîëãîòà öåíòðà + /// Ðàäèóñ â ìåòðàõ + /// Ïîëó÷àòü êîîðäèíàòû òî÷åê + /// Ïîëó÷àòü ðàññòîÿíèå äî òî÷êè + /// Ñîðòèðîâàòü òî÷êè ïî óäàëåííîñòè + /// çàïîëíÿòü ñâÿçè + /// Ìàêñèìàëüíîå ÷èñëî òî÷åê â îòâåòå + /// Óçëû + public TNodeD[] FindNodesInRadius(float Lat, float Lon, float metersRadius, bool getLatLon, bool getDistance, bool sortByDist, bool fillLinks, int maxResults) + { + float dLat = metersRadius / GetLengthMeters(Lat, Lon, Lat + 1, Lon, false); + float dLon = metersRadius / GetLengthMeters(Lat, Lon, Lat, Lon + 1, false); + TNode[] res = FindNodesInRect(Lat - dLat, Lon - dLon, Lat + dLat, Lon + dLon, getLatLon || getDistance, fillLinks, maxResults); + TNodeD[] wd = new TNodeD[res.Length]; + if (getDistance) + { + for (int i = 0; i < res.Length; i++) + wd[i] = new TNodeD(res[i], GetLengthMeters(Lat, Lon, res[i].lat, res[i].lon, false)); + if (sortByDist) + Array.Sort(wd, new TNodeD.DSorter()); + } + else + { + for (int i = 0; i < res.Length; i++) + wd[i] = new TNodeD(res[i]); + }; + + if (fillLinks) + { + uint[] _n; float[] _c; float[] _d; float[] _t; uint[] _l; byte[] _r; + for (int i = 0; i < wd.Length; i++) + { + int ttl = SelectNode(res[i].node, out _n, out _c, out _d, out _t, out _l, out _r); + for (int x = 0; x < ttl; x++) + wd[i].AddLink(_n[x], _c[x], _d[x], _t[x], _l[x], _r[x] == 1); + }; + }; + + return wd; + } + + /// + /// Èùåì òî÷êó ãðàôà ñ óêàçàííûìè êîîðäèíàòàìè + /// + /// Latitude + /// Longitude + /// Íîìåð óçëà (åñëè 0 - íå ñóù.) + public uint FindNodesLatLon(float Lat, float Lon) + { + TNode[] pnts = FindNodesInRect(Lat, Lon, Lat, Lon, false, false); + if (pnts.Length == 0) return 0; + else return pnts[0].node; + } + + /// + /// Ïîëó÷àåì óçëû ãðàôà ïî íîìåðàì + /// + /// Íîìåðà òî÷åê + /// Óçëû + public TNode[] SelectNodes(uint[] nodes) + { + TNode[] res = new TNode[nodes.Length]; + byte[] ba = new byte[8]; + for (int i = 0; i < nodes.Length; i++) + { + geo_str.Position = RMPOINTNLL0.Length + 4 + (nodes[i] - 1) * 8; + geo_str.Read(ba, 0, ba.Length); + float lat = BitConverter.ToSingle(ba, 0); + float lon = BitConverter.ToSingle(ba, 4); + res[i] = new TNode(nodes[i], lat, lon); + }; + return res; + } + + /// + /// Ïîëó÷àåì óçëû ãðàôà ïî íîìåðàì + /// ñ ðàññòîÿíèåì ïî ïðÿìîé èç êàæäîãî ïðåäûäóùåãî óçëà + /// + /// íîìåðà óçëîâ + /// Óçëû + public TNodeD[] SelectNodesByDist(uint[] nodes) + { + TNodeD[] res = new TNodeD[nodes.Length]; + byte[] ba = new byte[8]; + for (int i = 0; i < nodes.Length; i++) + { + geo_str.Position = RMPOINTNLL0.Length + 4 + (i - 1) * 8; + geo_str.Read(ba, 0, ba.Length); + float lat = BitConverter.ToSingle(ba, 0); + float lon = BitConverter.ToSingle(ba, 4); + float dist = i == 0 ? 0 : GetLengthMeters(res[i - 1].lat, res[i - 1].lon, res[i].lat, res[i].lon, false); + res[i] = new TNodeD(nodes[i], lat, lon, dist); + }; + return res; + } + + // Ðàññ÷åò ðàññòîÿíèÿ + #region LENGTH + public static float GetLengthMeters(double StartLat, double StartLong, double EndLat, double EndLong, bool radians) + { + // use fastest + float result = (float)GetLengthMetersD(StartLat, StartLong, EndLat, EndLong, radians); + + if (float.IsNaN(result)) + { + result = (float)GetLengthMetersC(StartLat, StartLong, EndLat, EndLong, radians); + if (float.IsNaN(result)) + { + result = (float)GetLengthMetersE(StartLat, StartLong, EndLat, EndLong, radians); + if(float.IsNaN(result)) + result = 0; + }; + }; + + return result; + } + + // Slower + public static uint GetLengthMetersA(double StartLat, double StartLong, double EndLat, double EndLong, bool radians) + { + double D2R = Math.PI / 180; // Ïðåîáðàçîâàíèå ãðàäóñîâ â ðàäèàíû + + double a = 6378137.0000; // WGS-84 Equatorial Radius (a) + double f = 1 / 298.257223563; // WGS-84 Flattening (f) + double b = (1 - f) * a; // WGS-84 Polar Radius + double e2 = (2 - f) * f; // WGS-84 Êâàäðàò ýêñöåíòðè÷íîñòè ýëëèïñîèäà // 1-(b/a)^2 + + // Ïåðåìåííûå, èñïîëüçóåìûå äëÿ âû÷èñëåíèÿ ñìåùåíèÿ è ðàññòîÿíèÿ + double fPhimean; // Ñðåäíÿÿ øèðîòà + double fdLambda; // Ðàçíèöà ìåæäó äâóìÿ çíà÷åíèÿìè äîëãîòû + double fdPhi; // Ðàçíèöà ìåæäó äâóìÿ çíà÷åíèÿìè øèðîòû + double fAlpha; // Ñìåùåíèå + double fRho; // Ìåðèäèàíñêèé ðàäèóñ êðèâèçíû + double fNu; // Ïîïåðå÷íûé ðàäèóñ êðèâèçíû + double fR; // Ðàäèóñ ñôåðû Çåìëè + double fz; // Óãëîâîå ðàññòîÿíèå îò öåíòðà ñôåðîèäà + double fTemp; // Âðåìåííàÿ ïåðåìåííàÿ, èñïîëüçóþùàÿñÿ â âû÷èñëåíèÿõ + + // Âû÷èñëÿåì ðàçíèöó ìåæäó äâóìÿ äîëãîòàìè è øèðîòàìè è ïîëó÷àåì ñðåäíþþ øèðîòó + // ïðåäïîëîæèòåëüíî ÷òî ðàññòîÿíèå ìåæäó òî÷êàìè << ðàäèóñà çåìëè + if (!radians) + { + fdLambda = (StartLong - EndLong) * D2R; + fdPhi = (StartLat - EndLat) * D2R; + fPhimean = ((StartLat + EndLat) / 2) * D2R; + } + else + { + fdLambda = StartLong - EndLong; + fdPhi = StartLat - EndLat; + fPhimean = (StartLat + EndLat) / 2; + }; + + // Âû÷èñëÿåì ìåðèäèàííûå è ïîïåðå÷íûå ðàäèóñû êðèâèçíû ñðåäíåé øèðîòû + fTemp = 1 - e2 * (sqr(Math.Sin(fPhimean))); + fRho = (a * (1 - e2)) / Math.Pow(fTemp, 1.5); + fNu = a / (Math.Sqrt(1 - e2 * (Math.Sin(fPhimean) * Math.Sin(fPhimean)))); + + // Âû÷èñëÿåì óãëîâîå ðàññòîÿíèå + if (!radians) + { + fz = Math.Sqrt(sqr(Math.Sin(fdPhi / 2.0)) + Math.Cos(EndLat * D2R) * Math.Cos(StartLat * D2R) * sqr(Math.Sin(fdLambda / 2.0))); + } + else + { + fz = Math.Sqrt(sqr(Math.Sin(fdPhi / 2.0)) + Math.Cos(EndLat) * Math.Cos(StartLat) * sqr(Math.Sin(fdLambda / 2.0))); + }; + fz = 2 * Math.Asin(fz); + + // Âû÷èñëÿåì ñìåùåíèå + if (!radians) + { + fAlpha = Math.Cos(EndLat * D2R) * Math.Sin(fdLambda) * 1 / Math.Sin(fz); + } + else + { + fAlpha = Math.Cos(EndLat) * Math.Sin(fdLambda) * 1 / Math.Sin(fz); + }; + fAlpha = Math.Asin(fAlpha); + + // Âû÷èñëÿåì ðàäèóñ Çåìëè + fR = (fRho * fNu) / (fRho * sqr(Math.Sin(fAlpha)) + fNu * sqr(Math.Cos(fAlpha))); + // Ïîëó÷àåì ðàññòîÿíèå + return (uint)Math.Round(Math.Abs(fz * fR)); + } + // Slowest + public static uint GetLengthMetersB(double StartLat, double StartLong, double EndLat, double EndLong, bool radians) + { + double fPhimean, fdLambda, fdPhi, fAlpha, fRho, fNu, fR, fz, fTemp, Distance, + D2R = Math.PI / 180, + a = 6378137.0, + e2 = 0.006739496742337; + if (radians) D2R = 1; + + fdLambda = (StartLong - EndLong) * D2R; + fdPhi = (StartLat - EndLat) * D2R; + fPhimean = (StartLat + EndLat) / 2.0 * D2R; + + fTemp = 1 - e2 * Math.Pow(Math.Sin(fPhimean), 2); + fRho = a * (1 - e2) / Math.Pow(fTemp, 1.5); + fNu = a / Math.Sqrt(1 - e2 * Math.Sin(fPhimean) * Math.Sin(fPhimean)); + + fz = 2 * Math.Asin(Math.Sqrt(Math.Pow(Math.Sin(fdPhi / 2.0), 2) + + Math.Cos(EndLat * D2R) * Math.Cos(StartLat * D2R) * Math.Pow(Math.Sin(fdLambda / 2.0), 2))); + fAlpha = Math.Asin(Math.Cos(EndLat * D2R) * Math.Sin(fdLambda) / Math.Sin(fz)); + fR = fRho * fNu / (fRho * Math.Pow(Math.Sin(fAlpha), 2) + fNu * Math.Pow(Math.Cos(fAlpha), 2)); + Distance = fz * fR; + + return (uint)Math.Round(Distance); + } + // Average + public static uint GetLengthMetersC(double StartLat, double StartLong, double EndLat, double EndLong, bool radians) + { + double D2R = Math.PI / 180; + if (radians) D2R = 1; + double dDistance = Double.MinValue; + double dLat1InRad = StartLat * D2R; + double dLong1InRad = StartLong * D2R; + double dLat2InRad = EndLat * D2R; + double dLong2InRad = EndLong * D2R; + + double dLongitude = dLong2InRad - dLong1InRad; + double dLatitude = dLat2InRad - dLat1InRad; + + // Intermediate result a. + double a = Math.Pow(Math.Sin(dLatitude / 2.0), 2.0) + + Math.Cos(dLat1InRad) * Math.Cos(dLat2InRad) * + Math.Pow(Math.Sin(dLongitude / 2.0), 2.0); + + // Intermediate result c (great circle distance in Radians). + double c = 2.0 * Math.Atan2(Math.Sqrt(a), Math.Sqrt(1.0 - a)); + + const double kEarthRadiusKms = 6378137.0000; + dDistance = kEarthRadiusKms * c; + + return (uint)Math.Round(dDistance); + } + // Fastest + public static double GetLengthMetersD(double sLat, double sLon, double eLat, double eLon, bool radians) + { + double EarthRadius = 6378137.0; + + double lon1 = radians ? sLon : DegToRad(sLon); + double lon2 = radians ? eLon : DegToRad(eLon); + double lat1 = radians ? sLat : DegToRad(sLat); + double lat2 = radians ? eLat : DegToRad(eLat); + + return EarthRadius * (Math.Acos(Math.Sin(lat1) * Math.Sin(lat2) + Math.Cos(lat1) * Math.Cos(lat2) * Math.Cos(lon1 - lon2))); + } + // Fastest + public static double GetLengthMetersE(double sLat, double sLon, double eLat, double eLon, bool radians) + { + double EarthRadius = 6378137.0; + + double lon1 = radians ? sLon : DegToRad(sLon); + double lon2 = radians ? eLon : DegToRad(eLon); + double lat1 = radians ? sLat : DegToRad(sLat); + double lat2 = radians ? eLat : DegToRad(eLat); + + /* This algorithm is called Sinnott's Formula */ + double dlon = (lon2) - (lon1); + double dlat = (lat2) - (lat1); + double a = Math.Pow(Math.Sin(dlat / 2), 2.0) + Math.Cos(lat1) * Math.Cos(lat2) * Math.Pow(Math.Sin(dlon / 2), 2.0); + double c = 2 * Math.Asin(Math.Sqrt(a)); + return EarthRadius * c; + } + private static double sqr(double val) + { + return val * val; + } + public static double DegToRad(double deg) + { + return (deg / 180.0 * Math.PI); + } + #endregion LENGTH + + /// + /// Íàõîäèì ïóòü îò èñõîäíîé êîîðäèíàòû äî áëèæàéøåé ëèíèè â áëèæàéøåì óçëå + /// + /// Øèðîòà + /// Äîëãîòà + /// Ðàäèóñ ïîèñêà áëèæàéøåé ëèíèè â ìåòðàõ + /// Áëèæàéøàÿ ëèíèÿ è óçåë + public FindStartStopResult FindNodeStart(float Lat, float Lon, float metersRadius) + { + return FindStartStop(Lat, Lon, metersRadius, true); + } + + /// + /// Íàõîäèì ïóòü äî êîíå÷íîé êîîðäèíàòû îò áëèæàéøåé ëèíèè â áëèæàéøåì óçëå + /// + /// Øèðîòà + /// Äîëãîòà + /// Ðàäèóñ ïîèñêà áëèæàéøåé ëèíèè â ìåòðàõ + /// Áëèæàéøàÿ ëèíèÿ è óçåë + public FindStartStopResult FindNodeEnd(float Lat, float Lon, float metersRadius) + { + return FindStartStop(Lat, Lon, metersRadius, false); + } + + /// + /// Íàõîäèì ïóòü îò èñõîäíîé/êîíå÷íîé êîîðäèíàòû ïî áëèæàéøåé ëèíèè â áëèæàéøèé óçåë + /// + /// Øèðîòà + /// Äîëãîòà + /// Ðàäèóñ ïîèñêà áëèæàéøåé ëèíèè â ìåòðàõ + /// true - åñëè íà÷àëî, false - åñëè êîíåö + /// Áëèæàéøàÿ ëèíèÿ è óçåë + private FindStartStopResult FindStartStop(float Lat, float Lon, float metersRadius, bool TrueStartFalseEnd) + { + FindStartStopResult res = new FindStartStopResult(); + res.distToLine = float.MaxValue; + res.distToN = 0; + res.distToR = 0; + res.normal = new PointF[0]; + res.revers = new PointF[0]; + res.line = 0; + res.nodeN = 0; + res.nodeR = 0; + + float dLat = metersRadius / GetLengthMeters(Lat, Lon, Lat + 1, Lon, false); + float dLon = metersRadius / GetLengthMeters(Lat, Lon, Lat, Lon + 1, false); + + float LatMin = Lat - dLat; + float LonMin = Lon - dLon; + float LatMax = Lat + dLat; + float LonMax = Lon + dLon; + + List lines = new List(); + + segm_str.Position = RMSEGMENTS.Length + 4; + + byte[] ba = new byte[8190]; + int read = 0; + + while ((read = segm_str.Read(ba, 0, ba.Length)) > 0) + { + int count = read / segm_record_length; + for (int i = 0; i < count; i++) + { + int off = segm_record_length * i; + uint line_no = BitConverter.ToUInt32(ba, off+0); + ushort segm = BitConverter.ToUInt16(ba, off + 4); + float lat0 = BitConverter.ToSingle(ba, off + 6); + float lon0 = BitConverter.ToSingle(ba, off + 10); + float lat1 = BitConverter.ToSingle(ba, off + 14); + float lon1 = BitConverter.ToSingle(ba, off + 18); + float k = BitConverter.ToSingle(ba, off + 22); + float b = BitConverter.ToSingle(ba, off + 26); + + // check line outbounds + if ((lat0 < LatMin) && (lat1 < LatMin)) continue; + if ((lat0 > LatMax) && (lat1 > LatMax)) continue; + if ((lon0 < LonMin) && (lon1 < LonMin)) continue; + if ((lon0 > LonMax) && (lon1 > LonMax)) continue; + + // check line cross bounds + float y1 = k * LatMin + b; + float y2 = k * LatMax + b; + float x1 = (LonMax - b) / k; + float x2 = (LonMin - b) / k; + if ( + ((y1 >= LonMin) && (y1 <= LonMax)) + || + ((y2 >= LonMin) && (y2 <= LonMax)) + || + ((x1 >= LatMin) && (x1 <= LatMax)) + || + ((x2 >= LatMin) && (x2 <= LatMax)) + ) + { + lines.Add(line_no); + }; + }; + }; + + PointF searchNearPoint = new PointF(Lon, Lat); + ushort segmentNo = 0; + PointF onLinePoint = new PointF(0, 0); + int side = 0; + + // check nearest line from found + for (int i = 0; i < lines.Count; i++) + { + PointF[] ss = GetLineSegments(lines[i], false, false); + for (ushort x = 1; x < ss.Length; x++) + { + PointF pol; + int lor = 0; + DistanceFromPointToLine(searchNearPoint, ss[x - 1], ss[x], out pol, out lor); + float l = GetLengthMeters(Lat, Lon, pol.Y, pol.X, false); + if (l < res.distToLine) + { + res.distToLine = l; + res.line = lines[i]; + segmentNo = x; + onLinePoint = pol; + side = lor; + }; + }; + }; + + if (res.line == 0) // not found + return res; + + ushort ttlsegments; + int pos; + bool oneway; + uint node1; + uint node2; + GetLine(res.line, out ttlsegments, out pos, out oneway, out node1, out node2); + PointF[] polyline = GetLineSegments(res.line, pos, ttlsegments, false, false); + + List vectorN = new List(); + List vectorR = new List(); + uint nodeN = 0; + uint nodeR = 0; + + // åñëè íà÷àëî + bool retN = oneway || (side*-1 > 0); + if (TrueStartFalseEnd) + { + vectorN.Add(searchNearPoint); + if ((!float.IsNaN(onLinePoint.X)) && (!float.IsNaN(onLinePoint.Y))) + vectorN.Add(onLinePoint); + vectorR.Add(searchNearPoint); + if ((!float.IsNaN(onLinePoint.X)) && (!float.IsNaN(onLinePoint.Y))) + vectorR.Add(onLinePoint); + + nodeN = node2; + nodeR = node1; + + for (int i = segmentNo; i < polyline.Length; i++) + vectorN.Add(polyline[i]); + for (int i = segmentNo - 1; i >= 0; i--) + vectorR.Add(polyline[i]); + } + else // åñëè êîíåö + { + for (int i = 0; i < segmentNo; i++) + vectorN.Add(polyline[i]); + for (int i = polyline.Length - 1; i >= segmentNo; i--) + vectorR.Add(polyline[i]); + + if ((!float.IsNaN(onLinePoint.X)) && (!float.IsNaN(onLinePoint.Y))) + vectorN.Add(onLinePoint); + vectorN.Add(searchNearPoint); + if ((!float.IsNaN(onLinePoint.X)) && (!float.IsNaN(onLinePoint.Y))) + vectorR.Add(onLinePoint); + vectorR.Add(searchNearPoint); + + nodeN = node1; + nodeR = node2; + }; + + // fill_up vectors & nodes + if (retN) + { + res.normal = vectorN.ToArray(); + res.revers = vectorR.ToArray(); + res.nodeN = nodeN; + res.nodeR = nodeR; + } + else + { + res.normal = vectorR.ToArray(); + res.revers = vectorN.ToArray(); + res.nodeN = nodeR; + res.nodeR = nodeN; + }; + + // dist to nodes + for (int i = 1; i < res.normal.Length; i++) + res.distToN += GetLengthMeters(res.normal[i - 1].Y, res.normal[i - 1].X, res.normal[i].Y, res.normal[i].X, false); + for (int i = 1; i < res.revers.Length; i++) + res.distToR += GetLengthMeters(res.revers[i - 1].Y, res.revers[i - 1].X, res.revers[i].Y, res.revers[i].X, false); + + return res; + } + + /// + /// Ïîëó÷àåì óãîë ïîâîðîòà äâóõ ëèíèé + /// + /// Íà÷àëüíàÿ òî÷êà + /// Òî÷êà ïîâîðîòà + /// Êîíå÷íàÿ òî÷êà + /// Óãîë, åñëè ìåíüøå 0 òî ëåâûé + public static float GetLinesTurnAngle(PointF prev, PointF turn, PointF next) + { + float dy0 = turn.Y - prev.Y; + float dx0 = turn.X - prev.X; + float dy1 = next.Y - turn.Y; + float dx1 = next.X - turn.X; + + int side = Math.Sign((turn.X - prev.X) * (next.Y - prev.Y) - (turn.Y - prev.Y) * (next.X - prev.X)); + return (float)(-1 * side * Math.Acos(((dx0 * dx1) + (dy0 * dy1)) / ((Math.Sqrt(dx0 * dx0 + dy0 * dy0)) * (Math.Sqrt(dx1 * dx1 + dy1 * dy1)))) / Math.PI * 180); + } + + /// + /// Ïîëó÷àåì óãîë ïîâîðîòà äâóõ ëèíèé + /// + /// Íà÷àëüíàÿ òî÷êà + /// Òî÷êà ïîâîðîòà + /// Êîíå÷íàÿ òî÷êà + /// Óãîë, åñëè ìåíüøå 0 òî ëåâûé + public static float GetLinesTurnAngle(PointFL prev, PointFL turn, PointFL next) + { + return GetLinesTurnAngle(new PointF(prev.X, prev.Y), new PointF(turn.X, turn.Y), new PointF(next.X, next.Y)); + } + + /// + /// Ðàñ÷åò ðàññòîÿíèÿ îò òî÷êè äî ëèíèè + /// + /// Èñêîìàÿ òî÷êà + /// Íà÷ ò÷ê ëèíèè + /// Êîí ò÷ê ëèíèè + /// òî÷êà íà ëèíèè áëèæàéøàÿ ê èñêîìîé + /// Ñ êàêîé ñòîðîíû ëèíèè íàõîäèòñÿ èñêîìàÿ òî÷êà + /// ìåòðû + private static double DistanceFromPointToLine(PointF pt, PointF lineStart, PointF lineEnd, out PointF pointOnLine, out int side) + { + float dx = lineEnd.X - lineStart.X; + float dy = lineEnd.Y - lineStart.Y; + + side = Math.Sign((lineEnd.X - lineStart.X) * (pt.Y - lineStart.Y) - (lineEnd.Y - lineStart.Y) * (pt.X - lineStart.X)); + + // Calculate the t that minimizes the distance. + float t = ((pt.X - lineStart.X) * dx + (pt.Y - lineStart.Y) * dy) / (dx * dx + dy * dy); + + // See if this represents one of the segment's + // end points or a point in the middle. + if (t < 0) + { + pointOnLine = new PointF(lineStart.X, lineStart.Y); + dx = pt.X - lineStart.X; + dy = pt.Y - lineStart.Y; + } + else if (t > 1) + { + pointOnLine = new PointF(lineEnd.X, lineEnd.Y); + dx = pt.X - lineEnd.X; + dy = pt.Y - lineEnd.Y; + } + else + { + pointOnLine = new PointF(lineStart.X + t * dx, lineStart.Y + t * dy); + dx = pt.X - pointOnLine.X; + dy = pt.Y - pointOnLine.Y; + }; + + return Math.Sqrt(dx * dx + dy * dy); + } + } + + /// + /// ×èòàåò íàçâàíèÿ ëèíèé ïî íîìåðó èç ôàéëà + /// + public class LinesNamesFileReader + { + private string fileName; + public string FileName { get { return fileName; } } + private FileStream fs; + private List pos = new List(); + + public LinesNamesFileReader(string fileName) + { + this.fileName = fileName; + fs = new FileStream(fileName, FileMode.Open, FileAccess.Read); + byte[] ba = new byte[1024]; + int read = 0; + while ((read = fs.Read(ba,0,ba.Length)) > 0) + { + string s = System.Text.Encoding.GetEncoding(1251).GetString(ba, 0, read); + s = s.Substring(0,s.IndexOf("\r\n")); + fs.Position = fs.Position - read + s.Length + 2; + pos.Add(fs.Position); + }; + } + + public string this[uint line] + { + get + { + fs.Position = pos[(int)line - 1]; + byte[] ba = new byte[1024]; + fs.Read(ba, 0, ba.Length); + string s = System.Text.Encoding.GetEncoding(1251).GetString(ba, 0, ba.Length); + return s.Substring(0, s.IndexOf("\r\n")); + } + } + + public void Close() + { + fs.Close(); + fs = null; + } + + ~LinesNamesFileReader() + { + if(fs != null) this.Close(); + } + + } +} diff --git a/SOLVER/TEST_MAP/RouteMapTest.csproj b/SOLVER/TEST_MAP/RouteMapTest.csproj new file mode 100644 index 0000000..3b005d0 --- /dev/null +++ b/SOLVER/TEST_MAP/RouteMapTest.csproj @@ -0,0 +1,122 @@ + + + Debug + AnyCPU + 8.0.50727 + 2.0 + {7C76A22C-0E09-4513-B931-A18D6BBFC615} + WinExe + Properties + mapRouteTest + mapRouteTest + testA.ico + + + true + full + false + ..\..\READY\TEST\ + DEBUG;TRACE + prompt + 4 + + + pdbonly + true + ..\..\READY\TEST\ + TRACE + prompt + 4 + + + + False + ..\..\READY\MAIN_DLLs\dkxce.Route.Classes.dll + + + False + ..\..\READY\MAIN_DLLs\dkxce.Route.GSolver.dll + + + False + ..\..\READY\MAIN_DLLs\dkxce.Route.ISolver.dll + + + False + ..\..\READY\IRouteSolver.dll + + + False + ..\..\READY\3RD_PARTY_DLLs\Newtonsoft.Json.dll + + + False + ..\..\READY\MAIN_DLLs\nmsRoutesDirectCall.dll + + + + + + + + + + False + ..\..\READY\MAIN_DLLs\XMLSaved.dll + + + + + Form + + + DescrForm.cs + + + Form + + + Form1.cs + + + + + Designer + DescrForm.cs + + + Designer + Form1.cs + + + ResXFileCodeGenerator + Resources.Designer.cs + Designer + + + True + Resources.resx + True + + + SettingsSingleFileGenerator + Settings.Designer.cs + + + True + Settings.settings + True + + + + + + + + \ No newline at end of file diff --git a/SOLVER/TEST_MAP/obj/Debug/MAP_TEST.Properties.Resources.resources b/SOLVER/TEST_MAP/obj/Debug/MAP_TEST.Properties.Resources.resources new file mode 100644 index 0000000000000000000000000000000000000000..06c24d06c1cab750788146ce052b37770f3fa530 GIT binary patch literal 180 zcmX?i>is@O1_p+SK%5g?SzMBus~417oL^d$oLUTL1*ImYq!#HYkfouW`$RuQm0%R&p3wSbB8gMHX2zx4a70xbd4Sadq&8q z;3C$3ceXJ$^M$Zr+YCB35)Q06RT6B24TtIt)Tz1X9}8UoI!>+TcwX43%C-9k>vjd_ z-AnjCUOaeMHYW&)Thn9ZlWOyc9X@luMtl}vbDGX88ki|;0vOSZ&in?sgQ>Ce!LNIh z?pG&(iDhGHYcn8YH3L>58uE2`1PIZGVij04fb)}k8XzNpYMDl fAD2`5I_%>fIG^GV-@i~?hoM+H9LLh(M=aq_CARw{ literal 0 HcmV?d00001 diff --git a/SOLVER/TEST_MAP/obj/Debug/MAP_TEST.pdb b/SOLVER/TEST_MAP/obj/Debug/MAP_TEST.pdb new file mode 100644 index 0000000000000000000000000000000000000000..a064da0dc6cfa3dec2074828ac19332f0f796cff GIT binary patch literal 32256 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 J!YOIV{{YRMtFQn7 literal 0 HcmV?d00001 diff --git a/SOLVER/TEST_MAP/obj/Debug/RouteMapTest.csproj.GenerateResource.Cache b/SOLVER/TEST_MAP/obj/Debug/RouteMapTest.csproj.GenerateResource.Cache new file mode 100644 index 0000000000000000000000000000000000000000..49ce78aefb886b304c34f482823c5744446c943d GIT binary patch literal 904 zcma)4PiqrV5Z^V~ZFZArawt{w5X6JfuuUw*UP7S>(P9hLmePZlmwmJN$jiR)X16pw zc=o7J@aCuSDjq!f3B33nbY|5e=_1a;?0YkBe)F3@j_Wwi4-)>fG;WYOJy5YVXp$`2 z&6SqXvA`*IJ11aKnRM_d>hag@40E0376vKgnH9R*Im{1leU(l@@_nQ%#F?>+s(Zg2 za2cwAs}N@BvHp)JX4{Z|F{<1 zK?&!*Yxv)vZ|~e38e8C&Co{&n# z4DK%3wZQDaNR=p%t4lsOSD2wslW)4kJe$mvOLxAd8?WDge&f2#yC{JB6>#0RFW)ua je*8*4E~oId*~dL_c0TmJe4@BEL$S0uj-}0ySn59kTnqbA literal 0 HcmV?d00001 diff --git a/SOLVER/TEST_MAP/obj/Debug/TEST_MAP.DescrForm.resources b/SOLVER/TEST_MAP/obj/Debug/TEST_MAP.DescrForm.resources new file mode 100644 index 0000000000000000000000000000000000000000..06c24d06c1cab750788146ce052b37770f3fa530 GIT binary patch literal 180 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

?3WqJyryrRFttdBl&-LQWB zd!XmfzPoq(emQsUe1x|LxR;dYp7LF9xBN~xpKPBhv;G3bet~5r4^mFCZ8Qa*2c9_^5b!0>z2^50)VDi-_~8fAw*^ockZlNg6!{$x z*I|#ZZ}sy@=U0$7SjXHW%`3jw&GL8rboQsCRrwiy3Ez%IcsGDNP_b00Qsw;)9{4^W zz&`->>$had;@>`*_3?sdpRLgw_ZuJBzyD*)bGxFWqc7rKC&0vmw^M$`fnytU`flOE z7jVwQRp!NaIeqFB%inqStWU<|mOmTc22K@i+O!#sdvyV}!?OIoJkJW__oEXM;^lYb z_wMlx#=QY%T>p=UzBkl(Pyc{d5*X@vEi`rg#Z zx#j0~mv7=c%#oks9%T@9BJyw*fO7N6l`DQ8%krO3N{~D>eAuwh#*Q8P5zo%hw_|)K zbsC#k=b0Y-wk!LBRjXF|jT<}mTNf9XVR(k` z(H0;*8gJgTVR1ape2a;R5|NSNV%gFqz6l8l>1s^@&bUVBe8k`X%PaUk zJijG;@V)8gNAT z9o#PtANE5#NPs-JD%gkdJJ57Ewk-;I@(h;80k;3!F2AB1k|?)(_y6Wc$Hjo|kz)Jy zZK7A7p0eD1`u7&S`}Pt&`}7bCeHKDKUX(JDGAbA6#f6Kx;QR62uHXz3o*%?-C8~4C z7BBjda!K)y)I(J{ihAX{8(sO`yLWFm6M9C{eCV)OQTA@4Z~s1`|G>VYAHFTl_n7+r zd$O;hZmoguVhMFmyI#GTBI(9+@~9soKX>52fYcqBe^JY=e;(0U2NezxD_Xi&8?XF@a{2LJZx-5qt`Tb6zB(1G~g4BlZ-KXK~xDcJ{;r?28n($qqL z@5}O2ey&`(atZQd-$&i^j`V*;1Ef=S;erKyA|PWTqavhineh5}(I4dOlD( z%a$*dWgs6@hOjTDTp@qUHp+G?+bY{DaZQ5y0_&drpRwQKIrxuO}KcZX~vC+lJ?JOmRq~ zi4!J%fIP|n9OD$o|9FOFXSu0oaLio|px({#Q!Sw07oUIjc~H;^5e?qCaN)d^D_6C*&1LuSci^))%J^E@(0I9)DxcrI5z44aQxckxmvXbfBEIyCC82i++d%{x~HtT z4t{1{gkEQ1L1uqCOLXYiRd~ZWBaeoSTs`W$*7JCw z{tI26eCo+()~{RN;%3H8dA=g+^5lsVhmj7;FZBp(xY*C$=|R;CE=7sCS5si8+R6nLg{^=64Tqk7+ydJF4U*66ug$GT@9VRL+hdqr`M(9t`Rwn<4ztbfXJ%0^Cl<>7yQ7@pyKIKdv% zRR0cp_w5z&kehl3J11=qCf>yF;&i3S50@`r-j7771F;V%^moVbtRwoLPOJki!u77X{K{*24~1~Lc;Wm$*7y8x=dmAu?A>?Xstld|B-;ST8cTlqu^+;z^HG1g z*XqC2@xWtlut~m!vT=TaIuzSc>66Egw)a1D;1&F)Twu7=4{^P#&a#dR@}n?jZAd+D zD_q^TycX9>S*C0E=ieXN>&IR{b{@EEJiw}jPQf*1_%FQOg>c70EJI}>TpUF-uNZUs z8Y)M-SCm)Z%F@r#s58RzUY&728sW~-Gvzu!XR*(C)z$@41J2-mbw&R4bNQFGD@q`j z&*izY*oapd^FX*@hE-;Za>-z(&)e)(wQF8~w81%r_i+{3&MZa+k%McF@hVs-mWzqe znO}3{eTL7f%)do;9Mro2EdcvEt>WWxR3~*2>Qe-N+tjN-v?A%$1wGHajCoQYtq9N# zY1M91P+En(kM#9Aj+0wMH@DWUTaSAB>8I4(x3mElHoc-ehrBs9;kci+i;DgG_iuym zctpWAmV-IgSga$OjqvAz^0v~&JymB#rd6$4wVv$JqsLg_!?tbPz7D(Po5;uHqNAd3 zlq*-RJ@Sw(88`4#<|laqznLd##qs%n0Me|`^jfiE#n-0HU<95$d-l>dCrz3KonL+s zF)=YQ6Zun5u4K%c`O((Ee9E{X+5V@@307?`@hi z#d?iGkgO<$_J`ChXpwkYS8>I>%2pTy_rFxF3L z(4fHxgmb)K=&|y+apPXXdj>F#6UUE7)PAnEM^t2#%pbgvRkLQz{z%Wcd-v{L`3&r+ znfPwdxq$-*d=C1#CnhAGU^rcuE?vkkq=OT@g>IWmmn`{=@x#xCr#@e&POqrQNSQzE zpgG8w^;)4pgZfXy_P+{`rSsYK>(>P#`~`P+_qLetO=8&04?p}7VJ<+SZ5@baz*?X8 z86R`2H|o@`(-*d;K>C?~$BrE*BE8B$83Y;LdFSo^sj11yn7_Y)ZzN5sQl(0}OBXLj z^Z6eaEn0==suVT<`QOf$_Q%lBGdHR{Q)Lk5R%M;ShMD8(>G_3|Q|VSnlU>deSo2dS zHa0r+`t?-t%{O0f0T1tF-gHZTTCx()xB!K21Bhl&`J>)52lVg1VAZNsu@^9J%W-Z{ z(8(*m{IV+O!w){#(5+jyX|M@T2?;)(5*BtwoIH5~pAJYf+5e|cpZ*o{egr5K|1)pm z)7i5}bIlO!kz(5WQ$>eP?ZvB}Lxk_1-Nt$CYjQp_>3kyQ>w_~-p9;!3e*Bo66X%>U z?IS4b%~ma24ME=Q@C(g*e0Ii+8Sn6Y7c87Fx^(R%`eGiqTMrNM`kSv~zU#c4pXOY` z6(aev{Lal~tYu;t=Zon6_~Vbg4?g%{b>v?p-edj?7A#oK`F+kOdUWq1=MsDL?uL1k zPh|R>Z&7o&{H?$++Ue=upEhkS@@CsF673;N9tt?(f0*;~b3XqR`FF;gat|?lq$k!# zgdk;p>+Obdjw(moLS1KOa^4|J&Rg;x){W#08Z>BsJ51ujgcSzje=H~WtbWBt- z*M}WH5hx~2enX5M|C$ImDn$}sO}en~FtL00Zm}G;;JI_>3O_$Tb&GcYoUR^S$02Rb zQ&`R4m@nlw=VDk-#M2*s=)EWo>lwJ_k#n?MQ<8+=${jl7C*GU(o@mpqji^<-mZ)02 zs;E-Eig>>6^H?K8aRdRLk&y%WKN;y&1+4NP`SZWs2$^$> z-%sRsl=&SFWv|T2%Eo-`0@1d8E77DG=K$SsM#sd#O^pFGA81}=1Qg+G+#y^~Q=3HKeoKw=eBG|TW{qTcNn&+^==|f)~Ao}&| zB|3HPAm{U%yT2&s@;Dz^&$S-bA#9Z?q1@TSh7Fs8{5j`nRtL|5$5N70*68!q|JH2E z+8k_HSlG#-Lx*;Aa4`J4TD2;Vw{6>UV5?T{KlJR?Z3pInj&yvboqwy=?*1<}Z+Zmt zCx^fD`HmB~@&jgm2M-=`a&mG*{$~0L+GQ!MMe2a(%q9_N+tb^)v2G*2YSpT&L#sUW z#1oHKc=XXnD*WqT|Ef^2QpF18A1wb6(ljhvx~w;@ndrBpu)fF@@gHQkB|N%xskD9D zwzm+T3W!684`H2BEPqM|zWyF@DL<{|kB9Q4slwK*UHdxb6v7^O-~q}Yt8-oI*%d#p z7>xJMAiv*0`=!ggc{9CPvu2)%Yjd7P#kY2Sv01Z9VWFX3<;#~ZaIGEMLMbd_*~NU7 z+q`*`A4CJ~@kQ=GkcO#V5Wm2_2Q(@Vd6Sr!kZ^j}uANI*hS<268{N8f9gXV|q?KU(i)orb3s&TAIeP z6ghuuX%!siHZ|_1!H^0&ZfXYprKD!07*bPG98wH`{OfHWbYF*b7Ei~ M&Jr<5I!l!Qe=!(Bh5!Hn literal 0 HcmV?d00001 diff --git a/SOLVER/TEST_MAP/obj/Debug/TEST_MAP.csproj.GenerateResource.Cache b/SOLVER/TEST_MAP/obj/Debug/TEST_MAP.csproj.GenerateResource.Cache new file mode 100644 index 0000000000000000000000000000000000000000..33c0ed2817a04ad32c0fc488b74b8f73a4bef5c1 GIT binary patch literal 904 zcma)4&2G~`5VlF|CU#1bLscO-1OyUNBP$`Q;1YpI6sTxLp;grbm$i2+R@r!?9lL6H z0K^q8JOakfouW`$RuQm0%R&p3wSbB8gMHX2zx4a70xbd4Sadq&8q z;3C$3ceXJ$^M$Zr+YCB35)Q06RT6B24TtIt)Tz1X9}8UoI!>+TcwX43%C-9k>vjd_ z-AnjCUOaeMHYW&)Thn9ZlWOyc9X@luMtl}vbDGX88ki|;0vOSZ&in?sgQ>Ce!LNIh z?pG&(iDhGHYcn8YH3L>58uE2`1PIZGVij04fb)}k8XzNpYMDl fAD2`5I_%>fIG^GV-@i~?hoM+H9LLh(M=aq_CARw{ literal 0 HcmV?d00001 diff --git a/SOLVER/TEST_MAP/obj/Debug/TempPE/Properties.Resources.Designer.cs.dll b/SOLVER/TEST_MAP/obj/Debug/TempPE/Properties.Resources.Designer.cs.dll new file mode 100644 index 0000000000000000000000000000000000000000..86f16cae526240b08721caf8505de9e1e3b1f607 GIT binary patch literal 4608 zcmeHKU2GiH6+U-%v)*iMH@iS&{?c(AkmHcS38o_ntdmeEvhKGN6ZJ6HMd42Q) zv2cB~cFqmWwhEfcZkdkl`$1&ZrKvi;>H216scN=@hO~x;3i}h&r{{%ZPJfw2l*h216Q z%S3rj#P)WUXmGpi`(P9H`t`oAj=~xrLfpjy8&RQx|4v_Y(42BnK zn?n$nEhW7GihAfQbl4U`?{8(InSRXt4bCeX`)1G%qEVu&14Keg|9diFjAO-k;U?&g z$qYRS4z`N)Drol3ahNXbxhV$ohxUeDkK ziI#J>e#Dxz9-TaT2g<=rhpEVqN6ux1a?YGQI|X)Yxz25EIKU8W*ASGfl4< zSBwIEVf+>`in-F^K~(WIKS5Db#29|^ZUh6no?m+%0xL{qRU27rb5{(}SQ- zi-VxPIEFY3$hmXwvY>q01}M7;g)Qwrf zwT((Fqx2bvZ7p~F$Zbgk+-kd?R8^_gU8J32f%bA)diHtEh0_u0Mjbh)pc>eDXRKwT*T+8s?v}{e~yuNW|!b3R;OI&6r&Cuv7HD2t(Pb zdmB2z(z_vZ-JLgp3 zyBA~w2WYlMHnnM)0_spil4|H7IEzk`g0u~+fL$%OpvmK`t;o?lAH#)(fBgBnac$;O z@#TN6uYR?c^1r+A;>z7qH-4VUm4?uZ8I(0t?$QvGA}W9=6|;H9AVp{l^1vXY!K^7n zeurs@;o-8NN4kkik8~{vywJiG6!=YVgVWqdxA;uQ^%_zQ@EwL9t~xH+C^g1?_vJ{G z4ipb%O)4GEvGvm7fq_hEs5E3`2jI>QOj|sb7fJ2Gz4hZo*HJ+jtVPy}8)CVuQK#Vs zR-A3PkW`9pjY$Pn)DKUdz==q9P@o1L>$-%=22mk#`-svLr6({WE`PMWe5KTkJ9|(Zarq>C+J^+1=hU<~S(}wI6XbYIWcU`iOC9YL2BJ;H+3l%HG zYz^4suUevU9mfJjn|hX6UGX+_BuzR84@e)eNc*&u$T?f=Q<`~3|9ju2bl&1B+(5l` v;LY~z_439!BzjE0GmR)i#MHuSdHAw3|Kod{i`%xD$^VSUZrcpp)`9;UlwFR# literal 0 HcmV?d00001 diff --git a/SOLVER/TEST_MAP/obj/Debug/mapRouteTest.Properties.Resources.resources b/SOLVER/TEST_MAP/obj/Debug/mapRouteTest.Properties.Resources.resources new file mode 100644 index 0000000000000000000000000000000000000000..06c24d06c1cab750788146ce052b37770f3fa530 GIT binary patch literal 180 zcmX?i>is@O1_p+SK%5g?SzMBus~417oL^d$oLUTL1*ImYq!#HYkfouW`$RuQm0%R&p3wSbB8gMHX2zx4a70xbd4Sadq&8q z;3C$3ceXJ$^M$Zr+YCB35)Q06RT6B24TtIt)Tz1X9}8UoI!>+TcwX43%C-9k>vjd_ z-AnjCUOaeMHYW&)Thn9ZlWOyc9X@luMtl}vbDGX88ki|;0vOSZ&in?sgQ>Ce!LNIh z?pG&(iDhGHYcn8YH3L>58uE2`1PIZGVij04fb)}k8XzNpYMDl fAD2`5I_%>fIG^GV-@i~?hoM+H9LLh(M=aq_CARw{ literal 0 HcmV?d00001 diff --git a/SOLVER/TEST_MAP/obj/Debug/mapRouteTest.exe b/SOLVER/TEST_MAP/obj/Debug/mapRouteTest.exe new file mode 100644 index 0000000000000000000000000000000000000000..888580c70592583102924c8499581b49ae32d49e GIT binary patch literal 282624 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 B1I+*c literal 0 HcmV?d00001 diff --git a/SOLVER/TEST_MAP/obj/Debug/mapTest.Properties.Resources.resources b/SOLVER/TEST_MAP/obj/Debug/mapTest.Properties.Resources.resources new file mode 100644 index 0000000000000000000000000000000000000000..06c24d06c1cab750788146ce052b37770f3fa530 GIT binary patch literal 180 zcmX?i>is@O1_p+SK%5g?SzMBus~417oL^d$oLUTL1*ImYq!#HYkfouW`$RuQm0%R&p3wSbB8gMHX2zx4a70xbd4Sadq&8q z;3C$3ceXJ$^M$Zr+YCB35)Q06RT6B24TtIt)Tz1X9}8UoI!>+TcwX43%C-9k>vjd_ z-AnjCUOaeMHYW&)Thn9ZlWOyc9X@luMtl}vbDGX88ki|;0vOSZ&in?sgQ>Ce!LNIh z?pG&(iDhGHYcn8YH3L>58uE2`1PIZGVij04fb)}k8XzNpYMDl fAD2`5I_%>fIG^GV-@i~?hoM+H9LLh(M=aq_CARw{ literal 0 HcmV?d00001 diff --git a/SOLVER/TEST_MAP/obj/Debug/mapTest.pdb b/SOLVER/TEST_MAP/obj/Debug/mapTest.pdb new file mode 100644 index 0000000000000000000000000000000000000000..8a0a77e6f4059d8dded99e63f5fcd25e84dc0479 GIT binary patch literal 32256 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

?3WqJyryrRFttdBl&-LQWB zd!XmfzPoq(emQsUe1x|LxR;dYp7LF9xBN~xpKPBhv;G3bet~5r4^mFCZ8Qa*2c9_^5b!0>z2^50)VDi-_~8fAw*^ockZlNg6!{$x z*I|#ZZ}sy@=U0$7SjXHW%`3jw&GL8rboQsCRrwiy3Ez%IcsGDNP_b00Qsw;)9{4^W zz&`->>$had;@>`*_3?sdpRLgw_ZuJBzyD*)bGxFWqc7rKC&0vmw^M$`fnytU`flOE z7jVwQRp!NaIeqFB%inqStWU<|mOmTc22K@i+O!#sdvyV}!?OIoJkJW__oEXM;^lYb z_wMlx#=QY%T>p=UzBkl(Pyc{d5*X@vEi`rg#Z zx#j0~mv7=c%#oks9%T@9BJyw*fO7N6l`DQ8%krO3N{~D>eAuwh#*Q8P5zo%hw_|)K zbsC#k=b0Y-wk!LBRjXF|jT<}mTNf9XVR(k` z(H0;*8gJgTVR1ape2a;R5|NSNV%gFqz6l8l>1s^@&bUVBe8k`X%PaUk zJijG;@V)8gNAT z9o#PtANE5#NPs-JD%gkdJJ57Ewk-;I@(h;80k;3!F2AB1k|?)(_y6Wc$Hjo|kz)Jy zZK7A7p0eD1`u7&S`}Pt&`}7bCeHKDKUX(JDGAbA6#f6Kx;QR62uHXz3o*%?-C8~4C z7BBjda!K)y)I(J{ihAX{8(sO`yLWFm6M9C{eCV)OQTA@4Z~s1`|G>VYAHFTl_n7+r zd$O;hZmoguVhMFmyI#GTBI(9+@~9soKX>52fYcqBe^JY=e;(0U2NezxD_Xi&8?XF@a{2LJZx-5qt`Tb6zB(1G~g4BlZ-KXK~xDcJ{;r?28n($qqL z@5}O2ey&`(atZQd-$&i^j`V*;1Ef=S;erKyA|PWTqavhineh5}(I4dOlD( z%a$*dWgs6@hOjTDTp@qUHp+G?+bY{DaZQ5y0_&drpRwQKIrxuO}KcZX~vC+lJ?JOmRq~ zi4!J%fIP|n9OD$o|9FOFXSu0oaLio|px({#Q!Sw07oUIjc~H;^5e?qCaN)d^D_6C*&1LuSci^))%J^E@(0I9)DxcrI5z44aQxckxmvXbfBEIyCC82i++d%{x~HtT z4t{1{gkEQ1L1uqCOLXYiRd~ZWBaeoSTs`W$*7JCw z{tI26eCo+()~{RN;%3H8dA=g+^5lsVhmj7;FZBp(xY*C$=|R;CE=7sCS5si8+R6nLg{^=64Tqk7+ydJF4U*66ug$GT@9VRL+hdqr`M(9t`Rwn<4ztbfXJ%0^Cl<>7yQ7@pyKIKdv% zRR0cp_w5z&kehl3J11=qCf>yF;&i3S50@`r-j7771F;V%^moVbtRwoLPOJki!u77X{K{*24~1~Lc;Wm$*7y8x=dmAu?A>?Xstld|B-;ST8cTlqu^+;z^HG1g z*XqC2@xWtlut~m!vT=TaIuzSc>66Egw)a1D;1&F)Twu7=4{^P#&a#dR@}n?jZAd+D zD_q^TycX9>S*C0E=ieXN>&IR{b{@EEJiw}jPQf*1_%FQOg>c70EJI}>TpUF-uNZUs z8Y)M-SCm)Z%F@r#s58RzUY&728sW~-Gvzu!XR*(C)z$@41J2-mbw&R4bNQFGD@q`j z&*izY*oapd^FX*@hE-;Za>-z(&)e)(wQF8~w81%r_i+{3&MZa+k%McF@hVs-mWzqe znO}3{eTL7f%)do;9Mro2EdcvEt>WWxR3~*2>Qe-N+tjN-v?A%$1wGHajCoQYtq9N# zY1M91P+En(kM#9Aj+0wMH@DWUTaSAB>8I4(x3mElHoc-ehrBs9;kci+i;DgG_iuym zctpWAmV-IgSga$OjqvAz^0v~&JymB#rd6$4wVv$JqsLg_!?tbPz7D(Po5;uHqNAd3 zlq*-RJ@Sw(88`4#<|laqznLd##qs%n0Me|`^jfiE#n-0HU<95$d-l>dCrz3KonL+s zF)=YQ6Zun5u4K%c`O((Ee9E{X+5V@@307?`@hi z#d?iGkgO<$_J`ChXpwkYS8>I>%2pTy_rFxF3L z(4fHxgmb)K=&|y+apPXXdj>F#6UUE7)PAnEM^t2#%pbgvRkLQz{z%Wcd-v{L`3&r+ znfPwdxq$-*d=C1#CnhAGU^rcuE?vkkq=OT@g>IWmmn`{=@x#xCr#@e&POqrQNSQzE zpgG8w^;)4pgZfXy_P+{`rSsYK>(>P#`~`P+_qLetO=8&04?p}7VJ<+SZ5@baz*?X8 z86R`2H|o@`(-*d;K>C?~$BrE*BE8B$83Y;LdFSo^sj11yn7_Y)ZzN5sQl(0}OBXLj z^Z6eaEn0==suVT<`QOf$_Q%lBGdHR{Q)Lk5R%M;ShMD8(>G_3|Q|VSnlU>deSo2dS zHa0r+`t?-t%{O0f0T1tF-gHZTTCx()xB!K21Bhl&`J>)52lVg1VAZNsu@^9J%W-Z{ z(8(*m{IV+O!w){#(5+jyX|M@T2?;)(5*BtwoIH5~pAJYf+5e|cpZ*o{egr5K|1)pm z)7i5}bIlO!kz(5WQ$>eP?ZvB}Lxk_1-Nt$CYjQp_>3kyQ>w_~-p9;!3e*Bo66X%>U z?IS4b%~ma24ME=Q@C(g*e0Ii+8Sn6Y7c87Fx^(R%`eGiqTMrNM`kSv~zU#c4pXOY` z6(aev{Lal~tYu;t=Zon6_~Vbg4?g%{b>v?p-edj?7A#oK`F+kOdUWq1=MsDL?uL1k zPh|R>Z&7o&{H?$++Ue=upEhkS@@CsF673;N9tt?(f0*;~b3XqR`FF;gat|?lq$k!# zgdk;p>+Obdjw(moLS1KOa^4|J&Rg;x){W#08Z>BsJ51ujgcSzje=H~WtbWBt- z*M}WH5hx~2enX5M|C$ImDn$}sO}en~FtL00Zm}G;;JI_>3O_$Tb&GcYoUR^S$02Rb zQ&`R4m@nlw=VDk-#M2*s=)EWo>lwJ_k#n?MQ<8+=${jl7C*GU(o@mpqji^<-mZ)02 zs;E-Eig>>6^H?K8aRdRLk&y%WKN;y&1+4NP`SZWs2$^$> z-%sRsl=&SFWv|T2%Eo-`0@1d8E77DG=K$SsM#sd#O^pFGA81}=1Qg+G+#y^~Q=3HKeoKw=eBG|TW{qTcNn&+^==|f)~Ao}&| zB|3HPAm{U%yT2&s@;Dz^&$S-bA#9Z?q1@TSh7Fs8{5j`nRtL|5$5N70*68!q|JH2E z+8k_HSlG#-Lx*;Aa4`J4TD2;Vw{6>UV5?T{KlJR?Z3pInj&yvboqwy=?*1<}Z+Zmt zCx^fD`HmB~@&jgm2M-=`a&mG*{$~0L+GQ!MMe2a(%q9_N+tb^)v2G*2YSpT&L#sUW z#1oHKc=XXnD*WqT|Ef^2QpF18A1wb6(ljhvx~w;@ndrBpu)fF@@gHQkB|N%xskD9D zwzm+T3W!684`H2BEPqM|zWyF@DL<{|kB9Q4slwK*UHdxb6v7^O-~q}Yt8-oI*%d#p z7>xJMAiv*0`=!ggc{9CPvu2)%Yjd7P#kY2Sv01Z9VWFX3<;#~ZaIGEMLMbd_*~NU7 z+q`*`A4CJ~@kQ=GkcO#V5Wm2_2Q(@Vd6Sr!kZ^j}uANI*hS<268{N8f9gXV|q?KU(i)orb3s&TAIeP z6ghuuX%!siHZ|_1!H^0&ZfXYprKD!07*bPG98wH`{OfHWbYF*b7Ei~ M&Jr<5I!l!Qe=!(Bh5!Hn literal 0 HcmV?d00001 diff --git a/SOLVER/TEST_MAP/obj/Release/TempPE/Properties.Resources.Designer.cs.dll b/SOLVER/TEST_MAP/obj/Release/TempPE/Properties.Resources.Designer.cs.dll new file mode 100644 index 0000000000000000000000000000000000000000..e394f28aa7b05a13404d175937792f8e1f536684 GIT binary patch literal 4608 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 literal 0 HcmV?d00001 diff --git a/SOLVER/TEST_MAP/obj/RouteMapTest.csproj.FileListAbsolute.txt b/SOLVER/TEST_MAP/obj/RouteMapTest.csproj.FileListAbsolute.txt new file mode 100644 index 0000000..192321c --- /dev/null +++ b/SOLVER/TEST_MAP/obj/RouteMapTest.csproj.FileListAbsolute.txt @@ -0,0 +1,38 @@ +C:\PROJECTS\CSharp_Navicom\ADDR_SEARCH\_GRAPH_SOLUTION\ReadyBatch\mapRouteTest.exe +C:\PROJECTS\CSharp_Navicom\ADDR_SEARCH\_GRAPH_SOLUTION\ReadyBatch\mapRouteTest.pdb +C:\PROJECTS\CSharp_Navicom\ADDR_SEARCH\_GRAPH_SOLUTION\TEST_MAP\obj\Debug\ResolveAssemblyReference.cache +C:\PROJECTS\CSharp_Navicom\ADDR_SEARCH\_GRAPH_SOLUTION\TEST_MAP\obj\Debug\TEST_MAP.DescrForm.resources +C:\PROJECTS\CSharp_Navicom\ADDR_SEARCH\_GRAPH_SOLUTION\TEST_MAP\obj\Debug\TEST_MAP.TestForm.resources +C:\PROJECTS\CSharp_Navicom\ADDR_SEARCH\_GRAPH_SOLUTION\TEST_MAP\obj\Debug\mapRouteTest.Properties.Resources.resources +C:\PROJECTS\CSharp_Navicom\ADDR_SEARCH\_GRAPH_SOLUTION\TEST_MAP\obj\Debug\RouteMapTest.csproj.GenerateResource.Cache +C:\PROJECTS\CSharp_Navicom\ADDR_SEARCH\_GRAPH_SOLUTION\TEST_MAP\obj\Debug\mapRouteTest.exe +C:\PROJECTS\CSharp_Navicom\ADDR_SEARCH\_GRAPH_SOLUTION\TEST_MAP\obj\Debug\mapRouteTest.pdb +C:\PROJECTS\CSharp_Navicom\ADDR_SEARCH\[READY]\ROUTES\ReadyBatch\mapRouteTest.exe +C:\PROJECTS\CSharp_Navicom\ADDR_SEARCH\[READY]\ROUTES\ReadyBatch\mapRouteTest.pdb +C:\PROJECTS\CSharp_Navicom\ADDR_SEARCH\[READY]\ROUTES\TEST\mapRouteTest.exe +C:\PROJECTS\CSharp_Navicom\ADDR_SEARCH\[READY]\ROUTES\TEST\mapRouteTest.pdb +M:\NAVICOM_PROJECTS\_ROUTES_GIT_\SOLVER\TEST_MAP\obj\Debug\ResolveAssemblyReference.cache +M:\NAVICOM_PROJECTS\_ROUTES_GIT_\SOLVER\TEST_MAP\obj\Debug\TEST_MAP.DescrForm.resources +M:\NAVICOM_PROJECTS\_ROUTES_GIT_\SOLVER\TEST_MAP\obj\Debug\TEST_MAP.TestForm.resources +M:\NAVICOM_PROJECTS\_ROUTES_GIT_\SOLVER\TEST_MAP\obj\Debug\mapRouteTest.Properties.Resources.resources +M:\NAVICOM_PROJECTS\_ROUTES_GIT_\SOLVER\TEST_MAP\obj\Debug\RouteMapTest.csproj.GenerateResource.Cache +M:\NAVICOM_PROJECTS\_ROUTES_GIT_\SOLVER\TEST_MAP\obj\Debug\mapRouteTest.pdb +M:\NAVICOM_PROJECTS\_ROUTES_GIT_\READY\TEST\mapRouteTest.exe +M:\NAVICOM_PROJECTS\_ROUTES_GIT_\READY\TEST\mapRouteTest.pdb +M:\NAVICOM_PROJECTS\_ROUTES_GIT_\SOLVER\TEST_MAP\obj\Debug\mapRouteTest.exe +M:\NAVICOM_PROJECTS\_ROUTES_GIT_\SOLVER\TEST_MAP\obj\Release\ResolveAssemblyReference.cache +M:\NAVICOM_PROJECTS\_ROUTES_GIT_\SOLVER\TEST_MAP\obj\Release\TEST_MAP.DescrForm.resources +M:\NAVICOM_PROJECTS\_ROUTES_GIT_\SOLVER\TEST_MAP\obj\Release\TEST_MAP.TestForm.resources +M:\NAVICOM_PROJECTS\_ROUTES_GIT_\SOLVER\TEST_MAP\obj\Release\mapRouteTest.Properties.Resources.resources +M:\NAVICOM_PROJECTS\_ROUTES_GIT_\SOLVER\TEST_MAP\obj\Release\RouteMapTest.csproj.GenerateResource.Cache +M:\NAVICOM_PROJECTS\_ROUTES_GIT_\SOLVER\TEST_MAP\obj\Release\mapRouteTest.exe +M:\NAVICOM_PROJECTS\_ROUTES_GIT_\SOLVER\TEST_MAP\obj\Release\mapRouteTest.pdb +M:\NAVICOM_PROJECTS\_ROUTES_PSOURCE_\READY\TEST\mapRouteTest.exe +M:\NAVICOM_PROJECTS\_ROUTES_PSOURCE_\READY\TEST\mapRouteTest.pdb +M:\NAVICOM_PROJECTS\_ROUTES_PSOURCE_\SOLVER\TEST_MAP\obj\Debug\ResolveAssemblyReference.cache +M:\NAVICOM_PROJECTS\_ROUTES_PSOURCE_\SOLVER\TEST_MAP\obj\Debug\TEST_MAP.DescrForm.resources +M:\NAVICOM_PROJECTS\_ROUTES_PSOURCE_\SOLVER\TEST_MAP\obj\Debug\TEST_MAP.TestForm.resources +M:\NAVICOM_PROJECTS\_ROUTES_PSOURCE_\SOLVER\TEST_MAP\obj\Debug\mapRouteTest.Properties.Resources.resources +M:\NAVICOM_PROJECTS\_ROUTES_PSOURCE_\SOLVER\TEST_MAP\obj\Debug\RouteMapTest.csproj.GenerateResource.Cache +M:\NAVICOM_PROJECTS\_ROUTES_PSOURCE_\SOLVER\TEST_MAP\obj\Debug\mapRouteTest.exe +M:\NAVICOM_PROJECTS\_ROUTES_PSOURCE_\SOLVER\TEST_MAP\obj\Debug\mapRouteTest.pdb diff --git a/SOLVER/TEST_MAP/obj/TEST_MAP.csproj.FileList.txt b/SOLVER/TEST_MAP/obj/TEST_MAP.csproj.FileList.txt new file mode 100644 index 0000000..f009375 --- /dev/null +++ b/SOLVER/TEST_MAP/obj/TEST_MAP.csproj.FileList.txt @@ -0,0 +1,15 @@ +bin\Debug\TEST_MAP.exe +bin\Debug\TEST_MAP.pdb +obj\Debug\ResolveAssemblyReference.cache +obj\Debug\TEST_MAP.Form1.resources +obj\Debug\TEST_MAP.Properties.Resources.resources +obj\Debug\TEST_MAP.csproj.GenerateResource.Cache +obj\Debug\TEST_MAP.exe +obj\Debug\TEST_MAP.pdb +bin\Debug\dkxce.Route.Classes.dll +bin\Debug\dkxce.Route.ISolver.dll +bin\Debug\dkxce.Route.ISolver.pdb +bin\Debug\dkxce.Route.Classes.pdb +..\ReadyBatch\TEST_MAP.exe +..\ReadyBatch\TEST_MAP.pdb +obj\Debug\TEST_MAP.DescrForm.resources diff --git a/SOLVER/TEST_MAP/obj/TEST_MAP.csproj.FileListAbsolute.txt b/SOLVER/TEST_MAP/obj/TEST_MAP.csproj.FileListAbsolute.txt new file mode 100644 index 0000000..504d9a0 --- /dev/null +++ b/SOLVER/TEST_MAP/obj/TEST_MAP.csproj.FileListAbsolute.txt @@ -0,0 +1,26 @@ +D:\Projects\projects.c# III\_GRAPH_SOLUTION\TEST_MAP\obj\Debug\TEST_MAP.exe +D:\Projects\projects.c# III\_GRAPH_SOLUTION\TEST_MAP\obj\Debug\TEST_MAP.pdb +D:\Projects\projects.c# III\_GRAPH_SOLUTION\TEST_MAP\bin\Debug\TEST_MAP.exe +D:\Projects\projects.c# III\_GRAPH_SOLUTION\TEST_MAP\bin\Debug\TEST_MAP.pdb +D:\Projects\projects.c# III\_GRAPH_SOLUTION\TEST_MAP\obj\Debug\ResolveAssemblyReference.cache +D:\Projects\projects.c# III\_GRAPH_SOLUTION\TEST_MAP\obj\Debug\TEST_MAP.Form1.resources +D:\Projects\projects.c# III\_GRAPH_SOLUTION\TEST_MAP\obj\Debug\TEST_MAP.Properties.Resources.resources +D:\Projects\projects.c# III\_GRAPH_SOLUTION\TEST_MAP\obj\Debug\TEST_MAP.csproj.GenerateResource.Cache +D:\Projects\projects.cs.III\_GRAPH_SOLUTION\ReadyBatch\TEST_MAP.exe +D:\Projects\projects.cs.III\_GRAPH_SOLUTION\ReadyBatch\TEST_MAP.pdb +D:\Projects\projects.cs.III\_GRAPH_SOLUTION\TEST_MAP\obj\Debug\ResolveAssemblyReference.cache +D:\Projects\projects.cs.III\_GRAPH_SOLUTION\TEST_MAP\obj\Debug\TEST_MAP.DescrForm.resources +D:\Projects\projects.cs.III\_GRAPH_SOLUTION\TEST_MAP\obj\Debug\TEST_MAP.Form1.resources +D:\Projects\projects.cs.III\_GRAPH_SOLUTION\TEST_MAP\obj\Debug\TEST_MAP.Properties.Resources.resources +D:\Projects\projects.cs.III\_GRAPH_SOLUTION\TEST_MAP\obj\Debug\TEST_MAP.csproj.GenerateResource.Cache +D:\Projects\projects.cs.III\_GRAPH_SOLUTION\TEST_MAP\obj\Debug\TEST_MAP.exe +D:\Projects\projects.cs.III\_GRAPH_SOLUTION\TEST_MAP\obj\Debug\TEST_MAP.pdb +C:\PROJECTS\CSharp_Navicom\ADDR_SEARCH\_GRAPH_SOLUTION\TEST_MAP\obj\Debug\ResolveAssemblyReference.cache +C:\PROJECTS\CSharp_Navicom\ADDR_SEARCH\_GRAPH_SOLUTION\TEST_MAP\obj\Debug\TEST_MAP.DescrForm.resources +C:\PROJECTS\CSharp_Navicom\ADDR_SEARCH\_GRAPH_SOLUTION\TEST_MAP\obj\Debug\TEST_MAP.csproj.GenerateResource.Cache +C:\PROJECTS\CSharp_Navicom\ADDR_SEARCH\_GRAPH_SOLUTION\TEST_MAP\obj\Debug\TEST_MAP.TestForm.resources +C:\PROJECTS\CSharp_Navicom\ADDR_SEARCH\_GRAPH_SOLUTION\ReadyBatch\MAP_TEST.exe +C:\PROJECTS\CSharp_Navicom\ADDR_SEARCH\_GRAPH_SOLUTION\ReadyBatch\MAP_TEST.pdb +C:\PROJECTS\CSharp_Navicom\ADDR_SEARCH\_GRAPH_SOLUTION\TEST_MAP\obj\Debug\MAP_TEST.Properties.Resources.resources +C:\PROJECTS\CSharp_Navicom\ADDR_SEARCH\_GRAPH_SOLUTION\TEST_MAP\obj\Debug\MAP_TEST.exe +C:\PROJECTS\CSharp_Navicom\ADDR_SEARCH\_GRAPH_SOLUTION\TEST_MAP\obj\Debug\MAP_TEST.pdb diff --git a/SOLVER/TEST_MAP/obj/mapRouteTest.csproj.FileListAbsolute.txt b/SOLVER/TEST_MAP/obj/mapRouteTest.csproj.FileListAbsolute.txt new file mode 100644 index 0000000..42dd88f --- /dev/null +++ b/SOLVER/TEST_MAP/obj/mapRouteTest.csproj.FileListAbsolute.txt @@ -0,0 +1,9 @@ +C:\PROJECTS\CSharp_Navicom\ADDR_SEARCH\_GRAPH_SOLUTION\ReadyBatch\mapRouteTest.exe +C:\PROJECTS\CSharp_Navicom\ADDR_SEARCH\_GRAPH_SOLUTION\ReadyBatch\mapRouteTest.pdb +C:\PROJECTS\CSharp_Navicom\ADDR_SEARCH\_GRAPH_SOLUTION\TEST_MAP\obj\Debug\ResolveAssemblyReference.cache +C:\PROJECTS\CSharp_Navicom\ADDR_SEARCH\_GRAPH_SOLUTION\TEST_MAP\obj\Debug\TEST_MAP.DescrForm.resources +C:\PROJECTS\CSharp_Navicom\ADDR_SEARCH\_GRAPH_SOLUTION\TEST_MAP\obj\Debug\TEST_MAP.TestForm.resources +C:\PROJECTS\CSharp_Navicom\ADDR_SEARCH\_GRAPH_SOLUTION\TEST_MAP\obj\Debug\mapRouteTest.Properties.Resources.resources +C:\PROJECTS\CSharp_Navicom\ADDR_SEARCH\_GRAPH_SOLUTION\TEST_MAP\obj\Debug\mapRouteTest.csproj.GenerateResource.Cache +C:\PROJECTS\CSharp_Navicom\ADDR_SEARCH\_GRAPH_SOLUTION\TEST_MAP\obj\Debug\mapRouteTest.exe +C:\PROJECTS\CSharp_Navicom\ADDR_SEARCH\_GRAPH_SOLUTION\TEST_MAP\obj\Debug\mapRouteTest.pdb diff --git a/SOLVER/TEST_MAP/obj/mapTest.csproj.FileListAbsolute.txt b/SOLVER/TEST_MAP/obj/mapTest.csproj.FileListAbsolute.txt new file mode 100644 index 0000000..55c582f --- /dev/null +++ b/SOLVER/TEST_MAP/obj/mapTest.csproj.FileListAbsolute.txt @@ -0,0 +1,9 @@ +C:\PROJECTS\CSharp_Navicom\ADDR_SEARCH\_GRAPH_SOLUTION\ReadyBatch\mapTest.exe +C:\PROJECTS\CSharp_Navicom\ADDR_SEARCH\_GRAPH_SOLUTION\ReadyBatch\mapTest.pdb +C:\PROJECTS\CSharp_Navicom\ADDR_SEARCH\_GRAPH_SOLUTION\TEST_MAP\obj\Debug\ResolveAssemblyReference.cache +C:\PROJECTS\CSharp_Navicom\ADDR_SEARCH\_GRAPH_SOLUTION\TEST_MAP\obj\Debug\TEST_MAP.DescrForm.resources +C:\PROJECTS\CSharp_Navicom\ADDR_SEARCH\_GRAPH_SOLUTION\TEST_MAP\obj\Debug\TEST_MAP.TestForm.resources +C:\PROJECTS\CSharp_Navicom\ADDR_SEARCH\_GRAPH_SOLUTION\TEST_MAP\obj\Debug\mapTest.Properties.Resources.resources +C:\PROJECTS\CSharp_Navicom\ADDR_SEARCH\_GRAPH_SOLUTION\TEST_MAP\obj\Debug\mapTest.csproj.GenerateResource.Cache +C:\PROJECTS\CSharp_Navicom\ADDR_SEARCH\_GRAPH_SOLUTION\TEST_MAP\obj\Debug\mapTest.exe +C:\PROJECTS\CSharp_Navicom\ADDR_SEARCH\_GRAPH_SOLUTION\TEST_MAP\obj\Debug\mapTest.pdb diff --git a/SOLVER/TEST_MAP/testA.ico b/SOLVER/TEST_MAP/testA.ico new file mode 100644 index 0000000000000000000000000000000000000000..7c2d733109b07f228ed5025a30a1c858d316f690 GIT binary patch literal 161862 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

KGf!CyAHSm|SwAr3y!{uo7} zK}mSHG&C#?X-jdhIJDIqKz_=bn|qp<%E|v&AYFezx6{56xwt2Nts?o<1J9N~7xL5i zb2jbna=yJ^bdy}%M+`W{Xi&^6#ZuC`^b}%-ikJHm$N9F09`stJ;n4_eB4LHiT6(09CYs#4ec>uX`!? zQm@*FQ}b1Yc<&7AaXfUF%=j7z`CG9XeH=Ee=hxm3@T`M><)iG{cj@B7y#^HTTi0RS zbj9QEL;OT^5U02jdJmfWI1`HR$NEhlpHhDFirbd<&3)ikhjJBym-6xr*+a90&xvqN zd#1Hww<(5$;@^dPTV#|!iZ3tvFCqpc=|zhyt!GR7#wnesLiKr);l{>y*0W!KN8E7N z9GSpoU5+;6HWSl~vT6?wAM3LW_cm_broA#e%|rTY-v{ow-OvBUw%>EFD^sq#Q-7z} zrm8>1)|BieKc}@XwAHXrc^BU42`|A~zlpC!Meut@YXB4*fS8<_${*E-)^ur|7W}O` z=nVXpM-MW$y!hP@8#TrrW3Ls(Wfw@6+=^`JLoBoctkIS%(tbwjn|cy^^4`av@UgeW z_i63GuD&xfxN6s z=I;?RFi@Oibe&A)kN8VEkYY6;_f)>|zg3~&Kj{?v*Z?^gdG5ImnUO9-BKi42_8ZXN zCZv^|aJk@%VWUQQK97_+ckkV21BNEK;iJd6RU5DH`xdn8+{KCB#7NXxG5FMXD2Afi zmGb;H65y!?un?bz=X zo7KnVm3~d!-%##6N_)>zJcnONgkjR5S?8^F*2k4Sp$?>VNsSsc68&%cmEXU z9H1vZ&DxpM7K@2|PjoC|{=n`?9XydiH{=JS(*ixnQ`gqkRqQCk8#l2>%Bl?R*zr~^PtCsbcVthR%;ZjZZyWpkRIOekU6y1fe2TEDOQ{IeGw4D&hPD@`12YY;;-x&3yS|`>&^0kj+K-4Qw*rUn&o=P zy>`4T+ve54W5BoA8iF|XL+uBRCsLLH?BUp+81CJPv#7EW<4bl)ueTE)PVx4v+SyfH z?{4i~{=B)ZFLpTk1kdwoD`{=UZoKPm*QI+8SFJ`(Yt4RQssh~AMP zyR2f^$lk0y>a_O`d&+pbr*tyeKNZtoHaLyZwdYAH`{lH4-=6V77n{nyCE7Dh`^*Wj z5!tQ8p#0lAhYVfRF2D9#%h_P8mpOR==l=<9h|*TjWf-^tnqEHLh{XqA{8n zNPNEdo^gp9^Wp|3#^j$EF~aRK+N?wqJ0Iuvhyncu{LiopVvbHObpx zb1t{(J>1PdWqfeU)fWUu_UmI92c+H=^9&~Dg1ye7uZHO!YPyJ2fFz(4ABc&s&7EY5^| zpmLfAO+41t^1uhu99OnpBKCl_;P6#(>*bK8eoJ%eozVlZYXrAIueueM2^w*Oc|YSkErh3)^yy;tXcT3Jce`5#vsBtq&gN z>h+%FdiUw=HmqLk7R{OL`G2K+p$6hdxsrVKx~c=)$ZmC&UGFRX8L1m-+f!#gC3;Up zpQy!?i2-3}yxq0QlL5b zZ2oSw9|P&T^JL8R@WZgF=sP%2hf%L>l+75b=kyXa z(QzH=Z5#O+LxlOs>LWQ*{bQST`hL+)(c2>9HSH$N3s|H%0*i?CvGx`ICU%wb(+9-+ zAiLgnu&;X2-V1qQtv}Y2qW_Nf5V6)2>l_8F2}Pe0^9y_4YHR!HcpJS&{~OPu{FZ&O zHQHDshqaVgpBWifnOFyq^q#bf5QGJgd9zBXI?PyDjA->^xn zEysL);)=WZ2ZH>2Z{`3-Ztd~jJ5iehCNxUfA=y~=+#VRm@{XNtwV?( zgdJ4-5`QdEJ;&Ny*2baF5iGG`;r+>c@WbT`n7^dFSZ~PsWn{yc+n0W0>U)b3i1&BG zf7u&b3zu?xyMesWzllwhZkZ28og`viIr?&G>spz~6Io#Gym)yi7|Tg{o~=b*%;>vD_TU-!sIBPNC}6EdTl-A>vh@P7FJYZ&z6tFO%E!AA zcS6Q|Lgw+Gka5kOZT^?Wr#1(AH!mKkC&t-q3oww%+N-!Tfo1o$7EK$ALW&R;-B% z)`7|w5VOOtM`zJL?1kD$W&^P+tj|pR10RXCMbLF(QLMv8ADevMKs*a512&!Z7&a3f zr<}sk=601GLD%d&K0kFTa>n=w*8hXw*j4_cjfVe#4@7@G&(jzgi)-PhJ@V+|!IfKY zaVuA!%i12+#tC@~fAPuxB*LG0Su*gn>g404hm6HxW|U_||3_r&ebWAv&K1D}WQe|% zu&(r&7#_R}$p9+e+M2_XwLpEnL4Mu{H=zIF#At&Fs@62z&K41sc*KOm;uw~?roy2YuQ^k%D z=Odm#f;ady=nXyvYmH)8e0vHE$xpgrmVz*hj<* zVjo+BZ^Zx9efWH%M&-LYP1>_=1oHlt^ymQbwz>8zl_Ya@O=jnFG>Jvyxy5iC%@ z*_=7Ef^lQVxD{ugY3qctmc~=x|85|E09m*CN@H6BVt33%OX7XiKC(6CSs#uu2r2_{ zSNLzXle$g+QAZN{2^ix;oQHM?Z9LXO#19DNhpovr>lrsYuy;_m*95H{*4oClaZR*t zO}DRe<_qC#tzKP79fAD+Q@k6fZIva}ORc0oM@!e|iboeIV`6CZrQ7&E{AtN!5plGs z6OOaBW3(GEPfmQ9el$!;4jjaCdQ9lkW8?SyVWbg&G_tj4j&x@ka9wHp9vA8t%BS&nPB#8~^5t7p833`2ly_U% zt=?)+AFaR65^Wc~Ark-d-GtG{x|1g5yD2B++1dK)vhu zSYon_&6Y1~b_Sb=zk{!W?}j}3WH*Ed>Go6Pf9T?%UEy1p{~lz|RQVnD&bLDej!VKwS&cfTbmU7 zv*p6G-D2^dwS(cmr;z{VlgQ8G70XQGg~fHydD_Ob&nlCIwcB#V<*wb(MOq8>6W8JV z-@E1~Y;i4`Hge;}jMlo?*SiPQMtw!L(wDJ%C zz5KIIaky4-QvTsTa#oi7a?O`t{yX^RKmP7M+k?J*ks_OA-OvBzK|F8af>VR`!xo3@ zscLOHt!domwC7#J0rP{p2Mr18wANaf%{m2j8#Xb0qs@gcMH?9%As;Yci!by|;J>&R z?0)yx!B3xhz&-i!ZNb~W{v{kW9*7SHAUuK3q;&gSMqK(5wFf2t#rzM~aqTEu1P&cG z?g`pyz0y{59|`JpI5cR|sDZ|>H@7w>aY)+J5N!kUqn-9m;Qv4M&Od+V(cppGFLjUJ zeQogmZ(o-je#P%hJdd7-UrGP71pkZIge_k8^kdg%$xniYJx2vOLzlUn!%hee=+Q68 zA35AzxM5xJ!hb$*`F#HQ-)-DQ$p2?)+g6vM$&hc2+5dn3-+#FO`sw%GV|QQY9=~_1 zd*|0LOa74ZilwCgIeZaogxY$deofV{wjaBk8TYtmBhPakH~r1(iH;Y2>RO-mvTHW} zYFDSnST|t!c*W$dxB4RF{~cN;Jc_FwJh;Dh)7*FE>t1HoVa{85UHiOPAV z{iysOG-gTA`HDSSd$V{QX}^YRvHbtlwU~5W(0cZRS~K}$TQAtJf6IE)TH8IyIrV$4 z#jw+ZP6rS0_UC!UbgKPZj2MtL#(#JU|B&`Q!r@>4vObZdy-&w;uJ`x&ed_ybuemzt zI$=rB@4mmgZdb7;Z1H;M@Yvg*mXmJ^+AjZj3I5wPw*IbgIsbP->xEBx{!pI&toK;^R$=g+b3S3SYe>p zyT#{;OAsGbOv7TP>aQeLVf{CZji)c}$}Lv}ZH6ugdfoIlcR)hxQ-^DJM|oTJ{>QHM zf*%BRnsyA%J8OZv`^H3|b%EjkyNYiUC##86E%t|aJ7aUO8;sjx90vWSY^4K0U~6F! zhb3M|d`^8x)}KHhB;yho%SgPRaT4&He#7_PdrvXxXBE56bItNM;P02PJ0)z4bRpfj z_UG<$jSipT4(Zj|U9NGUk8Z!p_0jsrV)|~$!^oOozMfGb`6vDZMdLs8snYMH*fV1? zEuPF+Bl^kdvm)lN?|v9ZV0~HGa3$-TBK}Ogn%IzdZDSS0XKRxZA0{R(+=%VD3(i+; zaQ3WVfcm7H^qoQ*OLc3+=dZv%Yq;mke#kXz({}ekfo8NwY88%_YGv)=Ct~+C2@;_tzjrc$PnU`O>nYGZ} zgZJNS;|qSi<2j4}W0!aA*kR)l;G6outbY$*1wJF|jN>8B%y?Y-8X50IKjhM-OQ}=; zrM^kVtM!4>{<|OOxTrywV_fS+&$_0=SGfkAk8*96{?xTw`G#w^;#JXW z#kBHu*KW;kUHkJsa2?ivM0+4+Z$8$sNWM;o3;y8REc=;jkUP@#?cLq2TsF(rpNIdf z+f6JI`LAjFGh6ZJNA9}PU3bZvVBU1~yNB_A@jnQ%wCsgvCkiuqrwwbuXl ztvBGmjXPkR3*#^7|00$sn{VTHWLIp=BjX+z%cK6sFEy6>PZ|sIqTcZl@p`M?bB$=G z=xFsF^w4=r8voc*J9mgauixR&qLve{a}BzU2paYp9kdni+br7|G#h(a&~VUV*XXFF z0n}7&-R6^T3EH0iU+4z)LeN$=D(B>FuGO4}gPduKQxDR-DF^lm4p*PYiX}5`jr$9< zhWoyh|Dl7A2nG*4%xvKJ&T!D$)`4gW_RJKPD2;GN&TrMBxI z-A|r*I_Qy`8(etdMjJ=QxF`C{^^J?onbE)h5vnIg1{(8g?Hk6jsvmBksE4SXbfVOD zj`{~$iT~?Gd+Ijt;2Lx}x~NWrra{xe%hYZ?Gnh4had7D+o838URtIxbFU*)d&yATh zBgpA?WYBEXM%QljZ-Vw~-w#@=o!hYc$e>RBX2F2Iy|n&%Ua(^6tYF=$0>&H!p8t}+ z;E)=$|Ke4Dy_*|3bfDXG?sB(a)+CL^UZU|2tL#|)U>d8@*8TLy&$zSCKGR*eew|yk zbctJ3u+aVH&DYf@@JIK+efPp+2R4hBEOJ+Ex!gVZ{U_Y^Z{6WGU%W|uUIX0GgOAcU znTCw{ZLH^2IBDG6QM!q7ugo1r{b=nZ#uR9d9;dNywpJ!%yflxH@ITBQAit_npNTGK z<^!&NyMy)3UQ;(VZ-|qvcjvEIU^Zuc;UWit!<84UaND+Sbh%w^Jj8qIyRLTsQ+1~C zzfbRjgDDfo1}BUe>4qKMKNy!kG#J$XP?yuPg~lDP3xY5I?S8L%^IO~QaN|bj1^xRS z8caXsBzOLK=LXwuzcu*jPo8mq`or&nzbU4mdfNI59=QM8!RX^hxtnjiA-LfDbAv7# z$EI49U23}c&dQ$ZguK43hFj!9P~T1 zhnq2FOmOz%>BxH0=D>Sof8DBu!M5u+y7j9U1+7{(FH&Fp^U}|1>x=gc(70&i@n7-{ zi_~{lblYvWN^Ue3tyfp{P-CK(W6#Z5XWadeAxFEbE?N=XaQRxyx4@{SAU&7Grfo4VuY-|L@U(XDLSdAf(O8_Y+> zyj3<94o6mrGFmxlUo)--KR{z!uzSJD8dq@kl9{qOGXu}_V!jth7ZwIrZCV-JdBY|* z;+P}NPHGI#6%{RCWv^FX_(I*wSUVeohurklx101+;2YA1&UhWhbxt{9q`PkO8h7h8 z>)m~~T;iy&A5ot%#Mq&WWy9vH@3Md2gWaLMd$`GyCb*3o*1H#;|Cz>0or%r(U)8bw zDq7Z1Z|s{h#%Yx&(YM0*X4=rrn>Kbcr;c?im&(@(?F}|()49vs)=Ss8+pgWQL!B;{}VPhxZTbC}KgGayfaIj9_1?m2G z6jvFfZMl=|Kqu@0<6ZR~NFaYUDd*8xQo4P{5$RhK#zwooeR>3i($}jtt$^iug_%ACYe!AJ!b1Gu1X4B>!cY zjyH(DFZy$Rjp^*rzD-f@gL74H9T-3d_w4Q_o-i(0xL|&;`Qij)r~~<(MU20a4S7WR zRH5-58k19?XMM&PJKAnhJCly*oFkzl#F+TDfboybnl%Y}bU!HQncLZQ>wG{_=T04p zTIHxs*PwWLL_On|;(fmQCF^T{zeuuOj6eNs+O(4_uEX45c^X?z9EWdd_?A!qL-;Je zQd~V{EUV6ynlu&%|MMOZ-(i%;?4-ShZ(0}!Mm{3OW4W2lRqxf9%tKTUb=C2HpM*h6=>azL+aku7z8!9{U3bfN zO;QZ4llCi|#DD7QT^gfWM9e~RnjDMEwV|#KZ#(&~?e3wmoK{C&G&)HNC z4v7Cp=(63!@rWDoZT$Nh`%fay%J*LQX=Nqi;M4)M&17$WT#iR)FA)bq{(r#S!SI-I zQj8a5pBT0NPmbY10XT1p5ZTB6NJkxgXnX@A{_`DUHkE?|@;#Xg13#>YxE}0Wp4R7 z!1p7%dJq29uHx@U%ar-3{LA(zK6@c^w%`N5$9F>Ie|q*x`HAhsh3EN3Mc?Ho{m;0a zkMbPbB(m?IWWxggEvxdOZJA9K|wq<%?((jxy+0B-kC8HtlPo&!m{;&`Za8w5ix^0_f54AX-8yJ6>vZ?q{HOP zJf*DuDDv`czKxFkmYBzzn*U*wY)(tE#G2SqzWdRAM$VPCEO z{6n>$P1Vc+`8Rx5+cl(v_U0S*YA$Lv`z!~t9LRDY%YiHhvK+{AV87!)n&4~Vt8<^$ z>Fy6KQc`?C(9i#oV85=N-^p&BI<0iT#U%Y<7u$gig10^Wu`}GM#3p)gT?VfCv}SKm||=R+g|{e}AwZAS?A zd|^CB-&Ks)xY!f5f0E|to*|m83-y)4>F|ZbwaLW zLt0XXtUTUbdHPW`Rc-$ln&hWnrx+z`lC0q^zA7OJ$4CfPs;bhUt zqM5>V4j5}()~TWeq5{!k(GvCVFAZr)c&1pmH@0 z>zf9=i#X%`hrMFb*Wl(9oUxtK*%X|qYsJqNvfZtv%N>M0cDHL9oQDeMk-}n>a2YFH zCxrN%qV22@=lQ}BoEM4~g_tIB7C)DTv|QVCv@9kM3qyIBt^9e;iK1~TL!QcVjLL|e z>8OwZU2ZG9OHQ>KNkO4V=Z# zgQe4brCWn^jNLs>=Z+Vz)8UNG24}C!9%rx1OU2=`a88GPiF1+#lLtKu`@nNd9wZC1 zRkl-9mz=1&Vyx`KaVqoCDt|xG!IFutdjF2dwCbwnl8GjvZQI}Fp#;w5^|gg>4`J$k zu%n_li=X3Ub0=y$O?<`f`noxeGdOshJ;rQHU{?+2kcAX^kQ^@5c-46-_bkZ*_01&7 z!x+8mNXfxq$wXgKPsuG2}VC zukMtBbEY(@K9?H<-BX*cjoJrf z7+-RM>74)^ctGqqcK0XBBSM^%FO;y6z&V+O5S5;Zv zT+6UeCx>PmcyGyqmxohBc_?>VlePtIP5h}?+ahiw%EY-czP99cj4(Yx<<8Wms;sY_ zj%Q!zb8&g_Z3|)#*4C7+jhByy*6gObSMEb`+d_4O`I7p+i@7uEA``ORC4B8P zZK`y>Hf^f%_}cL{mG{BEN%~yXvgzf)#~xDJ7OE?fZ43F2gXJ^yl`Y8a(W6Hv%~8=- z>)x~={;6ZynyvJ`eFwES@hiX?UpsA^O0wpC?WuZ(`Pw>{u1%Hn!6J2YP5IhY&Ffm3 zU(|=xzR7`XZGnh-!eWxL2~$<~o*+!~R0j+Z-iK>`lU(87LF*>ws14CkxaZ0@J6!TH zSbBdfeweVu51SxL;!NG6x@f=iwfBR%zAX7N-`4v;!od3k#1x1}63Za&I9IsMR$Fq0 zXqsq}j>k%u^JD{t3FATf9_cX6@7hgsHMN)RZzue_DsFbD>h_~_&2f^G@$%QE2=`Nz z-z>?}JkbLAq82AX&cbq-zxp-cZCSjp@&Co&<)URF&K_&S8Qm5(^MoxpPuKo5;Y6Ew zoOFG(>f=0Ncq}#_pPQHou@m9jP3^>kw4PQ+>3wU}|IJkow2(b$7sk?h>6#-{PvAQo zr@Y2Wb|&c=v_oeiTap3l@p$}ue{XlyIKE}+jCj0EI4>2Zi$x2?f8Pc?Nw`cFo)d-d zSYd@;u>D`rIXKYqyh4&(XQ&v;%amiRKD!B)xB_b-n9rKEDQGKU6cW z)Bo*}1<6mY^6D)*LU|8S-XoDMmBZ=-m1%~Eei7<|r2p>iLRs&Z{XcWu0o@m0mx;ei zWQPl+zw<>iMBqM7m>iFtR$Y!gA1tho5O(w-bk+F-v~8zzt%Ylj))#K(`;~|d3G;fI zbIZ5$1VeGZLNsnspeHh>?Ld`bxXMF6$~X~y8Yio~)D_6X zBIF>8ab}Fm;!RZlWq%in=89%W9;QhKP89zq%1;|7dwslgdxZ9n7B>Bfv*`a`=&!Kr zEDSAXtm~SAtK=oxe*pgR&`PqU?Am)9K|J2uh&(-?82l`i zzd#vhef>(t7qJ1NWc@FDuvofPpgMSg_&Z?(#?EyR5VEX zdKmH`>;zq>)?qzhZT~p<8IDaRO0yBl`#{;Ao|3&mdj16Jg$y>JP|vs~LhH0&>+0Xy zR3j3mjAi#8r~DqzNe~`56e^eTl^{H zBkg7%tKk2td|q|rbxFvpe`p)$>SMlQIXXD4HX zdba|-?`+i#)2-`)_>5PDarSu zt`kj=9U%@u8+SIorSeV6gm6m6kl7cezMY&B6VZM1ge~JOX393vmOWAVouGZ{$>XID z`Lc_nC5QO2v-ONcwm`P(Fky0}dzGx3AX>&kZ{ckZ5<=>1pvd*`X z40O?X;$@8Y#qP|+c7(DJk9lDqZsr{!=B{UcS1|GVxLj+oWRisgG{^W!vu3&ZOO_f9 zKkhh>TiR_@*U4XN`!Sc4ty9E0X`W6y?X=|m;)}(M^e$7SJLAQV5qiG?;$?SX)SB^y zDtmP$D+js{m4-e4Xd>Ybj4cja&Xuk+Q#>I7(P3SI+az#D#e!0TE zI~dZ)Q9^E7>s$+Mo9Q0=K8JVKegoRJdPY5nb`9tBoaVHbbx*HQenu$YF|sGg7^t3Q zV}Yexm+Ri2i|jogdE^n+>@r-?NiPRp7Ql~d!TqY6Z+1WWuV0j)dmek-jntZ8KF_$W z|L8|QvU*f&wWe|uOkYikg84DdZr5Yyksoj0qxrKBPnoYJP6NXMIsp3A2kn!nfZXHMm^@aO*+{yR!}sL6!>H~o!m{eP8xKa&Ie z7-C+MrxwC}vYzp&D9PXWK6>}ygAb<2fX7RD*nPL$b8o5GdpUUVt>3u8Lxya{U*Zx3JP2;UcrlcJ@O1Ay9{#Lp0XKhaK_iaGsab!xaHGi;+_khmPyxf_v z_vfkGspI`Us(+LE>90w*9pM9=+w(QW*?=rOhfx$)F5+kS7p`DVHFpZEpuAw=Ddl`DEDNuJg4e z<*Ojcwx8B2FPH8k1Ngbx-;0vN(Nj}paFAKMH|EKHAOLtxL9MAQ~ar`^9 zYvYo8SwZ|n>NkA@3b0xu_yE_rwRS+*_HAA zzz|=Ke4^yB&9voO|6d&c(Iby`*Ily4tzW&^Eu3|tJNn4JDS3y_q3ktjEA_Y%DOYEb zzCUrRbI(23O_?&q#(NPDgd{(5*RRp2-3>;rh$gYCZeneuuF9 z$iTj`0}0B2KC`AA?YKDBWgT-5>m_3g!uJ7}y-DeC-lGhC{w229|8zKi@WBTz9pS6c zZuLZb&dY;;4!Vuq$fW=NJh4XX2-hDqOOuvl=*oSbA?y?kAA!Rc=MjfuD| zcw%oDwiov%cweyd{v7?3@Z|?T_<@a&VvJOrJm0w1-*@`yr~7v;@4Mvc+4-V`XuD{K zs8pQwzteZnZk%*&_3G7b+qP|{&*?BO?OYsx|2}?8Jd65_>wG^C_)=GR+|zBj1{**e z*wZD~Tx)!3e%yJkN#jOlW2h7EzwI*D_mG~RXKeFDHJ$SHKq~|F`R2`=-4B2G!z892 z+e}+*DgHt%u1%iNl&gb$Q9`s`v_oXiENvUd8Ei_!w6y=Ym$D)=(=}EHn-9L|y~n(? zE%JbW%h*8b6#5IOXX5gJz4)HSc6#jnmiO#<;a^;fahE#k1pI=_H=N~e+;U!&59QSx zWmlzXnsVDEN|wd@cgV!NdGj2)4UN)RH_mCSR`S~DecInHN{D!u9imLvCC^hgg9+Gx z(ca>WO&~991Tv(tbk_e~SXk(`Zr$qWvxeAb3=Xn@AAtQYk32m3=%Y^SAC`~@`~lzZ zgg^Mw+wYhhFfOEC&Oxrjx$l__G&rE2J8|4dlL6|1Sld7>+h?gjPX@nTq9i_5wI9d% zg%@6^v_2yz_;TP(zTm8}rzLRSvu97a7Un=6@M)v+ux8B~^M^{a3;gHhVeHtk*6&BZ zupe*qJ>`4lO*grQod>&iD_%7j$eD7ZwKcE-_=9IGDjqu+^7%+@YfCCrL6CKsvF<#Oppbofb?XoCu^Tq3$PWgIZfhZvY>s_K~nM&-Z!x_9vtAjKB z=W#|}kQ?-w{NX)yE;v8l3)r2-IE*`?SJo*$J5%0(T3?w4gBkO$wkpss1yZJ4Xy zx~m(TcT76`(Ye;5s!rsYFCzb~qH^J!u1!^0oUsGwv-iO~&e+_7f`WaDGh_7_oBQdf zpW52?^nrVMWh^ZJ`Gh=RcPKNq2%oSb@(^unA`h`xfY-HGL!9!ptw>6T^B!g3^G&-= zhqHhGif++|IL^$a}=)fwl#0 zhO%q}|3}-JrQozf|Dn6!OY%4;w7*@%|7GGFZ&QI&Me+65Q}*)s+U51ZGBP;LAK>`K z7hkx4|NGx*{&hC?Hj_U4^7}135$}wmZ3T3jx~HNEd7y29O&~vF2vsN#$UtscSjTY& zEC0R~-InEp`8HK`;Ou!1&Ns=ACN53Afqvp6;4{!~mCkO*-xE8|H#g|>XPVy1sxPn~A?68f^V#S5>E6Axb5WdYqpuCG;UhW*e%=p5 z#=#yN<9!FV@PR%{ualYTgD5WOxtEfI>FZAF7rxo0Y{(zw<2qmevrith_n&<7N#nE6C%%o^34Et0A4;=N z-u58RzJBmLjXWcv{rt$Wl@tE+zT{CI34OigmRrmQ!cU%+E+J?94-epBT$kT{_g%-g zWxo9Il(O@_ytmiSIHq3L!5{fRZak03gMFTxhF^x2$NBNcAGi4zkT2|1yw2u58UIYV zkq`1EQQi?FM!2O*zZxg#^Q3No(#bOS(GP*0@VsCi2N7aM^2#e_N2rIr{fR#h9+CGYmt5j*yzxf+8`)q? za}<9smpljClkS~7zHIrQGJ-w#c&gjDrEAz_h--YvgycE@Ut~+{XNM>uDiGz1e7j$} zmN=d!N{F~NV}4%0(Amn=177$1GrAnq(e*#Px0^V2ggbTSM7Qd+Id14t#dBrcdh<<5 z8TjtwkGcsHPOx%e58wqn!6uRye9x4?9jyH`qg&*SxjT>#-U+<~v$AmJT5w*taG{$t zX_C{N+HSyr0dDy4;pWe=k35jqRaae=fFW|?0o&l~ zg+>RDajj)&mc@=b{HMd>B|aE?;a&^pQUg8nFoLbeo_0+GbkI+L+;{r zhJSXtEp`Y07Fj?Jcqj6y+oY9kwZB7DU8%J)o+e6&c#eN&i7hq)oZ%hs8%@4`x?t5J z!}^|^E_M&xewlk{+Z8Fqxnqwx(w%Kb_zr)?^Su^!r;o(V};Ohs<;&~dy8Q+fY z55NFE$NeSl!!9s?1~P&SaZH(!XB(>%>T?uh_C3z4R;{vY@lTMKc#7f=PK~-BYy3j@ zGu0#UJmSar737N?P$x#PpdQZ^)l|Yp6o|HqsAr;ON$y8&g!ifL*m_|K-f{dnrZ0Qs z$dT^dw}0dAz57n5^-0`~H*8IdKlnZK%rm977r__5@an6tc1xBlahew^=_4YSB(}&c z`15~xagJl;kE8fAW{Yt<@X0^VUsste@=V=^ z-`4@r^OfCChd*Psu!&WbkbC?A0q*IE+5&!>a#$JXo^pbXTf6i6i%jpq8aoiR0i2`0 zNB=$6)CFK4J;!@f*JIng&5q*iebcxvLVXR^zTM0|L>*OCHXt4T&4v`u(TJU@szhvz z7(zq_u*J18SsABJ$anLnPe|gO34d(9$3D|mFKPJ0OE8V&TpEv&8FZ0)#@l{mfb&(6 z(&683#Vh8s^W3V6vC&o}E(9+^npPXZ_vNcD{40YQGDAIp450T_g*|0Shd(|b<2K<1 zGEfzE0AG+;g6FTc2~llKR>sk7f9cwiWj&KP z19^p%(6%7>>s;>6>7We4SQW{YE=LfO|^RM(}<4YMcIl zxchDQ=F88!=bwGdwq@yBdH+ZMef&SJ|K1Knw{1@SuElek9do)PzVG?vx5TG2CHk8D zb=oFGwJ}*4YZLyT|NT?<*gad5z9?-F&Q(RqRR2dYPq*J{&O?SjaV=tn^pO+m^Zi2T zI{n{1=0RDr_P=t7{q~KQQn3H;pFLT*jMCgyS^Qg!x!7XGeB+1RAa2Y!e<`%pCB(aE z^Mg74LyU`v#Q+Lxqw-UJs5a?;9RD9Ybc_4f|1014yEKreoT@DT*#C6(1^xnU2l{;J zPrx=X)*LyAwg2+7_@_XT@c^vRdFuWjJ${!%9;zxu@ozoueDnL$+57l8zVX5rh@X!h zcUb$b$pUtP`oZ@HhB}s;#lPYxg8%z(zh3bhGu#oyztfC$?vUH|xC1v8xBsG8#`hcb zI=)owzqx+*d|IXqVBg~ymvv0tAh4sf zOUJb>4*ZS7-;e)6|G^*XcGX`?#TR`p3-9>Vev11NLkD<2W-WjQLCGZ}k1l zeoI`R@ml!i_+|&3e1Yly!8d+V<@kHs&v)Q{>`bIC$gf2)K!`Fj*`oY(!sdgr=zs|u2_EXp5JLfhJs_KE&u zi|I#U?4KVK=JlCzVR0FtE*HaWY80`dqF&w?=~3|j=hJ#oj4saT*my+UXNo} z6~|upm(HJR^FaAAG?YK2gtoOMRV)7B7{@u?*gvn&=r`*W`u?@J9Y}|>$JcMc+0XaT zr%xY?#faIS_ZGXYF6@aB@vH%d_i-1jEciy?&-nk+#($-=+0n6o8#ZjP@x9D9>2YU# zICh(F5T?ZGCA`}#k*4(mRuQvD}yVm>)7 zn!B?W&oJzn2kh&l|9s!Uct6JdG5#w$7TAvmL;n5vPp#Ey{sm^wsMyz8h3tyDbd8J}0za zAj%h&HxXNTRb+ZkKP`42d>FsccKOdu23k(K&NXOXa-LJ>@@&*|lxse6t!uOJsT4Wj zyFOw%$Q3@G|8|IH;p;Cu^(1%hS*NC8zrWzWPPU49?ZFt_S>u8>YZQOxx96KL^d9Wl z=iRCQz3#KcKHy^`1B{Vi{%O`8_n7!CW67}_T<_0mTNMcz*eozaQBDe9xmhuDj5%XUzXv z$#4{V_BqeB{##G5!w=xQPwc<<2f&~GD5f4~u19vT8QkaPi2ISJuq@hCSt?LY$@)P1 z{u#DK2IA-ZG5;Y0#EGyQW(!vTCi!hQwtnK6V-5GUXU+8pnF|~pip>R`&~s`- z%2y$b2h39l?hsg`>&#ysUFQZp{>SH^xsU$vp}YOITa(`clLvYnw*yg|5Z~uo?z`;L z&1O507vw$fYl`ps#c~K5)AA8^WsG|m1p9SClFJEwS^85dE-$pP#pZTqk z7q-+H_xO`5j_}_ZR1+%HOZ;c2R9g(^Qyb`J!W%(0Oo{4q0C8qt|&`;PX0Z;wY1W z((w1#$Lv0`O?_0`68zpJO7hBob4i>YqWuQ$$VBuybR0hjoyW&XhkyLsxAcwa=>^km zo*C-kpY3?gee#z-nXH9*C$z1KlzgYs?0ppLO#5%Y{dTf^#P?|Hty(raMgRR;VA%Yq z&#V{mJgX|Xt_t47^FS^OMX!o{c{6R{YufA3Z+rpt{W8sef7gF(a^Jdsqs=X{Va*cr zC-5ysjTr2D_w44HHf?Oa|2yxz9hI%B;1lm+<&S?;o(bd9&VTvkm$q&Wa|Dv_al;0> z#CfOL+&Eh{u5i4YulKNXQNKAXM}fBcOUhM23q%Rg6QUjAmg6Hu(Uh-)gox|*h>Sn9 zpW^K+bRD13``qXx^$X|yJS4gwxvGk^OPN?%e4j#T_?G9tk3Ray<|CzTfZRg<8KrC~ zN51Hrl8_JMiysG%Pl;dQ@ka(Cct?4N{KVy}GJH#xfw=^#Dq#a&e)(nRZGeBzG+W-| z2~mOQo0t-MX~UIv1${Vt3&Xe!_I->k>TBxys=^+ACq(vq{FbUrtfTzkgAYb!_EkNr zP?R5%HrXT&Bt%g@mA1b_*XD|aZ^EuPuUy*na_y7Ixe~;r&{@GN!IAHkWW0J4|(HNFL2lnyvc0(yYY4m?r?RxcW zX~Y4;U)xfUtlVF|{*Uwz@vLmBT^vZLI1Y;UTT~A9ukOPCXYFjCzqZ>&*;KnYFipiV zj4E2ce}#0(J>ULkE@_{?wgsYWs(l>Tqas-wucCE)N#u*qc-tTC6V@|Y*S=TJmPi~( zh)hq3G4E}nFZi|BUbA`ReZJaeZNHdMOA~r&HbC17$9baig575v0CB&F--m4Fin6Kp za)9`f*#KgFmGK2j!9G!YUprf}2nVpyNg1d}e*m!_#zft5#~pFK-x0|_yIcD?0A3~o zY>D}@R#~QmzsPtG+If>FPfp$!=0UtS>+^{T`&rtq@}^)pdh}=;f53WeU=5+`wC{ZX zK%oBny#{u?EIHsBe8{ZMiwR%D1g`m_ zM2xT#xuR^!av;lrEC;e2$Z{adfh-5I9LRDY%YiHhvK+{AAj^R)2eKTc$>WH&S@}D_*{o*U=Tu?M%tSx!q+Pr#`_s&)nkM;Fk*3 zcxUmU7^dSd>bmeQfvRJ1HM}d&9~ZN=elfrGTYTI-d0c#bx?|;Be3hPcgx-$7c8Q5|7I+WjzEw?&#{PE84m;&hk!tl^I zVI_(DpTbXFp8}8$qt~k>U--Oi+bUH&ivztWSJdo5{Y1+1>U!M6v*PE@=mp|u$_s@2 zO&>B8{Ijw1~50Q>)I+p!s#NO{esm3EvL1H9&rbBu?{=hZJ}d-B*78y1dtb7iLy)p?;HM~JkBf5hGV-hJl0{c$mE%z7@jUshzjo1Qw@Jz!f`^!zDh`_ zJREa7X{T<~vFSUH X{$FI)ByuL + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + ///

+ /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.components = new System.ComponentModel.Container(); + this.inServer = new System.Windows.Forms.ComboBox(); + this.label1 = new System.Windows.Forms.Label(); + this.inMethod = new System.Windows.Forms.ComboBox(); + this.label2 = new System.Windows.Forms.Label(); + this.label3 = new System.Windows.Forms.Label(); + this.inKey = new System.Windows.Forms.ComboBox(); + this.label4 = new System.Windows.Forms.Label(); + this.inConsts = new System.Windows.Forms.TextBox(); + this.button1 = new System.Windows.Forms.Button(); + this.inAcc = new System.Windows.Forms.TextBox(); + this.label5 = new System.Windows.Forms.Label(); + this.inVars = new System.Windows.Forms.ComboBox(); + this.timer1 = new System.Windows.Forms.Timer(this.components); + this.label6 = new System.Windows.Forms.Label(); + this.txtLR = new System.Windows.Forms.TextBox(); + this.label7 = new System.Windows.Forms.Label(); + this.SuspendLayout(); + // + // inServer + // + this.inServer.DropDownHeight = 200; + this.inServer.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.inServer.FormattingEnabled = true; + this.inServer.IntegralHeight = false; + this.inServer.Items.AddRange(new object[] { + "http://127.0.0.1:8080/NMS/", + "tcp://127.0.0.1/", + "tcpxml://127.0.0.1/", + "dcall://127.0.0.1/", + "remoting://127.0.0.1/"}); + this.inServer.Location = new System.Drawing.Point(87, 6); + this.inServer.Name = "inServer"; + this.inServer.Size = new System.Drawing.Size(408, 21); + this.inServer.TabIndex = 0; + this.inServer.Text = "http://127.0.0.1:8080/NMS/"; + // + // label1 + // + this.label1.AutoSize = true; + this.label1.Location = new System.Drawing.Point(8, 9); + this.label1.Name = "label1"; + this.label1.Size = new System.Drawing.Size(47, 13); + this.label1.TabIndex = 1; + this.label1.Text = "Ñåðâåð:"; + // + // inMethod + // + this.inMethod.DropDownHeight = 140; + this.inMethod.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.inMethod.FormattingEnabled = true; + this.inMethod.IntegralHeight = false; + this.inMethod.Items.AddRange(new object[] { + "sroute.ashx?k={k}&f={f}&x={xx}&y={yy}&i={i}&p={p}", + "snearroad.ashx?k={k}&f={f}&n={n}&x={xx}&y={yy}"}); + this.inMethod.Location = new System.Drawing.Point(87, 33); + this.inMethod.Name = "inMethod"; + this.inMethod.Size = new System.Drawing.Size(408, 21); + this.inMethod.TabIndex = 2; + this.inMethod.Text = "sroute.ashx?k={k}&f={f}&x={xx}&y={yy}&i={i}&p={p}"; + // + // label2 + // + this.label2.AutoSize = true; + this.label2.Location = new System.Drawing.Point(8, 36); + this.label2.Name = "label2"; + this.label2.Size = new System.Drawing.Size(42, 13); + this.label2.TabIndex = 3; + this.label2.Text = "Ìåòîä:"; + // + // label3 + // + this.label3.AutoSize = true; + this.label3.Location = new System.Drawing.Point(8, 63); + this.label3.Name = "label3"; + this.label3.Size = new System.Drawing.Size(36, 13); + this.label3.TabIndex = 4; + this.label3.Text = "Êëþ÷:"; + // + // inKey + // + this.inKey.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.inKey.FormattingEnabled = true; + this.inKey.Items.AddRange(new object[] { + "TEST"}); + this.inKey.Location = new System.Drawing.Point(87, 61); + this.inKey.Name = "inKey"; + this.inKey.Size = new System.Drawing.Size(408, 21); + this.inKey.TabIndex = 5; + this.inKey.Text = "TEST"; + // + // label4 + // + this.label4.AutoSize = true; + this.label4.Location = new System.Drawing.Point(8, 90); + this.label4.Name = "label4"; + this.label4.Size = new System.Drawing.Size(73, 13); + this.label4.TabIndex = 6; + this.label4.Text = "Ïîñòîÿííûå:"; + // + // inConsts + // + this.inConsts.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + this.inConsts.Location = new System.Drawing.Point(87, 87); + this.inConsts.Multiline = true; + this.inConsts.Name = "inConsts"; + this.inConsts.Size = new System.Drawing.Size(408, 105); + this.inConsts.TabIndex = 7; + this.inConsts.Text = "vars.Add(\"f\",\"json\");\r\nvars.Add(\"i\",\"0\");\r\nvars.Add(\"p\",\"1\");\r\nvars.Add(\"n\",\"0\");" + + "\r\nvars.Add(\"wts\",\"hs\");"; + // + // button1 + // + this.button1.Location = new System.Drawing.Point(420, 222); + this.button1.Name = "button1"; + this.button1.Size = new System.Drawing.Size(75, 23); + this.button1.TabIndex = 8; + this.button1.Text = "RUN"; + this.button1.UseVisualStyleBackColor = true; + this.button1.Click += new System.EventHandler(this.button1_Click); + // + // inAcc + // + this.inAcc.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + this.inAcc.Location = new System.Drawing.Point(11, 264); + this.inAcc.Multiline = true; + this.inAcc.Name = "inAcc"; + this.inAcc.ReadOnly = true; + this.inAcc.ScrollBars = System.Windows.Forms.ScrollBars.Both; + this.inAcc.Size = new System.Drawing.Size(486, 232); + this.inAcc.TabIndex = 9; + this.inAcc.WordWrap = false; + // + // label5 + // + this.label5.AutoSize = true; + this.label5.Location = new System.Drawing.Point(9, 198); + this.label5.Name = "label5"; + this.label5.Size = new System.Drawing.Size(76, 13); + this.label5.TabIndex = 10; + this.label5.Text = "Ïåðåìåííûå:"; + // + // inVars + // + this.inVars.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.inVars.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.inVars.FormattingEnabled = true; + this.inVars.Items.AddRange(new object[] { + "Êîîðäèíàòû"}); + this.inVars.Location = new System.Drawing.Point(87, 195); + this.inVars.Name = "inVars"; + this.inVars.Size = new System.Drawing.Size(408, 21); + this.inVars.TabIndex = 11; + // + // timer1 + // + this.timer1.Interval = 1000; + this.timer1.Tick += new System.EventHandler(this.timer1_Tick); + // + // label6 + // + this.label6.AutoSize = true; + this.label6.Location = new System.Drawing.Point(12, 248); + this.label6.Name = "label6"; + this.label6.Size = new System.Drawing.Size(44, 13); + this.label6.TabIndex = 12; + this.label6.Text = "Ñòàòóñ:"; + // + // txtLR + // + this.txtLR.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + this.txtLR.Location = new System.Drawing.Point(503, 33); + this.txtLR.Multiline = true; + this.txtLR.Name = "txtLR"; + this.txtLR.ReadOnly = true; + this.txtLR.ScrollBars = System.Windows.Forms.ScrollBars.Both; + this.txtLR.Size = new System.Drawing.Size(448, 463); + this.txtLR.TabIndex = 13; + this.txtLR.WordWrap = false; + // + // label7 + // + this.label7.AutoSize = true; + this.label7.Location = new System.Drawing.Point(501, 9); + this.label7.Name = "label7"; + this.label7.Size = new System.Drawing.Size(81, 13); + this.label7.TabIndex = 14; + this.label7.Text = "Last Response:"; + // + // Form1 + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(963, 508); + this.Controls.Add(this.label7); + this.Controls.Add(this.txtLR); + this.Controls.Add(this.label6); + this.Controls.Add(this.inVars); + this.Controls.Add(this.label5); + this.Controls.Add(this.inAcc); + this.Controls.Add(this.button1); + this.Controls.Add(this.inConsts); + this.Controls.Add(this.label4); + this.Controls.Add(this.inKey); + this.Controls.Add(this.label3); + this.Controls.Add(this.label2); + this.Controls.Add(this.inMethod); + this.Controls.Add(this.label1); + this.Controls.Add(this.inServer); + this.Name = "Form1"; + this.Text = "Òåñòèðîâàíèå ìàðøðóòíîãî äâèæêà"; + this.Load += new System.EventHandler(this.Form1_Load); + this.FormClosed += new System.Windows.Forms.FormClosedEventHandler(this.Form1_FormClosed); + this.ResumeLayout(false); + this.PerformLayout(); + + } + + #endregion + + private System.Windows.Forms.ComboBox inServer; + private System.Windows.Forms.Label label1; + private System.Windows.Forms.ComboBox inMethod; + private System.Windows.Forms.Label label2; + private System.Windows.Forms.Label label3; + private System.Windows.Forms.ComboBox inKey; + private System.Windows.Forms.Label label4; + private System.Windows.Forms.TextBox inConsts; + private System.Windows.Forms.Button button1; + private System.Windows.Forms.TextBox inAcc; + private System.Windows.Forms.Label label5; + private System.Windows.Forms.ComboBox inVars; + private System.Windows.Forms.Timer timer1; + private System.Windows.Forms.Label label6; + private System.Windows.Forms.TextBox txtLR; + private System.Windows.Forms.Label label7; + } +} + diff --git a/SOLVER/WorkingLoadTest/Form1.cs b/SOLVER/WorkingLoadTest/Form1.cs new file mode 100644 index 0000000..b61d274 --- /dev/null +++ b/SOLVER/WorkingLoadTest/Form1.cs @@ -0,0 +1,318 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.Threading; +using System.Text; +using System.Web; +using System.IO; +using System.Net; +using System.Windows.Forms; +//using CSScriptLibrary; + +namespace WorkingLoadTest +{ + public partial class Form1 : Form + { + public Form1() + { + InitializeComponent(); + } + + private void button1_Click(object sender, EventArgs e) + { + if (thr.isRunning) + Stop(); + else + Start(); + } + + private ThreadData thr = new ThreadData(); + + double[][] EmulateLatLonValues = null; + private void Start() + { + thr.isRunning = true; + button1.Text = "Stop"; + + string scriptText = "using System; using System.Collections; namespace SCRIPT { public class ScriptA : Script {\r\n" + + "public override Hashtable call() { Hashtable vars = new Hashtable();\r\n" + + inConsts.Text + + "\r\nreturn vars;}\r\n" + + "}}"; + + System.Reflection.Assembly asm = CSScriptLibrary.CSScript.LoadCode(scriptText, null); + CSScriptLibrary.AsmHelper script = new CSScriptLibrary.AsmHelper(asm); + SCRIPT.Script obj = (SCRIPT.Script)script.CreateObject("SCRIPT.ScriptA"); + Hashtable cVars = obj.call(); + + string url = inServer.Text + inMethod.Text.Replace("{k}", inKey.Text); + foreach (DictionaryEntry entry in cVars) + url = url.Replace("{" + (string)entry.Key + "}", (string)entry.Value); + string[] urls = new string[] { url }; + + if (inVars.SelectedIndex == 0) + { + EmulateLatLonValues = obj.EmulateLatLon(); + urls = new string[EmulateLatLonValues.Length]; + for (int i = 0; i < EmulateLatLonValues.Length; i++) + { + urls[i] = url; + urls[i] = urls[i].Replace("{x}", EmulateLatLonValues[i][1].ToString().Replace(",", ".")); + urls[i] = urls[i].Replace("{y}", EmulateLatLonValues[i][0].ToString().Replace(",", ".")); + urls[i] = urls[i].Replace("{xx}", EmulateLatLonValues[i][1].ToString().Replace(",", ".") + "," + EmulateLatLonValues[i][3].ToString().Replace(",", ".")); + urls[i] = urls[i].Replace("{yy}", EmulateLatLonValues[i][0].ToString().Replace(",", ".") + "," + EmulateLatLonValues[i][2].ToString().Replace(",", ".")); + }; + }; + if (inVars.SelectedIndex == 1) + { + string[] ad = obj.EmulateAddress(); + urls = new string[ad.Length]; + for (int i = 0; i < ad.Length; i++) + urls[i] = url.Replace("{s}", ad[i]); + }; + if (inVars.SelectedIndex == 2) + { + string[] ad = obj.EmulateHouses(); + urls = new string[ad.Length]; + for (int i = 0; i < ad.Length; i++) + urls[i] = url.Replace("{s}", ad[i]); + }; + if (inVars.SelectedIndex == 3) + { + int[][] xy = obj.EmulateTileXY(); + urls = new string[xy.Length]; + for (int i = 0; i < xy.Length; i++) + { + urls[i] = url; + urls[i] = urls[i].Replace("{x}", xy[i][0].ToString()); + urls[i] = urls[i].Replace("{y}", xy[i][1].ToString()); + }; + }; + + ////// + + thr.mainUrl = url; + thr.thread = new System.Threading.Thread(RunThread); + thr.thread.Start(urls); + } + + private void Stop() + { + thr.isRunning = false; + thr.thread.Abort(); + thr.thread = null; + thr.stopped = DateTime.Now; + button1.Text = "Start"; + } + + private void RunThread(object data) + { + thr.data = (string[])data; + thr.started = DateTime.Now; + thr.stopped = DateTime.MinValue; + thr.lastQuery = ""; + thr.lastResponse = ""; + thr.lastError = ""; + thr.lastErrorQuery = ""; + thr.proccessed = 0; + thr.good = 0; + thr.bad = 0; + + int dataCount = 0; + while (thr.isRunning) + { + string currUrl = thr.data[dataCount]; + string res = ""; + + try + { + if (currUrl.IndexOf("http:") == 0) + { + res = HTTPReq(currUrl); + } + else if (currUrl.IndexOf("tcp:") == 0) + { + System.Web.HttpRequest hr = new HttpRequest("", currUrl, currUrl.Substring(currUrl.IndexOf("?") + 1)); + if (hr.Path.ToLower() == "/sroute.ashx") + { + dkxce.Route.ISolver.RStop[] ss = new dkxce.Route.ISolver.RStop[]{ + new dkxce.Route.ISolver.RStop("start", EmulateLatLonValues[dataCount][0], EmulateLatLonValues[dataCount][1]), + new dkxce.Route.ISolver.RStop("end", EmulateLatLonValues[dataCount][2], EmulateLatLonValues[dataCount][3])}; + long flags = 0; + if (hr["p"] == "1") flags += 0x01; + if (hr["i"] == "1") flags += 0x02; + dkxce.Route.ISolver.RouteClient rc = new dkxce.Route.ISolver.RouteClient(hr.Url.Host, 7755, hr["k"]); + + //dkxce.Route.ISolver.RResult rr = rc.GetRoute(ss, System.DateTime.Now, flags, new int[0]); + dkxce.Route.ISolver.RResult rr = rc.GetRoute(ss, System.DateTime.Now, flags, new int[0]); + // , new dkxce.Route.Classes.PointF[] { new dkxce.Route.Classes.PointF(1, 2), new dkxce.Route.Classes.PointF(3, 4), new dkxce.Route.Classes.PointF(5, 6) }, 999, new byte[] { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 24, 35 } + res = "driveLength: " + rr.driveLength.ToString(); + }; + if (hr.Path.ToLower() == "/snearroad.ashx") + { + dkxce.Route.ISolver.RouteClient rc = new dkxce.Route.ISolver.RouteClient(hr.Url.Host, 7755, hr["k"]); + dkxce.Route.ISolver.RNearRoad[] nr = rc.GetNearRoad(new double[] { EmulateLatLonValues[dataCount][0], EmulateLatLonValues[dataCount][2] }, new double[] { EmulateLatLonValues[dataCount][1], EmulateLatLonValues[dataCount][3] }, hr["n"] == "1"); + res = nr[0].lat + "\r\n" + nr[0].lon + "\r\n" + nr[0].distance + "\r\n" + nr[0].name + "\r\n\r\n" + + nr[1].lat + "\r\n" + nr[1].lon + "\r\n" + nr[1].distance + "\r\n" + nr[1].name + "\r\n\r\n"; + }; + } + else if (currUrl.IndexOf("tcpxml:") == 0) + { + System.Web.HttpRequest hr = new HttpRequest("", currUrl, currUrl.Substring(currUrl.IndexOf("?") + 1)); + if (hr.Path.ToLower() == "/sroute.ashx") + { + dkxce.Route.ISolver.RStop[] ss = new dkxce.Route.ISolver.RStop[]{ + new dkxce.Route.ISolver.RStop("start", EmulateLatLonValues[dataCount][0], EmulateLatLonValues[dataCount][1]), + new dkxce.Route.ISolver.RStop("end", EmulateLatLonValues[dataCount][2], EmulateLatLonValues[dataCount][3])}; + long flags = 0; + if (hr["p"] == "1") flags += 0x01; + if (hr["i"] == "1") flags += 0x02; + dkxce.Route.ISolver.RouteClient rc = new dkxce.Route.ISolver.RouteClient(hr.Url.Host, 7755, hr["k"]); + res = rc.GetRouteXML(ss, System.DateTime.Now, flags, new int[0]); + // , new dkxce.Route.Classes.PointF[] { new dkxce.Route.Classes.PointF(1, 2), new dkxce.Route.Classes.PointF(3, 4), new dkxce.Route.Classes.PointF(5, 6) }, 999, new byte[] { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 24, 35 } + }; + if (hr.Path.ToLower() == "/snearroad.ashx") + { + dkxce.Route.ISolver.RouteClient rc = new dkxce.Route.ISolver.RouteClient(hr.Url.Host, 7755, hr["k"]); + res = rc.GetNearRoadXML(new double[] { EmulateLatLonValues[dataCount][0], EmulateLatLonValues[dataCount][2] }, new double[] { EmulateLatLonValues[dataCount][1], EmulateLatLonValues[dataCount][3] }, hr["n"] == "1"); + }; + } + else if (currUrl.IndexOf("dcall:") == 0) + { + System.Web.HttpRequest hr = new HttpRequest("", currUrl, currUrl.Substring(currUrl.IndexOf("?") + 1)); + if (hr.Path.ToLower() == "/sroute.ashx") + { + long flags = 0; + if (hr["p"] == "1") flags += 0x01; + if (hr["i"] == "1") flags += 0x02; + nmsRoutesDirectCall.nmsRouteClient rc = new nmsRoutesDirectCall.nmsRouteClient(hr.Url.Host, 7755); + res = rc.GetRouteXML(hr["k"], new string[] { "start", "stop" }, new double[] { EmulateLatLonValues[dataCount][0], EmulateLatLonValues[dataCount][2] }, new double[] { EmulateLatLonValues[dataCount][1], EmulateLatLonValues[dataCount][3] } , System.DateTime.Now, flags); + // , new System.Drawing.PointF[] { new System.Drawing.PointF(1, 2), new System.Drawing.PointF(3, 4), new System.Drawing.PointF(5, 6) }, 999, new byte[] { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 24, 35 } + }; + if (hr.Path.ToLower() == "/snearroad.ashx") + { + nmsRoutesDirectCall.nmsRouteClient rc = new nmsRoutesDirectCall.nmsRouteClient(hr.Url.Host, 7755); + res = rc.GetNearRoadXML(hr["k"], new double[] { EmulateLatLonValues[dataCount][0], EmulateLatLonValues[dataCount][2] }, new double[] { EmulateLatLonValues[dataCount][1], EmulateLatLonValues[dataCount][3] }, hr["n"] == "1"); + }; + //thr.tcpSolver.GetRoute + } + else if (currUrl.IndexOf("remoting:") == 0) + { + System.Web.HttpRequest hr = new HttpRequest("", currUrl, currUrl.Substring(currUrl.IndexOf("?") + 1)); + if (hr.Path.ToLower() == "/sroute.ashx") + { + dkxce.Route.ISolver.RStop[] ss = new dkxce.Route.ISolver.RStop[]{ + new dkxce.Route.ISolver.RStop("start", EmulateLatLonValues[dataCount][0], EmulateLatLonValues[dataCount][1]), + new dkxce.Route.ISolver.RStop("end", EmulateLatLonValues[dataCount][2], EmulateLatLonValues[dataCount][3])}; + long flags = 0; + if (hr["p"] == "1") flags += 0x01; + if (hr["i"] == "1") flags += 0x02; + dkxce.Route.ISolver.IRoute rc = dkxce.Route.ISolver.IRouteClient.Connect(hr.Url.Host, 7755); + dkxce.Route.ISolver.RResult rr = rc.GetRoute(ss, System.DateTime.Now, flags, new int[0]); + res = "driveLength: " + rr.driveLength.ToString(); + }; + if (hr.Path.ToLower() == "/snearroad.ashx") + { + dkxce.Route.ISolver.IRoute rc = dkxce.Route.ISolver.IRouteClient.Connect(hr.Url.Host, 7755); + dkxce.Route.ISolver.RNearRoad[] nr = rc.GetNearRoad(new double[] { EmulateLatLonValues[dataCount][0], EmulateLatLonValues[dataCount][2] }, new double[] { EmulateLatLonValues[dataCount][1], EmulateLatLonValues[dataCount][3] }, hr["n"] == "1"); + res = nr[0].lat + "\r\n" + nr[0].lon + "\r\n" + nr[0].distance + "\r\n" + nr[0].name + "\r\n\r\n" + + nr[1].lat + "\r\n" + nr[1].lon + "\r\n" + nr[1].distance + "\r\n" + nr[1].name + "\r\n\r\n"; + }; + }; + thr.good++; + } + catch (ThreadAbortException) + { + + } + catch (Exception ex) + { + thr.lastErrorQuery = currUrl; + thr.lastError = ex.ToString(); + thr.bad++; + }; + dataCount++; + if (dataCount == thr.data.Length) dataCount = 0; + + thr.lastQuery = currUrl; + thr.lastResponse = res; + thr.proccessed++; + System.Threading.Thread.Sleep(1); + }; + } + + public string HTTPReq(string query) + { + string restxt = ""; + HttpWebRequest wr = (HttpWebRequest)HttpWebRequest.Create(query); + wr.Timeout = 120 * 1000; + HttpWebResponse res = (HttpWebResponse)wr.GetResponse(); + Stream rs = res.GetResponseStream(); + StreamReader sr = new StreamReader(rs); + restxt = sr.ReadToEnd(); + sr.Close(); + rs.Close(); + res.Close(); + return restxt; + } + + private void Form1_Load(object sender, EventArgs e) + { + inVars.SelectedIndex = 0; + timer1.Enabled = true; + } + + public class ThreadData + { + public string mainUrl = ""; + public Thread thread = null; + public bool isRunning = false; + public DateTime started; + public DateTime stopped; + public string[] data = new string[0]; + public string lastQuery = ""; + public string lastResponse = ""; + public string lastError = ""; + public string lastErrorQuery = ""; + public ulong proccessed = 0; + public ulong good = 0; + public ulong bad = 0; + } + + private void timer1_Tick(object sender, EventArgs e) + { + DateTime tn = thr.stopped == DateTime.MinValue ? DateTime.Now : thr.stopped; + TimeSpan ts = tn.Subtract(thr.started); + + string txt = String.Format("Current status: {0}\r\n",thr.isRunning); + txt += String.Format(" mainUrl:\t\t {0}\r\n", thr.mainUrl); + txt += String.Format(" started:\t\t {0}\r\n", thr.started); + txt += String.Format(" stopped:\t\t {0}\r\n", thr.stopped); + txt += String.Format(" running:\t\t {0:000}:{1:00}:{2:00}\r\n", (int)ts.TotalHours, ts.Minutes, ts.Seconds); + txt += String.Format(" lastQuery:\t {0}\r\n", thr.lastQuery); + txt += String.Format(" lastError:\t\t {0}\r\n", thr.lastError); + txt += String.Format(" lastErrorQuery:\t {0}\r\n", thr.lastErrorQuery); + txt += String.Format(" proccessed:\t {0}\r\n", thr.proccessed); + txt += String.Format(" good:\t\t {0}\r\n", thr.good); + txt += String.Format(" bad:\t\t {0}\r\n", thr.bad); + txt += String.Format(" speed:\t\t {0:0.00} /sec\r\n", thr.proccessed / ts.TotalSeconds); + txt += String.Format(" speed:\t\t {0:0.00} /min\r\n", thr.proccessed / ts.TotalMinutes); + txt += String.Format(" queryTime:\t {0:0.0000} s\r\n", ts.TotalSeconds / thr.proccessed); + + inAcc.Text = txt; + txtLR.Text = thr.lastResponse; + + inAcc.Update(); + txtLR.Update(); + } + + private void Form1_FormClosed(object sender, FormClosedEventArgs e) + { + if (thr.isRunning) Stop(); + } + + } +} \ No newline at end of file diff --git a/SOLVER/WorkingLoadTest/Form1.resx b/SOLVER/WorkingLoadTest/Form1.resx new file mode 100644 index 0000000..fce63f7 --- /dev/null +++ b/SOLVER/WorkingLoadTest/Form1.resx @@ -0,0 +1,123 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 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 + + + 17, 17 + + \ No newline at end of file diff --git a/SOLVER/WorkingLoadTest/Program.cs b/SOLVER/WorkingLoadTest/Program.cs new file mode 100644 index 0000000..43468dc --- /dev/null +++ b/SOLVER/WorkingLoadTest/Program.cs @@ -0,0 +1,20 @@ +using System; +using System.Collections.Generic; +using System.Windows.Forms; + +namespace WorkingLoadTest +{ + static class Program + { + /// + /// The main entry point for the application. + /// + [STAThread] + static void Main() + { + Application.EnableVisualStyles(); + Application.SetCompatibleTextRenderingDefault(false); + Application.Run(new Form1()); + } + } +} \ No newline at end of file diff --git a/SOLVER/WorkingLoadTest/Properties/AssemblyInfo.cs b/SOLVER/WorkingLoadTest/Properties/AssemblyInfo.cs new file mode 100644 index 0000000..69fd7d7 --- /dev/null +++ b/SOLVER/WorkingLoadTest/Properties/AssemblyInfo.cs @@ -0,0 +1,33 @@ +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +[assembly: AssemblyTitle("WorkingLoadTest")] +[assembly: AssemblyDescription("Ðагрузочное теÑтирование ÑервиÑа поиÑка маршрутов")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("Milok Zbrozek ")] +[assembly: AssemblyProduct("WorkingLoadTest")] +[assembly: AssemblyCopyright("Copyright © Milok Zbrozek 2021")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// Setting ComVisible to false makes the types in this assembly not visible +// to COM components. If you need to access a type in this assembly from +// COM, set the ComVisible attribute to true on that type. +[assembly: ComVisible(false)] + +// The following GUID is for the ID of the typelib if this project is exposed to COM +[assembly: Guid("b1139950-7011-4734-b710-b656038ba293")] + +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +[assembly: AssemblyVersion("21.12.21.2")] +[assembly: AssemblyFileVersion("21.21.21.2")] diff --git a/SOLVER/WorkingLoadTest/Properties/Resources.Designer.cs b/SOLVER/WorkingLoadTest/Properties/Resources.Designer.cs new file mode 100644 index 0000000..5cce79a --- /dev/null +++ b/SOLVER/WorkingLoadTest/Properties/Resources.Designer.cs @@ -0,0 +1,71 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version:2.0.50727.3053 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +namespace WorkingLoadTest.Properties +{ + + + /// + /// A strongly-typed resource class, for looking up localized strings, etc. + /// + // This class was auto-generated by the StronglyTypedResourceBuilder + // class via a tool like ResGen or Visual Studio. + // To add or remove a member, edit your .ResX file then rerun ResGen + // with the /str option, or rebuild your VS project. + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "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() + { + } + + /// + /// Returns the cached ResourceManager instance used by this class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Resources.ResourceManager ResourceManager + { + get + { + if ((resourceMan == null)) + { + global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("WorkingLoadTest.Properties.Resources", typeof(Resources).Assembly); + resourceMan = temp; + } + return resourceMan; + } + } + + /// + /// Overrides the current thread's CurrentUICulture property for all + /// resource lookups using this strongly typed resource class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Globalization.CultureInfo Culture + { + get + { + return resourceCulture; + } + set + { + resourceCulture = value; + } + } + } +} diff --git a/SOLVER/WorkingLoadTest/Properties/Resources.resx b/SOLVER/WorkingLoadTest/Properties/Resources.resx new file mode 100644 index 0000000..af7dbeb --- /dev/null +++ b/SOLVER/WorkingLoadTest/Properties/Resources.resx @@ -0,0 +1,117 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 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 + + \ No newline at end of file diff --git a/SOLVER/WorkingLoadTest/Properties/Settings.Designer.cs b/SOLVER/WorkingLoadTest/Properties/Settings.Designer.cs new file mode 100644 index 0000000..5011951 --- /dev/null +++ b/SOLVER/WorkingLoadTest/Properties/Settings.Designer.cs @@ -0,0 +1,30 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version:2.0.50727.3053 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +namespace WorkingLoadTest.Properties +{ + + + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "8.0.0.0")] + internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase + { + + private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings()))); + + public static Settings Default + { + get + { + return defaultInstance; + } + } + } +} diff --git a/SOLVER/WorkingLoadTest/Properties/Settings.settings b/SOLVER/WorkingLoadTest/Properties/Settings.settings new file mode 100644 index 0000000..3964565 --- /dev/null +++ b/SOLVER/WorkingLoadTest/Properties/Settings.settings @@ -0,0 +1,7 @@ + + + + + + + diff --git a/SOLVER/WorkingLoadTest/WorkingLoadTest.csproj b/SOLVER/WorkingLoadTest/WorkingLoadTest.csproj new file mode 100644 index 0000000..5b54692 --- /dev/null +++ b/SOLVER/WorkingLoadTest/WorkingLoadTest.csproj @@ -0,0 +1,100 @@ + + + Debug + AnyCPU + 8.0.50727 + 2.0 + {E13B927B-9519-4111-A897-DD8DD8CC88F5} + WinExe + Properties + WorkingLoadTest + WorkingLoadTest + testD.ico + + + true + full + false + ..\..\READY\TEST\ + DEBUG;TRACE + prompt + 4 + + + pdbonly + true + ..\..\READY\TEST\ + TRACE + prompt + 4 + + + + False + ..\..\READY\3RD_PARTY_DLLs\CSScriptLibrary.v1.1.dll + + + False + ..\..\READY\MAIN_DLLs\dkxce.Route.Classes.dll + + + False + ..\..\READY\MAIN_DLLs\dkxce.Route.ISolver.dll + + + False + ..\..\READY\MAIN_DLLs\nmsRoutesDirectCall.dll + + + + + + + + + + + + + Form + + + Form1.cs + + + + + Designer + Form1.cs + + + ResXFileCodeGenerator + Resources.Designer.cs + Designer + + + True + Resources.resx + + + SettingsSingleFileGenerator + Settings.Designer.cs + + + True + Settings.settings + True + + + + + + + + \ No newline at end of file diff --git a/SOLVER/WorkingLoadTest/obj/Debug/ResolveAssemblyReference.cache b/SOLVER/WorkingLoadTest/obj/Debug/ResolveAssemblyReference.cache new file mode 100644 index 0000000000000000000000000000000000000000..1d7a25a733acc25e18ce855682d9a296ee551540 GIT binary patch literal 13987 zcmeHNZEO_B8NNBM?`{{zhk>LdC6o`-gkbLc!FNl+oNeOb!_J*CIG7ykyFGiu`j+h8 z8B7Z}Y6&R~RjMY98Y%^dDzznP(mx@s6rv_HQq}OMO=*N$!Qlhp}TebO-w(m3E zThE%MK-^!a8`$^e@w_uT@60pvzB{`C76=6XLkYh~bwLt)l6uxMZ8KktZ7bv1DnR3tFjYsYcV1zS6LvXLo25{pJC!uz9$-Ex$Iu zKHt)kTidL*skOMxQs35N=?S~2jirlfQG=G8*A0!MnnhDZv4m+DTDC|%uw(bD_GnQZ zHZ=5Ct|1{o{7=;|DJVUrn(I=tMbip9=0pbRDR>T=pat&r0SSzWX1?5tWWY8L9+0Z9to)->}*=~3cLF4itI(RsM2 z6|h1;%Gj+`*t-u^aQ(e^{LG2V?>;WiB_KCI%p<`t05CXk_qx+(KDzR_JfHIN0*Kp5 zFpLe#n@-))_$2Dzfuc`9EF{4&Y$)Hee__Wdl;4S>yC6PEf?-5?{j zNz|e{w>$>*sx6LBM77gJOD~Mnu*J^$NNIUzO?yU?uj)_HEtN2aAb=f#FY;UNg1m&P z%1a@Zk!ZkRA~B2~ALHee2{n?~?YBs#cfB^+^JwS0@vgVNIiJn8w+}0Mx zEX~G*6;xgRG{ik58Zh5T3{%WaxR)}al_ZirYj)a#R$BC}F_LXJHlk26j4A< z>oShx?=Iv`IRlruO|`X1#__228F;#OW5l%d;^^2yFYGd{gjpzBrZF!=+ksga!R^Sy z_Nlscd$|qnNQ?TgZs^5{P^QaJN9-tXXu3WNhXbsJr*JSBsdx4irx$Bo7hK5eBPB~k zhDZv`qI6-Qi;w?oCh0mHx`JO z8-;6@KSRw)mnmxec!Pz_JUotIDw7FBq)FoXo75N@q>_Lly+OHIjh6QgK+;dB&6^oS zZ&fUFg)Je;7yMSrC~RpNwsQ!#!b`Vt2zP>o7D|v<;OA204k+@8>7?Ai%}mVp?*8(m zcq6;G-yQfYby3^wN6x@XlLTIM02PoK7YSjcVKIA!G8iIwTZO^laFcd$2-m}54~K9< z940x0^Wg^Xq|AID2c*coRKo4;qfGzJ*n3?f`n1ojeSlhKKOhT0BWaSriw>XyGU)|E zuC*5kz*<1$VLCVbc@n4F(mrA(tLzJ1F z@jmTyDqyD&f|SQ0D(&&cf=VHo@^r3w;o^F3>)48ih|M<~H{mO3+9D85R&Z~cR|F$D< zFod}9%{6o(p^r!s;?^qbE12~sXo3X~`xwC~-k+o#J1kJ09TI@T#tFH+FA;EgFX8E? zN}38L%@Z`i?pAr)rOekrnMVYcu!90nm?=`G;GqnjfUA_LV9I=hCfE~{!52>LG*5#z z4+~6Tx&Rb5D$-^|q)im(AxJ@nV+(jN@fi``Ou|`2m01M01rK(H;1sXEO*xho zsKkZ^pfFYB)qasz5>BkDq^V%ioTCXYA4GLn>LGfUs>tVE>O2qX3<+#udj+7d2Sw@( zdZ>fb%_?;&m^$C333h{@@41xuJ}9$GU-~_x%nF^-NOEkfr;OAwR zHa`Syb_z^kNdYLVN2JXTkv7r2R23=6@Y=#R_!*{xDzhq>S+CFp`@cWBNF`Ho(5sYV z+XYs!E&(X4Q>0jjNHGa7ud4j1VE(*D6D$PJmt4}k4$^EDc*3>_Kw+OFc zldF=Z{7Fn@zF@gb6YNGnKXobd7AUh(ULL~Miob}zN$EC) zRXkRERq=T3tBS`Xq#(oN5maWrIfx<{_O^zg*tazVL0(k^L%yo;YhG3OH(yokW=KJX W-E3wb!Kx^j>uv3-qdJpxbN&l6cL$^Z literal 0 HcmV?d00001 diff --git a/SOLVER/WorkingLoadTest/obj/Debug/WorkingLoadTest.Form1.resources b/SOLVER/WorkingLoadTest/obj/Debug/WorkingLoadTest.Form1.resources new file mode 100644 index 0000000000000000000000000000000000000000..06c24d06c1cab750788146ce052b37770f3fa530 GIT binary patch literal 180 zcmX?i>is@O1_p+SK%5g?SzMBus~417oL^d$oLUTL1*ImYq!#HYis@O1_p+SK%5g?SzMBus~417oL^d$oLUTL1*ImYq!#HYF32#G+XOHskFLTRm7{^N<8JZYXg(Yf`GGbxmhpWU#F$Qc^+m%KO2uL&&E#qM_5k@GBJi%GwWKQJ2FzG3gq%k4XzYA x49Va{zYtk8%^lwTY5u(Z_Wj29S#qI$krQt3*WJe4=dV9*{3YJbvBWiw#seX+^63Bo literal 0 HcmV?d00001 diff --git a/SOLVER/WorkingLoadTest/obj/Debug/WorkingLoadTest.exe b/SOLVER/WorkingLoadTest/obj/Debug/WorkingLoadTest.exe new file mode 100644 index 0000000000000000000000000000000000000000..4f92f2841911e2edc32f3bba07354029a9703bac GIT binary patch literal 192512 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
S;R)pqYoNT;5}M9!pzkmc`n}emrV+<} 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%0A#V|Ltd*cI*L}MwZa@C4S`j&3szzzKFJO zTNhVXck4)dTlRxDjdxm7LW0W`rDT}i@kwflN8pp;Qh-=oqwD2cTLT9ewpBwd?|MT79$3+bS$2(ak$F_oDZ@H~UwvdTlUl#4hMx67lhSMTiQOyK3(`?6Y@q=piif zyFSQCyo0{^QLc>f*i-rkG?&WJ9!D>~rXfV+jcTDow9Y-Sx}9OB#rgV=k=Y%8Y6v$4$t z?DrlsKL>GoW65Tfe{G2!(ZUJxU^b^r;HQ8P{@(~zT(|z)2lgq;`(}3XpF$FnQqpqr zgMwsb<*>e#;(i%v-J=o`G65nYoXKcF3H-@1@%K7mIAZwrNR^8~d1k|8Lp;TrpA8!~QE?06>veIZPxC_06zbI*||B44Wno zI@vksXWL&%_MUM|LR@aAurS9GZLqm0pCnOHPA`exQnM7~3~ppbe@_(|ku=+UG;qC7 zkn!khI=Sx(O)VwL$V>52_rn-z6x*qNW+r*hP6@YsWeOn7T z!9$V9HQlm_c5H12)_Vi;oS&jTtWPnR*`3|_Uh*UM+ z<*Oo>OudNKEd3QZey%&v-JU0$C->ZFIYz?Ud^mUfP&3L$Jb1ArX!~kd5Fe_udq%D zKh8<#uO;1$btXD}spUOdBP?4*`2txOFC`P56jGcSPQz|$0UOwlmh23ryqHy#8{tb) zeuruImTcO#t&su(+UeV+ZM=FHyOv{}r}H=a^igATp?GxWTkC0MDLDb?r$Y((cO*T)c zx1S%oOG9H6^Jl%ISE;8jP3;N3}^UBIu%|{r7d2u z6z$!Znm^4-`;VNikK{bCWlbr2YHxp8)(nDafyw0UC85NxWPPXhkjjCOts||6nHAN zMc?ma>C~gy@B-w5+uu*6tNn&lh_=rc(GKcNQr6u6D*{W_>vs*{R^ zSe%Q+vUqA5CV#Ma7Da%eO@Ub?ieV3^yvHWQ5jNp{|4`REVtN>R7*xUkqk0&7cG)=G z7tHh-7LQ=>;vcaMnJ&b9;$y&UtYUhKF_?Wn+4q^%`>}U}9hcD`uIoQULo-RXziFC` zv|hZZs8}$LyMwL4Y_1^Fd*1rHS$nL1>>H}7GEl)IGb)(8T<61Iehq%7I_L$F^@{Ry zb0mAK#tI9IZoqj{!EZ6;dSQ;#Nbo!;&ui}obDY4$Y1D4Q-F&%)SzkEU9t zA}{wG*0kG!F_Nf+R!YVOPsrKkPCKq+_rY?t#dmqS-mXdt#ypxp8jLwh>R5A6e?%)S!}v4hYqmyF zHE&H7HRNL3PRXUU%MWGZI_B>e>)k8JWTo|rmTildljg#OG-Ur8GI2UZp>D^>-{&c< zhX2snk=4_L-2Gat=aO43AwG@$9!x(K!n#I>wKPgFU+6mZciuooSIj9QW(!sPvV*dt z_fle5A{`I8OCAd|JFULHkTF=za}ur-XV-!`3bF|fCL^!B+U$t=WAoWGYX&&{h8P!Pm3DHcP?j`e2@)lwJFleC-yG37T(nDA>cNTtDOveVbfIv59Aa zMV;K$P?K3zoDo|;&3LQ}&VM%_;_bEXm$r7xSC74p|8b1w{dWG$Z8q12&8_R;zN9vxDtvEp$e;5V{0}`0uZ<8-+FW@Ff9{mz zVg^(~7{+J~zC%JtPV@I?r7A}YjvHZ)vvc>}$vx~PvxGj){ugY+Zr{|Df2J9Gnf3Je zXKFGNLRFQ&2T5@`@_0{q*WtGo<6u2k-kuvI$bNhQ{g))*-2I{RH~BBMFKAXE0f7Vr i5)ep0AOV2{1QHNPKp+8u1OyTgNI)O~fdoFg1pW@U+T>9H literal 0 HcmV?d00001 diff --git a/SOLVER/WorkingLoadTest/obj/Debug/WorkingLoadTest.pdb b/SOLVER/WorkingLoadTest/obj/Debug/WorkingLoadTest.pdb new file mode 100644 index 0000000000000000000000000000000000000000..fda313102976085afb1cdfc42630a37ebc6984dd GIT binary patch literal 38400 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 M3fdCzW#+*D0p=>FA^-pY literal 0 HcmV?d00001 diff --git a/SOLVER/WorkingLoadTest/obj/Release/ResolveAssemblyReference.cache b/SOLVER/WorkingLoadTest/obj/Release/ResolveAssemblyReference.cache new file mode 100644 index 0000000000000000000000000000000000000000..8dc27a9e35beb0520a0097aea6b822a9a2ded57e GIT binary patch literal 13341 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 literal 0 HcmV?d00001 diff --git a/SOLVER/WorkingLoadTest/obj/Release/WorkingLoadTest.exe b/SOLVER/WorkingLoadTest/obj/Release/WorkingLoadTest.exe new file mode 100644 index 0000000000000000000000000000000000000000..6c3092494d419ddda7826febfada6798e98dd0c7 GIT binary patch literal 192512 zcmeFa2Vj&%w?90)Np{nd-A%8XgoHFg8jw)aD4~;tUQ-qbglyPsXb}v8iVBKd5K-wW zA}9)Wv0}$AC@7+$NC#10f%E;&Jllex-tT{}_r3S#(V1u3Gv%B!r_F2_G-kPQ6GFHn z5DBppZ+;47{O3^%s{Lc1@fX{@-i_O-8u)Hp#njqHV}r#!#Zo!LSY26PZ?+n%Oh!vn zy|K35STdyCIKy0H%JB2^ZfEOyXm23~s@#PCsdbh1(Y_XHm5<6(h@mK1u9n3Y>+mun zv>@>8jCchq^F~U}pWniW)u5aowJ5k&W@H|bt=#sKZ8o9ba!$1fv1EZVmaK3@Zo(Jo zD71@ml>Lo_Q3$NS@pvNN&yf=%!)lsiMc#c7BGk#Xx=u_fo|Iu}v{WN4=hlKm3+6Zp zZda`!a}|tH?(6H;>nRYTh-=%PHVCvqpbY|T5NLxy8wA=Q&<24v2(&?< z4FYWt_`e5%uVL5n!?vkfc!;5eLcEhIgbMi}Av9n25~6`KfAgtQH^Kzf%*QA0>SP$9 z-s)r@6r|Rxo4Kqx1W~$HoeYPACRLpbOI3s6L}aFy_!b$o(J3uM=W|naGrDuPpt!-T zLvI#z)}U@i>~7X`zDy+=k_||CYl4z7V{adAV=!L6o|bv2GNTi3s}_s%^D?7cV?dV} zTlreutg$C8_n@`9*~^|chvLKJFhm9qox3@l69H*GbphrGB-bZnss@eD!}0(=(`%9= zQD}`vp=F(YLMVmDKq-~Ip`!qEG>SSreIQsD(3HY`1nL6QwYora49dR@UB+D)bUIy# z&SQ;EXV9vf19(QUsO{PWD5$-7MVk4r?6DAzZ?087(uNp3^NJaMTAe3<%`b$NmQ8YH z+!ndeThcH@vJo9xwxYta9g&=#j9fn3>H1m7-~Q|+*UzpznjBnN0cI6`#qK3;FP++3 zu47zzYOTiz`&(mphK@3L>OAeR?X~41kqZ(+bGmz(K@}Q;$zHB z=cV&rX`8e+I`l>jT4#Uh(o-1s1hUc?d~`l8J^9L>eC<8?=zQ%x`JyLZoiDd;)l+y* zlNVE^#^9&(bLq)HZ8+xSuh4=&Cly-I`5_f@OFGj*9O%FSU0WMQylfNthc^D0fp->2HeKGgP&TP40fgQ%_C1Cw3c)Bny!yvb+Wxy ztF>UM$_JsN%-}HIjR1o;m>;&iw;4G1wz#83atEaH4+7d@%Q`a8iPS}gSYlA4P`+km z$O?NZbVXwZTCdSXhFVfxT7)@TggaUo+(V`rJiIK~JPUN}ZRu(+Y3c+86gan9B%S{LnT6^im`N2_qo zd0F6Lz7#CxPCR+9*uZ7LqRJ4XiwV(rg{*AujN+v{_8MJGsO1`bh(wsI>f%xrZm)`v zRe3H|k@l)6S(T3}bP;V?qVyG`^9pS}Ostpvi&*e0RJsln>*J{Om6fhT#rioa{bi+X zu-E|mXvtkMyl-9!C|GN`jlsY~-SsK#us@@`OX7|FOX7_+_<(qQ zb>3H?USFnOuD(3^`ZD>V`Vyi-`%4HITw3R&5U{U}fV(kpTCLMbsXB1fztJn$vW*Ij zI-`RMnO2PsDr8zU+FHfw;vB7*R^uG4m{#L3?aL8scZtOX(4e%IH4ZGk{?}LxfbMfS z7PKE&1k?j{0at)}AVZz2FAw!VhB~S*fqG*POq3NVeCPmwn4&4g>*5t^S)+>&wQQBU zA>Ia+1YLpyDh#^>2UHk#3AR@4bnP6i7TkLy4Sfk+w0o@<=$-nmwU6lAqZ3wtTSAJN`je6xcc%`63kSB>Px63xqzu8 z1lo3xg0o=Tek|njP(`4GUMf&pt=WmuT5N(Vj1Z;^v*9OMm+Zg~V=>u*AI4&`tyPLH z#nFnfnBr)~SWLk(FNeh4=)zkIl2nHvNrfQcO4orLf+RK8S5~?XJz62A)+y@0(b6+k7PgePQn)@N` z=haw>m%$w-YkwrX@g9J;mw6y!Pcu%Ny)~(m6*DBnJQ!JZGgNW+Q1cL^Q-vYZLyX71 z2ZOiS;mu*lNu4-(D4IYGRSbD9PV+d&p9%9^Jo#?A2^_qNo}{++!+k+T8M;g1a_qk&$PjAMQ8+NG=?B2$5kJq_3@ z>Esbe*}L81?3Q)?R&)B;S;sWgs_wkAjw!BHUAnttEleXzu|pLY*axj}Hed?=V*`t` zf$_2pZgw`{A!gNKu_Ljpu~K(zHJg_&({$A3o1Q~cTSqn=DxLqKS9LS+Td_$KZ1qGN4a) z@euY3>qP3tu_&F-&DD+LI0>pnay%!|z+MWK(_RXt-=2gGWp9A~?4{l^Ie~ldk;#di z^mUf z!nZkWb)n`OM>@o8a-_|Zk&KjfgSRHclHmaxK@)1Jk?%0eb@Cl<*&^Q&mXGDzJjL;S z?8vCbsmPgY9Yq$QfoeX@kvGCECSrpdr*pG9M{$UGh9fPQ77 zi!6HQ2%L}Y80+WSz0!r!y=-sf_U!vpymiKDD3Iu|aplsMp)y%8SCkw3eLw4hz)h^nag5q zJ_wpI3-wJ$hKr?#Qx2cJ11!y?H}2b?zk!VJF^7gU-kbiirLVdr>Cok9nkw$lNpjW`Mr z#`l@3T0(=)}oXGODsT_ zJdGD_NpnCE+yuQUl$zYal_r?9Nxp_lLXsEpD|s>ERM0H@_xt0`k6Icv%Bew! zbjc{*c%_(?Z(9p#Ybm9ycH2s&U6*_e;`*Hz9|gGsOjdu{AiP)M!1u;O2%2B+o|;nOgA(`T>}AjdyV0 z{vIrPBYi@A^OmAQ>lqchglBEcev$e`Hrx-d2@ZF zB~-qnED7=*ZOM`E7)uZNhMQr4lJK^SRT4gy=`z7IcZIQ=WrI-5-SQn~*(TrNmN(=( z!m?MsBQ2-oJIbQ+;kiUxg5^8Lk|5t0yOWaewv;LfAIo@|P{wu_;g|!qu+F$0So1dK zfslM+YkV2Cd|qtBtEW7B$KJQ$)nl2Pg4VPwElwZOVKOpKW3xwTLSnPcccH7%tAWK! z3KYP5WWTL-*%d-;#~j{!>%(v#t)>|nWu``Rlcn0!=tz~BDr-!ZbmNT1 zYO|%Twkq8?!enWzHP`pZ&dB8d(v8JUb=D?}sYku3$!e*rOE(T}s;aB49$=bVVV-WP z?@`sIOJ%3(PMx#zb8=0YdHD%{9IUC{T06sJAHCdU1r0l%p@k*b#4}`xmJM zLtDtZ__G*zoie**ci|EbQHS^>HbVjg%Qz6nIEaOWa;v4beo7;^*a@PsqC8=Exkyh` zuJI@I9bQ_3y6(s?2N5L{)v=){AAnCaGI))b7l=muOO+!+P=F+CU;#cPcr$}{@?8!A z(vgR)pfx@Zm3}C&NBQP&z@ucjGJ9{^Dm3CAu?YM3QL#bzi#LH8Z*drDjToR>gp%u2 z4JwV;iL^$%CF9>^?5pOIj)=WQt$LK&TP##>K>Dou5YmZmf!O2Q+*Tv@asLf*vWzFW z7rJ|kdKq6MOYW8NQ!@TQ#z$oA=D}aZ%ea?}YduDI%oc3o1-`d4zZ$=?L+KjDJNOBg#E{c}9pTPcAnj_7;mhxu2UoN2&318PA72{l)7t zJ}Beg5PJ)QmzS5fNSATGj4fXL)nXYxgVmUfk}z*gIZ4hFBv$ zL%BvAlChr;&p+3P*D?xejkp?dym-=wTRtmGzD0b!Fn}O5qL(jY^B&(8UvKf4?+AvT zFT?P#FVEp9Vt=saRRCkE(Fvd=Ld?_i5BE$;5#pbAlXZkxJu@Nkt0yCO1P=Q5#Orn zhLG|{tIHAJs2+j%HW{x}k3sr=+2$b`KPBUrWcZaD&O@&PAleSE4hiPWWe-hnR`{N0`u?@TWxjgFoLg` z+FkZ3XXYzjkhw*++-{k>-LufG7A;jhxaIAh!`YsLb6OHq7r<)OAvFVuc&$2Fl#)s%PEqL~fGuop{M@C32e_xd*ter<|vF&+QTH z@h@$;{W3SIms0nW+g8-IIC4)R_py?bD+)$4l{ftS#6vQ@ zO~y~lc$bXdl<@~L-YesSGX4?qtKv7rZwZx(smTjz#H!ytUPSD!d0*&ML7I<5xT;KZ zNTi_6QN$+A8I)TzzslN+ps(c`cU8XXVU4${Q1!Zu-$R_Q`ds6$DpjolZ46WWrqQcL ztMuCUMWu{u(OZbB5+g<-4h2nCimu>%wW2`VUsWsmX-A;{VcIg4PBmIPQZ*CpO^D~A z2c2q>jBnD`spg{Gg7R(J1TjQJ*pKd zf6qG+>t!4w<53;YulL1os=?sdKgxKo zjEAWzyxtO{#bmD>to~*tRr&{WDms+L1-D?%%HC}p^O1%X!mp_1#U9$W` z#9pdH=+jH?$Z$1dFkj-aP{yS)9wy__h_|8rMYPWszTR&kPVwHM9;WKzorCls8PD{7 zL7k#*_I_2Jh2Gvm`xV}M5O45)QRLf7wtIhulIPKbm+CEiRj5AUeL!8PCZva{!+dhY zXtWGbd8rD0zC-x{l$45UpQA`ykj@v&e9ovxi~D_e?VHhNCfff?Jy-pXk8qo-KJBA* z^Ahg9JW8UkzuOJ!Y~LW1boTvDeXG*57~vb~=A|7f3e>6Vj1l0@B^Y z&4`P|>xg~CV8rFJ{aB$wn`&7;U955ge9-42(aqh8ILAE)aWT?sZE=qKdbbvM|E+Eb zs-IM|)SJ}tZp+>D?xF7S?iubm?nUnI;1wR=5dvBhTtZ@o8`MT|tJ_j=4}X-aMF8qq z%6cHJ18*OqignL-cW+@$&j%I=>v{aJsIaFwuYyj;PwTS#E>ot+be@B~?LH9+GuxTx z^f*;DtDBdMdiQ0@da;`6=!?_iREwd>C=crne&CBc@#b^~$s=tecOPV~X{s~z6eG=+ z>Cl)5nk#E6OpVqI(;SoNW46r5y0k`AOtrwSDXFwp3cJzKcxj`Ip%!z4$zrWFH40cH zR;i1ljDN)}%BwB44OUTJTvj@?Lf8zNk+tr~XuXsWBUng&){2b$|gRMs`|l&zH(3}iJoh_a@7Wx=9fMa9rE(@X^_6B$r~4KGX9 z#0u_r@~I-HyDyabH-2 z3~`0FY&Lpn{baMFv8_x@FiXVsIWs}>3`An0wK!oVq zR9oZh1ynntwy_qocb3_QwE^dk6%`gZQD#(HrvI_3*xWGJQafd;^^aBHH8oAum#N@A zR9Qdwk6*OnCx5IiF*QoI1uXorvZB`Nx+WV?N@^>o)SDZvwbj_nrmChXQy6j1uaz?F z0_Fl>IyN_w4U{}lpu*ySrBWbCvdmOhIY*`%o!wzeF+Y+EwANPD*40{Fmf2{khc8N) zz&h%!791ckWik(tgn%f*rm|STG{G62 zpIX5jxQ;m+za`W03g;i#V2<~Pu4#5U7gM{b+vqoP-CX4c>sz&L8vZHmR zsY>*-S{ooiAYqg*hgMprV!(ms*?^L{VPfx@P2f7#xuRzJoN7}>nHgIzqqN*y#|*wq ziX$Gd6y8QL+)^t?XKu@d{Xl3!egV=U0+(Ts%3@JtshwpSXsVxrLCXf4DlKI! z!cgrN^+)ptliPUs6hi=TXVL4Mx*Szv82`lP!=;wvX|MWQR+G;CBqa} zFC}@M$`Y#;Hh?V*tenfB;#rn}d6$@H*Y`6qTNQmk z5#`po*cM!QNls3eH9Py#xD5*cD0y|Z4wOyr6ku|`Ouvl+QmU-7eu~MC+7e6UY@Xgw zb1kTs`xubQAMP*HmO_$_Pm=uQ8*MVHC!D8!* zSZCt$OR~_lYerfs8-NN$jdRY>vQ7>qHBDY(A14~^EX@G{Xa=Sd(0@H2 zH2}~I6)s~jBd7Dn5@oYW*x9xRy3Ktl>jmn0aER#Vw zww!I-vA`%X&&aULJnTNuC&*Tc5~qk$B&NwS*jx|nSokw%rTt^ax6Z1HxeX@Pla5FbjVL$#$&uhkB=t=Q#0dbZIWU z%7s;!1#USk?A-)&zgEewM*#_>)aT2`ZdEpqkvlE0~k zD{KbJ8_|6wYE81=Vo?Sc%1}{(Tr)xg`mVzFwP;~Pz$U^Mjk0aEu%NsF{T3qM^^!9F z-Vg4P);*ZTEQ|z`0bkb0G5g6Lr=piiITFvK8fl(&vPeOW=W)4Kv(U;S=h6c$>e1Wm z%eLfRy2-hS_BYDkAElRWV!muMA8!#|4#?RdkpXzSu2pE8#dL1vhN~KG zcq2bY=F^eSkomcs_u_I{gVbF7r?hS4w-2M1N4Bz0!H3sx1+2Q_D=S8mDK~h6!#iSy z&}}eZ#&-t3X%th@tMFk8u=SudVJ$Tn9i-xxg;0wy9Y?k`__kKUd?3DN>apT$#+8WW zo*8P~2aiyR9$fl|(_DBkyo49WG8LfAZ4M}>j_2xEZqoM$A-)xa>Gfi%+`kBZu~ zVhMAusYkgHqx1Y36OD34%_0+!k>ey7@pYyAb~xt7V|n2}rUlnFP6$9e|4AF3Qv=4m zY@5DDjL?KR)jQ_u9IGqFP*{(sR8;};`|BPo`d8B&TL;YWjD&&d>VSUV{m_}V!j8j0r zD6F-}y{CJwJJ#z0jU4d92={L8gWdabjaP-}4ailXlwmjkJ;GJ((jG^?p|R+vQ1&*& zy$AjqfWGmqoCC{EmXy$=g=qP}E+jG_>fl*}V2TGI<3&2cG&JGH@eVO_xz@F|)|r3N zuEEwW>o3~zcs%-F^*38CL1{Y`GgW3O0;;gZSmf}`K}y;({JLkb4P1rTzSXV3)k%Vj ziLH}+cLW!31xEmkJyDbEo`>>G0Ca%6%8$W50>sJ!+7?fkmQl`tgnm7x%| zyuphYR!W%oGX)gtlo8XvdquELYb3&+gGW4 z(|V;!S?kp*Wvy2%%W$?cX!QLDeD_T2v+k9fr$04#5 zO0RR%=zZNa(b0bHMwKcGk-xuE6O5X0E>t5CjSz>Bh>(KNL9Ow}D@(0Gt*(=sCfZ-E z@j*#GLJxN#^!Xh1z~Pw+c~8zG>VeuIt_b2>5DvXmpk95Uhf!b#-bN3^{CJ`?+FzD> zdK%rLqdoEPTu`P`>E?3M6N~WI2seK`o(<<;`CzGad5))0>sxO1kH#7>aLcV|7=>@t zXoC|xjxk)z3Va%cphoaSttu)^Y5!!BR_~9`^euPlqx6OTx|Ro{{XK2}V-omO-?Bd1 zA4|}6QsZq@d2;0M>AAJn#H)3mcz4wp-2g%!4a3QdpPw9bm&|zj`y1W$EpJBaTb|c- z@{aaYYy5n$LVe4-(SFf>Y7e3EkB;&+y8Am?0090<9cJq9>1WjVV}V?P4!qD(snzn* z_xgL{OjG6ApiRR_`j)4;7jJ#bYZwwS57Vj;$e* zKw0Lf)8JQtE#E2NJto)tvjWne1GFBP$dCG#Q~H*l^)0_)o@!kuT_>$krCX@db&_~t zZ1`yf))EyJ<*9W;gM|vR_2Jx)ZlR7lT^P*xkB(xTd3q`pw)$u#mncVF*g?rgT@%JxKi5$Bt-fsG4RKQ2qm;n!|7}@4ez$rxS6u3ql1?6x9)S39q#^&}gTeNw~ z*LhI`eenm@12To@u(V`wY&`E0}^)#JY@X^NgOx z?96P4#~_smxa53Vh(wk6%kPD#R*4CF?%T6<&l4ZCe6VQGjy*4YaQ&X=_q?#@N#h6C z?0NEog@|{4(1L=;(dhX-JGo*ZDq2vm6REAnJujk`lh1JGxjkFa(-Q6tpW-usS-GPw zL=0cat5AoqZx1dihYuSLA9#->2ml59-{ofH!{8NpbqM1G9Q-BaS;GSJo*VRZ>860D z6&->X@9%;7L0!iUE*w!>JY>+sp=Cq*_b#p|A2+dV$nc8ZbO z;QHr>5{0oqrrM%52(&@KP2M$1h8gA$V8HR!5{UP5yj#NtY77cCp`7mpy@aes?sp*3gyWtA9|e-$)3&*=iICko9=LSVN6hq zC9t{e&!*XGkz8cY39;vCwb+#C%+L7>c}Aw~F`mTtj11ee={L2Q%1E?5ffvf!a!xHcD5Z-Qg}9h^_8(Sa-*q ztZ2pd@s!K-R3Y0aPDhS&;qJ*q2Uo$JrIPOa8PXxfE>u|7A{rJ_j4~(iy=EH(|I8z4W&5k*K21$6B z;b1a~F_UICkq`Q&*#OhL9Jd;ouL%7C(oU8ovaWnAE z90dHE7!ptHY@Z@~U`J8|;Kdl90;iT0ZT?th#Jy_c|1%to7&{XI3LpFx{2PTKwsD!- zcs+Lba!$eC-(6RM#E;?yse!+PkCU9x`D?s%mw0LY{iWEs5^f6Qw}rqXyOw8w!s-A~ zBX(nJ>|W`6$PUqh0D$0sBd6M)HVCvqpbY|T5NLxy8wA=Q&<24v2(&?<4FYWtXoEl- z1ll0b27xvRv_YT^0&NgzgFqVu+91#dfi?)VL7)u+Z4hXKKpOf4$0B+XGpI`7#FZlYrYv3~cdVp`=wmts?A;5TZ4X#Vza>lO* z0{?OY|4Ib@8V7!&XA7M6Mc}`s%Rjr}c5So(ApDy@cDypq7>7Cp0|NhAhw;fjonl;a zJ>!zyV_>(P?j+j2;5twe6XE5*JG3`8s=fM1jL)-JuL4e`Tdy@BZ zSKw>}{<)t8-rhd9d3bm%Lm7VkDgQwKRd_d{yhX1!+!7odax3t^3}J~9LY4*v1usXq zBPb~3Zi6BCHl0p?y|1rd1NvcFDn`gh;GZ?xc?t88AcOz}S6XP34*;yTzcLX==6GP>jcXf&UdU<~1xk znD)XDSl4LN6##^P;9)+?yf;dxGfZfgkhHhBR{@Q$sG!N?#!~g@QPjVrHzl`ErFQMw zQ@h0W7vkdD9Roe=4G9T;HBcAugiaUnWRM~Em5`7=AB7ky4+IC9z796j91IB_x-ZDk z`K`df(5L(Z{5OLZ9s(_F0xhh;SaUcpY~c{py7#t06)+| zz(e2%8$k=;9r|0rQ|4;5o|7PV`e8mj5ctRZX$T1jY)7yS!8)m{-q>bC03iPl5A%J0 z;J&TX(UTw#C^p z9tSNvtkVTDEwGHZ545lhx`I`s(T>I3`XF>eVEf~8dZVi?+NL)GNdLh{3ml~7WM=Q5 zG;$=>j2T1YhL5BvV@A>3%CTe~Kbppm7)e#5M$zQ4V`%uG!N5D?K8;dSQt{595W@;G z1OV@b7bzS#j|hH~B17J$sL*$8;cevKqVV9|X!8na;W^O3;}opF?|g`%>8GHeqK|Ys z#hmW99!^&vI zj7jv(ZH@Hv{mpcI#VlG`KZ!<_mD7ab!)YwunH{r$`*cc6?LZyUlPNl)8GHX#;P*9( z0^XxT_fSmOM-&_W3B^X(!$%Yo{sBdYy-$&$@1pISHd=TVa$+lJ;huj58|uCfHgtU- zy2R4~0RdZ_wBXPiuZ7+?9s21o%=>bBBij&ddZP`wfAM0S&nrGIVO+nW5*l4rMk59f zrXBN4L=P<@+OeE2JbgRS_GR=7=wQ~k;Z#0&D2*CAl=3=tp$=&ol#$+%GBcn97^h%A zzkz-K7Vx_VIRBL5BKJ~!)RzeR5e`s%G}4j#Q2sd?BR{2>h>v7jJ1vA6UIt&-fqpiF z7H<7DIH>B7!I1Md^u`^qAs%(r8zCp|g5G#F^v20*wR#ZN@mG2y`p$d?Dy{@P!x9-&3H2hbYLf-8a`H#2Ih5b*_ zg)g?#`FA%GJ#!oFxN0)>EAB&s`u3x)z(4+`B;{n~P^X-9N=_UPUGEL-=MR9-y}<2P z!1EzWiv6D28-H*KhbhU35c?e^#xh;l>EUZ)nqgXq4gVPZd)G0#rPl6WK zT?~|@I~}-@BlQUR^kq=(#)S{70MV!gnvw#iOs%h3{VkEj&u}{9W|aRVFGyyMD#Rl;1gz zI_GqfA+J*gwQn~W_E{*ah8jH^O@;dsosI^MznNYzY18^T7ry^u}W7jWN$bSAgE=4;#X+ zHyRvzBXoswte5?boe`K0SVyqa0FwW!9|y0;D%oZZfUtr$o=q7rL0ek{T4X>k&@$n0{)Ky_ew~OKS8MpCn+W2gstop_WbL>=N+&i z@1a1y6|f^=O9bA7vX!taR#RxuI_Qc_7cYP&-o*PI8!bGKHg>&n#^E4CxA%2{k zlx;<@<-2t0N^9!I5beB`E`0PT_Wf%FCP4K2M-u-RKHN<7w- zst*Mja^7+3jRB8<1~zzldhyxCWP~9I>`UM?NIv8I-=+)Lc|GgAtn-9IR%V8WM~;e& zjGl@2tl;3_c{v?3KkbpvErBYNo`y0GsFx_I(U;QwQyU*4w+-$D*R2mEEj zLYmO8n7Ux!_v+SN(g4#zVGn%YwHHN&Z2&$#gl@l2%6(<;GtWPU{eB8O;Sl!p4$ANN zAXN>0kOmbz0D9Smw%^M7sL0FQbE zK6mJVz^fha2eL`K$2V<7j&v z?M_R7fiZdm)l{ycO&iwHj;A)#lTU1ovBu=t1Yv;Pr*z^(KTSoXO7%4hh0pt?q{4pxkYdVORastxGXwXJt`QUKcuf?;Il7 zc^5w4Mi;-wp8sJN^#2`n;mx&lam)2&E$d5Z9kO8ej z&%n#SmUIM6+FAeO|2cd*Yi~GWlvl095BOCAkM(Xv+amPRh zKLID3>G73M5S@OX=rDAO!yghIdWUHLE~0}^(4y)0L+^V>?tdvOq<(k`dgPZlGuS~L z(^o?V+(!?rUPq5_RcPSRN1U{<9(-Zm>@`wvV10pkLXd6+=wJipv`hLF*eAv35kb10 zOatWaH|!0->1G7h2}==-2y7SqJ3fqK*I=I`m)Ute+jGIN=TgAy%Yb(?@IMFVIadb- z=@#Se#T_BRMY}=_H=Z&CZl(a=?ZDYRu;IH>dU^-Q-H!CZV%UE0^PPVQw*MOs()m~J zBYOHa`uf(H)F-bqCBfI52U#(+v{Z&6c$W`^9hf^Ey!H*?>l2&a|DELhDUkWWy0>Zi z1o#e40_Vr}7bkD)Ru!hEr zRP=+*&<~gv9(!~HF)cj4bt7%ryn$|9vX1)odB7$c6n?-uMsyhS0@e*)!JKd=slV@c zjYsMRz>M#(@I5BB30VgGyF83r`<`ap@_8rkZIwJb;5qBz>xf}{4tSr&c*otV z1wlcE#d^K|mf)bwCxQ)4-v{Y7fd@W;Gn$AnYdGGIqE@$8S zN8#T&3SYn@^w|sG`DYIho%xaI*VE7`5zhQT^wU0~A9j;@;s(g+k0k%M9Dx+_go9XMD>uLS;5!5Ruo8l5v`t{2Ywnjag89IXCpXel+c(hs=CzdCezo)^ga%fd*a%k9?f^ z7L2C!G~gHK_(|B~3GI@pYi1_pb?ivSg!YsG+$SNhub=M$O~9Ry@fGDXY2;8U>pu?i zbsP57N7$RN`C<>kp8o-O{7LR*eZbpvjTyTBap3I6&JU z;JX6bK{Mq?cQMp8BI0`U2N&Dash z52uuN(6!<3i;MaU_TE>(;dj6v>-_A~ISt2K(_ zZ$F?uJ=TGKK9lrvWqkh`O*m&RSob@yA$DPYJ8=%V19;yB`SdZ;pMhrI z11-D;8Suc*Hn{#f;Ggw4mhbKT`~s>Xqhemb-KrBQ$!WjE#kD&Z9c}y;I{a%mqP0O*ju-tJ8&U3JLD_c8Fo=* zoX2jUapfZ^Hyisst{vzgQHHqqMDT=E==LS@4$xHG1Db+6K(!ObAU}$7J1hfzy#rs~ zC)oGnt*+Y{dp04@=SDe?0(S08@Ou; zye~WvqTCc6?y(1gT2mYXhxi~^O+i-!6!uTNB9zD`#=w$Kp%P!d*pTMlDQnX z9R*vi7kv4hC=WjUzOe5raSzB`T_x{()lHg+JAmV9`lRt_e>3*aTj=Lg!1YT?OFTp! zlYgMBw4;=revGoyj!|anNs7aG{d?R`7e9D}=&PNu`(K9rzZ-P$2Hkcw(<%G@4q{H9 zpszPTr!N9G&%iEu343)nX!8T`mHogWWid(j=NzS&93XCh*;nkkcI~F)3N{ z>GtiDC^~X7_Sh!ex!I1jK*mG1GjERx{}Ax}%!YG5gZ;*K_WrHyto3VI$G#dqZx4p- z%uKnLMh}?{dYeqMYAb2pjB32Aao@8_=4aJT1U*cr4ESLAj4wX=Q=H%I$9IRQbLJ1w z1CPRoe4KhA^yqw?^0H5W7N7%$JxlXyR?#;vtf!N&Z>BdM-b__x>&VaNLG<%DLP$a2J@`*Q%=h(1V|)wWzo^B2pEP<5HBA~vOQ%hu1vL|> z3U~3QPn;-uG2`EU=h7H6p7j2>AED#>cCQ2X?_$p@c33>_T}Zs+j9oc@KMdIYh~PYT zPr!W~w%PcOR;b~9gqPu`+k*XlCzX|6MKz=AY0B6cGYvhxfiW zczGH8X}?vD8ckIrN6?lzCOWoaHl1I)fX>}Fj~Ta~V4wFuYkd#PR(b`0gV@K16@-fv13; zz>8xecVeHuf<41}-lvqDun)ZbYvA@fD(QKIh7LGR<42yN$(5&Qn&~u6sX8t5LrPCl zVb|l-spCoN*!~n~<``toSHRz+=xZzR`hlEh67C4Jmv;ny!2IlU#km1|$81aR8u)HN zLexPi$D+ge9stt<^Nfd~)4YbZhi$UK$qyv%Lq4V4wAJ+Gv$(tP{j=~lK8LV_PQJDo z-`o!$;I#(<|CtDV5ZIn(f671kxIu@D>eaRTCu7RXX<~U9y}5Wg(U$9Q4tpD&f94K( z=6ZhZe7dH343!NULOGc^l+O1pK?fbu(t)E}q%3BAj&(eF_9AhASi;bG{_1-7;wb9u z_b&inoYnAtOTd1MgB{1Tz0PuN;dUgE)d;BPk8GeFlYfjT_ z%Nc5EK10_mI7{V!0RED9fmAF zf`Bt3c}B?Rgic*w-WkC8uv~+UcO` z!JoFX8Fwym$L>7ey?SRo!Up;s=W+DJP4w988k~Xlmv?RWzNK>SE|rYY3xI#zwZ)w) zdF~3>Fuzy!k{#zxn7Zmtd^V@h0r&y*BZjSV9}D;OV9#-AANLidCLV-tcL;vo?{P=y zC(z+>s-AF?tmZSc=<2hyeCf}0=WRdJ?YEqx>#jLVjrC_F4=61@L0xmsP-?sV!2Np3 zw-aN(z?eAiZFdCr0^5nl9D#9vX=pWHrUmGNytek3EAuX1b0p4QO~TL`IeL z>~*-bPbn>_8bKEyUQ8F@b3gwH-@C)PoBiG$eDJR>ng;#6FLloCO!#e%ymyzIl}>Rn z&7l8xLF?>;`BL&qzEj0;Q0`k@9`~)_>YxMW3Cx3;pB{!CcbKwLf1oZ|KTtu}BN+b} zjU924>ZY8g`E$&@Dl{siX8rm4qW*H&plc4g&#qq-%2^cI&Y}qVbH*npbOY~u@BQX zuY%v7`~rACs`#9K|CQi`qGul41H1FCe`!2AvhK&fFXFpk>}&rgAGhp|Sq=S)d($BJ z)IVElCVJs+y1=-{eLKE)cMhG6HnY_ego|Y}d1oPZzMA#tgvTKZH9>y!X$+?|lAu;GUm<(bTG^ zNvoOjK9J3NpMCGM4gQZko?1^W?oYkeqk93hj2(vi*4NVo+_Aav?Q^(y_YPe==X&q% zF4{JyihAJQ9pAZE0^h^P1^-_zbu;DM{VS<2G5-JV-gl)7-ebHMGgFRH=d9z{^T)C0 zPeRV0qUq4>c+cN_<5^m@;uqSq{ug>|Gs2_4;(Y!WS^++A-NLgpv+f*?7hGYj=8P zUNz3$@5CL;t+;msU+M3-clG;+xOevo?&58hzrnb33Vd{(@})19{joi8Ux&|bqr%og z_vbrTeD((ayMy=tHQ&D!_soMCADuIgQ(?E`#5(-Mv8QO}3`Nf0fj!T>{*i}%!F`-x zaTnuPdIsmEbYAYj}}d4l8%myr)VPggyGX`O9|c=)*@;Mex>cz|xQ!0-4y{Epv$p!l6H zo}{DS{eXLG50kg&yxqWgUxavs|Bibi? zxF2(h8lmG|x9BY0eaAW6zxoAdt-w9-F8BR9W#8X$?JvOnFVws6Ly8JtN15p_Qc;g@ zz(0P3PY5yu{dLPd4tjuJ2z;dr=&RF}Xu-x4?6i;pp77W50r-z&{C|nPup4^a{WPXO z^ya;6_u=gM^hb1L-zVT@n}Pe=f7WO^OafpW_GQl_m|XBKJH!cT}%6&yS_zT0q0uCJNBD? zENwTIga3bdKkq4)$Gk^NdY+(>WhZII)YH&WQpfP%E?irkbOgRCbV5bG}gibbEz?faY7o>b( zT7Znm0WJKMuAs;V=&U$*N-}-}U&Z^d199Hp?n8tFWWXKZ@Ze44>-7lkJFSOJcrEOG zbqR1_L||XvKaG3VFhw&Bn3X4@g+U!SNz`U!iy{DJkCkj=DUD>FMn@^-{HKC zJGa>xnN)<|XV~xD4Z$7k;vVH#+mjR>gx^a=e@NlED@k8kOMw-mNH=^G=?6@u(4IF^ zbjR(KnD7ng;WtV(;!F%@VQI0al)!m;&c-%6{3h*wfZlfs{@hbEau{?z_;Fb0yW!fi z(EEO-rAvO6y8nWCzmR#_S;!&y93$6Jaj#cs(zx$v{HUMc_c>0(hn|3s;3VkaBn|8b ze{k=UR0=v^e~_dF_=cGldgUv$z&t_H0?P*%T3|Z(b6w#mY)ITSNxg`FjrmQuA#na3owEB~NJ&kh zLg?@(aPRWsQ_Jc6tE=Un{~fY`p1p&PuADJP9=E%b&qjX=dMunGx5ZKHV~G^AK9)k4M^RvX78&|ls9o~s_`5CNQe-;L zemmoDG34T|G|pV2!ycl@@a5pKH$W$U1wMwOG`Qbc8aMK^^zY4tJ#!7d;EuC9=g3?EYB_s})@w-y_QtV9kKy;W+i#(Z z@cYtJH`58+#hy^o1NZXMpof=A-#`B@d-SjYG_dzbiVWUC;ZZM=wl0RWo4v?)XAA}J zY)`SzWl{1A-6(5U3FW^whzfU?Q{iiUDSkyEX~*A9ev=+2znNPoXu-4OF>NIo3VP$t zOc(qupJckfVJK~x*-ZWO*W$PRpMZCthTVS_zxh8+V=K-feUdt5?pF4E!Lu}d%2)99 z{6OaE#}L3T;1^>5fAxe@po3H32dAX%I10Yt;h+WP2}8jXm=^eqs6XhSA9zBa0>}sO z1f~TkAHWwREx5=B)*GF=!ZFwlKf=ENA0Tiatlt28=tan@6VO9{qRG{Vzel>rUP~ zu*bK@QN)gPYWHks>hOFo>ikka>iNnr>hs!YD&I4KGFHu}u&Z`c&MMg9D}SP_yMH2G z^IFQS>WV#|Mgxnw)2Fx1r0?%E)2B-t=()L@HHNQzyB2EGwzSTuFFV!h{lh3 z8~5@L0M_5p9P3f|{7>Nx9s%D_!}QZs2fcAB&IKk<0xiI2#C8Oq5sj&UT!CIWe278| zEFT7gC$NvfRaYpn$%o773VB)ZOJ)3kIe&vQz;|#~wHCiyew`LBI73UWJx14D{R7oc zJ4l23vpm=Uz2wGS_?scD@3D{1^S=Q1m*Sdb{H4LeN2>|SO}Oz@UtiWoo`i054Se}H z&rfVmaky)hfxDN(d*;!={7&+3YemN;;&(Mg^4xzC&i*)<#tx;TZWgTh6^b<+pn!oB zNb``Ee4mV>peGY4c4sCfKi8GAU+hiYULH&(uZ^NXyC>1ecPCTAO*c^H9Y0d>L;s?p zO}|l>`%hEY%v-3ScL99KIdoIQSo-$9X4-dK6CJqMN{2R@>6NARWFC40&e$FyU*G$w zYyRUj#q=IE)PGJ*mIHLv-0uPJIzamTv=D>-uWo>gTv4b@jLNoK9gKS!^_@-ANmYz zk>hmREk|fk%XirSxbG7CC~$x0r|IdLMZgE&lVyF6@$#SbxZ<7rW&ZA-8g9_U>iwC{ zSk`M3f&=;OGcJGTOtp3$&g&n?Z`W`iEn+N6B)xJmNvT^#m$L~J{Xh)Iy=`-A)S zllQJn_**+1rcE49!}?8yKb7xEd`Jl)-;u7ri8LEEQ}x8XICJ_L{-+bP68!Aun+{Xs%mb8~v=wKgckL}J z8#NfPkH)=NzSr?zfqQj!bcjb@T(}qT?2ix}rSppj5AcZ&^Y@A6w~xjntbclPN_g-c zUk3VbfepgHKY0c;@GNNgCfuj)4?kWuKSU#}c$hrdf!l1s#VfP+^e(*hY z$^INL*aG}M3cceH_WWt!{y5#c;was={70J8v>!U@WB7X{EB8&BG-H1l_*; z6nHVt3T`?JKfzhL9{$5?a8A4ccLex;0N)p2zoMCS1?Y^dE0~}wRM~U|X+Kmj9l!_O z|3~Uud`V(&M_>isNn zhJd={sQ-_>s{pGqTi1@=ND3B;33hjPj@_*&V4&EI*n(h=7$7K!APNd51|S9&7$|JI zYtx7*@!og+8ysiOoIB^7J9FmTd-@2zpOH6@=Htf)3oz%&DlB`o7YpuLVTJE0m`7j0`Xg&G zYs>_4Za$(PStI_5HKKivBJA=3ggWd+=*2yddF(;RZ8LnlMnB-N3o^Td2(jIVNW0yL zvopnO%k8k7Z-yc4A8n)Oj3388!IsV8ICdn3HKKI#A(K4F#*ssuE9Sh>!M(XsJxTP5 zY}@qPxq`u>Ear@v96QLFD<*NTp>Wze`^4&9z|={vad2N2dkr#ReS%y&mc;jshyKDq z#znFI?~ISWzR}?J?c3L%HEUMw0Rskz+U_4>_r$%tz@Aclaj!ONJ#?M>Hm!G7rAAfDfh}9xar{}JqQu@@_ScE|iPC<2 z(X-QlJ$qumqq-`uIF9kBjf-_Ttm$it=dR2Px zx>yU1ycD^gz`w8Wc#L>5884%g`AV4oBp*f+%Z zAaVr}AJ!OWF*ami$--33nGw%e_!^BGT;kfqYcO6OCB6Q{F*)ZVQuuy}%=x1*YPdJ! z>Dht>3mohhF4XTbYSbuABO{}lQ>IM$!|YyQe`5NeN|fsBhjvk)*|k+m#`>N!yR=+> zdBJdxuziN{S&j$u3+|jp!9Diuc$`Muk#$)&SBwf;)O*(ZO4VE>+t*T~9oH4TI;B1N zrF-J>mNk4Kq6e>`W)SOEA8GHRFH-bvi#@bT_ED1hGuYd~^)Ia&rbE5OepK6E3k~kI zMN6-q==g95`uP5c;ZJ5_g1{CpVtiSQ*WA-7 z`JDseUY|qs%d?1jehLvj#}VdkMIIbNn2R}Nm&pSc3&@;_|0OHPE|LQm_9OJ%PK2J> zim=n05p#AuVwgYr?%9o9(+*;A`=2!f34D9%VNkrdA1q_W>Eifh~NV)L}0P^pS5_ z?%6_2f3X}3UayDI8&jAB?Z^7}hp@?X6;{n#i1U_aoF2V^m^ZY4av&zq4pFac5c%pf z!k7<)vhOI&?J&Zw2rif-%$fOtGjYGTk1=95LN6$Ch0t@Rj17Aca@HK-rw=0b40Fj7 zM{sTZ5v(6~6#d(tVjqAL`u6w2tl2NIV#NoTZja%3J(0Xf;{8PChzVF>7>;3s+56wn zk#k$OnBRvpXHbmk_L#*p$B2dTiXi68H8&}uV)U*zzGUboV z^UD$c@*lR%t#Wzs=sIhMbZ#`ihhCq+4byKITw||JY^a2FaaufzQ({Xbj<+#f+e(qg za=n~8s#aznJAHqB4S(9V*dOONdh;cm6nDfY-{!8IIOta;V! zb{3UqyQ0Eeebhdxgr*O>O0}Qv-Xk%ql zJ10+GpJ`%Z(s1L(jmoD^ovQBQ;_`?2`|k${#J}RpjWcVUoH4krVc&Lb!?w@4TX6pp z=Vucr#62kr#mUjcoVce7;bW;>-!3?i5RNIMT~V!yTM7Q9J=$V_q;Sc;TYT%&R$wjd zmB#)ZspplwO=1rPU7cJ?9&|Z(Bk}-s4JT9^XpagDoKSJjB~+YckBTdsqrO{H=soQF ztNPCZOnGjI*{@e)?%Q=(Yq=b|7aPHP=VpA3dVqqM`-pgZ0ns6s5FPA<$PW&PcyEue zx3&m;MlxFSU1KB(|a93&lWbEle)#Y_KG#e zcj(zY0DXFLKcKcZxhEXg2x^^8ned~t(>dFFQw|+E)KJ(vF|SGNEB(tP@;9 zxbsDXIXNQCQEW(6UYx6`jgWqAv<*fVbWG@;Jf7j zuB^1co@r*7)WaB^^tNU7>S=XOnz4l}l{?d$|7a z`?UXR*A0HG?Q1-7T>gbUc@plz)+M_q2ZSFGm}kk^yOY7*JxX>O`%c+woE?vq`ZrOz zf(zq6bAS4O#on0o|C0Te?u{vY{P+F3V!r+h$9KWReKq%IXvem{h!?=ZRGf*{7p*UIP2cLSIKO%$ zY&L8_YS0b(C|~9&-pCd)Kz0dHk*{4YZG#2vE7S0H=j3Yjl? z;O&f%hb26?PQF}sN4UEi!riVQ{0h0`>caSN31OEm(l1(XAA`^h)JxN&1o63`Kp#>0jUt06FF z180R2`9sEazegD2UtPq0`GF;Fg>N6xwuyBT{k^b%fjx1SFwe{3UWvI1`IJRIkON=j zxUkn9)hpRE|K}PlX?>oehNIXUSM=G7bvk0LhTwqk^`D75*Jw38!S#OqxE`|&=Sv4- zD);3!oI8j0fr*?q=)!d%?U+-w;+%b3G-)~v>K)gjJaf%*OZq~|LK!XZc10(@Vd(XE z3|d@l52e+uadOjITqgdvXnzq=j}aZ=!>w4n@iqQF!iDX}T&1`oERyyfd>+Bv2Pov_ z4alB*Lgs%RvZv(1ldC0MxGedE&|Ad&rYFL0cp%*KI>N5IaqMuF^`p!53*^CNa>?0| zHlH>a+iHafpK=RA9K>k(VM zdi6!br+dwsHPt(J?p%qu|64Hso)g5ss%-0=4*3rIGNjlpY+qn6;(SIa_PNBGz2#p^ zB>xllIiZBTK+H*VG;3_n{*#*=+xtmlf3g4h&pBX})VJ57vDhz#>y(?gbKYVi_ttF3 zIkEoI+Fx<)l?}Y^#_r{!CN!44H2tMsu--j-N?hpFt~FoN8day7qWt31j0;mx!&n7c zc1_U0wlT`-4?%l_pKyQc9^Blp6@ia#AR;LcvM7H9hdn`jqz}13++tl38b$kNE)eqG z4YD_PAq%_%S->rXyt-M!1rKuJ8f4G-f4{2;^`h;2-A4Fb%I%v7yG37e;~K&|+*m`t zf>1XX&LxmfE{+IxI)@M^>!N6v!?|&;2htK;_Q?~R_Q(@1?v^Jz?Un}|-;gnkdrOHu zWw|Gf8*vc**)1u5MUSRL1L9vHeec5gg%6!2n^xrcK*0gAwo1lakiCoS;n8hjEX@Us87lT!naJyH zupUg@4;Zh6&ARp2IDY|qKe$$iYlKBFkXV~9`T@mWjJ>;dg~|jIR9bsHADUGQ$JDg2KdMR^T+!L`QQy% z&;!Wc-Gl6{7r8(l1l~r->sydXT%b>Qb{(M)Y5NcFA^d?C!tdW97j7Z^&JFT_Jn^Kz zxX!rY?!tKl=9TVezr=eU%SiM*EKj&@m6qs!NS<)TT%O>1P@Z(vTz+=blDvNGap&*J zt6i(sdIHdoBKBzgEBZA`@L%ymj>XdTh0pIOV!RmViF{AwfZ6GizsJ`vihXU03l$tF z_`FDUlu7yUqDAGXo``=aIOd8o3? z2FfN5sJh@V)cegvH3Jv)vJ6JR-s1?}wwF2lHAH26L}b!C${R!`zLB^P8Z9{BM-Dt8 z2Y4Ieix6@*xE9BZ2@^1F4Cj1DPeQdNC!o2( z87d|hP+s2#^$$g0ih)NBjyhl_DCHcL?g^=iH2nl~mAqT=9 zlMCd5>`@69yi2%1pCEC8J|W;PLZ8s?pFBeNV;_Y1dQq$PTvl_x$pBmc&Q+ds*Zy-ub+v^LG2_TzZ5w^*@GBW)`JG@R0yBIeTn zvV;D=VxGDFgn~Qvw13*Wi2s5EQtro`{}cBzBi7QMR)xgBfN?;aGao35569Pw`%(1P zk82PT7!y+Q=6NJ*TE6VvcSh~%PTZf?j5a+9rpt|BwQ4o&*KL5u=Iwa4V=n@B?uWzr zjo7)&2sn;IZ};yhgC#0P}*7NZv;L78mFf zf=jsY?g2ud)9(GBApDsh!k>}@kG<&=7(X7~M1-$|IyD&xt{O=1&sgn{elBUk?&D(*8yMc%R3s1Jt?n{b1;Ki#nhA9k4|&}=_0Z`^_ttJmP@>eV=8ybAkQ zuEeh8%dvf#A-0eUn@YH_W~n~+3|YYVFc(^j&C$rz1GSdhL)S6{z3j5k*(L*BZ8M;M zBLyC^NW^D_ASE{#ahV~A&Y%b`P$KCMLSmjHB>E+9Dbc*o+#n>P#4j*c3<;%Q5b;6A z`0&98p|5-p{_-ipUyuXO{SZnHg!p+O(%Oq@P(Li3?OR3U!BZR z92=sT8<6salAMwALdAI^UT}O+GG6%nIS=j^FX8m6b-1?71c95)5V42zYm@-;;PLi7 z@Y=dliV4CWTwpvnyJj6ukPCf*<7n3SAD>h2Gbn#~-uE5;6=U}-uHmwHv<7=Q8hu

H;{oUOo26XgG`Vnm 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 z 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 A^Z)<= literal 0 HcmV?d00001 diff --git a/SOLVER/XMLSaved/Properties/AssemblyInfo.cs b/SOLVER/XMLSaved/Properties/AssemblyInfo.cs new file mode 100644 index 0000000..f26c358 --- /dev/null +++ b/SOLVER/XMLSaved/Properties/AssemblyInfo.cs @@ -0,0 +1,35 @@ +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +[assembly: AssemblyTitle("XMLSaved")] +[assembly: AssemblyDescription("XMLSaved Tools")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("Milok Zbrozek ")] +[assembly: AssemblyProduct("XMLSaved Tools")] +[assembly: AssemblyCopyright("Copyright © Milok Zbrozek 2021")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// Setting ComVisible to false makes the types in this assembly not visible +// to COM components. If you need to access a type in this assembly from +// COM, set the ComVisible attribute to true on that type. +[assembly: ComVisible(false)] + +// The following GUID is for the ID of the typelib if this project is exposed to COM +[assembly: Guid("d7c27f4d-d0cf-4e0b-8a48-200a59b2654f")] + +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +// You can specify all the values or you can default the Revision and Build Numbers +// by using the '*' as shown below: +[assembly: AssemblyVersion("21.12.21.2")] +[assembly: AssemblyFileVersion("21.12.21.2")] diff --git a/SOLVER/XMLSaved/XMLSaved.cs b/SOLVER/XMLSaved/XMLSaved.cs new file mode 100644 index 0000000..6a131d3 --- /dev/null +++ b/SOLVER/XMLSaved/XMLSaved.cs @@ -0,0 +1,326 @@ +/* + * C# Class by Milok Zbrozek + * XMLSaved + */ + +#define SERVER // comment if dll goes to client +#if SERVER + +using System; +using System.Xml; +using System.Xml.Serialization; +using System.Security; +using System.Security.Cryptography; +using System.IO; + +///

+/// Summary description for Class1 +/// +namespace System.Xml +{ + [Serializable] + public class XMLSaved + { + /// + /// Ñîõðàíåíèå ñòðóêòóðû â ôàéë + /// + /// Ïîëíûé ïóòü ê ôàéëó + /// Ñòðóêòóðà + public static void Save(string file, T obj) + { + System.Xml.Serialization.XmlSerializer xs = new System.Xml.Serialization.XmlSerializer(typeof(T)); + System.IO.StreamWriter writer = System.IO.File.CreateText(file); + xs.Serialize(writer, obj); + writer.Flush(); + writer.Close(); + } + + public static string Save(T obj) + { + System.Xml.Serialization.XmlSerializer xs = new System.Xml.Serialization.XmlSerializer(typeof(T)); + System.IO.MemoryStream ms = new MemoryStream(); + System.IO.StreamWriter writer = new StreamWriter(ms); + xs.Serialize(writer, obj); + writer.Flush(); + ms.Position = 0; + byte[] bb = new byte[ms.Length]; + ms.Read(bb, 0, bb.Length); + writer.Close(); + return System.Text.Encoding.UTF8.GetString(bb); ; + } + + /// + /// Ïîäêëþ÷åíèå ñòðóêòóðû èç ôàéëà + /// + /// Ïîëíûé ïóòü ê ôàéëó + /// Ñòðóêòóðà + public static T Load(string file) + { + // if couldn't create file in temp - add credintals + // http://support.microsoft.com/kb/908158/ru + System.Xml.Serialization.XmlSerializer xs = new System.Xml.Serialization.XmlSerializer(typeof(T)); + System.IO.StreamReader reader = System.IO.File.OpenText(file); + T c = (T)xs.Deserialize(reader); + reader.Close(); + return c; + } + + public static T LoadText(string text) + { + System.Xml.Serialization.XmlSerializer xs = new System.Xml.Serialization.XmlSerializer(typeof(T)); + MemoryStream ms = new MemoryStream(); + byte[] bb = System.Text.Encoding.UTF8.GetBytes(text); + ms.Write(bb, 0, bb.Length); + ms.Flush(); + ms.Position = 0; + System.IO.StreamReader reader = new System.IO.StreamReader(ms); + T c = (T)xs.Deserialize(reader); + reader.Close(); + return c; + } + + /// + /// Ïîäêëþ÷åíèå ñòðóêòóðû èç ôàéëà + /// + /// Ïîëíûé ïóòü ê ôàéëó + /// Ñòðóêòóðà + public static T LoadFile(string file) { return Load(file); } + + /// + /// Ïîäêëþ÷åíèå ñòðóêòóðû èç URL + /// + /// Ññûëêà + /// Ñòðóêòóðà + public static T LoadURL(string url) + { + System.Xml.Serialization.XmlSerializer xs = new System.Xml.Serialization.XmlSerializer(typeof(T)); + System.Net.WebRequest wr = System.Net.HttpWebRequest.Create(url); + wr.Method = "GET"; + wr.Timeout = 30000; + System.Net.WebResponse rp = wr.GetResponse(); + System.IO.Stream ss = rp.GetResponseStream(); + T c = (T)xs.Deserialize(ss); + ss.Close(); + rp.Close(); + return c; + } + + /// + /// Ïîëó÷åíèå ïàïêè, èç êîòîðîé çàïóùåíî ïðèëîæåíèå + /// + /// Ïîëíûé ïóòü ê ïàïêè ñ \ íà êîíöå + public static string GetCurrentDir() + { + string fname = System.Reflection.Assembly.GetExecutingAssembly().GetName().CodeBase.ToString(); + fname = fname.Replace("file:///", ""); + fname = fname.Replace("/", @"\"); + fname = fname.Substring(0, fname.LastIndexOf(@"\") + 1); + return fname; + } + + /// + /// Ïîäêëþ÷åíèå îáúåêòà êëàññà ïî èíòåðôåéñó èç DLL + /// Êîíñòðóêòîð êëàññà äîëæåí áûòü áåç àðãóìåíòîâ + /// + /// Ïîëíûé ïóòü ê ôàéëó + /// Îáúåêò êëàññà + public static T LoadFromDLL(string filename) + { + System.Reflection.Assembly asm = System.Reflection.Assembly.LoadFile(filename); + Type[] tps = asm.GetTypes(); + Type asmType = null; + foreach (Type tp in tps) if (tp.GetInterface(typeof(T).ToString()) != null) asmType = tp; + + System.Reflection.ConstructorInfo ci = asmType.GetConstructor(new Type[] { }); + try + { + return (T)ci.Invoke(new object[] { }); + } + catch (Exception ex) + { + string rr = GetReference(filename); + if (rr != "") rr = "\r\nAssembly references: " + rr; + throw new Exception(" Couldn't load assembly " + System.IO.Path.GetFileName(filename) + " - " + ex.Message + rr); + }; + } + + public static string GetReference(string filename) + { + try + { + System.Reflection.Assembly asm = System.Reflection.Assembly.LoadFile(filename); + Type[] tps = asm.GetTypes(); + Type asmType = null; + foreach (Type tp in tps) + if (tp.Name == "References") asmType = tp; + System.Reflection.MethodInfo mi = asmType.GetMethod("Reference"); + return (string)mi.Invoke(null, null); + } + catch + { + return ""; + }; + } + + /// + /// Ïîäêëþ÷åíèå îáúåêòà êëàññà ïî èíòåðôåéñó èç DLL ïî URL + /// Êîíñòðóêòîð êëàññà äîëæåí áûòü áåç àðãóìåíòîâ + /// (Èñïîëüçóåòñÿ äëÿ èíòåðôåéñîâ) + /// + /// Ññûëêà + /// Îáúåêò êëàññà + public static T LoadFromDLL_URL(string url) + { + System.Net.WebRequest wr = System.Net.HttpWebRequest.Create(url); + wr.Method = "GET"; + wr.Timeout = 30000; + System.Net.WebResponse rp = wr.GetResponse(); + System.IO.Stream ss = rp.GetResponseStream(); + + string dd = System.Environment.SpecialFolder.ApplicationData.ToString() + @"\#tmplda\"; + if (!System.IO.Directory.Exists(dd)) System.IO.Directory.CreateDirectory(dd); + string f = DateTime.UtcNow.Ticks.ToString(); + f = f.Substring(f.Length - 7); + string ff = dd + f + ".dll"; + + System.IO.FileStream fs = new FileStream(ff, FileMode.CreateNew); + + int rb = -1; + while ((rb = ss.ReadByte()) >= 0) fs.WriteByte((byte)rb); + ss.Close(); + fs.Close(); + rp.Close(); + + System.Reflection.Assembly asm = System.Reflection.Assembly.LoadFile(ff); + Type[] tps = asm.GetTypes(); + Type asmType = null; + foreach (Type tp in tps) if (tp.GetInterface(typeof(T).ToString()) != null) asmType = tp; + + System.Reflection.ConstructorInfo ci = asmType.GetConstructor(new Type[] { }); + return (T)ci.Invoke(new object[] { }); + } + + /// + /// Ïîäêëþ÷åíèå îáúåêòà êëàññà ïî òèïó ÷åðåç Remoting + /// (Ex: tcp://dns_host_name:port/uri ) + /// + /// + /// Îáúåêò êëàññà + public static T LoadRemoteDLL_URL(string url) + { + return (T)System.Runtime.Remoting.RemotingServices.Connect(typeof(T), url); + } + + /// + /// Îòêëþ÷åíèå îáúåêòà êëàññà îò Remoting + /// + /// + /// Ðåçóëüòàò + public static bool UnLoadRemoteDLL(object obj) + { + return System.Runtime.Remoting.RemotingServices.Disconnect((MarshalByRefObject)obj); + } + + /// + /// Øèôðîâàíèå òåêñòà + /// + /// òåêñò + /// HASH òåêñòà + public static string CodeInString(string textIn) + { + string txt = textIn.Trim(); + while (txt.Length < 32) txt += " "; + + byte[] code_key = new byte[] { 194, 61, 213, 244, 141, 188, 172, 76, 251, 99, 252, 139, 89, 2, 205, 240, 27, 216, 181, 245, 240, 171, 239, 113, 22, 234, 66, 87, 246, 100, 87, 214 }; + byte[] code_IV = new byte[] { 149, 7, 196, 206, 172, 5, 33, 229, 55, 242, 113, 7, 75, 72, 170, 149 }; + + System.Security.Cryptography.RijndaelManaged rm = new RijndaelManaged(); + rm.Padding = PaddingMode.None; + ICryptoTransform ict = rm.CreateEncryptor(code_key, code_IV); + + System.IO.MemoryStream msEncrypt = new System.IO.MemoryStream(); + CryptoStream csEncrypt = new CryptoStream(msEncrypt, ict, CryptoStreamMode.Write); + System.IO.StreamWriter swEncrypt = new System.IO.StreamWriter(csEncrypt); + swEncrypt.Write(txt); + swEncrypt.Flush(); + + byte[] bb = msEncrypt.ToArray(); + + swEncrypt.Close(); + csEncrypt.Close(); + msEncrypt.Close(); + + string res = ""; + for (int i = 0; i < bb.Length; i++) res += String.Format("{0:X2}", bb[i]); + return res; + } + + /// + /// Äåøèôðîâêà òåêñòà + /// + /// HASH òåêñòà + /// òåêñò + public static string CodeOutString(string textIn) + { + string txt = textIn; + byte[] bytes_in = new byte[(int)(txt.Length / 2)]; + for (int i = 0; i < bytes_in.Length; i++) + { + string ct = txt.Substring(i * 2, 2); + bytes_in[i] = (byte)int.Parse(ct, System.Globalization.NumberStyles.HexNumber); + }; + + byte[] code_key = new byte[] { 194, 61, 213, 244, 141, 188, 172, 76, 251, 99, 252, 139, 89, 2, 205, 240, 27, 216, 181, 245, 240, 171, 239, 113, 22, 234, 66, 87, 246, 100, 87, 214 }; + byte[] code_IV = new byte[] { 149, 7, 196, 206, 172, 5, 33, 229, 55, 242, 113, 7, 75, 72, 170, 149 }; + + System.Security.Cryptography.RijndaelManaged rm = new RijndaelManaged(); + rm.Padding = PaddingMode.None; + ICryptoTransform ict = rm.CreateDecryptor(code_key, code_IV); + + System.IO.MemoryStream msEncrypt = new System.IO.MemoryStream(bytes_in); + CryptoStream csEncrypt = new CryptoStream(msEncrypt, ict, CryptoStreamMode.Read); + System.IO.StreamReader swEncrypt = new System.IO.StreamReader(csEncrypt); + string res = swEncrypt.ReadToEnd(); + + swEncrypt.Close(); + csEncrypt.Close(); + msEncrypt.Close(); + + return res.Trim(); + } + + /// + /// Äîáàâëÿåì îøèáêó â ñèñòåìíûé ëîã + /// + /// + public static void AddErr2SysLog(string msg) + { + try + { + string sSource = System.Diagnostics.Process.GetCurrentProcess().ProcessName; + if (!System.Diagnostics.EventLog.SourceExists(sSource)) + System.Diagnostics.EventLog.CreateEventSource(sSource, "Application"); + System.Diagnostics.EventLog.WriteEntry(sSource, msg, System.Diagnostics.EventLogEntryType.Error); + } + catch { }; + } + + /// + /// Äîáàâëÿåì â ñèñòåìíûé ëîã + /// + /// + public static void Add2SysLog(string msg) + { + try + { + string sSource = System.Diagnostics.Process.GetCurrentProcess().ProcessName; + if (!System.Diagnostics.EventLog.SourceExists(sSource)) + System.Diagnostics.EventLog.CreateEventSource(sSource, "Application"); + System.Diagnostics.EventLog.WriteEntry(sSource, msg, System.Diagnostics.EventLogEntryType.Information); + } + catch { }; + } + } +} + +#endif \ No newline at end of file diff --git a/SOLVER/XMLSaved/XMLSaved.csproj b/SOLVER/XMLSaved/XMLSaved.csproj new file mode 100644 index 0000000..169f8ab --- /dev/null +++ b/SOLVER/XMLSaved/XMLSaved.csproj @@ -0,0 +1,47 @@ + + + Debug + AnyCPU + 8.0.50727 + 2.0 + {B985AC95-1479-4677-9536-ABC1D34B5862} + Library + Properties + XMLSaved + XMLSaved + + + true + full + false + ..\..\READY\MAIN_DLLs\ + DEBUG;TRACE + prompt + 4 + + + pdbonly + true + ..\..\READY\MAIN_DLLs\ + TRACE + prompt + 4 + + + + + + + + + + + + + \ No newline at end of file diff --git a/SOLVER/XMLSaved/obj/Debug/XMLSaved.dll b/SOLVER/XMLSaved/obj/Debug/XMLSaved.dll new file mode 100644 index 0000000000000000000000000000000000000000..a30268d3b724bf2be5233d5576547890b47d7b86 GIT binary patch literal 20480 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 C@o&2T literal 0 HcmV?d00001 diff --git a/SOLVER/XMLSaved/obj/Debug/XMLSaved.pdb b/SOLVER/XMLSaved/obj/Debug/XMLSaved.pdb new file mode 100644 index 0000000000000000000000000000000000000000..95a20e0ab18cb30749e535ad6aedaa226ef32005 GIT binary patch literal 19968 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 Vs1zDWXT}3_&rCHVwY*0?@PEz;;=KR> literal 0 HcmV?d00001 diff --git a/SOLVER/XMLSaved/obj/Release/XMLSaved.dll b/SOLVER/XMLSaved/obj/Release/XMLSaved.dll new file mode 100644 index 0000000000000000000000000000000000000000..08de451d7a8a2fa6581ebe5eb49a0ed06ab3fb32 GIT binary patch literal 20480 zcmeHNeRLevb-!4K(cuJ;&uEP;$~@AZ<W=4JcZl?edsrY^J3DIM?^VKflr-Mm!N6!CN zg#ILSYUyL5_tes%al05VxXzfH%Ei;EeBLR=N36J8&d2S1yt98Wo^vu*vaT+?+*iG$ zi>OxwC~)W9smf@tlCrc$7({VU_=oGfD*)p7wd2Pij@x|CZnUKRe5XnLK<6t!?Ket9 z;s8F~ze%3&ZXz1wRy&cwL6~`6PgD!qHt;Q(+4pI99Qvm98^E_s!;>ZJND27z^8nCS z@dvG`D^7HM(k;4aP^4|`Xt43k_)WXoVSUoIvJM#8R=OTP=4;1q+SN|9Wg1#-RwGc2 zKs5r@2vj3bjX*U5)d*B0P>nz}0@VooGDU!&t8wwOsX{^e=t4Y?pF<=h^?wgy%>inG z805`o0Tw4rqHr+^5LOZ~+-fvEa4YvX3xMek1_P`ITn)Kcvr7EDtIQ!^Y+!M{xDdBm z%}~y0F+45xH#m!=wsQerII$RJ)ajx6&~3JZc6g;Bhe_Z$J{)oy0as%@g)YK)fjP!g z5_mXgd!6%fzmILM)txxn#%i{6FXZsbV3wbropKn(Sqk=A-KaNU#06;U&N7A-Q;T>J z60XxiXNHKWAvuPru0BsmtU$LH7lrmjt;7$cDc&AFHX-Zq3C%xO5Rxgm_;B9;ZG)gvH^ z1s6V62=$tWU4rh0Jx-hC!qAJ67cW4!4&6%PQb~5!;#RYuR*xC=vCx_oreTKestcV- z8#$`84qO*0p;|N4uqPHWLncDm`aPrm1hPpu>(LuiO|||6ycf=8Kt1pD)8nzAlGwog znyE>v6PL5Dh>NHeOf9id_ANev84C=q(x@X!CGP3 zxuyn~xDr^g9pI>`uNM5i1#gn-Z5qdH2=+G%3f=+D;jdO7)7QjJ&D7zqvl%+vFJhPk zUe9>0>Tp#zbyI_@-#6U*(CKublRaIq!0AM@B&`mf4zHB1#e%2F4ElBu4G&Y81H$XE z4Gl~j?BG1XECToPL_3own#_|LUFJ#c`RCq>JP~pN+{f88j#XVK(S=)+9!hlMzA~{D zFjg0>OQ3v&W07bi(ZdZGX{yduXg2P3u9lRLsk*0FPcNfEGuTk<`3r)5#CSvxa}R_{BbN=fX1X)?K1w<;xMxJXOrLyWh*~{`))h@BH0^!KFW1_wNVwtGE5Z z9lX|Ffn1p9#Th^&yrx!jU#f&UtjYMDA8&o*{J5-SE7%e>F$C6{^XK~{lu3_NTSV$& zf*PD%xQBGZ*^PTlm9>cDZK@4L6cD)*RDBFGZyY!D9cNoZiM0i1R}8?Mm+!9M#G+3L&xm?<5b`Rl_$5s&M)`Xp8B3@mKhcd^7cWFMudPvTC!F&M^1Zpbi{Gxi!{S-ae zRxAv%dduKdTZF&U*TTL-t;y!(rOoSFQE_>v$pU_W&0yKD5@k@h_oIj`8!WkYeyqqG z-$u<-Vc4>rgY+G2^IQU#ZQa>}>O?O9KZ3X~+mdzQro1pmV)q?NA_SfEGjRza%OFl2 z_yzI9ln}(E9vDaw{2;?QAn)AI{7@@#Zo?1X1C6ev^@#C2@n3)!Nth8`LL*ngn7XyZAPvFXcMuosA zU|GTw68@otey{se+Eyj%A6MfMrgl!jT)gF0X2F^WgAXO_<_p$HwKwyTkD0{5_creQ<+dm<*D&{ZWS?lZXkxS=XL;;jG6)GagM z_9@Kd{8;MsU5yb{TJK{!fCcGmKDHN_M&IzU5nwviUf{{yK#kbB$9?Pw`V88$%;m?$FvgPV~+UPUqP;pzOvHed=^-QG8cN-X<9?`=s_QQ z6WDzEiNtPN_&z@O@Tw402gekO0wQJ-GDXm3SQuWfpg!4dL^cTWphxkbC-o%aF35vF z#sNjpj}4RFr#4z7;Zg}#0bYi)Jku|eaI=Ix5?&+WUI|kY+7ccFyn>DccG4|?&2&=2 zJEjib=K%9+8{mZ633yU{ ziG=u?`m)sXLrAd=LNE-8$JF-#f1rLurud<%h!DLExJZ1WYJhsM77*L22#LM47;t6q z0&yo@983WA29si`xHh;>EFjL7MPekl3H*g%hgc;(A6!Z;;!8o+RtWZp79k@n?w6E5 z0_UCdbnt-afd*HkgreOB*r5HEI4GL6y8tiOj?jeg?0F_|kF@0Xq_+FTacFy3JV(RY zV}Q1Hk2op5s{Iq-H?=pw^Ic65_kyRH9uc?eKNC;O_H&}qFqG%S24kM`Iw*^jClSdu z%*eR0LV=yeYUM+5x6uQhQ{ds5x<+}IUN#UJC~}6FRJzN`L5> z5|VS8M2-JgNn&l>1h|;K47iNG4S0!!m($;%eXZoV8o8ZBmT>O@>PGu>sIW;q6|M&? zQhy*#Usc`}g5p>eDzcaNogj_U7wPxu3Hldm5dC68JRzEu-AWJrEp5XJ6f_Q~$isPn zZpJE9Nu4A*2R1E|y9t!gTc}yGY%zjM5T1Z=olTQvVFnG4A-Gi3o}k>HxQ)juqK$n{ zrku5|pgn!PgQ-JSCYi}*r;zJgXmFxfvU15ixhxG)u9$Y*tUcmWsej}KD_tTMq+TbL zkzj~F9W&N#XFc-HfnM5bl{(63BVd(gGF@`qifb4=3omRZPn(NH zD>sszV9R$|ZV|N2C7dWm$|Y;6b5@5RqJeV0Waq48PrhWiPGQh;57}v}NL$Nx=8TpO zC%4Nk+9O%(46QP3M>$(6yK{65xv7kmOSuQ;kZ}qVu01whn%%X-#oVUn=ztA{RDNQ% zM2C|fwa3bCilZ^RyVEMBUAr)M=a5~R?vo#sPCGT0cZwxDU8GKHq&zm3I?HvBh9evD z5V4vON;VWz;ZDWUBS`ZGtZeFtY!%N~>d%36uw;+eS-UjN%}S0F^x3Jbee`TwMmb-d zksD}eqF|A)ird>#`3$;{!i;fx`V`+>ERN)qN|{KYR0!5oqV@EXToTAmE0x>r+Q<{? zK)YngHN(KCP6<c+Q}f=#GE^ay4SN){%Y|QvIxxTFIf30qkI~s-;bL`C0^u^t){Y@ ztqiu^D$#ChWWYLDwu&X+Nn%_3tkSrXkxFEKe_LFiIYhiMo#1#S+$Lg&?(gNjXKMPEJwGmX|iA^mga4Y!2D!14VdR zTH7X5+n*+Oi`TQ47gL!i8#7k8tnJ=Zpva?v%=gMBLY3#ur7z_c$5YuY6R6Yve$#1V zAM$!R4}0=7Ev;MDc6Y2@*Sfi@`xs`(D>+-OyoEYwO)K5IQrWU4Ys2vHAS+LAcHPuO zPu`YwVbDHmZMvkDmM_oA9B)3dwwbR?Q%j|oY_qZjY%3(?D#UKv%4Yn6!n$N-vOJcb zKTylsIRCpQBULmT*r7IKLMsAQq_>-`O^(iBX zEZ4Aq5UEgjZTW3)F&;wh@QGp2DZ6RQUm@O_=;A()PO=TYu6)Uzka;2NphWp>rEjG! z9Gb`+B^z%mEZTtc8vo(o761(3jnKt)cs|>Vb7K+xIT``q1Wt}Fuu=T@p2ykJLjMLn zQMSZ!R&}Thz6^RUq!OrEP*T9-fHO4-J&u!JoWwZ;bLgblY%0a}#AHiMISZCILuqz!xW9077(dgSqk-hXrZy{|;S`O(qSr;VxFVvdC7P~8cSf(1JvOt4p$A_b0!Cxd;D1$&9z; z8iTB$907Srbi&XBAeUiXTr>tF5X8+eYV{y#3(v>Tm`hH2D?tO z9s@CIGZVURluWn460j=~co`RlY#K&D7ZG-6@0Kn@VX zFgMZ|S*+JU1`P6V@?>=KPQ(~CMwm%OoV{@$g+ekXABS}Y z?1~r~1uzO+$1ItXe+`-luF%b>=Ms9NlTV(d@g$_ftP~Tw1h&H+B|3RZ707~sX3h^` zzN3>bo0G2rTL9yPIr(p)IC$P|3^oR95aXx~#GL#Papd`cn@bkzHJBzueDX)=!%R*7 zlqV}<=%g4C^SD5uFgJ_zTCf?jSTUgp{c%=?v@-CXG6JExd4j^NEy-XTc#<~oE~jzvzkYm)~DLmH?=l5r!Kv0q;>73ZKHUOV|Qqspw^DcxjX*U z{qa6K>l}#h8*!bZ)`9rO9HU3u$8y+sl4&P*MZC4SwFO@f1w|@n(D;z!WbvMI1s)Xt zCvhw|K}JOqUu}f{c!vgFkl;FxUs??*^}A8%w>$Z%l`jhqo@9dSpokDei?j2 z%HSbzV6b!WmSt-;9YcfrhX?w1 z4s{IlcHljL-Dvamg!=Z!yj|DeO^kv!F_k+$uF6XVI5R7HHF=~+u!+nupf?MSLACs-n|gc1ui)9*srrQ_Doo+&X;da2eFsB(2%FGIW)bA zfd%&A%3m8+HDZ9T4D&$eQ$h}Ze10fl6vTk~s26^w=n$xUS{MS4gYo6(5>S>-$rYq+ z6Np4g>VP<;`4r>etyi4(VJsKzqtL|oMsQVnk5W7A%|VhW{AP?T@fP+*yqgwNzH~ym zh<^65aMrnDrmZ~wdPM(>>@LW+2`C} zR35HXuWAIU5vWF>8i8sAsu8G0pc;W{1ga7EtVaM3wEVw+@mcSMKI@KG{i{Zx8i8sA fsu8G0pc;W{1ga6JMxYvjY6Pkgs7BzICj$Qsf#_Ry literal 0 HcmV?d00001 diff --git a/SOLVER/XMLSaved/obj/Release/XMLSaved.pdb b/SOLVER/XMLSaved/obj/Release/XMLSaved.pdb new file mode 100644 index 0000000000000000000000000000000000000000..47763442b2fc4ae3f1cd18aa6800b470e23f104b GIT binary patch literal 19968 zcmeI3e{fXSb;s`l+3-uTMQn=sW#I@L8_*BHK(J%Lk}xs?Yzc@+)kRCm`n$%&a;;;R zdjck#lP6gg%-B3Xm2y#g;MHw+t~~nor>pmOn30X28T08QE$bfq;lF;ndjCpyKIx$k zy{~%v)74MhV9cxITc7Cp!=Y8*?7Oe+%O`Gq<^$P3dQfSj@}IK@`$t~59(etw*I!a>?v**~S9EPy zy`{Bjh9{;*tVsmy{mJ5TSxCb>Au22U252v z!4+LYz4!E|GK1Yavzhm&Q@P=;?rdgPEv|LN zL#D{4u{x-fH`D`R{{P@pJMX{oh3_Qf_j4(#Uzz{s;;}bZUCp~XbAukq%qk!J#>hli z_Q}ACH0hB|HDjx#Hy&oFEBQoITfMns?{F?X$n##|xUO?>fakZ8^SX|7w!e3v|JQnR z{h1-#W>MaePVLI}=k~%j*F<`OU)Pk~yEB)$E8DwshbqN=wQiJsHFiAMWKr$xVS$IMJR`io}@c_^@w@{#&Ak^h=uoPbm}$b;SJl-Mo4^ke>@ACJ0>`C&ZLk&Urz+cr1O zy0aN)Vv2osr{AP}6UKN#9a0uJu)p+^Jiw7`G;NvQK0rA#kGhXTsvG2CjOdh%F~lb3 zXVblXij8#CZ7fT1?(8~?n3auXk+C}(1R zcBk{d{2cR#eO%;@n14P#Ug~q~RT@;;;K2Uk@8q5^_S@3Ard`==dMMZ2Z|xpi-HFZ- zNIIdO@*UtcD-@e6bD@>AtDe(_u^ z>KhZ*WsN1~hjm$VG3JMLSw4^XeSL0@Xnw|g&8;w}O85xGS3Z{T{kpF_jQQDZu0C-t z;fJ+^x+VOOXIh)$cH%tKT#RL@e)Tc7dIaVnVz&bMKlwPzR;5B*KhCqWyB3$u|Bz#w zWC%s?TSB3)opyQdSpwRE1xp zzp%a?P*PK#cVK^+2T9#i*zq-G`qHgK9l31(&|OFsgC{Yl2R-S8dSRU*rhfi#&EQT@ z^GfZ+{1i=g-<`J4E4ofAk57@eZm~J2T#jYgL6>XF<(S`}a(!uyjroJaEkh|i{=kWBKszqQ1tc9FOI?7Zsn}E8%C;!`4@Nnb(D{w1$kwIQc^LX``e*>3u=2 zR}X8Ep?uYW{iXZlO}=lVcy8R43jtL;4^m+OJ?VscA)e&=sPT;X+xBY9s((nG$;XOK zEH96@Vswh!$6N7uSY94)#UYlL#~WFRJjC@|_-qG0n}>W| z6j$YP+@9hpACIGMAEfuR8>9Nl@3=l`T*!m-y?5#Hky}6?p>T~#{ygNu>b|~~Y<3Y_ z5N#PIx9ofb8yBD_olsBw=QLLM*GBx&?y-kEGP|z<;A`{|P4dIJ2=aQP}TMUT^aJtBuJs4pRf_9sV4! z7Q6<$0elzO0K&^xnG8$FdgwZ6rlkq29O`F3)Cj4c6sV$n-e-?&ZrXmXryX6tXgja( z1LlM32fx~W7J|z;uLE1adhkvV8}jc3=_Bv#xS9TMg@P@!I9?c?-)!yDI1fOwE5weJ zGixE0_t2ik&;GR?|4LBfUj@pp)u8Kdoo`>`o?0052zAtU*oTP6yarvheH*AT(`O#P znpTi;n%hC$Z>`Brgr&(Dd%^LHG#EbZyr6K(_Z*Md248Mq6? zkLDh*il?3`vlyy_TA=B6%qNh$=iY>U2Ika$({fA)lns#{F?H9=Fal?%x9&JT3w??&ZGzD)1A?$z}5p*bROP>;XRw z$`79bt4$9!E`;XtPggKqm*((YQ6u}d%ti|P$jIBFrHpS1IHNG8k0e-x$GZFt&t6xf zlZUVJCmd=_e+o_k4})5Fz5vRbUj$i$%%h;@-j_h;rNukJFLVBW@XtZLXL}4Je&#FS z?|_ek_{)wRznCXDf5anwnZM+mHgrFeM(SmV`rhRd!9(xJ!{p7>weGH?X`8a@9ysL6NP64 zS-xBflz*eHVlCfH0P&k$BZSI{AA!o#e+M-$e+;ezUj*C1m%uLYWiSOYmV5^M4{#6o zQ!o#{0{$lWU*LZ5XCQOO{2crw_}}0kfd2y?0$&HoKWi6xXV3q^<1-!=^OMxm+O9H} zD_#|ztRhpYOcvSB;rgn?!;Q)b$>8qIsT_SLg$+<<(V_2m`# z%-vrn3isz%Qd{qZR3;=$ehf&C*)?DiIE8ch_6o3ybNTcgU>zvAd@EcI@}OncVRAFy z!#Vxs?*gv`<&YT;mi6CgzLOt+6_W4d?tZg)&oCa|0Hm^jz9)eTL9L5*pw`2B z@LEtlQWP6GzuuqE2N!W(ZGHtC*RsB8z0ShbHZ!DUa$I|4b`DCG*AGQ8UjVIwIwAQ&ar*@HDD(~J81x#X z+-iW=-W&+1T=9peUaf zMCXj7xiEjut+@C2r&F7ZKo-_Q4baWdT4)p018MEj%C`^N4`~hiETna81kzgeUFaBe z0@9kM>!Q}R8c6pWx)-?v>VkGaIq3hpOfhq-)u()#@E<5lHP=VHhNZk-voGjEUD;h; z*YSK^F5;oCz5z)1j{-uwj_2zx*0YGSL2I?E>t4Et`i}4GFNx~gwa2~`u`j6$^)27m zzp+@~-S?@!dwCM-JHD^KRL>619=(T6=!IDHf;Q+lnb%oX)X{rUH-_R1)1c#IUT1kx zNAK5cKhcY~pyOm-=iPcvbGGT7Pf0)ig;3CQaRP$`I2^ z{JGz-aenK^KfL4#dE@fKk84{oZ#r2J6Xw*HH9^nGyu$%P7mo7oa$-GWq zQAhjtPN%rBA9S3|>!gc1kC4a-Q@Q~hbezoVY%l6)f7R-QO;_?f=s20vX>9Nl;35Rg z@!b;|6S^+5q})HzTz7Pm`SGM4&X2IpF96%1Q1mQ*l|6ZJB=Fo{hs1v$5+uU$rp7&* zm}WKwb%}ej>sj3v+TuPJ)F*;<;j7}FM$@vmdG(T(MXaj}zf$+IbW|E0l>AC2J}Gxf zk?a7ZF_ag{Mj+ismKVvi_o;n=@*-IcKb_?Q&L!K!&xX^;v|sqlX=K_{8#s+jds9o) zcv%rkdn93hBo<4iJ(0;V(;rKwYu@vxk?EQKtEZ9anf7%4)br+OvN7Bd^Q=!v6#j-t ze`luWHx=bzK>cSOu=t`CC+#Lt$C57V|?IGxE5Vs_SSUk*e z9#Wo@Duxs^giLFM-P_mP*fx+!-EHcJv#I*++<*<&pZ8w?s0T%B2BdNgq@Hv;Dj5ri zzROoKxFCn?aBhoL;A_|Jom&*V7=ndbLAP}QWXsAvzb28we-d8PfO z$xs!")] +[assembly: AssemblyProduct("dkxce.Route.Classes")] +[assembly: AssemblyCopyright("Copyright © Milok Zbrozek 2021")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// Setting ComVisible to false makes the types in this assembly not visible +// to COM components. If you need to access a type in this assembly from +// COM, set the ComVisible attribute to true on that type. +[assembly: ComVisible(false)] + +// The following GUID is for the ID of the typelib if this project is exposed to COM +[assembly: Guid("caad096f-84db-435b-9af5-fd4f98af546d")] + +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +// You can specify all the values or you can default the Revision and Build Numbers +// by using the '*' as shown below: +[assembly: AssemblyVersion("21.12.21.3")] +[assembly: AssemblyFileVersion("21.12.21.3")] diff --git a/SOLVER/dkxce.Route.Classes/Route.Classes.cs b/SOLVER/dkxce.Route.Classes/Route.Classes.cs new file mode 100644 index 0000000..deccdc7 --- /dev/null +++ b/SOLVER/dkxce.Route.Classes/Route.Classes.cs @@ -0,0 +1,1487 @@ +/* + * C# Class by Milok Zbrozek + * Ìîäóëü äëÿ ðàññ÷åòà ìàðøðóòîâ ïî ãðàôàì, + * Author: Milok Zbrozek + * Âåðñèÿ: 13305C7 + */ + +#define SERVER // comment if dll goes to client + +using System; +using System.IO; +using System.Collections; +using System.Collections.Generic; +using System.Text; +using System.Xml; +using System.Xml.Serialization; +using System.Runtime.InteropServices; + +namespace dkxce.Route.Classes +{ + /* + * FILES IN GRAPH: + * lines - region.lines.bin - LINES info (node1,node2,segments,flags) + * - region.lines.id - LINK_ID for LINES + * - region.lines.att - LINES Attributes + * - region.lines.tmc - TMC for LINES + * segm - region.segments.bin - LINE SEGMENTS + * graph - region.graph.bin - GRAPH NODE INFOS + * - region.graph.bin.in - INDEX FOR NODE POS IN GRAPH + * - region.graph[r].bin - GRAPH NODE INFOS (FOR INVERSE SOLVE ALGORITHM) + * - region.graph[r].bin.in - INDEX FOR NODE POS IN GRAPH (FOR INVERSE SOLVE ALGORITHM) + * - region.graph.geo - NODES LAT LON + * - region.graph.geo.ll - INDEXED LAT LON OF NODES + * ways - region.rgnodes.xml - èíôîðìàöèÿ î òî÷êàõ ìåæðàéîííûõ ìàðøðóòîâ + * info - region.analyze.txt - èíôîðìàöèÿ îá îøèáêàõ â óçëàõ + * + * + * lines file: (lines.bin) + * RMLINES, count[int], + * RECORDS: 2 + 4 + 1 + 4 + 4 = 15 + * segments_count[word]; 2 + * pos[int]; 4 + * flags[byte]; 1 + * node1[uint]; 4 + * node2[uint]; 4 + * + * lines segments file: (segments.bin) + * RMSEGMENTS, count[int], + * RECORDS: 4 + 2 + 4 + 4 + 4 + 4 + 4 + 4 + 7 = 30 bytes + * line_no[uint]; 4 + * segment[word]; 2 + * lat0[single]; 4 + * lon0[single]; 4 + * lat1[single]; 4 + * lon1[single]; 4 + * k[single]; 4 + * b[single]; 4 + * + * Lines link ids (lines.id) + * RMLINKIDS, count[int], // lines count + * array[1..LINES] of LINK_ID[int] + * + * Lines Attributes (lines.att) + * RMLATTRIB, count[int], // lines count + * array[1..LINES] of BYTE[0..15] + * * BYTE[0] 0x01 - Äâîðîâûé ïðîåçä / Æèëàÿ çîíà (5.21) GARMIN_TYPE = + * * BYTE[0] 0x02 - Ãðóíòîâàÿ äîðîãà / Äîðîãà áåç ïîêðûòèÿ GARMIN_TYPE = + * * BYTE[0] 0x04 - Äîðîãà ñ áåòîííûì ïîêðûòèåì + * * BYTE[0] 0x08 - Äîðîãà îòñûïàííàÿ ãðàâèåì (1.16) + * * BYTE[0] 0x10 - Äîðîãà îòñûïàííàÿ ïåñêîì + * * BYTE[0] 0x20 - Âðåìåííàÿ äîðîãà + * * BYTE[0] 0x40 - Òîííåëü (1.31) + * * BYTE[0] 0x80 - Ìîñò + * * BYTE[1] 0x01 - Ðàçâîäíîé ìîñò (1.9) + * * BYTE[1] 0x02 - Ïàíòîííûé ìîñò + * * BYTE[1] 0x04 - Ïàðîì / ïåðåïðàâà + * * BYTE[1] 0x08 - Æåëåçíîäîðîæíûé ïåðååçä (1.1, 1.2) + * * BYTE[1] 0x10 - Áðîä + * * BYTE[1] 0x20 - {unused} + * * BYTE[1] 0x40 - {unused} + * * BYTE[1] 0x80 - {unused} + * * BYTE[2] 0x01 - Ðåâåðñèâíîå äâèæåíèå â îäíó ïîëîñó + * * BYTE[2] 0x02 - Äîðîãà äëÿ àâòîìîáèëåé (5.3) + * * BYTE[2] 0x04 - Àâòîìàãèñòðàëü (5.1) + * * BYTE[2] 0x08 - Ïëàòíàÿ äîðîãà + * * BYTE[2] 0x10 - Äâèæåíèå ãðóçîâîãî òðàíñïîðòà çàïðåùåíî (3.4) + * * BYTE[2] 0x20 - Äâèæåíèå ìîòîöèêëîâ çàïðåùåíî (3.5) + * * BYTE[2] 0x40 - Äâèæåíèå òðàêòîðîâ çàïðåùåíî (3.6) + * * BYTE[2] 0x80 - Äâèæåíèå ñ ïðèöåïîì çàïðåùåíî (3.7) + * * BYTE[3] 0x01 - Òàìîæíÿ / Òàìîæåííàÿ ãðàíèöà (3.17.1) + * * BYTE[3] 0x02 - Êðóòîé ñïóñê (1.13) + * * BYTE[3] 0x04 - Êðóòîé ïîäúåì (1.14) + * * BYTE[3] 0x08 - Äîðîæíûå ðàáîòû + * * BYTE[3] 0x10 - Îáãîí çàïðåùåí (3.20) + * * BYTE[3] 0x20 - Îáãîí ãðóçîâûì òðàíñïîðòîì çàïðåùåí (3.22) + * * BYTE[3] 0x40 - Îñòàíîâêà çàïðåùåíà (3.27) + * * BYTE[3] 0x80 - Ñòîÿíêà çàïðåùåíà (3.28) + * * BYTE[4] 0x01 - Äâèæåíèå ñ îïàñíûìè ãðóçàìè çàïðåùåíî (3.32) + * * BYTE[4] 0x02 - Äâèæåíèå òðàíñïîðòíûõ ñðåäñòâ ñ âçðûâ÷àòûìè è îãíåîïàñíûìè ãðóçàìè çàïðåùåíî (3.33) + * * BYTE[4] 0x04 - Ñâåòîôîð + * * BYTE[4] - {unused, 5 bit} + * * BYTE[5] - {unused, 8 bit} + * * BYTE[6] - {unused, 8 bit} + * * BYTE[7] - îãðàíè÷åíèå ìàññû ÒÑ 1..255 * 250êã, 0 - íåò èíôîðìàöèè (3.11) + * * BYTE[8] - îãðàíè÷åíèå íàãðóçêè íà îñü ÒÑ 1..255 * 250êã, 0 - íåò èíôîðìàöèè (3.12) + * * BYTE[9] - âûñîòà ïîëîñû 1..255 * 10ñì, 0 - íåò èíôîðìàöèè (3.13) + * * BYTE[10] - øèðèíà ïîëîñû 1..255 * 10ñì, 0 - íåò èíôîðìàöèè (3.14) + * * BYTE[11] - îãðàíè÷åíèå äëèíû ÒÑ 1..255 * 10ñì, 0 - íåò èíôîðìàöèè (3.15) + * * BYTE[12] - ìèíèìàëüíàÿ äèñòàíöèÿ ìåæäó ÒÑ 1..255 * 1ì, 0 - íåò èíôîðìàöèè (3.16) + * * BYTE[13] - {unused, 8 bit} + * * BYTE[14] - {unused, 8 bit} + * * BYTE[15] - xxxxx... - speed_limit/5 ($F8 mask) each 5 km/h (0,5,10,15 .. 150,155) + * * BYTE[15] - .....xxx - 0..5 - RouteLevel ($07 mask) + * + * Lines tmc file (lines.tmc) // creates for making the traffic.costs & traffic.times files) + * RMTMC, region_id[int], count[int] // lines count + * array[1..LINES] of + * reversed[byte]; 1 + * tmc_code[ushort]; 2 + * + * * + * * Lines Costs External File (Traffic) -- not impemented yet // ôàéë ïîïðàâîê îöåíêè äëÿ ðàñ÷åòà ìàðøðóòîâ (òðàôèê) + * * (traffic.costs & traffic.times) -- äîëæåí ñîçäàâàòüñÿ âî âíåøíåì ïðèëîæåíèè, àíàëèçèðóÿ ôàéë lines.tmc + * * RMEXTCOSTS, count[int] // lines count + * * array[1..LINES] of + * * normal_cost[single]; 4 + * * inverse_cost[single]; 4 + * * + * + * Graph file: (graph.bin) + * RMGRAF2, count[int], max length between nodes[single] + * RECORDS: + * next_nodes_count[byte]; 1 + * IF(count>0) array[0..count-1] of next_nodes_count elements + * ARRAY ELEMENT: 4 + 4 + 4 + 4 + 4 = 21 + * next[uint]; 4 + * cost[single]; 4 + * dist[single]; 4 + * time[single]: 4 + * line[uint]: 4 + * inverseDirection[byte]: 1 + * + * Graph Index: (graph.bin.in) + * RMINDEX, count[int], + * RECORDS: + * pos_in_graph_file[uint]; 4 + * + * Graph geo: (graph.geo) + * RMPOINTNLL0, count[int] + * RECORDS: 4 + 4 = 8 + * lat[float]; 4 + * lon[float]; 4 + * + * Graph geo lat lon: (graph.geo.ll) + * RMPOINTNLL1, count[int] + * RECORDS: 4 + 4 + 4 = 12 + * node[uint];4 + * lat[float];4 + * lon[float];4 + * + */ + + public static class LA + { + public static bool Bit(byte[] ba, byte byteNo, byte bit) + { + return (ba[byteNo] & (byte)Math.Pow(2,bit)) > 0; + } + public static bool Byt(byte[] ba, byte byteNo, byte byt) + { + return (ba[byteNo] & byt) > 0; + } + } + + /// + /// Òî÷êà XY + /// + [Serializable] + public class PointF + { + [XmlAttribute("x")] + public float X; + + [XmlAttribute("y")] + public float Y; + public PointF() + { + this.X = 0; + this.Y = 0; + } + public PointF(float X, float Y) + { + this.X = X; + this.Y = Y; + } + public override string ToString() + { + return "X = " + X.ToString() + " Y = " + Y.ToString(); + } + public float Lat { get { return Y; } } + public float Lon { get { return X; } } + } + + /// + /// Òî÷êà XY ñ ïðèâÿçêîé ê ëèíèè è óçëó + /// (èñï-ñÿ äëÿ îïèñàíèÿ ìàðøðóòà) + /// + [Serializable] + public class PointFL : PointF + { + [XmlAttribute("s")] + public float speed; + + // + /// Íîìåð ëèíèè, íà êîòîðîì íàõîäèòñÿ òî÷êà + /// + [XmlAttribute("l")] + public uint line; + /// + /// Íîìåð óçëà, ñ êîòîðîãî íà÷èíàåòñÿ ïîëèëèíèÿ + /// (óêàçûâàåò íà ñúåçä ñ îäíîé ëèíèè íà äðóãóþ) + /// + [XmlAttribute("n")] + public uint node; + + public PointFL():base() + { + this.node = 0; + this.line = 0; + this.speed = 60; + } + /// + /// Ñîäàíèå òî÷êè ñ ïðèâÿçêîé + /// + /// Êîîðäèíàòû òî÷êè + /// Íîìåð ëèíèè + /// Íîìåð óçëà + public PointFL(PointF point, uint node, uint line): base(point.X,point.Y) + { + this.X = point.X; + this.Y = point.Y; + this.node = node; + this.line = line; + this.speed = 60; + } + /// + /// Ñîäàíèå òî÷êè ñ ïðèâÿçêîé + /// + /// Êîîðäèíàòû òî÷êè + /// Íîìåð ëèíèè + /// Íîìåð óçëà + public PointFL(PointF point, uint node, uint line, float speed) + : base(point.X, point.Y) + { + this.X = point.X; + this.Y = point.Y; + this.node = node; + this.line = line; + this.speed = speed; + } + public override string ToString() + { + return "X = " + X.ToString() + "; Y = " + Y.ToString() + "; N = " + node.ToString() + "; L = " + line.ToString(); + } + public float Lat { get { return Y; } } + public float Lon { get { return X; } } + } + + #if SERVER + + /// + /// Ðåçóëüòàò ðàñ÷åòà ìàðøðóòà + /// + [Serializable] + public struct RouteResult + { + /// + /// Îöåíêà ìàðøðóòà + /// + public float cost; + /// + /// Äëèíà ìàðøðóòà (ì) + /// + public float length; + /// + /// Âðåìÿ â ïóòè (ì) + /// + public float time; + /// + /// Óçåë ñòàðòà + /// + public uint nodeStart; + /// + /// Ïðîìåæóòî÷íûå óçëû + /// + [XmlArrayItem("n")] + public uint[] nodes; + /// + /// Óçåë ôèíèøà + /// + public uint nodeEnd; + /// + /// Ëèíèè äâèæåíèÿ (ðåáðà) + /// + [XmlArrayItem("l")] + public uint[] lines; + /// + /// Âåêòîð ïåðåìåùåíèÿ + /// + [XmlArrayItem("p")] + public PointFL[] vector; + + /// + /// Óðåçàí ëè ðàçâîðîò âíà÷àëå + /// + public bool shrinkStart; + + /// + /// Óðåçàí ëè ðàçâîðîò â êîíöå + /// + public bool shrinkEnd; + + public float shrinkStartLength; + public float shrinkStartTime; + public float shrinkStartCost; + public float shrinkEndLength; + public float shrinkEndTime; + public float shrinkEndCost; + } + + /// + /// Ðåçóëüòàò ðàñ÷åòà ìàðøðóòà âìåñòå ñ + /// îöåíêàìè, ðàññòîÿíèÿìè è âðåìåíàìè äëÿ ñîõðàíåíèÿ + /// + [Serializable] + public struct RouteResultStored + { + /// + /// ID ðåãèîíà + /// + [XmlElement("region")] + public int Region; + + /// + /// Ìàðøðóò + /// + [XmlElement("route")] + public RouteResult route; + /// + /// Ðàññòîÿíèÿ äëÿ âñåõ óçëîâ ìàðøðóòà, + /// âêëþ÷àÿ ïåðâûé è ïîñëåäíèé + /// + [XmlArray("distances")] + [XmlArrayItem("d")] + public float[] distances; + /// + /// Âðåìåíà ïðîõîæäåíèÿ âñåõ óçëîâ ìàðøðóòà, + /// âêëþ÷àÿ ïåðâûé è ïîñëåäíèé + /// + [XmlArray("times")] + [XmlArrayItem("t")] + public float[] times; + /// + /// Îöåíêè ïðîõîæäåíèÿ âñåõ óçëîâ ìàðøðóòà, + /// âêëþ÷àÿ ïåðâûé è ïîñëåäíèé + /// + [XmlArray("costs")] + [XmlArrayItem("c")] + public float[] costs; + + public RouteResultStored(RouteResult route, float[] distances, float[] times, float[] costs) + { + this.Region = 0; + this.route = route; + this.distances = distances; + this.times = times; + this.costs = costs; + } + + public RouteResultStored(RouteResult route, float[] distances, float[] times, float[] costs, int region) + { + this.Region = region; + this.route = route; + this.distances = distances; + this.times = times; + this.costs = costs; + } + } + + #endif + + /// + /// Îïèñàíèå ìàðøðóòà + /// + [Serializable] + public struct RDPoint + { + public float Lat; + public float Lon; + public float dist; + public float time; + public string name; + public string[] instructions; + + public override string ToString() + { + string result = String.Format("{0} {1}; {2} ìèí\r\n", this.Lat.ToString().Replace(",", "."), this.Lon.ToString().Replace(",", "."), this.time.ToString("0")); + if (this.name != "") result += String.Format("\t{0}\r\n", this.name); + + string ins1 = this.name; + if ((this.instructions != null) && (this.instructions.Length > 0)) + ins1 = this.instructions[0]; + result += String.Format("\t{0} êì. {1}\r\n", (this.dist / 1000).ToString("0.00").Replace(",", "."), ins1); + + if (this.instructions != null) + for (int x = 1; x < this.instructions.Length; x++) + result += String.Format("\t{0}\r\n", this.instructions[x]); + + return result.Substring(0, result.Length - 2); + } + } + + + + /// + /// Àáñòðàêòíûé êëàññ êîîðäèíàò îáúåêòà + /// + [Serializable] + [ComVisible(true)] + public abstract class XYO + { + [XmlAttribute()] + public double lat = 0; + [XmlAttribute()] + public double lon = 0; + + public XYO() {} + + public XYO(double lat, double lon) + { + this.lat = lat; + this.lon = lon; + } + } + + #if SERVER // òîëüêî äëÿ ñåðâåðà + + /// + /// Ðåçóëüòàò ïîèñêà ñòàðòîâîé/êîíå÷íîé òî÷êè ïî êîîðäèíàòàì + /// + public class FindStartStopResult + { + /// + /// Âåêòîð îò òî÷êè äî óçëà êîíöà ëèíèè (äëÿ end - íà÷àëà) + /// + public PointF[] normal; + + /// + /// Âåêòîð îò òî÷êè äî óçëà íà÷àëà ëèíèè (äëÿ end - êîíöà) + /// + public PointF[] revers; + + /// + /// ðàññòîÿíèå îò òî÷êè äî ëèíèè + /// + public float distToLine; + + /// + /// ðàññòîÿíèå îò òî÷êè äî óçëà êîíöà ëèíèè (äëÿ end - íà÷àëà) + /// + public float distToN; + + /// + /// ðàññòîÿíèå îò òî÷êè äî óçëà íà÷àëà ëèíèè (äëÿ end - êîíöà) + /// + public float distToR; + + /// + /// áëèæàéøàÿ ëèíèÿ + /// + public uint line; + + /// + /// Ñòàðòîâûé óçåë (start - normal - last_point; end - normal - first_point) + /// + public uint nodeN; + + /// + /// Íîìåð óçëà íà äðóãîì êîíöå ëèíèè + /// + public uint nodeR; + + public override string ToString() + { + return " N" + nodeN.ToString() + ", " + distToN.ToString() + " ì, L" + line.ToString(); + } + } + + /// + /// Îïòèìèçèðîâàòü ìàðøðóò ïî + /// + public enum MinimizeBy : byte + { + /// + /// Ïî îöåíêå (èñï-ñÿ òîëüêî äëÿ Äåéñòðû) + /// + Cost = 0, + + /// + /// Ïî ðàññòîÿíèþ + /// + Dist = 1, + + /// + /// Ïî âðåìåíè + /// + Time = 2 + } + + //// /// // / // /// //// /// // / // /// //// + //// /// // / // /// //// /// // / // /// //// + //// /// // / // /// //// /// // / // /// //// + + /// + /// Òî÷êà ñòûêîâêè ìåæðàéîííûõ ìàðøðóòîâ + /// + [Serializable] + public struct TRGNode + { + /// + /// Èäåíòèôèêàòîð ìåæðàéîííîãî óçëà + /// + [XmlAttribute("id")] + public int id; + + /// + /// Íîìåð óçëà â ãðàôå + /// + [XmlAttribute("node")] + public uint node; + + /// + /// Òî÷êà ïîääåðæèâàåò âõîä èç äðóãèõ ðåãèîíîâ + /// + [XmlAttribute("in")] + public bool inner; + + /// + /// Òî÷êà ïîääåðæèâàåò âûõîä â äðóãèå ðåãèîíû + /// + [XmlAttribute("out")] + public bool outer; + + /// + /// Êàê õðàíèòñÿ â DBF ïîëå + /// + [XmlAttribute("labal")] + public string label; + + /// + /// Íîìåð ðåãèîíà + /// + [XmlAttribute("region")] + public int region; + + /// + /// Lat + /// + [XmlAttribute("lat")] + public float lat; + + /// + /// Lon + /// + [XmlAttribute("lon")] + public float lon; + + /// + /// Ññûëêè íà èäåíòèôèêàòîðû äðóãèõ ìåæðàéîííûõ óçëîâ, â êîòîðûå ìîæíî äîáðàòüñÿ + /// + [XmlArrayItem("l")] + public int[] links; + + /// + /// Îöåíêè äî äðóãèõ ìåæðàéîííûõ óçëîâ, â êîòîðûå ìîæíî äîáðàòüñÿ + /// + [XmlArrayItem("c")] + public float[] costs; + + /// + /// Äèñòàíöèÿ äî äðóãèõ ìåæðàéîííûõ óçëîâ, â êîòîðûå ìîæíî äîáðàòüñÿ + /// + [XmlArrayItem("d")] + public float[] dists; + + /// + /// Âðåìÿ äî äðóãèõ ìåæðàéîííûõ óçëîâ, â êîòîðûå ìîæíî äîáðàòüñÿ + /// + [XmlArrayItem("t")] + public float[] times; + + public TRGNode(uint node, bool inner, bool outer, int id, string label, float lat, float lon) + { + this.node = node; + this.inner = inner; + this.outer = outer; + this.id = id; + this.label = label; + + this.lat = lat; + this.lon = lon; + + this.region = 0; + this.links = null; + this.costs = null; + this.dists = null; + this.times = null; + } + } + + [Serializable] + public class AdditionalInformation + { + public int regionID = 0; + + public double minX = 0; + public double minY = 0; + public double maxX = 0; + public double maxY = 0; + + public string TestMap = null; + public string RegionName = null; + public string SourceType = null; + public string ConvertedWith = null; + + [XmlIgnore] + public double centerX + { + get + { + return (minX + maxX) / 2; + } + } + + [XmlIgnore] + public double centerY + { + get + { + return (minY + maxY) / 2; + } + } + } + + /// + /// BitParser Line Flags + /// + public struct TLineFlags + { + private byte flag; + private uint node0; + private uint node1; + + public TLineFlags(byte flagByte, uint node0, uint node1) + { + this.flag = flagByte; + this.node0 = node0; + this.node1 = node1; + } + + public uint Node0 { get { return node0; } } + public uint Node1 { get { return node1; } } + + /// + /// Îäíîñòîðîííåå ëè äâèæåíèå ïî îòðåçêó + /// + public bool IsOneWay { get { return (flag & 1) == 1; } } + + /// + /// Êðóãîâîå äâèæåíèå + /// + public bool IsRoundAbout { get { return (flag & 2) == 2; } } + + /// + /// Ïðîêîäèðîâàíî TMC + /// + public bool IsTMC { get { return (flag & 4) == 4; } } + + /// + /// Åñòü àòðèáóòû + /// + public bool HasAttributes { get { return (flag & 8) == 8; } } + + public override string ToString() + { + string s = ""; + s += (s.Length > 0 ? " " : "") + (IsOneWay ? "OneWay" : ""); + s += (s.Length > 0 ? " " : "") + (IsRoundAbout ? "RoundAbout" : ""); + s += (s.Length > 0 ? " " : "") + (IsTMC ? "TMC" : ""); + s += (s.Length > 0 ? " " : "") + (HasAttributes ? "ATTR" : ""); + return s; + } + } + + public class Utils + { + // Ðàññ÷åò ðàññòîÿíèÿ + #region LENGTH + public static float GetLengthMeters(double StartLat, double StartLong, double EndLat, double EndLong, bool radians) + { + // use fastest + float result = (float)GetLengthMetersD(StartLat, StartLong, EndLat, EndLong, radians); + + if (float.IsNaN(result)) + { + result = (float)GetLengthMetersC(StartLat, StartLong, EndLat, EndLong, radians); + if (float.IsNaN(result)) + { + result = (float)GetLengthMetersE(StartLat, StartLong, EndLat, EndLong, radians); + if (float.IsNaN(result)) + result = 0; + }; + }; + + return result; + } + + // Slower + public static uint GetLengthMetersA(double StartLat, double StartLong, double EndLat, double EndLong, bool radians) + { + double D2R = Math.PI / 180; // Ïðåîáðàçîâàíèå ãðàäóñîâ â ðàäèàíû + + double a = 6378137.0000; // WGS-84 Equatorial Radius (a) + double f = 1 / 298.257223563; // WGS-84 Flattening (f) + double b = (1 - f) * a; // WGS-84 Polar Radius + double e2 = (2 - f) * f; // WGS-84 Êâàäðàò ýêñöåíòðè÷íîñòè ýëëèïñîèäà // 1-(b/a)^2 + + // Ïåðåìåííûå, èñïîëüçóåìûå äëÿ âû÷èñëåíèÿ ñìåùåíèÿ è ðàññòîÿíèÿ + double fPhimean; // Ñðåäíÿÿ øèðîòà + double fdLambda; // Ðàçíèöà ìåæäó äâóìÿ çíà÷åíèÿìè äîëãîòû + double fdPhi; // Ðàçíèöà ìåæäó äâóìÿ çíà÷åíèÿìè øèðîòû + double fAlpha; // Ñìåùåíèå + double fRho; // Ìåðèäèàíñêèé ðàäèóñ êðèâèçíû + double fNu; // Ïîïåðå÷íûé ðàäèóñ êðèâèçíû + double fR; // Ðàäèóñ ñôåðû Çåìëè + double fz; // Óãëîâîå ðàññòîÿíèå îò öåíòðà ñôåðîèäà + double fTemp; // Âðåìåííàÿ ïåðåìåííàÿ, èñïîëüçóþùàÿñÿ â âû÷èñëåíèÿõ + + // Âû÷èñëÿåì ðàçíèöó ìåæäó äâóìÿ äîëãîòàìè è øèðîòàìè è ïîëó÷àåì ñðåäíþþ øèðîòó + // ïðåäïîëîæèòåëüíî ÷òî ðàññòîÿíèå ìåæäó òî÷êàìè << ðàäèóñà çåìëè + if (!radians) + { + fdLambda = (StartLong - EndLong) * D2R; + fdPhi = (StartLat - EndLat) * D2R; + fPhimean = ((StartLat + EndLat) / 2) * D2R; + } + else + { + fdLambda = StartLong - EndLong; + fdPhi = StartLat - EndLat; + fPhimean = (StartLat + EndLat) / 2; + }; + + // Âû÷èñëÿåì ìåðèäèàííûå è ïîïåðå÷íûå ðàäèóñû êðèâèçíû ñðåäíåé øèðîòû + fTemp = 1 - e2 * (sqr(Math.Sin(fPhimean))); + fRho = (a * (1 - e2)) / Math.Pow(fTemp, 1.5); + fNu = a / (Math.Sqrt(1 - e2 * (Math.Sin(fPhimean) * Math.Sin(fPhimean)))); + + // Âû÷èñëÿåì óãëîâîå ðàññòîÿíèå + if (!radians) + { + fz = Math.Sqrt(sqr(Math.Sin(fdPhi / 2.0)) + Math.Cos(EndLat * D2R) * Math.Cos(StartLat * D2R) * sqr(Math.Sin(fdLambda / 2.0))); + } + else + { + fz = Math.Sqrt(sqr(Math.Sin(fdPhi / 2.0)) + Math.Cos(EndLat) * Math.Cos(StartLat) * sqr(Math.Sin(fdLambda / 2.0))); + }; + fz = 2 * Math.Asin(fz); + + // Âû÷èñëÿåì ñìåùåíèå + if (!radians) + { + fAlpha = Math.Cos(EndLat * D2R) * Math.Sin(fdLambda) * 1 / Math.Sin(fz); + } + else + { + fAlpha = Math.Cos(EndLat) * Math.Sin(fdLambda) * 1 / Math.Sin(fz); + }; + fAlpha = Math.Asin(fAlpha); + + // Âû÷èñëÿåì ðàäèóñ Çåìëè + fR = (fRho * fNu) / (fRho * sqr(Math.Sin(fAlpha)) + fNu * sqr(Math.Cos(fAlpha))); + // Ïîëó÷àåì ðàññòîÿíèå + return (uint)Math.Round(Math.Abs(fz * fR)); + } + // Slowest + public static uint GetLengthMetersB(double StartLat, double StartLong, double EndLat, double EndLong, bool radians) + { + double fPhimean, fdLambda, fdPhi, fAlpha, fRho, fNu, fR, fz, fTemp, Distance, + D2R = Math.PI / 180, + a = 6378137.0, + e2 = 0.006739496742337; + if (radians) D2R = 1; + + fdLambda = (StartLong - EndLong) * D2R; + fdPhi = (StartLat - EndLat) * D2R; + fPhimean = (StartLat + EndLat) / 2.0 * D2R; + + fTemp = 1 - e2 * Math.Pow(Math.Sin(fPhimean), 2); + fRho = a * (1 - e2) / Math.Pow(fTemp, 1.5); + fNu = a / Math.Sqrt(1 - e2 * Math.Sin(fPhimean) * Math.Sin(fPhimean)); + + fz = 2 * Math.Asin(Math.Sqrt(Math.Pow(Math.Sin(fdPhi / 2.0), 2) + + Math.Cos(EndLat * D2R) * Math.Cos(StartLat * D2R) * Math.Pow(Math.Sin(fdLambda / 2.0), 2))); + fAlpha = Math.Asin(Math.Cos(EndLat * D2R) * Math.Sin(fdLambda) / Math.Sin(fz)); + fR = fRho * fNu / (fRho * Math.Pow(Math.Sin(fAlpha), 2) + fNu * Math.Pow(Math.Cos(fAlpha), 2)); + Distance = fz * fR; + + return (uint)Math.Round(Distance); + } + // Average + public static uint GetLengthMetersC(double StartLat, double StartLong, double EndLat, double EndLong, bool radians) + { + double D2R = Math.PI / 180; + if (radians) D2R = 1; + double dDistance = Double.MinValue; + double dLat1InRad = StartLat * D2R; + double dLong1InRad = StartLong * D2R; + double dLat2InRad = EndLat * D2R; + double dLong2InRad = EndLong * D2R; + + double dLongitude = dLong2InRad - dLong1InRad; + double dLatitude = dLat2InRad - dLat1InRad; + + // Intermediate result a. + double a = Math.Pow(Math.Sin(dLatitude / 2.0), 2.0) + + Math.Cos(dLat1InRad) * Math.Cos(dLat2InRad) * + Math.Pow(Math.Sin(dLongitude / 2.0), 2.0); + + // Intermediate result c (great circle distance in Radians). + double c = 2.0 * Math.Atan2(Math.Sqrt(a), Math.Sqrt(1.0 - a)); + + const double kEarthRadiusKms = 6378137.0000; + dDistance = kEarthRadiusKms * c; + + return (uint)Math.Round(dDistance); + } + // Fastest + public static double GetLengthMetersD(double sLat, double sLon, double eLat, double eLon, bool radians) + { + double EarthRadius = 6378137.0; + + double lon1 = radians ? sLon : DegToRad(sLon); + double lon2 = radians ? eLon : DegToRad(eLon); + double lat1 = radians ? sLat : DegToRad(sLat); + double lat2 = radians ? eLat : DegToRad(eLat); + + return EarthRadius * (Math.Acos(Math.Sin(lat1) * Math.Sin(lat2) + Math.Cos(lat1) * Math.Cos(lat2) * Math.Cos(lon1 - lon2))); + } + // Fastest + public static double GetLengthMetersE(double sLat, double sLon, double eLat, double eLon, bool radians) + { + double EarthRadius = 6378137.0; + + double lon1 = radians ? sLon : DegToRad(sLon); + double lon2 = radians ? eLon : DegToRad(eLon); + double lat1 = radians ? sLat : DegToRad(sLat); + double lat2 = radians ? eLat : DegToRad(eLat); + + /* This algorithm is called Sinnott's Formula */ + double dlon = (lon2) - (lon1); + double dlat = (lat2) - (lat1); + double a = Math.Pow(Math.Sin(dlat / 2), 2.0) + Math.Cos(lat1) * Math.Cos(lat2) * Math.Pow(Math.Sin(dlon / 2), 2.0); + double c = 2 * Math.Asin(Math.Sqrt(a)); + return EarthRadius * c; + } + private static double sqr(double val) + { + return val * val; + } + public static double DegToRad(double deg) + { + return (deg / 180.0 * Math.PI); + } + #endregion LENGTH + } + + /// + /// Çàäà÷à êîììèâîÿæåðà + /// + public class TSP + { + /////////// + /// + /// Ðåøåíèå çàäà÷è êîììèâîÿæåðà íà ïëîñêîñòè ðåêóðñèâíûì æàäíûì àëãîðèòìîì + /// ðàçìåðíîñòü ìàòðèöû N^2, ãäå N - ÷èñëî òî÷åê + /// ðåàëèçàöèÿ - Milok Zbrozek (c) milokz@gmail.com + /// + /// ìàòðèöà êðàò÷àéøèõ ðàññòîÿíèé + /// ÷èñëî óçëîâ â ìàòðèöå + /// íà÷àëüíûé óçåë ìàðøðóòà + /// êîíå÷íûé óçåë ìàðøðóòà + /// ïîñëåäîâàòåëüíûé ñïèñîê óçëîâ + // ** http://habrahabr.ru/post/151954/ + // ** http://math.semestr.ru/kom/index.php + // https://ru.wikipedia.org/wiki/%D0%97%D0%B0%D0%B4%D0%B0%D1%87%D0%B0_%D0%BA%D0%BE%D0%BC%D0%BC%D0%B8%D0%B2%D0%BE%D1%8F%D0%B6%D1%91%D1%80%D0%B0 + // http://mech.math.msu.su/~shvetz/54/inf/perl-problems/chCommisVoyageur.xhtml + // http://habrahabr.ru/post/151151/ + // http://habrahabr.ru/post/160167/ + public static int[] CalcTSP(float[,] ODmatrix, int length, int startIndex, int endIndex) + { + int nodes2go = length; // íóæíî ïðîåõàòü âñå óçëû ïî 1 ðàçó + + List nodes = new List(); // íàø ïóòåâîé ëèñò + nodes.Add(startIndex); // äîáàâëÿåì ïåðâóþ òî÷êó + nodes.Add(endIndex); // äîáàâëÿåì ïîñëåäíþþ òî÷êó + if (startIndex == endIndex) nodes2go++; // åñëè âîçâðàò â íà÷àëî, òî ýòîò óçåë ïîñåùàåì äâàæäû, ò.å. çàïèñåé â ïóòåâîì ëèñòå = length + 1 + + // âûñ÷èòûâàåì ñóììàðíîå ðàññòîÿíèå îò íà÷àëà è êîíöà äî êàæäîãî ïðîìåæóòî÷íîãî óçëà (ýâðèñòèêà) + float[] maxLength = new float[length]; + for (int eachNode = 0; eachNode < length; eachNode++) + if (!nodes.Contains(eachNode)) + for (int i = 0; i < nodes.Count; i++) + maxLength[eachNode] += ODmatrix[nodes[i], eachNode]; + + // íàõîäèì ñàìûé óäàëåííûé óçåë îò êðàéíèõ òî÷åê ìàðøðóòà + float maxVal = 0; + int _farestNode = 0; + for (int eachNode = 0; eachNode < length; eachNode++) + if (maxLength[eachNode] > maxVal) + { + maxVal = maxLength[eachNode]; + _farestNode = eachNode; + }; + nodes.Insert(1, _farestNode); // äîáàâëÿåì ñàìûé óäàëåííûé óçåë êàê ïðîìåæóòî÷íûé + + // äëÿ âñåõ îñòàëüíûõ óçëîâ + while (nodes.Count < nodes2go) + { + // âûñ÷èòûâàåì ñóììàðíîå ðàññòîÿíèå îò óæå äîáàâëåííûõ òî÷åê äî êàæäîãî íåäîáàâëåííîãî óçëà + for (int eachNode = 0; eachNode < length; eachNode++) maxLength[eachNode] = 0; + for (int eachNode = 0; eachNode < length; eachNode++) + if ((!nodes.Contains(eachNode))) + for (int i = 0; i < nodes.Count; i++) + maxLength[eachNode] += ODmatrix[nodes[i], eachNode]; + + // íàõîäèì ñàìûé óäàëåííûé óçåë + maxVal = 0; + _farestNode = 0; + for (int eachNode = 0; eachNode < length; eachNode++) + if (maxLength[eachNode] > maxVal) + { + maxVal = maxLength[eachNode]; + _farestNode = eachNode; + }; + + // äëÿ êàæäîãî íîâîãî ñàìîãî äàëüíåãî óçëà ïåðåáèðàåì âñå ð¸áðà + // òåêóùåãî ïîëó÷åííîãî ìàðøðóòà è âûáèðàåì èç íèõ òî ðåáðî, + // ðàçðûâ êîòîðîãî äàñò ìèíèìàëüíûé ïðèðîñò äëèíû + float[] lineLength = new float[nodes.Count - 1]; + for (int i = 1; i < nodes.Count; i++) + { + lineLength[i - 1] = + ODmatrix[nodes[i - 1], _farestNode] + ODmatrix[_farestNode, nodes[i]] - ODmatrix[nodes[i - 1], nodes[i]]; + }; + + // íàõîäèì ñàìîå ìàëåíüêîå ïðèðàùåíèå + float minVal = float.MaxValue; + int _i = 0; + for (int i = 0; i < lineLength.Length; i++) + if (lineLength[i] < minVal) + { + minVal = lineLength[i]; + _i = i; + }; + + nodes.Insert(_i + 1, _farestNode); // ðàçáèâàåì âûáðàííîå ðåáðî + }; + + return nodes.ToArray(); + } + + /// + /// Îïòèìèçèðîâàòü ìàðøðóò + /// (çàäà÷à êîììèâîÿæåðà) + /// + /// Ìàññèâ îáúåêòîâ ñ øèðîòîé/äîëãîòîé + public static void OptimizeWayRoute(XYO[] way) + { + if (way.Length < 4) return; + + // create matrix + int l = way.Length; + float[,] m = new float[l, l]; + + // fill matrix + for (int a = 0; a < l; a++) + for (int b = 0; b < l; b++) + if (a == b) + m[a, b] = -1; + else + m[a, b] = (float)Utils.GetLengthMeters(way[a].lat, way[a].lon, way[b].lat, way[b].lon, false); + + // calc TSP + int[] rt = CalcTSP(m, l, 0, l - 1); + + // reorder array + object[] reord = (object[])way.Clone(); + for (int i = 0; i < rt.Length; i++) + way[i] = (XYO)reord[rt[i]]; + } + } + + /// + /// ×èòàåò íàçâàíèÿ ëèíèé ïî íîìåðó èç ôàéëà + /// + public class LinesNamesFileReader + { + private string fileName; + public string FileName { get { return fileName; } } + private FileStream fs; + private List pos = new List(); + + public LinesNamesFileReader(string fileName) + { + this.fileName = fileName; + fs = new FileStream(fileName, FileMode.Open, FileAccess.Read); + byte[] ba = new byte[1024]; + int read = 0; + while ((read = fs.Read(ba, 0, ba.Length)) > 0) + { + string s = System.Text.Encoding.GetEncoding(1251).GetString(ba, 0, read); + s = s.Substring(0, s.IndexOf("\r\n")); + fs.Position = fs.Position - read + s.Length + 2; + pos.Add(fs.Position); + }; + } + + public string this[uint line] + { + get + { + fs.Position = pos[(int)line - 1]; + byte[] ba = new byte[1024]; + fs.Read(ba, 0, ba.Length); + string s = System.Text.Encoding.GetEncoding(1251).GetString(ba, 0, ba.Length); + return s.Substring(0, s.IndexOf("\r\n")).Split(new string[] { ";" }, StringSplitOptions.None)[0]; + } + } + + public string City(uint line) + { + fs.Position = pos[(int)line - 1]; + byte[] ba = new byte[1024]; + fs.Read(ba, 0, ba.Length); + string s = System.Text.Encoding.GetEncoding(1251).GetString(ba, 0, ba.Length); + string[] ss = s.Substring(0, s.IndexOf("\r\n")).Split(new string[] { ";" }, StringSplitOptions.None); + if (ss.Length > 1) + return ss[1]; + else + return ""; + } + + public void Close() + { + fs.Close(); + fs = null; + } + + ~LinesNamesFileReader() + { + if (fs != null) this.Close(); + } + + } + + /// + /// Óçåë ãðàôà + /// + public class TNode + { + /// + /// Èäåíòèôèêàòîð (íîìåð óçëà) (íóìåðàöèÿ ñ 1) + /// + public uint node; + /// + /// Øèðîòà â ãðàä + /// + public float lat; + /// + /// Äîëãîòà â ãðàä + /// + public float lon; + /// + /// Èñõîäÿùèå ñâÿçè (ðåáðà) + /// + public List links = new List(); + /// + /// Âõîäÿùèå ñâÿçè (ðåáðà) + /// + public List rlinks = new List(); + + /// + /// Ñîçäàåì óçåë + /// + /// Íîìåð + /// Øèðîòà + /// Äîëãîòà + public TNode(uint node, float lat, float lon) + { + this.node = node; + this.lat = lat; + this.lon = lon; + } + + /// + /// ×èñëî âûõîäÿùèõ ñâÿçåé (ðåáåð) + /// + public int Outs { get { return links.Count; } } + + /// + /// ×èñëî âõîäÿùèõ ñâÿçåé (ðåáåð) + /// + public int Ins { get { return rlinks.Count; } } + + /// + /// N Y X I O + /// + /// + public override string ToString() + { + return "{N" + node + "; Y" + lat.ToString() + " X" + lon.ToString() + " I" + Ins.ToString() + " O" + Outs.ToString() + "}"; + } + + /// + /// Äîáàâëÿåì èñõîäÿùóþ ñâÿçü (ðåáðî) + /// + /// óçåë + /// îöåíêà + /// ðàññòîÿíèå (ì) + /// âðåìÿ (ìèí) + /// ëèíèÿ + /// ëèíèÿ â îáðàòíóþ ñòîðîíó? + public void AddLink(uint node, float cost, float dist, float time, uint line, bool line_rev) + { + this.links.Add(new TLink(node, cost, dist, time, line, line_rev)); + } + + /// + /// Äîáàâëÿåì âõîäÿùóþ ñâÿçü (ðåáðî) + /// + /// óçåë + /// îöåíêà + /// ðàññòîÿíèå (ì) + /// âðåìÿ (ìèí) + /// ëèíèÿ + /// ëèíèÿ â îáðàòíóþ ñòîðîíó? + public void AddRLink(uint node, float cost, float dist, float time, uint line, bool line_rev) + { + this.rlinks.Add(new TLink(node, cost, dist, time, line, line_rev)); + } + + /// + /// Ñîðòèðîâùèê óçëîâ (äëÿ èíäåêñàöèè) + /// + public class Sorter : IComparer + { + private byte sortBy = 0; + private Sorter(byte sortBy) { this.sortBy = sortBy; } + + /// + /// Ñîðòèðóåì ïî èäåíòèôèêàòîðó + /// + /// + public static Sorter SortByNode() { return new Sorter(0); } + + /// + /// Ñîðòèðóåì ïî êîîðäèíàòàì + /// + /// + public static Sorter SortByLL() { return new Sorter(1); } + + /// + /// Ñîðòèðóåì äâà óýåëåìíòà ìàññèâà + /// + /// 1-ûé ýëåìåíò + /// 2-îé ýëåìåíò + /// + public int Compare(TNode a, TNode b) + { + if (sortBy == 0) return a.node.CompareTo(b.node); + + int res = a.lat.CompareTo(b.lat); + if (res == 0) res = a.lon.CompareTo(b.lon); + if (res == 0) res = a.node.CompareTo(b.node); + return res; + } + } + } + + /// + /// Óçåë ñ èíôîðìàöèåé î ðàññòîÿíèè + /// îò óêàçàííîé òî÷êè äî òåêóùåé + /// + public class TNodeD : TNode + { + /// + /// Ðàññòîÿíèå (ì) + /// + public float dist; + + public TNodeD(uint node, float lat, float lon, float dist) + : base(node, lat, lon) + { + this.dist = dist; + } + + public TNodeD(TNode node) + : base(node.node, node.lat, node.lon) + { + this.dist = 0; + } + + public TNodeD(TNode node, float dist) + : base(node.node, node.lat, node.lon) + { + this.dist = dist; + } + + public class DSorter : IComparer + { + public int Compare(TNodeD a, TNodeD b) + { + int res = a.dist.CompareTo(b.dist); + if (res == 0) res = a.node.CompareTo(b.node); + return res; + } + } + } + + /// + /// Ñâÿçü ìåæäó óçëàìè (ðåáðî) + /// + public class TLink + { + /// + /// óçåë ñâÿçè + /// + public uint node; + + /// + /// îöåíêà + /// + public float cost; + + /// + /// ðàññòîÿíèå (ì) + /// + public float dist; + + /// + /// âðåìÿ (ìèí) + /// + public float time; + + /// + /// ëèíèÿ + /// + public uint line; + + /// + /// ÷òîáû äîáðàòüñÿ â óêàçàííóþ òî÷êó íóæíî + /// ïðîåõàòü ïî ëèíèè â îáðàòíóþ ñòîðîíó + /// + public bool inverse_dir; + + /// + /// Ñîçäàåì ñâÿçü + /// + /// ñâÿçóþùèé óçåë + /// îöåíêà ïåðåäâèæåíèÿ + /// ðàññòîÿíèå â ì + /// âðåìÿ â ìèí + /// íîìåð ëèíèè + /// â îáðàòíîì íàïðàâëåíèè + public TLink(uint node, float cost, float dist, float time, uint line, bool inverse_dir) + { + this.node = node; + this.cost = cost; + this.dist = dist; + this.time = time; + this.line = line; + this.inverse_dir = inverse_dir; + } + + public override string ToString() + { + return node.ToString() + " " + dist.ToString() + "m " + time.ToString() + "min [line: " + line + (inverse_dir ? "R" : "") + "]"; + } + } + + + /// + /// Èíôîðìàöèÿ î ïîëÿõ shape ôàéëà + /// + [Serializable] + public class ShapeFields : XMLSaved + { + /// + /// Ïîëå óêàçûâàþùåå íà îäíîñòîðîííåå äâèæåíèå 0/1, + /// ïîëå íå ìîæåò áûòü ïóñòûì + /// + [XmlElement("OneWay")] + public string fldOneWay = "ONE_WAY"; + /// + /// Ïîëå ñ îãðàíè÷åíèåì ìàêñèìàëüíîé ñêîðîñòè (êì/÷), + /// ïîëå íå ìîæåò áûòü ïóñòûì + /// + [XmlElement("SpeedLimit")] + public string fldSpeedLimit = "SPD_LIMIT"; + /// + /// Ïîëå ñ îãðàíè÷åíèåì ìàêñèìàëüíîé ñêîðîñòè (êì/÷), + /// ïîëå íå ìîæåò áûòü ïóñòûì + /// + [XmlElement("RouteSpeed")] + public string fldRouteSpeed = null; + /// + /// Ïîëå ñ òèïîì ëèíèè, + /// ïîëå íå ìîæåò áûòü ïóñòûì + /// + [XmlElement("GarminType")] + public string fldGarminType = "GRMN_TYPE"; + /// + /// Ïîëå ñ èäåíòèôèêàòîðîì ëèíèè, + /// èñïîëüçóåòñÿ äëÿ çàïðåòîâ ïîâîðîòîâ, + /// ïîëå íå ìîæåò áûòü ïóñòûì + /// + [XmlElement("LinkId")] + public string fldLinkId = "LINK_ID"; + /// + /// Äëèíà ëèíèè â ìåòðàõ, + /// åñëè íå óêàçàíî, òî äëèíà ðàñ÷èòûâàåòñÿ + /// + [XmlElement("Length")] + public string fldLength = "LEN"; + /// + /// Format: L0000;F0000; + /// F0000 - from first line point to link_id 0000 + /// L0000 - from last line point to link_id 0000 + /// + [XmlElement("TurnRestrictions")] + public string fldTurnRstr = "TURN_RSTRS"; + /// + /// Êîäèðîâêà DBF ôàéëà (1251/1252/866) + /// + [XmlElement("CodePageId")] + public int CodePageId = 1251; + /// + /// Èíâåðñèðîâàòü ëè øèðîòó ( Lat = -1*Lat ) + /// + [XmlElement("InverseLat")] + public bool InverseLat = false; + /// + /// Èíâåðñèðîâàòü ëè äîëãîòó ( Lon = -1*Lon ) + /// + [XmlElement("InverseLon")] + public bool InverseLon = false; + /// + /// Ïîëå ñ èíôîðìàöèåé î TMC êîäå + /// @E0+000+00000;@E0-000-00000; + /// @E0+000+00000 or @E0-000-00000 (TMC ñîíàïðàâëåí ñ ëèíèåé) + /// @E0+000-00000 or @E0-000+00000 (ÒÌÑ ïðîòèâîïîëîæåííî íàïðàâëåí ëèíèè) + /// Max TMC no: 65535 (2 bytes) + /// + [XmlElement("TMC")] + public string fldTMC = null; + /// + /// Ïîëå ñ àòðèáóòàìè ëèíèè + /// + [XmlElement("ACC_MASK")] + public string fldACCMask = null; + + /// + /// Ïîëå ñ ïëàòíîé äîðîãîé + /// + [XmlElement("TOLL_ROAD")] + public string fldTollRoad = null; + + /// + /// Ïîëå ñ òîííåëåì äîðîãîé + /// + [XmlElement("IS_TUNNEL")] + public string fldIsTunnel = null; + /// + /// Ïîëå ñ àòðèáóòàìè ëèíèè + /// + [XmlElement("ATTR")] + public string fldAttr = null; + + /// + /// Îãðàíè÷åíèå ìàññû, â òîííàõ + /// + [XmlElement("MaxWeight")] + public string fldMaxWeight = null; + /// + /// Ìàêñèìàëüíàÿ íàãðóçêà íà îñü, â òîííàõ + /// + [XmlElement("MaxAxle")] + public string fldMaxAxle = null; + /// + /// Îãðàíè÷åíèå âûñîòû â ìåòðàõ + /// + [XmlElement("MaxHeight")] + public string fldMaxHeight = null; + /// + /// Îãðàíè÷åíèå øèðèíû â ìåòðàõ + /// + [XmlElement("MaxWidth")] + public string fldMaxWidth = null; + /// + /// Îãðàíè÷åíèå äëèíû â ìåòðàõ + /// + [XmlElement("MaxLength")] + public string fldMaxLength = null; + /// + /// Ìèíèìàëüíàÿ äèñòàíöèÿ â ìåòðàõ + /// + [XmlElement("MinDistance")] + public string fldMinDistance = null; + /// + /// Route Level + /// + [XmlElement("RouteLevel")] + public string fldRouteLevel = ""; + + /// + /// Ïîëå ñ íîìåðîì òî÷êè ñòûêîâêè ìåæðàéîííûõ ìàðøðóòîâ + /// ôîðìàò: F0001IO / L0002I / F0003O; + /// I (In) - ÷åðåç ýòîò óçåë ìîæíî âúåõàòü â ðåãèîí; + /// O (out) - ÷åðåç ýòîò óçåë ìîæíî âûåõàòü èç ðåãèîíà + /// + [XmlElement("RGNODE")] + public string fldRGNODE = null; + /// + /// Ïîëå ñ íàèìåíîâàíèåì ëèíèè + /// + [XmlElement("NAME")] + public string fldName = null; + + ///////// OSM ////// + [XmlElement("SOURCE")] + public string SOURCE = "GARMIN"; + [XmlElement("OSM_ID")] + public string fldOSM_ID = "OSM_ID"; + [XmlElement("OSM_TYPE")] + public string fldOSM_TYPE = "OSM_TYPE"; + [XmlElement("OSM_SURFACE")] + public string fldOSM_SURFACE = "OSM_SURFACE"; + + [XmlElement("OSM.ADDIT_DBF.NODES")] + public string fldOSM_ADDIT_DBF_NODES = null; + [XmlElement("OSM.ADDIT_DBF.NOTURN")] + public string fldOSM_ADDIT_DBF_NOTURN = null; + [XmlElement("OSM.ADDIT.SERVICE")] + public string fldOSM_ADDIT_SERVICE = null; + [XmlElement("OSM.ADDIT.JUNCTION")] + public string fldOSM_ADDIT_JUNCTION = null; + [XmlElement("OSM.ADDIT.LANES")] + public string fldOSM_ADDIT_LANES = null; + [XmlElement("OSM.ADDIT.MAXACTUAL")] + public string fldOSM_ADDIT_MAXACTUAL = null; + [XmlElement("OSM.ADDIT.PROCESS_AGG")] + public bool fldOSM_ADDIT_PROCESSAGG = false; + + /// + /// Îáîçíà÷åíû ëè çàïðåòû ïîâîðîòîâ + /// + public bool NoTurnRestrictions { get { return (fldTurnRstr == null) || (fldTurnRstr == String.Empty); } } + + /// + /// Êîäèðîâêà DBF ôàéëà + /// + public System.Text.Encoding CodePage { get { return System.Text.Encoding.GetEncoding(CodePageId); } } + } + + #endif +} diff --git a/SOLVER/dkxce.Route.Classes/dkxce.Route.Classes.csproj b/SOLVER/dkxce.Route.Classes/dkxce.Route.Classes.csproj new file mode 100644 index 0000000..1ae7c4a --- /dev/null +++ b/SOLVER/dkxce.Route.Classes/dkxce.Route.Classes.csproj @@ -0,0 +1,48 @@ + + + Debug + AnyCPU + 8.0.50727 + 2.0 + {EC4656C9-C870-40B0-A393-3D96A13BE134} + Library + Properties + dkxce.Route.Classes + dkxce.Route.Classes + + + true + full + false + ..\..\READY\MAIN_DLLs\ + DEBUG;TRACE + prompt + 4 + + + pdbonly + true + ..\..\READY\MAIN_DLLs\ + TRACE + prompt + 4 + + + + + + + + + + + + + + \ No newline at end of file diff --git a/SOLVER/dkxce.Route.Classes/obj/Debug/dkxce.Route.Classes.dll b/SOLVER/dkxce.Route.Classes/obj/Debug/dkxce.Route.Classes.dll new file mode 100644 index 0000000000000000000000000000000000000000..eb131086868362c320514fc9b7ba7c6ffae68029 GIT binary patch literal 32768 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 M9;kZY59NXX32ukJd;kCd literal 0 HcmV?d00001 diff --git a/SOLVER/dkxce.Route.Classes/obj/Debug/dkxce.Route.Classes.pdb b/SOLVER/dkxce.Route.Classes/obj/Debug/dkxce.Route.Classes.pdb new file mode 100644 index 0000000000000000000000000000000000000000..4b5a9b5eb9f1e3d7901e8a13ca2591bdacfc0353 GIT binary patch literal 46592 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
`1VZytBCIMiuq%z8`(t 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 literal 0 HcmV?d00001 diff --git a/SOLVER/dkxce.Route.Classes/obj/Release/ResolveAssemblyReference.cache b/SOLVER/dkxce.Route.Classes/obj/Release/ResolveAssemblyReference.cache new file mode 100644 index 0000000000000000000000000000000000000000..f50e37ee90af7b4151507d5858d4ffe8100432e0 GIT binary patch literal 3766 zcmeHJTXWk)6qamRmJ~Nm+v(6kVM5y%nv5K$1egvP#&I2RiIZTPOgc?Rv$j^w(zUju zl{2_6@Cg5gH+~0~2MP}qp19;clyelxksD9bl($Sa@zEY@_w2cR-&rfFqA1T`;1fq7 z17f?ux`B|w3+wmRV9AfU@W9fSel^Rt_S4rkp@ z>98#xQh&L#aLZfr-uKF7cWHs#A~`(f?TOay)=-AD-wH`cah2&YP9rUQ_289V6`a#< z2p&lL6C!s*(%}^SHM1Zz6fazwhXvM}Anq#Zh9bzv;TToXe?$Tr%%IV#aOq|s_Lxfp z1HWjo$5exeq`pP?fJ#NlW|drS%9wOkJ+XCTg3t9M_V+*g;3FNqvZg?q8j2i<8JuAj zbbNcwws+vaS*zT+x6`Q9*PT0SYjS71vDPAc)U{pCXK+`PHViU{V(!>9&#fjY#^VZ{ z$gm+?<}vCPh?KP7;lp*(rv;ZjqP|Q0E~By_yCe*0fP1B)Y5KYO=MQS_LN;Byk}^^I zGNe9Y2g_xjWW)UjxCK9dy|#b%z3-lUV;Z2CCJGBg4%HL;Fim9IKZD3t7%;z=Ro{v$ z*Q8#Iwy{VeykWKU0*IBQ2q|)u?Q+>(T(TFB=Z8PwJdcq?wTn=E;z-PMu-%+SQ3P=w zbAm%dCyxmRL&!N;W6K#)w|F>>SX^*on%8|#m<|$Tg-B{RF@L5V#C3)DM8Lw`{^fCX zRRmSxhk@W197wV7dw3l1X_K(vQeq>bO~^Wovv8<8tDN*?F*0=Q}l0Jq6>IOgoD?Ye#xB1b~|@MZmp{U6J~gaguOjnb3RXP|mU z0zk_=59(L&(Jz3gVf(yYDwP_yOY4=bdUd1WY&JLU)~fAR$!TtU-mbNrkLzux6t$Jo zsI8O|gV>;6i0ulm!OZuMcebv)`}A8C+ZNt|czdNs5g|Ih6rnnCDY`bk6kVLObm~9hNz~T> literal 0 HcmV?d00001 diff --git a/SOLVER/dkxce.Route.Classes/obj/Release/dkxce.Route.Classes.dll b/SOLVER/dkxce.Route.Classes/obj/Release/dkxce.Route.Classes.dll new file mode 100644 index 0000000000000000000000000000000000000000..ccd28124dc947293e7cb31e1d5b7f4dfcae3d784 GIT binary patch literal 28672 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%0DN5T$jsP9Xe$9#H1Rf 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 YWe=1+Q1(FC17#1CJy7<*|C1j0pAnfhng9R* literal 0 HcmV?d00001 diff --git a/SOLVER/dkxce.Route.Classes/obj/Release/dkxce.Route.Classes.pdb b/SOLVER/dkxce.Route.Classes/obj/Release/dkxce.Route.Classes.pdb new file mode 100644 index 0000000000000000000000000000000000000000..5d2dac236d7b762b1e52be6dc0a15039490cb559 GIT binary patch literal 42496 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 a5xM#!;y%uNyakT8!0{G1-U9EG7WfZcQWfd| literal 0 HcmV?d00001 diff --git a/SOLVER/dkxce.Route.Classes/obj/dkxce.Route.Classes.csproj.FileList.txt b/SOLVER/dkxce.Route.Classes/obj/dkxce.Route.Classes.csproj.FileList.txt new file mode 100644 index 0000000..5cad706 --- /dev/null +++ b/SOLVER/dkxce.Route.Classes/obj/dkxce.Route.Classes.csproj.FileList.txt @@ -0,0 +1,5 @@ +obj\Debug\ResolveAssemblyReference.cache +bin\Debug\dkxce.Route.Classes.dll +bin\Debug\dkxce.Route.Classes.pdb +obj\Debug\dkxce.Route.Classes.dll +obj\Debug\dkxce.Route.Classes.pdb diff --git a/SOLVER/dkxce.Route.Classes/obj/dkxce.Route.Classes.csproj.FileListAbsolute.txt b/SOLVER/dkxce.Route.Classes/obj/dkxce.Route.Classes.csproj.FileListAbsolute.txt new file mode 100644 index 0000000..c847285 --- /dev/null +++ b/SOLVER/dkxce.Route.Classes/obj/dkxce.Route.Classes.csproj.FileListAbsolute.txt @@ -0,0 +1,30 @@ +D:\Projects\projects.c# III\_GRAPH_SOLUTION\dkxce.Route.Classes\bin\Debug\dkxce.Route.Classes.dll +D:\Projects\projects.c# III\_GRAPH_SOLUTION\dkxce.Route.Classes\bin\Debug\dkxce.Route.Classes.pdb +D:\Projects\projects.c# III\_GRAPH_SOLUTION\dkxce.Route.Classes\obj\Debug\ResolveAssemblyReference.cache +D:\Projects\projects.c# III\_GRAPH_SOLUTION\dkxce.Route.Classes\obj\Debug\dkxce.Route.Classes.dll +D:\Projects\projects.c# III\_GRAPH_SOLUTION\dkxce.Route.Classes\obj\Debug\dkxce.Route.Classes.pdb +D:\Projects\projects.cs.III\_GRAPH_SOLUTION\dkxce.Route.Classes\bin\Debug\dkxce.Route.Classes.dll +D:\Projects\projects.cs.III\_GRAPH_SOLUTION\dkxce.Route.Classes\bin\Debug\dkxce.Route.Classes.pdb +D:\Projects\projects.cs.III\_GRAPH_SOLUTION\dkxce.Route.Classes\obj\Debug\ResolveAssemblyReference.cache +D:\Projects\projects.cs.III\_GRAPH_SOLUTION\dkxce.Route.Classes\obj\Debug\dkxce.Route.Classes.dll +D:\Projects\projects.cs.III\_GRAPH_SOLUTION\dkxce.Route.Classes\obj\Debug\dkxce.Route.Classes.pdb +C:\PROJECTS\CSharp_Navicom\ADDR_SEARCH\_GRAPH_SOLUTION\dkxce.Route.Classes\bin\Debug\dkxce.Route.Classes.dll +C:\PROJECTS\CSharp_Navicom\ADDR_SEARCH\_GRAPH_SOLUTION\dkxce.Route.Classes\bin\Debug\dkxce.Route.Classes.pdb +C:\PROJECTS\CSharp_Navicom\ADDR_SEARCH\_GRAPH_SOLUTION\dkxce.Route.Classes\obj\Debug\ResolveAssemblyReference.cache +C:\PROJECTS\CSharp_Navicom\ADDR_SEARCH\_GRAPH_SOLUTION\dkxce.Route.Classes\obj\Debug\dkxce.Route.Classes.dll +C:\PROJECTS\CSharp_Navicom\ADDR_SEARCH\_GRAPH_SOLUTION\dkxce.Route.Classes\obj\Debug\dkxce.Route.Classes.pdb +M:\NAVICOM_PROJECTS\_ROUTES_GIT_\SOLVER\READY\MapCreator\dkxce.Route.Classes.dll +M:\NAVICOM_PROJECTS\_ROUTES_GIT_\SOLVER\READY\MapCreator\dkxce.Route.Classes.pdb +M:\NAVICOM_PROJECTS\_ROUTES_GIT_\READY\MAIN_DLLs\dkxce.Route.Classes.dll +M:\NAVICOM_PROJECTS\_ROUTES_GIT_\READY\MAIN_DLLs\dkxce.Route.Classes.pdb +M:\NAVICOM_PROJECTS\_ROUTES_GIT_\SOLVER\dkxce.Route.Classes\obj\Debug\ResolveAssemblyReference.cache +M:\NAVICOM_PROJECTS\_ROUTES_GIT_\SOLVER\dkxce.Route.Classes\obj\Debug\dkxce.Route.Classes.dll +M:\NAVICOM_PROJECTS\_ROUTES_GIT_\SOLVER\dkxce.Route.Classes\obj\Debug\dkxce.Route.Classes.pdb +M:\NAVICOM_PROJECTS\_ROUTES_GIT_\SOLVER\dkxce.Route.Classes\obj\Release\ResolveAssemblyReference.cache +M:\NAVICOM_PROJECTS\_ROUTES_GIT_\SOLVER\dkxce.Route.Classes\obj\Release\dkxce.Route.Classes.dll +M:\NAVICOM_PROJECTS\_ROUTES_GIT_\SOLVER\dkxce.Route.Classes\obj\Release\dkxce.Route.Classes.pdb +M:\NAVICOM_PROJECTS\_ROUTES_PSOURCE_\READY\MAIN_DLLs\dkxce.Route.Classes.dll +M:\NAVICOM_PROJECTS\_ROUTES_PSOURCE_\READY\MAIN_DLLs\dkxce.Route.Classes.pdb +M:\NAVICOM_PROJECTS\_ROUTES_PSOURCE_\SOLVER\dkxce.Route.Classes\obj\Debug\ResolveAssemblyReference.cache +M:\NAVICOM_PROJECTS\_ROUTES_PSOURCE_\SOLVER\dkxce.Route.Classes\obj\Debug\dkxce.Route.Classes.dll +M:\NAVICOM_PROJECTS\_ROUTES_PSOURCE_\SOLVER\dkxce.Route.Classes\obj\Debug\dkxce.Route.Classes.pdb diff --git a/SOLVER/dkxce.Route.Classes/obj/dkxce.Route.Utils.csproj.FileList.txt b/SOLVER/dkxce.Route.Classes/obj/dkxce.Route.Utils.csproj.FileList.txt new file mode 100644 index 0000000..bc63624 --- /dev/null +++ b/SOLVER/dkxce.Route.Classes/obj/dkxce.Route.Utils.csproj.FileList.txt @@ -0,0 +1,5 @@ +obj\Debug\ResolveAssemblyReference.cache +bin\Debug\dkxce.Route.Utils.dll +bin\Debug\dkxce.Route.Utils.pdb +obj\Debug\dkxce.Route.Utils.dll +obj\Debug\dkxce.Route.Utils.pdb diff --git a/SOLVER/dkxce.Route.GSolver/Properties/AssemblyInfo.cs b/SOLVER/dkxce.Route.GSolver/Properties/AssemblyInfo.cs new file mode 100644 index 0000000..701cede --- /dev/null +++ b/SOLVER/dkxce.Route.GSolver/Properties/AssemblyInfo.cs @@ -0,0 +1,35 @@ +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +[assembly: AssemblyTitle("dkxce.Route.GSolver")] +[assembly: AssemblyDescription("Модуль Ð´Ð»Ñ Ñ€Ð°ÑÑчета маршрутов")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("Milok Zbrozek ")] +[assembly: AssemblyProduct("dkxce.Route.GSolver")] +[assembly: AssemblyCopyright("Copyright © Milok Zbrozek 2021")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// Setting ComVisible to false makes the types in this assembly not visible +// to COM components. If you need to access a type in this assembly from +// COM, set the ComVisible attribute to true on that type. +[assembly: ComVisible(false)] + +// The following GUID is for the ID of the typelib if this project is exposed to COM +[assembly: Guid("46f711aa-69eb-4fd6-b4cc-8d35f57c22a3")] + +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +// You can specify all the values or you can default the Revision and Build Numbers +// by using the '*' as shown below: +[assembly: AssemblyVersion("21.12.21.3")] +[assembly: AssemblyFileVersion("21.12.21.3")] diff --git a/SOLVER/dkxce.Route.GSolver/Route.GSolver.cs b/SOLVER/dkxce.Route.GSolver/Route.GSolver.cs new file mode 100644 index 0000000..844c507 --- /dev/null +++ b/SOLVER/dkxce.Route.GSolver/Route.GSolver.cs @@ -0,0 +1,3924 @@ +/* + * C# Class by Milok Zbrozek + * Ìîäóëü äëÿ ðàññ÷åòà ìàðøðóòîâ ïî ãðàôàì, + * èñïîëüçóÿ àëãîðèòìû Äåéêñòðû è A* + * â ïàìÿòè è ÷åðåç äèñêîâûå ôàéëû, + * ñ ïîääåðæêîé ðàñ÷åòà ñ ó÷åòîì òðàôèêà + * Author: Milok Zbrozek + * Âåðñèÿ: 211221DA + * + * Ïîääåðæèâàåò äîðîæíûå (GARMIN, OSM, OSM2SHP) è âîäíûå ãðàôû (WATER) + * + */ + +using System; +using System.IO; +using System.Collections; +using System.Collections.Generic; +using System.Text; +using System.Xml; +using System.Xml.Serialization; + +using dkxce.Route.Classes; + +namespace dkxce.Route.GSolver +{ + /// + /// Ìîäóëü ðàñ÷åòà ìàðøðóòîâ ãðàôà + /// ïî Àëãîðèòìàì Äåéêñòðû, Äåéêñòðû(reversed) è A* (A* rev) + /// + public class RMGraph + { + public const string _GSolver = "dkxce.Route.GSolver/21.12.23.3-V4-win32"; + + public class TMCJAMServerConfig + { + public int RegionID = 0; + public string Server = "127.0.0.1"; + public int Port = 7756; + } + + /// + /// Êîãäà ïîäãðóæàòü ñåãìåíòû ëèíèé â ïàìÿòü + /// + public enum SegmentsInMemoryPreLoad : byte + { + /// + /// Ñåãìåíòû ëèíèé çàãðóùàþòñÿ â ïàìÿòü + /// + inMemoryCalculations, + /// + /// Ñåãìåíòû ëèíèé íå çàãðóæàþòñÿ â ïàìÿòü, + /// à èäåò ðàáîòà ñ ôàéëîì íà äèñêå + /// + onDiskCalculations, + } + + + // çàãîëîâêè ôàéëîâ + private static byte[] header_RMGRAF2 = new byte[] { 0x52, 0x4D, 0x47, 0x52, 0x41, 0x46, 0x32 }; + private static byte[] header_RMGRAF3 = new byte[] { 0x52, 0x4D, 0x47, 0x52, 0x41, 0x46, 0x33 }; + private static byte[] header_RMINDEX = new byte[] { 0x52, 0x4D, 0x49, 0x4E, 0x44, 0x45, 0x58 }; + private static byte[] header_RMLINES = new byte[] { 0x52, 0x4D, 0x4C, 0x49, 0x4E, 0x45, 0x53 }; + private static byte[] header_RMSEGMENTS = new byte[] { 0x52, 0x4D, 0x53, 0x45, 0x47, 0x4D, 0x45, 0x4E, 0x54, 0x53 }; + private static byte[] header_RMPOINTNLL0 = new byte[] { 0x52, 0x4D, 0x50, 0x4F, 0x49, 0x4E, 0x54, 0x4E, 0x4C, 0x4C, 0x30 }; + private static byte[] header_RMPOINTNLL1 = new byte[] { 0x52, 0x4D, 0x50, 0x4F, 0x49, 0x4E, 0x54, 0x4E, 0x4C, 0x4C, 0x31 }; + private static byte[] header_RMLINKIDS = new byte[] { 0x52, 0x4D, 0x4C, 0x49, 0x4E, 0x4B, 0x49, 0x44, 0x53 }; + private static byte[] header_RMLATTRIB = new byte[] { 0x52, 0x4D, 0x4C, 0x41, 0x54, 0x54, 0x52, 0x49, 0x42 }; + private static byte[] header_RMTURNRSTR = new byte[] { 0x52, 0x4D, 0x54, 0x55, 0x52, 0x4E, 0x52, 0x53, 0x54, 0x52 }; + + private const byte const_LineRecordLength = 15; + private const byte const_SegmRecordLength = 30; + + /// + /// Çàãðóæàòü ñåãìåíòû ëèíèé â ïàìÿòü èëè íåò + /// + private SegmentsInMemoryPreLoad stream_inMemSegPreload = SegmentsInMemoryPreLoad.inMemoryCalculations; + /// + /// Çàãðóæàòü ñåãìåíòû ëèíèé â ïàìÿòü èëè íåò + /// + public SegmentsInMemoryPreLoad PreLoadedLineSegments { get { return stream_inMemSegPreload; } } + + /// + /// Ñòðîèì ïóòü îò îáðàòíîãî? + /// + private bool calc_Reversed = false; + /// + /// Ñòðîèì ïóòü îò îáðàòíîãî? + /// èñï-ñÿ äëÿ ïóòè ÈÇ ÌÍÎÃÈÕ â ÎÄÍÓ (x[] --> y) + /// + public bool IsCalcReversed { get { return calc_Reversed; } } + + /// + /// Êðèòåðèé îïòèìèçàöèè ìàðøðóòà + /// + private MinimizeBy calc_minBy = MinimizeBy.Cost; + /// + /// Êðèòåðèé îïòèìèçàöèè ìàðøðóòà + /// + public MinimizeBy MinimizeRouteBy { get { return calc_minBy; } set { calc_minBy = value; } } + + /// + /// Óñëîâèÿ ïîñòðîåíèÿ ìàðøðóòà ÷åðåç àòòðèáóòû + /// + private byte[] goThrough = null; + /// + /// Óñëîâèÿ ïîñòðîåíèÿ ìàðøðóòà ÷åðåç àòòðèáóòû + /// + public byte[] GoThrough { get { return goThrough; } set { goThrough = value; } } + + /// + /// Èçáåãàòü íèçêèé ROUTE_LEVEL + /// + private bool avoidLowRouteLevel = false; + /// + /// Èçáåãàòü íèçêèé Route_Level ïðè ïîñòðîåíèè ìàðøðóòîâ + /// + public bool AvoidLowRouteLevel { get { return avoidLowRouteLevel; } set { avoidLowRouteLevel = value; } } + + /// + /// Çàïðåò ïðîõîæäåíèÿ ìàðøðóòà ÷åðåç ëèíèè + /// + private List goExcept = new List(); + /// + /// Çàïðåò ïðîõîæäåíèÿ ìàðøðóòà ÷åðåç ëèíèè + /// + public List GoExcept { get { return goExcept; } set { goExcept = value; } } + + /// + /// Ìàêñèìàëüíàÿ äëèíà ìåæäó óçëàìè ãðàôà + /// + private Single graph_maxDistBetweenNodes = 0; + /// + /// Ìàêñèìàëüíàÿ äëèíà ìåæäó óçëàìè ãðàôà + /// + public Single MaxDistanceBetweenNodes { get { return graph_maxDistBetweenNodes; } } + + /// + /// Ìàêñèìàëüíàÿ îøèáêà äëÿ ðàñ÷åòîâ (èñï-ñÿ äëÿ îïðåäåëåíèÿ íåçàïîëíåííûõ êëåòîê) + /// + public const Single const_maxError = (Single)1e-6; + /// + /// Ìàêñèìàëüíîå çíà÷åíèå îöåíêè, áîëüøå êîòîðîãî îöåíêà ÿâëÿåòñÿ áåñêîíå÷íîé + /// + public const Single const_maxValue = (Single)1e+30; + + /// + /// Ñìåùåíèå ñëåäóþùåãî áëèæàéøåãî óçëà â ìàòðèöå îòíîñèòåëüíî íà÷àëà ýëåìåíòà ìàññèâà + /// + private const byte const_offset_Next = 0; + /// + /// Ñìåùåíèå îöåíêè ïóòè îòíîñèòåëüíî íà÷àëà ýëåìåíòà ìàññèâà + /// + private const byte const_offset_Cost = 4; + /// + /// Ñìåùåíèå äëèíû ïóòè îòíîñèòåëüíî íà÷àëà ýëåìåíòà ìàññèâà + /// + private const byte const_offset_Dist = 8; + /// + /// Ñìåùåíèå âðåìåíè â ïóòè îòíîñèòåëüíî íà÷àëà ýëåìåíòà ìàññèâà + /// + private const byte const_offset_Time = 12; + /// + /// Ñìåùåíèå ëèíèè äî òî÷êè + /// + private const byte const_offset_Line = 16; + /// + /// Ñìåùåíèå ðåâåðñà ëèíèè äî òî÷êè + /// + private const byte const_offset_Reverse = 20; + + + /// + /// Ðàçìåð ÿ÷åéêè ãðàôà + /// + private const int const_vtGraphElemLength = 4 + 4 + 4 + 4 + 4 + 1; // next_node cost dist time line rev + + /// + /// Ðàçìåð ÿ÷åéêè âåêòîðà + /// + private const int const_vtArrElemLength = 4 + 4 + 4 + 4; // next_node cost dist time + + /// + ///  ïàìÿòè ëè ãðàô èëè â ôàéëå + /// + private bool graph_InMemory = false; + + /// + /// ×èñëî óçëîâ â ãðàôå + /// + private int graph_NodesCount = 0; + /// + /// ×èñëî ëèíèé â ãðàôå + /// + private int graph_LinesCount = 0; + /// + /// ×èñëî ñåãìåíòîâ â ãðàôå + /// + private int graph_LinesSegmentsCount = 0; + + #region streams + /// + /// Óêàçàòåëü íà ôàéë ãðàôà + /// + private Stream stream_Graph = null; + private System.Threading.Mutex stream_Graph_Mtx = null; + /// + /// Óêàçàòåëü íà èíâåðñíûé ôàéë ãðàôà + /// + private Stream stream_Graph_R = null; + private System.Threading.Mutex stream_Graph_R_Mtx = null; + /// + /// Óêàçàòåëü íà èíäåêñíûé ôàéë ãðàôà + /// + private Stream stream_Index = null; + private System.Threading.Mutex stream_Index_Mtx = null; + /// + /// Óêàçàòåëü íà èíäåêñíûé ôàéë èíâåðñíîãî ãðàôà + /// + private Stream stream_Index_R = null; + private System.Threading.Mutex stream_Index_R_Mtx = null; + /// + /// Óêàçàòåëü íà ôàéë ëèíèé + /// + private Stream stream_Lines = null; + private System.Threading.Mutex stream_Lines_Mtx = null; + /// + /// Óêàçàòåëü íà àòðèáóòû ëèíèé + /// + private Stream stream_LAttr = null; + private System.Threading.Mutex stream_LAttr_Mtx = null; + /// + /// Óêàçàòåëü íà ôàéë ñåãìåíòîâ + /// + private Stream stream_LinesSegments = null; + private System.Threading.Mutex stream_LinesSegments_Mtx = null; + /// + /// Óêàçàòåëü íà ôàéë êîîðäèíàò ãðàôà + /// + private Stream stream_Geo = null; + private System.Threading.Mutex stream_Geo_Mtx = null; + /// + /// Óêàçàòåëü íà èíäåêñíûé ôàéë êîîðäèíàò ãðàôà + /// + private Stream stream_Geo_LL = null; + private System.Threading.Mutex stream_Geo_LL_Mtx = null; + #endregion + + /// + /// Îòêðûòûé âåêòîð, ñîäåðæàùèé èíôîðìàöèþ î âñåõ êîíå÷íûéõ òî÷êàõ (óçëàõ) è ìàðøðóòàõ + /// + private Stream stream_Vector = null; + + /// + /// Èìÿ ôàéëà ãðàôà + /// + private string stream_FileName = null; + public int RegionID = 0; + /// + /// Ïðåôèêñ èìåí ôàéëà ãðàôà + /// + private string stream_FileMain = null; + /// + /// Êîíôèãóðàöèÿ ñåðâåðà ïðîáîê äëÿ òåêóùåãî ãðàôà + /// + public TMCJAMServerConfig TmcJamSvrCfg = new TMCJAMServerConfig(); + private byte TmcJamSvrErr = 0; + + /// + /// ×èñëî óçëîâ â ãðàôå + /// + public int NodesCount { get { return graph_NodesCount; } } + /// + /// ×èñëî ëèíèé â ãðàôå + /// + public int LinesCount { get { return graph_LinesCount; } } + /// + /// Îáùåå ÷èñëî ñåãìåíòîâ â ãðàôå + /// + public int SegmentsCount { get { return graph_LinesSegmentsCount; } } + + /// + /// Private only + /// + private RMGraph() { } + + /// + ///  ïàìÿòè ëè ãðàô èëè â ôàéëå + /// + public bool IsGraphInMemory { get { return graph_InMemory; } } + + /// + /// Èìÿ ôàéëà ãðàôà + /// + public string FileName { get { return stream_FileName; } } + + ///// + ///// Èíôîðìàöèÿ î ïîïðàâêàõ cost äëÿ ðàñ÷åòà ìàðøðóòà (òðàôèê) + ///// + //private LineExtCostInfo[] extCostInfo = null; + + ///// + ///// Èñïîëüçóåòñÿ ëè âíåøíÿÿ ïîïðàâî÷íàÿ èíôîðìàöèÿ äëÿ îöåíêè ïóòè (òðàôèê) + ///// + //public bool ExternalCostInfoUsed { get { return extCostInfo != null && extCostInfo.Length > 0; } } + + ///// + ///// Èíôîðìàöèÿ î ïîïðàâêàõ time äëÿ ðàñ÷åòà ìàðøðóòà (òðàôèê) + ///// + //private LineExtCostInfo[] extTimeInfo = null; + + ///// + ///// Èñïîëüçóåòñÿ ëè âíåøíÿÿ ïîïðàâî÷íàÿ èíôîðìàöèÿ äëÿ âðåìåíè â ïóòè (òðàôèê) + ///// + //public bool ExternalTimeInfoUsed { get { return extTimeInfo != null && extTimeInfo.Length > 0; } } + + /// + /// Èñïîëüçóåòñÿ ëè âíåøíÿÿ ïîïðàâî÷íàÿ èíôîðìàöèÿ äëÿ ïîñòðîåíèÿ ìàðøðóòà + /// + public bool TrafficUse { get { return traffic_UseCurrent || traffic_UseHistory; } set { traffic_UseCurrent = true; } } + + /// + /// Èñïîëüçóåòñÿ ëè òåêóùàÿ âíåøíÿÿ ïîïðàâî÷íàÿ èíôîðìàöèÿ äëÿ ïîñòðîåíèÿ ìàðøðóòà + /// + private bool traffic_UseCurrent = false; + + /// + /// Èñïîëüçóåòñÿ ëè òåêóùàÿ âíåøíÿÿ ïîïðàâî÷íàÿ èíôîðìàöèÿ äëÿ ïîñòðîåíèÿ ìàðøðóòà + /// + public bool TrafficUseCurrent { get { return traffic_UseCurrent; } set { traffic_UseCurrent = value; } } + + /// + /// Èñïîëüçóåòñÿ ëè èñòîðè÷åñêèé òðàôèê â êà÷åñòâå ïîïðàâî÷íîé èíôîðìàöèè äëÿ ïîñòðîåíèÿ ìàðøðóòà + /// + private bool traffic_UseHistory = false; + + /// + /// Èñïîëüçóåòñÿ ëè èñòîðè÷åñêèé òðàôèê â êà÷åñòâå ïîïðàâî÷íîé èíôîðìàöèè äëÿ ïîñòðîåíèÿ ìàðøðóòà + /// + public bool TrafficUseHistory { get { return traffic_UseHistory; } set { traffic_UseHistory = value; } } + + /// + /// Âðåìÿ íà÷àëà äâèæåíèÿ äëÿ ïîñòðîåíèÿ ìàðøðóòà ñ ó÷åòîì âíåøíåé ïîïðîâî÷íîé èíôîðìàöèè + /// + private DateTime traffic_StartTime;// = DateTime.Now; + + /// + /// Âðåìÿ íà÷àëà äâèæåíèÿ äëÿ ïîñòðîåíèÿ ìàðøðóòà ñ ó÷åòîì âíåøíåé ïîïðîâî÷íîé èíôîðìàöèè + /// + public DateTime TrafficStartTime { get { return traffic_StartTime; } set { traffic_StartTime = value; } } + + /// + ///  òå÷åíèè êàêîãî âðåìåíè îò íà÷àëà äâèæåíèÿ èñïîëüçóåòñÿ + /// âíåøíÿÿ èíôîðìàöèÿ î äîáàâî÷íîé îöåíêè ïåðåäâèæåíèÿ äëÿ + /// ïîñòðîåíèÿ ìàðøðóòà (èíôîðìàöèÿ î òðàôèêå èñïîëüçóåòñÿ + /// â ïåðâûå extCostTimeLimit ìèíóò ïóòè) + /// + private int traffic_CurrentTimeout = 25; + + /// + ///  òå÷åíèè êàêîãî âðåìåíè îò íà÷àëà äâèæåíèÿ èñïîëüçóåòñÿ + /// âíåøíÿÿ èíôîðìàöèÿ î äîáàâî÷íîé îöåíêè ïåðåäâèæåíèÿ äëÿ + /// ïîñòðîåíèÿ ìàðøðóòà (èíôîðìàöèÿ î òðàôèêå èñïîëüçóåòñÿ + /// â ïåðâûå x ìèíóò ïóòè) + /// + public int TrafficCurrentTimeout { get { return traffic_CurrentTimeout; } set { traffic_CurrentTimeout = value; } } + + /// + /// Çàãðóæàåì ãðàô èç ôàéëà äëÿ ðàáîòû ñ íèì íà äèñêå + /// + /// Èìÿ ôàéëà äëÿ õðàíåíèÿ ãðàôà + /// + public static RMGraph WorkWithDisk(string fileName) + { + return WorkWithDisk(fileName, 0); + } + + private static TMCJAMServerConfig loadTMCJamServerConfig(string fileMain) + { + TMCJAMServerConfig cfg = new TMCJAMServerConfig(); + string tmcjamcfgfile = fileMain + ".jam.cfg"; + if (File.Exists(tmcjamcfgfile)) + { + FileStream jfs = new FileStream(tmcjamcfgfile, FileMode.Open, FileAccess.Read); + StreamReader jsr = new StreamReader(jfs); + string ln = jsr.ReadToEnd().Trim(); + jsr.Close(); + jfs.Close(); + try + { + ln = ln.ToLower().Trim(); + ln = ln.Replace("tcp://", ""); + ln = ln.Replace("/", ""); + cfg.RegionID = int.Parse(ln.Substring(0, ln.IndexOf("@"))); + ln = ln.Remove(0, ln.IndexOf("@") + 1); + cfg.Server = ln.Substring(0, ln.IndexOf(":")); + cfg.Port = int.Parse(ln.Remove(0, ln.IndexOf(":") + 1)); + } + catch + { + return cfg; + }; + }; + return cfg; + } + + /// + /// Çàãðóæàåì ãðàô èç ôàéëà äëÿ ðàáîòû ñ íèì íà äèñêå + /// + /// Èìÿ ôàéëà äëÿ õðàíåíèÿ ãðàôà + /// + public static RMGraph WorkWithDisk(string fileName, int RegionID) + { + RMGraph v = new RMGraph(); + v.stream_inMemSegPreload = SegmentsInMemoryPreLoad.onDiskCalculations; + v.stream_FileName = fileName; + v.stream_FileMain = fileName.Substring(0, fileName.LastIndexOf(".")); + v.TmcJamSvrCfg = loadTMCJamServerConfig(v.stream_FileMain); + v.stream_Graph = new FileStream(v.stream_FileMain + ".graph.bin", FileMode.Open, FileAccess.Read); + byte[] bb = new byte[header_RMGRAF2.Length]; + v.stream_Graph.Read(bb, 0, bb.Length); + if (System.Text.Encoding.GetEncoding(1251).GetString(bb) != "RMGRAF2") + { + v.stream_Graph.Close(); + throw new IOException("Unknown file format:\r\n" + v.stream_FileMain + ".graph.bin"); + }; + bb = new byte[4]; + v.stream_Graph.Read(bb, 0, 4); + v.graph_NodesCount = BitConverter.ToInt32(bb, 0); + v.stream_Graph.Read(bb, 0, 4); + v.graph_maxDistBetweenNodes = BitConverter.ToSingle(bb, 0); + + v.stream_Graph_R = new FileStream(v.stream_FileMain + ".graph[r].bin", FileMode.Open, FileAccess.Read); + bb = new byte[header_RMGRAF3.Length]; + v.stream_Graph_R.Read(bb, 0, bb.Length); + if (System.Text.Encoding.GetEncoding(1251).GetString(bb) != "RMGRAF3") + { + v.stream_Graph.Close(); + v.stream_Graph_R.Close(); + throw new IOException("Unknown file format:\r\n" + v.stream_FileMain + ".graph[r].bin"); + }; + + v.stream_Index = new FileStream(v.stream_FileMain + ".graph.bin.in", FileMode.Open, FileAccess.Read); + bb = new byte[header_RMINDEX.Length]; + v.stream_Index.Read(bb, 0, bb.Length); + if (System.Text.Encoding.GetEncoding(1251).GetString(bb) != "RMINDEX") + { + v.stream_Graph.Close(); + v.stream_Graph_R.Close(); + v.stream_Index.Close(); + throw new Exception("Unknown file format:\r\n" + v.stream_FileMain + ".graph.bin.in"); + }; + + v.stream_Index_R = new FileStream(v.stream_FileMain + ".graph[r].bin.in", FileMode.Open, FileAccess.Read); + bb = new byte[header_RMINDEX.Length]; + v.stream_Index_R.Read(bb, 0, bb.Length); + if (System.Text.Encoding.GetEncoding(1251).GetString(bb) != "RMINDEX") + { + v.stream_Graph.Close(); + v.stream_Graph_R.Close(); + v.stream_Index.Close(); + v.stream_Index_R.Close(); + throw new Exception("Unknown file format:\r\n" + v.stream_FileMain + ".graph[r].bin.in"); + }; + + v.stream_Lines = new FileStream(v.stream_FileMain + ".lines.bin", FileMode.Open, FileAccess.Read); + bb = new byte[header_RMLINES.Length]; + v.stream_Lines.Read(bb, 0, bb.Length); + if (System.Text.Encoding.GetEncoding(1251).GetString(bb) != "RMLINES") + { + v.stream_Graph.Close(); + v.stream_Graph_R.Close(); + v.stream_Index.Close(); + v.stream_Index_R.Close(); + v.stream_Lines.Close(); + throw new Exception("Unknown file format:\r\n" + v.stream_FileMain + ".lines.bin"); + }; + bb = new byte[4]; + v.stream_Lines.Read(bb, 0, bb.Length); + v.graph_LinesCount = BitConverter.ToInt32(bb, 0); + + + v.stream_LinesSegments = new FileStream(v.stream_FileMain + ".segments.bin", FileMode.Open, FileAccess.Read); + bb = new byte[header_RMSEGMENTS.Length]; + v.stream_LinesSegments.Read(bb, 0, bb.Length); + if (System.Text.Encoding.GetEncoding(1251).GetString(bb) != "RMSEGMENTS") + { + v.stream_Graph.Close(); + v.stream_Graph_R.Close(); + v.stream_Index.Close(); + v.stream_Index_R.Close(); + v.stream_Lines.Close(); + v.stream_LinesSegments.Close(); + throw new Exception("Unknown file format:\r\n" + v.stream_FileMain + ".segments.bin"); + }; + bb = new byte[4]; + v.stream_LinesSegments.Read(bb, 0, bb.Length); + v.graph_LinesSegmentsCount = BitConverter.ToInt32(bb, 0); + + ////////// + + v.stream_Geo = new FileStream(v.stream_FileMain + ".graph.geo", FileMode.Open, FileAccess.Read); + byte[] ba = new byte[header_RMPOINTNLL0.Length]; + v.stream_Geo.Read(ba, 0, ba.Length); + if (System.Text.Encoding.GetEncoding(1251).GetString(ba) != "RMPOINTNLL0") + { + v.stream_Graph.Close(); + v.stream_Graph_R.Close(); + v.stream_Index.Close(); + v.stream_Index_R.Close(); + v.stream_Lines.Close(); + v.stream_LinesSegments.Close(); + v.stream_Geo.Close(); + throw new IOException("Unknown file format:\r\n" + v.stream_FileMain + ".graph.geo"); + }; + + v.stream_Geo_LL = new FileStream(v.stream_FileMain + ".graph.geo.ll", FileMode.Open, FileAccess.Read); + ba = new byte[header_RMPOINTNLL1.Length]; + v.stream_Geo_LL.Read(ba, 0, ba.Length); + if (System.Text.Encoding.GetEncoding(1251).GetString(ba) != "RMPOINTNLL1") + { + v.stream_Graph.Close(); + v.stream_Graph_R.Close(); + v.stream_Index.Close(); + v.stream_Index_R.Close(); + v.stream_Lines.Close(); + v.stream_LinesSegments.Close(); + v.stream_Geo.Close(); + v.stream_Geo_LL.Close(); + throw new IOException("Unknown file format:\r\n" + v.stream_FileMain + ".graph.geo.ll"); + }; + + if (File.Exists(v.stream_FileMain + ".lines.att")) + { + v.stream_LAttr = new FileStream(v.stream_FileMain + ".lines.att", FileMode.Open, FileAccess.Read); + bb = new byte[header_RMLATTRIB.Length]; + v.stream_LAttr.Read(bb, 0, bb.Length); + if (System.Text.Encoding.GetEncoding(1251).GetString(bb) != "RMLATTRIB") + { + v.stream_Graph.Close(); + v.stream_Graph_R.Close(); + v.stream_Index.Close(); + v.stream_Index_R.Close(); + v.stream_Lines.Close(); + v.stream_LinesSegments.Close(); + v.stream_Geo.Close(); + v.stream_Geo_LL.Close(); + v.stream_LAttr.Close(); + throw new Exception("Unknown file format:\r\n" + v.stream_FileMain + ".lines.att"); + }; + } + else v.stream_LAttr = null; + + return v; + } + + /// + /// Çàãðóæàåì ãðàô èç ôàéëà â ïàìÿòü äëÿ ðàáîòû ñ íèì + /// + /// Èìÿ ôàéëà + /// + public static RMGraph LoadToMemory(string fileName) + { + return LoadToMemory(fileName, SegmentsInMemoryPreLoad.inMemoryCalculations, 0); + } + + /// + /// Çàãðóæàåì ãðàô èç ôàéëà â ïàìÿòü äëÿ ðàáîòû ñ íèì + /// + /// Èìÿ ôàéëà + /// + public static RMGraph LoadToMemory(string fileName, int RegionID) + { + return LoadToMemory(fileName, SegmentsInMemoryPreLoad.inMemoryCalculations, RegionID); + } + + /// + /// Çàãðóæàåì ãðàô èç ôàéëà â ïàìÿòü äëÿ ðàáîòû ñ íèì + /// (èñïîëüçóåòñÿ, åñëè ê ãðàôó èìåþò äîñòóï íåñêîëüêî îáúåêòîâ/ïîòîêîâ) + /// + /// Èìÿ ôàéëà + /// Óíèêàëüíîå èìÿ ãðàôà â ïàìÿòè + /// + public static RMGraph LoadToMemoryGlobal(string fileName, string globalObjectUnicalName) + { + return LoadToMemoryGlobal(fileName, globalObjectUnicalName, 0); + } + + /// + /// Çàãðóæàåì ãðàô èç ôàéëà â ïàìÿòü äëÿ ðàáîòû ñ íèì + /// (èñïîëüçóåòñÿ, åñëè ê ãðàôó èìåþò äîñòóï íåñêîëüêî îáúåêòîâ/ïîòîêîâ) + /// + /// Èìÿ ôàéëà + /// Óíèêàëüíîå èìÿ ãðàôà â ïàìÿòè + /// + public static RMGraph LoadToMemoryGlobal(string fileName, string globalObjectUnicalName, int RegionID) + { + if (globalObjectUnicalName == String.Empty) + throw new Exception("You must set globalObjectUnicalName!"); + + RMGraph g = LoadToMemory(fileName, SegmentsInMemoryPreLoad.inMemoryCalculations, RegionID); + + // mutexes + g.PreparedToGlobalObject_UnicalName = globalObjectUnicalName; + g.stream_Graph_Mtx = new System.Threading.Mutex(false, g.PreparedToGlobalObject_UnicalName + "_g"); + g.stream_Graph_R_Mtx = new System.Threading.Mutex(false, g.PreparedToGlobalObject_UnicalName + "_gr"); + g.stream_Index_Mtx = new System.Threading.Mutex(false, g.PreparedToGlobalObject_UnicalName + "_i"); + g.stream_Index_R_Mtx = new System.Threading.Mutex(false, g.PreparedToGlobalObject_UnicalName + "_ir"); + g.stream_Lines_Mtx = new System.Threading.Mutex(false, g.PreparedToGlobalObject_UnicalName + "_l"); + g.stream_LinesSegments_Mtx = new System.Threading.Mutex(false, g.PreparedToGlobalObject_UnicalName + "_ls"); + g.stream_Geo_Mtx = new System.Threading.Mutex(false, g.PreparedToGlobalObject_UnicalName + "_geo"); + g.stream_Geo_LL_Mtx = new System.Threading.Mutex(false, g.PreparedToGlobalObject_UnicalName + "_geoll"); + g.stream_LAttr_Mtx = new System.Threading.Mutex(false, g.PreparedToGlobalObject_UnicalName + "_la"); + + return g; + } + + /// + /// Ñîçäàåì ãðàô, ïîäêëþ÷åííûé ê óæå ñîçäàííîìó îáúåêòó â ïàìÿòè + /// + /// + /// + public static RMGraph IsolatedCopyFrom(RMGraph g) + { + if (!g.graph_InMemory) + throw new Exception("Source Graph must be loaded in Memory!"); + if (g.PreparedToGlobalObject_UnicalName == String.Empty) + throw new Exception("Source Graph must be prepared to Global Object, call PrepareToGlobalObject first!"); + + RMGraph v = new RMGraph(); + v.RegionID = g.RegionID; + v.IsIsolatedCopy = true; + v.stream_inMemSegPreload = g.stream_inMemSegPreload; + v.stream_FileName = g.stream_FileName; + v.stream_FileMain = g.stream_FileMain; + v.TmcJamSvrCfg = g.TmcJamSvrCfg; + v.graph_InMemory = g.graph_InMemory; + v.stream_Graph = MemoryStream.Synchronized(g.stream_Graph); + + v.graph_NodesCount = g.graph_NodesCount; + v.graph_maxDistBetweenNodes = g.graph_maxDistBetweenNodes; + + v.stream_Graph_R = MemoryStream.Synchronized(g.stream_Graph_R); + v.stream_Index = MemoryStream.Synchronized(g.stream_Index); + v.stream_Index_R = MemoryStream.Synchronized(g.stream_Index_R); + v.stream_Lines = MemoryStream.Synchronized(g.stream_Lines); + if (g.stream_LAttr != null) + v.stream_LAttr = MemoryStream.Synchronized(g.stream_LAttr); + else + v.stream_LAttr = null; + v.graph_LinesCount = g.graph_LinesCount; + + if (v.stream_inMemSegPreload == SegmentsInMemoryPreLoad.inMemoryCalculations) + v.stream_LinesSegments = MemoryStream.Synchronized(g.stream_LinesSegments); + else + v.stream_LinesSegments = new FileStream(v.stream_FileMain + ".segments.bin", FileMode.Open, FileAccess.Read); + + v.graph_LinesSegmentsCount = g.graph_LinesSegmentsCount; + v.stream_Geo = MemoryStream.Synchronized(g.stream_Geo); + v.stream_Geo_LL = MemoryStream.Synchronized(g.stream_Geo_LL); + + // mutexes + v.stream_Graph_Mtx = System.Threading.Mutex.OpenExisting(g.PreparedToGlobalObject_UnicalName + "_g", System.Security.AccessControl.MutexRights.ReadPermissions | System.Security.AccessControl.MutexRights.Synchronize | System.Security.AccessControl.MutexRights.Modify); + v.stream_Graph_R_Mtx = System.Threading.Mutex.OpenExisting(g.PreparedToGlobalObject_UnicalName + "_gr", System.Security.AccessControl.MutexRights.ReadPermissions | System.Security.AccessControl.MutexRights.Synchronize | System.Security.AccessControl.MutexRights.Modify); + v.stream_Index_Mtx = System.Threading.Mutex.OpenExisting(g.PreparedToGlobalObject_UnicalName + "_i", System.Security.AccessControl.MutexRights.ReadPermissions | System.Security.AccessControl.MutexRights.Synchronize | System.Security.AccessControl.MutexRights.Modify); + v.stream_Index_R_Mtx = System.Threading.Mutex.OpenExisting(g.PreparedToGlobalObject_UnicalName + "_ir", System.Security.AccessControl.MutexRights.ReadPermissions | System.Security.AccessControl.MutexRights.Synchronize | System.Security.AccessControl.MutexRights.Modify); + v.stream_Lines_Mtx = System.Threading.Mutex.OpenExisting(g.PreparedToGlobalObject_UnicalName + "_l", System.Security.AccessControl.MutexRights.ReadPermissions | System.Security.AccessControl.MutexRights.Synchronize | System.Security.AccessControl.MutexRights.Modify); + v.stream_LinesSegments_Mtx = System.Threading.Mutex.OpenExisting(g.PreparedToGlobalObject_UnicalName + "_ls", System.Security.AccessControl.MutexRights.ReadPermissions | System.Security.AccessControl.MutexRights.Synchronize | System.Security.AccessControl.MutexRights.Modify); + v.stream_Geo_Mtx = System.Threading.Mutex.OpenExisting(g.PreparedToGlobalObject_UnicalName + "_geo", System.Security.AccessControl.MutexRights.ReadPermissions | System.Security.AccessControl.MutexRights.Synchronize | System.Security.AccessControl.MutexRights.Modify); + v.stream_Geo_LL_Mtx = System.Threading.Mutex.OpenExisting(g.PreparedToGlobalObject_UnicalName + "_geoll", System.Security.AccessControl.MutexRights.ReadPermissions | System.Security.AccessControl.MutexRights.Synchronize | System.Security.AccessControl.MutexRights.Modify); + v.stream_LAttr_Mtx = System.Threading.Mutex.OpenExisting(g.PreparedToGlobalObject_UnicalName + "_la", System.Security.AccessControl.MutexRights.ReadPermissions | System.Security.AccessControl.MutexRights.Synchronize | System.Security.AccessControl.MutexRights.Modify); + + return v; + } + private bool IsIsolatedCopy = false; + private string PreparedToGlobalObject_UnicalName = String.Empty; + + /// + /// Graph Size in bytes + /// + public UInt64 GraphSize + { + get + { + ulong gs = 0 + + (ulong)stream_Graph.Length + (ulong)stream_Graph_R.Length + + (ulong)stream_Index.Length + (ulong)stream_Index_R.Length + + (ulong)stream_Lines.Length + + (ulong)stream_LinesSegments.Length + + (ulong)stream_Geo.Length + (ulong)stream_Geo_LL.Length + ; + return gs; + + //RuntimeTypeHandle th = this.GetType().TypeHandle; + //return (ulong)(*(*(int**)&th + 1)); + } + } + + /// + /// Çàãðóæàåì ãðàô èç ôàéëà â ïàìÿòü äëÿ ðàáîòû ñ íèì + /// + /// + /// + /// + public static RMGraph LoadToMemory(string fileName, SegmentsInMemoryPreLoad preload) + { + return LoadToMemory(fileName, preload, 0); + } + + /// + /// Çàãðóæàåì ãðàô èç ôàéëà â ïàìÿòü äëÿ ðàáîòû ñ íèì + /// + /// + /// + /// + public static RMGraph LoadToMemory(string fileName, SegmentsInMemoryPreLoad preload, int RegionID) + { + RMGraph v = new RMGraph(); + v.RegionID = RegionID; + v.stream_inMemSegPreload = preload; + v.stream_FileName = fileName; + v.stream_FileMain = fileName.Substring(0, fileName.LastIndexOf(".")); + v.TmcJamSvrCfg = loadTMCJamServerConfig(v.stream_FileMain); + v.graph_InMemory = true; + v.stream_Graph = new MemoryStream(); + + FileStream fs = new FileStream(v.stream_FileMain + ".graph.bin", FileMode.Open, FileAccess.Read); + byte[] block = new byte[8192]; + int read = 0; + while ((read = fs.Read(block, 0, 8192)) > 0) + v.stream_Graph.Write(block, 0, read); + fs.Close(); + + v.stream_Graph.Position = 0; + byte[] bb = new byte[header_RMGRAF2.Length]; + v.stream_Graph.Read(bb, 0, bb.Length); + if (System.Text.Encoding.GetEncoding(1251).GetString(bb) != "RMGRAF2") + { + v.stream_Graph.Close(); + throw new IOException("Unknown file format:\r\n" + v.stream_FileMain + ".graph.bin"); + }; + + v.stream_Graph.Position = header_RMGRAF2.Length; + v.stream_Graph.Read(block, 0, 4); + v.graph_NodesCount = BitConverter.ToInt32(block, 0); + v.stream_Graph.Read(block, 0, 4); + v.graph_maxDistBetweenNodes = BitConverter.ToSingle(block, 0); + + v.stream_Graph_R = new MemoryStream(); + fs = new FileStream(v.stream_FileMain + ".graph[r].bin", FileMode.Open, FileAccess.Read); + block = new byte[8192]; + read = 0; + while ((read = fs.Read(block, 0, 8192)) > 0) + v.stream_Graph_R.Write(block, 0, read); + fs.Close(); + + v.stream_Graph_R.Position = 0; + bb = new byte[header_RMGRAF3.Length]; + v.stream_Graph_R.Read(bb, 0, bb.Length); + if (System.Text.Encoding.GetEncoding(1251).GetString(bb) != "RMGRAF3") + { + v.stream_Graph.Close(); + v.stream_Graph_R.Close(); + throw new IOException("Unknown file format:\r\n" + v.stream_FileMain + ".graph[r].bin"); + }; + + v.stream_Index = new MemoryStream(); + fs = new FileStream(v.stream_FileMain + ".graph.bin.in", FileMode.Open, FileAccess.Read); + block = new byte[8192]; + read = 0; + while ((read = fs.Read(block, 0, 8192)) > 0) + v.stream_Index.Write(block, 0, read); + fs.Close(); + + v.stream_Index.Position = 0; + bb = new byte[header_RMINDEX.Length]; + v.stream_Index.Read(bb, 0, bb.Length); + if (System.Text.Encoding.GetEncoding(1251).GetString(bb) != "RMINDEX") + { + v.stream_Graph.Close(); + v.stream_Graph_R.Close(); + v.stream_Index.Close(); + throw new Exception("Unknown file format:\r\n" + v.stream_FileMain + ".graph.bin.in"); + }; + + v.stream_Index_R = new MemoryStream(); + fs = new FileStream(v.stream_FileMain + ".graph[r].bin.in", FileMode.Open, FileAccess.Read); + block = new byte[8192]; + read = 0; + while ((read = fs.Read(block, 0, 8192)) > 0) + v.stream_Index_R.Write(block, 0, read); + fs.Close(); + + v.stream_Index_R.Position = 0; + bb = new byte[header_RMINDEX.Length]; + v.stream_Index_R.Read(bb, 0, bb.Length); + if (System.Text.Encoding.GetEncoding(1251).GetString(bb) != "RMINDEX") + { + v.stream_Graph.Close(); + v.stream_Graph_R.Close(); + v.stream_Index.Close(); + v.stream_Index_R.Close(); + throw new Exception("Unknown file format:\r\n" + v.stream_FileMain + ".graph[r].bin.in"); + }; + + v.stream_Lines = new MemoryStream(); + fs = new FileStream(v.stream_FileMain + ".lines.bin", FileMode.Open, FileAccess.Read); + block = new byte[8192]; + read = 0; + while ((read = fs.Read(block, 0, 8192)) > 0) + v.stream_Lines.Write(block, 0, read); + fs.Close(); + + v.stream_Lines.Position = 0; + bb = new byte[header_RMLINES.Length]; + v.stream_Lines.Read(bb, 0, bb.Length); + if (System.Text.Encoding.GetEncoding(1251).GetString(bb) != "RMLINES") + { + v.stream_Graph.Close(); + v.stream_Graph_R.Close(); + v.stream_Index.Close(); + v.stream_Index_R.Close(); + v.stream_Lines.Close(); + throw new Exception("Unknown file format:\r\n" + v.stream_FileMain + ".lines.bin"); + }; + bb = new byte[4]; + v.stream_Lines.Read(bb, 0, bb.Length); + v.graph_LinesCount = BitConverter.ToInt32(bb, 0); + + if (v.stream_inMemSegPreload == SegmentsInMemoryPreLoad.inMemoryCalculations) + { + v.stream_LinesSegments = new MemoryStream(); + fs = new FileStream(v.stream_FileMain + ".segments.bin", FileMode.Open, FileAccess.Read); + block = new byte[8192]; + read = 0; + while ((read = fs.Read(block, 0, 8192)) > 0) + v.stream_LinesSegments.Write(block, 0, read); + fs.Close(); + } + else + { + v.stream_LinesSegments = new FileStream(v.stream_FileMain + ".segments.bin", FileMode.Open, FileAccess.Read); + }; + + + v.stream_LinesSegments.Position = 0; + bb = new byte[header_RMSEGMENTS.Length]; + v.stream_LinesSegments.Read(bb, 0, bb.Length); + if (System.Text.Encoding.GetEncoding(1251).GetString(bb) != "RMSEGMENTS") + { + v.stream_Graph.Close(); + v.stream_Graph_R.Close(); + v.stream_Index.Close(); + v.stream_Index_R.Close(); + v.stream_Lines.Close(); + v.stream_LinesSegments.Close(); + throw new Exception("Unknown file format:\r\n" + v.stream_FileMain + ".segments.bin"); + }; + bb = new byte[4]; + v.stream_LinesSegments.Read(bb, 0, bb.Length); + v.graph_LinesSegmentsCount = BitConverter.ToInt32(bb, 0); + + ////////// + + v.stream_Geo = new MemoryStream(); + v.stream_Geo_LL = new MemoryStream(); + + fs = new FileStream(v.stream_FileMain + ".graph.geo", FileMode.Open, FileAccess.Read); + block = new byte[8192]; + read = 0; + while ((read = fs.Read(block, 0, 8192)) > 0) + v.stream_Geo.Write(block, 0, read); + fs.Close(); + + v.stream_Geo.Position = 0; + byte[] ba = new byte[header_RMPOINTNLL0.Length]; + v.stream_Geo.Read(ba, 0, ba.Length); + if (System.Text.Encoding.GetEncoding(1251).GetString(ba) != "RMPOINTNLL0") + { + v.stream_Graph.Close(); + v.stream_Graph_R.Close(); + v.stream_Index.Close(); + v.stream_Index_R.Close(); + v.stream_Lines.Close(); + v.stream_LinesSegments.Close(); + v.stream_Geo.Close(); + throw new IOException("Unknown file format:\r\n" + v.stream_FileMain + ".graph.geo"); + }; + + fs = new FileStream(v.stream_FileMain + ".graph.geo.ll", FileMode.Open, FileAccess.Read); + block = new byte[8192]; + read = 0; + while ((read = fs.Read(block, 0, 8192)) > 0) + v.stream_Geo_LL.Write(block, 0, read); + fs.Close(); + + v.stream_Geo_LL.Position = 0; + ba = new byte[header_RMPOINTNLL1.Length]; + v.stream_Geo_LL.Read(ba, 0, ba.Length); + if (System.Text.Encoding.GetEncoding(1251).GetString(ba) != "RMPOINTNLL1") + { + v.stream_Graph.Close(); + v.stream_Graph_R.Close(); + v.stream_Index.Close(); + v.stream_Index_R.Close(); + v.stream_Lines.Close(); + v.stream_LinesSegments.Close(); + v.stream_Geo.Close(); + v.stream_Geo_LL.Close(); + throw new IOException("Unknown file format:\r\n" + v.stream_FileMain + ".graph.geo.ll"); + }; + + if (File.Exists(v.stream_FileMain + ".lines.att")) + { + v.stream_LAttr = new MemoryStream(); + fs = new FileStream(v.stream_FileMain + ".lines.att", FileMode.Open, FileAccess.Read); + block = new byte[8192]; + read = 0; + while ((read = fs.Read(block, 0, 8192)) > 0) + v.stream_LAttr.Write(block, 0, read); + fs.Close(); + + v.stream_LAttr.Position = 0; + bb = new byte[header_RMLATTRIB.Length]; + v.stream_LAttr.Read(bb, 0, bb.Length); + if (System.Text.Encoding.GetEncoding(1251).GetString(bb) != "RMLATTRIB") + { + v.stream_Graph.Close(); + v.stream_Graph_R.Close(); + v.stream_Index.Close(); + v.stream_Index_R.Close(); + v.stream_Lines.Close(); + v.stream_LinesSegments.Close(); + v.stream_Geo.Close(); + v.stream_Geo_LL.Close(); + v.stream_LAttr.Close(); + throw new Exception("Unknown file format:\r\n" + v.stream_FileMain + ".lines.att"); + }; + } + else v.stream_LAttr = null; + + return v; + } + + /// + /// Âûçâàòü ïîñëå îêîí÷àíèÿ ðàáîòû ñ ãðàôîì äëÿ âûñâîáîæäåíèÿ âñåõ ðåñóðñîâ + /// + public void Close() + { + // if already closed + if (stream_Graph == null) + return; + + // if this object to multithread memory + if (IsIsolatedCopy) + return; + + if (stream_Graph != null) + stream_Graph.Close(); + stream_Graph = null; + + if (stream_Index != null) + stream_Index.Close(); + stream_Index = null; + + if (stream_Graph_R != null) + stream_Graph_R.Close(); + stream_Graph_R = null; + + if (stream_Index_R != null) + stream_Index_R.Close(); + stream_Index_R = null; + + if (stream_Lines != null) + stream_Lines.Close(); + stream_Lines = null; + + if (stream_LinesSegments != null) + stream_LinesSegments.Close(); + stream_LinesSegments = null; + + if (stream_Geo != null) + stream_Geo.Close(); + stream_Geo = null; + + if (stream_Geo_LL != null) + stream_Geo_LL.Close(); + stream_Geo_LL = null; + + if (stream_LAttr != null) + stream_LAttr.Close(); + stream_LAttr = null; + } + + ~RMGraph() + { + if (stream_Graph != null) Close(); + } + + + /// + /// Èùåì çàäàííûé óçåë â ãðàôå è âîçâðàùàåì èíôîðìàöèþ îá èñõîäÿùèõ ñâÿçÿõ + /// + /// Óçåë êîòîðûé íàäî íàéòè + /// Ìàññèâ óçëîâ â êîòîðûå ìîæíî äîáðàòüñÿ + /// Îöåíêà ïóòåé â êîòîðûå ìîæíî äîáðàòüñÿ + /// Äëèíû ïóòåé â êîòîðûå ìîæíî äîáðàòüñÿ + /// Âðåìÿ äâèæåíèÿ äî óçëîâ â êîòîðûå ìîæíî äîáðàòüñÿ + /// Ëèíèè ïî êîòîðûì ìîæíî äîáðàòüñÿ + /// Íàïðàâëåíèå ëèíèé ïî êîòîðûì ìîæíî äîáðàòüñÿ + /// ×èñëî áëèæàéøèõ èñõîäÿùèõ ñâÿçåé + public int SelectNode(uint i, out uint[] _n, out Single[] _c, out Single[] _d, out Single[] _t, out uint[] _l, out byte[] _r) + { + byte[] ib = new byte[4]; + if (stream_Index_Mtx != null) stream_Index_Mtx.WaitOne(); + stream_Index.Position = 4 * (i - 1) + header_RMINDEX.Length + 4; + stream_Index.Read(ib, 0, ib.Length); + if (stream_Index_Mtx != null) stream_Index_Mtx.ReleaseMutex(); + uint pos_in_graph = BitConverter.ToUInt32(ib, 0); + + byte nc = 0; + byte[] dd = new byte[const_vtGraphElemLength]; + if (stream_Graph_Mtx != null) stream_Graph_Mtx.WaitOne(); + stream_Graph.Position = pos_in_graph; + nc = (byte)stream_Graph.ReadByte(); + + _n = new uint[nc]; + _c = new Single[nc]; + _d = new Single[nc]; + _t = new Single[nc]; + _l = new uint[nc]; + _r = new byte[nc]; + + for (int x = 0; x < nc; x++) + { + stream_Graph.Read(dd, 0, dd.Length); + _n[x] = BitConverter.ToUInt32(dd, const_offset_Next); + _c[x] = BitConverter.ToSingle(dd, const_offset_Cost); + _d[x] = BitConverter.ToSingle(dd, const_offset_Dist); + _t[x] = BitConverter.ToSingle(dd, const_offset_Time); + _l[x] = BitConverter.ToUInt32(dd, const_offset_Line); + _r[x] = dd[const_offset_Reverse]; + }; + if (stream_Graph_Mtx != null) stream_Graph_Mtx.ReleaseMutex(); + + return nc; + } + + /// + /// Èùåì çàäàííûé óçåë â ãðàôå è âîçâðàùàåì èíôîðìàöèþ î âõîäÿùàÿ ñâÿçÿõ + /// + /// Óçåë êîòîðûé íàäî íàéòè + /// Ìàññèâ óçëîâ èç êîòîðûõ ìîæíî äîáðàòüñÿ + /// Îöåíêà ïóòåé èç êîòîðûõ ìîæíî äîáðàòüñÿ + /// Äëèíû ïóòåé èç êîòîðûõ ìîæíî äîáðàòüñÿ + /// Âðåìÿ äâèæåíèÿ èç óçëîâ èç êîòîðûõ ìîæíî äîáðàòüñÿ + /// Ëèíèè ïî êîòîðûì ìîæíî äîáðàòüñÿ + /// Íàïðàâëåíèå ëèíèé ïî êîòîðûì ìîæíî äîáðàòüñÿ + /// ×èñëî áëèæàéøèõ èñõîäÿùèõ ñâÿçåé + public int SelectNodeR(uint i, out uint[] _n, out Single[] _c, out Single[] _d, out Single[] _t, out uint[] _l, out byte[] _r) + { + + byte[] ib = new byte[4]; + if (stream_Index_R_Mtx != null) stream_Index_R_Mtx.WaitOne(); + stream_Index_R.Position = 4 * (i - 1) + header_RMINDEX.Length + 4; + stream_Index_R.Read(ib, 0, ib.Length); + if (stream_Index_R_Mtx != null) stream_Index_R_Mtx.ReleaseMutex(); + uint pos_in_graph = BitConverter.ToUInt32(ib, 0); + + byte nc = 0; + byte[] dd = new byte[const_vtGraphElemLength]; + if (stream_Graph_R_Mtx != null) stream_Graph_R_Mtx.WaitOne(); + stream_Graph_R.Position = pos_in_graph; + nc = (byte)stream_Graph_R.ReadByte(); + + _n = new uint[nc]; + _c = new Single[nc]; + _d = new Single[nc]; + _t = new Single[nc]; + _l = new uint[nc]; + _r = new byte[nc]; + + for (int x = 0; x < nc; x++) + { + stream_Graph_R.Read(dd, 0, dd.Length); + _n[x] = BitConverter.ToUInt32(dd, const_offset_Next); + _c[x] = BitConverter.ToSingle(dd, const_offset_Cost); + _d[x] = BitConverter.ToSingle(dd, const_offset_Dist); + _t[x] = BitConverter.ToSingle(dd, const_offset_Time); + _l[x] = BitConverter.ToUInt32(dd, const_offset_Line); + _r[x] = dd[const_offset_Reverse]; + }; + if (stream_Graph_R_Mtx != null) stream_Graph_R_Mtx.ReleaseMutex(); + + return nc; + } + + /// + /// Ïîëó÷àåì îöåíêó ïóòè èç òî÷êè (X)->Y + /// Âûçûâàåòñÿ òîëüêî ìåæäó ìåòîäàìè BeginSolve è EndSolve + /// + /// êîíå÷íàÿ òî÷êà + /// îöåíêà + private Single GetCost(uint y) + { + + byte[] bb = new byte[4]; + stream_Vector.Position = (y - 1) * (const_vtArrElemLength) + const_offset_Cost; + stream_Vector.Read(bb, 0, 4); + Single d = BitConverter.ToSingle(bb, 0); + if (d < const_maxError) + return Single.MaxValue; + else + return d; + } + + /// + /// Óñòàíàâëèâàåì îöåíêó ïóòè èç òî÷êè (X)->Y + /// Âûçûâàåòñÿ òîëüêî ìåæäó ìåòîäàìè BeginSolve è EndSolve + /// + /// êîíå÷íàÿ òî÷êà + private void SetCost(uint y, Single cost) + { + stream_Vector.Position = (y - 1) * (const_vtArrElemLength) + const_offset_Cost; + byte[] bb = BitConverter.GetBytes(cost); + stream_Vector.Write(bb, 0, 4); + } + + /// + /// Óñòàíàâëèâàåì ïðåäøåñòâóþùóþ òî÷êó previous ïóòè èç (X)->Y + /// Âûçûâàåòñÿ òîëüêî ìåæäó ìåòîäàìè BeginSolve è EndSolve + /// + /// êîíå÷íàÿ òî÷êà + /// êîíå÷íàÿ òî÷êà - 1 + private void SetPrev(uint y, uint previous) + { + stream_Vector.Position = (y - 1) * (const_vtArrElemLength) + const_offset_Next; + byte[] bb = BitConverter.GetBytes(previous); + stream_Vector.Write(bb, 0, 4); + } + + /// + /// Ïîëó÷àåì ïðåäøåñòâóþùóþ òî÷êó ïóòè èç (X)->Y + /// Âûçûâàåòñÿ òîëüêî ìåæäó ìåòîäàìè BeginSolve è EndSolve + /// + /// êîíå÷íàÿ òî÷êà + /// êîíå÷íàÿ òî÷êà - 1 + private uint GetPrev(uint y) + { + stream_Vector.Position = (y - 1) * (const_vtArrElemLength) + const_offset_Next; + byte[] bb = new byte[4]; + stream_Vector.Read(bb, 0, 4); + return BitConverter.ToUInt32(bb, 0); + } + + /// + /// Ïîëó÷àåì ïàìÿòü èëè ìåñòî íà äèñêå, à òàêæå + /// ïîäãîòàâëèâàåì ðåñóðñû äëÿ íàõîæäåíèÿ ïóòè + /// Âûçûâàåòñÿ ïåðåä ìåòîäîì Solve è âñåìè Get... ìåòîäàìè + /// + /// Ñ÷èòàåì â ïàìÿòè èëè íà äèñêå + /// fileName? åñëè inMemory = false + public void BeginSolve(bool inMemory, string fileName) + { + if (/*TrafficUse && */(TrafficStartTime == DateTime.MinValue)) + TrafficStartTime = DateTime.Now; + + TmcJamSvrErr = 0; + + if (stream_Vector != null) stream_Vector.Close(); + + if ((!inMemory) && (fileName == null)) throw new IOException("filename not specified"); + + if (inMemory) + stream_Vector = new MemoryStream(); + else + stream_Vector = new FileStream(fileName, FileMode.Create); + + stream_Vector.SetLength(this.graph_NodesCount * (const_vtArrElemLength)); + } + + /// + /// Âûñâîáîæäàåì ïàìÿòü è ðåñóðñû ïîñëå íàõîæäåíèÿ ïóòè + /// Âûçûâàåòñÿ ïîñëå ìåòîäà Solve è âñåõ Get... ìåòîäîâ + /// + public void EndSolve() + { + if (stream_Vector == null) throw new Exception("Call BeginSolve first"); + stream_Vector.Close(); + stream_Vector = null; + } + + public bool IsBeginSolveCalled { get { return stream_Vector != null; } } + + /// + /// Äîáàâî÷íàÿ îöåíêà è âðåìÿ äëÿ ôóíêöèè ñ ó÷åòîì òðàôèêà + /// [0] - îöåíêà, [1] - âðåìÿ + /// + /// Òåêóùàÿ îöåíêà îòðåçêà + /// Òåêóùåå âðåìÿ îòðåçêà + /// Òåêóùàÿ äëèíà îòðåçêà + /// ID ëèíèè + /// Îáðàòíîå íàïðàâëåíèå + /// Âðåìÿ îò íà÷àëà äâèæåíèÿ + /// [0] - îöåíêà, [1] - âðåìÿ + private Single[] CallTraffic(float currCost, float currTime, float currDist, uint line, bool inverse, float elapsedTime) + { + // can call by TMC code (.lines.tmc) or LINK_ID (.lines.id) or line_no (.lines.bin) + // now by .lines.bin + + float[] result = new float[] { currCost, currTime }; // in minutes {by speed max, by speed normal} + // float speed = currDist / currTime * 60 / 1000; + + if (!TrafficUse) + return result; + + TLineFlags flags = GetLineFlags(line); + if (!flags.IsTMC) + return result; + + if ((!TrafficUseHistory) && (elapsedTime > traffic_CurrentTimeout)) + return result; + + byte speed = 0; + if (TrafficUseCurrent) + { + if (elapsedTime <= traffic_CurrentTimeout) + speed = CallTMCJamServer(line, inverse, true); + else if (TrafficUseHistory) + speed = CallTMCJamServer(line, inverse, false); + } + else if (TrafficUseHistory) + { + speed = CallTMCJamServer(line, inverse, false); + }; + + if (speed == 0) // no information + return result; + + if (speed == 0xFF) // road closed = 255 + return new Single[] { 10080, 10080 }; // 7 days + + Single spMpM = speed * 1000 / 60; // meters per minute + Single tM = currDist / spMpM; // time in minutes + return new Single[] { tM, tM }; + + // int[] lids = GetLinesLinkIDs(new uint[] { line }); + + //_TrafficStartTime + } + + /// + /// Ïîëó÷àåì èíôîðìàöèþ î òåêóùèõ ñêîðîñòÿõ íà çàäàííîé äîðîãå + /// + /// + /// + /// + /// + private byte CallTMCJamServer(uint line, bool inverse, bool live) + { + if (this.TmcJamSvrCfg == null) return 0; + if (this.TmcJamSvrCfg.RegionID == 0) return 0; + if (this.TmcJamSvrCfg.Port == 0) return 0; + + if (TmcJamSvrErr == 3) return 0; // ïûòàåìñÿ ïîëó÷èòü ïðîáêè òîëüêî 3 ðàçà äëÿ òåêóùåãî ðàñ÷åòà + // ñ÷åò÷èê ñáðàñûâàåòñÿ â BeginSolve + + try + { + System.Net.Sockets.TcpClient cl = new System.Net.Sockets.TcpClient(); + cl.Connect(TmcJamSvrCfg.Server, TmcJamSvrCfg.Port); + cl.ReceiveTimeout = 500; + string cmd = String.Format("JAMTRAFFIC,GET,{0},{1},{2}\r\n", live ? "LIVE" : "HISTORY", TmcJamSvrCfg.RegionID, (int)line); + byte[] ba = System.Text.Encoding.ASCII.GetBytes(cmd); + cl.Client.Send(ba); + + byte[] buff = new byte[128]; + int read = cl.GetStream().Read(buff, 0, buff.Length); + cl.Client.Close(); + string txt = System.Text.Encoding.GetEncoding(1251).GetString(buff, 0, read).Trim(); + if (txt.IndexOf("JAMTRAFFIC,GET") == 0) + { + string[] splt = txt.Split(new string[] { "," }, StringSplitOptions.None); + if (!inverse) + return byte.Parse(splt[5]); // forward + else + return byte.Parse(splt[6]); // backward + }; + } + catch + { + TmcJamSvrErr++; + }; + + return 0; + } + + /// + /// Ðàñ÷åò ïóòè èç òî÷åê starts â òî÷êó end + /// + /// Òî÷êè ñòàðòà + /// Òî÷êà íàçíà÷åíèÿ + public void SolveDeikstra(uint[] starts, uint end) + { + Stream tmp_g = stream_Graph; + Stream tmp_i = stream_Index; + stream_Graph = stream_Graph_R; + stream_Index = stream_Index_R; + + System.Threading.Mutex mtx_g = stream_Graph_Mtx; + System.Threading.Mutex mtx_i = stream_Index_Mtx; + stream_Graph_Mtx = stream_Graph_R_Mtx; + stream_Index_Mtx = stream_Index_R_Mtx; + + try + { + SolveDeikstra(end, starts, true); + } + catch (Exception ex) // try to map back + { + stream_Graph = tmp_g; + stream_Index = tmp_i; + + stream_Graph_Mtx = mtx_g; + stream_Index_Mtx = mtx_i; + + throw ex; + }; + + // map back + stream_Graph = tmp_g; + stream_Index = tmp_i; + + stream_Graph_Mtx = mtx_g; + stream_Index_Mtx = mtx_i; + } + + /// + /// Ðàñ÷åò ïóòè èç òî÷êè start âî âñå èëè â êàæäóþ èç ends + /// + /// Òî÷êà ñòàðòà + /// Òî÷êè íàçíà÷åíèÿ + public void SolveDeikstra(uint start, uint[] ends) + { + SolveDeikstra(start, ends, false); + } + + // + /// Ðàñ÷åò ïóòè èç òî÷êè start âî âñå èëè â êàæäóþ èç ends + /// + /// Òî÷êà ñòàðòà + /// Òî÷êà íàçíà÷åíèÿ + public void SolveDeikstra(uint start, uint end) + { + SolveDeikstra(start, new uint[] { end }, false); + } + + /// + /// Ðàñ÷åò ïóòè èç òî÷êè start âî âñå èëè â êàæäóþ èç ends + /// + /// Òî÷êà ñòàðòà + /// Òî÷êè íàçíà÷åíèÿ + /// Èñïîëüçîâàòü íàõîæäåíèå ïóòè îò îáðàòíîãî + public void SolveDeikstra(uint start, uint[] ends, bool reversed) + { + SetRouteDistance(start, const_maxError); // can be ERROR + + if (stream_Vector == null) throw new Exception("Call BeginSolve first"); + calc_Reversed = reversed; + + PointF start_latlon = GetNodeLatLon(start); + + uint[] _n; Single[] _c; Single[] _d; Single[] _t; uint[] _l; byte[] _r; + + List togoList = new List(); + togoList.Add(start); + + List togoHeurist = new List(); + togoHeurist.Add(0); + + List wasList = new List(); + + List finishList = new List(); + if (ends != null) finishList.AddRange(ends); + int founded = 0; + + while (togoList.Count > 0) + { + // Áëîê îïòèìèçàöèè ((dkxce)) + // âûáèðàåì íàèáëèæàéøóþ òî÷êó ê íà÷àëó èç âñåõ êîòîðûå ïðåäñòîèò ïðîéòè ïî îöåíêå + // ìîæíî ñêàçàòü ÷òî â êàæäîé òî÷êå îïòèìàëüíûé ìàðøðóò èìåííî äëÿ ýòîé òî÷êè + float heuristValue = float.MaxValue; + uint curr_node = 0; + int index = -1; + for (int i = 0; i < togoList.Count; i++) // select closest point to yy + if (togoHeurist[i] < heuristValue) + { + heuristValue = togoHeurist[i]; + curr_node = togoList[i]; + index = i; + }; + + togoList.RemoveAt(index); // remove closest point from togoList + togoHeurist.RemoveAt(index); + + wasList.Add(curr_node); // add point to wasList + if (SelectNode(curr_node, out _n, out _c, out _d, out _t, out _l, out _r) > 0) + { + Single curr_cost_xi = start == curr_node ? 0 : GetCost(curr_node); + Single curr_dist_xi = start == curr_node ? 0 : GetRouteDistance(curr_node, curr_node); + Single curr_time_xi = start == curr_node ? 0 : GetRouteTime(curr_node, curr_node); + for (uint next_node_i = 0; next_node_i < _n.Length; next_node_i++) + { + uint next_node = _n[next_node_i]; + // skip logic here + if (SkipGoLogic(_l[next_node_i], Math.Min(curr_dist_xi, heuristValue))) continue; + if (wasList.Contains(next_node)) continue; + + bool update = false; + + Single[] ctctr = CallTraffic(_c[next_node_i], _t[next_node_i], _d[next_node_i], _l[next_node_i], _r[next_node_i] == 1 ? true : false, curr_time_xi); + Single cost_from_st = curr_cost_xi + ctctr[0]; // by speed max (in minutes) + Single dist_from_st = curr_dist_xi + _d[next_node_i]; + Single time_from_st = curr_time_xi + ctctr[1]; // by speed normal (in minutes) + + int index_in_togo = togoList.IndexOf(next_node); + if (index_in_togo < 0) + { + index_in_togo = togoList.Count; + togoList.Add(next_node); + togoHeurist.Add(0); + update = true; + }; + + switch (calc_minBy) + { + case MinimizeBy.Cost: + Single xyc = start == next_node ? 0 : GetCost(next_node); + update = update || (cost_from_st < xyc); + heuristValue = cost_from_st; + break; + case MinimizeBy.Dist: + Single xyd = start == next_node ? 0 : GetRouteDistance(next_node, next_node); + update = update || (dist_from_st < xyd); + heuristValue = dist_from_st; + break; + case MinimizeBy.Time: + Single xyt = start == next_node ? 0 : GetRouteTime(next_node, next_node); + update = update || (time_from_st < xyt); + heuristValue = time_from_st; + break; + }; + + if (update) + { + SetCost(next_node, cost_from_st); + SetPrev(next_node, curr_node); + SetRouteDistance(next_node, dist_from_st); + SetRouteTime(next_node, time_from_st); + + togoHeurist[index_in_togo] = heuristValue; + }; + }; + }; + if (finishList.Count > 0) + { + if (finishList.Contains(curr_node)) + founded++; + if (founded == finishList.Count) + togoList.Clear(); + }; + }; + + return; + } + + /// + /// Ðàñ÷åò ïóòè èç òî÷êè start â òî÷êó end + /// ïî Àëãîðèòìó A* + /// + /// Òî÷êà ñòàðòà + /// Òî÷êà êîíöà + public void SolveAstar(uint start, uint end) + { + SolveAstar(start, end, false); + } + + /// + /// Ðàñ÷åò ïóòè èç òî÷êè start â òî÷êó end îò êîíöà + /// ïî Àëãîðèòìó A* îò êîíöà + /// + /// Òî÷êà ñòàðòà + /// Òî÷êà êîíöà + public void SolveAstarRev(uint start, uint end) + { + Stream tmp_g = stream_Graph; + Stream tmp_i = stream_Index; + stream_Graph = stream_Graph_R; + stream_Index = stream_Index_R; + + System.Threading.Mutex mtx_g = stream_Graph_Mtx; + System.Threading.Mutex mtx_i = stream_Index_Mtx; + stream_Graph_Mtx = stream_Graph_R_Mtx; + stream_Index_Mtx = stream_Index_R_Mtx; + + try + { + SolveAstar(end, start, true); + } + catch (Exception ex) // try to map back + { + stream_Graph = tmp_g; + stream_Index = tmp_i; + + stream_Graph_Mtx = mtx_g; + stream_Index_Mtx = mtx_i; + throw ex; + }; + + // map back + stream_Graph = tmp_g; + stream_Index = tmp_i; + + stream_Graph_Mtx = mtx_g; + stream_Index_Mtx = mtx_i; + } + + // Àëãîðèòì ïîèñêà A* + // http://ru.wikipedia.org/wiki/%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%BF%D0%BE%D0%B8%D1%81%D0%BA%D0%B0_A* + /// + /// Ðàñ÷åò ïóòè èç òî÷êè start â òî÷êó end + /// ïî Àëãîðèòìó A* + /// + /// start + /// end + /// Èñïîëüçîâàòü íàõîæäåíèå ïóòè îò îáðàòíîãî + private void SolveAstar(uint start, uint end, bool reversed) + { + SetRouteDistance(start, const_maxError); // can be ERROR + + if (stream_Vector == null) throw new Exception("Call BeginSolve first"); + calc_Reversed = reversed; + + PointF first_node_latlon = GetNodeLatLon(start); + PointF last_node_latlon = GetNodeLatLon(end); + + uint[] _n; Single[] _c; Single[] _d; Single[] _t; uint[] _l; byte[] _r; + + float heuristValue = Utils.GetLengthMeters(first_node_latlon.Y, first_node_latlon.X, last_node_latlon.Y, last_node_latlon.X, false); + if (calc_minBy == MinimizeBy.Time) heuristValue = heuristValue / 1000; // 60 kmph average speed + + List togoList = new List(); + togoList.Add(start); + + List togoHeurist = new List(); + togoHeurist.Add(heuristValue); + + List wasList = new List(); + + while (togoList.Count > 0) + { + float curr_heuVal = float.MaxValue; + uint curr_node = 0; + int index = -1; + for (int i = 0; i < togoList.Count; i++) // select closest point to yy + if (togoHeurist[i] < curr_heuVal) + { + curr_heuVal = togoHeurist[i]; + curr_node = togoList[i]; + index = i; + }; + + // added 24.02.2015 if all nodes in list are nearest + if (index < 0) // select first closest point to yy + { + curr_heuVal = togoHeurist[0]; + curr_node = togoList[0]; + index = 0; + }; + + togoList.RemoveAt(index); // remove closest point from togoList + togoHeurist.RemoveAt(index); + + if (curr_node == end) return; // !!! DONE !!! // end node found + + wasList.Add(curr_node); // remove closest point from togoList + if (SelectNode(curr_node, out _n, out _c, out _d, out _t, out _l, out _r) > 0) + { + Single curr_cost_xi = start == curr_node ? 0 : GetCost(curr_node); + Single curr_dist_xi = start == curr_node ? 0 : GetRouteDistance(curr_node, curr_node); + Single curr_time_xi = start == curr_node ? 0 : GetRouteTime(curr_node, curr_node); + + for (uint next_node_i = 0; next_node_i < _n.Length; next_node_i++) + { + uint next_node = _n[next_node_i]; + // skip logic here + if (SkipGoLogic(_l[next_node_i], Math.Min(curr_dist_xi, curr_heuVal))) continue; + if (wasList.Contains(next_node)) continue; + + bool update = false; + + Single[] ctctr = CallTraffic(_c[next_node_i], _t[next_node_i], _d[next_node_i], _l[next_node_i], _r[next_node_i] == 1 ? true : false, curr_time_xi); + Single cost_from_st = curr_cost_xi + ctctr[0]; // by speed max (in minutes) + Single dist_from_st = curr_dist_xi + _d[next_node_i]; + Single time_from_st = curr_time_xi + ctctr[1]; // by speed normal (in minutes) + + PointF next_node_latlon = GetNodeLatLon(next_node); + float next_node_dist_to_end = Utils.GetLengthMeters(next_node_latlon.Y, next_node_latlon.X, last_node_latlon.Y, last_node_latlon.X, false); + + int index_in_togo = togoList.IndexOf(next_node); + if (index_in_togo < 0) + { + index_in_togo = togoList.Count; + togoList.Add(next_node); + togoHeurist.Add(0); + update = true; + } + else + { + switch (calc_minBy) + { + case MinimizeBy.Cost: update = cost_from_st < GetCost(next_node); break; + case MinimizeBy.Dist: update = dist_from_st < GetRouteDistance(next_node, next_node); break; + case MinimizeBy.Time: update = time_from_st < GetRouteTime(next_node, next_node); break; + }; + }; + + if (update) + { + SetCost(next_node, cost_from_st); + SetPrev(next_node, curr_node); + SetRouteDistance(next_node, dist_from_st); + SetRouteTime(next_node, time_from_st); + + if (calc_minBy == MinimizeBy.Time) + { + float fl = time_from_st + next_node_dist_to_end / 1000; + if (float.IsNaN(fl)) + { + + }; + togoHeurist[index_in_togo] = fl; + } + else + { + float fl = dist_from_st + next_node_dist_to_end; + if (float.IsNaN(fl)) + { + + }; + togoHeurist[index_in_togo] = fl; + }; + }; + }; + }; + }; + + return; + } + + /// + /// Logic to skip point (GoThrough, GoExcept) + /// Ïðîâåðÿåì ñóùåñòâóåò ëè çàïðåò íà ïðîåçä ïî äàííîé äîðîãå + /// + /// + /// + private bool SkipGoLogic(uint line, float distFromStartOrToEndinMeters) + { + // distTofinishInMeters failed + + // skip logic here + + // GoExcept // åñëè äâèæåíèå ïî ýòîé ëèíèè ïîä çàïðåòîì â óñëîâèÿõ + if (goExcept.Contains(line)) + return true; + + // GoThrough + if (((goThrough != null) && (goThrough.Length == 16)) || (AvoidLowRouteLevel)) + { + TLineFlags flags = GetLineFlags(line); + if (flags.HasAttributes) // åñëè ó ëèíèè åñòü àòðèáóòèâíàÿ èíôîðìàöèÿ + { + byte[][] latta = GetLinesAttributes(new uint[] { line }); + if ((goThrough != null) && (goThrough.Length == 16)) + { + if (latta != null) + { + // bit mask + // ñìîòðèì êàêèå áèòû îáîçíà÷åíû â óñëîâèÿõ è åñëè îíè óêàçàíû, + // ñìîòðè îáîçíà÷åíû ëè îíè â àòðèáóòèâíîé èíôîðìàöèè + for (byte byt = 0; byt <= 4; byt++) // 4 last + for (byte bit = 0; bit < 8; bit++) + if (LA.Bit(goThrough, byt, bit) && LA.Bit(latta[0], byt, bit)) + return true; + // less than + // ñìîòðèì êàêèå çíà÷åíèÿ óêàçàíû äëÿ ñðàâíåíèÿ â óñëîâèÿõ + // ñìîòðèì êàêèå çíà÷åíèÿ åñòü â àòðèáóòèâíîé èíôîðìàöèè + // ñðàâíèâàåì + for (byte byt = 7; byt <= 12; byt++) + if ((goThrough[byt] > 0) && (latta[0][byt] > 0) && (goThrough[byt] > latta[0][byt])) + return true; + + if (goThrough[15] > 0) + { + byte RouteLevel = (byte)(latta[0][15] & 7); + byte throughLvl = (byte)(goThrough[15] & 7); + if ((throughLvl > 0) && (RouteLevel > 0) && (throughLvl >= RouteLevel)) + return true; + }; + }; + }; + // AvoidLow + if ((avoidLowRouteLevel) && (distFromStartOrToEndinMeters >= 5000) && (latta != null) && ((latta[0][15] & 7) < 2)) + return true; + }; + }; + + return false; + } + + /// + /// Ïîëó÷àåì êîîðäèíàòû óçëà + /// + /// íîìåð óçëà + /// Lat Lon + public PointF GetNodeLatLon(uint node) + { + if (node == 0) throw new OverflowException("Node must be > 0"); + + byte[] latlon = new byte[8]; + if (stream_Geo_Mtx != null) stream_Geo_Mtx.WaitOne(); + stream_Geo.Position = header_RMPOINTNLL0.Length + 4 + 8 * (node - 1); + stream_Geo.Read(latlon, 0, 8); + if (stream_Geo_Mtx != null) stream_Geo_Mtx.ReleaseMutex(); + return new PointF(BitConverter.ToSingle(latlon, 4), BitConverter.ToSingle(latlon, 0)); + } + + /// + /// Ïîëó÷àåì âåêòîð ïðîìåæóòî÷íûõ òî÷åê ïóòè èç (X)->Y + /// Âûçûâàåòñÿ òîëüêî ìåæäó ìåòîäàìè BeginSolve è EndSolve + /// + /// óçåë íà÷àëà ïóòè + /// óçåë êîíöà ïóòè + /// íîìåðà ïðîìåæóòî÷íûõ óçëîâ + public uint[] GetRouteNodes(uint start, uint end) + { + uint y = calc_Reversed ? start : end; + + if (stream_Vector == null) throw new Exception("Call BeginSolve first"); + + if (y == 0) return null; // NO WAY + if (GetCost(y) == 0) return new uint[0]; // ALREADY + + uint intermediate = y; + List arr = new List(); + while (((intermediate = GetPrev(intermediate)) > 0) && (intermediate != start)) + arr.Add(intermediate); + uint[] a = arr.ToArray(); + if (this.calc_Reversed) return a; + + Array.Reverse(a); + return a; + } + + /// + /// Âîçðàùàåò íîìåðà ëèíèé ìàðøðóòà + /// + /// íà÷ + /// ïðîìåæ + /// êîí + /// ñïèñîê ëèíèé + public uint[] GetRouteLines(uint start, uint[] way, uint end, out float[] linesDist, out float[] linesTime) + { + uint[] arr = new uint[way.Length + 1]; + linesDist = new float[way.Length + 1]; + linesTime = new float[way.Length + 1]; + + uint[] _n; float[] _c; float[] _d; float[] _t; uint[] _l; byte[] _r; + + if (way.Length > 0) + { + SelectNode(start, out _n, out _c, out _d, out _t, out _l, out _r); + for (int i = 0; i < _n.Length; i++) + if (_n[i] == way[0]) + { + arr[0] = _l[i]; + linesDist[0] = _d[i]; + linesTime[0] = _t[i]; + }; + + for (int x = 1; x < way.Length; x++) + { + SelectNode(way[x - 1], out _n, out _c, out _d, out _t, out _l, out _r); + for (int i = 0; i < _n.Length; i++) + if (_n[i] == way[x]) + { + arr[x] = _l[i]; + linesDist[x] = _d[i]; + linesTime[x] = _t[i]; + }; + }; + SelectNode(way[way.Length - 1], out _n, out _c, out _d, out _t, out _l, out _r); + for (int i = 0; i < _n.Length; i++) + if (_n[i] == end) + { + arr[arr.Length - 1] = _l[i]; + linesDist[arr.Length - 1] = _d[i]; + linesTime[arr.Length - 1] = _t[i]; + }; + } + else + { + SelectNode(start, out _n, out _c, out _d, out _t, out _l, out _r); + for (int i = 0; i < _n.Length; i++) + if (_n[i] == end) + { + arr[0] = _l[i]; + linesDist[0] = _d[i]; + linesTime[0] = _t[i]; + }; + }; + + return arr; + } + + /// + /// Âîçðàùàåò íîìåðà ëèíèé ìàðøðóòà + /// + /// íà÷ + /// ïðîìåæ + /// êîí + /// ñïèñîê ëèíèé + public uint[] GetRouteLines(uint start, uint[] way, uint end) + { + uint[] arr = new uint[way.Length + 1]; + + uint[] _n; float[] _c; float[] _d; float[] _t; uint[] _l; byte[] _r; + + if (way.Length > 0) + { + SelectNode(start, out _n, out _c, out _d, out _t, out _l, out _r); + for (int i = 0; i < _n.Length; i++) + if (_n[i] == way[0]) + { + arr[0] = _l[i]; + }; + + for (int x = 1; x < way.Length; x++) + { + SelectNode(way[x - 1], out _n, out _c, out _d, out _t, out _l, out _r); + for (int i = 0; i < _n.Length; i++) + if (_n[i] == way[x]) + { + arr[x] = _l[i]; + }; + }; + SelectNode(way[way.Length - 1], out _n, out _c, out _d, out _t, out _l, out _r); + for (int i = 0; i < _n.Length; i++) + if (_n[i] == end) + { + arr[arr.Length - 1] = _l[i]; + }; + } + else + { + SelectNode(start, out _n, out _c, out _d, out _t, out _l, out _r); + for (int i = 0; i < _n.Length; i++) + if (_n[i] == end) + { + arr[0] = _l[i]; + }; + + }; + + return arr; + } + + /// + /// Ïîëó÷àåì âåêòîð êîîðäèíàò òî÷åê + /// + /// Íà÷àëüíàÿ òî÷êà + /// Ïðîìåæóòî÷íûå òî÷êè + /// Êîíå÷íàÿ òî÷êà + /// + public PointF[] GetRouteVector(uint start, uint[] way, uint end) + { + List ww = new List(); + ww.Add(start); + ww.AddRange(way); + ww.Add(end); + + List vec = new List(); + + uint[] _n; float[] _c; float[] _d; float[] _t; uint[] _l; byte[] _r; + ushort segments; int pos; byte flags; uint node1; uint node2; + + float prev_dist = GetRouteDistance(ww[0], ww[0]); + if (prev_dist >= const_maxValue) prev_dist = 0; + + for (int x = 0; x < ww.Count - 1; x++) + { + SelectNode(ww[x], out _n, out _c, out _d, out _t, out _l, out _r); + float curr_d = GetRouteDistance(ww[x + 1], ww[x + 1]); + float delt_d = curr_d - prev_dist; // for out line + for (int i = 0; i < _n.Length; i++) + if ((_n[i] == ww[x + 1]) && (Math.Abs(delt_d - _d[i]) < 1)) + { + GetLine(_l[i], out segments, out pos, out flags, out node1, out node2); + PointF[] pts = GetLineSegments(_l[i], pos, segments, _r[i] == 1, false); + vec.Add(pts[0]); + for (int si = 1; si < pts.Length - 1; si++) vec.Add(pts[si]); + if (x == (ww.Count - 2)) + vec.Add(pts[pts.Length - 1]); + }; + prev_dist = curr_d; + }; + + ww.Clear(); + + return vec.ToArray(); + } + + /// + /// Ïîëó÷àåì âåêòîð êîîðäèíàò òî÷åê ñ ïðèâÿçêîé + /// ê óçëàì è ëèíèÿì (âåðøèíàì è ðåáðàì ãðàôà) + /// äëÿ äåòàëèçàöèè è îïèñàíèÿ ìàðøðóòà + /// + /// Íà÷àëüíàÿ òî÷êà + /// Ïðîìåæóòî÷íûå òî÷êè + /// Êîíå÷íàÿ òî÷êà + /// + public PointFL[] GetRouteVectorWNL(uint start, uint[] way, uint end) + { + List ww = new List(); + ww.Add(start); + ww.AddRange(way); + ww.Add(end); + + List vec = new List(); + + uint[] _n; float[] _c; float[] _d; float[] _t; uint[] _l; byte[] _r; + ushort segments; int pos; byte fflags; uint node1; uint node2; + + float prev_dist = GetRouteDistance(ww[0], ww[0]); + if (prev_dist >= const_maxValue) prev_dist = 0; + + for (int x = 0; x < ww.Count - 1; x++) + { + SelectNode(ww[x], out _n, out _c, out _d, out _t, out _l, out _r); + float curr_d = GetRouteDistance(ww[x + 1], ww[x + 1]); + float delt_d = curr_d - prev_dist; // for out line + for (int i = 0; i < _n.Length; i++) + if ((_n[i] == ww[x + 1]) && (Math.Abs(delt_d - _d[i]) < 1)) + { + float curr_s = (float)((_d[i] / _t[i]) * 60.0 / 1000.0); + GetLine(_l[i], out segments, out pos, out fflags, out node1, out node2); + PointF[] pts = GetLineSegments(_l[i], pos, segments, _r[i] == 1, false); + vec.Add(new PointFL(pts[0], ww[x], _l[i], curr_s)); + for (int si = 1; si < pts.Length - 1; si++) vec.Add(new PointFL(pts[si], 0, _l[i], curr_s)); + if (x == (ww.Count - 2)) + vec.Add(new PointFL(pts[pts.Length - 1], end, _l[i], curr_s)); // was last 0 13.12.12 + }; + prev_dist = curr_d; + }; + + ww.Clear(); + + return vec.ToArray(); + } + + /// + /// Ïîëó÷àåì ëèíèþ ïî íîìåðó + /// + /// íîìåð ëèíèè + /// ÷èñëî ñåãìåíòîâ ëèíèè + /// ïîçèöèÿ ïåðâîãî ñåãìåíòà â ôàéëå ñåãìåíòîâ + /// ôëàãè ëèíèè + /// òî÷êà íà÷àëà ëèíèè + /// òî÷êà êîíöà ëèíèè + private void GetLine(uint line, out ushort segments, out int pos, out byte flags, out uint nodeStart, out uint nodeEnd) + { + byte[] ba = new byte[15]; + if (stream_Lines_Mtx != null) stream_Lines_Mtx.WaitOne(); + stream_Lines.Position = header_RMLINES.Length + 4 + const_LineRecordLength * (line - 1); + stream_Lines.Read(ba, 0, 15); + if (stream_Lines_Mtx != null) stream_Lines_Mtx.ReleaseMutex(); + segments = BitConverter.ToUInt16(ba, 0); + pos = BitConverter.ToInt32(ba, 2); + flags = ba[6]; + nodeStart = BitConverter.ToUInt32(ba, 7); + nodeEnd = BitConverter.ToUInt32(ba, 11); + } + + public bool GetLineLT(uint line, out float length, out float time) + { + length = float.MaxValue; + time = float.MaxValue; + + ushort s; int p; byte f; uint st; uint fi; + GetLine(line, out s, out p, out f, out st, out fi); + uint[] _n; Single[] _c; Single[] _d; Single[] _t; uint[] _l; byte[] _r; + SelectNode(st, out _n, out _c, out _d, out _t, out _l, out _r); + for (uint i = 0; i < _n.Length; i++) + if (_n[i] == fi) + { + length = _d[i]; + time = _t[i]; + return true; + }; + return false; + } + + public bool GetLineLT(uint line, out float length, out float time, out ushort segments) + { + length = float.MaxValue; + time = float.MaxValue; + + int p; byte f; uint st, fi; + GetLine(line, out segments, out p, out f, out st, out fi); + uint[] _n; Single[] _c; Single[] _d; Single[] _t; uint[] _l; byte[] _r; + SelectNode(st, out _n, out _c, out _d, out _t, out _l, out _r); + for (uint i = 0; i < _n.Length; i++) + if (_n[i] == fi) + { + length = _d[i]; + time = _t[i]; + return true; + }; + return false; + } + + /// + /// Ïîëó÷àåì ëèíèþ ïî íîìåðó + /// + /// íîìåð ëèíèè + /// ÷èñëî ñåãìåíòîâ ëèíèè + /// ïîçèöèÿ ïåðâîãî ñåãìåíòà â ôàéëå ñåãìåíòîâ + /// ôëàãè ëèíèè + /// òî÷êà íà÷àëà ëèíèè + /// òî÷êà êîíöà ëèíèè + private void GetLine(uint line, out ushort segments, out int pos, out TLineFlags flags, out uint nodeStart, out uint nodeEnd) + { + byte bFlags; + GetLine(line, out segments, out pos, out bFlags, out nodeStart, out nodeEnd); + flags = new TLineFlags(bFlags, nodeStart, nodeEnd); + } + + /// + /// Ôëàãè ëèíèè + /// + /// íîìåð ëèíèè + /// + public TLineFlags GetLineFlags(uint line) + { + byte[] ba = new byte[15]; + if (stream_Lines_Mtx != null) stream_Lines_Mtx.WaitOne(); + stream_Lines.Position = header_RMLINES.Length + 4 + const_LineRecordLength * (line - 1); + stream_Lines.Read(ba, 0, 15); + if (stream_Lines_Mtx != null) stream_Lines_Mtx.ReleaseMutex(); + return new TLineFlags(ba[6], BitConverter.ToUInt32(ba, 7), BitConverter.ToUInt32(ba, 11)); + } + + /// + /// Ïîëó÷àåì âñå îòðåçêè ëèíèè ïî íîìåðó + /// + /// íîìåð ëèíèè + /// ïîçèöèÿ ïåðâîãî ñåãìåíòà â ôàéëå ñåãìåíòîâ + /// ÷èñëî ñåãìåíòîâ â ëèíèè + /// ðàçâåðíóòü + /// íå äîáàâëÿòü ïåðâûé ýëåìåíò + /// âåêòîð ëèíèè + private PointF[] GetLineSegments(uint line, int pos, ushort segments, bool reverse, bool skip_first) + { + List arr = new List(); + + if (stream_LinesSegments_Mtx != null) stream_LinesSegments_Mtx.WaitOne(); + stream_LinesSegments.Position = pos; + byte[] ba = new byte[const_SegmRecordLength]; + for (int i = 0; i < segments; i++) + { + stream_LinesSegments.Read(ba, 0, ba.Length); + uint line_no = BitConverter.ToUInt32(ba, 0); + ushort segm = BitConverter.ToUInt16(ba, 4); + float lat0 = BitConverter.ToSingle(ba, 6); + float lon0 = BitConverter.ToSingle(ba, 10); + float lat1 = BitConverter.ToSingle(ba, 14); + float lon1 = BitConverter.ToSingle(ba, 18); + //float k = BitConverter.ToSingle(ba, 22); + //float b = BitConverter.ToSingle(ba, 26); + + if (i == 0) arr.Add(new PointF(lon0, lat0)); + arr.Add(new PointF(lon1, lat1)); + }; + if (stream_LinesSegments_Mtx != null) stream_LinesSegments_Mtx.ReleaseMutex(); + if (reverse) arr.Reverse(); + if (skip_first) arr.RemoveAt(0); + return arr.ToArray(); + } + + /// + /// Ïîëó÷àåì âñå îòðåçêè ëèíèè ïî íîìåðó + /// (èñïîëüçóåòñÿ äëÿ ñîáèðàíèÿ âåêòîðà ìàðøðóòà) + /// + /// íîìåð ëèíèè + /// ðàçâåðíóòü + /// íå äîáàâëÿòü ïåðâûé ýëåìåíò + /// âåêòîð ëèíèè + private PointF[] GetLineSegments(uint line, bool reverse, bool skip_first) + { + + byte[] ba = new byte[15]; + if (stream_Lines_Mtx != null) stream_Lines_Mtx.WaitOne(); + stream_Lines.Position = header_RMLINES.Length + 4 + const_LineRecordLength * (line - 1); + stream_Lines.Read(ba, 0, 15); + if (stream_Lines_Mtx != null) stream_Lines_Mtx.ReleaseMutex(); + ushort segments = BitConverter.ToUInt16(ba, 0); + int pos = BitConverter.ToInt32(ba, 2); + bool oneway = ba[6] == 1; + uint node1 = BitConverter.ToUInt32(ba, 7); + uint node2 = BitConverter.ToUInt32(ba, 11); + return GetLineSegments(line, pos, segments, reverse, skip_first); + } + + /// + /// Ïîëó÷àåì LINK_ID ëèíèé èç ôàéëà .lines.id + /// + /// íîìåðà ëèíèé + /// LINK_ID[] + public int[] GetLinesLinkIDs(uint[] lines) + { + int[] res = new int[lines.Length]; + FileStream fs = new FileStream(stream_FileMain + ".lines.id", FileMode.Open, FileAccess.Read); + byte[] ba = new byte[header_RMLINKIDS.Length]; + fs.Read(ba, 0, ba.Length); + if (System.Text.Encoding.GetEncoding(1251).GetString(ba) != "RMLINKIDS") + { + fs.Close(); + throw new IOException("Unknown file format:\r\n" + stream_FileMain + ".lines.id"); + }; + for (int i = 0; i < lines.Length; i++) + { + fs.Position = header_RMLINKIDS.Length + 4 + 4 * (lines[i] - 1); + ba = new byte[4]; + fs.Read(ba, 0, ba.Length); + res[i] = BitConverter.ToInt32(ba, 0); + }; + fs.Close(); + return res; + } + + public string AttributesToString(byte[] la) + { + if (la == null) return ""; + if (la.Length != 16) return ""; + string res = ""; + + // avg.. - average speed + // max.. - max speed + // lvl - level + // 1w - oneway + if ((la[00] & 0x01) > 0) res += (res.Length > 0 ? " " : "") + "ca"; // civilarea + if ((la[00] & 0x02) > 0) res += (res.Length > 0 ? " " : "") + "up"; // unpaved road + if ((la[00] & 0x04) > 0) res += (res.Length > 0 ? " " : "") + "cc"; // concrete + if ((la[00] & 0x08) > 0) res += (res.Length > 0 ? " " : "") + "st"; // stones + // if ((la[00] & 0x10) > 0) res += (res.Length > 0 ? " " : "") + "as"; // sand + // if ((la[00] & 0x20) > 0) res += (res.Length > 0 ? " " : "") + "tm"; // temporary + if ((la[00] & 0x40) > 0) res += (res.Length > 0 ? " " : "") + "tn"; // tonnel + if ((la[00] & 0x80) > 0) res += (res.Length > 0 ? " " : "") + "br"; // bridge + if ((la[01] & 0x01) > 0) res += (res.Length > 0 ? " " : "") + "db"; // drawbridge + if ((la[01] & 0x02) > 0) res += (res.Length > 0 ? " " : "") + "pt"; // pontoon + if ((la[01] & 0x04) > 0) res += (res.Length > 0 ? " " : "") + "ft"; // ferry + if ((la[01] & 0x08) > 0) res += (res.Length > 0 ? " " : "") + "rc"; // railcross + if ((la[01] & 0x10) > 0) res += (res.Length > 0 ? " " : "") + "wd"; // wade (brod) + // ?? + // ?? + // ?? + if ((la[02] & 0x01) > 0) res += (res.Length > 0 ? " " : "") + "r1"; // one line reverse + if ((la[02] & 0x02) > 0) res += (res.Length > 0 ? " " : "") + "aa"; // car only + if ((la[02] & 0x04) > 0) res += (res.Length > 0 ? " " : "") + "hw"; // highway + if ((la[02] & 0x08) > 0) res += (res.Length > 0 ? " " : "") + "tr"; // toll road + if ((la[02] & 0x10) > 0) res += (res.Length > 0 ? " " : "") + "nt"; // notrucks + if ((la[02] & 0x20) > 0) res += (res.Length > 0 ? " " : "") + "nm"; // no motorcycles + if ((la[02] & 0x40) > 0) res += (res.Length > 0 ? " " : "") + "na"; // no agro + if ((la[02] & 0x80) > 0) res += (res.Length > 0 ? " " : "") + "nw"; // no tows + if ((la[03] & 0x01) > 0) res += (res.Length > 0 ? " " : "") + "ct"; // customs + // skip + // skip + if ((la[03] & 0x08) > 0) res += (res.Length > 0 ? " " : "") + "rw"; // roadworks (repair) + // skip + // skip + if ((la[03] & 0x40) > 0) res += (res.Length > 0 ? " " : "") + "ns"; // no stop + if ((la[03] & 0x80) > 0) res += (res.Length > 0 ? " " : "") + "np"; // no parking + if ((la[04] & 0x01) > 0) res += (res.Length > 0 ? " " : "") + "nd"; // no dangerous + if ((la[04] & 0x02) > 0) res += (res.Length > 0 ? " " : "") + "ne"; // no explosives + if ((la[04] & 0x04) > 0) res += (res.Length > 0 ? " " : "") + "tl"; // traffic light + // skip + + // speed limit + byte SL = (byte)(la[15] & 0xF8); + if (SL > 0) res += (res.Length > 0 ? " max" : "max") + ((SL >> 3) * 5).ToString(); + + // route level + byte RL = (byte)(la[15] & 0x07); + if (RL > 0) res += (res.Length > 0 ? " lvl" : "lvl") + RL.ToString(); + + return res; + } + + /// + /// Ïîëó÷àåì LINE_ATTRIBUTES ëèíèé èç ôàéëà .lines.att + /// + /// íîìåðà ëèíèé + /// + public byte[][] GetLinesAttributes(uint[] lines) + { + //if (!File.Exists(stream_FileMain + ".lines.att")) return null; + if (stream_LAttr == null) return null; + if (stream_LAttr_Mtx != null) stream_LAttr_Mtx.WaitOne(); + + List res = new List(); + //FileStream fs = new FileStream(stream_FileMain + ".lines.att", FileMode.Open, FileAccess.Read); + Stream fs = stream_LAttr; + //byte[] ba = new byte[header_RMLATTRIB.Length]; + byte[] ba; + //fs.Read(ba, 0, ba.Length); + //if (System.Text.Encoding.GetEncoding(1251).GetString(ba) != "RMLATTRIB") + //{ + // fs.Close(); + // throw new IOException("Unknown file format:\r\n" + stream_FileMain + ".lines.att"); + //}; + for (int i = 0; i < lines.Length; i++) + { + fs.Position = header_RMLATTRIB.Length + 4 + 16 * (lines[i] - 1); + ba = new byte[16]; + fs.Read(ba, 0, ba.Length); + res.Add(ba); + }; + //fs.Close(); + + if (stream_LAttr_Mtx != null) stream_LAttr_Mtx.ReleaseMutex(); + return res.ToArray(); + } + + /// + /// Ïîëó÷àåì ìàðøðóò ìåæäó äâóìÿ óçëàìè ãðàôà + /// + /// start node + /// end node + /// Îò÷åò + public RouteResult GetRoute(uint nodeStart, uint nodeEnd, uint nodeStartReversed, uint nodeEndReversed) + { + RouteResult res = new RouteResult(); + res.nodeStart = nodeStart; + res.nodeEnd = nodeEnd; + res.nodes = new uint[0]; + res.lines = new uint[0]; + res.vector = new PointFL[0]; + + // nodeStart == nodeEnd ? 0 : ... - added 05.09.2013 + res.cost = nodeStart == nodeEnd ? 0 : GetRouteCost(nodeStart, nodeEnd); + res.length = nodeStart == nodeEnd ? 0 : GetRouteDistance(nodeStart, nodeEnd); + res.time = nodeStart == nodeEnd ? 0 : GetRouteTime(nodeStart, nodeEnd); + res.nodes = GetRouteNodes(nodeStart, nodeEnd); + res.shrinkStart = false; + res.shrinkEnd = false; + + //ÏÐÎÂÅÐßÅÌ íà ïðåäìåò, åñëè óæå ïðîåõàëèñü ïî ëèíèè + if (res.nodes.Length > 0) + { + if (res.nodes[res.nodes.Length - 1] == nodeEndReversed) + { + if (true) // åñëè oneway, òî ìàðøðóò íå ïðîéäåò ÷åðåç ýòó ëèíèþ â îáðàòíîì íàïðàâëåíèè + { + res.shrinkEnd = true; + res.nodeEnd = nodeEndReversed; + if (calc_Reversed) + { + res.shrinkEndCost = GetRouteCost(res.nodeEnd, res.nodeEnd); + res.cost -= GetRouteCost(res.nodeEnd, res.nodeEnd); + res.shrinkEndLength = GetRouteDistance(res.nodeEnd, res.nodeEnd); + res.length -= GetRouteDistance(res.nodeEnd, res.nodeEnd); + res.shrinkEndTime = GetRouteTime(res.nodeEnd, res.nodeEnd); + res.time -= GetRouteTime(res.nodeEnd, res.nodeEnd); + } + else + { + res.shrinkEndCost = res.cost - GetRouteCost(res.nodeEnd, res.nodeEnd); + res.cost = GetRouteCost(res.nodeEnd, res.nodeEnd); + res.shrinkEndLength = res.length - GetRouteDistance(res.nodeEnd, res.nodeEnd); + res.length = GetRouteDistance(res.nodeEnd, res.nodeEnd); + res.shrinkEndTime = res.time - GetRouteTime(res.nodeEnd, res.nodeEnd); + res.time = GetRouteTime(res.nodeEnd, res.nodeEnd); + }; + }; + }; + if (res.nodes[0] == nodeStartReversed) + { + //TLineFlags lf = new TLineFlags(0,0,0); // îäíîñòîðîííÿÿ? + //uint[] _n; float[] _c; float[] _d; float[] _t; uint[] _l; byte[] _r; + //SelectNode(nodeStartReversed, out _n, out _c, out _d, out _t, out _l, out _r); + //for (int i = 0; i < _n.Length; i++) + // if (_n[i] == (res.nodes.Length > 1 ? res.nodes[1] : nodeEnd)) + // { + // ushort seg; int pos; uint n1; uint n2; + // GetLine(_l[i], out seg, out pos, out lf, out n1, out n2); + // }; + //if (!lf.IsOneWay) // åñëè oneway, òî ìàðøðóò íå ïðîéäåò ÷åðåç ýòó ëèíèþ â îáðàòíîì íàïðàâëåíèè + if (true) // åñëè oneway, òî ìàðøðóò íå ïðîéäåò ÷åðåç ýòó ëèíèþ â îáðàòíîì íàïðàâëåíèè + { + res.shrinkStart = true; + res.nodeStart = nodeStartReversed; + if (calc_Reversed) + { + res.shrinkStartCost = res.cost - GetRouteCost(res.nodeStart, res.nodeStart); + res.cost = GetRouteCost(res.nodeStart, res.nodeStart); + res.shrinkStartLength = res.length - GetRouteDistance(res.nodeStart, res.nodeStart); + res.length = GetRouteDistance(res.nodeStart, res.nodeStart); + res.shrinkStartTime = res.time - GetRouteTime(res.nodeStart, res.nodeStart); + res.time = GetRouteTime(res.nodeStart, res.nodeStart); + } + else + { + res.shrinkStartCost = GetRouteCost(res.nodeStart, res.nodeStart); + res.cost -= GetRouteCost(res.nodeStart, res.nodeStart); + res.shrinkStartLength = GetRouteDistance(res.nodeStart, res.nodeStart); + res.length -= GetRouteDistance(res.nodeStart, res.nodeStart); + res.shrinkStartTime = GetRouteTime(res.nodeStart, res.nodeStart); + res.time -= GetRouteTime(res.nodeStart, res.nodeStart); + }; + }; + }; + if (res.shrinkStart || res.shrinkEnd) // óäàëÿåì ëèøíèå ðàçâîðîòû âíà÷àëå èëè â êîíöå, åñëè åñòü + { + List arr = new List(res.nodes); + if (res.shrinkStart && (arr.Count > 0)) arr.RemoveAt(0); + if (res.shrinkEnd && (arr.Count > 0)) arr.RemoveAt(arr.Count - 1); + res.nodes = arr.ToArray(); + res.lines = GetRouteLines(res.nodeStart, res.nodes, res.nodeEnd); + } + else + { + res.lines = GetRouteLines(nodeStart, res.nodes, nodeEnd); + }; + }; + + if (res.lines.Length == 0) + { + uint[] _n; float[] _c; float[] _d; float[] _t; uint[] _l; byte[] _r; + SelectNode(res.nodeStart, out _n, out _c, out _d, out _t, out _l, out _r); + for (int i = 0; i < _n.Length; i++) + if (_n[i] == res.nodeEnd) + res.lines = new uint[] { _l[i] }; + }; + res.vector = GetRouteVectorWNL(res.nodeStart, res.nodes, res.nodeEnd); + + return res; + } + + // Added 21.12.2021 where 1 line in route for WATER (allowLeftTurns/overtaking=yes) + /// + /// Ðàñ÷åò ìàðøðóòà, åñëè òî÷êà ñòàðòà è ôèíèøà íà 1 ëèíèè + /// + /// start node + /// end node + /// Îò÷åò + public RouteResult GetFullRouteOneLine(FindStartStopResult nodeStart, FindStartStopResult nodeEnd) + { + RouteResult res = new RouteResult(); + res.nodeStart = nodeStart.nodeN; + res.nodeEnd = nodeEnd.nodeN; + res.nodes = new uint[0]; + res.lines = new uint[] { nodeStart.line }; + res.vector = new PointFL[0]; + + res.cost = 0; + res.length = 0; + res.time = 0; + + res.shrinkStart = false; + res.shrinkEnd = false; + + ushort s; int p; byte f; uint st; uint fi; + GetLine(nodeStart.line, out s, out p, out f, out st, out fi); + PointF[] line = GetLineSegments(nodeStart.line, false, false); + + int ins = (nodeStart.nodeN == fi ? nodeStart.revers.Length : nodeStart.normal.Length) - 2; + int ine = (nodeEnd.nodeN == fi ? nodeEnd.revers.Length : nodeEnd.normal.Length) - 2; + int ind = ine - ins; + + nodeStart.normal = nodeStart.revers = new PointF[] { nodeStart.normal[0], nodeStart.normal[1] }; + nodeEnd.normal = nodeEnd.revers = new PointF[] { nodeEnd.normal[nodeEnd.normal.Length - 2], nodeEnd.normal[nodeEnd.normal.Length - 1] }; + + res.cost = 0; + res.length = 0; + res.time = 0; + + if (ind == 0) + { + res.length += Utils.GetLengthMeters(nodeStart.normal[1].Y, nodeStart.normal[1].X, nodeEnd.normal[0].Y, nodeEnd.normal[0].X, false); + }; + if (ind > 0) + { + res.vector = new PointFL[ind]; + for (int i = 0; i < res.vector.Length; i++) + { + res.vector[i] = new PointFL(line[i + ins], 0, nodeStart.line); + if(i > 0) res.length += Utils.GetLengthMeters(res.vector[i-1].Y, res.vector[i-1].X, res.vector[i].Y, res.vector[i].X, false); + }; + res.length += Utils.GetLengthMeters(nodeStart.normal[1].Y, nodeStart.normal[1].X, res.vector[0].Y, res.vector[0].X, false); + res.length += Utils.GetLengthMeters(res.vector[res.vector.Length - 1].Y, res.vector[res.vector.Length - 1].X, nodeEnd.normal[0].Y, nodeEnd.normal[0].X, false); + } + else if (ind < 0) + { + res.vector = new PointFL[-1 * ind]; + for (int i = 0; i < res.vector.Length; i++) + { + res.vector[i] = new PointFL(line[i + ine], 0, nodeStart.line); + if(i > 0) res.length += Utils.GetLengthMeters(res.vector[i-1].Y, res.vector[i-1].X, res.vector[i].Y, res.vector[i].X, false); + }; + Array.Reverse(res.vector); + res.length += Utils.GetLengthMeters(nodeStart.normal[1].Y, nodeStart.normal[1].X, res.vector[0].Y, res.vector[0].X, false); + res.length += Utils.GetLengthMeters(res.vector[res.vector.Length - 1].Y, res.vector[res.vector.Length - 1].X, nodeEnd.normal[0].Y, nodeEnd.normal[0].X, false); + }; + + res.length += nodeStart.distToLine + nodeEnd.distToLine; + res.cost = res.length; + res.time = (res.length / (float)1000.0) / (float)20.0 * (float)60.0; + + return res; + } + + // Added 21.12.2021 + /// + /// Ìåíÿåì ìåñòàìè èíôîðìàöèþ Normal è Reverse + /// + /// + private void ReplaceNormalAndReverse(ref FindStartStopResult ssr) + { + PointF[] tmp = ssr.revers; + ssr.revers = ssr.normal; + ssr.normal = tmp; + + uint tmu = ssr.nodeR; + ssr.nodeR = ssr.nodeN; + ssr.nodeN = tmu; + + float tmd = ssr.distToR; + ssr.distToR = ssr.distToN; + ssr.distToN = tmd; + } + + // Modified 21.12.2021 add (allowLeftTurns/overtaking=yes) + /// + /// Ïîëó÷àåì ìàðøðóò ìåæäó äâóìÿ óçëàìè ãðàôà + /// + /// start node + /// end node + /// óáèðàòü íåíóæíûå ðàçâîðîòû ïî êðàÿì + /// îïóñêàòü âûåçä íà äîðîãó è ñúåçä ÷åðåç âñòðå÷íóþ ïîëîñó + /// Îò÷åò + public RouteResult GetRouteFull(FindStartStopResult nodeStart, FindStartStopResult nodeEnd, bool shrinkStartStopIfNeed, bool allowLeftTurn) + { + RouteResult res = GetRoute(nodeStart.nodeN, nodeEnd.nodeN, shrinkStartStopIfNeed ? nodeStart.nodeR : 0, shrinkStartStopIfNeed ? nodeEnd.nodeR : 0); + if (shrinkStartStopIfNeed) + { + if (res.shrinkStart) ReverseStop(nodeStart); + if (res.shrinkEnd) ReverseStop(nodeEnd); + + // Added 21.12.2021 for one-line routing (WATER) + if (allowLeftTurn) + { + // âîçâðàùàåìñÿ â äðóãóþ ñòîðîíó ïî íà÷àëüíîé ëèíèè + bool tfs = (res.vector.Length > 1) && (res.vector[0].line == nodeStart.line) && (res.vector[0].line == res.vector[1].line) && (nodeStart.nodeN == res.vector[0].node); + // âîçâðàùàåìñÿ â äðóãóþ ñòîðîíó ïî êîíå÷íîé ëèíèè + bool tfe = (res.vector.Length > 1) && (res.vector[res.vector.Length - 1].line == nodeEnd.line) && (res.vector[res.vector.Length - 1].line == res.vector[res.vector.Length - 2].line) && (nodeEnd.nodeN == res.vector[res.vector.Length - 1].node); + + if (tfs) + { + float ll, lt; ushort ls; + GetLineLT(nodeStart.line, out ll, out lt, out ls); + ReplaceNormalAndReverse(ref nodeStart); + // minimize length & time + res.length -= ll; + res.time -= lt; + // remove fisrt line // + int shrinkes = res.vector.Length - (++ls); + PointFL[] shrinked = new PointFL[shrinkes]; + if (shrinkes > 0) Array.Copy(res.vector, ls, shrinked, 0, shrinked.Length); + res.vector = shrinked; + }; + + if (tfe) + { + float ll, lt; ushort ls; + GetLineLT(nodeEnd.line, out ll, out lt, out ls); + ReplaceNormalAndReverse(ref nodeEnd); + // minimize length & time + res.length -= ll; + res.time -= lt; + // remove last line // + int shrinkes = res.vector.Length - (++ls); + PointFL[] shrinked = new PointFL[shrinkes]; + if (shrinkes > 0) Array.Copy(res.vector, 0, shrinked, 0, shrinked.Length); + res.vector = shrinked; + }; + }; + // end added + }; + + // CODE PSDA_A_#3_Xi + res.length += nodeStart.distToN + nodeEnd.distToN; + res.time += (nodeStart.distToN + nodeEnd.distToN) / 700; + // CODE PSDA_A_#3_Xi + + return res; + } + + /// + /// Ïîëó÷àåì ìàðøðóò ìåæäó äâóìÿ óçëàìè ãðàôà + /// + /// start node + /// end node + /// óáèðàòü íåíóæíûå ðàçâîðîòû ïî êðàÿì + /// îïóñêàòü âûåçä íà äîðîãó è ñúåçä ÷åðåç âñòðå÷íóþ ïîëîñó + /// Îò÷åò + public RouteResult GetRouteFull(FindStartStopResult nodeStart, uint nodeEnd, bool shrinkStartStopIfNeed, bool allowLeftTurn) + { + RouteResult res = GetRoute(nodeStart.nodeN, nodeEnd, shrinkStartStopIfNeed ? nodeStart.nodeR : 0, 0); + if (shrinkStartStopIfNeed) + { + if (res.shrinkStart) ReverseStop(nodeStart); + // Added 20.12.2021 for one-line routing (WATER) + if (allowLeftTurn || (res.lines.Length < 2)) + { + if ((res.vector.Length > 1) && (res.vector[0].line == res.vector[1].line) && (nodeStart.nodeN == res.vector[0].node)) // U-TURN + { + PointF[] tmp = nodeStart.revers; + nodeStart.revers = nodeStart.normal; + nodeStart.normal = tmp; + uint tmu = nodeStart.nodeR; + nodeStart.nodeR = nodeStart.nodeN; + nodeStart.nodeN = tmu; + + List tmv = new List(); + for (int i = 0; i < res.vector.Length; i++) + if (res.vector[i].line == nodeStart.line) + continue; + else + tmv.Add(res.vector[i]); + res.vector = tmv.ToArray(); + }; + }; + }; + + // CODE PSDA_A_#3_Xi + res.length += nodeStart.distToN; + res.time += (nodeStart.distToN) / 700; + // CODE PSDA_A_#3_Xi + + return res; + } + + /// + /// Ïîëó÷àåì ìàðøðóò ìåæäó äâóìÿ óçëàìè ãðàôà + /// + /// start node + /// end node + /// óáèðàòü íåíóæíûå ðàçâîðîòû ïî êðàÿì + /// îïóñêàòü âûåçä íà äîðîãó è ñúåçä ÷åðåç âñòðå÷íóþ ïîëîñó + /// Îò÷åò + public RouteResult GetRouteFull(uint nodeStart, FindStartStopResult nodeEnd, bool shrinkStartStopIfNeed, bool allowLeftTurn) + { + RouteResult res = GetRoute(nodeStart, nodeEnd.nodeN, 0, shrinkStartStopIfNeed ? nodeEnd.nodeR : 0); + if (shrinkStartStopIfNeed) + { + if (res.shrinkEnd) ReverseStop(nodeEnd); + // Added 20.12.2021 for one-line routing (WATER) + if (allowLeftTurn || (res.lines.Length < 2)) + { + if ((res.vector.Length > 1) && (res.vector[res.vector.Length - 1].line == res.vector[res.vector.Length - 2].line) && (nodeEnd.nodeN == res.vector[res.vector.Length - 1].node)) // U-TURN + { + PointF[] tmp = nodeEnd.revers; + nodeEnd.revers = nodeEnd.normal; + nodeEnd.normal = tmp; + uint tmu = nodeEnd.nodeR; + nodeEnd.nodeR = nodeEnd.nodeN; + nodeEnd.nodeN = tmu; + + uint tmpu = res.vector[0].node; + + List tmv = new List(); + for (int i = 0; i < res.vector.Length; i++) + if (res.vector[i].line == nodeEnd.line) + continue; + else + tmv.Add(res.vector[i]); + res.vector = tmv.ToArray(); + }; + }; + }; + + // CODE PSDA_A_#3_Xi + res.length += nodeEnd.distToN; + res.time += (nodeEnd.distToN) / 700; + // CODE PSDA_A_#3_Xi + + return res; + } + + /// + /// Ïîëó÷àåì ìàðøðóò ìåæäó äâóìÿ ëèíèÿìè ãðàôà + /// + /// íà÷ ëèíèÿ + /// êîí ëèíèÿ + /// Îò÷åò + public RouteResult GetRoute(uint lineStart, uint lineEnd) + { + ushort seg; + byte flags; + int pos; + uint ns1; uint ns2; uint ne1; uint ne2; + GetLine(lineStart, out seg, out pos, out flags, out ns1, out ns2); + GetLine(lineStart, out seg, out pos, out flags, out ne1, out ne2); + return GetRoute(ns2, ne1, ns1, ne2); + } + + /// + /// Ïîëó÷àåì ìàðøðóò ìåæäó äâóìÿ êîîðäèíàòàìè + /// + /// íà÷àëüíûé óçåë + /// êîíå÷íûé óçåë + /// Îò÷åò + public RouteResult SolveRoute(PointF start, PointF end, bool allowLeftTurn) + { + FindStartStopResult nodeStart = FindNodeStart(start.Y, start.X, 2000); + FindStartStopResult nodeEnd = FindNodeStart(end.Y, end.X, 2000); + BeginSolve(true, null); + SolveAstar(nodeStart.nodeN, nodeEnd.nodeN); + RouteResult res = GetRouteFull(nodeStart, nodeEnd, true, allowLeftTurn); + EndSolve(); + + List vec = new List(); + //vec.AddRange(nodeStart.normal); + for (int si = 0; si < nodeStart.normal.Length; si++) vec.Add(new PointFL(nodeStart.normal[si], 0, 0, (si > 0) && ((res.vector != null) && (res.vector.Length != 0)) ? res.vector[0].speed : 20)); + vec.AddRange(res.vector); + //vec.AddRange(nodeEnd.normal); + for (int si = 0; si < nodeEnd.normal.Length; si++) vec.Add(new PointFL(nodeEnd.normal[si], 0, 0, (si < (nodeEnd.normal.Length - 1)) && ((res.vector != null) && (res.vector.Length != 0)) ? res.vector[res.vector.Length - 1].speed : 20)); + res.vector = vec.ToArray(); + + return res; + } + + /// + /// Ðàçâåðíóòü òî÷êó íà÷àëà/êîíöà â äðóãóþ ñòîðîíó ëèíèè + /// (èñïîëüçóåòñÿ äëÿ óáèðàíèÿ ðàçâîðîòîâ ïî êðàÿì) + /// + /// + public void ReverseStop(FindStartStopResult StartStop) + { + float d = StartStop.distToN; + StartStop.distToN = StartStop.distToR; + StartStop.distToR = d; + + uint n = StartStop.nodeN; + StartStop.nodeN = StartStop.nodeR; + StartStop.nodeR = n; + + PointF[] p = StartStop.normal; + StartStop.normal = StartStop.revers; + StartStop.revers = p; + } + + /// + /// Ïîëó÷àåì îöåíêó ïóòè èç (X)->Y + /// Âûçûâàåòñÿ òîëüêî ìåæäó ìåòîäàìè BeginSolve è EndSolve + /// + /// íà÷àëüíûé óçåë + /// êîíå÷íûé óçåë + /// îöåíêà + public Single GetRouteCost(uint start, uint end) + { + uint y = calc_Reversed ? start : end; + + if (stream_Vector == null) throw new Exception("Call BeginSolve first"); + return GetCost(y); + } + + /// + /// Óñòàíàâëèâàåì ðàññòîÿíèå èç (X)->Y + /// Âûçûâàåòñÿ òîëüêî ìåæäó ìåòîäàìè BeginSolve è EndSolve + /// + /// êîíåö ïóòè + /// äëèíà ïóòè â ìåòðàõ + private void SetRouteDistance(uint y, Single dist) + { + stream_Vector.Position = (y - 1) * (const_vtArrElemLength) + const_offset_Dist; + byte[] bb = BitConverter.GetBytes(dist); + stream_Vector.Write(bb, 0, 4); + } + + /// + /// Ïîëó÷àåì äëèíó ïóòè èç (X)->Y + /// Âûçûâàåòñÿ òîëüêî ìåæäó ìåòîäàìè BeginSolve è EndSolve + /// + /// íà÷àëüíûé óçåë + /// êîíå÷íûé óçåë + /// äëèíà ïóòè â ìåòðàõ + public Single GetRouteDistance(uint start, uint end) + { + uint y = calc_Reversed ? start : end; + + if (stream_Vector == null) throw new Exception("Call BeginSolve first"); + + stream_Vector.Position = (y - 1) * (const_vtArrElemLength) + const_offset_Dist; + byte[] bb = new byte[4]; + stream_Vector.Read(bb, 0, 4); + Single s = BitConverter.ToSingle(bb, 0); + if (s < const_maxError) + return Single.MaxValue; + else + return s; + } + + /// + /// Óñòàíàâëèâàåì âðåìÿ äâèæåíèÿ èç (X)->Y + /// Âûçûâàåòñÿ òîëüêî ìåæäó ìåòîäàìè BeginSolve è EndSolve + /// + /// êîíåö ïóòè + /// âðåìÿ äâèæåíèÿ + private void SetRouteTime(uint y, Single time) + { + stream_Vector.Position = (y - 1) * (const_vtArrElemLength) + const_offset_Time; + byte[] bb = BitConverter.GetBytes(time); + stream_Vector.Write(bb, 0, 4); + } + + + /// + /// Ïîëó÷àåì âðåìÿ äâèæåíèÿ èç (X)->Y + /// Âûçûâàåòñÿ òîëüêî ìåæäó ìåòîäàìè BeginSolve è EndSolve + /// + /// íà÷àëüíûé óçåë + /// êîíå÷íûé óçåë + /// Âðåìÿ äâèæåíèÿ â ìèíóòàõ + public Single GetRouteTime(uint start, uint end) + { + uint y = calc_Reversed ? start : end; + + if (stream_Vector == null) throw new Exception("Call BeginSolve first"); + + stream_Vector.Position = (y - 1) * (const_vtArrElemLength) + const_offset_Time; + byte[] bb = new byte[4]; + stream_Vector.Read(bb, 0, 4); + Single s = BitConverter.ToSingle(bb, 0); + if (s < const_maxError) + return Single.MaxValue; + else + return s; + } + + /// + /// Ñîõðàíÿåò âåêòîð ðàñ÷åòà â ôàéë + /// + /// Èìÿ ôàéëà + public void SaveSolvedVector(string fn) + { + FileStream fs = new FileStream(fn, FileMode.Create, FileAccess.ReadWrite); + byte[] bb = new byte[8192]; + int read = 0; + stream_Vector.Position = 0; + while ((read = stream_Vector.Read(bb, 0, bb.Length)) > 0) + fs.Write(bb, 0, read); + fs.Flush(); + fs.Close(); + } + + /// + /// Ïðåäâàðèòåëüíûé ïðîñ÷åò ïóòåé ìåæäó òî÷êàìè ñòûêîâêè ìåæðàéîííûõ ìàðøðóòîâ + /// + public void CalculateRGNodesRoutes() + { + CalculateRGNodesRoutes(0); + } + + /// + /// Ïðåäâàðèòåëüíûé ïðîñ÷åò ïóòåé ìåæäó òî÷êàìè ñòûêîâêè ìåæðàéîííûõ ìàðøðóòîâ + /// + /// Íîìåð ðåãèîíà + public void CalculateRGNodesRoutes(int region_id) + { + CalculateRGNodesRoutes(region_id, Path.GetDirectoryName(stream_FileName) + @"\RGWays\"); + } + + /// + /// Ïðåäâàðèòåëüíûé ïðîñ÷åò ïóòåé ìåæäó òî÷êàìè ñòûêîâêè ìåæðàéîííûõ ìàðøðóòîâ + /// + /// Íîìåð ðåãèîíà + /// êàòàëîã ñ ôàéëàìè rgway.xml + public void CalculateRGNodesRoutes(int region_id, string dir) + { + if (!File.Exists(stream_FileMain + ".rgnodes.xml")) + { + Console.WriteLine("File " + Path.GetFileName(stream_FileMain) + ".rgnodes.xml doen't exists!"); + return; + }; + + Console.WriteLine("Loading RGNodes: " + Path.GetFileName(stream_FileMain) + ".rgnodes.xml"); + TRGNode[] nodes = XMLSaved.Load(stream_FileMain + ".rgnodes.xml"); + + if (nodes.Length == 0) + { + Console.WriteLine("RGNodes not found!"); + return; + }; + + if ((nodes == null) || (nodes.Length == 0)) return; + + int ttl_rts = nodes.Length * nodes.Length; + int cur_rts = 0; + + if (!Path.IsPathRooted(dir)) + dir = XMLSaved.GetCurrentDir() + dir; + Directory.CreateDirectory(dir); + + Console.WriteLine("Ïðåäâàðèòåëüíûé ïðîñ÷åò ïóòåé ìåæäó òî÷êàìè ñòûêîâêè ìåæðàéîííûõ ìàðøðóòîâ"); + Console.WriteLine("Îïòèìèçèðîâàòü ìàðøðóò ïî: " + this.calc_minBy.ToString()); + string err_list = ""; + for (int x = 0; x < nodes.Length; x++) + { + if (region_id > 0) nodes[x].region = region_id; + + if (!nodes[x].inner) { cur_rts += nodes.Length; continue; }; + + List li = new List(); + List lc = new List(); + List ld = new List(); + List lt = new List(); + + for (int y = 0; y < nodes.Length; y++) + { + cur_rts++; + if (x == y) continue; + if (!nodes[y].outer) continue; + + DateTime st = DateTime.Now; + + FindStartStopResult nodeStart = new FindStartStopResult(); + nodeStart.nodeN = nodes[x].node; + FindStartStopResult nodeEnd = new FindStartStopResult(); + nodeEnd.nodeN = nodes[y].node; + + DateTime s = DateTime.Now; + Console.Write(cur_rts.ToString() + "/" + ttl_rts.ToString() + ": "); + Console.Write(nodes[x].node.ToString() + "(" + nodes[x].id + ")->" + nodes[y].node.ToString() + "(" + nodes[y].id + ")"); + + BeginSolve(true, null); + // MinimizeRouteBy = MinimizeBy.Cost // byCost (default) + // MinimizeRouteBy = MinimizeBy.Time; + System.Threading.Thread thr = new System.Threading.Thread(new System.Threading.ThreadStart(CalcTimed)); + ctStart = nodeStart.nodeN; + ctEnd = nodeEnd.nodeN; + thr.Start(); + thr.Join(9 * 60 * 1000); // 9 minutes max calc route timeout + thr.Abort(); + thr = null; + // SolveAstar(nodeStart.nodeN, nodeEnd.nodeN); // A* + DateTime e = DateTime.Now; + TimeSpan ts = e.Subtract(s); + + float c = GetRouteCost(nodeStart.nodeN, nodeEnd.nodeN); + float d = GetRouteDistance(nodeStart.nodeN, nodeEnd.nodeN); + float t = GetRouteTime(nodeStart.nodeN, nodeEnd.nodeN); + RouteResultStored rrs = new RouteResultStored(); + rrs.Region = region_id; + rrs.route = GetRouteFull(nodeStart, nodeEnd, true, false); + rrs.costs = new float[rrs.route.nodes.Length + 2]; + rrs.times = new float[rrs.route.nodes.Length + 2]; + rrs.distances = new float[rrs.route.nodes.Length + 2]; + for (int i = 0; i < rrs.costs.Length - 2; i++) + { + rrs.costs[i + 1] = GetRouteCost(nodeStart.nodeN, rrs.route.nodes[i]); + rrs.times[i + 1] = GetRouteTime(nodeStart.nodeN, rrs.route.nodes[i]); + rrs.distances[i + 1] = GetRouteDistance(nodeStart.nodeN, rrs.route.nodes[i]); + }; + rrs.costs[rrs.costs.Length - 1] = GetRouteCost(nodeStart.nodeN, nodeEnd.nodeN); + rrs.times[rrs.times.Length - 1] = GetRouteTime(nodeStart.nodeN, nodeEnd.nodeN); + rrs.distances[rrs.distances.Length - 1] = GetRouteDistance(nodeStart.nodeN, nodeEnd.nodeN); + + string fN = dir + @"\" + String.Format("{0}T{1}B{2}.rgway.xml", nodes[x].id, nodes[y].id, rrs.Region); + if (d < const_maxValue) + XMLSaved.Save(fN, rrs); + else + err_list += String.Format("{0} - {1}\r\n", nodes[x].id, nodes[y].id); + + Console.Write(" - "); + + TimeSpan ctd = DateTime.Now.Subtract(st); + + if (d < const_maxValue) + { + Console.Write(String.Format("{0:0} km {1:0} min", d / 1000, t, rrs.route.nodes.Length)); + Console.Write(String.Format(" - {0}:{1:00}:{2:000}", ts.Minutes, ts.Seconds, ts.Milliseconds)); + Console.Write(" - "); + Console.WriteLine(String.Format("{0}T{1}B{2}.rgway.xml", nodes[x].id, nodes[y].id, rrs.Region)); + } + else + { + Console.WriteLine(String.Format("!!!NO WAY!!! - {0}:{1:00}:{2:000}", ts.Minutes, ts.Seconds, ts.Milliseconds)); + }; + // Console.WriteLine(" ... Calc time: " + ctd.Hours.ToString("0,0") + ":" + ctd.Minutes.ToString("0,0") + ":" + ctd.Seconds.ToString("0,0")+"."+ctd.Milliseconds.ToString("0,00")); + + li.Add(nodes[y].id); lc.Add(c); ld.Add(d); lt.Add(t); + }; + + nodes[x].links = li.ToArray(); + nodes[x].costs = lc.ToArray(); + nodes[x].dists = ld.ToArray(); + nodes[x].times = lt.ToArray(); + }; + + // XML + Console.WriteLine("Saving RGNodes: " + Path.GetFileName(stream_FileMain) + ".rgnodes.xml"); + XMLSaved.Save(stream_FileMain + ".rgnodes.xml", nodes); + + // TXT + System.IO.FileStream fs = new FileStream(stream_FileMain + ".rgnodes.txt", FileMode.Create); + System.IO.StreamWriter sw = new StreamWriter(fs, System.Text.Encoding.GetEncoding(1251)); + sw.WriteLine("RGNodes in region: "); + for (int i = 0; i < nodes.Length; i++) + { + sw.Write(i > 0 ? "," : ""); + sw.Write(nodes[i].id.ToString()); + }; + if (err_list.Length > 0) + { + sw.WriteLine(); sw.WriteLine(); + sw.WriteLine("NO WAY:"); + sw.Write(err_list); + }; + sw.Flush(); + sw.Close(); + + // GPX + fs = new FileStream(stream_FileMain + ".rgnodes.gpx", FileMode.Create); + sw = new StreamWriter(fs, System.Text.Encoding.GetEncoding(1251)); + + sw.WriteLine(""); + sw.WriteLine(""); + + for (uint i = 0; i < nodes.Length; i++) + sw.WriteLine("" + nodes[i].id.ToString() + ""); + sw.WriteLine(""); + + sw.Flush(); + sw.Close(); + + Console.WriteLine("Done"); + } + + public void CalculateRGNodesRoutesWithRouteLevel(int region_id, string dir) + { + if (!File.Exists(stream_FileMain + ".rgnodes.xml")) + { + Console.WriteLine("File " + Path.GetFileName(stream_FileMain) + ".rgnodes.xml doen't exists!"); + return; + }; + + Console.WriteLine("Loading RGNodes: " + Path.GetFileName(stream_FileMain) + ".rgnodes.xml"); + TRGNode[] nodes = XMLSaved.Load(stream_FileMain + ".rgnodes.xml"); + + if (nodes.Length == 0) + { + Console.WriteLine("RGNodes not found!"); + return; + }; + + if ((nodes == null) || (nodes.Length == 0)) return; + + int ttl_rts = nodes.Length * nodes.Length; + int cur_rts = 0; + + if (!Path.IsPathRooted(dir)) + dir = XMLSaved.GetCurrentDir() + dir; + Directory.CreateDirectory(dir); + + Console.WriteLine("Ïðåäâàðèòåëüíûé ïðîñ÷åò ïóòåé ìåæäó òî÷êàìè ñòûêîâêè ìåæðàéîííûõ ìàðøðóòîâ"); + Console.WriteLine("Îïòèìèçèðîâàòü ìàðøðóò ïî: " + this.calc_minBy.ToString()); + string err_list = ""; + for (int x = 0; x < nodes.Length; x++) + { + if (region_id > 0) nodes[x].region = region_id; + + if (!nodes[x].inner) { cur_rts += nodes.Length; continue; }; + + List li = new List(); + List lc = new List(); + List ld = new List(); + List lt = new List(); + + for (int y = 0; y < nodes.Length; y++) + { + cur_rts++; + if (x == y) continue; + if (!nodes[y].outer) continue; + + DateTime st = DateTime.Now; + + FindStartStopResult nodeStart = new FindStartStopResult(); + nodeStart.nodeN = nodes[x].node; + FindStartStopResult nodeEnd = new FindStartStopResult(); + nodeEnd.nodeN = nodes[y].node; + + DateTime s = DateTime.Now; + Console.Write(cur_rts.ToString() + "/" + ttl_rts.ToString() + ": "); + Console.Write(nodes[x].node.ToString() + "(" + nodes[x].id + ")->" + nodes[y].node.ToString() + "(" + nodes[y].id + ")"); + + string sok = "-"; + AvoidLowRouteLevel = false; + GoThrough = new byte[16]; + GoThrough[0] = 3; // SKIP ãðóíòîâêè, äâîðîâûå ïðîåçäû + GoThrough[15] = 2; // SKIP ROUTE_LVL 1 + + byte tryC = 2; // 1st try skip, 2nd - all + while (tryC > 0) + { + tryC--; + BeginSolve(true, null); + // MinimizeRouteBy = MinimizeBy.Cost // byCost (default) + // MinimizeRouteBy = MinimizeBy.Time; + System.Threading.Thread thr = new System.Threading.Thread(new System.Threading.ThreadStart(CalcTimed)); + ctStart = nodeStart.nodeN; + ctEnd = nodeEnd.nodeN; + thr.Start(); + if (tryC == 1) + thr.Join(2 * 60 * 1000); // 2 minutes max calc route timeout + else + thr.Join(9 * 60 * 1000); // 9 minutes max calc route timeout + thr.Abort(); + thr = null; + // SolveAstar(nodeStart.nodeN, nodeEnd.nodeN); // A* + DateTime e = DateTime.Now; + TimeSpan ts = e.Subtract(s); + + float c = GetRouteCost(nodeStart.nodeN, nodeEnd.nodeN); + float d = GetRouteDistance(nodeStart.nodeN, nodeEnd.nodeN); + float t = GetRouteTime(nodeStart.nodeN, nodeEnd.nodeN); + RouteResultStored rrs = new RouteResultStored(); + rrs.Region = region_id; + rrs.route = GetRouteFull(nodeStart, nodeEnd, true, false); + rrs.costs = new float[rrs.route.nodes.Length + 2]; + rrs.times = new float[rrs.route.nodes.Length + 2]; + rrs.distances = new float[rrs.route.nodes.Length + 2]; + for (int i = 0; i < rrs.costs.Length - 2; i++) + { + rrs.costs[i + 1] = GetRouteCost(nodeStart.nodeN, rrs.route.nodes[i]); + rrs.times[i + 1] = GetRouteTime(nodeStart.nodeN, rrs.route.nodes[i]); + rrs.distances[i + 1] = GetRouteDistance(nodeStart.nodeN, rrs.route.nodes[i]); + }; + rrs.costs[rrs.costs.Length - 1] = GetRouteCost(nodeStart.nodeN, nodeEnd.nodeN); + rrs.times[rrs.times.Length - 1] = GetRouteTime(nodeStart.nodeN, nodeEnd.nodeN); + rrs.distances[rrs.distances.Length - 1] = GetRouteDistance(nodeStart.nodeN, nodeEnd.nodeN); + + string fN = dir + @"\" + String.Format("{0}T{1}B{2}.rgway.xml", nodes[x].id, nodes[y].id, rrs.Region); + if (d < const_maxValue) + XMLSaved.Save(fN, rrs); + else + err_list += String.Format("{0} - {1}\r\n", nodes[x].id, nodes[y].id); + + EndSolve(); + + if ((d >= const_maxValue) && (tryC > 0)) + { + GoThrough = null; + sok = "~"; + continue; + } + else tryC = 0; + + Console.Write(" " + sok + " "); + + TimeSpan ctd = DateTime.Now.Subtract(st); + + if (d < const_maxValue) + { + Console.Write(String.Format("{0:0} km {1:0} min", d / 1000, t, rrs.route.nodes.Length)); + Console.Write(String.Format(" - {0}:{1:00}:{2:000}", ts.Minutes, ts.Seconds, ts.Milliseconds)); + Console.Write(" - "); + Console.WriteLine(String.Format("{0}T{1}B{2}.rgway.xml", nodes[x].id, nodes[y].id, rrs.Region)); + } + else + { + Console.WriteLine(String.Format("!!!NO WAY!!! - {0}:{1:00}:{2:000}", ts.Minutes, ts.Seconds, ts.Milliseconds)); + }; + // Console.WriteLine(" ... Calc time: " + ctd.Hours.ToString("0,0") + ":" + ctd.Minutes.ToString("0,0") + ":" + ctd.Seconds.ToString("0,0")+"."+ctd.Milliseconds.ToString("0,00")); + + li.Add(nodes[y].id); lc.Add(c); ld.Add(d); lt.Add(t); + }; + }; + + nodes[x].links = li.ToArray(); + nodes[x].costs = lc.ToArray(); + nodes[x].dists = ld.ToArray(); + nodes[x].times = lt.ToArray(); + }; + + // XML + Console.WriteLine("Saving RGNodes: " + Path.GetFileName(stream_FileMain) + ".rgnodes.xml"); + XMLSaved.Save(stream_FileMain + ".rgnodes.xml", nodes); + + // TXT + System.IO.FileStream fs = new FileStream(stream_FileMain + ".rgnodes.txt", FileMode.Create); + System.IO.StreamWriter sw = new StreamWriter(fs, System.Text.Encoding.GetEncoding(1251)); + sw.WriteLine("RGNodes in region: "); + for (int i = 0; i < nodes.Length; i++) + { + sw.Write(i > 0 ? "," : ""); + sw.Write(nodes[i].id.ToString()); + }; + if (err_list.Length > 0) + { + sw.WriteLine(); sw.WriteLine(); + sw.WriteLine("NO WAY:"); + sw.Write(err_list); + }; + sw.Flush(); + sw.Close(); + + // GPX + fs = new FileStream(stream_FileMain + ".rgnodes.gpx", FileMode.Create); + sw = new StreamWriter(fs, System.Text.Encoding.GetEncoding(1251)); + + sw.WriteLine(""); + sw.WriteLine(""); + + for (uint i = 0; i < nodes.Length; i++) + sw.WriteLine("" + nodes[i].id.ToString() + ""); + sw.WriteLine(""); + + sw.Flush(); + sw.Close(); + + Console.WriteLine("Done"); + } + + + private uint ctStart = 0; + private uint ctEnd = 0; + private void CalcTimed()// FOR CALC RGNodes + { + SolveAstar(ctStart, ctEnd); // A* + } + + /// + /// Âûâîäèò íàãëÿäíóþ ìàòðèöó â òåêñòîâûé ôàéë + /// (ðåêîìåíäóåòñÿ òîëüêî äëÿ íåáîëüøèõ ìàòðèö) + /// + /// Ïîëíûé ïóòü ê ôàéëó + public void ToTextFile(string fn) + { + FileStream fout = new FileStream(fn, FileMode.Create); + StreamWriter sw = new StreamWriter(fout); + + sw.Write("NODE \t"); + for (uint y = 1; y <= graph_NodesCount; y++) sw.Write(y.ToString() + "\t\t\t"); + sw.WriteLine(); + + sw.Write("COST \t"); + for (uint y = 1; y <= graph_NodesCount; y++) + if (GetCost(y) > const_maxValue) + sw.Write(". . .\t"); + else + sw.Write(GetPrev(y).ToString() + "(" + GetCost(y).ToString("0.000").Replace(",", ".") + ") \t"); + sw.WriteLine(); + + sw.Write("DIST \t"); + for (uint y = 1; y <= graph_NodesCount; y++) + if (GetCost(y) > const_maxValue) + sw.Write(". . .\t"); + else + sw.Write(GetPrev(y).ToString() + "(" + GetRouteDistance(y, y).ToString("0.000").Replace(",", ".") + ") \t"); + sw.WriteLine(); ; + + sw.Write("TIME \t"); + for (uint y = 1; y <= graph_NodesCount; y++) + if (GetCost(y) > const_maxValue) + sw.Write(". . .\t"); + else + sw.Write(GetPrev(y).ToString() + "(" + GetRouteTime(y, y).ToString("0.000").Replace(",", ".") + ") \t"); + sw.WriteLine(); ; + + sw.Flush(); + fout.Close(); + } + + /////// + /////// + + /// + /// Èùåì òî÷êè ãðàôà â çàäàííîé çîíå + /// + /// + /// + /// + /// + /// âîçâðàùàòü ëè êîîðäèíàòû òî÷åê + /// çàïîëíÿòü ñâÿçè + /// Ìàêñèìàëüíîå ÷èñëî òî÷åê ê îòâåòå + /// Óçëû + public TNode[] FindNodesInRect(float StartLat, float StartLon, float EndLat, float EndLon, bool getLatLon, bool fillLinks, int maxResults) + { + List res = new List(maxResults); + + byte[] buff = new byte[1020]; // 1020 bytes - 85 points // 8184 bytes - 682 points + int read = 0; + bool brk = false; + if (stream_Geo_LL_Mtx != null) stream_Geo_LL_Mtx.WaitOne(); + long strPos = header_RMPOINTNLL1.Length + 4; + stream_Geo_LL.Position = strPos; + while ((read = stream_Geo_LL.Read(buff, 0, buff.Length)) > 0) + { + strPos = stream_Geo_LL.Position; + if (stream_Geo_LL_Mtx != null) stream_Geo_LL_Mtx.ReleaseMutex(); + + float lastlat = BitConverter.ToSingle(buff, read - 8); + if (lastlat < StartLat) + { + if (stream_Geo_LL_Mtx != null) stream_Geo_LL_Mtx.WaitOne(); + stream_Geo_LL.Position = strPos; + continue; // goto next block if last lat < needed + }; + + int offset = 0; + while (offset < read) + { + uint node = BitConverter.ToUInt32(buff, offset); + float lat = BitConverter.ToSingle(buff, offset += 4); + float lon = BitConverter.ToSingle(buff, offset += 4); + if (lat > EndLat) // stops find if lat > needed + { + brk = true; + break; + }; + // (lat <= EndLat) - already checked + if ((lat >= StartLat) && (lon >= StartLon) && (lon <= EndLon)) + { + res.Add(new TNode(node, lat, lon)); + if (res.Count == maxResults) // if found points count = maxResults then return + { + brk = true; + break; + }; + }; + offset += 4; + }; + if (brk) break; + + if (stream_Geo_LL_Mtx != null) stream_Geo_LL_Mtx.WaitOne(); + stream_Geo_LL.Position = strPos; + }; + if (stream_Geo_LL_Mtx != null) stream_Geo_LL_Mtx.ReleaseMutex(); + + if (fillLinks) + { + uint[] _n; float[] _c; float[] _d; float[] _t; uint[] _l; byte[] _r; + for (int i = 0; i < res.Count; i++) + { + int ttl = SelectNode(res[i].node, out _n, out _c, out _d, out _t, out _l, out _r); + for (int x = 0; x < ttl; x++) + res[i].AddLink(_n[x], _c[x], _d[x], _t[x], _l[x], _r[x] == 1); + }; + }; + + return res.ToArray(); + } + + /// + /// Èùåì òî÷êè ãðàôà â çàäàííîé çîíå + /// + /// + /// + /// + /// + /// âîçâðàùàòü ëè êîîðäèíàòû òî÷åê + /// çàïîëíÿòü ñâÿçè + /// Óçëû + public TNode[] FindNodesInRect(float StartLat, float StartLon, float EndLat, float EndLon, bool getLatLon, bool fillLinks) + { + return FindNodesInRect(StartLat, StartLon, EndLat, EndLon, getLatLon, fillLinks, 1000); + } + + /// + /// Èùåì òî÷êè ãðàôà â ðàäèóñå ì + /// + /// Øèðîòà öåíòðà + /// Äîëãîòà öåíòðà + /// Ðàäèóñ â ìåòðàõ + /// Ïîëó÷àòü êîîðäèíàòû òî÷åê + /// Ïîëó÷àòü ðàññòîÿíèå äî òî÷êè + /// Ñîðòèðîâàòü òî÷êè ïî óäàëåííîñòè + /// çàïîëíÿòü ñâÿçè + /// Óçëû + public TNodeD[] FindNodesInRadius(float Lat, float Lon, float metersRadius, bool getLatLon, bool getDistance, bool sortByDist, bool fillLinks) + { + return FindNodesInRadius(Lat, Lon, metersRadius, getLatLon, getDistance, sortByDist, fillLinks, 1000); + } + + /// + /// Èùåì òî÷êè ãðàôà â ðàäèóñå ì + /// + /// Øèðîòà öåíòðà + /// Äîëãîòà öåíòðà + /// Ðàäèóñ â ìåòðàõ + /// Ïîëó÷àòü êîîðäèíàòû òî÷åê + /// Ïîëó÷àòü ðàññòîÿíèå äî òî÷êè + /// Ñîðòèðîâàòü òî÷êè ïî óäàëåííîñòè + /// çàïîëíÿòü ñâÿçè + /// Ìàêñèìàëüíîå ÷èñëî òî÷åê â îòâåòå + /// Óçëû + public TNodeD[] FindNodesInRadius(float Lat, float Lon, float metersRadius, bool getLatLon, bool getDistance, bool sortByDist, bool fillLinks, int maxResults) + { + float dLat = metersRadius / Utils.GetLengthMeters(Lat, Lon, Lat + 1, Lon, false); + float dLon = metersRadius / Utils.GetLengthMeters(Lat, Lon, Lat, Lon + 1, false); + TNode[] res = FindNodesInRect(Lat - dLat, Lon - dLon, Lat + dLat, Lon + dLon, getLatLon || getDistance, fillLinks, maxResults); + TNodeD[] wd = new TNodeD[res.Length]; + if (getDistance) + { + for (int i = 0; i < res.Length; i++) + wd[i] = new TNodeD(res[i], Utils.GetLengthMeters(Lat, Lon, res[i].lat, res[i].lon, false)); + if (sortByDist) + Array.Sort(wd, new TNodeD.DSorter()); + } + else + { + for (int i = 0; i < res.Length; i++) + wd[i] = new TNodeD(res[i]); + }; + + if (fillLinks) + { + uint[] _n; float[] _c; float[] _d; float[] _t; uint[] _l; byte[] _r; + for (int i = 0; i < wd.Length; i++) + { + int ttl = SelectNode(res[i].node, out _n, out _c, out _d, out _t, out _l, out _r); + for (int x = 0; x < ttl; x++) + wd[i].AddLink(_n[x], _c[x], _d[x], _t[x], _l[x], _r[x] == 1); + }; + }; + + return wd; + } + + /// + /// Èùåì òî÷êó ãðàôà ñ óêàçàííûìè êîîðäèíàòàìè + /// + /// Latitude + /// Longitude + /// Íîìåð óçëà (åñëè 0 - íå ñóù.) + public uint FindNodesLatLon(float Lat, float Lon) + { + TNode[] pnts = FindNodesInRect(Lat, Lon, Lat, Lon, false, false); + if (pnts.Length == 0) return 0; + else return pnts[0].node; + } + + /// + /// Ïîëó÷àåì óçëû ãðàôà ïî íîìåðàì + /// + /// Íîìåðà òî÷åê + /// Óçëû + public TNode[] SelectNodes(uint[] nodes) + { + TNode[] res = new TNode[nodes.Length]; + byte[] ba = new byte[8]; + for (int i = 0; i < nodes.Length; i++) + { + if (stream_Geo_Mtx != null) stream_Geo_Mtx.WaitOne(); + stream_Geo.Position = header_RMPOINTNLL0.Length + 4 + (nodes[i] - 1) * 8; + stream_Geo.Read(ba, 0, ba.Length); + if (stream_Geo_Mtx != null) stream_Geo_Mtx.ReleaseMutex(); + float lat = BitConverter.ToSingle(ba, 0); + float lon = BitConverter.ToSingle(ba, 4); + res[i] = new TNode(nodes[i], lat, lon); + }; + return res; + } + + /// + /// Ïîëó÷àåì óçëû ãðàôà ïî íîìåðàì + /// ñ ðàññòîÿíèåì ïî ïðÿìîé èç êàæäîãî ïðåäûäóùåãî óçëà + /// + /// íîìåðà óçëîâ + /// Óçëû + public TNodeD[] SelectNodesByDist(uint[] nodes) + { + TNodeD[] res = new TNodeD[nodes.Length]; + byte[] ba = new byte[8]; + for (int i = 0; i < nodes.Length; i++) + { + if (stream_Geo_Mtx != null) stream_Geo_Mtx.WaitOne(); + stream_Geo.Position = header_RMPOINTNLL0.Length + 4 + (i - 1) * 8; + stream_Geo.Read(ba, 0, ba.Length); + if (stream_Geo_Mtx != null) stream_Geo_Mtx.ReleaseMutex(); + float lat = BitConverter.ToSingle(ba, 0); + float lon = BitConverter.ToSingle(ba, 4); + float dist = i == 0 ? 0 : Utils.GetLengthMeters(res[i - 1].lat, res[i - 1].lon, res[i].lat, res[i].lon, false); + res[i] = new TNodeD(nodes[i], lat, lon, dist); + }; + return res; + } + + /// + /// Íàõîäèì ïóòü îò èñõîäíîé êîîðäèíàòû äî áëèæàéøåé ëèíèè â áëèæàéøåì óçëå + /// + /// Øèðîòà + /// Äîëãîòà + /// Ðàäèóñ ïîèñêà áëèæàéøåé ëèíèè â ìåòðàõ + /// Áëèæàéøàÿ ëèíèÿ è óçåë + public FindStartStopResult FindNodeStart(float Lat, float Lon, float metersRadius) + { + return FindStartStop(Lat, Lon, metersRadius, true); + } + + /// + /// Íàõîäèì ïóòü äî êîíå÷íîé êîîðäèíàòû îò áëèæàéøåé ëèíèè â áëèæàéøåì óçëå + /// + /// Øèðîòà + /// Äîëãîòà + /// Ðàäèóñ ïîèñêà áëèæàéøåé ëèíèè â ìåòðàõ + /// Áëèæàéøàÿ ëèíèÿ è óçåë + public FindStartStopResult FindNodeEnd(float Lat, float Lon, float metersRadius) + { + return FindStartStop(Lat, Lon, metersRadius, false); + } + + /// + /// Íàõîäèì ïóòü îò èñõîäíîé/êîíå÷íîé êîîðäèíàòû ïî áëèæàéøåé ëèíèè â áëèæàéøèé óçåë + /// + /// Øèðîòà + /// Äîëãîòà + /// Ðàäèóñ ïîèñêà áëèæàéøåé ëèíèè â ìåòðàõ + /// true - åñëè íà÷àëî, false - åñëè êîíåö + /// Áëèæàéøàÿ ëèíèÿ è óçåë + private FindStartStopResult FindStartStop(float Lat, float Lon, float metersRadius, bool TrueStartFalseEnd) + { + FindStartStopResult res = new FindStartStopResult(); + res.distToLine = float.MaxValue; + res.distToN = 0; + res.distToR = 0; + res.normal = new PointF[0]; + res.revers = new PointF[0]; + res.line = 0; + res.nodeN = 0; + res.nodeR = 0; + + float dLat = metersRadius / Utils.GetLengthMeters(Lat, Lon, Lat + 1, Lon, false); + float dLon = metersRadius / Utils.GetLengthMeters(Lat, Lon, Lat, Lon + 1, false); + + float LatMin = Lat - dLat; + float LonMin = Lon - dLon; + float LatMax = Lat + dLat; + float LonMax = Lon + dLon; + + List lines = new List(); + + long strPos = header_RMSEGMENTS.Length + 4; + if (stream_LinesSegments_Mtx != null) stream_LinesSegments_Mtx.WaitOne(); + stream_LinesSegments.Position = strPos; + + byte[] ba = new byte[8190]; + int read = 0; + + // LINES in ZONE + while ((read = stream_LinesSegments.Read(ba, 0, ba.Length)) > 0) + { + strPos = stream_LinesSegments.Position; + if (stream_LinesSegments_Mtx != null) stream_LinesSegments_Mtx.ReleaseMutex(); + + int count = read / const_SegmRecordLength; + for (int i = 0; i < count; i++) + { + int off = const_SegmRecordLength * i; + uint line_no = BitConverter.ToUInt32(ba, off + 0); + ushort segm = BitConverter.ToUInt16(ba, off + 4); + float lat0 = BitConverter.ToSingle(ba, off + 6); + float lon0 = BitConverter.ToSingle(ba, off + 10); + float lat1 = BitConverter.ToSingle(ba, off + 14); + float lon1 = BitConverter.ToSingle(ba, off + 18); + float k = BitConverter.ToSingle(ba, off + 22); + float b = BitConverter.ToSingle(ba, off + 26); + + // check line outbounds + if ((lat0 < LatMin) && (lat1 < LatMin)) continue; + if ((lat0 > LatMax) && (lat1 > LatMax)) continue; + if ((lon0 < LonMin) && (lon1 < LonMin)) continue; + if ((lon0 > LonMax) && (lon1 > LonMax)) continue; + + // check line cross bounds + float y1 = k * LatMin + b; + float y2 = k * LatMax + b; + float x1 = (LonMax - b) / k; + float x2 = (LonMin - b) / k; + if ( + ((y1 >= LonMin) && (y1 <= LonMax)) + || + ((y2 >= LonMin) && (y2 <= LonMax)) + || + ((x1 >= LatMin) && (x1 <= LatMax)) + || + ((x2 >= LatMin) && (x2 <= LatMax)) + ) + { + if ((lines.Count == 0) || (lines[lines.Count - 1] != line_no)) + lines.Add(line_no); + }; + }; + + if (stream_LinesSegments_Mtx != null) stream_LinesSegments_Mtx.WaitOne(); + stream_LinesSegments.Position = strPos; + }; + if (stream_LinesSegments_Mtx != null) stream_LinesSegments_Mtx.ReleaseMutex(); + + PointF searchNearPoint = new PointF(Lon, Lat); + ushort segmentNo = 0; + PointF onLinePoint = new PointF(0, 0); + int side = 0; + + // check nearest line from found + for (int i = 0; i < lines.Count; i++) + { + PointF[] ss = GetLineSegments(lines[i], false, false); + for (ushort x = 1; x < ss.Length; x++) + { + PointF pol; + int lor = 0; + float l = DistanceFromPointToLine(searchNearPoint, ss[x - 1], ss[x], out pol, out lor); + //float l = Utils.GetLengthMeters(Lat, Lon, pol.Y, pol.X, false); + if (l < res.distToLine) + { + res.distToLine = l; + res.line = lines[i]; + segmentNo = x; + onLinePoint = pol; + side = lor; + }; + }; + }; + + if (res.line == 0) // not found + return res; + + // select nearest line + ushort ttlsegments; + int pos; + TLineFlags flags; + uint node_first; // ãàðàíòèðîâàííûé èñõîäíûìè äàííûìè âõîä â ëèíèþ + uint node_last; // ãàðàíòèðîâàííûé èñõîäíûìè äàííûìè âûõîä èç ëèíèè + GetLine(res.line, out ttlsegments, out pos, out flags, out node_first, out node_last); + PointF[] polyline = GetLineSegments(res.line, pos, ttlsegments, false, false); + + List vectorN = new List(); + List vectorR = new List(); + uint nodeN = 0; + uint nodeR = 0; + + // åñëè íà÷àëî // + bool retN = flags.IsOneWay || (side * -1 > 0); + if (TrueStartFalseEnd) + { + // ÄËß ó÷åòà TRA // + uint[] _n; Single[] _c; Single[] _d; Single[] _t; uint[] _l; byte[] _r; + SelectNode(node_last, out _n, out _c, out _d, out _t, out _l, out _r); // node2 - ãàðàíòèðîâàííàÿ èñõîäíûìè äàííûìè âûõîäíàÿ òî÷êà èç êîíöà ëèíèè (ñóùåñòâóåò âñåãäà) + for (int i = 0; i < _l.Length; i++) + if (_l[i] == res.line) // åñëè èç node2 ìîæíî åõàòü ïî ýòîé æå ëèíèè îáðàòíî + node_first = _n[i]; // òî node1 - âûõîäíàÿ òî÷êà èç íà÷àëà ëèíèè, èíà÷å - oneWay è åå íå íàäî ìåíÿòü, ò.ê. îíà íè íà ÷òî íå âëèÿåò + + nodeN = node_last; // äëÿ íà÷àëà íîðìàëüíàÿ òî÷êà âûåçäà èç ëèíèè - ïîñëåäíÿÿ òî÷êà + nodeR = node_first; + + vectorN.Add(searchNearPoint); + vectorR.Add(searchNearPoint); + if ((!float.IsNaN(onLinePoint.X)) && (!float.IsNaN(onLinePoint.Y))) + { + vectorN.Add(onLinePoint); + vectorR.Add(onLinePoint); + }; + for (int i = segmentNo; i < polyline.Length; i++) vectorN.Add(polyline[i]); + for (int i = segmentNo - 1; i >= 0; i--) vectorR.Add(polyline[i]); + } + else // åñëè êîíåö + { + // ÄËß ó÷åòà TRA // + uint[] _n; Single[] _c; Single[] _d; Single[] _t; uint[] _l; byte[] _r; + SelectNodeR(node_first, out _n, out _c, out _d, out _t, out _l, out _r); // node1 - ãàðàíòèðîâàííàÿ èñõîäíûìè äàííûìè âõîäíàÿ òî÷êà â íà÷àëî ëèíèè (ñóùåñòâóåò âñåãäà) + for (int i = 0; i < _l.Length; i++) + if (_l[i] == res.line) // åñëè â node1 ìîæíî âúåõàòü ïî ýòîé æå ëèíèè + node_last = _n[i]; // òî node2 - âõîäíàÿ òî÷êà â êîíåö ëèíèè, èíà÷å - oneWay è åå íå íàäî ìåíÿòü, ò.ê. îíà íè íà ÷òî íå âëèÿåò + + nodeN = node_first; // äëÿ êîíöà íîðìàëüíàÿ òî÷êà âúçäà â ëèíèþ - ïåðâàÿ òî÷êà + nodeR = node_last; + + for (int i = 0; i < segmentNo; i++) vectorN.Add(polyline[i]); + for (int i = polyline.Length - 1; i >= segmentNo; i--) vectorR.Add(polyline[i]); + if ((!float.IsNaN(onLinePoint.X)) && (!float.IsNaN(onLinePoint.Y))) + { + vectorN.Add(onLinePoint); + vectorR.Add(onLinePoint); + }; + vectorN.Add(searchNearPoint); + vectorR.Add(searchNearPoint); + }; + + // fill_up vectors & nodes + if (retN) + { + res.normal = vectorN.ToArray(); + res.revers = vectorR.ToArray(); + res.nodeN = nodeN; + res.nodeR = nodeR; + } + else + { + res.normal = vectorR.ToArray(); + res.revers = vectorN.ToArray(); + res.nodeN = nodeR; + res.nodeR = nodeN; + }; + + // dist to nodes + for (int i = 1; i < res.normal.Length; i++) + res.distToN += Utils.GetLengthMeters(res.normal[i - 1].Y, res.normal[i - 1].X, res.normal[i].Y, res.normal[i].X, false); + for (int i = 1; i < res.revers.Length; i++) + res.distToR += Utils.GetLengthMeters(res.revers[i - 1].Y, res.revers[i - 1].X, res.revers[i].Y, res.revers[i].X, false); + + return res; + } + + /// + /// Íàõîäèì ïðîåêöèþ òî÷êó íà ëèíèþ (áëèæàéøàÿ òî÷êà íà áëèæàéøåé ëèíèè) + /// + /// + /// + /// Ðàäèóñ ïîèñêà áëèæàéøåé ëèíèè â ìåòðàõ + /// Ðàññòîÿíèå îò èñêîìîé òî÷êè + /// + public PointF PointToNearestLine(float Lat, float Lon, float metersRadius, out double distance, out uint line) + { + distance = double.MaxValue; + line = uint.MaxValue; + + float dLat = metersRadius / Utils.GetLengthMeters(Lat, Lon, Lat + 1, Lon, false); + float dLon = metersRadius / Utils.GetLengthMeters(Lat, Lon, Lat, Lon + 1, false); + + float LatMin = Lat - dLat; + float LonMin = Lon - dLon; + float LatMax = Lat + dLat; + float LonMax = Lon + dLon; + + List lines = new List(); + + long strPos = header_RMSEGMENTS.Length + 4; + if (stream_LinesSegments_Mtx != null) stream_LinesSegments_Mtx.WaitOne(); + stream_LinesSegments.Position = strPos; + + byte[] ba = new byte[8190]; + int read = 0; + + // LINES in ZONE + while ((read = stream_LinesSegments.Read(ba, 0, ba.Length)) > 0) + { + strPos = stream_LinesSegments.Position; + if (stream_LinesSegments_Mtx != null) stream_LinesSegments_Mtx.ReleaseMutex(); + + int count = read / const_SegmRecordLength; + for (int i = 0; i < count; i++) + { + int off = const_SegmRecordLength * i; + uint line_no = BitConverter.ToUInt32(ba, off + 0); + ushort segm = BitConverter.ToUInt16(ba, off + 4); + float lat0 = BitConverter.ToSingle(ba, off + 6); + float lon0 = BitConverter.ToSingle(ba, off + 10); + float lat1 = BitConverter.ToSingle(ba, off + 14); + float lon1 = BitConverter.ToSingle(ba, off + 18); + float k = BitConverter.ToSingle(ba, off + 22); + float b = BitConverter.ToSingle(ba, off + 26); + + // check line outbounds + if ((lat0 < LatMin) && (lat1 < LatMin)) continue; + if ((lat0 > LatMax) && (lat1 > LatMax)) continue; + if ((lon0 < LonMin) && (lon1 < LonMin)) continue; + if ((lon0 > LonMax) && (lon1 > LonMax)) continue; + + // check line cross bounds + float y1 = k * LatMin + b; + float y2 = k * LatMax + b; + float x1 = (LonMax - b) / k; + float x2 = (LonMin - b) / k; + if ( + ((y1 >= LonMin) && (y1 <= LonMax)) + || + ((y2 >= LonMin) && (y2 <= LonMax)) + || + ((x1 >= LatMin) && (x1 <= LatMax)) + || + ((x2 >= LatMin) && (x2 <= LatMax)) + ) + { + if ((lines.Count == 0) || (lines[lines.Count - 1] != line_no)) + lines.Add(line_no); + }; + }; + + if (stream_LinesSegments_Mtx != null) stream_LinesSegments_Mtx.WaitOne(); + stream_LinesSegments.Position = strPos; + }; + if (stream_LinesSegments_Mtx != null) stream_LinesSegments_Mtx.ReleaseMutex(); + + PointF searchNearPoint = new PointF(Lon, Lat); + PointF onLinePoint = new PointF(0, 0); + + // check nearest line from found + for (int i = 0; i < lines.Count; i++) + { + PointF[] ss = GetLineSegments(lines[i], false, false); + for (ushort x = 1; x < ss.Length; x++) + { + PointF pol; + int lor = 0; + float l = DistanceFromPointToLine(searchNearPoint, ss[x - 1], ss[x], out pol, out lor); + //float l = Utils.GetLengthMeters(Lat, Lon, pol.Y, pol.X, false); + if (l < distance) + { + distance = l; + line = lines[i]; + onLinePoint = pol; + }; + }; + }; + + if ((line == 0) || (line == uint.MaxValue)) // not found + return new PointF(Lon, Lat); + else + return onLinePoint; + } + + /// + /// Íàõîäèì ðàññòîÿíèå îò èñõîäíîé/êîíå÷íîé êîîðäèíàòû äî êàæäîé áëèæàéøåé ëèíèè + /// + /// Øèðîòà + /// Äîëãîòà + /// Ðàäèóñ ïîèñêà áëèæàéøåé ëèíèè â ìåòðàõ + /// array[0..NumberOfNearPoints-1][0: distance,1: X or Lon,2: Y or Lat,3: line_id] + public float[][] FindNearestLines(float Lat, float Lon, float metersRadius) + { + if (metersRadius > 1000) metersRadius = 1000; + + float dLat = metersRadius / Utils.GetLengthMeters(Lat, Lon, Lat + 1, Lon, false); + float dLon = metersRadius / Utils.GetLengthMeters(Lat, Lon, Lat, Lon + 1, false); + + float LatMin = Lat - dLat; + float LonMin = Lon - dLon; + float LatMax = Lat + dLat; + float LonMax = Lon + dLon; + + List lines = new List(); + + long strPos = header_RMSEGMENTS.Length + 4; + if (stream_LinesSegments_Mtx != null) stream_LinesSegments_Mtx.WaitOne(); + stream_LinesSegments.Position = strPos; + + byte[] ba = new byte[8190]; + int read = 0; + + // LINES in ZONE + while ((read = stream_LinesSegments.Read(ba, 0, ba.Length)) > 0) + { + strPos = stream_LinesSegments.Position; + if (stream_LinesSegments_Mtx != null) stream_LinesSegments_Mtx.ReleaseMutex(); + + int count = read / const_SegmRecordLength; + for (int i = 0; i < count; i++) + { + int off = const_SegmRecordLength * i; + uint line_no = BitConverter.ToUInt32(ba, off + 0); + ushort segm = BitConverter.ToUInt16(ba, off + 4); + float lat0 = BitConverter.ToSingle(ba, off + 6); + float lon0 = BitConverter.ToSingle(ba, off + 10); + float lat1 = BitConverter.ToSingle(ba, off + 14); + float lon1 = BitConverter.ToSingle(ba, off + 18); + float k = BitConverter.ToSingle(ba, off + 22); + float b = BitConverter.ToSingle(ba, off + 26); + + // check line outbounds + if ((lat0 < LatMin) && (lat1 < LatMin)) continue; + if ((lat0 > LatMax) && (lat1 > LatMax)) continue; + if ((lon0 < LonMin) && (lon1 < LonMin)) continue; + if ((lon0 > LonMax) && (lon1 > LonMax)) continue; + + // check line cross bounds + float y1 = k * LatMin + b; + float y2 = k * LatMax + b; + float x1 = (LonMax - b) / k; + float x2 = (LonMin - b) / k; + if ( + ((y1 >= LonMin) && (y1 <= LonMax)) + || + ((y2 >= LonMin) && (y2 <= LonMax)) + || + ((x1 >= LatMin) && (x1 <= LatMax)) + || + ((x2 >= LatMin) && (x2 <= LatMax)) + ) + { + if ((lines.Count == 0) || (lines[lines.Count - 1] != line_no)) + lines.Add(line_no); + }; + }; + + if (stream_LinesSegments_Mtx != null) stream_LinesSegments_Mtx.WaitOne(); + stream_LinesSegments.Position = strPos; + }; + if (stream_LinesSegments_Mtx != null) stream_LinesSegments_Mtx.ReleaseMutex(); + + FDXY sorter = new FDXY(); + PointF searchNearPoint = new PointF(Lon, Lat); + List res = new List(); + // check nearest line from found + for (int i = 0; i < lines.Count; i++) + { + float[] fbase = new float[] { float.MaxValue, 0, 0, 0 }; + PointF[] ss = GetLineSegments(lines[i], false, false); + for (ushort x = 1; x < ss.Length; x++) + { + PointF pol; + int lor = 0; + float l = DistanceFromPointToLine(searchNearPoint, ss[x - 1], ss[x], out pol, out lor); + //float l = Utils.GetLengthMeters(Lat, Lon, pol.Y, pol.X, false); + if (l < fbase[0]) fbase = new float[] { l, pol.X, pol.Y, lines[i] }; + }; + res.Add(fbase); + }; + + res.Sort(sorter); + return res.ToArray(); + } + private class FDXY : IComparer { public int Compare(float[] a, float[] b) { return a[0].CompareTo(b[0]); } } + + /// + /// Ïîëó÷àåì óãîë ïîâîðîòà äâóõ ëèíèé + /// + /// Íà÷àëüíàÿ òî÷êà + /// Òî÷êà ïîâîðîòà + /// Êîíå÷íàÿ òî÷êà + /// Óãîë, - ëåâûé, + ïðàâûé + public static float GetLinesTurnAngle(PointF prev, PointF turn, PointF next) + { + float dy0 = turn.Y - prev.Y; + float dx0 = turn.X - prev.X; + float dy1 = next.Y - turn.Y; + float dx1 = next.X - turn.X; + + float res = (float)(-1 * Math.Acos(((dx0 * dx1) + (dy0 * dy1)) / ((Math.Sqrt(dx0 * dx0 + dy0 * dy0)) * (Math.Sqrt(dx1 * dx1 + dy1 * dy1)))) / Math.PI * 180); + if (((Math.Abs(res) > 179) && (Math.Abs(res) < 181))) return 180; + + int side = Math.Sign((turn.X - prev.X) * (next.Y - prev.Y) - (turn.Y - prev.Y) * (next.X - prev.X)); + return res * side; + } + + /// + /// Ðàñ÷åò ðàññòîÿíèÿ îò òî÷êè äî ëèíèè + /// + /// Èñêîìàÿ òî÷êà + /// Íà÷ òî÷êà ëèíèè + /// Êîí òî÷êà ëèíèè + /// òî÷êà íà ëèíèè áëèæàéøàÿ ê èñêîìîé + /// Ñ êàêîé ñòîðîíû ëèíèè íàõîäèòñÿ èñêîìàÿ òî÷êà (+ ñëåâà, - ñïðàâà) + /// ìåòðû + private static float DistanceFromPointToLine(PointF pt, PointF lineStart, PointF lineEnd, out PointF pointOnLine, out int side) + { + float dx = lineEnd.X - lineStart.X; + float dy = lineEnd.Y - lineStart.Y; + + if ((dx == 0) && (dy == 0)) + { + // line is a point + // ëèíèÿ ìîæåò áûòü ñ íóëåâîé äëèíîé ïîñëå àíàëèçà TRA + pointOnLine = lineStart; + side = 0; + //dx = pt.X - lineStart.X; + //dy = pt.Y - lineStart.Y; + //return Math.Sqrt(dx * dx + dy * dy); + return Utils.GetLengthMeters(pt.Y, pt.X, pointOnLine.Y, pointOnLine.X, false); + }; + + side = Math.Sign((lineEnd.X - lineStart.X) * (pt.Y - lineStart.Y) - (lineEnd.Y - lineStart.Y) * (pt.X - lineStart.X)); + + // Calculate the t that minimizes the distance. + float t = ((pt.X - lineStart.X) * dx + (pt.Y - lineStart.Y) * dy) / (dx * dx + dy * dy); + + // See if this represents one of the segment's + // end points or a point in the middle. + if (t < 0) + { + pointOnLine = new PointF(lineStart.X, lineStart.Y); + dx = pt.X - lineStart.X; + dy = pt.Y - lineStart.Y; + } + else if (t > 1) + { + pointOnLine = new PointF(lineEnd.X, lineEnd.Y); + dx = pt.X - lineEnd.X; + dy = pt.Y - lineEnd.Y; + } + else + { + pointOnLine = new PointF(lineStart.X + t * dx, lineStart.Y + t * dy); + dx = pt.X - pointOnLine.X; + dy = pt.Y - pointOnLine.Y; + }; + + //return Math.Sqrt(dx * dx + dy * dy); + return Utils.GetLengthMeters(pt.Y, pt.X, pointOnLine.Y, pointOnLine.X, false); + } + + } +} diff --git a/SOLVER/dkxce.Route.GSolver/dkxce.Route.GSolver.csproj b/SOLVER/dkxce.Route.GSolver/dkxce.Route.GSolver.csproj new file mode 100644 index 0000000..8c43e2a --- /dev/null +++ b/SOLVER/dkxce.Route.GSolver/dkxce.Route.GSolver.csproj @@ -0,0 +1,49 @@ + + + Debug + AnyCPU + 8.0.50727 + 2.0 + {12BC9004-07AA-4A63-BDCD-3ED34E0E09F9} + Library + Properties + dkxce.Route.GSolver + dkxce.Route.GSolver + + + true + full + false + ..\..\READY\MAIN_DLLs\ + DEBUG;TRACE + prompt + 4 + + + pdbonly + true + ..\..\READY\MAIN_DLLs\ + TRACE + prompt + 4 + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/SOLVER/dkxce.Route.GSolver/obj/Debug/dkxce.Route.GSolver.dll b/SOLVER/dkxce.Route.GSolver/obj/Debug/dkxce.Route.GSolver.dll new file mode 100644 index 0000000000000000000000000000000000000000..dec94a3796454960e4ceca399a9398a095733adc GIT binary patch literal 69632 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 + /// Ìàðøðóíûå òî÷êè + /// + [Serializable] + public class RStop : XYO + { + /// + /// Èìÿ + /// + public string name = ""; + ///// + ///// Øèðîòà + ///// + //[XmlAttribute()] + //public double lat = 0; + ///// + ///// Äîëãîòà + ///// + //[XmlAttribute()] + //public double lon = 0; + + public RStop(string name, double lat, double lon) + { + this.name = name; + this.lat = lat; + this.lon = lon; + } + } + + /// + /// Ðåçóëüòàò ðàñ÷åòà ìàðøðóòà + /// + [Serializable] + public class RResult + { + public RResult(RStop[] stops) + { + this.stops = stops; + } + + /// + /// Äëèíà ìàðøðóòà â ì + /// + public double driveLength; + + /// + /// Âðåìÿ â ïóòè â ìèí + /// + public double driveTime; + + /// + /// Âðåìÿ âûåçäà + /// + public DateTime startTime = DateTime.Now; + + /// + /// Âðåìÿ ïðèáûòèÿ + /// + public DateTime finishTime = DateTime.Now; + + /// + /// ïîëèëèíèÿ ìàðøðóòà + /// + public PointFL[] vector; + /// + /// Ìàññèâ ÷èñåë, êàæäûé ýëåìåíò èç êîòîðîãî + /// ñîîòâåòñòâóåò ïóíêòó ïðîìåæóòî÷íîé òî÷êè ìàðøðóòà (ìàññèâ stops), + /// à çíà÷åíèå êîòîðîãî óêàçûâàåò íà òî÷êó ïîëèëèíèè (ÿ÷åéêó â ìàññèâå vector), + /// îáîçíà÷àþùèé íà÷àëî ó÷àñòêà ïóòè èç ýòîé ïðîìåæóòî÷íîé òî÷êè + /// + public int[] vectorSegments; + + /// + /// èíñòðóêöèè + /// + public RDPoint[] description; + /// + /// Ìàññèâ ÷èñåë, êàæäûé ýëåìåíò èç êîòîðîãî + /// ñîîòâåòñòâóåò ïóíêòó ïðîìåæóòî÷íîé òî÷êè ìàðøðóòà (ìàññèâ stops), + /// à çíà÷åíèå êîòîðîãî óêàçûâàåò íà èíäåêñ èíñòðóêöèè (ÿ÷åéêó â ìàññèâå description), + /// îáîçíà÷àþùèé íà÷àëî îïèñàíèÿ ïóòè èç ýòîé ïðîìåæóòî÷íîé òî÷êè + /// + public int[] descriptionSegments; + + /// + /// Äëèíû ñåãìåíòîâ ìàðøðóòà â ì + /// + public double[] driveLengthSegments; + + /// + /// Âðåìÿ â ïóòè ïî ñåãìåíòàì â ìèí + /// + public double[] driveTimeSegments; + + + /// + /// Îøèáêà, åñëè åñòü + /// + public string LastError = String.Empty; + + /// + /// Òî÷êè ìàðøðóòà + /// + public RStop[] stops = new RStop[0]; + } + + /// + /// Ïðèâÿçêà òî÷êè ê äîðîãå + /// + [Serializable] + public class RNearRoad + { + /// + /// Ðàññòîÿíèå îò èñêîìîé òî÷êè äî äîðîãè â ìåòðàõ + /// + public double distance; + /// + /// Øèðîòà áëèæàéøåé äîðîãè + /// + public double lat; + /// + /// Äîëãîòà áëèæàéøåé äîðîãè + /// + public double lon; + /// + /// Íàèìåíîâàíèå áëèæàéøåé äîðîãè + /// + public string name; + /// + /// Àòðèáóòû äîðîãè + /// + public string attributes; + /// + /// Region ID + /// + public int region; + + public RNearRoad(double dist, double lat, double lon, string nam) + { + this.distance = dist; + this.lat = lat; + this.lon = lon; + this.name = nam; + } + + public RNearRoad(double dist, double lat, double lon, string nam, string attr, int region) + { + this.distance = dist; + this.lat = lat; + this.lon = lon; + this.name = nam; + this.attributes = attr; + this.region = region; + } + } + + /// + /// Ïàðàìåòðû äëÿ ïðâÿçêè òî÷åê ê äîðîãàì + /// + [Serializable] + public class RNearRoadAsk + { + public string licenseKey; + public double[] lat; + public double[] lon; + public bool getNames; + + public RNearRoadAsk(string licenseKey, double[] lat, double[] lon, bool getNames) + { + this.licenseKey = licenseKey; + this.lat = lat; + this.lon = lon; + this.getNames = getNames; + } + } + + /// + /// Ïàðàìåòðû äëÿ ðàñ÷åòà ìàðøðóòà + /// + [Serializable] + public class RAsk + { + public string licenseKey; + public RStop[] stops; + public DateTime startTime; + public long flags; + public int[] RegionsAvailableToUser; + + public RAsk() { } + public RAsk(string licenseKey, RStop[] stops, DateTime startTime, long flags, int[] RegionsAvailableToUser) + { + this.licenseKey = licenseKey; + this.stops = stops; + this.startTime = startTime; + this.flags = flags; + this.RegionsAvailableToUser = RegionsAvailableToUser; + } + } + + /// + /// Èíòåðôåéñ îïèñàíèÿ äëÿ ðàñ÷åòà ìàðøðóòà + /// + public interface IRoute + { + /// + /// Îáùåå ÷èñëî ïîòîêîâ íà ñåðâåðå + /// + /// + int GetThreadsCount(); // ID 0 + + /// + /// Íîìåð íåçàíÿòîãî ïîòîêà + /// + /// + int GetIdleThreadCount(); // ID 1 + + /// + /// Ïîëó÷åíèå ìàðøðóòà; + /// Ôëàãè: + /// 0x01 - ïîëó÷àòü ïîëèëèíèþ + /// 0x02 - ïîëó÷àòü îïèñàíèå + /// 0x04 - èñïîëüçîâàòü òåêóùèé òðàôèê + /// 0x08 - èñïîëüçîâàòü èñòîðè÷åñêèé òðàôèê + /// 0x10 - îïòèìèçèðîâàòü ïðîìåæóòî÷íûå òî÷êè ìàðøðóòà (ðåîðãàíèçàöèÿ) + /// + /// Òî÷êè ìàðøðóòà + /// Íà÷àëüíîå âðåìÿ + /// ôëàãè + /// Ðåãèîíû äîñòóïíûå äëÿ ïîëüçîâàòåëÿ (null = âñå) + /// + RResult GetRoute(RStop[] stops, DateTime startTime, long flags, int[] RegionsAvailableToUser); // ID 2 + + /// + /// Ïðèâÿçêà òî÷êè ê äîðîãå + /// + /// Øèðîòà + /// Äîëãîòà + /// Çàïðàøèâàòü íàèìåíîâàíèå äîðîãè (ðàáîòàåò äîëüøå) + /// Ïðèâÿçàííûå ê äîðîãå òî÷êè + RNearRoad[] GetNearRoad(double[] Lat, double[] Lon, bool getName); // ID 4 + + /// + /// Ïîëó÷åíèå ìàðøðóòà; + /// Ôëàãè: + /// 0x01 - ïîëó÷àòü ïîëèëèíèþ + /// 0x02 - ïîëó÷àòü îïèñàíèå + /// 0x04 - èñïîëüçîâàòü òåêóùèé òðàôèê + /// 0x08 - èñïîëüçîâàòü èñòîðè÷åñêèé òðàôèê + /// 0x10 - îïòèìèçèðîâàòü ïðîìåæóòî÷íûå òî÷êè ìàðøðóòà (ðåîðãàíèçàöèÿ) + /// + /// Òî÷êè ìàðøðóòà + /// Íà÷àëüíîå âðåìÿ + /// ôëàãè + /// Ðåãèîíû äîñòóïíûå äëÿ ïîëüçîâàòåëÿ (null = âñå) + /// Èçáåãàÿ ïðîåçä ïî äîðîãàì ñêâîçü òî÷êè [X-Lon,Y-Lat] + /// Èçáåãàÿ ïðîåçä ïî äîðîãàì ñêâîçü òî÷êè, ðàäèóñ â ìåòðàõ + /// Ïàðàìåòðû ïîñòðîåíèÿ ìàðøðóòà èñïîëüçóÿ àòðèáóòû äîðîã + /// + RResult GetRoute(RStop[] stops, DateTime startTime, long flags, int[] RegionsAvailableToUser, + PointF[] roadsExcept, double roadsExceptRaduisInMeters, byte[] RoadsOnly); // ID 6 + + /* + /// + /// Íàõîäèì ðàññòîÿíèå îò èñõîäíîé/êîíå÷íîé êîîðäèíàòû äî êàæäîé ëèíèè + /// + /// Øèðîòà + /// Äîëãîòà + /// Ðàäèóñ ïîèñêà áëèæàéøåé ëèíèè â ìåòðàõ + /// array[0..NumberOfNearPoints-1][0: distance,1: X or Lon,2: Y or Lat,3: line_id] + float[][] FindNearestLines(float Lat, float Lon, float metersRadius); + + /// + /// Íàõîäèì ðàññòîÿíèå îò èñõîäíîé/êîíå÷íîé êîîðäèíàòû äî êàæäîé ëèíèè + /// + /// Øèðîòà + /// Äîëãîòà + /// Ðàäèóñ ïîèñêà áëèæàéøåé ëèíèè â ìåòðàõ + /// array[0..NumOfPoints-1][0..NumberOfNearPoints-1][0: distance,1: X or Lon,2: Y or Lat,3: line_id] + float[][][] FindNearestLines(float[] Lat, float[] Lon, float metersRadius); + */ + } + + /// + /// Êëàññ ïîäêëþ÷åíèÿ ê ñåðâåðó ïîñòðîåíèÿ ìàðøðóòà + /// (×åðåç .Net Remoting) + /// + public sealed class IRouteClient + { + /// + /// Ïîäêëþ÷àåñÿ ê ñåðâåðó ïîñòðîåíèÿ ìàðøðóòà + /// + /// + /// + /// + public static IRoute Connect(string host, int port) + { + return (IRoute)System.Runtime.Remoting.RemotingServices.Connect(typeof(IRoute), string.Format("tcp://{0}:{1}/dkxce.Route.TCPSolver", host, port)); + } + + } + + /// + /// Êëèåíò äëÿ ñåðâèñà ðàñ÷åòà ìàðøðóòîâ + /// (×åðåç TCP/IP ïðîòîêîë) + /// + public class RouteClient : IRoute + { + private int port; + private string ip; + private string licenseKey; + + public RouteClient(string ip, int port, string licenseKey) + { + this.port = port; + this.ip = ip; + this.licenseKey = licenseKey; + } + + /// + /// Âîçðàùàåò îáùåå ÷èñëî äîñòóïíûõ(çàäåéñòâîâàííûõ) ïîòîêîâ äëÿ ðàñ÷åòà + /// + /// + public int GetThreadsCount() // ID 0 + { + int result = -1; + + System.Net.Sockets.TcpClient cl = new System.Net.Sockets.TcpClient(); + cl.Connect(this.ip, this.port); + cl.ReceiveBufferSize = 22; + cl.ReceiveTimeout = 30 * 1000; // 30 sec + + byte[] buff = System.Text.Encoding.GetEncoding(1251).GetBytes("dkxce.Route.TCPSolver"); + cl.GetStream().Write(buff, 0, buff.Length); + cl.GetStream().WriteByte(0); + + int read = 0; + buff = new byte[21]; + while ((read = cl.GetStream().Read(buff, 0, buff.Length)) == 0) ; + if ((read == 21) && (System.Text.Encoding.GetEncoding(1251).GetString(buff) == "dkxce.Route.TCPSolver") && (cl.GetStream().ReadByte() == 0)) + result = cl.GetStream().ReadByte(); + cl.GetStream().Close(); + cl.Close(); + return result; + } + + /// + /// Âîçâðàùàåò ÷èñëî ñâîáîäíûõ (íåçàäåéñòâîâàííûõ) ïîòîêîâ äëÿ ðàñ÷åòà + /// + /// + public int GetIdleThreadCount() // ID 1 + { + int result = 0; + + System.Net.Sockets.TcpClient cl = new System.Net.Sockets.TcpClient(); + cl.Connect(this.ip, this.port); + cl.ReceiveBufferSize = 22; + cl.ReceiveTimeout = 30 * 1000; // 30 sec + + byte[] buff = System.Text.Encoding.GetEncoding(1251).GetBytes("dkxce.Route.TCPSolver"); + cl.GetStream().Write(buff, 0, buff.Length); + cl.GetStream().WriteByte(1); + + int read = 0; + buff = new byte[21]; + while ((read = cl.GetStream().Read(buff, 0, buff.Length)) == 0) ; + if ((read == 21) && (System.Text.Encoding.GetEncoding(1251).GetString(buff) == "dkxce.Route.TCPSolver") && (cl.GetStream().ReadByte() == 1)) + result = cl.GetStream().ReadByte(); + cl.GetStream().Close(); + cl.Close(); + return result; + } + + /// + /// Ïîëó÷åíèå ìàðøðóòà; + /// Ôëàãè: + /// 0x01 - ïîëó÷àòü ïîëèëèíèþ + /// 0x02 - ïîëó÷àòü îïèñàíèå + /// 0x04 - èñïîëüçîâàòü òåêóùèé òðàôèê (ïîêà íå èñïîëüçóåòñÿ) + /// 0x08 - èñïîëüçîâàòü èñòîðè÷åñêèé òðàôèê (ïîêà íå èñïîëüçóåòñÿ) + /// 0x10 - îïòèìèçèðîâàòü ïðîìåæóòî÷íûå òî÷êè ìàðøðóòà (ðåîðãàíèçàöèÿ) + /// 0x20 - îïòèìèçèðîâàòü ïî ðàññòîÿíèþ + /// 0x40 - äîïóñêàòü âûåçä íà äîðîãó è ñúåçä ÷åðåç âñòðå÷íóþ ïîëîñó + /// + /// Òî÷êè ìàðøðóòà + /// Íà÷àëüíîå âðåìÿ + /// ôëàãè + /// Ðåãèîíû äîñòóïíûå äëÿ ïîëüçîâàòåëÿ (null = âñå) + /// + public RResult GetRoute(RStop[] stops, DateTime startTime, long flags, int[] RegionsAvailableToUser) // ID 2 + { + RResult res = null; + + System.Net.Sockets.TcpClient cl = new System.Net.Sockets.TcpClient(); + cl.Connect(ip, port); + cl.ReceiveTimeout = 5 * 60 * 1000 + 10000; // 5 min as in server + 10s delay // 5 minutes // 2.5 mins per start // 2.5 mins per end + + byte[] buff = System.Text.Encoding.GetEncoding(1251).GetBytes("dkxce.Route.TCPSolver"); + cl.GetStream().Write(buff, 0, buff.Length); + cl.GetStream().WriteByte(2); + + BinaryFormatter bf = new BinaryFormatter(); + bf.Serialize(cl.GetStream(), new RAsk(licenseKey,stops, startTime, flags, RegionsAvailableToUser)); + + int read = 0; + buff = new byte[21]; + while ((read = cl.GetStream().Read(buff, 0, buff.Length)) == 0) ; + if ((read == 21) && (System.Text.Encoding.GetEncoding(1251).GetString(buff) == "dkxce.Route.TCPSolver") && (cl.GetStream().ReadByte() == 2)) + res = (dkxce.Route.ISolver.RResult)bf.Deserialize(cl.GetStream()); + cl.GetStream().Close(); + cl.Close(); + return res; + } + + /// + /// Ôëàãè: + /// 0x01 - ïîëó÷àòü ïîëèëèíèþ + /// 0x02 - ïîëó÷àòü îïèñàíèå + /// 0x04 - èñïîëüçîâàòü òåêóùèé òðàôèê + /// 0x08 - èñïîëüçîâàòü èñòîðè÷åñêèé òðàôèê + /// 0x10 - îïòèìèçèðîâàòü ïðîìåæóòî÷íûå òî÷êè ìàðøðóòà (ðåîðãàíèçàöèÿ) + /// 0x20 - îïòèìèçèðîâàòü ïî ðàññòîÿíèþ + /// 0x40 - äîïóñêàòü âûåçä íà äîðîãó è ñúåçä ÷åðåç âñòðå÷íóþ ïîëîñó + /// + /// + /// + /// + /// + /// Èçáåãàÿ ïðîåçä ïî äîðîãàì ñêâîçü òî÷êè [X-Lon,Y-Lat] + /// Èçáåãàÿ ïðîåçä ïî äîðîãàì ñêâîçü òî÷êè, ðàäèóñ â ìåòðàõ + /// Ïàðàìåòðû ïîñòðîåíèÿ ìàðøðóòà èñïîëüçóÿ àòðèáóòû äîðîã + /// + public RResult GetRoute(RStop[] stops, DateTime startTime, long flags, int[] RegionsAvailableToUser, + PointF[] roadsExcept, double roadsExceptRaduisInMeters, byte[] RoadsOnly) // ID 6 + { + RResult res = null; + + System.Net.Sockets.TcpClient cl = new System.Net.Sockets.TcpClient(); + cl.Connect(ip, port); + cl.ReceiveTimeout = 5 * 60 * 1000 + 10000; // 5 min as in server + 10s delay // 5 minutes // 2.5 mins per start // 2.5 mins per end + + byte[] buff = System.Text.Encoding.GetEncoding(1251).GetBytes("dkxce.Route.TCPSolver"); + cl.GetStream().Write(buff, 0, buff.Length); + cl.GetStream().WriteByte(6); + + BinaryFormatter bf = new BinaryFormatter(); + bf.Serialize(cl.GetStream(), new RAsk(licenseKey, stops, startTime, flags, RegionsAvailableToUser)); + + // RoadsOnly + byte[] wb = new byte[16]; + if ((RoadsOnly != null) && (RoadsOnly.Length == 16)) + cl.GetStream().Write(RoadsOnly, 0, RoadsOnly.Length); + else + cl.GetStream().Write(wb, 0, wb.Length); + // roadsExceptRaduisInMeters + wb = BitConverter.GetBytes(roadsExceptRaduisInMeters); + cl.GetStream().Write(wb, 0, wb.Length); + // pointsNo + wb = BitConverter.GetBytes((ushort)(roadsExcept == null ? 0 : roadsExcept.Length)); + cl.GetStream().Write(wb, 0, wb.Length); + // points + if ((roadsExcept != null) && (roadsExcept.Length > 0)) + { + byte[] btw = new byte[2 * 8 * roadsExcept.Length]; + for (int i = 0; i < roadsExcept.Length; i++) + { + wb = BitConverter.GetBytes((double)roadsExcept[i].Y); + Array.Copy(wb, 0, btw, i * 2 * 8, 8); + wb = BitConverter.GetBytes((double)roadsExcept[i].X); + Array.Copy(wb, 0, btw, i * 2 * 8 + 8, 8); + }; + cl.GetStream().Write(btw, 0, btw.Length); + }; + // End RoadsOnly + + int read = 0; + buff = new byte[21]; + while ((read = cl.GetStream().Read(buff, 0, buff.Length)) == 0) ; + if ((read == 21) && (System.Text.Encoding.GetEncoding(1251).GetString(buff) == "dkxce.Route.TCPSolver")) + { + byte RM = (byte)cl.GetStream().ReadByte(); + if((RM == 2) || (RM == 6)) + res = (dkxce.Route.ISolver.RResult)bf.Deserialize(cl.GetStream()); + }; + cl.GetStream().Close(); + cl.Close(); + return res; + } + + /// + /// Ïîëó÷åíèå ìàðøðóòà; + /// Ôëàãè: + /// 0x01 - ïîëó÷àòü ïîëèëèíèþ + /// 0x02 - ïîëó÷àòü îïèñàíèå + /// 0x04 - èñïîëüçîâàòü òåêóùèé òðàôèê (ïîêà íå èñïîëüçóåòñÿ) + /// 0x08 - èñïîëüçîâàòü èñòîðè÷åñêèé òðàôèê (ïîêà íå èñïîëüçóåòñÿ) + /// 0x10 - îïòèìèçèðîâàòü ïðîìåæóòî÷íûå òî÷êè ìàðøðóòà (ðåîðãàíèçàöèÿ) + /// 0x20 - îïòèìèçèðîâàòü ïî ðàññòîÿíèþ + /// 0x40 - äîïóñêàòü âûåçä íà äîðîãó è ñúåçä ÷åðåç âñòðå÷íóþ ïîëîñó + /// + /// Òî÷êè ìàðøðóòà + /// Íà÷àëüíîå âðåìÿ + /// ôëàãè + /// Ðåãèîíû äîñòóïíûå äëÿ ïîëüçîâàòåëÿ (null = âñå) + /// + public string GetRouteXML(RStop[] stops, DateTime startTime, long flags, int[] RegionsAvailableToUser) // ID 3 + { + string res = ""; + + System.Net.Sockets.TcpClient cl = new System.Net.Sockets.TcpClient(); + cl.Connect(ip, port); + cl.ReceiveTimeout = 5 * 60 * 1000 + 10000; // 5 min as in server + 10s delay // 5 minutes // 2.5 mins per start // 2.5 mins per end + + byte[] buff = System.Text.Encoding.GetEncoding(1251).GetBytes("dkxce.Route.TCPSolver"); + cl.GetStream().Write(buff, 0, buff.Length); + cl.GetStream().WriteByte(3); + + string[] ss = new string[stops.Length]; + double[] latt = new double[stops.Length]; + double[] lonn = new double[stops.Length]; + for(int i=0;i + /// Ïîëó÷åíèå ìàðøðóòà; + /// Ôëàãè: + /// 0x01 - ïîëó÷àòü ïîëèëèíèþ + /// 0x02 - ïîëó÷àòü îïèñàíèå + /// 0x04 - èñïîëüçîâàòü òåêóùèé òðàôèê (ïîêà íå èñïîëüçóåòñÿ) + /// 0x08 - èñïîëüçîâàòü èñòîðè÷åñêèé òðàôèê (ïîêà íå èñïîëüçóåòñÿ) + /// 0x10 - îïòèìèçèðîâàòü ïðîìåæóòî÷íûå òî÷êè ìàðøðóòà (ðåîðãàíèçàöèÿ) + /// 0x20 - îïòèìèçèðîâàòü ïî ðàññòîÿíèþ + /// 0x40 - äîïóñêàòü âûåçä íà äîðîãó è ñúåçä ÷åðåç âñòðå÷íóþ ïîëîñó + /// + /// Òî÷êè ìàðøðóòà + /// Íà÷àëüíîå âðåìÿ + /// ôëàãè + /// Ðåãèîíû äîñòóïíûå äëÿ ïîëüçîâàòåëÿ (null = âñå) + /// + public string GetRouteXML(RStop[] stops, DateTime startTime, long flags, int[] RegionsAvailableToUser, + PointF[] roadsExcept, double roadsExceptRaduisInMeters, byte[] RoadsOnly) // ID 7 + { + string res = ""; + + System.Net.Sockets.TcpClient cl = new System.Net.Sockets.TcpClient(); + cl.Connect(ip, port); + cl.ReceiveTimeout = 5 * 60 * 1000 + 10000; // 5 min as in server + 10s delay // 5 minutes // 2.5 mins per start // 2.5 mins per end + + byte[] buff = System.Text.Encoding.GetEncoding(1251).GetBytes("dkxce.Route.TCPSolver"); + cl.GetStream().Write(buff, 0, buff.Length); + cl.GetStream().WriteByte(7); + + string[] ss = new string[stops.Length]; + double[] latt = new double[stops.Length]; + double[] lonn = new double[stops.Length]; + for (int i = 0; i < stops.Length; i++) + { + ss[i] = stops[i].name; + latt[i] = stops[i].lat; + lonn[i] = stops[i].lon; + }; + buff = GetMethod3RequestData(licenseKey, ss, latt, lonn, startTime, flags, RegionsAvailableToUser); + cl.GetStream().Write(buff, 0, buff.Length); + + // RoadsOnly + byte[] wb = new byte[16]; + if ((RoadsOnly != null) && (RoadsOnly.Length == 16)) + cl.GetStream().Write(RoadsOnly, 0, RoadsOnly.Length); + else + cl.GetStream().Write(wb, 0, wb.Length); + // roadsExceptRaduisInMeters + wb = BitConverter.GetBytes(roadsExceptRaduisInMeters); + cl.GetStream().Write(wb, 0, wb.Length); + // pointsNo + wb = BitConverter.GetBytes((ushort)(roadsExcept == null ? 0 : roadsExcept.Length)); + cl.GetStream().Write(wb, 0, wb.Length); + // points + if ((roadsExcept != null) && (roadsExcept.Length > 0)) + { + byte[] btw = new byte[2 * 8 * roadsExcept.Length]; + for (int i = 0; i < roadsExcept.Length; i++) + { + wb = BitConverter.GetBytes((double)roadsExcept[i].Y); + Array.Copy(wb, 0, btw, i * 2 * 8, 8); + wb = BitConverter.GetBytes((double)roadsExcept[i].X); + Array.Copy(wb, 0, btw, i * 2 * 8 + 8, 8); + }; + cl.GetStream().Write(btw, 0, btw.Length); + }; + // End RoadsOnly + + int read = 0; + buff = new byte[21]; + while ((read = cl.GetStream().Read(buff, 0, buff.Length)) == 0) ; + if ((read == 21) && (System.Text.Encoding.GetEncoding(1251).GetString(buff) == "dkxce.Route.TCPSolver")) + { + byte RM = (byte)cl.GetStream().ReadByte(); + if ((RM == 3) || (RM == 7)) + { + System.IO.StreamReader sr = new System.IO.StreamReader(cl.GetStream()); + res = sr.ReadToEnd(); + }; + }; + cl.GetStream().Close(); + cl.Close(); + return res; + } + + /// + /// Ïðèâÿçêà òî÷êè ê äîðîãå + /// + /// Øèðîòà + /// Äîëãîòà + /// Çàïðàøèâàòü íàèìåíîâàíèå äîðîãè (ðàáîòàåò äîëüøå) + /// Ïðèâÿçàííûå ê äîðîãå òî÷êè + public RNearRoad[] GetNearRoad(double[] lat, double[] lon, bool getNames) // ID 4 + { + RNearRoad[] res = null; + + System.Net.Sockets.TcpClient cl = new System.Net.Sockets.TcpClient(); + cl.Connect(ip, port); + cl.ReceiveTimeout = 5 * 60 * 1000 + 10000; // 5 min as in server + 10s delay // 5 minutes // 2.5 mins per start // 2.5 mins per end + + byte[] buff = System.Text.Encoding.GetEncoding(1251).GetBytes("dkxce.Route.TCPSolver"); + cl.GetStream().Write(buff, 0, buff.Length); + cl.GetStream().WriteByte(4); + + BinaryFormatter bf = new BinaryFormatter(); + bf.Serialize(cl.GetStream(), new RNearRoadAsk(licenseKey,lat, lon, getNames)); + + int read = 0; + buff = new byte[21]; + while ((read = cl.GetStream().Read(buff, 0, buff.Length)) == 0) ; + if ((read == 21) && (System.Text.Encoding.GetEncoding(1251).GetString(buff) == "dkxce.Route.TCPSolver") && (cl.GetStream().ReadByte() == 4)) + res = (dkxce.Route.ISolver.RNearRoad[])bf.Deserialize(cl.GetStream()); + cl.GetStream().Close(); + cl.Close(); + return res; + } + + /// + /// Ïðèâÿçêà òî÷êè ê äîðîãå + /// + /// Øèðîòà + /// Äîëãîòà + /// Çàïðàøèâàòü íàèìåíîâàíèå äîðîãè (ðàáîòàåò äîëüøå) + /// Ïðèâÿçàííûå ê äîðîãå òî÷êè + public string GetNearRoadXML(double[] lat, double[] lon, bool getNames) // ID 5 + { + string res = ""; + + System.Net.Sockets.TcpClient cl = new System.Net.Sockets.TcpClient(); + cl.Connect(ip, port); + cl.ReceiveTimeout = 5 * 60 * 1000 + 10000; // 5 min as in server + 10s delay // 5 minutes // 2.5 mins per start // 2.5 mins per end + + byte[] buff = System.Text.Encoding.GetEncoding(1251).GetBytes("dkxce.Route.TCPSolver"); + cl.GetStream().Write(buff, 0, buff.Length); + cl.GetStream().WriteByte(5); + + buff = GetMethod5RequestData(licenseKey, lat, lon, getNames); + cl.GetStream().Write(buff, 0, buff.Length); + + int read = 0; + buff = new byte[21]; + while ((read = cl.GetStream().Read(buff, 0, buff.Length)) == 0) ; + if ((read == 21) && (System.Text.Encoding.GetEncoding(1251).GetString(buff) == "dkxce.Route.TCPSolver") && (cl.GetStream().ReadByte() == 5)) + { + System.IO.StreamReader sr = new System.IO.StreamReader(cl.GetStream()); + res = sr.ReadToEnd(); + }; + cl.GetStream().Close(); + cl.Close(); + return res; + } + + private byte[] GetMethod3RequestData(string licenseKey, string[] stopNames, double[] latt, double[] lonn, DateTime startTime, long flags, int[] regions) + { + if ((stopNames == null) || (latt == null) || (lonn == null)) return null; + if ((stopNames.Length != latt.Length) || (stopNames.Length != lonn.Length)) return null; + if ((stopNames.Length < 2) || ((stopNames.Length > 100))) return null; + + List ba = new List(); + ba.Add((byte)licenseKey.Length); + ba.AddRange(System.Text.Encoding.GetEncoding(1251).GetBytes(licenseKey)); + ba.Add((byte)stopNames.Length); + for (int i = 0; i < stopNames.Length; i++) + { + ba.Add((byte)stopNames[i].Length); + ba.AddRange(System.Text.Encoding.GetEncoding(1251).GetBytes(stopNames[i])); + ba.AddRange(BitConverter.GetBytes(latt[i])); + ba.AddRange(BitConverter.GetBytes(lonn[i])); + }; + ba.AddRange(BitConverter.GetBytes(startTime.ToOADate())); + ba.AddRange(BitConverter.GetBytes(flags)); + if (regions == null) + ba.Add(0); + else + { + ba.Add((byte)regions.Length); + for (int i = 0; i < regions.Length; i++) + ba.Add((byte)regions[i]); + }; + return ba.ToArray(); + } + + private byte[] GetMethod5RequestData(string licenseKey, double[] lat, double[] lon, bool getNames) + { + List ba = new List(); + ba.Add((byte)licenseKey.Length); + ba.AddRange(System.Text.Encoding.GetEncoding(1251).GetBytes(licenseKey)); + ba.Add((byte)(getNames ? 1 : 0)); + ba.AddRange(BitConverter.GetBytes((UInt16)lat.Length)); + for (int i = 0; i < lat.Length; i++) + { + ba.AddRange(BitConverter.GetBytes((double)lat[i])); + ba.AddRange(BitConverter.GetBytes((double)lon[i])); + }; + return ba.ToArray(); + } + } + +} diff --git a/SOLVER/dkxce.Route.ISolver/dkxce.Route.ISolver.csproj b/SOLVER/dkxce.Route.ISolver/dkxce.Route.ISolver.csproj new file mode 100644 index 0000000..1e6af30 --- /dev/null +++ b/SOLVER/dkxce.Route.ISolver/dkxce.Route.ISolver.csproj @@ -0,0 +1,51 @@ + + + Debug + AnyCPU + 8.0.50727 + 2.0 + {BB49850E-A9E4-4464-BF82-AAFE647A8860} + Library + Properties + dkxce.Route.ISolver + dkxce.Route.ISolver + + + true + full + false + ..\..\READY\MAIN_DLLs\ + DEBUG;TRACE + prompt + 4 + false + + + pdbonly + true + ..\..\READY\MAIN_DLLs\ + TRACE + prompt + 4 + true + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/SOLVER/dkxce.Route.ISolver/obj/Debug/dkxce.Route.ISolver.dll b/SOLVER/dkxce.Route.ISolver/obj/Debug/dkxce.Route.ISolver.dll new file mode 100644 index 0000000000000000000000000000000000000000..3a6e009230ce934a3e4143c4e9137133c07e79a1 GIT binary patch literal 24576 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 literal 0 HcmV?d00001 diff --git a/SOLVER/dkxce.Route.ISolver/obj/Release/ResolveAssemblyReference.cache b/SOLVER/dkxce.Route.ISolver/obj/Release/ResolveAssemblyReference.cache new file mode 100644 index 0000000000000000000000000000000000000000..3dbcd39409cdf704e119c9e2a1bc451d9d86dc47 GIT binary patch literal 12105 zcmeHNTXPge6yDxUHakOL6BGqS4T4v~ED55BqLpkC2qq+CV+;})CfVLFW_E{~nN1O( z%BT;54_+P=9u!`@U#cv@veYUsRla!n1N!8fKJXv(e4W{$Crn8oK5cD>J=@=Q_nAK3 zU!T+6LxLp|iGL{J8>u--Vtmk=avjep`g(W8vJ3jC>CJfUZDZW^ET_DyQ{Rfe_O@Kb z_A4&mRpu4nHSPAc;mV|KO+CfuMx7a6-Zi;(TXB2wkzz+jVf$8do7srRY>3sa=jS}1 zm-4>pbJS9cmdyofSiexD=N#MSQ$F>;)AyL(QQw@jIr^(MkWe80vuYDn&;}f{&}UBh zj@uNNlg>G%W2Vd97AVa*1wQOLvsQt-Y5b74PH=@R@={}_UEy9L(a?}+Y+R9!dscr{ z*QS_0_g|&|^8Ou9D(IEAf~1P9+DM`WIebzn5_jwR1pOQ7?dmx&G1%3=&*&K#@FvCw z2lD1DFX#o^PQkV<@%0Kb$EUbH;#7RD@6J2+EO$kd^wOH-Y}50&Cz_~BYx0aaH(+@_ znzX9D!4N(CrtrvCVYPQfZ#ywHrkl_u@EeP)R_7x*z= zF7Wb{#l2>4%JhBiqOF%ul+?=h#Sh9KrCBfNU6P94<32BgXLKA%czV-6n zhd=-Qw7QCbnt^B`!C*TK{^`{Br$l)xidIA1M1o;hP~P&#{G=$q8AWR#ZXv-iVkjSL z|LaXrek+RBLaZavh{s*GjjK#gwm)rpdEd3l(+%v-fWafY7_7R;NQrfK8$B|0JBjWp z86_vtp?7rXo!j-!Yx{|E#kQL;QVA@5v6`>j5_LT_RqueflSC`V9Eo9=#Z=rynN%Bz z!I&knjE-XpMaRXez5b4Gpyuk`5E~&jk!S@YkQhiHdVddPQumUG^gdXf%ji7_wwz(V zkD9CZLp(sD6;wrHV5jK#gOo{aCK2g);3JmNaWH>5!`@EK)h!S@M3zJ=77~&IW?y3k zV7)dPa6Fn3#=XpytO$Y4Mi3+W%SA^u5M8=WkEe|w_^dJz6uRtb$F=;UrL|Gm=eRki z?7NP=+Mspml&A4H3P!`G<*upf5HZKMCN10Y=Tb(WZBBa`q3B9`*3^_>4I(uqlj&8# z;tqPTJ&ac6qBUJ{O$6EMawlh6&CW$SdtLk&Ny~oaMHaoa8yRU1kKQ}aJ437-$?ahtmv&P8K)1$q4V|V|k zkrgpH8^+{pRUty3x{XvRztQIE#s&(muxS>14#P;Km3bojucQnLsU)E(zff*jBNcrD zkn%I>T*?4Oo5I&>3=UYV_#Fbm6$|*NfN;tJ?i3KtScH$qD05ScL)O&CsYJ}lF3Jqw z@SMcx7Sr{w|*eqDOfqoLUwmeH2jUi45cu+vS3MT|a>=31g05fnVNJ#}QV3DuI zCLv`En$I~deOYCEiBpzpjPO|tn@_Y&Q$lFQt`SiQ`z-|vtJb1YvL2NvrUy~!Fimi} z(5PjJB%RVc?^k*LJZ zNI+w!WnR53^GdI0 z!~A)HCO8abFNTzP36wb{v4owJfW}V9l$ncA250p;Wono*r)h$v`@b_GX8cndY|9PF@!v5zC%CWLUC03Gv#%!5a zGcvCf+^*G0Q^TZr3#6&OJJ8g#A!*KmG}97KSWyBR<1%Rq5z^oewoaNFCe1rE!I5j9 z^C4|6fHp@YrZ7VS8aqrVy!JUnAiVa;PE3rgd+5(I>UC9zczdXSO~p(pmi7exhBfp>|m O0xlsX8MqWzWyQZiwU!(J literal 0 HcmV?d00001 diff --git a/SOLVER/dkxce.Route.ISolver/obj/Release/dkxce.Route.ISolver.dll b/SOLVER/dkxce.Route.ISolver/obj/Release/dkxce.Route.ISolver.dll new file mode 100644 index 0000000000000000000000000000000000000000..95863f71ce51053c8b3e5b604e762d21245fe2ab GIT binary patch literal 24576 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 literal 0 HcmV?d00001 diff --git a/SOLVER/dkxce.Route.ISolver/obj/Release/dkxce.Route.ISolver.pdb b/SOLVER/dkxce.Route.ISolver/obj/Release/dkxce.Route.ISolver.pdb new file mode 100644 index 0000000000000000000000000000000000000000..6af41f38c300680eeb87f29925431abda39bd524 GIT binary patch literal 24064 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 literal 0 HcmV?d00001 diff --git a/SOLVER/dkxce.Route.ISolver/obj/dkxce.Route.ISolver.csproj.FileList.txt b/SOLVER/dkxce.Route.ISolver/obj/dkxce.Route.ISolver.csproj.FileList.txt new file mode 100644 index 0000000..7d9a381 --- /dev/null +++ b/SOLVER/dkxce.Route.ISolver/obj/dkxce.Route.ISolver.csproj.FileList.txt @@ -0,0 +1,11 @@ +bin\Debug\dkxce.Route.ISolver.dll +bin\Debug\dkxce.Route.ISolver.pdb +bin\Debug\dkxce.Route.Classes.dll +bin\Debug\dkxce.Route.GSolver.dll +bin\Debug\dkxce.Route.GSolver.pdb +bin\Debug\dkxce.Route.WayList.pdb +bin\Debug\dkxce.Route.Classes.pdb +obj\Debug\ResolveAssemblyReference.cache +obj\Debug\dkxce.Route.ISolver.dll +obj\Debug\dkxce.Route.ISolver.pdb +bin\Debug\dkxce.Route.WayList.dll diff --git a/SOLVER/dkxce.Route.ISolver/obj/dkxce.Route.ISolver.csproj.FileListAbsolute.txt b/SOLVER/dkxce.Route.ISolver/obj/dkxce.Route.ISolver.csproj.FileListAbsolute.txt new file mode 100644 index 0000000..f983bf8 --- /dev/null +++ b/SOLVER/dkxce.Route.ISolver/obj/dkxce.Route.ISolver.csproj.FileListAbsolute.txt @@ -0,0 +1,48 @@ +D:\Projects\projects.c# III\_GRAPH_SOLUTION\dkxce.Route.ISolver\bin\Debug\dkxce.Route.ISolver.dll +D:\Projects\projects.c# III\_GRAPH_SOLUTION\dkxce.Route.ISolver\bin\Debug\dkxce.Route.ISolver.pdb +D:\Projects\projects.c# III\_GRAPH_SOLUTION\dkxce.Route.ISolver\bin\Debug\dkxce.Route.Classes.dll +D:\Projects\projects.c# III\_GRAPH_SOLUTION\dkxce.Route.ISolver\bin\Debug\dkxce.Route.Classes.pdb +D:\Projects\projects.c# III\_GRAPH_SOLUTION\dkxce.Route.ISolver\obj\Debug\ResolveAssemblyReference.cache +D:\Projects\projects.c# III\_GRAPH_SOLUTION\dkxce.Route.ISolver\obj\Debug\dkxce.Route.ISolver.dll +D:\Projects\projects.c# III\_GRAPH_SOLUTION\dkxce.Route.ISolver\obj\Debug\dkxce.Route.ISolver.pdb +D:\Projects\projects.c# III\_GRAPH_SOLUTION\dkxce.Route.ISolver\bin\Debug\dkxce.Route.WayList.dll +D:\Projects\projects.c# III\_GRAPH_SOLUTION\dkxce.Route.ISolver\bin\Debug\dkxce.Route.GSolver.dll +D:\Projects\projects.c# III\_GRAPH_SOLUTION\dkxce.Route.ISolver\bin\Debug\dkxce.Route.GSolver.pdb +D:\Projects\projects.c# III\_GRAPH_SOLUTION\dkxce.Route.ISolver\bin\Debug\dkxce.Route.WayList.pdb +D:\Projects\projects.cs.III\_GRAPH_SOLUTION\dkxce.Route.ISolver\bin\Debug\dkxce.Route.ISolver.dll +D:\Projects\projects.cs.III\_GRAPH_SOLUTION\dkxce.Route.ISolver\bin\Debug\dkxce.Route.ISolver.pdb +D:\Projects\projects.cs.III\_GRAPH_SOLUTION\dkxce.Route.ISolver\bin\Debug\dkxce.Route.Classes.dll +D:\Projects\projects.cs.III\_GRAPH_SOLUTION\dkxce.Route.ISolver\bin\Debug\dkxce.Route.WayList.dll +D:\Projects\projects.cs.III\_GRAPH_SOLUTION\dkxce.Route.ISolver\bin\Debug\dkxce.Route.GSolver.dll +D:\Projects\projects.cs.III\_GRAPH_SOLUTION\dkxce.Route.ISolver\bin\Debug\dkxce.Route.GSolver.pdb +D:\Projects\projects.cs.III\_GRAPH_SOLUTION\dkxce.Route.ISolver\bin\Debug\dkxce.Route.WayList.pdb +D:\Projects\projects.cs.III\_GRAPH_SOLUTION\dkxce.Route.ISolver\bin\Debug\dkxce.Route.Classes.pdb +D:\Projects\projects.cs.III\_GRAPH_SOLUTION\dkxce.Route.ISolver\obj\Debug\ResolveAssemblyReference.cache +D:\Projects\projects.cs.III\_GRAPH_SOLUTION\dkxce.Route.ISolver\obj\Debug\dkxce.Route.ISolver.dll +D:\Projects\projects.cs.III\_GRAPH_SOLUTION\dkxce.Route.ISolver\obj\Debug\dkxce.Route.ISolver.pdb +C:\PROJECTS\CSharp_Navicom\ADDR_SEARCH\_GRAPH_SOLUTION\dkxce.Route.ISolver\obj\Debug\ResolveAssemblyReference.cache +C:\PROJECTS\CSharp_Navicom\ADDR_SEARCH\_GRAPH_SOLUTION\dkxce.Route.ISolver\bin\Debug\dkxce.Route.ISolver.dll +C:\PROJECTS\CSharp_Navicom\ADDR_SEARCH\_GRAPH_SOLUTION\dkxce.Route.ISolver\bin\Debug\dkxce.Route.ISolver.pdb +C:\PROJECTS\CSharp_Navicom\ADDR_SEARCH\_GRAPH_SOLUTION\dkxce.Route.ISolver\bin\Debug\dkxce.Route.Classes.dll +C:\PROJECTS\CSharp_Navicom\ADDR_SEARCH\_GRAPH_SOLUTION\dkxce.Route.ISolver\bin\Debug\dkxce.Route.WayList.dll +C:\PROJECTS\CSharp_Navicom\ADDR_SEARCH\_GRAPH_SOLUTION\dkxce.Route.ISolver\bin\Debug\dkxce.Route.GSolver.dll +C:\PROJECTS\CSharp_Navicom\ADDR_SEARCH\_GRAPH_SOLUTION\dkxce.Route.ISolver\bin\Debug\dkxce.Route.GSolver.pdb +C:\PROJECTS\CSharp_Navicom\ADDR_SEARCH\_GRAPH_SOLUTION\dkxce.Route.ISolver\bin\Debug\dkxce.Route.WayList.pdb +C:\PROJECTS\CSharp_Navicom\ADDR_SEARCH\_GRAPH_SOLUTION\dkxce.Route.ISolver\bin\Debug\dkxce.Route.Classes.pdb +C:\PROJECTS\CSharp_Navicom\ADDR_SEARCH\_GRAPH_SOLUTION\dkxce.Route.ISolver\obj\Debug\dkxce.Route.ISolver.dll +C:\PROJECTS\CSharp_Navicom\ADDR_SEARCH\_GRAPH_SOLUTION\dkxce.Route.ISolver\obj\Debug\dkxce.Route.ISolver.pdb +M:\NAVICOM_PROJECTS\_ROUTES_GIT_\SOLVER\READY\MapCreator\dkxce.Route.ISolver.dll +M:\NAVICOM_PROJECTS\_ROUTES_GIT_\SOLVER\READY\MapCreator\dkxce.Route.ISolver.pdb +M:\NAVICOM_PROJECTS\_ROUTES_GIT_\SOLVER\dkxce.Route.ISolver\obj\Debug\ResolveAssemblyReference.cache +M:\NAVICOM_PROJECTS\_ROUTES_GIT_\SOLVER\dkxce.Route.ISolver\obj\Debug\dkxce.Route.ISolver.dll +M:\NAVICOM_PROJECTS\_ROUTES_GIT_\SOLVER\dkxce.Route.ISolver\obj\Debug\dkxce.Route.ISolver.pdb +M:\NAVICOM_PROJECTS\_ROUTES_GIT_\READY\MAIN_DLLs\dkxce.Route.ISolver.dll +M:\NAVICOM_PROJECTS\_ROUTES_GIT_\READY\MAIN_DLLs\dkxce.Route.ISolver.pdb +M:\NAVICOM_PROJECTS\_ROUTES_GIT_\SOLVER\dkxce.Route.ISolver\obj\Release\ResolveAssemblyReference.cache +M:\NAVICOM_PROJECTS\_ROUTES_GIT_\SOLVER\dkxce.Route.ISolver\obj\Release\dkxce.Route.ISolver.dll +M:\NAVICOM_PROJECTS\_ROUTES_GIT_\SOLVER\dkxce.Route.ISolver\obj\Release\dkxce.Route.ISolver.pdb +M:\NAVICOM_PROJECTS\_ROUTES_PSOURCE_\READY\MAIN_DLLs\dkxce.Route.ISolver.dll +M:\NAVICOM_PROJECTS\_ROUTES_PSOURCE_\READY\MAIN_DLLs\dkxce.Route.ISolver.pdb +M:\NAVICOM_PROJECTS\_ROUTES_PSOURCE_\SOLVER\dkxce.Route.ISolver\obj\Debug\ResolveAssemblyReference.cache +M:\NAVICOM_PROJECTS\_ROUTES_PSOURCE_\SOLVER\dkxce.Route.ISolver\obj\Debug\dkxce.Route.ISolver.dll +M:\NAVICOM_PROJECTS\_ROUTES_PSOURCE_\SOLVER\dkxce.Route.ISolver\obj\Debug\dkxce.Route.ISolver.pdb diff --git a/SOLVER/dkxce.Route.Matrix/Properties/AssemblyInfo.cs b/SOLVER/dkxce.Route.Matrix/Properties/AssemblyInfo.cs new file mode 100644 index 0000000..5006088 --- /dev/null +++ b/SOLVER/dkxce.Route.Matrix/Properties/AssemblyInfo.cs @@ -0,0 +1,35 @@ +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +[assembly: AssemblyTitle("dkxce.Route.Matrix")] +[assembly: AssemblyDescription("Модуль Ð´Ð»Ñ Ñ€Ð°ÑÑчета маршрутов")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("Milok Zbrozek ")] +[assembly: AssemblyProduct("dkxce.Route.Matrix")] +[assembly: AssemblyCopyright("Copyright © Milok Zbrozek 2021")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// Setting ComVisible to false makes the types in this assembly not visible +// to COM components. If you need to access a type in this assembly from +// COM, set the ComVisible attribute to true on that type. +[assembly: ComVisible(false)] + +// The following GUID is for the ID of the typelib if this project is exposed to COM +[assembly: Guid("4bcedd18-8782-404f-abd1-cdab68561dfb")] + +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +// You can specify all the values or you can default the Revision and Build Numbers +// by using the '*' as shown below: +[assembly: AssemblyVersion("21.12.21.3")] +[assembly: AssemblyFileVersion("21.12.21.3")] diff --git a/SOLVER/dkxce.Route.Matrix/Route.Matrix.cs b/SOLVER/dkxce.Route.Matrix/Route.Matrix.cs new file mode 100644 index 0000000..32947f1 --- /dev/null +++ b/SOLVER/dkxce.Route.Matrix/Route.Matrix.cs @@ -0,0 +1,687 @@ +/* + * C# Class by Milok Zbrozek + * Ìîäóëü äëÿ ðàññ÷åòà ìàðøðóòîâ ïî ãðàôàì, + * èñïîëüçóÿ àëãîðèòì Ôëîéäà — Óîðøåëëà + * â ïàìÿòè è ÷åðåç äèñêîâûå ôàéëû + * Author: Milok Zbrozek + * Âåðñèÿ: 13305C7 + */ + +using System; +using System.IO; +using System.Collections; +using System.Collections.Generic; +using System.Text; +using System.Xml; +using System.Xml.Serialization; + +namespace dkxce.Route.Matrix +{ + ///

+ /// Êâàäðàòíàÿ ìàòðèöà ðàññòîÿíèé + /// äëÿ ïðåäâàðèòåëüíîãî ïðîñ÷åòà + /// + public class RMMatrix + { + /* + * rm.main file: + * 0x00 .... 0x07 : Header - RMHEADER + * 4 bytes (int) : Nodes + * 4 bytes (single): max distance between modes + * array of nodes: + * prev[uint]; 4 + * cost[float]; 4 + * dist[float]; 4 + * time[float]; 4 + * byreg[ushort]; 2 + */ + + /// + /// Çàãîëîâîê äëÿ ôàéëà ìàòðèöû + /// + private static byte[] rmheader = new byte[] { 0x52, 0x4d, 0x48, 0x45, 0x41, 0x44, 0x45, 0x52 }; + + /// + /// Èñï-ñÿ äëÿ string-->float + /// + private System.Globalization.CultureInfo ci = System.Globalization.CultureInfo.InstalledUICulture; + /// + /// Èñï-ñÿ äëÿ string-->float + /// + private System.Globalization.NumberFormatInfo ni; + public System.Globalization.NumberFormatInfo DotDelimiter { get { return ni; } } + + + /// + /// Ìàêñèìàëüíàÿ äëèíà ìåæäó óçëàìè + /// + private Single maxDistBetweenNodes = 0; + + /// + /// Ìàêñèìàëüíàÿ äëèíà ìåæäó óçëàìè + /// + public Single MaxDistanceBetweenNodes { get { return maxDistBetweenNodes; } } + + /// + /// Ìàêñèìàëüíàÿ îøèáêà äëÿ ðàñ÷åòîâ (èñï-ñÿ äëÿ îïðåäåëåíèÿ íàçàïîëíåííûõ êëåòîê) + /// + private const Single maxError = (Single)1e-6; + + /// + /// Ìàêñèìàëüíîå çíà÷åíèå îöåíêè, áîëüøå êîòîðîãî îöåíêà ÿâëÿåòñÿ áåñêîíå÷íîé + /// + private const Single maxValue = (Single)1e+30; + + /// + /// Ñìåùåíèå ïðåäûäóùåãî óçëà ïóòè â ìàòðèöå îòíîñèòåëüíî íà÷àëà ÿ÷åéêè + /// + private const byte prevOffset = 0; + + /// + /// Ñìåùåíèå îöåíêè â ìàòðèöå îòíîñèòåëüíî íà÷àëà ÿ÷åéêè + /// + private const byte costOffset = 4; + + /// + /// Ñìåùåíèå äèñòàíöèè â ìàòðèöå îòíîñèòåëüíî íà÷àëà ÿ÷åéêè + /// + private const byte distOffset = 4 + 4; + + /// + /// Ñìåùåíèå âðåìåíè â ìàòðèöå îòíîñèòåëüíî íà÷àëà ÿ÷åéêè + /// + private const byte timeOffset = 4 + 4 + 4; + + /// + /// Ñìåùåíèå ðåãèîíà â ìàòðèöå îòíîñèòåëüíî íà÷àëà ÿ÷åéêè + /// + private const ushort byRegOffset = 4 + 4 + 4 + 4; + + /// + /// Ðàçìåð ÿ÷åéêè ìàòðèöû + /// + private const uint recordLength = 4 + 4 + 4 + 4 + 2; // prev_node + cost + dist + time + byreg + private const uint max_nodes = 10000; // Max file size: 2GB + + /// + /// Ìàòðèöà + /// + private Stream matrixStream = null; + + /// + /// Ôàéë ìàòðèöû + /// + private string matrixFile = null; + + /// + ///  ïàìÿòè ëè ìàòðèöà èëè â ôàéëå + /// + private bool inMemory = false; + + /// + /// Åñëè ìàòðèöà óæå ïðîñ÷èòàíà è çàãðóæåíà äëÿ ðàáîòû, + /// à íå äëÿ äîáàâëåíèÿ ïóòåé + /// + private bool inReadMode = false; + + + /// + /// ×èñëî óçëîâ ìàòðèöû + /// + private int size = 0; + + /// + /// Matrix File Name + /// + public string FileName { get { return matrixFile; } } + + /// + /// Matrix In Memory Or Not + /// + public bool InMemory { get { return inMemory; } } + /// + /// Åñëè ìàòðèöà óæå ïðîñ÷èòàíà è çàãðóæåíà äëÿ ðàáîòû, + /// à íå äëÿ äîáàâëåíèÿ ïóòåé + /// + public bool InReadMode { get { return inReadMode; } } + + /// + /// Nodes in Matrix + /// + public int NodesCount { get { return this.size; } } + + /// + /// PRIVATE CREATE ONLY + /// + private RMMatrix() + { + ni = (System.Globalization.NumberFormatInfo)ci.NumberFormat.Clone(); + ni.NumberDecimalSeparator = "."; + } + + /// + /// Ñîçäàåì ìàòðèöó â ôàéëå(àõ) + /// + /// ×èñëî óçëîâ ìàòðèöû + /// Ïóòü ê ôàéëàì + /// + public static RMMatrix CreateOnDisk(int nodes, string fileName) + { + if (nodes > max_nodes) throw new OverflowException("Maximum nodes count is " + max_nodes.ToString()); + + RMMatrix rm = new RMMatrix(); + rm.inMemory = false; + rm.matrixFile = fileName; + rm.size = nodes; + rm.matrixStream = new FileStream(fileName, FileMode.Create, FileAccess.ReadWrite); + rm.matrixStream.SetLength(rm.size * rm.size * recordLength + rmheader.Length + 8); // header + count + max_dist + data + rm.matrixStream.Write(rmheader, 0, rmheader.Length); + byte[] ba = BitConverter.GetBytes(nodes); + rm.matrixStream.Write(ba, 0, ba.Length); + ba = BitConverter.GetBytes(float.MaxValue); + rm.matrixStream.Write(ba, 0, ba.Length); + rm.matrixStream.Flush(); + return rm; + } + + /// + /// Ñîçäàåì ìàòðèöó â ïàìÿòè + /// + /// ×èñëî óçëîâ ìàòðèöû + /// + public static RMMatrix CreateInMemory(int nodes) + { + if (nodes > max_nodes) throw new OverflowException("Maximum nodes count is " + max_nodes.ToString()); + + RMMatrix rm = new RMMatrix(); + rm.inMemory = true; + rm.matrixFile = ""; + rm.size = nodes; + rm.matrixStream = new MemoryStream(); + rm.matrixStream.SetLength(rm.size * rm.size * recordLength + rmheader.Length + 8); // header + count + max_dist + data + rm.matrixStream.Write(rmheader, 0, rmheader.Length); + byte[] ba = BitConverter.GetBytes(nodes); + rm.matrixStream.Write(ba, 0, ba.Length); + ba = BitConverter.GetBytes(float.MaxValue); + rm.matrixStream.Write(ba, 0, ba.Length); + rm.matrixStream.Flush(); + return rm; + } + + /// + /// Îòêðûâàåì ôàéëû äëÿ ðàáîòû ñ ìàòðèöåé áåç çàãðóçêè â ïàìÿòü + /// + /// + /// + public static RMMatrix WorkWithDisk(string fileName) + { + RMMatrix rm = new RMMatrix(); + rm.inReadMode = true; + rm.matrixStream = new FileStream(fileName, FileMode.Open, FileAccess.Read); + byte[] ba = new byte[rmheader.Length]; + rm.matrixStream.Read(ba, 0, ba.Length); + if (System.Text.Encoding.GetEncoding(1251).GetString(ba) != "RMHEADER") + { + rm.matrixStream.Close(); + throw new IOException("Unknown file format:\r\n" + fileName); + }; + ba = new byte[4]; + rm.matrixStream.Read(ba, 0, ba.Length); + rm.size = BitConverter.ToInt32(ba, 0); + rm.matrixStream.Read(ba, 0, ba.Length); + rm.maxDistBetweenNodes = BitConverter.ToSingle(ba, 0); + rm.inMemory = false; + rm.matrixFile = fileName; + + return rm; + } + + /// + /// Çàãðóæàåì ìàòðèöó èç ôàéëà â ïàìÿòü + /// + /// + /// + public static RMMatrix LoadToMemory(string fileName) + { + RMMatrix rm = new RMMatrix(); + rm.inReadMode = true; + rm.matrixStream = new MemoryStream(); + + FileStream fs = new FileStream(fileName, FileMode.Open, FileAccess.Read); + int read = 0; + byte[] ba = new byte[8192]; + while ((read = fs.Read(ba, 0, ba.Length)) > 0) + { + rm.matrixStream.Write(ba, 0, read); + rm.matrixStream.Flush(); + }; + fs.Close(); + + rm.matrixStream.Position = 0; + ba = new byte[rmheader.Length]; + rm.matrixStream.Read(ba, 0, ba.Length); + if (System.Text.Encoding.GetEncoding(1251).GetString(ba) != "RMHEADER") + { + rm.matrixStream.Close(); + throw new IOException("Unknown file format:\r\n" + fileName); + }; + ba = new byte[4]; + rm.matrixStream.Read(ba, 0, ba.Length); + rm.size = BitConverter.ToInt32(ba, 0); + rm.matrixStream.Read(ba, 0, ba.Length); + rm.maxDistBetweenNodes = BitConverter.ToSingle(ba, 0); + rm.inMemory = true; + rm.matrixFile = fileName; + + return rm; + } + + /// + /// Óñòàíàâëèâàåì ïðåäøåñòâóþùóþ òî÷êó next ïóòè èç X â Y + /// + /// íà÷àëüíàÿ òî÷êà + /// êîíå÷íàÿ òî÷êà + /// êîíå÷íàÿ òî÷êà - 1 + private void SetPrev(uint x, uint y, uint prev) + { + if (x == y) return; + + matrixStream.Position = rmheader.Length + 8 + (x - 1) * size * recordLength + (y - 1) * recordLength + prevOffset; + byte[] arr = BitConverter.GetBytes(prev); + matrixStream.Write(arr, 0, arr.Length); + } + + /// + /// Ïîëó÷àåì ïðåäøåñòâóþùóþ òî÷êó ïóòè èç X â Y + /// + /// íà÷àëüíàÿ òî÷êà + /// êîíå÷íàÿ òî÷êà + /// êîíå÷íàÿ òî÷êà - 1 + private uint GetPrev(uint x, uint y) + { + if (x == 0) return 0; + if (y == 0) return 0; + if (x == y) return y; + + matrixStream.Position = rmheader.Length + 8 + (x - 1) * size * recordLength + (y - 1) * recordLength + prevOffset; + byte[] arr = new byte[4]; + matrixStream.Read(arr, 0, 4); + return (uint)BitConverter.ToUInt32(arr, 0); + } + + /// + /// Ïîëó÷àåì ðåãèîí ìàðøðóòà ïóòè èç X â Y + /// + /// íà÷àëüíàÿ òî÷êà + /// êîíå÷íàÿ òî÷êà + /// ðåãèîí + public ushort GetByReg(uint x, uint y) + { + if (x == 0) return 0; + if (y == 0) return 0; + if (x == y) return 0; + + matrixStream.Position = rmheader.Length + 8 + (x - 1) * size * recordLength + (y - 1) * recordLength + byRegOffset; + byte[] arr = new byte[2]; + matrixStream.Read(arr, 0, 2); + return (ushort)BitConverter.ToUInt16(arr, 0); + } + + /// + /// Ïîëó÷àåì ðàññòîÿíèå èç òî÷êè X â Y + /// + /// íà÷àëüíàÿ òî÷êà + /// êîíå÷íàÿ òî÷êà + /// Ðàññòîÿíèå + public Single GetRouteDist(uint x, uint y) + { + if (x == 0) return 0; + if (y == 0) return 0; + if (x == y) return 0; + + matrixStream.Position = rmheader.Length + 8 + (x - 1) * size * recordLength + (y - 1) * recordLength + distOffset; + byte[] arr = new byte[4]; + matrixStream.Read(arr, 0, 4); + Single s = BitConverter.ToSingle(arr, 0); + return s < maxError ? Single.MaxValue : s; + } + + /// + /// Óñòàíàâëèâàåì ðàññòîÿíèå èç òî÷êè X â Y + /// + /// íà÷àëüíàÿ òî÷êà + /// êîíå÷íàÿ òî÷êà + /// Ðàññòîÿíèå + private void SetDist(uint x, uint y, Single distance) + { + matrixStream.Position = rmheader.Length + 8 + (x - 1) * size * recordLength + (y - 1) * recordLength + distOffset; + byte[] arr = BitConverter.GetBytes(distance); + matrixStream.Write(arr, 0, 4); + } + + /// + /// Ïîëó÷àåì âðåìÿ äâèæåíèÿ èç òî÷êè X â Y + /// + /// íà÷àëüíàÿ òî÷êà + /// êîíå÷íàÿ òî÷êà + /// Âðåìÿ äâèæåíèÿ + public Single GetRouteTime(uint x, uint y) + { + if (x == 0) return 0; + if (y == 0) return 0; + if (x == y) return 0; + + matrixStream.Position = rmheader.Length + 8 + (x - 1) * size * recordLength + (y - 1) * recordLength + timeOffset; + byte[] arr = new byte[4]; + matrixStream.Read(arr, 0, 4); + Single d = BitConverter.ToSingle(arr, 0); + return d < maxError ? Single.MaxValue : d; + } + + // + /// Óñòàíàâëèâàåì âðåìÿ äâèæåíèÿ èç òî÷êè X â Y + /// + /// íà÷àëüíàÿ òî÷êà + /// êîíå÷íàÿ òî÷êà + /// Âðåìÿ äâèæåíèÿ + private void SetTime(uint x, uint y, Single time) + { + matrixStream.Position = rmheader.Length + 8 + (x - 1) * size * recordLength + (y - 1) * recordLength + timeOffset; + byte[] arr = BitConverter.GetBytes(time); + matrixStream.Write(arr, 0, 4); + } + + // + /// Óñòàíàâëèâàåì ÷åðåç êàêîé ðåãèîí èäåò ìàðøðóò èç òî÷êè X â Y + /// + /// íà÷àëüíàÿ òî÷êà + /// êîíå÷íàÿ òî÷êà + /// Ðåãèîí + private void SetReg(uint x, uint y, ushort byReg) + { + matrixStream.Position = rmheader.Length + 8 + (x - 1) * size * recordLength + (y - 1) * recordLength + byRegOffset; + byte[] arr = BitConverter.GetBytes(byReg); + matrixStream.Write(arr, 0, 2); + } + + /// + /// Ïîëó÷àåì îöåíêó ïóòè + /// + /// íà÷àëüíàÿ òî÷êà + /// êîíå÷íàÿ òî÷êà + /// Îöåíêà + private Single GetCost(uint x, uint y) + { + if (x == 0) return Single.MaxValue; + if (y == 0) return Single.MaxValue; + if (x == y) return 0; + + matrixStream.Position = rmheader.Length + 8 + (x - 1) * size * recordLength + (y - 1) * recordLength + costOffset; + byte[] arr = new byte[4]; + matrixStream.Read(arr, 0, 4); + Single d = BitConverter.ToSingle(arr, 0); + return d < maxError ? Single.MaxValue : d; + } + + /// + /// Îöåíêà ïóòè èç X â Y + /// + /// íà÷àëüíàÿ òî÷êà + /// êîíå÷íàÿ òî÷êà + /// Îöåíêà + private void SetCost(uint x, uint y, Single cost) + { + if (x == 0) return; + if (y == 0) return; + if (x == y) return; + + matrixStream.Position = rmheader.Length + 8 + (x - 1) * size * recordLength + (y - 1) * recordLength + costOffset; + byte[] arr = BitConverter.GetBytes(cost); + matrixStream.Write(arr, 0, arr.Length); + } + + /// + /// Äîáàâëÿåì ïóòü â ìàòðèöó èç òî÷êè X â Y + /// + /// íà÷àëüíàÿ òî÷êà + /// êîíå÷íàÿ òî÷êà + /// îöåíêà ïóòè + /// äëèíà ïóòè + /// âðåìÿ äâèæåíèÿ â ïóòè + /// ÷åðåç êàêîé ðåãèîí èäåò ìàðøðóò + public void AddWay(uint x, uint y, Single cost, Single dist, Single time, ushort byReg) + { + if (x == 0) + { + Console.WriteLine("ERROR: RGNode X Could n't be 0"); + throw new Exception("RGNode X Could n't be 0"); + }; + if (y == 0) + { + Console.WriteLine("ERROR: RGNode Y Could n't be 0"); + throw new Exception("RGNode Y Could n't be 0"); + }; + + if (inReadMode) throw new IOException("Matrix in read-only mode"); + + if (dist > maxDistBetweenNodes) maxDistBetweenNodes = dist; + + Single cc = GetCost(x, y); + if (cc < cost) + { + //Console.WriteLine("cc < cost " + x.ToString() + " - > " + y.ToString()); + //Console.ReadLine(); + return; + }; + + SetCost(x, y, cost); + SetPrev(x, y, x); + SetDist(x, y, dist); + SetTime(x, y, time); + SetReg(x, y, byReg); + + matrixStream.Flush(); + } + + /// + /// Ðàñ÷åò ìàòðèöû ïî àëãîðèòìó Ôëîéäà — Óîðøåëëà + /// (minimize by cost) + /// + public void Solve() + { + Console.WriteLine("Begin Solve..."); + Console.WriteLine("Initialize..."); + for (uint k = 1; k <= size; k++) + { + for (uint i = 1; i <= size; i++) + { + for (uint j = 1; j <= size; j++) + { + float ikj = GetCost(i, k) + GetCost(k, j); + if (ikj < GetCost(i, j)) + { + SetPrev(i, j, k); // SET THROUGH NODE + SetCost(i, j, ikj); + SetDist(i, j, GetRouteDist(i, k) + GetRouteDist(k, j)); + SetTime(i, j, GetRouteTime(i, k) + GetRouteTime(k, j)); + }; + DoProgress(k, i, j); + }; + }; + }; + matrixStream.Flush(); + Console.WriteLine("Done"); + } + + + /// + /// Èíäèêàöèÿ ïðîöåññà àíàëèçà ìàòðèöû + /// + /// + /// + /// + private void DoProgress(uint k, uint i, uint j) + { + if (i != last_i) + { + last_i = i; + Console.SetCursorPosition(0, Console.CursorTop - 1); + Console.WriteLine(String.Format("Optimize Route: {0:00000}->-{1:00000}", k, i, j)); + }; + } + private uint last_i = 0; + + /// + /// Âîâçðàùàåì âåêòîð ïðîìåæóòî÷íûõ óçëîâ èç òî÷êè X â Y + /// + /// íà÷àëüíàÿ òî÷êà + /// êîíå÷íàÿ òî÷êà + /// + public uint[] GetRouteWay(uint x, uint y) + { + if (x == 0) return null; // NO WAY + if (y == 0) return null; // NO WAY + if (x == y) return new uint[0]; // ALREADY + if (GetCost(x, y) == 0) return new uint[0]; // ALREADY + + List arr = new List(); + uint through = GetPrev(x,y); + if(through != x) + { + arr.AddRange(GetRouteWay(x,through)); + arr.Add(through); + arr.AddRange(GetRouteWay(through,y)); + }; + + // OLD + //uint intermediate = y; + //List arr = new List(); + //while ( + // ((intermediate = GetPrev(x, intermediate)) > 0) + // && + // (intermediate != x)) + // arr.Add(intermediate); + //uint[] a = arr.ToArray(); + //Array.Reverse(a); + //return a; + + return arr.ToArray(); + } + + /// + /// Âîçâðàùàåì îöåíêó ïóòè èç òî÷êè X â Y + /// + /// íà÷àëüíàÿ òî÷êà + /// êîíå÷íàÿ òî÷êà + /// Îöåíêó + public Single GetRouteCost(uint x, uint y) + { + return GetCost(x, y); + } + + /// + /// Åñëè ìàòðèöà â ïàìÿòè, òî ñîõðàíÿåì åå â ôàéë + /// + /// + public void SaveToFile(string fileName) + { + if (!inMemory) return; + this.matrixFile = fileName; + + FileStream fs = new FileStream(fileName, FileMode.Create); + byte[] ba = BitConverter.GetBytes(size); + fs.Write(rmheader, 0, rmheader.Length); + fs.Write(ba, 0, ba.Length); + ba = BitConverter.GetBytes(maxDistBetweenNodes); + fs.Write(ba, 0, ba.Length); + int read = 0; + ba = new byte[8192]; + matrixStream.Position = rmheader.Length + 8; + while ((read = this.matrixStream.Read(ba, 0, ba.Length)) > 0) + { + fs.Write(ba, 0, read); + fs.Flush(); + }; + fs.Flush(); + fs.Close(); + } + + /// + /// Äëÿ îñâîáîæäåíèÿ âñåõ ðåñóðñîâ + /// íåîáõîäèìî âûçûâàòü ïîñëå êîíöà âñåé ðàáîòû ñ ìàòðèöåé + /// + public void Close() + { + matrixStream.Position = rmheader.Length + 8; + byte[] ba = BitConverter.GetBytes(maxDistBetweenNodes); + matrixStream.Write(ba, 0, ba.Length); + matrixStream.Flush(); + + matrixStream.Close(); + matrixStream = null; + + inMemory = false; + inReadMode = true; + } + + ~RMMatrix() + { + if (matrixStream != null) Close(); + } + + /// + /// Âûâîäèò íàãëÿäíóþ ìàòðèöó â òåêñòîâûé ôàéë + /// (ðåêîìåíäóåòñÿ òîëüêî äëÿ íåáîëüøèõ ìàòðèö) + /// + /// Ïîëíûé ïóòü ê ôàéëó + public void SaveToTextFile(string fn) + { + FileStream fout = new FileStream(fn, FileMode.Create); + StreamWriter sw = new StreamWriter(fout); + sw.Write("COST;"); + for (uint y = 1; y <= size; y++) sw.Write(y.ToString() + ";"); + sw.WriteLine(); + for (uint x = 1; x <= size; x++) + { + sw.Write(x.ToString() + ";"); + for (uint y = 1; y <= size; y++) + if (GetCost(x, y) > maxValue) + sw.Write(". . .;"); + else + sw.Write(GetPrev(x, y).ToString() + "(" + GetCost(x, y).ToString("0.000").Replace(",", ".") + ") R"+GetByReg(x,y).ToString()+" ;"); + sw.WriteLine(); + }; + sw.WriteLine(); + sw.Write("DIST;"); + for (uint y = 1; y <= size; y++) sw.Write(y.ToString() + ";"); + sw.WriteLine(); + for (uint x = 1; x <= size; x++) + { + sw.Write(x.ToString() + ";"); + for (uint y = 1; y <= size; y++) + if (GetCost(x, y) > maxValue) + sw.Write(". . .;"); + else + sw.Write(GetPrev(x, y).ToString() + "(" + GetRouteDist(x, y).ToString("0.000").Replace(",", ".") + ") ;"); + sw.WriteLine(); + }; + sw.WriteLine(); + sw.Write("TIME;"); + for (uint y = 1; y <= size; y++) sw.Write(y.ToString() + ";"); + sw.WriteLine(); + for (uint x = 1; x <= size; x++) + { + sw.Write(x.ToString() + ";"); + for (uint y = 1; y <= size; y++) + if (GetCost(x, y) > maxValue) + sw.Write(". . .;"); + else + sw.Write(GetPrev(x, y).ToString() + "(" + GetRouteTime(x, y).ToString("0.000").Replace(",", ".") + ") ;"); + sw.WriteLine(); + }; + sw.WriteLine(); + sw.Flush(); + fout.Close(); + } + } +} diff --git a/SOLVER/dkxce.Route.Matrix/dkxce.Route.Matrix.csproj b/SOLVER/dkxce.Route.Matrix/dkxce.Route.Matrix.csproj new file mode 100644 index 0000000..bcb6a94 --- /dev/null +++ b/SOLVER/dkxce.Route.Matrix/dkxce.Route.Matrix.csproj @@ -0,0 +1,47 @@ + + + Debug + AnyCPU + 8.0.50727 + 2.0 + {5CB2D087-B3C1-4F42-9EA6-65D61BDF8AFF} + Library + Properties + dkxce.Route.Matrix + dkxce.Route.Matrix + + + true + full + false + ..\..\READY\MAIN_DLLs\ + DEBUG;TRACE + prompt + 4 + + + pdbonly + true + ..\..\READY\MAIN_DLLs\ + TRACE + prompt + 4 + + + + + + + + + + + + + \ No newline at end of file diff --git a/SOLVER/dkxce.Route.Matrix/obj/Debug/dkxce.Route.Matrix.dll b/SOLVER/dkxce.Route.Matrix/obj/Debug/dkxce.Route.Matrix.dll new file mode 100644 index 0000000000000000000000000000000000000000..c406210d3347d89e2b7ef9e76ae757e5f256fa01 GIT binary patch literal 24576 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 Fe**MIp`ic( literal 0 HcmV?d00001 diff --git a/SOLVER/dkxce.Route.Matrix/obj/Debug/dkxce.Route.Matrix.pdb b/SOLVER/dkxce.Route.Matrix/obj/Debug/dkxce.Route.Matrix.pdb new file mode 100644 index 0000000000000000000000000000000000000000..98a05a324a2e58485532513d752468ff346201c4 GIT binary patch literal 28160 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 literal 0 HcmV?d00001 diff --git a/SOLVER/dkxce.Route.Matrix/obj/Release/dkxce.Route.Matrix.pdb b/SOLVER/dkxce.Route.Matrix/obj/Release/dkxce.Route.Matrix.pdb new file mode 100644 index 0000000000000000000000000000000000000000..604c5af497cda8b317598c99bf49dd596b0e0bb6 GIT binary patch literal 26112 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 literal 0 HcmV?d00001 diff --git a/SOLVER/dkxce.Route.Matrix/obj/dkxce.Route.Matrix.csproj.FileList.txt b/SOLVER/dkxce.Route.Matrix/obj/dkxce.Route.Matrix.csproj.FileList.txt new file mode 100644 index 0000000..bf9284d --- /dev/null +++ b/SOLVER/dkxce.Route.Matrix/obj/dkxce.Route.Matrix.csproj.FileList.txt @@ -0,0 +1,5 @@ +obj\Debug\ResolveAssemblyReference.cache +bin\Debug\dkxce.Route.Matrix.dll +bin\Debug\dkxce.Route.Matrix.pdb +obj\Debug\dkxce.Route.Matrix.dll +obj\Debug\dkxce.Route.Matrix.pdb diff --git a/SOLVER/dkxce.Route.Matrix/obj/dkxce.Route.Matrix.csproj.FileListAbsolute.txt b/SOLVER/dkxce.Route.Matrix/obj/dkxce.Route.Matrix.csproj.FileListAbsolute.txt new file mode 100644 index 0000000..7a3cd80 --- /dev/null +++ b/SOLVER/dkxce.Route.Matrix/obj/dkxce.Route.Matrix.csproj.FileListAbsolute.txt @@ -0,0 +1,30 @@ +D:\Projects\projects.c# III\_GRAPH_SOLUTION\dkxce.Route.Matrix\bin\Debug\dkxce.Route.Matrix.dll +D:\Projects\projects.c# III\_GRAPH_SOLUTION\dkxce.Route.Matrix\bin\Debug\dkxce.Route.Matrix.pdb +D:\Projects\projects.c# III\_GRAPH_SOLUTION\dkxce.Route.Matrix\obj\Debug\ResolveAssemblyReference.cache +D:\Projects\projects.c# III\_GRAPH_SOLUTION\dkxce.Route.Matrix\obj\Debug\dkxce.Route.Matrix.dll +D:\Projects\projects.c# III\_GRAPH_SOLUTION\dkxce.Route.Matrix\obj\Debug\dkxce.Route.Matrix.pdb +D:\Projects\projects.cs.III\_GRAPH_SOLUTION\dkxce.Route.Matrix\bin\Debug\dkxce.Route.Matrix.dll +D:\Projects\projects.cs.III\_GRAPH_SOLUTION\dkxce.Route.Matrix\bin\Debug\dkxce.Route.Matrix.pdb +D:\Projects\projects.cs.III\_GRAPH_SOLUTION\dkxce.Route.Matrix\obj\Debug\ResolveAssemblyReference.cache +D:\Projects\projects.cs.III\_GRAPH_SOLUTION\dkxce.Route.Matrix\obj\Debug\dkxce.Route.Matrix.dll +D:\Projects\projects.cs.III\_GRAPH_SOLUTION\dkxce.Route.Matrix\obj\Debug\dkxce.Route.Matrix.pdb +C:\PROJECTS\CSharp_Navicom\ADDR_SEARCH\_GRAPH_SOLUTION\dkxce.Route.Matrix\bin\Debug\dkxce.Route.Matrix.dll +C:\PROJECTS\CSharp_Navicom\ADDR_SEARCH\_GRAPH_SOLUTION\dkxce.Route.Matrix\bin\Debug\dkxce.Route.Matrix.pdb +C:\PROJECTS\CSharp_Navicom\ADDR_SEARCH\_GRAPH_SOLUTION\dkxce.Route.Matrix\obj\Debug\ResolveAssemblyReference.cache +C:\PROJECTS\CSharp_Navicom\ADDR_SEARCH\_GRAPH_SOLUTION\dkxce.Route.Matrix\obj\Debug\dkxce.Route.Matrix.dll +C:\PROJECTS\CSharp_Navicom\ADDR_SEARCH\_GRAPH_SOLUTION\dkxce.Route.Matrix\obj\Debug\dkxce.Route.Matrix.pdb +M:\NAVICOM_PROJECTS\_ROUTES_GIT_\SOLVER\READY\MapCreator\dkxce.Route.Matrix.dll +M:\NAVICOM_PROJECTS\_ROUTES_GIT_\SOLVER\READY\MapCreator\dkxce.Route.Matrix.pdb +M:\NAVICOM_PROJECTS\_ROUTES_GIT_\SOLVER\dkxce.Route.Matrix\obj\Debug\ResolveAssemblyReference.cache +M:\NAVICOM_PROJECTS\_ROUTES_GIT_\SOLVER\dkxce.Route.Matrix\obj\Debug\dkxce.Route.Matrix.dll +M:\NAVICOM_PROJECTS\_ROUTES_GIT_\SOLVER\dkxce.Route.Matrix\obj\Debug\dkxce.Route.Matrix.pdb +M:\NAVICOM_PROJECTS\_ROUTES_GIT_\READY\MAIN_DLLs\dkxce.Route.Matrix.dll +M:\NAVICOM_PROJECTS\_ROUTES_GIT_\READY\MAIN_DLLs\dkxce.Route.Matrix.pdb +M:\NAVICOM_PROJECTS\_ROUTES_GIT_\SOLVER\dkxce.Route.Matrix\obj\Release\ResolveAssemblyReference.cache +M:\NAVICOM_PROJECTS\_ROUTES_GIT_\SOLVER\dkxce.Route.Matrix\obj\Release\dkxce.Route.Matrix.dll +M:\NAVICOM_PROJECTS\_ROUTES_GIT_\SOLVER\dkxce.Route.Matrix\obj\Release\dkxce.Route.Matrix.pdb +M:\NAVICOM_PROJECTS\_ROUTES_PSOURCE_\READY\MAIN_DLLs\dkxce.Route.Matrix.dll +M:\NAVICOM_PROJECTS\_ROUTES_PSOURCE_\READY\MAIN_DLLs\dkxce.Route.Matrix.pdb +M:\NAVICOM_PROJECTS\_ROUTES_PSOURCE_\SOLVER\dkxce.Route.Matrix\obj\Debug\ResolveAssemblyReference.cache +M:\NAVICOM_PROJECTS\_ROUTES_PSOURCE_\SOLVER\dkxce.Route.Matrix\obj\Debug\dkxce.Route.Matrix.dll +M:\NAVICOM_PROJECTS\_ROUTES_PSOURCE_\SOLVER\dkxce.Route.Matrix\obj\Debug\dkxce.Route.Matrix.pdb diff --git a/SOLVER/dkxce.Route.PointNLL/Properties/AssemblyInfo.cs b/SOLVER/dkxce.Route.PointNLL/Properties/AssemblyInfo.cs new file mode 100644 index 0000000..89109dc --- /dev/null +++ b/SOLVER/dkxce.Route.PointNLL/Properties/AssemblyInfo.cs @@ -0,0 +1,35 @@ +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +[assembly: AssemblyTitle("dkxce.Route.PointNLL")] +[assembly: AssemblyDescription("Модуль Ð´Ð»Ñ Ð¸Ð½Ð´ÐµÐºÑации координат узлов графа")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("Milok Zbrozek ")] +[assembly: AssemblyProduct("dkxce.Route.PointNLL")] +[assembly: AssemblyCopyright("Copyright © Milok Zbrozek 2021")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// Setting ComVisible to false makes the types in this assembly not visible +// to COM components. If you need to access a type in this assembly from +// COM, set the ComVisible attribute to true on that type. +[assembly: ComVisible(false)] + +// The following GUID is for the ID of the typelib if this project is exposed to COM +[assembly: Guid("4be5b766-4f4e-42af-a745-a5aab52c1be2")] + +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +// You can specify all the values or you can default the Revision and Build Numbers +// by using the '*' as shown below: +[assembly: AssemblyVersion("21.12.21.3")] +[assembly: AssemblyFileVersion("21.12.21.3")] diff --git a/SOLVER/dkxce.Route.PointNLL/Route.PointNLL.cs b/SOLVER/dkxce.Route.PointNLL/Route.PointNLL.cs new file mode 100644 index 0000000..7228343 --- /dev/null +++ b/SOLVER/dkxce.Route.PointNLL/Route.PointNLL.cs @@ -0,0 +1,481 @@ +/* + * RouteLL c# class by Milok Zbrozek + * Ìîäóëü äëÿ èíäåêñàöèè êîîðäèíàò óçëîâ ãðàôà + * Author: Milok Zbrozek + * Âåðñèÿ: 13305C7 + */ + + +using System; +using System.Collections.Generic; +using System.Text; + +namespace dkxce.Route.PointNLL +{ + public class PointNLL + { + public uint node; + public float lat; + public float lon; + public PointNLL(uint node, float lat, float lon) + { + this.node = node; + this.lat = lat; + this.lon = lon; + } + public override string ToString() + { + return "{" + node + "; " + lat.ToString() + " " + lon.ToString() + "}"; + } + } + + public class PointNLLD : PointNLL + { + public float dist; + public PointNLLD(uint node, float lat, float lon) + : base(node, lat, lon) + { + this.dist = 0; + } + public PointNLLD(uint node, float lat, float lon, float dist) + : base(node, lat, lon) + { + this.node = node; + this.lat = lat; + this.lon = lon; + this.dist = dist; + } + public PointNLLD(PointNLL point) + : base(point.node, point.lat, point.lon) + { + this.dist = 0; + } + public PointNLLD(PointNLL point, float dist) + : base(point.node, point.lat, point.lon) + { + this.dist = dist; + } + } + + public class PointNLLIndexer + { + /* + * main file [s0] geo: + * HEADER + * [int] nodes_count + * array[1..nodes] of [[float][float]] - lat,lon = 8 bytes + * + * + * lat lon file [s1] .ll: + * HEADER + * [int] nodes_count + * array[1..nodes] of [[uint][float][float]] - node,lat,lon = 12 bytes + * + */ + + private static byte[] header0 = new byte[] { 0x52, 0x4D, 0x50, 0x4F, 0x49, 0x4E, 0x54, 0x4E, 0x4C, 0x4C, 0x30 }; + private static byte[] header1 = new byte[] { 0x52, 0x4D, 0x50, 0x4F, 0x49, 0x4E, 0x54, 0x4E, 0x4C, 0x4C, 0x31 }; + + List arr = new List(); + + public void Add(PointNLL point) { arr.Add(point); } + + /// + /// Add Lat Lon as Node & get a number + /// + /// Latitude + /// Longitude + public uint AddNew(float lat, float lon) + { + arr.Add(new PointNLL((uint)arr.Count + 1, lat, lon)); + return (uint)arr.Count; + } + + /// + /// Find Bode By Coordinates + /// + /// Latitude + /// Longitude + /// node number + public uint NodeByLatLon(float lat, float lon) + { + uint res = 0; + for (int i = 0; i < arr.Count; i++) + if ((arr[i].lat == lat) && (arr[i].lon == lon)) + { + res = arr[i].node; + break; + }; + return res; + } + + public void OptimizeSaveAndClose(string fileName) + { + arr.Sort(PointNLLSorter.SortByNode()); + System.IO.FileStream fs = new System.IO.FileStream(fileName, System.IO.FileMode.Create); + fs.Write(header0, 0, header0.Length); + byte[] ba = BitConverter.GetBytes(arr.Count); + fs.Write(ba, 0, ba.Length); + for (int i = 0; i < arr.Count; i++) + { + ba = BitConverter.GetBytes(arr[i].lat); + fs.Write(ba, 0, ba.Length); + ba = BitConverter.GetBytes(arr[i].lon); + fs.Write(ba, 0, ba.Length); + }; + fs.Flush(); + fs.Close(); + + arr.Sort(PointNLLSorter.SortByLL()); + fs = new System.IO.FileStream(fileName + ".ll", System.IO.FileMode.Create); + fs.Write(header1, 0, header1.Length); + ba = BitConverter.GetBytes(arr.Count); + fs.Write(ba, 0, ba.Length); + for (int i = 0; i < arr.Count; i++) + { + ba = BitConverter.GetBytes(arr[i].node); + fs.Write(ba, 0, ba.Length); + ba = BitConverter.GetBytes(arr[i].lat); + fs.Write(ba, 0, ba.Length); + ba = BitConverter.GetBytes(arr[i].lon); + fs.Write(ba, 0, ba.Length); + }; + fs.Flush(); + fs.Close(); + } + + private class PointNLLSorter : IComparer + { + private byte sortBy = 0; + private PointNLLSorter(byte sortBy) { this.sortBy = sortBy; } + public static PointNLLSorter SortByNode() { return new PointNLLSorter(0); } + public static PointNLLSorter SortByLL() { return new PointNLLSorter(1); } + public int Compare(PointNLL a, PointNLL b) + { + if (sortBy == 0) return a.node.CompareTo(b.node); + + int res = a.lat.CompareTo(b.lat); + if (res == 0) res = a.lon.CompareTo(b.lon); + if (res == 0) res = a.node.CompareTo(b.node); + return res; + } + } + } + + public class PointNLLSearcher + { + private static byte[] header0 = new byte[] { 0x52, 0x4D, 0x50, 0x4F, 0x49, 0x4E, 0x54, 0x4E, 0x4C, 0x4C, 0x30 }; + private static byte[] header1 = new byte[] { 0x52, 0x4D, 0x50, 0x4F, 0x49, 0x4E, 0x54, 0x4E, 0x4C, 0x4C, 0x31 }; + + private System.IO.Stream s0; + private System.IO.Stream s1; + private int size = 0; + + /// + /// Nodes count + /// + public int Nodes { get { return size; } } + + private PointNLLSearcher() { } + + public static PointNLLSearcher LoadToMemory(string fileName) + { + PointNLLSearcher schr = new PointNLLSearcher(); + schr.s0 = new System.IO.MemoryStream(); + schr.s1 = new System.IO.MemoryStream(); + + System.IO.FileStream fs = new System.IO.FileStream(fileName, System.IO.FileMode.Open); + byte[] block = new byte[8192]; + int read = 0; + while ((read = fs.Read(block, 0, 8192)) > 0) + schr.s0.Write(block, 0, read); + fs.Close(); + + schr.s0.Position = 0; + byte[] ba = new byte[header0.Length]; + schr.s0.Read(ba, 0, ba.Length); + if (System.Text.Encoding.GetEncoding(1251).GetString(ba) != "RMPOINTNLL0") + { + schr.s0.Close(); + throw new System.IO.IOException("Unknown file format:\r\n" + fileName); + }; + ba = new byte[4]; + schr.s0.Read(ba, 0, 4); + schr.size = BitConverter.ToInt32(ba, 0); + + fs = new System.IO.FileStream(fileName + ".ll", System.IO.FileMode.Open); + block = new byte[8192]; + read = 0; + while ((read = fs.Read(block, 0, 8192)) > 0) + schr.s1.Write(block, 0, read); + fs.Close(); + + schr.s1.Position = 0; + ba = new byte[header1.Length]; + schr.s1.Read(ba, 0, ba.Length); + if (System.Text.Encoding.GetEncoding(1251).GetString(ba) != "RMPOINTNLL1") + { + schr.s0.Close(); + schr.s1.Close(); + throw new System.IO.IOException("Unknown file format:\r\n" + fileName + ".ll"); + }; + ba = new byte[4]; + schr.s1.Read(ba, 0, 4); + int size = BitConverter.ToInt32(ba, 0); + + return schr; + } + + public static PointNLLSearcher WorkWithDisk(string fileName) + { + PointNLLSearcher schr = new PointNLLSearcher(); + schr.s0 = new System.IO.FileStream(fileName, System.IO.FileMode.Open); + schr.s1 = new System.IO.FileStream(fileName + ".ll", System.IO.FileMode.Open); + + schr.s0.Position = 0; + byte[] ba = new byte[header0.Length]; + schr.s0.Read(ba, 0, ba.Length); + if (System.Text.Encoding.GetEncoding(1251).GetString(ba) != "RMPOINTNLL0") + { + schr.s0.Close(); + throw new System.IO.IOException("Unknown file format:\r\n" + fileName); + }; + ba = new byte[4]; + schr.s0.Read(ba, 0, 4); + schr.size = BitConverter.ToInt32(ba, 0); + + ba = new byte[header1.Length]; + schr.s1.Read(ba, 0, ba.Length); + if (System.Text.Encoding.GetEncoding(1251).GetString(ba) != "RMPOINTNLL1") + { + schr.s0.Close(); + schr.s1.Close(); + throw new System.IO.IOException("Unknown file format:\r\n" + fileName + ".ll"); + }; + ba = new byte[4]; + schr.s1.Read(ba, 0, 4); + int size = BitConverter.ToInt32(ba, 0); + + return schr; + } + + public void Close() + { + s0.Close(); + s1.Close(); + } + + /// + /// Èùåì òî÷êè â çàäàííîé çîíå + /// + /// + /// + /// + /// + /// âîçâðàùàòü ëè êîîðäèíàòû òî÷åê + /// Ìàêñèìàëüíîå ÷èñëî òî÷åê ê îòâåòå + /// + public PointNLL[] FindIn(float StartLat, float StartLon, float EndLat, float EndLon, bool getLatLon, int maxResults) + { + List res = new List(maxResults); + + s1.Position = header1.Length + 4; + byte[] buff = new byte[1020]; // 1020 bytes - 85 points // 8184 bytes - 682 points + int read = 0; + bool brk = false; + while ((read = s1.Read(buff, 0, buff.Length)) > 0) + { + float lastlat = BitConverter.ToSingle(buff, read - 8); + if (lastlat < StartLat) continue; // goto next block if last lat < needed + + int offset = 0; + while (offset < read) + { + uint node = BitConverter.ToUInt32(buff, offset); + float lat = BitConverter.ToSingle(buff, offset += 4); + float lon = BitConverter.ToSingle(buff, offset += 4); + if (lat > EndLat) // stops find if lat > needed + { + brk = true; + break; + }; + // (lat <= EndLat) - already checked + if ((lat >= StartLat) && (lon >= StartLon) && (lon <= EndLon)) + { + res.Add(new PointNLL(node, lat, lon)); + if (res.Count == maxResults) // if found points count = maxResults then return + { + brk = true; + break; + }; + }; + offset += 4; + }; + if (brk) break; + }; + return res.ToArray(); + } + + /// + /// Èùåì òî÷êè â çàäàííîé çîíå + /// + /// + /// + /// + /// + /// âîçâðàùàòü ëè êîîðäèíàòû òî÷åê + /// + public PointNLL[] FindIn(float StartLat, float StartLon, float EndLat, float EndLon, bool getLatLon) + { + return FindIn(StartLat, StartLon, EndLat, EndLon, getLatLon, 1000); + } + + /// + /// Èùåì òî÷êè â ðàäèóñå + /// + /// Øèðîòà öåíòðà + /// Äîëãîòà öåíòðà + /// Ðàäèóñ â ìåòðàõ + /// Ïîëó÷àòü êîîðäèíàòû òî÷åê + /// Ïîëó÷àòü ðàññòîÿíèå äî òî÷êè + /// Ñîðòèðîâàòü òî÷êè ïî óäàëåííîñòè + /// + public PointNLL[] FindIn(float Lat, float Lon, float metersRadius, bool getLatLon, bool getDistance, bool sortByDist) + { + return FindIn(Lat, Lon, metersRadius, getLatLon, getDistance, sortByDist); + } + + /// + /// Èùåì òî÷êè â ðàäèóñå + /// + /// Øèðîòà öåíòðà + /// Äîëãîòà öåíòðà + /// Ðàäèóñ â ìåòðàõ + /// Ïîëó÷àòü êîîðäèíàòû òî÷åê + /// Ïîëó÷àòü ðàññòîÿíèå äî òî÷êè + /// Ñîðòèðîâàòü òî÷êè ïî óäàëåííîñòè + /// Ìàêñèìàëüíîå ÷èñëî òî÷åê â îòâåòå + /// + public PointNLLD[] FindIn(float Lat, float Lon, float metersRadius, bool getLatLon, bool getDistance, bool sortByDist, int maxResults) + { + float dLat = metersRadius / GetLengthMetersC(Lat, Lon, Lat + 1, Lon, false); + float dLon = metersRadius / GetLengthMetersC(Lat, Lon, Lat, Lon + 1, false); + PointNLL[] res = FindIn(Lat - dLat, Lon - dLon, Lat + dLat, Lon + dLon, getLatLon || getDistance, maxResults); + PointNLLD[] wd = new PointNLLD[res.Length]; + if (getDistance) + { + for (int i = 0; i < res.Length; i++) + wd[i] = new PointNLLD(res[i], GetLengthMetersC(Lat, Lon, res[i].lat, res[i].lon, false)); + if (sortByDist) + Array.Sort(wd, new PointNLLDSorter()); + } + else + { + for (int i = 0; i < res.Length; i++) + wd[i] = new PointNLLD(res[i]); + }; + return wd; + } + + /// + /// Find node with Coordinates + /// + /// Latitude + /// Longitude + /// Node Id + public uint FindNode(float Lat, float Lon) + { + PointNLL[] pnts = FindIn(Lat, Lon, Lat, Lon, false); + if (pnts.Length == 0) return 0; + else return pnts[0].node; + } + + /// + /// Ïîëó÷àåì êîîðäèíàòû òî÷åê + /// + /// Íîìåðà òî÷åê + /// + public PointNLL[] GetCoordinates(uint[] nodes) + { + PointNLL[] res = new PointNLL[nodes.Length]; + byte[] ba = new byte[8]; + for (int i = 0; i < nodes.Length; i++) + { + s0.Position = header0.Length + 4 + (nodes[i] - 1) * 8; + s0.Read(ba, 0, ba.Length); + float lat = BitConverter.ToSingle(ba, 0); + float lon = BitConverter.ToSingle(ba, 4); + res[i] = new PointNLL(nodes[i], lat, lon); + }; + return res; + } + + /// + /// Ïîëó÷àåì êîîðäèíàòû òî÷åê è ïóòü + /// ïî ïðÿìîé èç ïðåäûäóùåé òî÷êè â êàæäóþ + /// + /// + /// + public PointNLLD[] GetCoordinatesDist(uint[] nodes) + { + PointNLLD[] res = new PointNLLD[nodes.Length]; + byte[] ba = new byte[8]; + for (int i = 0; i < nodes.Length; i++) + { + s0.Position = header0.Length + 4 + (i - 1) * 8; + s0.Read(ba, 0, ba.Length); + float lat = BitConverter.ToSingle(ba, 0); + float lon = BitConverter.ToSingle(ba, 4); + float dist = i == 0 ? 0 : GetLengthMetersC(res[i - 1].lat, res[i - 1].lon, res[i].lat, res[i].lon, false); + res[i] = new PointNLLD(nodes[i], lat, lon, dist); + }; + return res; + } + + /// + /// Ðàññ÷èòûâàåì äëèíó â ìåòðàõ îò òî÷êè äî òî÷êè + /// + /// A lat + /// A lon + /// B lat + /// B lon + /// Radians or Degrees + /// length in meters + private static float GetLengthMetersC(double StartLat, double StartLong, double EndLat, double EndLong, bool radians) + { + double D2R = Math.PI / 180; + if (radians) D2R = 1; + double dDistance = Double.MinValue; + double dLat1InRad = StartLat * D2R; + double dLong1InRad = StartLong * D2R; + double dLat2InRad = EndLat * D2R; + double dLong2InRad = EndLong * D2R; + + double dLongitude = dLong2InRad - dLong1InRad; + double dLatitude = dLat2InRad - dLat1InRad; + + // Intermediate result a. + double a = Math.Pow(Math.Sin(dLatitude / 2.0), 2.0) + + Math.Cos(dLat1InRad) * Math.Cos(dLat2InRad) * + Math.Pow(Math.Sin(dLongitude / 2.0), 2.0); + + // Intermediate result c (great circle distance in Radians). + double c = 2.0 * Math.Atan2(Math.Sqrt(a), Math.Sqrt(1.0 - a)); + + const double kEarthRadiusKms = 6378137.0000; + dDistance = kEarthRadiusKms * c; + + return (float)Math.Round(dDistance); + } + + public class PointNLLDSorter : IComparer + { + public int Compare(PointNLLD a, PointNLLD b) + { + int res = a.dist.CompareTo(b.dist); + if (res == 0) res = a.node.CompareTo(b.node); + return res; + } + } + } +} diff --git a/SOLVER/dkxce.Route.PointNLL/dkxce.Route.PointNLL.csproj b/SOLVER/dkxce.Route.PointNLL/dkxce.Route.PointNLL.csproj new file mode 100644 index 0000000..aa01cea --- /dev/null +++ b/SOLVER/dkxce.Route.PointNLL/dkxce.Route.PointNLL.csproj @@ -0,0 +1,47 @@ + + + Debug + AnyCPU + 8.0.50727 + 2.0 + {A071AFC1-91B1-4D85-A315-7A563FCF89B4} + Library + Properties + dkxce.Route.PointNLL + dkxce.Route.PointNLL + + + true + full + false + ..\..\READY\MAIN_DLLs\ + DEBUG;TRACE + prompt + 4 + + + pdbonly + true + ..\..\READY\MAIN_DLLs\ + TRACE + prompt + 4 + + + + + + + + + + + + + \ No newline at end of file diff --git a/SOLVER/dkxce.Route.PointNLL/obj/Debug/dkxce.Route.PointNLL.dll b/SOLVER/dkxce.Route.PointNLL/obj/Debug/dkxce.Route.PointNLL.dll new file mode 100644 index 0000000000000000000000000000000000000000..76432251c8ce8b2a1b60ac2b473f0c30918cbdd0 GIT binary patch literal 24576 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 aL?A>UL?A>UL?A>UL?A>UMBx7$f&T&Q3iF2m literal 0 HcmV?d00001 diff --git a/SOLVER/dkxce.Route.PointNLL/obj/Debug/dkxce.Route.PointNLL.pdb b/SOLVER/dkxce.Route.PointNLL/obj/Debug/dkxce.Route.PointNLL.pdb new file mode 100644 index 0000000000000000000000000000000000000000..1d5595e686c45ea58bc614c620e1d27189a44ef0 GIT binary patch literal 28160 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 literal 0 HcmV?d00001 diff --git a/SOLVER/dkxce.Route.PointNLL/obj/Release/dkxce.Route.PointNLL.pdb b/SOLVER/dkxce.Route.PointNLL/obj/Release/dkxce.Route.PointNLL.pdb new file mode 100644 index 0000000000000000000000000000000000000000..eb72d135f277d028922a7114acd7dae0a84c8b48 GIT binary patch literal 26112 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")] +[assembly: AssemblyProduct("dkxce.Route.Regions")] +[assembly: AssemblyCopyright("Copyright © Milok Zbrozek 2021")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// Setting ComVisible to false makes the types in this assembly not visible +// to COM components. If you need to access a type in this assembly from +// COM, set the ComVisible attribute to true on that type. +[assembly: ComVisible(false)] + +// The following GUID is for the ID of the typelib if this project is exposed to COM +[assembly: Guid("f5de1f85-59a9-4744-b8e0-92b120d5ccec")] + +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +// You can specify all the values or you can default the Revision and Build Numbers +// by using the '*' as shown below: +[assembly: AssemblyVersion("21.12.21.3")] +[assembly: AssemblyFileVersion("21.12.21.3")] diff --git a/SOLVER/dkxce.Route.Regions/Route.Regions.cs b/SOLVER/dkxce.Route.Regions/Route.Regions.cs new file mode 100644 index 0000000..3e6a485 --- /dev/null +++ b/SOLVER/dkxce.Route.Regions/Route.Regions.cs @@ -0,0 +1,422 @@ +/* + * C# Class by Milok Zbrozek + * Ìîäóëü îïðåäåëÿþùèé ïîïàäàíèå + * òî÷åê â ðåãèîíû (â ïîëèãîíû) + * Author: Milok Zbrozek + * Âåðñèÿ: 13305C7 + */ + +using System; +using System.IO; +using System.Collections; +using System.Collections.Generic; +using System.Text; +using System.Xml; +using System.Xml.Serialization; + +using dkxce.Route.Classes; + +namespace dkxce.Route.Regions +{ + /// + /// Êëàññ äëÿ îïðåäåëåíèÿ âõîæäåíèå òî÷êè â ðåãèîí + /// + public class PointInRegionUtils + { + #region constants + private const string RegionIDField = "REGION_ID"; + private const string RegionIDName = "NAME"; + private const string RegionCenterX = "X"; + private const string RegionCenterY = "Y"; + private const string RegionFileName = "FILENAME"; + #endregion + + List Regions = new List(); + + public void LoadRegionsFromFile(string ShapeFileName) + { + string ShapeDBFName = ShapeFileName.Replace(System.IO.Path.GetExtension(ShapeFileName), ".dbf"); + + // READING BOUNDS INTO MEMORY + if (!System.IO.File.Exists(ShapeFileName)) + throw new System.IO.IOException(@"Couldn't load regions bounds. File Not Found: " + ShapeFileName); + this.readShapeFile(ShapeFileName); + + // READING FIELDS INTO MEMORY + if (this.Regions.Count > 0) + { + if (!System.IO.File.Exists(ShapeDBFName)) + throw new System.IO.IOException(@"Couldn't load regions bounds. File Not Found: " + ShapeDBFName); + this.readDBFFile(ShapeDBFName); + }; + } + public int RegionsCount { get { return this.Regions.Count; } } + + public void _TestRegions() + { + foreach (Polygon reg in this.Regions) + { + int cr = this.PointInRegion(reg.center.Y, reg.center.X); + Console.WriteLine((reg.nmsRegionID == cr ? "OK" : "!!") + " center of " + reg.nmsRegionID + " in " + cr.ToString() + + "\t" + reg.nmsRegion + " [" + reg.center.Y.ToString() + " " + + reg.center.X.ToString() + "]"); + }; + } + + public Polygon GetRegionPoly(int index) + { + if (Regions.Count == 0) return null; + if (index >= Regions.Count) return null; + return Regions[index]; + } + + public int[] RegionsIDs + { + get + { + List res = new List(); + foreach (Polygon reg in this.Regions) res.Add(reg.nmsRegionID); + return res.ToArray(); + } + } + + public string[] RegionsNames + { + get + { + List res = new List(); + foreach (Polygon reg in this.Regions) res.Add(reg.nmsRegion); + return res.ToArray(); + } + } + + public string[] RegionsFiles + { + get + { + List res = new List(); + foreach (Polygon reg in this.Regions) res.Add(reg.FileName); + return res.ToArray(); + } + } + + public PointF[] RegionsCentres + { + get + { + List res = new List(); + foreach (Polygon reg in this.Regions) res.Add(reg.center); + return res.ToArray(); + } + } + + public string RegionNameByRegionId(int RegionID) + { + for (int i = 0; i < this.Regions.Count; i++) + if (this.Regions[i].nmsRegionID == RegionID) + return this.Regions[i].nmsRegion; + return String.Empty; + } + + public string RegionFileByRegionId(int RegionID) + { + for (int i = 0; i < this.Regions.Count; i++) + if (this.Regions[i].nmsRegionID == RegionID) + return this.Regions[i].FileName; + return String.Empty; + } + + public int PointInRegion(double Lat, double Lon) + { + PointF xy = new PointF((float)Lon, (float)Lat); + + for (int i = 0; i < this.Regions.Count; i++) + { + if (xy.X < this.Regions[i].box[0]) continue; // Xmin + if (xy.Y < this.Regions[i].box[1]) continue; // Ymin + if (xy.X > this.Regions[i].box[2]) continue; // Xmax + if (xy.Y > this.Regions[i].box[3]) continue; // Ymax + if (PointInMultiPartsPolygon(xy, this.Regions[i], MaxError)) + return this.Regions[i].nmsRegionID; + }; + return 0; + } + + + public int[] PointInRegions(double Lat, double Lon) + { + List result = new List(); + PointF xy = new PointF((float)Lon, (float)Lat); + + + for (int i = 0; i < this.Regions.Count; i++) + { + if (xy.X < this.Regions[i].box[0]) continue; // Xmin + if (xy.Y < this.Regions[i].box[1]) continue; // Ymin + if (xy.X > this.Regions[i].box[2]) continue; // Xmax + if (xy.Y > this.Regions[i].box[3]) continue; // Ymax + if (PointInMultiPartsPolygon(xy, this.Regions[i], MaxError)) + result.Add(this.Regions[i].nmsRegionID); + }; + return result.ToArray(); + } + + private static bool PointInMultiPartsPolygon(PointF LonAsXLatAsY, Polygon Area, double MaxError) + { + // MODIFIED 06.11.2015 + if (Area.parts.Length < 2) + return PointInPolygon(LonAsXLatAsY, Area, MaxError); + else + { + for (int i = 0; i < Area.parts.Length; i++) + { + Polygon tmpArea = new Polygon(); + int si = Area.parts[i]; + int se = (i + 1) == Area.parts.Length ? Area.points.Length : Area.parts[i + 1]; + tmpArea.points = new PointF[se - si]; + Array.Copy(Area.points, si, tmpArea.points, 0, tmpArea.points.Length); + if (i == 0) + { + if (!PointInPolygon(LonAsXLatAsY, tmpArea, MaxError)) return false; + } + else + { + if (PointInPolygon(LonAsXLatAsY, tmpArea, MaxError)) return false; + }; + }; + }; + return true; + } + + #region read shape file + private void readDBFFile(string filename) + { + System.Globalization.CultureInfo ci = System.Globalization.CultureInfo.InstalledUICulture; + System.Globalization.NumberFormatInfo ni = (System.Globalization.NumberFormatInfo)ci.NumberFormat.Clone(); + ni.NumberDecimalSeparator = "."; + + System.IO.FileStream fs = new System.IO.FileStream(filename, System.IO.FileMode.Open); + System.Text.Encoding FileReadEncoding = System.Text.Encoding.GetEncoding(1251); + + // Read File Version + fs.Position = 0; + int ver = fs.ReadByte(); + + // Read Records Count + fs.Position = 04; + byte[] bb = new byte[4]; + fs.Read(bb, 0, 4); + int total = BitConverter.ToInt32(bb, 0); + + // Read DataRecord 1st Position + fs.Position = 8; + bb = new byte[2]; + fs.Read(bb, 0, 2); + short dataRecord_1st_Pos = BitConverter.ToInt16(bb, 0); + int FieldsCount = (((bb[0] + (bb[1] * 0x100)) - 1) / 32) - 1; + + // Read DataRecord Length + fs.Position = 10; + bb = new byte[2]; + fs.Read(bb, 0, 2); + short dataRecord_Length = BitConverter.ToInt16(bb, 0); + + // Read Çàãîëîâêè Ïîëåé + fs.Position = 32; + string[] Fields_Name = new string[FieldsCount]; // Ìàññèâ íàçâàíèé ïîëåé + Hashtable fieldsLength = new Hashtable(); // Ìàññèâ ðàçìåðîâ ïîëåé + Hashtable fieldsType = new Hashtable(); // Ìàññèâ òèïîâ ïîëåé + byte[] Fields_Dig = new byte[FieldsCount]; // Ìàññèâ ðàçìåðîâ äðîáíîé ÷àñòè + int[] Fields_Offset = new int[FieldsCount]; // Ìàññèâ îòñòóïîâ + bb = new byte[32 * FieldsCount]; // Îïèñàíèå ïîëåé: 32 áàéòa * êîë-âî, íà÷èíàÿ ñ 33-ãî + fs.Read(bb, 0, bb.Length); + int FieldsLength = 0; + for (int x = 0; x < FieldsCount; x++) + { + Fields_Name[x] = System.Text.Encoding.Default.GetString(bb, x * 32, 10).TrimEnd(new char[] { (char)0x00 }).ToUpper(); + fieldsType.Add(Fields_Name[x], "" + (char)bb[x * 32 + 11]); + fieldsLength.Add(Fields_Name[x], (int)bb[x * 32 + 16]); + Fields_Dig[x] = bb[x * 32 + 17]; + Fields_Offset[x] = 1 + FieldsLength; + FieldsLength = FieldsLength + (int)fieldsLength[Fields_Name[x]]; + }; + + for (int record_no = 0; record_no < total; record_no++) + { + string[] FieldValues = new string[FieldsCount]; + Hashtable record = new Hashtable(); + for (int y = 0; y < FieldValues.Length; y++) + { + fs.Position = dataRecord_1st_Pos + (dataRecord_Length * record_no) + Fields_Offset[y]; + bb = new byte[(int)fieldsLength[Fields_Name[y]]]; + fs.Read(bb, 0, bb.Length); + FieldValues[y] = FileReadEncoding.GetString(bb).Trim().TrimEnd(new char[] { (char)0x00 }); + record.Add(Fields_Name[y], FieldValues[y]); + }; + this.Regions[record_no].nmsRegionID = Convert.ToInt32(record[RegionIDField].ToString().Trim()); + this.Regions[record_no].nmsRegion = record[RegionIDName].ToString().Trim(); + this.Regions[record_no].center = new PointF((float)double.Parse(record[RegionCenterX].ToString().Trim(), ni), (float)double.Parse(record[RegionCenterY].ToString().Trim(), ni)); + this.Regions[record_no].FileName = ""; + try + { + this.Regions[record_no].FileName = record[RegionFileName].ToString().Trim(); + } + catch { }; + if (this.Regions[record_no].FileName == "") + this.Regions[record_no].FileName = String.Format("{0:000}", this.Regions[record_no].nmsRegionID) + ".rt"; + }; + + fs.Close(); + } + + private void readShapeFile(string filename) + { + FileStream fs = new FileStream(filename, FileMode.Open, FileAccess.Read); + long fileLength = fs.Length; + Byte[] data = new Byte[fileLength]; + fs.Read(data, 0, (int)fileLength); + fs.Close(); + + int shapetype = readIntLittle(data, 32); + if (shapetype != 5) return; + + int currentPosition = 100; + while (currentPosition < fileLength) + { + int recordStart = currentPosition; + int recordNumber = readIntBig(data, recordStart); + int contentLength = readIntBig(data, recordStart + 4); + int recordContentStart = recordStart + 8; + + Polygon Area = new Polygon(); + int recordShapeType = readIntLittle(data, recordContentStart); + Area.box = new Double[4]; + Area.box[0] = readDoubleLittle(data, recordContentStart + 4); + Area.box[1] = readDoubleLittle(data, recordContentStart + 12); + Area.box[2] = readDoubleLittle(data, recordContentStart + 20); + Area.box[3] = readDoubleLittle(data, recordContentStart + 28); + Area.numParts = readIntLittle(data, recordContentStart + 36); + Area.parts = new int[Area.numParts]; + Area.numPoints = readIntLittle(data, recordContentStart + 40); + Area.points = new PointF[Area.numPoints]; + int partStart = recordContentStart + 44; + for (int i = 0; i < Area.numParts; i++) + { + Area.parts[i] = readIntLittle(data, partStart + i * 4); + }; + int pointStart = recordContentStart + 44 + 4 * Area.numParts; + for (int i = 0; i < Area.numPoints; i++) + { + Area.points[i] = new PointF(0,0); + Area.points[i].X = (float)readDoubleLittle(data, pointStart + (i * 16)); + Area.points[i].Y = (float)readDoubleLittle(data, pointStart + (i * 16) + 8); + }; + this.Regions.Add(Area); + + currentPosition = recordStart + (4 + contentLength) * 2; + }; + } + + private int readIntBig(byte[] data, int pos) + { + byte[] bytes = new byte[4]; + bytes[0] = data[pos]; + bytes[1] = data[pos + 1]; + bytes[2] = data[pos + 2]; + bytes[3] = data[pos + 3]; + Array.Reverse(bytes); + return BitConverter.ToInt32(bytes, 0); + } + + private int readIntLittle(byte[] data, int pos) + { + byte[] bytes = new byte[4]; + bytes[0] = data[pos]; + bytes[1] = data[pos + 1]; + bytes[2] = data[pos + 2]; + bytes[3] = data[pos + 3]; + return BitConverter.ToInt32(bytes, 0); + } + + private double readDoubleLittle(byte[] data, int pos) + { + byte[] bytes = new byte[8]; + bytes[0] = data[pos]; + bytes[1] = data[pos + 1]; + bytes[2] = data[pos + 2]; + bytes[3] = data[pos + 3]; + bytes[4] = data[pos + 4]; + bytes[5] = data[pos + 5]; + bytes[6] = data[pos + 6]; + bytes[7] = data[pos + 7]; + return BitConverter.ToDouble(bytes, 0); + } + #endregion + + public class Polygon + { + public string nmsRegion; + public int nmsRegionID; + public string FileName; + + public double[] box; // Xmin, Ymin, Xmax, Ymax + public int numParts; + public int numPoints; + public int[] parts; + public PointF[] points; + + public PointF center; + } + + #region Ïðîâåðêà íà âõîæäåíèå â ïîëèãîí + private static double MaxError = 1E-09; + + private static int CRS(PointF P, PointF A1, PointF A2, double EPS) + { + double x; + int res = 0; + if (Math.Abs(A1.Y - A2.Y) < EPS) + { + if ((Math.Abs(P.Y - A1.Y) < EPS) && ((P.X - A1.X) * (P.X - A2.X) < 0.0)) res = -1; + return res; + }; + if ((A1.Y - P.Y) * (A2.Y - P.Y) > 0.0) return res; + x = A2.X - (A2.Y - P.Y) / (A2.Y - A1.Y) * (A2.X - A1.X); + if (Math.Abs(x - P.X) < EPS) + { + res = -1; + } + else + { + if (x < P.X) + { + res = 1; + if ((Math.Abs(A1.Y - P.Y) < EPS) && (A1.Y < A2.Y)) res = 0; + else + if ((Math.Abs(A2.Y - P.Y) < EPS) && (A2.Y < A1.Y)) res = 0; + }; + }; + return res; + } + + private static bool PointInPolygon(PointF point, Polygon polygon, double EPS) + { + int count, up; + count = 0; + for (int i = 0; i < polygon.points.Length - 1; i++) + { + up = CRS(point, polygon.points[i], polygon.points[i + 1], EPS); + if (up >= 0) + count += up; + else + break; + }; + up = CRS(point, polygon.points[polygon.points.Length - 1], polygon.points[0], EPS); + if (up >= 0) + return Convert.ToBoolean((count + up) & 1); + else + return false; + } + #endregion + } +} diff --git a/SOLVER/dkxce.Route.Regions/dkxce.Route.Regions.csproj b/SOLVER/dkxce.Route.Regions/dkxce.Route.Regions.csproj new file mode 100644 index 0000000..a13560f --- /dev/null +++ b/SOLVER/dkxce.Route.Regions/dkxce.Route.Regions.csproj @@ -0,0 +1,51 @@ + + + Debug + AnyCPU + 8.0.50727 + 2.0 + {346379C1-E711-4D67-AFC6-73690DF177E3} + Library + Properties + dkxce.Route.Regions + dkxce.Route.Regions + + + true + full + false + ..\..\READY\MAIN_DLLs\ + DEBUG;TRACE + prompt + 4 + + + pdbonly + true + ..\..\READY\MAIN_DLLs\ + TRACE + prompt + 4 + + + + False + ..\..\READY\MAIN_DLLs\dkxce.Route.Classes.dll + + + + + + + + + + + + \ No newline at end of file diff --git a/SOLVER/dkxce.Route.Regions/obj/Debug/dkxce.Route.Regions.dll b/SOLVER/dkxce.Route.Regions/obj/Debug/dkxce.Route.Regions.dll new file mode 100644 index 0000000000000000000000000000000000000000..cca62b8cb65eeb2585a41e861cef0cdd03ed910f GIT binary patch literal 24576 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 KA4;#_2>b<~g}e3u literal 0 HcmV?d00001 diff --git a/SOLVER/dkxce.Route.Regions/obj/Release/dkxce.Route.Regions.dll b/SOLVER/dkxce.Route.Regions/obj/Release/dkxce.Route.Regions.dll new file mode 100644 index 0000000000000000000000000000000000000000..092ee75dfe340d5caadfe6ed4be1c129e51df17f GIT binary patch literal 24576 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 literal 0 HcmV?d00001 diff --git a/SOLVER/dkxce.Route.Regions/obj/Release/dkxce.Route.Regions.pdb b/SOLVER/dkxce.Route.Regions/obj/Release/dkxce.Route.Regions.pdb new file mode 100644 index 0000000000000000000000000000000000000000..87618d4130859c90914864d79283275717c87ce6 GIT binary patch literal 24064 zcmeI43v`v$mB-J;7(s{NO(mP2n10yP6){bA|aP17X=rqbG6pG z+Ubn8&WJP4RHm#x)LH5bGddMJ_!z5QSgqn?%{U!wu^nAnA7jQ99{W4r`Myxw+T4-oOsq~8RZXdyII*a6(n zpP9ntfS3x5ndG47_m7|lZu`yt{rf+FdeSl31A|!K=I6(x>pf1>1ATu~8mmwo>+cCD zF#GrCfybrz=}CXoJ@EdjC9@tq;hDl4>dmgj-|DsPk$D%~^2#rsF1%ru%lG};>nEl6O4Jkcl84+zui9j$(Czs{^iX%d#>*I&MlfYN~14-en!>m{mJ(p?SJYw-~IaM zK5B6_ATtp<4$6ndKx3g3p}x@ZP;aOoQ~;d>oeW7|A#@6KDl`B(4H^iY4h@0^Lqni5 zprOz(XgG8xR0NHH&VoilqoC2y3DB{a{!rtu`Ejs0(1*cL4CRqYgte0pH>g(u}<4S#bS-SVy|MdVxrcc)?$duhZ2t!ixrbU?e#0Wd(y}2flGCh zB?WZ3%zAK@ zG1sbJ1gS0#^`y^64}AE>hi_O|*A5WaWyRJB?XCv!T7|iq_`D`o;|% ziOb{7$w&QT zw?8!e#WL2vo~aHeg>@fLvOVknaC-0$%d2(uIWs|z)MkSQk<{eC{!*l^pj~sOCehU5 z*ZcgA#QOQIZ8nq-G{+UHoidn%ESKyVM-^UJzqvCRU(fS<`ntH92{JH}uS&GF5gimp zcuvpoMaqj8#M|Q?t<605XX=;5Hzj3TwC#)6w`H|KzPKLArnc6rnxq2$A!;KU!>Zbv zIy>WpES(7y*}lMjiz=&M+q5A*ch3ApP3x_{z37r@CNJ;tS+73&Pb;3Q-Z{EYulw)V zu~NLXX0ACK%%cJIiOwg4O4>_HcBb#|z3L>A_S7M<56^ERW2@H0la0Q=s}dXA2SDUnv?`(DB+usMw-v(tMMfvL;uQ83w;+;vakTQ+yJ{oxuqa+jfhSNuSUVwZb z<(aDbQRSmbNR+Eys=CydsJ@hPwL6r`7oh(lzZsIh1AX6T5+(LAOL{a`4luECOj8FC4PHX1?9DfRuOyCRsMRCsl z3Vvtm<+p3EhQi&D&aO6lz2cYtZ2mRY-;e8an3Esm@cDRrzAJ~%S`S(@8qeOyJqF3| zz#IIg_@I7g>N9@NrSK6*em~g7?`-~0#_xA&d7yQ=4@-9enf%i!K zuB5G2PBMWn z#8Avn_wy!hEb{4Y`1`|uFZ`$ZcEg&A^0!idB;yi%s?cEx={X1Xmvr-w=O4#Qd~RtiO$IYy^V+(YoO8wX~%JyMF_I8u6EDp*={ttt0h!jvvFddSOG_ z=D_}PKh57xz>1DxEta>|HFYFA>k@67*Vw(7#-|cn%VF)9duiEc|0>W4*eeM_IBvc z+K2T!nZ`*ENr_J!zva&((AoaNxEA)C(fxHBe!aj;Fv$cy#arz!aohKW-G|wIR@jH> z95z>dDdnLrGxf$ad;euew7lJytG}YFo7yN-+r-YSx|XJ7)6#fzqNAm;v@_XQm%s+~1#3BrZ+>gMt)!;uYKQrd#pl{-wA+6@AK+(J{c5Wx-Gps};mX0YZ1V=@k#uOk zncZKqwQ+7MJtZAFj?GcOc=hVexSj*V!*s~Old(fm9u8T=&4_{)}r;AuWC!O3LVk9PCcV0?ewy9 zL+dPB-@LJ-gY6q@rPV$K%ie|9I~%L+z!2SsWslm{T8zrN@u*J{xoz88kJ0+(M0=99 zgXwn7GE`YSu8k_k>6)@*uQeHM%LZo3WQW#av~B|icu`wVU3R^;3Z6m!y^nvr@vj)Z z$xJZ$r}5x2ORklCnER5cL?%I5TSP|dHEK(cIg+_{w!eQ4@`vtI(Ge16L1OeznuvH(8DPL@dbH zy;*%4?5k-_CUqht8;2ruJtUdHcQkAa&#f(|I>Txm*k3v#|FWo!a}yg^vBbQY*3Mnn zSc0tN0`JkVv)GUI0Nt=jqix5zYfQ+$J=j^bv|gp^!?oD87ZPu%5AmcRGR}(KDp!-y zay_dZ`q<~*tK?||L0ad){$f)8lT0-0g5RHq9i8kRgpW@_k_mjFPl=)F`PuBxw1Vx? zx{VuLAJoy#ZfH7f{lx1OzhYyQKe`?dZLVjZ`GoOV>-}Z@r4#S7^Jmhr*5Bgh=47Jd z5Z6=oIb6`O+v{N5(+L;zt1~*J;$!J}n-;J2t;Vpp$zLm$YMv;K;dUzB<3W8VH36Im zLaDPs;$>f9d{RW&(ezd$G4dm;uLQ@S*<6b7~w9j|8O20d^i>1$jqWb64j_!R6K=q&6 zXWVRlsK;?0rA_tcf%GBvmeSvNOB%u#XVXm`;~;J=h%ssZ-Pu`g{dHddk}mp{mwusI z6qbTP|5EaWXw25XD5rjRhLv0YCA1^|F9oCiD=+;*=@&-zH<0hHzc#0Scb1e}e+%tM zKew1H{mM(fQ2K>Y{j14$*MC7b{hDX)JSUbuQ_((VC8R`sN^wX1ng=phQ<}%^AZy6h zvvw?2g6tu%Qpc>%LqH>(&^4wa_daeMpWlUuk#A8Q}xm*l+G)` zY@OxZbbc2;cWx3(pSx&X-3lpfp$)bk<_n<8RF;@@QOYOor-2Bfde7eUGtcT#^1 zehIu2l>FTu9|XTlzJOJlv2QB<5~W)Ds3KzTK-)(dO}(rQ2w`FSrdH0B#4l-`GCa-1;_oeY^S{a4d+=w(q|OUPS(O zumijUWNw&$0RPmZ#^fIIU-d{o+4k|z;y1y6roMnLZwt*l?I9@9w_D}VB&Y>aOurN= z;=9^KyxVO6Yq`3VkvfN2JdJ)CY<(>`E}Tuo(q|iUXm1qdO828nt`2OPX1x=T<{TaF8D*R27C-$20jipf!ERZ%*i@{%j8^K?KH-i5IZUbKdZwFrmcY%_B)Z>%j>*SvX)!y^q8|3$b zZ-T!B-vVFt^?GLiU-GeD#=HX#2C+Fc7JL_62)+ld043MxaSh15GIbO9TW}}%JFtMU z`vBA!?g#ZgN_H#)V=?^l`6Xa4@(J)b@J>*6|D(tI!FfJ|D`ee7+LYd@O^eLluzP9}A6)#GUJy?={dus1z!Pmay+B zMbjksMlrgI*|VXt$hug^I+zblffCSc_8OI}0quh}Kn>7?&~)mWd>dNLYO9j6FJMs> z9?Hf+>3xUZg}U>Cm_0iXKYKCLpK_(X^j9CSAE@|N04g?|1fB(+42}nR07y**PXVWU ztN{7Dy;LQraXSw@o%}qIIh$Gx4h9>*A>b--D5!Nc4D1A%%c&H2CU_HA1bz=30sa6S z2|fcd*Hg@KGYZtci|3XUHk&aZvSuvEwHXJF2W8Jha02-%UtaBT890gZI5-(x3yS}8 za0>Y^f+gVJgQeiZp!gp5xCfj{{w1&+)Veqg{53coEHKL%gYl5!y7sSwAkDQR#&aB~ zXsdD4{b>%g0GbIELyMsa&?0}WyhwS?C0&bmMr7{PFq5X!_Suv#ij+@dUR-A9i}nU1 ztUm3ftFfUpJxAKG#XalC;Be^#V5Pr42cML$w7wa0E_fRG&w<0hS>R}JHmJFE9;iLL z)@nf!9F9J~nBedJ+PfN5D)Oy?qUg+^6@Cx!Pz)fJv<24}f@l!j% ztH6H;w}3wcHNPJRQ{=Utt^uC~nd^2v35m&;@Au%B$d6z?3(o?t2X!x2%qui2%q7It zLiV2;&oVO$oCl4kYzWet+ryZ5q6I|4I$Ji_TtH-82Hzmt2ijw~XZTq944@xnw_0xY zT1{|??)f{0 zPM4x`BN>*y6gxT1E_;8q&!=>~P3kKp=~BE^Oie;JK&pET+6x&3h`pu)Vs4ux^k>lB z&|{EdRUXQVpbF?>Xalqrx*OUJ?Su3I$RMZ;(tUX?l!9)9?t}E*$UZ2Kff)*wK{e1y zC?x$&$B;f#-jW@6(&lAUaA~wZ5I%vt@J3&Li!VQ(HdNl~>uY`fWuIrQ+Ip>j@s03u z+kE{-Up~Y0mHYB?-_GYfKWoa$f6e1yk6I^OnkPKpzk2y5FCX)KF<)Nm@oJC5Jl{Q@ z?{$wee0#c&@Xx&D^$hlMDiht~`E(yt{$-y(-lO7<3R0|5d{_wSUb+&}{e2U3Eu?s%`1)N) z_laH5Zs-MQAM_^l0n{4}1E3;^y^@V5b3v`;252p$*ph-2Ux=}0JESb5{N2fu?)p;2x;gti*@nGdCcjH~l9 zEg6~qCkL6#hZ{l0)p?nCMn>=2ogV)Jp2ZMkT%DI$osrSI@3f46+Z<$Eos%hLBM{=u zuCz?{OX?u!>b)Fm?-bvUdPf{H?xk_yb!DEHcpG%+y==PA!wcJpKd#=(O_iT+ta_g& zIsf7_!tcsGKd~>^)aLp15;NH3$~-S|xhH)#dO$J$%08trrjgEEuJ3EcKHAT`-gg7} zI`+zXR@ZZENIK0NY%{;w70TTI4iNqS0YZ(ik9msuptQxVKlYznmP?&Y(Lcj+cf8Kx ztWSO~Ot!Xln$n6HB~|6q=a|XgFMca*RS84glIm2h{dU)+y7ds}+uf4t*6^b}dDo=6 zyAD$K-a+d0KJ!3r>RscUuFA+upWX=`s7~+h9zKAa-jh9dfV%D6z_%TsPT!P9zef#h zvPEap@9LsUQjyLi2^HOv>U4If^SG`_bvo~>?OH)zb^6w2v@W_N73nN$U6*oYRi|?w zrdYS6I-TthV!NeYJV6#%U9t54Z=t_|?@j+JX?+CLHw;eGC;g|g#)QAa^`=OrOESQv z-n{+@*P-@^kz2m$kJ6_>wvlOncX6G9E{2#IhG}Kbei?37w0mAy)s|>pXQp&^G*4Nr zUGbDp{4aiWlBgaT4k>AyqOy^YPK0HRtW(nNv?m>I4~#=#5ERD$UJW#97nFiD{)+$N zdw(=>m2TEOVG}4;m1{)CKw}||2+P-wj^>u;iefQKO5bZ8)&IkZ=6lj%_P|ZWrLp&>s<`}T=fQ8uNfwS8T6`|5<5(r*9U&o1}1e2^ON=vn`V z+1Z~#_9ASmgbud;bFKYwBRWzHv1I}_ + /// Http Web Client Request + /// + public struct ClientRequest + { + public TcpClient client; + public IDictionary headers; + public IDictionary cookies; + public string request; + public string method; + public string methodSOAP; + public string query; + private Dictionary _Query; + public string body; + public string _guid; + public string _cuid; + public string apisid { get { return (string.IsNullOrEmpty(_cuid) ? _guid : _cuid); } } + // 1 - GET, 2 - POST, 3 - PUSH, 4 - PUT + public byte httpMethod; + // 0 - unknown type, 1 - JSON, 2 - XML Object, 3 - XML-RPC, 4 - SOAP, 5 - SOAP 1.2, 6 - HTTP GET + public byte clientType; + //public object session_vars; + public string authUser; + public string authPass; + public string xFwd4; + public System.Text.Encoding Encoding; + + public ClientRequest(TcpClient client, IDictionary headers, IDictionary cookies, string request, string method, string query, string body) + { + this.httpMethod = 0; // GET + if (!string.IsNullOrEmpty(request)) + { + if (request.StartsWith("GET")) this.httpMethod = 1; + if (request.StartsWith("POST")) this.httpMethod = 2; + if (request.StartsWith("PUSH")) this.httpMethod = 3; + if (request.StartsWith("PUT")) this.httpMethod = 4; + }; + this.clientType = 0; // unknown type + this.client = client; + this.headers = headers; + this.cookies = cookies; + this.request = request; + this.method = method; + if (!string.IsNullOrEmpty(this.method)) + if (this.method.EndsWith("/")) this.method = this.method.Remove(this.method.Length - 1); + this.methodSOAP = this.method; + this.query = query; + this._Query = null; + this.body = body; + if (!string.IsNullOrEmpty(this.body)) + { + this.body = this.body.Trim(); + if ((this.body.StartsWith("{") && this.body.EndsWith("}"))) this.clientType = 1; + //if ((this.body.StartsWith("[") && this.body.EndsWith("]"))) this.clientType = 1; + if ((this.body.StartsWith(""))) this.clientType = 2; + if ((this.body.StartsWith(""))) this.clientType = 3; + if ((this.body.StartsWith(""))) this.clientType = 4; + if ((this.body.StartsWith(""))) this.clientType = 5; + }; + this._guid = System.Guid.NewGuid().ToString().Replace("-", ""); + this._cuid = ""; + if ((this.cookies != null) && (this.cookies.Keys.Contains("apisid"))) + this._guid = this._cuid = this.cookies["apisid"]; + authUser = ""; + authPass = ""; + xFwd4 = ""; + Encoding = System.Text.Encoding.UTF8; + if ((this.headers != null) && (this.headers.Count > 0) && (this.headers.Keys.Contains("Response-Encoding"))) + { + if (this.headers["Response-Encoding"] == "windows-1251") + this.Encoding = System.Text.Encoding.GetEncoding(1251); + else + { + int enc = 0; + if (int.TryParse(this.headers["Response-Encoding"], out enc)) + { + try + { + this.Encoding = System.Text.Encoding.GetEncoding(enc); + } + catch { this.Encoding = System.Text.Encoding.UTF8; }; + } + else + { + try + { + + this.Encoding = System.Text.Encoding.GetEncoding(this.headers["Response-Encoding"]); + } + catch { this.Encoding = System.Text.Encoding.UTF8; }; + }; + if (this.Encoding == null) + this.Encoding = System.Text.Encoding.UTF8; + } + }; + //session_vars = null; + } + + public bool IsUnknown { get { return clientType == 0; } } + public bool IsJSON { get { return clientType == 1; } } + public bool IsXML { get { return clientType == 2; } } + public bool IsXMLRPC { get { return clientType == 3; } } + public bool IsSOAP { get { return (clientType == 4) || clientType == 5; } } + public bool IsSOAP11 { get { return clientType == 4; } } + public bool IsSOAP12 { get { return clientType == 5; } } + + + public bool IsHTTPGet { get { return httpMethod == 1; } } + public bool IsHTTPPost { get { return httpMethod == 2; } } + public bool IsHTTPPush { get { return httpMethod == 3; } } + public bool IsHTTPPut { get { return httpMethod == 4; } } + + public string UserAgent + { + get + { + if (!headers.Keys.Contains("User-Agent")) return ""; + return headers["User-Agent"]; + } + } + + public string Referer + { + get + { + if (!headers.Keys.Contains("Referer")) return ""; + return headers["Referer"]; + } + } + + public string RefererHost + { + get + { + if (!headers.Keys.Contains("Referer")) return ""; + try + { + return (new Uri(headers["Referer"])).Host; + } + catch { }; + return ""; + } + } + + public string ClientIP + { + get + { + //if (!string.IsNullOrEmpty(xFwd4)) return xFwd4; + return ((IPEndPoint)client.Client.RemoteEndPoint).Address.ToString(); + } + } + + public string GetClientIP(bool proxied) + { + if (proxied && (!string.IsNullOrEmpty(xFwd4))) return xFwd4; + return ((IPEndPoint)client.Client.RemoteEndPoint).Address.ToString(); + } + + public Dictionary Query + { + get + { + if (_Query != null) return _Query; + + _Query = new Dictionary(); + if (string.IsNullOrEmpty(query)) return _Query; + string[] pars = query.Split(new char[] { '&' }); + if (pars.Length == 0) return _Query; + foreach (string par in pars) + { + string[] pv = par.Split(new char[] { '=' }, 2); + string p = pv[0]; + string v = ""; + if (p == null) p = ""; else p = HttpUtility.UrlDecode(p); + if (pv.Length > 1) v = pv[1]; + if (v == null) v = ""; else v = HttpUtility.UrlDecode(v); + if (_Query.ContainsKey(p)) + _Query[p] = _Query[p].ToString() + "," + v; + else + _Query.Add(p, v); + }; + return _Query; + } + } + } + + + /// + /// Storing Server Methods + /// + public struct MethodInfo + { + /// + /// + /// + /// + /// + /// + /// + /// true if ok, false if 404 + public delegate bool CallMethod(ClientRequest clientRequest); + + public string name; + public string version; + public CallMethod implementation; + + public MethodInfo(string name, string version, CallMethod implementation) + { + this.name = name; + this.version = version; + this.implementation = implementation; + } + + public bool IsAdminMethod { get { return this.name.IndexOf("admin") == 0; } } + } + + + /// + /// Main Client Object Holder + /// + /// + public abstract class CrossSendObject + { + /// + /// input text data + /// + public string data = null; + + /// + /// Parsed Object + /// + public T obj = default(T); + + /// + /// Error text + /// + public string error = null; + + /// + /// Error Code + /// + public int errorCode = 0; + + /// + /// Parsed ok? + /// + public bool IsValid + { + get + { + return string.IsNullOrEmpty(this.error); + } + } + + /// + /// Error response in specified format + /// + public string errorResponse + { + get + { + return error2ResponseObject(); + } + } + + /// + /// Parsed ok text + /// + public string ValidationText + { + get + { + string obj_type = typeof(T).ToString(); + if (obj_type.IndexOf("+") > 0) obj_type = obj_type.Substring(obj_type.IndexOf("+") + 1); + if (obj_type.IndexOf(".") > 0) obj_type = obj_type.Substring(obj_type.IndexOf(".") + 1); + return "Input data is " + (this.IsValid ? "" : "not ") + "valid for object '" + obj_type + "'"; + } + } + + /// + /// Return text in client specified format (JSON/XML-RPC/XML) + /// + /// + public virtual string error2ResponseObject() + { + return String.Format("{0}: {1}", errorCode, error); + } + + public static T fromQuery(IDictionary Query) + { + if (Query == null) return default(T); + if (Query.Count == 0) return default(T); + + Type t = typeof(T); + System.Reflection.ConstructorInfo ci = t.GetConstructor(new Type[0]); + T obj = (T)ci.Invoke(null); + foreach (KeyValuePair kv in Query) + { + System.Reflection.FieldInfo fi = t.GetField(kv.Key); + if (fi != null) + { + if (fi.FieldType.Name == "String") fi.SetValue(obj, kv.Value.Replace("+", " ")); + if (fi.FieldType.Name == "String[]") fi.SetValue(obj, kv.Value.Split(new char[] { ',' }, StringSplitOptions.None)); + if (fi.FieldType.Name == "Single[]") + { + string[] rt = kv.Value.Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries); + Single[] rs = new float[rt.Length]; + for (int i = 0; i < rs.Length; i++) rs[i] = float.Parse(rt[i], System.Globalization.CultureInfo.InvariantCulture); + fi.SetValue(obj, rs); + }; + if (fi.FieldType.Name == "Double[]") + { + string[] rt = kv.Value.Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries); + Double[] rs = new double[rt.Length]; + for (int i = 0; i < rs.Length; i++) rs[i] = double.Parse(rt[i], System.Globalization.CultureInfo.InvariantCulture); + fi.SetValue(obj, rs); + }; + if (fi.FieldType.Name == "Byte") fi.SetValue(obj, Byte.Parse(kv.Value)); + if (fi.FieldType.Name == "Int16") fi.SetValue(obj, Int16.Parse(kv.Value)); + if (fi.FieldType.Name == "Int32") fi.SetValue(obj, Int32.Parse(kv.Value)); + if (fi.FieldType.Name == "Int64") fi.SetValue(obj, Int64.Parse(kv.Value)); + if (fi.FieldType.Name == "Single") fi.SetValue(obj, Single.Parse(kv.Value)); + if (fi.FieldType.Name == "Double") fi.SetValue(obj, Double.Parse(kv.Value)); + }; + }; + return obj; + } + } + + /// + /// JSON Parser (Deserializer) + /// + /// + public class JSONObject : CrossSendObject + { + /// + /// Serialize object to JSON + /// + /// + /// + public static string Save(T obj) + { +#if ONLYTILES + return ""; +#else + return JsonConvert.SerializeObject(obj); +#endif + } + + /// + /// Parse (Deserialize) text + /// + /// + /// + public static JSONObject Parse(string data) + { + JSONObject res = new JSONObject(); + res.data = data; + if (string.IsNullOrEmpty(data)) + { + res.error = "Input data cannot be empty"; + res.errorCode = 1001; // JSON INPUT DATA ERROR + return res; + }; + + try + { +#if ONLYTILES + res.obj = default(T); +#else + res.obj = JsonConvert.DeserializeObject(res.data); +#endif + } + catch (Exception ex) + { + res.error = ex.Message + (ex.InnerException == null ? "" : " " + ex.InnerException.Message); + res.errorCode = 1002; // JSON PARSE DATA ERROR + }; + return res; + } + + /// + /// Error text in JSON object + /// + public override string error2ResponseObject() + { + if (IsValid) + return null; + else + return "{Error:'" + this.error + "', ErrCode:" + this.errorCode.ToString() + "}"; + } + } + + /// + /// XML-RPC -> JSON + /// Normal Object -> XML-RPC Params + /// + public class XMLRPCObject : CrossSendObject + { + /// + /// Serialize object to XML-RPC + /// + /// + /// + public static string Save(T obj) + { + Nwc.XmlRpc.XmlRpcResponse resp = new Nwc.XmlRpc.XmlRpcResponse(); + resp.Value = XMLRPCObject.ObjToList(obj); + Nwc.XmlRpc.XmlRpcResponseSerializer rs = new Nwc.XmlRpc.XmlRpcResponseSerializer(); + return rs.Serialize(resp); + } + + /// + /// JSON output data + /// + public string jsondata = null; + + /// + /// Method Name + /// + public string method = null; + + public static XMLRPCObject ParseMethod(string data) + { + XMLRPCObject res = new XMLRPCObject(); + res.data = data; + if (string.IsNullOrEmpty(data)) + { + res.error = "Input data cannot be empty"; + res.errorCode = 3001; // XMLRPC + return res; + }; + + try + { + Nwc.XmlRpc.XmlRpcRequestDeserializer dds = new Nwc.XmlRpc.XmlRpcRequestDeserializer(); + Nwc.XmlRpc.XmlRpcRequest req = (Nwc.XmlRpc.XmlRpcRequest)dds.Deserialize(data); + string json = ""; + if (req.Params.Count > 0) + { + IDictionary id = (IDictionary)req.Params[0]; + foreach (DictionaryEntry de in id) + json += (json.Length > 0 ? ", " : "") + "'" + de.Key.ToString() + "':" + ValueToJSON(de.Value); + }; + res.jsondata = "{" + json + "}"; + res.method = req.MethodName.ToLower(); + if (string.IsNullOrEmpty(res.error) && string.IsNullOrEmpty(res.method)) + { + res.error = "Method could not be empty"; + res.errorCode = 3003; // XMLRPC + }; + if (string.IsNullOrEmpty(res.error) && string.IsNullOrEmpty(res.jsondata)) + { + res.error = "XML Parcing error"; + res.errorCode = 3004; + }; + } + catch (Exception ex) + { + res.error = ex.Message + (ex.InnerException == null ? "" : " " + ex.InnerException.Message); + res.errorCode = 3002; + }; + + return res; + } + + public static XMLRPCObject Parse(string data) + { + XMLRPCObject res = ParseMethod(data); + if (res.IsValid) + { + JSONObject jo = JSONObject.Parse(res.jsondata); + if (!jo.IsValid) + { + res.error = jo.error; + res.errorCode = 3006; // XMLRPC JSON + } + else + res.obj = jo.obj; + }; + return res; + } + + private static string ValueToJSON(object value) + { + Type tp = value.GetType(); + switch (tp.Name) + { + case "String": return "'" + value.ToString() + "'"; + case "Byte": return value.ToString(); + case "SByte": return value.ToString(); + case "Int16": return value.ToString(); + case "Int32": return value.ToString(); + case "UInt16": return value.ToString(); + case "UInt32": return value.ToString(); + case "Int64": return value.ToString(); + case "UInt64": return value.ToString(); + case "Boolean": return ((bool)value) ? "true" : "false"; + case "Double": return ((double)value).ToString(System.Globalization.CultureInfo.InvariantCulture); + case "Single": return ((double)value).ToString(System.Globalization.CultureInfo.InvariantCulture); + case "DateTime": return "'" + ((DateTime)value).ToString("yyyy-MM-ddTHH:mm:ss") + "'"; + case "ArrayList": + System.Collections.ArrayList val = (System.Collections.ArrayList)value; + if (val.Count == 0) return "[]"; + string arrres = "["; + for (int i = 0; i < val.Count; i++) + { + if (i > 0) arrres += ", "; + arrres += ValueToJSON(val[i]); + } + return arrres + "]"; + case "Hashtable": + Hashtable ht = (Hashtable)value; + if (ht.Count == 0) return "{}"; + string objres = "{"; + foreach (DictionaryEntry de in ht) + { + if (objres.Length > 2) objres += ", "; + objres += "'" + de.Key + "':" + ValueToJSON(de.Value); + }; + return objres + "}"; + }; + return "null"; + } + + /// + /// Create Data Object for XMLRPCSerializer + /// + /// normal object + /// object as params + private static IDictionary ObjToList(object value) + { + IDictionary dict = (IDictionary)new Hashtable(); + Type t = value.GetType(); + System.Reflection.MemberInfo[] m = t.GetMembers(); + foreach (System.Reflection.MemberInfo mi in m) + if (mi.MemberType == System.Reflection.MemberTypes.Field) + { + System.Reflection.FieldInfo fi = t.GetField(mi.Name); + object oo = fi.GetValue(value); + if (oo != null) + { + Type tp = oo.GetType(); + if (!tp.FullName.StartsWith("System")) + { + try + { + if (tp.Name.EndsWith("[]")) + { + ArrayList al = new ArrayList(); + al.AddRange((IList)oo); + if (al.Count > 0) + for (int i = 0; i < al.Count; i++) + { + Type aat = al[i].GetType(); + if (!aat.FullName.StartsWith("System")) + { + try + { + al[i] = ObjToList(al[i]); + } + catch { al[i] = null; }; + } + else if (al[i] is string) + al[i] = System.Security.SecurityElement.Escape(al[i].ToString()); + }; + dict.Add(mi.Name, al); + } + else + { + IDictionary rrr = ObjToList(oo); + dict.Add(mi.Name, rrr); + }; + } + catch { oo = null; }; + } + else if (oo is Array) + { + ArrayList al = new ArrayList(); + al.AddRange((IList)oo); + if (al.Count > 0) + for (int i = 0; i < al.Count; i++) + { + Type aat = al[i].GetType(); + if (!aat.FullName.StartsWith("System")) + { + try + { + al[i] = ObjToList(al[i]); + } + catch { al[i] = null; }; + } + else if (al[i] is string) + al[i] = System.Security.SecurityElement.Escape(al[i].ToString()); + }; + dict.Add(mi.Name, al); + } + else if (oo is string) + dict.Add(mi.Name, System.Security.SecurityElement.Escape(oo.ToString())); + else if (oo is uint) + dict.Add(mi.Name, int.Parse(oo.ToString())); + else if (oo is ulong) + dict.Add(mi.Name, int.Parse(oo.ToString())); + else if (oo is long) + dict.Add(mi.Name, int.Parse(oo.ToString())); + else if (oo is short) + dict.Add(mi.Name, int.Parse(oo.ToString())); + else if (oo is ushort) + dict.Add(mi.Name, int.Parse(oo.ToString())); + else + dict.Add(mi.Name, oo); + }; + }; + return dict; + } + + /// + /// Error text in JSON object + /// + public override string error2ResponseObject() + { + if (IsValid) + return null; + else + { + Nwc.XmlRpc.XmlRpcResponse resp = new Nwc.XmlRpc.XmlRpcResponse(); + if (data is string) + resp.SetFault(errorCode, System.Security.SecurityElement.Escape(this.error)); + else + resp.Value = XMLRPCObject.ObjToList(data); + Nwc.XmlRpc.XmlRpcResponseSerializer rs = new Nwc.XmlRpc.XmlRpcResponseSerializer(); + return rs.Serialize(resp); + } + } + } + + /// + /// Simple XML Object + /// + /// + public class XMLObject : CrossSendObject + { + /// + /// Serialize object to XML + /// + /// + /// + public static string Save(T obj) + { + System.Xml.Serialization.XmlSerializerNamespaces xns = new XmlSerializerNamespaces(); + xns.Add(String.Empty, String.Empty); + System.Xml.Serialization.XmlSerializer xs = new System.Xml.Serialization.XmlSerializer(typeof(T)); + System.IO.MemoryStream ms = new MemoryStream(); + System.IO.StreamWriter writer = new StreamWriter(ms); + xs.Serialize(writer, obj, xns); + writer.Flush(); + ms.Position = 0; + byte[] bb = new byte[ms.Length]; + ms.Read(bb, 0, bb.Length); + writer.Close(); + string dta = System.Text.Encoding.UTF8.GetString(bb); + return dta; + } + + /// + /// Parse (Deserialize) text + /// + /// + /// + public static XMLObject Parse(string data) + { + XMLObject res = new XMLObject(); + res.data = data; + if (string.IsNullOrEmpty(data)) + { + res.error = "Input data cannot be empty"; + res.errorCode = 2001; // XML + return res; + }; + + try + { + res.obj = XMLSaved.LoadText(data); + } + catch (Exception ex) + { + res.error = ex.Message + (ex.InnerException == null ? "" : " " + ex.InnerException.Message); + res.errorCode = 2002; // XML + }; + return res; + } + + /// + /// Error text in XML object + /// + public override string error2ResponseObject() + { + if (IsValid) + return null; + else + { + string rootEl = (typeof(T)).Name; + object[] maina = (typeof(T)).GetCustomAttributes(false); + if (maina != null) + foreach (object ma in maina) + if (ma is XmlRootAttribute) + { + XmlRootAttribute xra = (XmlRootAttribute)ma; + rootEl = xra.ElementName; + }; + return "<" + rootEl + ">" + System.Security.SecurityElement.Escape(this.error) + "" + errorCode.ToString() + ""; + }; + } + } + + /// + /// Simple XML Object + /// + /// + public class XMLSOAP : CrossSendObject + { + /// + /// SOAP output data + /// + public string soapdata = null; + + /// + /// Method Name + /// + public string method = null; + public string methodSOAP = null; + + private const string bodyText = "soap:Body"; + private const string bodyText2 = "soap12:Body"; + + /// + /// Serialize object to XML SOAP 1.1 + /// + /// + /// + public static string Save11(T obj, string methodSOAP) + { + string prefix = "" + + "<" + methodSOAP + "Response>"; + string objdata = Save(obj); + string postfix = ""; + return prefix + objdata + postfix; + } + + /// + /// Serialize object to XML SOAP 1.2 + /// + /// + /// + public static string Save12(T obj, string methodSOAP) + { + string prefix = "" + + "<" + methodSOAP + "Response>"; + string objdata = Save(obj); + string postfix = ""; + return prefix + objdata + postfix; + } + + /// + /// Serialize object to XML + /// + /// + /// + private static string Save(T obj) + { + System.Xml.Serialization.XmlSerializerNamespaces xns = new XmlSerializerNamespaces(); + xns.Add(String.Empty, String.Empty); + System.Xml.Serialization.XmlSerializer xs = new System.Xml.Serialization.XmlSerializer(typeof(T)); + System.IO.MemoryStream ms = new MemoryStream(); + System.Xml.XmlWriterSettings xws = new XmlWriterSettings(); + xws.OmitXmlDeclaration = true; + System.Xml.XmlWriter xw = System.Xml.XmlWriter.Create(ms, xws); + xs.Serialize(xw, obj, xns); + xw.Flush(); + ms.Position = 0; + byte[] bb = new byte[ms.Length]; + ms.Read(bb, 0, bb.Length); + xw.Close(); + string ret = System.Text.Encoding.UTF8.GetString(bb); + return ret; + } + + public static XMLSOAP ParseMethod(string data) + { + XMLSOAP res = new XMLSOAP(); + res.data = data; + if (string.IsNullOrEmpty(data)) + { + res.error = "Input data cannot be empty"; + res.errorCode = 4001; // SOAP + return res; + }; + + try + { + int bf = 0; + int be = 0; + if (data.IndexOf("<" + bodyText2 + ">") > 0) + { + bf = data.IndexOf("<" + bodyText2 + ">") + bodyText.Length + 2; + be = data.IndexOf("", bf); + } + else + { + bf = data.IndexOf("<" + bodyText + ">") + bodyText.Length + 2; + be = data.IndexOf("", bf); + }; + string body = data.Substring(bf, be - bf); + XmlDocument xd = new XmlDocument(); + xd.LoadXml(body); + res.methodSOAP = xd.DocumentElement.Name; + res.method = res.methodSOAP.ToLower(); + res.soapdata = xd.DocumentElement.InnerXml; + if (string.IsNullOrEmpty(res.error) && string.IsNullOrEmpty(res.method)) + { + res.error = "Method could not be empty"; + res.errorCode = 4003; // XMLRPC + }; + if (string.IsNullOrEmpty(res.error) && string.IsNullOrEmpty(res.soapdata)) + { + res.error = "XML Parcing error"; + res.errorCode = 4004; + }; + } + catch (Exception ex) + { + res.error = ex.Message + (ex.InnerException == null ? "" : " " + ex.InnerException.Message); + res.errorCode = 4002; + }; + + return res; + } + + public static XMLSOAP Parse(string data) + { + XMLSOAP res = ParseMethod(data); + if (res.IsValid) + { + XMLObject xo = XMLObject.Parse(res.soapdata); + if (!xo.IsValid) + { + res.error = xo.error; + res.errorCode = 4006; // XML SOAP + } + else + res.obj = xo.obj; + }; + return res; + } + + /// + /// Error text in XML object + /// + public override string error2ResponseObject() + { + if (IsValid) + return null; + else + return "" + + "" + errorCode.ToString() + "" + System.Security.SecurityElement.Escape(error) + ""; + } + } +} diff --git a/SOLVER/dkxce.Route.ServiceSolver/Program.cs b/SOLVER/dkxce.Route.ServiceSolver/Program.cs new file mode 100644 index 0000000..f087c12 --- /dev/null +++ b/SOLVER/dkxce.Route.ServiceSolver/Program.cs @@ -0,0 +1,289 @@ +// Lock Exe with Machine ID -- use SSKeySys & SSProtector in Tools +#define LOCK +// Allow Empty Lock (No Machin ID in Exe) -- use SSKeySys & SSProtector in Tools +#define AllowEmptyLock + +using System; +using System.IO; +using System.Threading; +using System.Net; +using System.Net.Sockets; +using System.Collections; +using System.Collections.Generic; +using System.Text; +using System.Text.RegularExpressions; +using System.ServiceProcess; +using System.Configuration.Install; +using System.ComponentModel; +using System.Xml; +using System.Xml.Serialization; +using System.Runtime.InteropServices; +using System.Reflection; +using System.Runtime.Remoting; +using System.Runtime.Remoting.Channels; +using System.Runtime.Remoting.Channels.Tcp; +using System.Runtime.Serialization.Formatters; +using System.Runtime.Serialization.Formatters.Binary; + +namespace dkxce.Route.ServiceSolver +{ + static class Program + { + static void Main(string[] args) + { + bool isVirt = SYSID._IsVirtual; // false + + string MachineID = ""; + + #if LOCK + if (!validMachine(out MachineID)) + { + Console.WriteLine(MachineID); + Console.WriteLine("Machine is not supported (1)"); + System.Threading.Thread.Sleep(2500); + return; + }; + #endif + + if (isVirt && (keyFileDays() >= 14)) // 2 weeks start limit + { + Console.WriteLine(MachineID); + Console.WriteLine("Machine is not supported (2)"); + System.Threading.Thread.Sleep(2500); + return; + }; + + if (isVirt || RunConsole(args, "dkxce.Route.ServiceSolver")) + { + Console.Write("Starting Service..."); + Console.SetCursorPosition(0, Console.CursorTop); + + RouteServer rs = new RouteServer(); + try + { + rs.Start(args); + Console.WriteLine(rs.StartupInfo.Replace("\r\nReady","")); + + //#if LOCK + //Console.WriteLine("Machine ID: " + MachineID); + //Console.WriteLine("Is Virtual: " + isVirt.ToString()); + //#endif + + if (isVirt) + { + Console.WriteLine("Started at console (5 days)"); + Conso1e.ReadLine(1000 * 60 * 60 * 24 * 5); // 5 days runtime limit + } + else + { + Console.WriteLine("Started at console"); + Console.ReadLine(); + }; + } + catch (Exception ex) + { + Console.WriteLine("Error: "+ex.Message); + Conso1e.ReadLine(5000); + }; + try { rs.Stop(); } catch { }; + Console.WriteLine("RouteEngine: stopped"); + return; + }; + } + + static bool RunConsole(string[] args, string ServiceName) + { + if (!Environment.UserInteractive) // As Service + { + ServiceBase[] ServicesToRun; + ServicesToRun = new ServiceBase[] { new RouteServer() }; + ServiceBase.Run(ServicesToRun); + return false; + }; + + if ((args == null) || (args.Length == 0)) + return true; + + switch (args[0]) + { + case "-i": + case "/i": + case "-install": + case "/install": + RouteServer.Install(false, args, ServiceName); + return false; + case "-u": + case "/u": + case "-uninstall": + case "/uninstall": + RouteServer.Install(true, args, ServiceName); + return false; + case "-start": + case "/start": + { + Console.WriteLine("Starting service {0}...", ServiceName); + ServiceController service = new ServiceController(ServiceName); + service.Start(); + service.WaitForStatus(ServiceControllerStatus.Running, TimeSpan.FromSeconds(5)); + Console.WriteLine("Service {0} is {1}", ServiceName, service.Status.ToString()); + return false; + }; + case "-stop": + case "/stop": + { + Console.WriteLine("Starting service {0}...", ServiceName); + ServiceController service = new ServiceController(ServiceName); + service.Stop(); + service.WaitForStatus(ServiceControllerStatus.Stopped, TimeSpan.FromSeconds(5)); + Console.WriteLine("Service {0} is {1}", ServiceName, service.Status.ToString()); + return false; + }; + case "-restart": + case "/restart": + { + Console.WriteLine("Starting service {0}...", ServiceName); + ServiceController service = new ServiceController(ServiceName); + service.Stop(); + service.WaitForStatus(ServiceControllerStatus.Stopped, TimeSpan.FromSeconds(5)); + Console.WriteLine("Service {0} is {1}", ServiceName, service.Status.ToString()); + service.Start(); + service.WaitForStatus(ServiceControllerStatus.Running, TimeSpan.FromSeconds(5)); + Console.WriteLine("Service {0} is {1}", ServiceName, service.Status.ToString()); + return false; + }; + case "-status": + case "/status": + { + ServiceController service = new ServiceController(ServiceName); + Console.WriteLine("Service {0} is {1}", ServiceName, service.Status.ToString()); + return false; + }; + case "/vip": + { + RouteServer rs = new RouteServer(); + rs.Start(args); + Console.WriteLine("RouteEngine: started at console (vip)"); + Console.ReadLine(); + try { rs.Stop(); } + catch { }; + Console.WriteLine("RouteEngine: stopped"); + return false; + }; + default: + try { if (File.Exists(args[0])) return true; } catch { }; + Console.WriteLine("Usage:"); + Console.WriteLine(" dkxce.Route.ServiceSolver.exe - running console"); + Console.WriteLine(" dkxce.Route.ServiceSolver.exe /i - install service"); + Console.WriteLine(" dkxce.Route.ServiceSolver.exe /u - uninstall service"); + Console.WriteLine(" dkxce.Route.ServiceSolver.exe /start - start service"); + Console.WriteLine(" dkxce.Route.ServiceSolver.exe /stop - stop service"); + Console.WriteLine(" dkxce.Route.ServiceSolver.exe /restart - restart service"); + Console.WriteLine(" dkxce.Route.ServiceSolver.exe /status - service status"); + System.Threading.Thread.Sleep(1000); + return false; + }; + } + + public static byte[] MACHINEID = new byte[] { 0x72, 0x65, 0x67, 0x62, 0x6b, 0x62, 0x64, 0x76, 0x66, 0x75, 0x66, 0x70, 0x62, 0x79, 0x74, 0x68, 0x74, 0x70, 0x62, 0x79, 0x6a, 0x64, 0x65, 0x2e, 0x70, 0x62, 0x79, 0x65, 0x3E, 0x3E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3C, 0x3C }; + + static bool validMachine(out string Machine_ID) + { + string ccode = "dkxce.Route.ServiceSolver.exe"; + string HASH1 = Machine_ID = SYSID.GetSystemID(true, true, false, true, false); + string HASH2 = SYSID.Encrypt(HASH1, ccode); + string HASH3 = ""; + try + { + int sum = 0; + HASH3 = ""; + int x = 0; + for (int i = 0; i < MACHINEID.Length; i++) if (MACHINEID[i] == 0) { x = i; break; }; + #if AllowEmptyLock + for (int i = 30; i < MACHINEID.Length; i++) sum += MACHINEID[i]; + if (sum == 120) return true; // 0x3C, 0x3C + #endif + HASH3 = System.Text.Encoding.ASCII.GetString(MACHINEID, 30, x - 30); + //return true; + } + catch { return false; }; + string HASH4 = ""; + try + { + HASH4 = SYSID.Decrypt(HASH3, ccode); + } + catch { }; + return (HASH1 == HASH4); + } + + static int keyFileDays() + { + try + { + //DateTime dt = System.IO.File.GetLastWriteTimeUtc(AppDomain.CurrentDomain.BaseDirectory + @"dkxce.Route.Biosid.dll"); + DateTime dt = System.IO.File.GetLastWriteTimeUtc(AppDomain.CurrentDomain.BaseDirectory + @"dkxce.Route.ServiceSolver.exe"); + return (int)(DateTime.UtcNow.Subtract(dt)).TotalDays; + } + catch { }; + return int.MaxValue; + } + } + + [RunInstaller(true)] + public sealed class MyServiceInstallerProcess : ServiceProcessInstaller + { + public MyServiceInstallerProcess() + { + this.Account = ServiceAccount.NetworkService; + this.Username = null; + this.Password = null; + } + } + + [RunInstaller(true)] + public sealed class MyServiceInstaller : ServiceInstaller + { + public MyServiceInstaller() + { + this.Description = "nms Ñåðâèñ ïîñòðîåíèÿ ìàðøðóòà dkxce.Route"; + this.DisplayName = "dkxce.Route.ServiceSolver"; + this.ServiceName = "dkxce.Route.ServiceSolver"; + this.StartType = System.ServiceProcess.ServiceStartMode.Automatic; + } + } + + class Conso1e + { + private static Thread inputThread; + private static AutoResetEvent getInput, gotInput; + private static string input; + + static Conso1e() + { + getInput = new AutoResetEvent(false); + gotInput = new AutoResetEvent(false); + inputThread = new Thread(reader); + inputThread.IsBackground = true; + inputThread.Start(); + } + + private static void reader() + { + while (true) + { + getInput.WaitOne(); + input = Console.ReadLine(); + gotInput.Set(); + } + } + + public static string ReadLine(int timeOutMillisecs) + { + getInput.Set(); + bool success = gotInput.WaitOne(timeOutMillisecs); + if (success) + return input; + else + throw new System.TimeoutException("User did not provide input within the timelimit."); + } + } +} \ No newline at end of file diff --git a/SOLVER/dkxce.Route.ServiceSolver/Properties/AssemblyInfo.cs b/SOLVER/dkxce.Route.ServiceSolver/Properties/AssemblyInfo.cs new file mode 100644 index 0000000..f3054e7 --- /dev/null +++ b/SOLVER/dkxce.Route.ServiceSolver/Properties/AssemblyInfo.cs @@ -0,0 +1,33 @@ +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +[assembly: AssemblyTitle("dkxce.Route.ServiceSolver")] +[assembly: AssemblyDescription("Ð¡ÐµÑ€Ð²Ð¸Ñ Ð¿Ð¾Ð¸Ñка маршрутов")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("Milok Zbrozek ")] +[assembly: AssemblyProduct("dkxce.Route.ServiceSolver")] +[assembly: AssemblyCopyright("Copyright © Milok Zbrozek 2021")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// Setting ComVisible to false makes the types in this assembly not visible +// to COM components. If you need to access a type in this assembly from +// COM, set the ComVisible attribute to true on that type. +[assembly: ComVisible(false)] + +// The following GUID is for the ID of the typelib if this project is exposed to COM +[assembly: Guid("409e5f8b-937f-4536-8cbe-56282dca8847")] + +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +[assembly: AssemblyVersion("21.12.21.23")] +[assembly: AssemblyFileVersion("21.12.21.23")] diff --git a/SOLVER/dkxce.Route.ServiceSolver/RouteServer.cs b/SOLVER/dkxce.Route.ServiceSolver/RouteServer.cs new file mode 100644 index 0000000..e51ff2e --- /dev/null +++ b/SOLVER/dkxce.Route.ServiceSolver/RouteServer.cs @@ -0,0 +1,369 @@ +using System; +using System.IO; +using System.Threading; +using System.Net; +using System.Net.Sockets; +using System.Collections; +using System.Collections.Generic; +using System.Text; +using System.Text.RegularExpressions; +using System.ServiceProcess; +using System.Configuration.Install; +using System.ComponentModel; +using System.Xml; +using System.Xml.Serialization; +using System.Runtime.InteropServices; +using System.Reflection; +using System.Runtime.Remoting; +using System.Runtime.Remoting.Channels; +using System.Runtime.Remoting.Channels.Tcp; +using System.Runtime.Serialization.Formatters; +using System.Runtime.Serialization.Formatters.Binary; + +namespace dkxce.Route.ServiceSolver +{ + public class RouteServer : ServiceBase + { + string configFile = null; + bool pTCP = true; + bool pRem = false; + bool pHTTP = false; + + TcpChannel RouteSearcherChannel = null; // if use .Net Remoting + RouteTCPListenter tcpServer = null; + RouteHTTPListener httpServer = null; + + public string defHTTP = ""; + public string defTCP = ""; + public string defRem = ""; + public string ConfigFileInfo { get { return String.IsNullOrEmpty(this.configFile) ? "dkxce.Route.ServiceSolver.xml (Default)" : Path.GetFileName(configFile); } } + + public RouteServer() { } + + public void Start() + { + OnStart(null); + } + + public void Start(string[] args) + { + OnStart(args); + } + + private string ValidConfigFile(string[] args) + { + if (args == null) return null; + if (args.Length == 0) return null; + if (File.Exists(args[0])) return args[0]; + + string f = args[0]; + f = Path.GetFullPath(Path.GetDirectoryName(System.Reflection.Assembly.GetEntryAssembly().Location) + @"\" + f); + if (File.Exists(f)) return f; + return null; + } + + // cmd> sc delete dkxce.Route.ServiceSolver + // cmd> sc create dkxce.Route.ServiceSolver binpath= " -param=5" + protected override void OnStart(string[] args) + { + // SVC CONFIG // + SvcConfig scfg = !String.IsNullOrEmpty(this.configFile = ValidConfigFile(args)) ? SvcConfig.Load(this.configFile) : SvcConfig.Load(); + RouteThreader.mem.confile = this.ConfigFileInfo; + RouteThreader.threadLog = scfg.threadLog; + RouteThreader.threadLogMem = scfg.threadLogMem; + RouteThreader.IPBanList = scfg.IPBanList; + RouteThreader.authorization = scfg.authorization; + RouteThreader.Users = scfg.Users; + RouteThreader.UpMem(); + pTCP = scfg.ProtoTCP; + pRem = scfg.ProtoRemoting; + pHTTP = scfg.ProtoHTTP; + + if (pHTTP) defHTTP = String.Format("http://127.0.0.1:{0}/nms/",scfg.defHTTP); + if (pTCP) defTCP = String.Format("tcp://127.0.0.1:{0}/", scfg.defPort); + if (pRem) defRem = String.Format("remoting://127.0.0.1:{0}/", scfg.defPort); + + // on errors + AppDomain.CurrentDomain.UnhandledException += new UnhandledExceptionEventHandler(UnhandledException); + + // Max Thread Count In Client Pool + int clientConnectionLimit = 1; + if (scfg.IsMultiClient) + { + clientConnectionLimit = scfg.mucObjects + 1; // calcing + 1 wait + if (scfg.fixThreads > 1) clientConnectionLimit = scfg.fixThreads; + } + else if (scfg.IsMultiThread) + { + clientConnectionLimit = Environment.ProcessorCount - 2; + if (clientConnectionLimit < scfg.minThreads) clientConnectionLimit = scfg.minThreads; + if (clientConnectionLimit > scfg.maxThreads) clientConnectionLimit = scfg.maxThreads; + if (scfg.fixThreads > 1) clientConnectionLimit = scfg.fixThreads; + }; + + if (pRem) + { + // + // if use .Net Remoting + // + // configure tcp channel + BinaryServerFormatterSinkProvider provider = new BinaryServerFormatterSinkProvider(); + provider.TypeFilterLevel = TypeFilterLevel.Full; + IDictionary RouteSearcherProps = new Hashtable(); + RouteSearcherProps["name"] = scfg.defChannel; + RouteSearcherProps["port"] = scfg.defPort; + RouteSearcherProps["clientConnectionLimit"] = clientConnectionLimit; + RouteSearcherChannel = new TcpChannel(RouteSearcherProps, null, provider); + // + // Remoting config parameters + // load configuration from `config.xml` + // file example + // + //if (File.Exists(configxml_file)) RemotingConfiguration.Configure(configxml_file); + // + // listen + ChannelServices.RegisterChannel(RouteSearcherChannel, false); + }; + + RouteThreader.mem.config = scfg; + + string pass_to_log = "\r\n"; + pass_to_log += "dkxce.Route.ServiceSolver/" + System.Reflection.Assembly.GetExecutingAssembly().GetName().Version.ToString() + RouteHTTPListener._ServerTree + "\r\n"; + pass_to_log += RouteHTTPListener._Server + "\r\n"; + pass_to_log += "dkxce.Route.ServiceSolver.RouteThreader/" + System.Reflection.Assembly.GetAssembly(typeof(dkxce.Route.ServiceSolver.RouteThreader)).GetName().Version.ToString() + RouteHTTPListener._ServerTree + "\r\n"; + pass_to_log += "dkxce.Route.GSolver/" + System.Reflection.Assembly.GetAssembly(typeof(dkxce.Route.GSolver.RMGraph)).GetName().Version.ToString() + "\r\n"; + pass_to_log += RouteHTTPListener._ServerCustomHeaders; + pass_to_log += "\r\n"; + pass_to_log += "Configuration: " + this.ConfigFileInfo + "\r\n"; + pass_to_log += "\r\n"; + + string LogRecord = ""; + if (scfg.defArea == "multiple") + { + LogRecord += "Starting Service...\r\n"; + LogRecord += pass_to_log; + if (pTCP) + { + LogRecord += "Protocol: TCP" + (pHTTP ? ", HTTP" : "") + "\r\n"; + RouteThreader.mem.Protocol = "TCP" + (pHTTP ? ", HTTP" : ""); + }; + if (pRem) + { + LogRecord += "Protocol: Remoting\r\n"; + RouteThreader.mem.Protocol = "Remoting"; + }; + if (pHTTP && (!pTCP)) + { + LogRecord += "Protocol: HTTP\r\n"; + RouteThreader.mem.Protocol = "HTTP"; + }; + LogRecord += "Area: " + scfg.defArea + " [RussiaSolver]\r\n"; + LogRecord += "Mode: " + scfg.defMode + "\r\n"; + LogRecord += "Global Regions: " + (scfg.IsGlobalRegions.Length > 0 ? scfg.globalRegions : "none") + "\r\n"; + LogRecord += "Thread Regions: " + (scfg.IsThreadRegions.Length > 0 ? scfg.threadRegions : "none") + "\r\n"; + + RouteThreader.mem.Area = scfg.defArea + " [RussiaSolver]"; + RouteThreader.mem.Mode = scfg.defMode; + RouteThreader.mem.GlobalRegionsCache = (scfg.IsGlobalRegions.Length > 0 ? scfg.globalRegions : "none"); + RouteThreader.mem.ThreadRegionsCache = (scfg.IsThreadRegions.Length > 0 ? scfg.threadRegions : "none"); + + LogRecord += RussiaSolver.PreloadGlobalCache(scfg.IsGlobalRegions, scfg.MultiRegion) + "\r\n"; + RussiaSolver._threadGraphsIds = scfg.IsThreadRegions; + + if (scfg.IsSingle) + { + if (pTCP || pHTTP) + { + RouteThreader.IsDynamic = null; + RouteThreader.mem.DynamicPool = RouteThreader.IsDynamic != null; + RouteThreader.AddObject(new RussiaSolver(true)); + }; + if (pRem) + { + RemotingServices.Marshal(new RussiaSolver(true), "dkxce.Route.TCPSolver"); + //RemotingConfiguration.RegisterWellKnownServiceType(typeof(RouteThreader), "dkxce.Route.TCPSolver", WellKnownObjectMode.Singleton); + }; + }; + if (scfg.IsMultiThread) + { + LogRecord += "Max clients threads/objects count: " + clientConnectionLimit.ToString() + " (NoLP " + Environment.ProcessorCount.ToString() + ")\r\n"; + RouteThreader.mem.ThreadsMaxAlive = clientConnectionLimit; + if (pTCP || pHTTP) + { + RouteThreader.IsDynamic = typeof(RussiaSolver); + RouteThreader.mem.DynamicPool = RouteThreader.IsDynamic != null; + }; + if (pRem) + { + RemotingConfiguration.RegisterWellKnownServiceType(typeof(RussiaSolver), "dkxce.Route.TCPSolver", WellKnownObjectMode.SingleCall); + }; + }; + if (scfg.IsMultiClient) + { + LogRecord += "Clients objects count: " + scfg.mucObjects.ToString() + "\r\n"; + LogRecord += "Max clients threads count: " + clientConnectionLimit.ToString() + " (NoLP " + Environment.ProcessorCount.ToString() + ")\r\n"; + RouteThreader.mem.ThreadsMaxAlive = clientConnectionLimit; + RouteThreader.IsDynamic = null; + RouteThreader.mem.DynamicPool = RouteThreader.IsDynamic != null; + for (byte i = 0; i < scfg.mucObjects; i++) + RouteThreader.AddObject(new RussiaSolver(true)); + if (pRem) + { + RemotingConfiguration.RegisterWellKnownServiceType(typeof(RouteThreader), "dkxce.Route.TCPSolver", WellKnownObjectMode.SingleCall); + }; + }; + } + else + { + LogRecord += "Starting Service...\r\n"; + LogRecord += pass_to_log; + if (pTCP) + { + LogRecord += "Protocol: TCP" + (pHTTP ? ", HTTP" : "") + "\r\n"; + RouteThreader.mem.Protocol = "TCP" + (pHTTP ? ", HTTP" : ""); + }; + if (pRem) + { + LogRecord += "Protocol: Remoting\r\n"; + RouteThreader.mem.Protocol = "Remoting"; + }; + if (pHTTP && (!pTCP)) + { + LogRecord += "Protocol: HTTP\r\n"; + RouteThreader.mem.Protocol = "HTTP"; + }; + LogRecord += "Area: " + scfg.defArea + " [OneRegionSolver]\r\n"; + LogRecord += "Mode: " + scfg.defMode + "\r\n"; + LogRecord += "Use Graph: " + System.IO.Path.GetFileName(scfg.OneRegion.Trim()) + "\r\n"; + + RouteThreader.mem.Area = scfg.defArea + " [RussiaSolver]"; + RouteThreader.mem.Mode = scfg.defMode; + RouteThreader.mem.GlobalRegionsCache = "none"; + RouteThreader.mem.ThreadRegionsCache = System.IO.Path.GetFileName(scfg.OneRegion.Trim()); + + OneRegionSolver.GraphFile = scfg.OneRegion.Trim(); + + if (scfg.IsSingle) + { + if (pTCP || pHTTP) + { + RouteThreader.IsDynamic = null; + RouteThreader.mem.DynamicPool = RouteThreader.IsDynamic != null; + RouteThreader.AddObject(new OneRegionSolver(true)); + }; + if (pRem) + { + RemotingServices.Marshal(new OneRegionSolver(true), "dkxce.Route.TCPSolver"); + //RemotingConfiguration.RegisterWellKnownServiceType(typeof(RouteThreader), "dkxce.Route.TCPSolver", WellKnownObjectMode.Singleton); + }; + }; + if (scfg.IsMultiThread) + { + LogRecord += "Max clients threads/objects count: " + clientConnectionLimit.ToString() + " (NoLP " + Environment.ProcessorCount.ToString() + ")\r\n"; + RouteThreader.mem.ThreadsMaxAlive = clientConnectionLimit; + RouteThreader.IsDynamic = typeof(OneRegionSolver); + RouteThreader.mem.DynamicPool = RouteThreader.IsDynamic != null; + if (pRem) + { + RemotingConfiguration.RegisterWellKnownServiceType(typeof(OneRegionSolver), "dkxce.Route.TCPSolver", WellKnownObjectMode.SingleCall); + }; + }; + if (scfg.IsMultiClient) + { + LogRecord += "Clients objects count: " + scfg.mucObjects.ToString() + "\r\n"; + LogRecord += "Max clients threads count: " + clientConnectionLimit.ToString() + " (NoLP " + Environment.ProcessorCount.ToString() + ")\r\n"; + RouteThreader.mem.ThreadsMaxAlive = clientConnectionLimit; + RouteThreader.IsDynamic = null; + for (byte i = 0; i < scfg.mucObjects; i++) + RouteThreader.AddObject(new OneRegionSolver(true)); + if (pRem) + { + RemotingConfiguration.RegisterWellKnownServiceType(typeof(RouteThreader), "dkxce.Route.TCPSolver", WellKnownObjectMode.SingleCall); + }; + }; + }; + + if (pTCP) + { + tcpServer = new RouteTCPListenter(scfg.defPort, scfg.IsSingle ? 1 : clientConnectionLimit); + tcpServer.Start(); + }; + if (pHTTP) + { + httpServer = new RouteHTTPListener(scfg.defHTTP, scfg.IsSingle ? 1 : clientConnectionLimit); + httpServer.Start(); + LogRecord += "Listen at http://localhost:" + scfg.defHTTP.ToString() + "/\r\n"; + }; + + if (pTCP || pRem) + LogRecord += "Listen at " + string.Format("tcp://{0}:{1}/", "localhost", scfg.defPort.ToString()) + "\r\n"; + LogRecord += "Ready"; + + XMLSaved.Add2SysLog(StartupInfo = LogRecord); + } + public string StartupInfo = ""; + + protected override void OnStop() + { + if (pTCP) + { + tcpServer.Stop(); + }; + if (pHTTP) + { + httpServer.Stop(); + }; + if (pRem) + { + ChannelServices.UnregisterChannel(RouteSearcherChannel); + RouteSearcherChannel = null; + }; + } + + void UnhandledException(object sender, UnhandledExceptionEventArgs e) + { + throw new Exception("The method or operation is not implemented."); + } + + public override object InitializeLifetimeService() + { + return null; // to make the object live indefinitely + } + + public static void Install(bool undo, string[] args, string ServiceName) + { + try + { + Console.WriteLine(undo ? "Uninstalling service {0}..." : "Installing service {0}...", ServiceName); + using (AssemblyInstaller inst = new AssemblyInstaller(typeof(Program).Assembly, args)) + { + IDictionary state = new Hashtable(); + inst.UseNewContext = true; + try + { + if (undo) + inst.Uninstall(state); + else + { + inst.Install(state); + inst.Commit(state); + } + } + catch + { + try + { + inst.Rollback(state); + } + catch { } + throw; + } + } + } + catch (Exception ex) + { + Console.Error.WriteLine(ex.Message); + }; + } + } +} diff --git a/SOLVER/dkxce.Route.ServiceSolver/SOAPInterface.cs b/SOLVER/dkxce.Route.ServiceSolver/SOAPInterface.cs new file mode 100644 index 0000000..68918b3 --- /dev/null +++ b/SOLVER/dkxce.Route.ServiceSolver/SOAPInterface.cs @@ -0,0 +1,330 @@ +using System; +using System.IO; +using System.Collections.Generic; +using System.Text; +using System.Web; +using System.Web.Services; +using System.Web.Services.Description; +using System.Xml; +using System.Xml.Serialization; + +namespace dkxce.Route.ServiceSolver +{ + /// + /// Type Client Request Basic + /// + [XmlRoot("basicRequest")] + public class tcBasic + { + public string key; + + public tcBasic() { } + public tcBasic(string key) + { + this.key = key; + } + } + + /// + /// Type Server Response Basic + /// + [XmlRoot("BasicResponse")] + public class tsBasic + { + public string Error; + public int ErrCode; + } + + [XmlRoot("NamedPoint")] + [Serializable] + public class XYN + { + [XmlAttribute("x")] + public double x; + + [XmlAttribute("y")] + public double y; + + [XmlAttribute("n")] + public string n; + + public XYN() { } + + public XYN(double x, double y) + { + this.x = x; + this.y = y; + } + + public XYN(double x, double y, string n) + { + this.x = x; + this.y = y; + this.n = n; + } + } + + [XmlRoot("cRoute")] + [Serializable] + public class tcRoute : tcBasic + { + public string k = ""; + public string f = "0"; + public string p = "1"; + public string i = "0"; + public string v = "0"; + public string t = DateTime.Now.ToString("dd.MM.yyyy HH:mm"); + + [XmlElement("xy")] + public XYN[] xy = new XYN[0]; + + [XmlElement("n")] + public string[] n = new string[0]; + + public string minby = "time"; + public string o = "0"; + public string ct = "0"; + public string ht = "0"; + + public string md5 = ""; + + [XmlElement("exy")] + public XYN[] exy = null; + public string er = "50"; + public string ra = ""; + } + + [XmlRoot("WayPoint")] + [Serializable] + public class tsStop + { + [XmlAttribute("lat")] + public double lat; + [XmlAttribute("lon")] + public double lon; + [XmlText] + public string name; + + public static tsStop[] FromRR(dkxce.Route.ISolver.RStop[] stops) + { + if (stops == null) return null; + if (stops.Length == 0) return new tsStop[0]; + tsStop[] res = new tsStop[stops.Length]; + for (int i = 0; i < res.Length; i++) + res[i] = tsStop.FromRR(stops[i]); + return res; + } + + public static tsStop FromRR(dkxce.Route.ISolver.RStop stop) + { + if (stop == null) return null; + tsStop res = new tsStop(); + res.lat = stop.lat; + res.lon = stop.lon; + res.name = stop.name; + return res; + } + } + + [XmlRoot("Point")] + [Serializable] + public class tsXYPoint + { + [XmlAttribute("x")] + public double x; + [XmlAttribute("y")] + public double y; + [XmlAttribute("s")] + public double s; + + public static tsXYPoint[] FromRR(dkxce.Route.Classes.PointFL[] xyp) + { + if (xyp == null) return null; + if (xyp.Length == 0) return new tsXYPoint[0]; + tsXYPoint[] res = new tsXYPoint[xyp.Length]; + for (int i = 0; i < res.Length; i++) + res[i] = tsXYPoint.FromRR(xyp[i]); + return res; + } + + public static tsXYPoint FromRR(dkxce.Route.Classes.PointFL xy) + { + if (xy == null) return null; + tsXYPoint res = new tsXYPoint(); + res.x = xy.X; + res.y = xy.Y; + res.s = xy.speed; + return res; + } + } + + [XmlRoot("RoutePoint")] + [Serializable] + public class tsRoutePoint + { + public string iStreet; + public string iToDo; + public string iToGo; + [XmlAttribute("no")] + public int no; + [XmlAttribute("sLen")] + public double sLen; + [XmlAttribute("sTime")] + public double sTime; + [XmlAttribute("tLen")] + public double tLen; + [XmlAttribute("tTime")] + public DateTime tTime; + [XmlAttribute("x")] + public double x; + [XmlAttribute("y")] + public double y; + + public static tsRoutePoint[] FromRR(dkxce.Route.Classes.RDPoint[] rps, DateTime startTime) + { + if (rps == null) return null; + tsRoutePoint[] res = new tsRoutePoint[rps.Length]; + if (res.Length == 0) return res; + res = new tsRoutePoint[rps.Length]; + for (int i = 0; i < rps.Length; i++) + { + tsRoutePoint r = new tsRoutePoint(); + r.iStreet = rps[i].name; + if (rps[i].instructions.Length > 0) + r.iToDo = rps[i].instructions[0]; + if (rps[i].instructions.Length > 1) + r.iToGo = rps[i].instructions[1]; + r.no = i; + r.sLen = i == rps.Length - 1 ? 0 : (double)rps[i + 1].dist - (double)rps[i].dist; + r.sTime = i == rps.Length - 1 ? 0 : (double)rps[i + 1].time - (double)rps[i].time; + r.tLen = rps[i].dist; + r.tTime = startTime.AddMinutes(rps[i].time); + r.x = rps[i].Lon; + r.y = rps[i].Lat; + res[i] = r; + }; + return res; + } + } + + [XmlRoot("Route")] + [Serializable] + public class tsRoute : tsBasic + { + public double driveLength; + [XmlArrayItem("dls")] + public double[] driveLengthSegments; + public double driveTime; + [XmlArrayItem("dts")] + public double[] driveTimeSegments; + public DateTime finishTime; + [XmlArrayItem("i")] + public tsRoutePoint[] instructions; + [XmlArrayItem("is")] + public int[] instructionsSegments; + public string LastError; + [XmlArrayItem("p")] + public tsXYPoint[] polyline; + [XmlArrayItem("ps")] + public int[] polylineSegments; + public DateTime startTime; + [XmlArrayItem("stop")] + public tsStop[] stops; + + public static tsRoute FromRR(dkxce.Route.ISolver.RResult rt) + { + tsRoute res = new tsRoute(); + res.driveLength = rt.driveLength; + res.driveLengthSegments = rt.driveLengthSegments; + if (res.driveLengthSegments == null) res.driveLengthSegments = new double[0]; + res.driveTime = rt.driveTime; + res.driveTimeSegments = rt.driveTimeSegments; + if (res.driveLengthSegments == null) res.driveLengthSegments = new double[0]; + res.finishTime = rt.finishTime; + res.instructions = tsRoutePoint.FromRR(rt.description, rt.startTime); + if (res.instructions == null) res.instructions = new tsRoutePoint[0]; + res.instructionsSegments = rt.descriptionSegments; + if (res.instructionsSegments == null) res.instructionsSegments = new int[0]; + res.LastError = rt.LastError; + if (res.LastError == null) res.LastError = ""; + res.polyline = tsXYPoint.FromRR(rt.vector); + if (res.polyline == null) res.polyline = new tsXYPoint[0]; + res.polylineSegments = rt.vectorSegments; + if (res.polylineSegments == null) res.polylineSegments = new int[0]; + res.startTime = rt.startTime; + res.stops = tsStop.FromRR(rt.stops); + return res; + } + } + + [XmlRoot("cNearRoad")] + [Serializable] + public class tcNearRoad : tcBasic + { + public string k = ""; + public string f = "0"; + public string n = "0"; + + public string md5 = ""; + + [XmlElement("x")] + public double[] x; + [XmlElement("y")] + public double[] y; + } + + [XmlRoot("Road")] + [Serializable] + public class tsNearRoad + { + public string attributes; + public double distance; + public double lat; + public double lon; + public string name; + public int region; + + public static tsNearRoad FromRR(dkxce.Route.ISolver.RNearRoad road) + { + if (road == null) return null; + tsNearRoad res = new tsNearRoad(); + res.attributes = road.attributes; + res.distance = road.distance; + res.lat = road.lat; + res.lon = road.lon; + res.name = road.name; + res.region = road.region; + return res; + } + } + + [XmlRoot("Roads")] + public class tsNearRoads : tsBasic + { + [XmlElement("road")] + public tsNearRoad[] roads; + + public static tsNearRoads FromRR(dkxce.Route.ISolver.RNearRoad[] roads) + { + if (roads == null) return null; + tsNearRoads res = new tsNearRoads(); + res = new tsNearRoads(); + if (roads.Length == 0) return res; + res.roads = new tsNearRoad[roads.Length]; + for (int i = 0; i < res.roads.Length; i++) + res.roads[i] = tsNearRoad.FromRR(roads[i]); + return res; + } + } + + // !!!!! // USE NO NAMESPACE + [WebService(Name = "NMS ROUTE API", Description = "NMS Route Web API", Namespace = "")] + public abstract class SOAPWSDL + { + [WebMethod(Description = "Ìàðøðóòû\r\nÏîèñê ìàðøðóòà\r\n(f - âîñïðèíèìàåòñÿ òîëüêî 3 / k / kml / 4 / g / geojson) ")] + public abstract tsRoute Route(tcRoute request); + + [WebMethod(Description = "Ìàðøðóòû\r\nÏîèñê áëèæàéøåé äîðîãè\r\n(f - èãíîðèðóåòñÿ)")] + public abstract tsNearRoads NearRoad(tcNearRoad request); + } +} diff --git a/SOLVER/dkxce.Route.ServiceSolver/SOAPWSDL.cs b/SOLVER/dkxce.Route.ServiceSolver/SOAPWSDL.cs new file mode 100644 index 0000000..883fa48 --- /dev/null +++ b/SOLVER/dkxce.Route.ServiceSolver/SOAPWSDL.cs @@ -0,0 +1,62 @@ +using System; +using System.IO; +using System.Collections.Generic; +using System.Text; +using System.Web; +using System.Web.Services; +using System.Web.Services.Description; +using System.Xml; + +namespace dkxce.Route.ServiceSolver +{ + public class WSDL + { + public static string GenerateWSDL(Type type) + { + return GenerateWSDL(type, false); + } + + public static string GenerateWSDL(Type type, bool withXSLT) + { + string URL = "http://localhost/SOAP"; + + object[] attrs = type.GetCustomAttributes(false); + foreach (object attr in attrs) + if (attr is WebServiceAttribute) + { + WebServiceAttribute wsa = (WebServiceAttribute)attr; + if (!string.IsNullOrEmpty(wsa.Namespace)) URL = wsa.Namespace; + }; + + return GenerateWSDL(type, URL, withXSLT); + } + + public static string GenerateWSDL(Type type, string URL) + { + return GenerateWSDL(type, URL, false); + } + + public static string GenerateWSDL(Type type, string URL, bool withXSLT) + { + ServiceDescriptionReflector reflector = new ServiceDescriptionReflector(); + reflector.Reflect(type, URL); + + if (reflector.ServiceDescriptions.Count > 1) + throw new Exception("Multiple service descriptions not supported."); + + MemoryStream stream = new MemoryStream(); + System.Xml.XmlWriterSettings xws = new XmlWriterSettings(); + xws.OmitXmlDeclaration = true; + xws.Indent = true; + xws.Encoding = System.Text.Encoding.UTF8; + XmlWriter xmlWriter = XmlWriter.Create(stream, xws); + reflector.ServiceDescriptions[0].Write(xmlWriter); + + StreamReader textReader = new StreamReader(stream); + stream.Seek(0, SeekOrigin.Begin); + return "\r\n" + + (withXSLT ? "\r\n" : "") + + textReader.ReadToEnd(); + } + } +} diff --git a/SOLVER/dkxce.Route.ServiceSolver/SYSID.cs b/SOLVER/dkxce.Route.ServiceSolver/SYSID.cs new file mode 100644 index 0000000..c987c52 --- /dev/null +++ b/SOLVER/dkxce.Route.ServiceSolver/SYSID.cs @@ -0,0 +1,325 @@ +using System; +using System.Collections.Generic; +using System.Text; +using System.IO; + +using System.Management; +using System.Security.Cryptography; +using System.Security; + +namespace System +{ + internal static class SYSID + { + private static byte[] _salt = Encoding.ASCII.GetBytes("a25052017pxko7"); + + public static string _BIOSID + { + get + { + ManagementObjectSearcher mos = new ManagementObjectSearcher("SELECT * FROM Win32_BIOS"); + ManagementObjectCollection moc = mos.Get(); + string motherBoard = ""; + foreach (ManagementObject mo in moc) + motherBoard = (string)mo["SerialNumber"]; + return motherBoard; + } + } + + public static string _MotherBoardID + { + get + { + ManagementObjectSearcher mos = new ManagementObjectSearcher("SELECT * FROM Win32_BaseBoard"); + ManagementObjectCollection moc = mos.Get(); + string motherBoard = ""; + foreach (ManagementObject mo in moc) + motherBoard = (string)mo["SerialNumber"]; + return motherBoard; + } + } + + public static string _ProcessorID + { + get + { + ManagementObjectSearcher mos = new ManagementObjectSearcher("SELECT * FROM Win32_processor"); + ManagementObjectCollection moc = mos.Get(); + string motherBoard = ""; + foreach (ManagementObject mo in moc) + motherBoard = (string)mo["ProcessorID"]; + return motherBoard; + } + } + + public static string _DiskCID + { + get + { + ManagementObject dsk = new ManagementObject("win32_logicaldisk.deviceid=\"C:\""); + dsk.Get(); + return dsk["VolumeSerialNumber"].ToString(); + } + } + + public static string _CurrentDiskID + { + get + { + ManagementObject dsk = new ManagementObject("win32_logicaldisk.deviceid=\"" + AppDomain.CurrentDomain.BaseDirectory.Substring(0, 1) + ":\""); + dsk.Get(); + return dsk["VolumeSerialNumber"].ToString(); + } + } + + public static bool _IsVirtual + { + get + { + { + ManagementObjectSearcher mos = new ManagementObjectSearcher("SELECT * FROM Win32_processor"); + ManagementObjectCollection moc = mos.Get(); + string val = ""; + foreach (ManagementObject mo in moc) + val = (string)mo["Manufacturer"]; + if (val.Contains("VBoxVBoxVBox")) return true; + if (val.Contains("VMwareVMware")) return true; + if (val.Contains("prl hyperv")) return true; + }; + { + ManagementObjectSearcher mos = new ManagementObjectSearcher("SELECT * FROM Win32_BaseBoard"); + ManagementObjectCollection moc = mos.Get(); + string val = ""; + foreach (ManagementObject mo in moc) + val = (string)mo["Manufacturer"]; + if (val.Contains("Microsoft Corporation")) return true; + }; + { + ManagementObjectSearcher mos = new ManagementObjectSearcher("SELECT * FROM Win32_DiskDrive"); + ManagementObjectCollection moc = mos.Get(); + string val = ""; + foreach (ManagementObject mo in moc) + val = (string)mo["PNPDeviceID"]; + if (val.Contains("VBOX_HARDDISK")) return true; + if (val.Contains("VEN_VMWARE")) return true; + }; + return false; + } + } + + public static string GetSystemID(bool BIOS, bool MotherBoard, bool CPU, bool DiskC, bool CurrDisk) + { + string code = ""; + try + { + if (BIOS) code += "/" + _BIOSID; + } + catch { }; + try + { + if (MotherBoard) code += "/" + _MotherBoardID; + } + catch { }; + try + { + if (CPU) code += "/" + _ProcessorID; + } + catch { }; + try + { + if (DiskC) code += "/" + _DiskCID; + } + catch { }; + try + { + if (CurrDisk) code += "/" + _CurrentDiskID; + } + catch { }; + + int codeType = (BIOS ? 1 : 0) + (MotherBoard ? 2 : 0) + (CPU ? 4 : 0) + (DiskC ? 8 : 0) + (CurrDisk ? 0x10 : 0); + + //return codeType.ToString("X2") + "-" + + + return GetHash(code); + } + + private static string GetHash(string s) + { + MD5 sec = new MD5CryptoServiceProvider(); + ASCIIEncoding enc = new ASCIIEncoding(); + byte[] bt = enc.GetBytes(s); + return GetHexString(sec.ComputeHash(bt)); + } + + private static string GetHexString(byte[] bt) + { + string s = string.Empty; + for (int i = 0; i < bt.Length; i++) + { + byte b = bt[i]; + int n, n1, n2; + n = (int)b; + n1 = n & 15; + n2 = (n >> 4) & 15; + if (n2 > 9) + s += ((char)(n2 - 10 + (int)'A')).ToString(); + else + s += n2.ToString(); + if (n1 > 9) + s += ((char)(n1 - 10 + (int)'A')).ToString(); + else + s += n1.ToString(); + if ((i + 1) != bt.Length && (i + 1) % 2 == 0) s += "-"; + } + return s; + } + + public static string Encrypt(string plainText, string sharedSecret) + { + if (string.IsNullOrEmpty(plainText)) + throw new ArgumentNullException("plainText"); + if (string.IsNullOrEmpty(sharedSecret)) + throw new ArgumentNullException("sharedSecret"); + + string outStr = null; // Encrypted string to return + RijndaelManaged aesAlg = null; // RijndaelManaged object used to encrypt the data. + + try + { + // generate the key from the shared secret and the salt + Rfc2898DeriveBytes key = new Rfc2898DeriveBytes(sharedSecret, _salt); + + // Create a RijndaelManaged object + aesAlg = new RijndaelManaged(); + aesAlg.Key = key.GetBytes(aesAlg.KeySize / 8); + + // Create a decrytor to perform the stream transform. + ICryptoTransform encryptor = aesAlg.CreateEncryptor(aesAlg.Key, aesAlg.IV); + + // Create the streams used for encryption. + using (MemoryStream msEncrypt = new MemoryStream()) + { + // prepend the IV + msEncrypt.Write(BitConverter.GetBytes(aesAlg.IV.Length), 0, sizeof(int)); + msEncrypt.Write(aesAlg.IV, 0, aesAlg.IV.Length); + using (CryptoStream csEncrypt = new CryptoStream(msEncrypt, encryptor, CryptoStreamMode.Write)) + { + using (StreamWriter swEncrypt = new StreamWriter(csEncrypt)) + { + //Write all data to the stream. + swEncrypt.Write(plainText); + } + } + outStr = Convert.ToBase64String(msEncrypt.ToArray()); + } + } + finally + { + // Clear the RijndaelManaged object. + if (aesAlg != null) + aesAlg.Clear(); + } + + // Return the encrypted bytes from the memory stream. + return outStr; + } + + public static string Decrypt(string cipherText, string sharedSecret) + { + if (string.IsNullOrEmpty(cipherText)) + throw new ArgumentNullException("cipherText"); + if (string.IsNullOrEmpty(sharedSecret)) + throw new ArgumentNullException("sharedSecret"); + + // Declare the RijndaelManaged object + // used to decrypt the data. + RijndaelManaged aesAlg = null; + + // Declare the string used to hold + // the decrypted text. + string plaintext = null; + + try + { + // generate the key from the shared secret and the salt + Rfc2898DeriveBytes key = new Rfc2898DeriveBytes(sharedSecret, _salt); + + // Create the streams used for decryption. + byte[] bytes = Convert.FromBase64String(cipherText); + using (MemoryStream msDecrypt = new MemoryStream(bytes)) + { + // Create a RijndaelManaged object + // with the specified key and IV. + aesAlg = new RijndaelManaged(); + aesAlg.Key = key.GetBytes(aesAlg.KeySize / 8); + // Get the initialization vector from the encrypted stream + aesAlg.IV = ReadByteArray(msDecrypt); + // Create a decrytor to perform the stream transform. + ICryptoTransform decryptor = aesAlg.CreateDecryptor(aesAlg.Key, aesAlg.IV); + using (CryptoStream csDecrypt = new CryptoStream(msDecrypt, decryptor, CryptoStreamMode.Read)) + { + using (StreamReader srDecrypt = new StreamReader(csDecrypt)) + + // Read the decrypted bytes from the decrypting stream + // and place them in a string. + plaintext = srDecrypt.ReadToEnd(); + } + } + } + catch + { + plaintext = "DECRYPT_ERROR"; + } + finally + { + // Clear the RijndaelManaged object. + if (aesAlg != null) + aesAlg.Clear(); + } + + return plaintext; + } + + private static byte[] ReadByteArray(System.IO.Stream s) + { + byte[] rawLength = new byte[sizeof(int)]; + if (s.Read(rawLength, 0, rawLength.Length) != rawLength.Length) + { + throw new SystemException("Stream did not contain properly formatted byte array"); + } + + byte[] buffer = new byte[BitConverter.ToInt32(rawLength, 0)]; + if (s.Read(buffer, 0, buffer.Length) != buffer.Length) + { + throw new SystemException("Did not read byte array properly"); + } + + return buffer; + } + + //public static void SaveFileDate(string filename, string cryptData) + //{ + // cryptData += '\0'; + // byte[] toSave = System.Text.Encoding.ASCII.GetBytes(cryptData); + // FileStream fs = new FileStream(filename, FileMode.Create, FileAccess.Write); + // fs.Write(filedata, 0, filedata.Length); + // fs.Position = 0x0200; + // fs.Write(toSave, 0, toSave.Length); + // fs.Close(); + //} + + //public static string LoadFileDate(string filename) + //{ + // FileStream fs = new FileStream(filename, FileMode.Open, FileAccess.Read); + // byte[] rb = new byte[1024]; + // int rt = 0; + // int rc = 0; + // fs.Position = 0x0200; + // while ((rc = fs.ReadByte()) > 0) rb[rt++] = (byte)rc; + // fs.Close(); + // return System.Text.Encoding.ASCII.GetString(rb, 0, rt); + //} + + // internal static byte[] filedata = new byte[] { 77, 90, 144, 0, 3, 0, 0, 0, 4, 0, 0, 0, 255, 255, 0, 0, 184, 0, 0, 0, 0, 0, 0, 0, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 0, 0, 0, 14, 31, 186, 14, 0, 180, 9, 205, 33, 184, 1, 76, 205, 33, 84, 104, 105, 115, 32, 112, 114, 111, 103, 114, 97, 109, 32, 99, 97, 110, 110, 111, 116, 32, 98, 101, 32, 114, 117, 110, 32, 105, 110, 32, 68, 79, 83, 32, 109, 111, 100, 101, 46, 13, 13, 10, 36, 0, 0, 0, 0, 0, 0, 0, 80, 69, 0, 0, 76, 1, 3, 0, 124, 13, 39, 89, 0, 0, 0, 0, 0, 0, 0, 0, 224, 0, 2, 33, 11, 1, 8, 0, 0, 16, 0, 0, 0, 32, 0, 0, 0, 0, 0, 0, 110, 35, 0, 0, 0, 32, 0, 0, 0, 64, 0, 0, 0, 0, 64, 0, 0, 32, 0, 0, 0, 16, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 128, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 3, 0, 64, 133, 0, 0, 16, 0, 0, 16, 0, 0, 0, 0, 16, 0, 0, 16, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 20, 35, 0, 0, 87, 0, 0, 0, 0, 64, 0, 0, 160, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 96, 0, 0, 12, 0, 0, 0, 148, 34, 0, 0, 28, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 32, 0, 0, 72, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 46, 116, 101, 120, 116, 0, 0, 0, 116, 3, 0, 0, 0, 32, 0, 0, 0, 16, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 0, 0, 96, 46, 114, 115, 114, 99, 0, 0, 0, 160, 2, 0, 0, 0, 64, 0, 0, 0, 16, 0, 0, 0, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 0, 0, 64, 46, 114, 101, 108, 111, 99, 0, 0, 12, 0, 0, 0, 0, 96, 0, 0, 0, 16, 0, 0, 0, 48, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 0, 0, 66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 80, 35, 0, 0, 0, 0, 0, 0, 72, 0, 0, 0, 2, 0, 5, 0, 80, 32, 0, 0, 68, 2, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66, 83, 74, 66, 1, 0, 1, 0, 0, 0, 0, 0, 12, 0, 0, 0, 118, 50, 46, 48, 46, 53, 48, 55, 50, 55, 0, 0, 0, 0, 5, 0, 108, 0, 0, 0, 180, 0, 0, 0, 35, 126, 0, 0, 32, 1, 0, 0, 192, 0, 0, 0, 35, 83, 116, 114, 105, 110, 103, 115, 0, 0, 0, 0, 224, 1, 0, 0, 8, 0, 0, 0, 35, 85, 83, 0, 232, 1, 0, 0, 16, 0, 0, 0, 35, 71, 85, 73, 68, 0, 0, 0, 248, 1, 0, 0, 76, 0, 0, 0, 35, 66, 108, 111, 98, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 1, 7, 20, 0, 0, 9, 0, 0, 0, 0, 250, 1, 51, 0, 22, 0, 0, 1, 0, 0, 0, 4, 0, 0, 0, 1, 0, 0, 0, 3, 0, 0, 0, 3, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 10, 0, 1, 0, 0, 0, 0, 0, 6, 0, 49, 0, 30, 0, 7, 0, 69, 0, 0, 0, 6, 0, 122, 0, 90, 0, 6, 0, 154, 0, 90, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 1, 0, 9, 0, 84, 0, 10, 0, 25, 0, 84, 0, 16, 0, 33, 0, 84, 0, 21, 0, 46, 0, 11, 0, 25, 0, 46, 0, 19, 0, 34, 0, 46, 0, 27, 0, 43, 0, 4, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 184, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 21, 0, 0, 0, 0, 0, 0, 0, 0, 60, 77, 111, 100, 117, 108, 101, 62, 0, 98, 105, 111, 115, 105, 100, 46, 100, 108, 108, 0, 109, 115, 99, 111, 114, 108, 105, 98, 0, 83, 121, 115, 116, 101, 109, 46, 68, 105, 97, 103, 110, 111, 115, 116, 105, 99, 115, 0, 68, 101, 98, 117, 103, 103, 97, 98, 108, 101, 65, 116, 116, 114, 105, 98, 117, 116, 101, 0, 68, 101, 98, 117, 103, 103, 105, 110, 103, 77, 111, 100, 101, 115, 0, 46, 99, 116, 111, 114, 0, 83, 121, 115, 116, 101, 109, 46, 82, 117, 110, 116, 105, 109, 101, 46, 67, 111, 109, 112, 105, 108, 101, 114, 83, 101, 114, 118, 105, 99, 101, 115, 0, 67, 111, 109, 112, 105, 108, 97, 116, 105, 111, 110, 82, 101, 108, 97, 120, 97, 116, 105, 111, 110, 115, 65, 116, 116, 114, 105, 98, 117, 116, 101, 0, 82, 117, 110, 116, 105, 109, 101, 67, 111, 109, 112, 97, 116, 105, 98, 105, 108, 105, 116, 121, 65, 116, 116, 114, 105, 98, 117, 116, 101, 0, 98, 105, 111, 115, 105, 100, 0, 0, 0, 3, 32, 0, 0, 0, 0, 0, 223, 30, 56, 46, 119, 46, 132, 70, 148, 33, 45, 14, 215, 192, 200, 249, 0, 8, 183, 122, 92, 86, 25, 52, 224, 137, 5, 32, 1, 1, 17, 9, 4, 32, 1, 1, 8, 3, 32, 0, 1, 8, 1, 0, 7, 1, 0, 0, 0, 0, 8, 1, 0, 8, 0, 0, 0, 0, 0, 30, 1, 0, 1, 0, 84, 2, 22, 87, 114, 97, 112, 78, 111, 110, 69, 120, 99, 101, 112, 116, 105, 111, 110, 84, 104, 114, 111, 119, 115, 1, 0, 0, 0, 0, 0, 0, 124, 13, 39, 89, 0, 0, 0, 0, 2, 0, 0, 0, 97, 0, 0, 0, 176, 34, 0, 0, 176, 18, 0, 0, 82, 83, 68, 83, 179, 188, 25, 25, 52, 193, 211, 78, 185, 209, 210, 17, 217, 107, 18, 75, 2, 0, 0, 0, 67, 58, 92, 68, 111, 119, 110, 108, 111, 97, 100, 115, 92, 67, 68, 45, 82, 69, 67, 92, 84, 69, 83, 84, 92, 67, 111, 110, 115, 111, 108, 101, 65, 112, 112, 108, 105, 99, 97, 116, 105, 111, 110, 49, 92, 98, 105, 111, 115, 105, 100, 92, 111, 98, 106, 92, 68, 101, 98, 117, 103, 92, 98, 105, 111, 115, 105, 100, 46, 112, 100, 98, 0, 0, 0, 0, 60, 35, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 94, 35, 0, 0, 0, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 80, 35, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 95, 67, 111, 114, 68, 108, 108, 77, 97, 105, 110, 0, 109, 115, 99, 111, 114, 101, 101, 46, 100, 108, 108, 0, 0, 0, 0, 0, 255, 37, 0, 32, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 16, 0, 0, 0, 24, 0, 0, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 48, 0, 0, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 72, 0, 0, 0, 88, 64, 0, 0, 68, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 2, 52, 0, 0, 0, 86, 0, 83, 0, 95, 0, 86, 0, 69, 0, 82, 0, 83, 0, 73, 0, 79, 0, 78, 0, 95, 0, 73, 0, 78, 0, 70, 0, 79, 0, 0, 0, 0, 0, 189, 4, 239, 254, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 0, 0, 0, 1, 0, 86, 0, 97, 0, 114, 0, 70, 0, 105, 0, 108, 0, 101, 0, 73, 0, 110, 0, 102, 0, 111, 0, 0, 0, 0, 0, 36, 0, 4, 0, 0, 0, 84, 0, 114, 0, 97, 0, 110, 0, 115, 0, 108, 0, 97, 0, 116, 0, 105, 0, 111, 0, 110, 0, 0, 0, 0, 0, 0, 0, 176, 4, 164, 1, 0, 0, 1, 0, 83, 0, 116, 0, 114, 0, 105, 0, 110, 0, 103, 0, 70, 0, 105, 0, 108, 0, 101, 0, 73, 0, 110, 0, 102, 0, 111, 0, 0, 0, 128, 1, 0, 0, 1, 0, 48, 0, 48, 0, 48, 0, 48, 0, 48, 0, 52, 0, 98, 0, 48, 0, 0, 0, 44, 0, 2, 0, 1, 0, 70, 0, 105, 0, 108, 0, 101, 0, 68, 0, 101, 0, 115, 0, 99, 0, 114, 0, 105, 0, 112, 0, 116, 0, 105, 0, 111, 0, 110, 0, 0, 0, 0, 0, 32, 0, 0, 0, 48, 0, 8, 0, 1, 0, 70, 0, 105, 0, 108, 0, 101, 0, 86, 0, 101, 0, 114, 0, 115, 0, 105, 0, 111, 0, 110, 0, 0, 0, 0, 0, 48, 0, 46, 0, 48, 0, 46, 0, 48, 0, 46, 0, 48, 0, 0, 0, 56, 0, 11, 0, 1, 0, 73, 0, 110, 0, 116, 0, 101, 0, 114, 0, 110, 0, 97, 0, 108, 0, 78, 0, 97, 0, 109, 0, 101, 0, 0, 0, 98, 0, 105, 0, 111, 0, 115, 0, 105, 0, 100, 0, 46, 0, 100, 0, 108, 0, 108, 0, 0, 0, 0, 0, 40, 0, 2, 0, 1, 0, 76, 0, 101, 0, 103, 0, 97, 0, 108, 0, 67, 0, 111, 0, 112, 0, 121, 0, 114, 0, 105, 0, 103, 0, 104, 0, 116, 0, 0, 0, 32, 0, 0, 0, 64, 0, 11, 0, 1, 0, 79, 0, 114, 0, 105, 0, 103, 0, 105, 0, 110, 0, 97, 0, 108, 0, 70, 0, 105, 0, 108, 0, 101, 0, 110, 0, 97, 0, 109, 0, 101, 0, 0, 0, 98, 0, 105, 0, 111, 0, 115, 0, 105, 0, 100, 0, 46, 0, 100, 0, 108, 0, 108, 0, 0, 0, 0, 0, 52, 0, 8, 0, 1, 0, 80, 0, 114, 0, 111, 0, 100, 0, 117, 0, 99, 0, 116, 0, 86, 0, 101, 0, 114, 0, 115, 0, 105, 0, 111, 0, 110, 0, 0, 0, 48, 0, 46, 0, 48, 0, 46, 0, 48, 0, 46, 0, 48, 0, 0, 0, 56, 0, 8, 0, 1, 0, 65, 0, 115, 0, 115, 0, 101, 0, 109, 0, 98, 0, 108, 0, 121, 0, 32, 0, 86, 0, 101, 0, 114, 0, 115, 0, 105, 0, 111, 0, 110, 0, 0, 0, 48, 0, 46, 0, 48, 0, 46, 0, 48, 0, 46, 0, 48, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 0, 0, 12, 0, 0, 0, 112, 51, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }; + } +} diff --git a/SOLVER/dkxce.Route.ServiceSolver/XmlRpc/Logger.cs b/SOLVER/dkxce.Route.ServiceSolver/XmlRpc/Logger.cs new file mode 100644 index 0000000..cb4b157 --- /dev/null +++ b/SOLVER/dkxce.Route.ServiceSolver/XmlRpc/Logger.cs @@ -0,0 +1,46 @@ +namespace Nwc.XmlRpc +{ + using System; + + /// Define levels of logging. This duplicates + /// similar enumerations in System.Diagnostics.EventLogEntryType. The + /// duplication was merited because .NET Compact Framework lacked the EventLogEntryType enum. + public enum LogLevel + { + /// Information level, log entry for informational reasons only. + Information, + /// Warning level, indicates a possible problem. + Warning, + /// Error level, implies a significant problem. + Error + } + + /// + ///Logging singleton with swappable output delegate. + /// + /// + ///This singleton provides a centralized log. The actual WriteEntry calls are passed + ///off to a delegate however. Having a delegate do the actual logginh allows you to + ///implement different logging mechanism and have them take effect throughout the system. + /// + public class Logger + { + ///Delegate definition for logging. + ///The message String to log. + ///The LogLevel of your message. + public delegate void LoggerDelegate(String message, LogLevel level); + ///The LoggerDelegate that will recieve WriteEntry requests. + static public LoggerDelegate Delegate = null; + + /// + ///Method logging events are sent to. + /// + ///The message String to log. + ///The LogLevel of your message. + static public void WriteEntry(String message, LogLevel level) + { + if (Delegate != null) + Delegate(message, level); + } + } +} diff --git a/SOLVER/dkxce.Route.ServiceSolver/XmlRpc/SimpleHttpRequest.cs b/SOLVER/dkxce.Route.ServiceSolver/XmlRpc/SimpleHttpRequest.cs new file mode 100644 index 0000000..becf1f9 --- /dev/null +++ b/SOLVER/dkxce.Route.ServiceSolver/XmlRpc/SimpleHttpRequest.cs @@ -0,0 +1,204 @@ +namespace Nwc.XmlRpc +{ + using System; + using System.IO; + using System.Net.Sockets; + using System.Collections; + + ///Very basic HTTP request handler. + ///This class is designed to accept a TcpClient and treat it as an HTTP request. + /// It will do some basic header parsing and manage the input and output streams associated + /// with the request. + public class SimpleHttpRequest + { + private String _httpMethod = null; + private String _protocol; + private String _filePathFile = null; + private String _filePathDir = null; + private String __filePath; + private TcpClient _client; + private StreamReader _input; + private StreamWriter _output; + private Hashtable _headers; + + /// A constructor which accepts the TcpClient. + /// It creates the associated input and output streams, determines the request type, + /// and parses the remaining HTTP header. + /// The TcpClient associated with the HTTP connection. + public SimpleHttpRequest(TcpClient client) + { + _client = client; + _output = new StreamWriter(client.GetStream()); + _input = new StreamReader(client.GetStream()); + GetRequestMethod(); + GetRequestHeaders(); + } + + /// The output StreamWriter associated with the request. + public StreamWriter Output + { + get { return _output; } + } + + /// The input StreamReader associated with the request. + public StreamReader Input + { + get { return _input; } + } + + /// The TcpClient with the request. + public TcpClient Client + { + get { return _client; } + } + + private String _filePath + { + get { return __filePath; } + set + { + __filePath = value; + _filePathDir = null; + _filePathFile = null; + } + } + + /// The type of HTTP request (i.e. PUT, GET, etc.). + public String HttpMethod + { + get { return _httpMethod; } + } + + /// The level of the HTTP protocol. + public String Protocol + { + get { return _protocol; } + } + + /// The "path" which is part of any HTTP request. + public String FilePath + { + get { return _filePath; } + } + + /// The file portion of the "path" which is part of any HTTP request. + public String FilePathFile + { + get + { + if (_filePathFile != null) + return _filePathFile; + + int i = FilePath.LastIndexOf("/"); + + if (i == -1) + return ""; + + i++; + _filePathFile = FilePath.Substring(i, FilePath.Length - i); + return _filePathFile; + } + } + + /// The directory portion of the "path" which is part of any HTTP request. + public String FilePathDir + { + get + { + if (_filePathDir != null) + return _filePathDir; + + int i = FilePath.LastIndexOf("/"); + + if (i == -1) + return ""; + + i++; + _filePathDir = FilePath.Substring(0, i); + return _filePathDir; + } + } + + private void GetRequestMethod() + { + string req = _input.ReadLine(); + if (req == null) + throw new ApplicationException("Void request."); + + if (0 == String.Compare("GET ", req.Substring (0, 4), true)) + _httpMethod = "GET"; + else if (0 == String.Compare("POST ", req.Substring (0, 5), true)) + _httpMethod = "POST"; + else + throw new InvalidOperationException("Unrecognized method in query: " + req); + + req = req.TrimEnd (); + int idx = req.IndexOf(' ') + 1; + if (idx >= req.Length) + throw new ApplicationException ("What do you want?"); + + string page_protocol = req.Substring(idx); + int idx2 = page_protocol.IndexOf(' '); + if (idx2 == -1) + idx2 = page_protocol.Length; + + _filePath = page_protocol.Substring(0, idx2).Trim(); + _protocol = page_protocol.Substring(idx2).Trim(); + } + + private void GetRequestHeaders() + { + String line; + int idx; + + _headers = new Hashtable(); + + while ((line = _input.ReadLine ()) != "") + { + if (line == null) + { + break; + } + + idx = line.IndexOf (':'); + if (idx == -1 || idx == line.Length - 1) + { + Logger.WriteEntry("Malformed header line: " + line, LogLevel.Information); + continue; + } + + String key = line.Substring (0, idx); + String value = line.Substring (idx + 1); + + try + { + _headers.Add(key, value); + } + catch (Exception) + { + Logger.WriteEntry("Duplicate header key in line: " + line, LogLevel.Information); + } + } + } + + /// + /// Format the object contents into a useful string representation. + /// + ///String representation of the SimpleHttpRequest as the HttpMethod FilePath Protocol. + override public String ToString() + { + return HttpMethod + " " + FilePath + " " + Protocol; + } + + /// + /// Close the SimpleHttpRequest. This flushes and closes all associated io streams. + /// + public void Close() + { + _output.Flush(); + _output.Close(); + _input.Close(); + _client.Close(); + } + } +} diff --git a/SOLVER/dkxce.Route.ServiceSolver/XmlRpc/XmlRpcBoxcarRequest.cs b/SOLVER/dkxce.Route.ServiceSolver/XmlRpc/XmlRpcBoxcarRequest.cs new file mode 100644 index 0000000..740d19d --- /dev/null +++ b/SOLVER/dkxce.Route.ServiceSolver/XmlRpc/XmlRpcBoxcarRequest.cs @@ -0,0 +1,51 @@ +namespace Nwc.XmlRpc +{ + using System; + using System.Collections; + using System.IO; + using System.Xml; + using System.Net; + using System.Text; + using System.Reflection; + + /// Class that collects individual XmlRpcRequest objects and submits them as a boxcarred request. + /// A boxcared request is when a number of request are collected before being sent via XML-RPC, and then are sent via + /// a single HTTP connection. This results in a speed up from reduced connection time. The results are then retuned collectively + /// as well. + /// + /// + public class XmlRpcBoxcarRequest : XmlRpcRequest + { + /// ArrayList to collect the requests to boxcar. + public IList Requests = new ArrayList(); + + /// Basic constructor. + public XmlRpcBoxcarRequest() + { + } + + /// Returns the String "system.multiCall" which is the server method that handles boxcars. + public override String MethodName + { + get { return "system.multiCall"; } + } + + /// The ArrayList of boxcarred Requests as properly formed parameters. + public override IList Params + { + get { + _params.Clear(); + ArrayList reqArray = new ArrayList(); + foreach (XmlRpcRequest request in Requests) + { + Hashtable requestEntry = new Hashtable(); + requestEntry.Add(XmlRpcXmlTokens.METHOD_NAME, request.MethodName); + requestEntry.Add(XmlRpcXmlTokens.PARAMS, request.Params); + reqArray.Add(requestEntry); + } + _params.Add(reqArray); + return _params; + } + } + } +} diff --git a/SOLVER/dkxce.Route.ServiceSolver/XmlRpc/XmlRpcClientProxy.cs b/SOLVER/dkxce.Route.ServiceSolver/XmlRpc/XmlRpcClientProxy.cs new file mode 100644 index 0000000..e00d8c0 --- /dev/null +++ b/SOLVER/dkxce.Route.ServiceSolver/XmlRpc/XmlRpcClientProxy.cs @@ -0,0 +1,61 @@ +namespace Nwc.XmlRpc +{ + using System; + using System.Runtime.Remoting.Proxies; + using System.Runtime.Remoting.Messaging; + + /// This class provides support for creating local proxies of XML-RPC remote objects + /// + /// To create a local proxy you need to create a local C# interface and then, via createProxy + /// associate that interface with a remote object at a given URL. + /// +public class XmlRpcClientProxy : RealProxy +{ + private String _remoteObjectName; + private String _url; + private XmlRpcRequest _client = new XmlRpcRequest(); + + /// Factory method to create proxies. + /// + /// To create a local proxy you need to create a local C# interface with methods that mirror those of the server object. + /// Next, pass that interface into createProxy along with the object name and URL of the remote object and + /// cast the resulting object to the specifice interface. + /// + /// String The name of the remote object. + /// String The URL of the remote object. + /// Type The typeof() of a C# interface. + /// Object A proxy for your specified interface. Cast to appropriate type. + public static Object createProxy(String remoteObjectName, String url, Type anInterface) + { + return new XmlRpcClientProxy(remoteObjectName, url, anInterface).GetTransparentProxy(); + } + + private XmlRpcClientProxy(String remoteObjectName, String url, Type t) : base(t) + { + _remoteObjectName = remoteObjectName; + _url = url; + } + + /// The local method dispatcher - do not invoke. + override public IMessage Invoke(IMessage msg) + { + IMethodCallMessage methodMessage = (IMethodCallMessage)msg; + + _client.MethodName = _remoteObjectName + "." + methodMessage.MethodName; + _client.Params.Clear(); + foreach (Object o in methodMessage.Args) + _client.Params.Add(o); + + try + { + Object ret = _client.Invoke(_url); + return new ReturnMessage(ret,null,0, + methodMessage.LogicalCallContext, methodMessage); + } + catch (Exception e) + { + return new ReturnMessage(e, methodMessage); + } + } +} +} diff --git a/SOLVER/dkxce.Route.ServiceSolver/XmlRpc/XmlRpcDeserializer.cs b/SOLVER/dkxce.Route.ServiceSolver/XmlRpc/XmlRpcDeserializer.cs new file mode 100644 index 0000000..adf47ac --- /dev/null +++ b/SOLVER/dkxce.Route.ServiceSolver/XmlRpc/XmlRpcDeserializer.cs @@ -0,0 +1,195 @@ +namespace Nwc.XmlRpc +{ + using System; + using System.Collections; + using System.IO; + using System.Xml; + using System.Globalization; + + /// Parser context, we maintain contexts in a stack to avoiding recursion. + struct Context + { + public String Name; + public Object Container; + } + + /// Basic XML-RPC data deserializer. + /// Uses XmlTextReader to parse the XML data. This level of the class + /// only handles the tokens common to both Requests and Responses. This class is not useful in and of itself + /// but is designed to be subclassed. + public class XmlRpcDeserializer : XmlRpcXmlTokens + { + private static DateTimeFormatInfo _dateFormat = new DateTimeFormatInfo(); + + private Object _container; + private Stack _containerStack; + + /// Protected reference to last text. + protected String _text; + /// Protected reference to last deserialized value. + protected Object _value; + /// Protected reference to last name field. + protected String _name; + + + /// Basic constructor. + public XmlRpcDeserializer() + { + Reset(); + _dateFormat.FullDateTimePattern = ISO_DATETIME; + } + + /// Static method that parses XML data into a response using the Singleton. + /// StreamReader containing an XML-RPC response. + /// Object object resulting from the deserialization. + virtual public Object Deserialize(TextReader xmlData) + { + return null; + } + + /// Protected method to parse a node in an XML-RPC XML stream. + /// Method deals with elements common to all XML-RPC data, subclasses of + /// this object deal with request/response spefic elements. + /// XmlTextReader of the in progress parsing data stream. + protected void DeserializeNode(XmlTextReader reader) + { + switch (reader.NodeType) + { + case XmlNodeType.Element: + if (Logger.Delegate != null) + Logger.WriteEntry("START " + reader.Name, LogLevel.Information); + switch (reader.Name) + { + case VALUE: + _value = null; + _text = null; + break; + case STRUCT: + PushContext(); + _container = new Hashtable(); + break; + case ARRAY: + PushContext(); + _container = new ArrayList(); + break; + } + break; + case XmlNodeType.EndElement: + if (Logger.Delegate != null) + Logger.WriteEntry("END " + reader.Name, LogLevel.Information); + switch (reader.Name) + { + case BASE64: + _value = Convert.FromBase64String(_text); + break; + case BOOLEAN: + int val = Int16.Parse(_text); + if (val == 0) + _value = false; + else if (val == 1) + _value = true; + break; + case STRING: + _value = _text; + break; + case DOUBLE: + _value = Double.Parse(_text, System.Globalization.CultureInfo.InvariantCulture); + break; + case INT: + case ALT_INT: + _value = Int32.Parse(_text); + break; + case DATETIME: +#if __MONO__ + _value = DateParse(_text); +#else + _value = DateTime.ParseExact(_text, "F", _dateFormat); +#endif + break; + case NAME: + _name = _text; + break; + case VALUE: + if (_value == null) + _value = _text; // some kits don't use tag, they just do + + if ((_container != null) && (_container is IList)) // in an array? If so add value to it. + ((IList)_container).Add(_value); + break; + case MEMBER: + if ((_container != null) && (_container is IDictionary)) // in an struct? If so add value to it. + ((IDictionary)_container).Add(_name, _value); + break; + case ARRAY: + case STRUCT: + _value = _container; + PopContext(); + break; + } + break; + case XmlNodeType.Text: + if (Logger.Delegate != null) + Logger.WriteEntry("Text " + reader.Value, LogLevel.Information); + _text = reader.Value; + break; + default: + break; + } + } + + /// Static method that parses XML in a String into a + /// request using the Singleton. + /// String containing an XML-RPC request. + /// XmlRpcRequest object resulting from the parse. + public Object Deserialize(String xmlData) + { + StringReader sr = new StringReader(xmlData); + return Deserialize(sr); + } + + /// Pop a Context of the stack, an Array or Struct has closed. + private void PopContext() + { + Context c = (Context)_containerStack.Pop(); + _container = c.Container; + _name = c.Name; + } + + /// Push a Context on the stack, an Array or Struct has opened. + private void PushContext() + { + Context context; + + context.Container = _container; + context.Name = _name; + + _containerStack.Push(context); + } + + /// Reset the internal state of the deserializer. + protected void Reset() + { + _text = null; + _value = null; + _name = null; + _container = null; + _containerStack = new Stack(); + } + +#if __MONO__ + private DateTime DateParse(String str) + { + int year = Int32.Parse(str.Substring(0,4)); + int month = Int32.Parse(str.Substring(4,2)); + int day = Int32.Parse(str.Substring(6,2)); + int hour = Int32.Parse(str.Substring(9,2)); + int min = Int32.Parse(str.Substring(12,2)); + int sec = Int32.Parse(str.Substring(15,2)); + return new DateTime(year,month,day,hour,min,sec); + } +#endif + + } +} + + diff --git a/SOLVER/dkxce.Route.ServiceSolver/XmlRpc/XmlRpcErrorCodes.cs b/SOLVER/dkxce.Route.ServiceSolver/XmlRpc/XmlRpcErrorCodes.cs new file mode 100644 index 0000000..6a3af9b --- /dev/null +++ b/SOLVER/dkxce.Route.ServiceSolver/XmlRpc/XmlRpcErrorCodes.cs @@ -0,0 +1,53 @@ +namespace Nwc.XmlRpc +{ + using System; + + /// Standard XML-RPC error codes. + public class XmlRpcErrorCodes + { + /// + public const int PARSE_ERROR_MALFORMED = -32700; + /// + public const String PARSE_ERROR_MALFORMED_MSG = "Parse Error, not well formed"; + + /// + public const int PARSE_ERROR_ENCODING = -32701; + /// + public const String PARSE_ERROR_ENCODING_MSG = "Parse Error, unsupported encoding"; + + /** + -32702 ---> parse error. invalid character for encoding + -32600 ---> server error. invalid xml-rpc. not conforming to spec. + **/ + + /// + public const int SERVER_ERROR_METHOD = -32601; + /// + public const String SERVER_ERROR_METHOD_MSG = "Server Error, requested method not found"; + + /// + public const int SERVER_ERROR_PARAMS = -32602; + /// + public const String SERVER_ERROR_PARAMS_MSG = "Server Error, invalid method parameters"; + + /** + -32603 ---> server error. internal xml-rpc error + **/ + + /// + public const int APPLICATION_ERROR = -32500; + /// + public const String APPLICATION_ERROR_MSG = "Application Error"; + + /** + -32400 ---> system error + **/ + + /// + public const int TRANSPORT_ERROR = -32300; + /// + public const String TRANSPORT_ERROR_MSG = "Transport Layer Error"; + } +} + + diff --git a/SOLVER/dkxce.Route.ServiceSolver/XmlRpc/XmlRpcException.cs b/SOLVER/dkxce.Route.ServiceSolver/XmlRpc/XmlRpcException.cs new file mode 100644 index 0000000..333cfc0 --- /dev/null +++ b/SOLVER/dkxce.Route.ServiceSolver/XmlRpc/XmlRpcException.cs @@ -0,0 +1,38 @@ +namespace Nwc.XmlRpc +{ + using System; + + /// An XML-RPC Exception. + /// Maps a C# exception to an XML-RPC fault. Normal exceptions + /// include a message so this adds the code needed by XML-RPC. + public class XmlRpcException : Exception + { + private int _code; + + /// Instantiate an XmlRpcException with a code and message. + /// Int faultCode associated with this exception. + /// String faultMessage associated with this exception. + public XmlRpcException(int code, String message) : base(message) + { + _code = code; + } + + /// The value of the faults message, i.e. the faultString. + public String FaultString + { + get { return Message; } + } + + /// The value of the faults code, i.e. the faultCode. + public int FaultCode + { + get { return _code; } + } + + /// Format the message to include the code. + override public String ToString() + { + return "Code: " + FaultCode + " Message: " + base.ToString(); + } + } +} diff --git a/SOLVER/dkxce.Route.ServiceSolver/XmlRpc/XmlRpcExposedAttribute.cs b/SOLVER/dkxce.Route.ServiceSolver/XmlRpc/XmlRpcExposedAttribute.cs new file mode 100644 index 0000000..89344b3 --- /dev/null +++ b/SOLVER/dkxce.Route.ServiceSolver/XmlRpc/XmlRpcExposedAttribute.cs @@ -0,0 +1,60 @@ +namespace Nwc.XmlRpc +{ + using System; + using System.Reflection; + + /// + /// Simple tagging attribute to indicate participation is XML-RPC exposure. + /// + /// + /// If present at the class level it indicates that this class does explicitly + /// expose methods. If present at the method level it denotes that the method + /// is exposed. + /// + [AttributeUsage( + AttributeTargets.Class | AttributeTargets.Method, + AllowMultiple=false, + Inherited=true + )] + public class XmlRpcExposedAttribute : Attribute + { + /// Check if obj is an object utilizing the XML-RPC exposed Attribute. + /// Object of a class or method to check for attribute. + /// Boolean true if attribute present. + public static Boolean ExposedObject(Object obj) + { + return IsExposed(obj.GetType()); + } + + /// Check if obj.methodName is an XML-RPC exposed method. + /// A method is considered to be exposed if it exists and, either, the object does not use the XmlRpcExposed attribute, + /// or the object does use the XmlRpcExposed attribute and the method has the XmlRpcExposed attribute as well. + /// Boolean true if the method is exposed. + public static Boolean ExposedMethod(Object obj, String methodName) + { + Type type = obj.GetType(); + MethodInfo method = type.GetMethod(methodName); + + if (method == null) + throw new MissingMethodException("Method " + methodName + " not found."); + + if (!IsExposed(type)) + return true; + + return IsExposed(method); + } + + /// Check if mi is XML-RPC exposed. + /// MemberInfo of a class or method to check for attribute. + /// Boolean true if attribute present. + public static Boolean IsExposed(MemberInfo mi) + { + foreach (Attribute attr in mi.GetCustomAttributes(true)) + { + if (attr is XmlRpcExposedAttribute) + return true; + } + return false; + } + } +} diff --git a/SOLVER/dkxce.Route.ServiceSolver/XmlRpc/XmlRpcRequest.cs b/SOLVER/dkxce.Route.ServiceSolver/XmlRpc/XmlRpcRequest.cs new file mode 100644 index 0000000..9c2d681 --- /dev/null +++ b/SOLVER/dkxce.Route.ServiceSolver/XmlRpc/XmlRpcRequest.cs @@ -0,0 +1,126 @@ +namespace Nwc.XmlRpc +{ + using System; + using System.Collections; + using System.IO; + using System.Xml; + using System.Net; + using System.Text; + using System.Reflection; + + /// Class supporting the request side of an XML-RPC transaction. + public class XmlRpcRequest + { + private String _methodName = null; + private Encoding _encoding = new ASCIIEncoding(); + private XmlRpcRequestSerializer _serializer = new XmlRpcRequestSerializer(); + private XmlRpcResponseDeserializer _deserializer = new XmlRpcResponseDeserializer(); + + /// ArrayList containing the parameters. + protected IList _params = null; + + /// Instantiate an XmlRpcRequest + public XmlRpcRequest() + { + _params = new ArrayList(); + } + + /// Instantiate an XmlRpcRequest for a specified method and parameters. + /// String designating the object.method on the server the request + /// should be directed to. + /// ArrayList of XML-RPC type parameters to invoke the request with. + public XmlRpcRequest(String methodName, IList parameters) + { + MethodName = methodName; + _params = parameters; + } + + /// ArrayList conntaining the parameters for the request. + public virtual IList Params + { + get { return _params; } + } + + /// String conntaining the method name, both object and method, that the request will be sent to. + public virtual String MethodName + { + get { return _methodName; } + set { _methodName = value; } + } + + /// String object name portion of the method name. + public String MethodNameObject + { + get { + int index = MethodName.IndexOf("."); + + if (index == -1) + return MethodName; + + return MethodName.Substring(0,index); + } + } + + /// String method name portion of the object.method name. + public String MethodNameMethod + { + get { + int index = MethodName.IndexOf("."); + + if (index == -1) + return MethodName; + + return MethodName.Substring(index + 1, MethodName.Length - index - 1); + } + } + + /// Invoke this request on the server. + /// String The url of the XML-RPC server. + /// Object The value returned from the method invocation on the server. + /// If an exception generated on the server side. + public Object Invoke(String url) + { + XmlRpcResponse res = Send(url); + + if (res.IsFault) + throw new XmlRpcException(res.FaultCode, res.FaultString); + + return res.Value; + } + + /// Send the request to the server. + /// String The url of the XML-RPC server. + /// XmlRpcResponse The response generated. + public XmlRpcResponse Send(String url) + { + HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url); + if (request == null) + throw new XmlRpcException(XmlRpcErrorCodes.TRANSPORT_ERROR, + XmlRpcErrorCodes.TRANSPORT_ERROR_MSG +": Could not create request with " + url); + request.Method = "POST"; + request.ContentType = "text/xml"; + request.AllowWriteStreamBuffering = true; + + Stream stream = request.GetRequestStream(); + XmlTextWriter xml = new XmlTextWriter(stream, _encoding); + _serializer.Serialize(xml, this); + xml.Flush(); + xml.Close(); + + HttpWebResponse response = (HttpWebResponse)request.GetResponse(); + StreamReader input = new StreamReader(response.GetResponseStream()); + + XmlRpcResponse resp = (XmlRpcResponse)_deserializer.Deserialize(input); + input.Close(); + response.Close(); + return resp; + } + + /// Produce String representation of the object. + /// String representation of the object. + override public String ToString() + { + return _serializer.Serialize(this); + } + } +} diff --git a/SOLVER/dkxce.Route.ServiceSolver/XmlRpc/XmlRpcRequestDeserializer.cs b/SOLVER/dkxce.Route.ServiceSolver/XmlRpc/XmlRpcRequestDeserializer.cs new file mode 100644 index 0000000..75e3e17 --- /dev/null +++ b/SOLVER/dkxce.Route.ServiceSolver/XmlRpc/XmlRpcRequestDeserializer.cs @@ -0,0 +1,64 @@ +namespace Nwc.XmlRpc +{ + using System; + using System.Collections; + using System.Diagnostics; + using System.IO; + using System.Xml; + + /// Class to deserialize XML data representing a request. + public class XmlRpcRequestDeserializer : XmlRpcDeserializer + { + static private XmlRpcRequestDeserializer _singleton; + /// A static singleton instance of this deserializer. + [Obsolete("This object is now thread safe, just use an instance.",false)] + static public XmlRpcRequestDeserializer Singleton + { + get + { + if (_singleton == null) + _singleton = new XmlRpcRequestDeserializer(); + + return _singleton; + } + } + + /// Static method that parses XML data into a request using the Singleton. + /// StreamReader containing an XML-RPC request. + /// XmlRpcRequest object resulting from the parse. + override public Object Deserialize(TextReader xmlData) + { + XmlTextReader reader = new XmlTextReader(xmlData); + XmlRpcRequest request = new XmlRpcRequest(); + bool done = false; + + lock(this) + { + Reset(); + while (!done && reader.Read()) + { + DeserializeNode(reader); // Parent parse... + switch (reader.NodeType) + { + case XmlNodeType.EndElement: + switch (reader.Name) + { + case METHOD_NAME: + request.MethodName = _text; + break; + case METHOD_CALL: + done = true; + break; + case PARAM: + request.Params.Add(_value); + _text = null; + break; + } + break; + } + } + } + return request; + } + } +} diff --git a/SOLVER/dkxce.Route.ServiceSolver/XmlRpc/XmlRpcRequestSerializer.cs b/SOLVER/dkxce.Route.ServiceSolver/XmlRpc/XmlRpcRequestSerializer.cs new file mode 100644 index 0000000..37b75d6 --- /dev/null +++ b/SOLVER/dkxce.Route.ServiceSolver/XmlRpc/XmlRpcRequestSerializer.cs @@ -0,0 +1,51 @@ +namespace Nwc.XmlRpc +{ + using System; + using System.Collections; + using System.Xml; + using System.IO; + + /// Class responsible for serializing an XML-RPC request. + /// This class handles the request envelope, depending on XmlRpcSerializer + /// to serialize the payload. + /// + public class XmlRpcRequestSerializer : XmlRpcSerializer + { + static private XmlRpcRequestSerializer _singleton; + /// A static singleton instance of this deserializer. + static public XmlRpcRequestSerializer Singleton + { + get + { + if (_singleton == null) + _singleton = new XmlRpcRequestSerializer(); + + return _singleton; + } + } + + /// Serialize the XmlRpcRequest to the output stream. + /// An XmlTextWriter stream to write data to. + /// An XmlRpcRequest to serialize. + /// + override public void Serialize(XmlTextWriter output, Object obj) + { + XmlRpcRequest request = (XmlRpcRequest)obj; + output.WriteStartDocument(); + output.WriteStartElement(METHOD_CALL); + output.WriteElementString(METHOD_NAME,request.MethodName); + output.WriteStartElement(PARAMS); + foreach (Object param in request.Params) + { + output.WriteStartElement(PARAM); + output.WriteStartElement(VALUE); + SerializeObject(output, param); + output.WriteEndElement(); + output.WriteEndElement(); + } + + output.WriteEndElement(); + output.WriteEndElement(); + } + } +} diff --git a/SOLVER/dkxce.Route.ServiceSolver/XmlRpc/XmlRpcResponder.cs b/SOLVER/dkxce.Route.ServiceSolver/XmlRpc/XmlRpcResponder.cs new file mode 100644 index 0000000..f03bf7c --- /dev/null +++ b/SOLVER/dkxce.Route.ServiceSolver/XmlRpc/XmlRpcResponder.cs @@ -0,0 +1,98 @@ +namespace Nwc.XmlRpc +{ + using System; + using System.Xml; + using System.Net.Sockets; + + /// The class is a container of the context of an XML-RPC dialog on the server side. + /// Instances of this class maintain the context for an individual XML-RPC server + /// side dialog. Namely they manage an inbound deserializer and an outbound serializer. + public class XmlRpcResponder + { + private XmlRpcRequestDeserializer _deserializer = new XmlRpcRequestDeserializer(); + private XmlRpcResponseSerializer _serializer = new XmlRpcResponseSerializer(); + private XmlRpcServer _server; + private TcpClient _client; + private SimpleHttpRequest _httpReq; + + /// The SimpleHttpRequest based on the TcpClient. + public SimpleHttpRequest HttpReq + { + get { return _httpReq; } + } + + /// Basic constructor. + /// XmlRpcServer that this XmlRpcResponder services. + /// TcpClient with the connection. + public XmlRpcResponder(XmlRpcServer server, TcpClient client) + { + _server = server; + _client = client; + _httpReq = new SimpleHttpRequest(_client); + } + + /// Call close to insure proper shutdown. + ~XmlRpcResponder() + { + Close(); + } + + ///Respond using this responders HttpReq. + public void Respond() + { + Respond(HttpReq); + } + + /// Handle an HTTP request containing an XML-RPC request. + /// This method deserializes the XML-RPC request, invokes the + /// described method, serializes the response (or fault) and sends the XML-RPC response + /// back as a valid HTTP page. + /// + /// SimpleHttpRequest containing the request. + public void Respond(SimpleHttpRequest httpReq) + { + XmlRpcRequest xmlRpcReq = (XmlRpcRequest)_deserializer.Deserialize(httpReq.Input); + XmlRpcResponse xmlRpcResp = new XmlRpcResponse(); + + try + { + xmlRpcResp.Value = _server.Invoke(xmlRpcReq); + } + catch (XmlRpcException e) + { + xmlRpcResp.SetFault(e.FaultCode, e.FaultString); + } + catch (Exception e2) + { + xmlRpcResp.SetFault(XmlRpcErrorCodes.APPLICATION_ERROR, + XmlRpcErrorCodes.APPLICATION_ERROR_MSG + ": " + e2.Message); + } + + if (Logger.Delegate != null) + Logger.WriteEntry(xmlRpcResp.ToString(), LogLevel.Information); + + XmlRpcServer.HttpHeader(httpReq.Protocol, "text/xml", 0, " 200 OK", httpReq.Output); + httpReq.Output.Flush(); + XmlTextWriter xml = new XmlTextWriter(httpReq.Output); + _serializer.Serialize(xml, xmlRpcResp); + xml.Flush(); + httpReq.Output.Flush(); + } + + ///Close all contained resources, both the HttpReq and client. + public void Close() + { + if (_httpReq != null) + { + _httpReq.Close(); + _httpReq = null; + } + + if (_client != null) + { + _client.Close(); + _client = null; + } + } + } +} diff --git a/SOLVER/dkxce.Route.ServiceSolver/XmlRpc/XmlRpcResponse.cs b/SOLVER/dkxce.Route.ServiceSolver/XmlRpc/XmlRpcResponse.cs new file mode 100644 index 0000000..882347c --- /dev/null +++ b/SOLVER/dkxce.Route.ServiceSolver/XmlRpc/XmlRpcResponse.cs @@ -0,0 +1,81 @@ +namespace Nwc.XmlRpc +{ + using System; + using System.Collections; + using System.IO; + using System.Xml; + + /// Class designed to represent an XML-RPC response. + public class XmlRpcResponse + { + private Object _value; + /// bool indicating if this response represents a fault. + public bool IsFault; + + /// Basic constructor + public XmlRpcResponse() + { + Value = null; + IsFault = false; + } + + /// Constructor for a fault. + /// int the numeric faultCode value. + /// String the faultString value. + public XmlRpcResponse(int code, String message) : this() + { + SetFault(code,message); + } + + /// The data value of the response, may be fault data. + public Object Value + { + get { return _value; } + set { + IsFault = false; + _value = value; + } + } + + /// The faultCode if this is a fault. + public int FaultCode + { + get { + if (!IsFault) + return 0; + else + return (int)((Hashtable)_value)[XmlRpcXmlTokens.FAULT_CODE]; + } + } + + /// The faultString if this is a fault. + public String FaultString + { + get { + if (!IsFault) + return ""; + else + return (String)((Hashtable)_value)[XmlRpcXmlTokens.FAULT_STRING]; + } + } + + /// Set this response to be a fault. + /// int the numeric faultCode value. + /// String the faultString value. + public void SetFault(int code, String message) + { + Hashtable fault = new Hashtable(); + fault.Add("faultCode", code); + fault.Add("faultString", message); + Value = fault; + IsFault = true; + } + + /// Form a useful string representation of the object, in this case the XML response. + /// String The XML serialized XML-RPC response. + override public String ToString() + { + return XmlRpcResponseSerializer.Singleton.Serialize(this); + } + } +} diff --git a/SOLVER/dkxce.Route.ServiceSolver/XmlRpc/XmlRpcResponseDeserializer.cs b/SOLVER/dkxce.Route.ServiceSolver/XmlRpc/XmlRpcResponseDeserializer.cs new file mode 100644 index 0000000..c7cc61c --- /dev/null +++ b/SOLVER/dkxce.Route.ServiceSolver/XmlRpc/XmlRpcResponseDeserializer.cs @@ -0,0 +1,65 @@ +namespace Nwc.XmlRpc +{ + using System; + using System.Collections; + using System.IO; + using System.Xml; + + /// Class to deserialize XML data representing a response. + public class XmlRpcResponseDeserializer : XmlRpcDeserializer + { + static private XmlRpcResponseDeserializer _singleton; + /// A static singleton instance of this deserializer. + [Obsolete("This object is now thread safe, just use an instance.",false)] + static public XmlRpcResponseDeserializer Singleton + { + get + { + if (_singleton == null) + _singleton = new XmlRpcResponseDeserializer(); + + return _singleton; + } + } + + /// Static method that parses XML data into a response using the Singleton. + /// StreamReader containing an XML-RPC response. + /// XmlRpcResponse object resulting from the parse. + override public Object Deserialize(TextReader xmlData) + { + XmlTextReader reader = new XmlTextReader(xmlData); + XmlRpcResponse response = new XmlRpcResponse(); + bool done = false; + + lock(this) + { + Reset(); + + while (!done && reader.Read()) + { + DeserializeNode(reader); // Parent parse... + switch (reader.NodeType) + { + case XmlNodeType.EndElement: + switch (reader.Name) + { + case FAULT: + response.Value = _value; + response.IsFault = true; + break; + case PARAM: + response.Value = _value; + _value = null; + _text = null; + break; + } + break; + default: + break; + } + } + } + return response; + } + } +} diff --git a/SOLVER/dkxce.Route.ServiceSolver/XmlRpc/XmlRpcResponseSerializer.cs b/SOLVER/dkxce.Route.ServiceSolver/XmlRpc/XmlRpcResponseSerializer.cs new file mode 100644 index 0000000..b49b1ff --- /dev/null +++ b/SOLVER/dkxce.Route.ServiceSolver/XmlRpc/XmlRpcResponseSerializer.cs @@ -0,0 +1,57 @@ +namespace Nwc.XmlRpc +{ + using System; + using System.Collections; + using System.Xml; + + /// Class responsible for serializing an XML-RPC response. + /// This class handles the response envelope, depending on XmlRpcSerializer + /// to serialize the payload. + /// + public class XmlRpcResponseSerializer : XmlRpcSerializer + { + static private XmlRpcResponseSerializer _singleton; + /// A static singleton instance of this deserializer. + static public XmlRpcResponseSerializer Singleton + { + get + { + if (_singleton == null) + _singleton = new XmlRpcResponseSerializer(); + + return _singleton; + } + } + + /// Serialize the XmlRpcResponse to the output stream. + /// An XmlTextWriter stream to write data to. + /// An Object to serialize. + /// + override public void Serialize(XmlTextWriter output, Object obj) + { + XmlRpcResponse response = (XmlRpcResponse) obj; + + output.WriteStartDocument(); + output.WriteStartElement(METHOD_RESPONSE); + + if (response.IsFault) + output.WriteStartElement(FAULT); + else + { + output.WriteStartElement(PARAMS); + output.WriteStartElement(PARAM); + } + + output.WriteStartElement(VALUE); + + SerializeObject(output,response.Value); + + output.WriteEndElement(); + + output.WriteEndElement(); + if (!response.IsFault) + output.WriteEndElement(); + output.WriteEndElement(); + } + } +} diff --git a/SOLVER/dkxce.Route.ServiceSolver/XmlRpc/XmlRpcSerializer.cs b/SOLVER/dkxce.Route.ServiceSolver/XmlRpc/XmlRpcSerializer.cs new file mode 100644 index 0000000..7dd7f60 --- /dev/null +++ b/SOLVER/dkxce.Route.ServiceSolver/XmlRpc/XmlRpcSerializer.cs @@ -0,0 +1,126 @@ +namespace Nwc.XmlRpc +{ + using System; + using System.Collections; + using System.IO; + using System.Xml; + + public sealed class StringWriterWithEncoding : StringWriter + { + private readonly System.Text.Encoding encoding; + + public StringWriterWithEncoding(System.Text.Encoding encoding) + { + this.encoding = encoding; + } + + public override System.Text.Encoding Encoding + { + get { return encoding; } + } + } + + /// Base class of classes serializing data to XML-RPC's XML format. + /// This class handles the basic type conversions like Integer to <i4>. + /// + public class XmlRpcSerializer : XmlRpcXmlTokens + { + + /// Serialize the XmlRpcRequest to the output stream. + /// An XmlTextWriter stream to write data to. + /// An Object to serialize. + /// + virtual public void Serialize(XmlTextWriter output, Object obj) + { + } + + + + /// Serialize the XmlRpcRequest to a String. + /// Note this may represent a real memory hog for a large request. + /// An Object to serialize. + /// String containing XML-RPC representation of the request. + /// + public String Serialize(Object obj) + { + StringWriter strBuf = new StringWriterWithEncoding(System.Text.Encoding.UTF8); + XmlTextWriter xml = new XmlTextWriter(strBuf); + xml.Formatting = Formatting.Indented; + xml.Indentation = 4; + Serialize(xml, obj); + xml.Flush(); + String returns = strBuf.ToString(); + xml.Close(); + return returns; + } + + /// Serialize the object to the output stream. + /// An XmlTextWriter stream to write data to. + /// An Object to serialize. + public void SerializeObject(XmlTextWriter output, Object obj) + { + if (obj == null) + return; + + if (obj is byte[]) + { + byte[] ba = (byte[])obj; + output.WriteStartElement(BASE64); + output.WriteBase64(ba,0,ba.Length); + output.WriteEndElement(); + } + else if (obj is String) + { + output.WriteElementString(STRING,obj.ToString()); + } + else if (obj is Int32) + { + output.WriteElementString(INT,obj.ToString()); + } + else if (obj is DateTime) + { + output.WriteElementString(DATETIME,((DateTime)obj).ToString(ISO_DATETIME)); + } + else if (obj is Double) + { + output.WriteElementString(DOUBLE,((double)obj).ToString(System.Globalization.CultureInfo.InvariantCulture)); + } + else if (obj is Boolean) + { + output.WriteElementString(BOOLEAN, ((((Boolean)obj) == true)?"1":"0")); + } + else if (obj is IList) + { + output.WriteStartElement(ARRAY); + output.WriteStartElement(DATA); + if (((ArrayList)obj).Count > 0) + { + foreach (Object member in ((IList)obj)) + { + output.WriteStartElement(VALUE); + SerializeObject(output,member); + output.WriteEndElement(); + } + } + output.WriteEndElement(); + output.WriteEndElement(); + } + else if (obj is IDictionary) + { + IDictionary h = (IDictionary)obj; + output.WriteStartElement(STRUCT); + foreach (String key in h.Keys) + { + output.WriteStartElement(MEMBER); + output.WriteElementString(NAME,key); + output.WriteStartElement(VALUE); + SerializeObject(output,h[key]); + output.WriteEndElement(); + output.WriteEndElement(); + } + output.WriteEndElement(); + } + + } + } +} diff --git a/SOLVER/dkxce.Route.ServiceSolver/XmlRpc/XmlRpcServer.cs b/SOLVER/dkxce.Route.ServiceSolver/XmlRpc/XmlRpcServer.cs new file mode 100644 index 0000000..a932d7b --- /dev/null +++ b/SOLVER/dkxce.Route.ServiceSolver/XmlRpc/XmlRpcServer.cs @@ -0,0 +1,236 @@ +namespace Nwc.XmlRpc +{ + using System; + using System.Collections; + using System.IO; + using System.Net; + using System.Net.Sockets; + using System.Text; + using System.Threading; + using System.Xml; + + /// A restricted HTTP server for use with XML-RPC. + /// It only handles POST requests, and only POSTs representing XML-RPC calls. + /// In addition to dispatching requests it also provides a registry for request handlers. + /// +public class XmlRpcServer : IEnumerable + { + const int RESPONDER_COUNT = 10; + private TcpListener _myListener; + private int _port; + private IPAddress _address; + private IDictionary _handlers; + private XmlRpcSystemObject _system; + private WaitCallback _wc; + + ///Constructor with port and address. + ///This constructor sets up a TcpListener listening on the + ///given port and address. It also calls a Thread on the method StartListen(). + ///IPAddress value of the address to listen on. + ///Int value of the port to listen on. + public XmlRpcServer(IPAddress address, int port) + { + _port = port; + _address = address; + _handlers = new Hashtable(); + _system = new XmlRpcSystemObject(this); + _wc = new WaitCallback(WaitCallback); + } + + ///Basic constructor. + ///This constructor sets up a TcpListener listening on the + ///given port. It also calls a Thread on the method StartListen(). IPAddress.Any + ///is assumed as the address here. + ///Int value of the port to listen on. + public XmlRpcServer(int port) : this(IPAddress.Any, port) {} + + /// Start the server. + public void Start() + { + try + { + Stop(); + //start listing on the given port + // IPAddress addr = IPAddress.Parse("127.0.0.1"); + lock (this) + { + _myListener = new TcpListener(_port); + _myListener.Start(); + //start the thread which calls the method 'StartListen' + Thread th = new Thread(new ThreadStart(StartListen)); + th.Start(); + } + } + catch(Exception e) + { + Logger.WriteEntry("An Exception Occurred while Listening :" +e.ToString(), LogLevel.Error); + } + } + + /// Stop the server. + public void Stop() + { + try + { + if (_myListener != null) + { + lock (this) + { + _myListener.Stop(); + _myListener = null; + } + } + } catch(Exception e) + { + Logger.WriteEntry("An Exception Occurred while stopping :" + + e.ToString(), LogLevel.Error); + } + } + + /// Get an enumeration of my XML-RPC handlers. + /// IEnumerable the handler enumeration. + public IEnumerator GetEnumerator() + { + return _handlers.GetEnumerator(); + } + + /// Retrieve a handler by name. + /// String naming a handler + /// Object that is the handler. + public Object this [String name] + { + get { return _handlers[name]; } + } + + /// + ///This method Accepts new connections and dispatches them when appropriate. + /// + public void StartListen() + { + while(true && _myListener != null) + { + //Accept a new connection + XmlRpcResponder responder = new XmlRpcResponder(this, _myListener.AcceptTcpClient()); + ThreadPool.QueueUserWorkItem(_wc,responder); + } + } + + + /// + ///Add an XML-RPC handler object by name. + /// + ///String XML-RPC dispatch name of this object. + ///Object The object that is the XML-RPC handler. + public void Add(String name, Object obj) + { + _handlers.Add(name,obj); + } + + ///Return a C# object.method name for and XML-RPC object.method name pair. + ///The XML-RPC object.method. + ///String of form object.method for the underlying C# method. + public String MethodName(String methodName) + { + int dotAt = methodName.LastIndexOf('.'); + + if (dotAt == -1) + { + throw new XmlRpcException(XmlRpcErrorCodes.SERVER_ERROR_METHOD, + XmlRpcErrorCodes.SERVER_ERROR_METHOD_MSG + ": Bad method name " + methodName); + } + + String objectName = methodName.Substring(0,dotAt); + Object target = _handlers[objectName]; + + if (target == null) + { + throw new XmlRpcException(XmlRpcErrorCodes.SERVER_ERROR_METHOD, + XmlRpcErrorCodes.SERVER_ERROR_METHOD_MSG + ": Object " + objectName + " not found"); + } + + return target.GetType().FullName + "." + methodName.Substring(dotAt + 1); + } + + ///Invoke a method described in a request. + ///XmlRpcRequest containing a method descriptions. + /// + /// + public Object Invoke(XmlRpcRequest req) + { + return Invoke(req.MethodNameObject, req.MethodNameMethod, req.Params); + } + + ///Invoke a method on a named handler. + ///String The name of the handler. + ///String The name of the method to invoke on the handler. + ///IList The parameters to invoke the method with. + /// + public Object Invoke(String objectName, String methodName, IList parameters) + { + Object target = _handlers[objectName]; + + if (target == null) + { + throw new XmlRpcException(XmlRpcErrorCodes.SERVER_ERROR_METHOD, + XmlRpcErrorCodes.SERVER_ERROR_METHOD_MSG + ": Object " + objectName + " not found"); + } + + return XmlRpcSystemObject.Invoke(target, methodName, parameters); + } + + /// The method the thread pool invokes when a thread is available to handle an HTTP request. + /// TcpClient from the socket accept. + public void WaitCallback(object responder) + { + XmlRpcResponder resp = (XmlRpcResponder)responder; + + if (resp.HttpReq.HttpMethod == "POST") + { + try + { + resp.Respond(); + } + catch (Exception e) + { + Logger.WriteEntry("Failed on post: " + e, LogLevel.Error); + } + } + else + { + Logger.WriteEntry("Only POST methods are supported: " + resp.HttpReq.HttpMethod + + " ignored", LogLevel.Error); + } + + resp.Close(); + } + + /// + /// This function send the Header Information to the client (Browser) + /// + /// HTTP Version + /// Mime Type + /// Total Bytes to be sent in the body + /// + /// Socket reference + static public void HttpHeader(string sHttpVersion, string sMIMEHeader, long iTotBytes, string sStatusCode, TextWriter output) + { + String sBuffer = ""; + + // if Mime type is not provided set default to text/html + if (sMIMEHeader.Length == 0 ) + { + sMIMEHeader = "text/html"; // Default Mime Type is text/html + } + + sBuffer += sHttpVersion + sStatusCode + "\r\n"; + sBuffer += "Connection: close\r\n"; + if (iTotBytes > 0) + sBuffer += "Content-Length: " + iTotBytes + "\r\n"; + sBuffer += "Server: XmlRpcServer \r\n"; + sBuffer += "Content-Type: " + sMIMEHeader + "\r\n"; + sBuffer += "\r\n"; + + output.Write(sBuffer); + } + } +} diff --git a/SOLVER/dkxce.Route.ServiceSolver/XmlRpc/XmlRpcSystemObject.cs b/SOLVER/dkxce.Route.ServiceSolver/XmlRpc/XmlRpcSystemObject.cs new file mode 100644 index 0000000..47725d6 --- /dev/null +++ b/SOLVER/dkxce.Route.ServiceSolver/XmlRpc/XmlRpcSystemObject.cs @@ -0,0 +1,251 @@ +namespace Nwc.XmlRpc +{ + using System; + using System.Collections; + using System.Reflection; + + /// XML-RPC System object implementation of extended specifications. + [XmlRpcExposed] + public class XmlRpcSystemObject + { + private XmlRpcServer _server; + static private IDictionary _methodHelp = new Hashtable(); + + /// Static IDictionary to hold mappings of method name to associated documentation String + static public IDictionary MethodHelp { + get { return _methodHelp; } + } + + /// Constructor. + /// XmlRpcServer server to be the system object for. + public XmlRpcSystemObject(XmlRpcServer server) + { + _server = server; + server.Add("system",this); + _methodHelp.Add(this.GetType().FullName + ".methodHelp", "Return a string description."); + } + + /// Invoke a method on a given object. + /// Using reflection, and respecting the XmlRpcExposed attribute, + /// invoke the methodName method on the target + /// instance with the parameters provided. All this packages other Invoke methods + /// end up calling this. + /// Object the value the invoked method returns. + /// If method does not exist, is not exposed, parameters invalid, or invocation + /// results in an exception. Note, the XmlRpcException.Code will indicate cause. + static public Object Invoke(Object target, String methodName, IList parameters) + { + if (target == null) + throw new XmlRpcException(XmlRpcErrorCodes.SERVER_ERROR_METHOD, + XmlRpcErrorCodes.SERVER_ERROR_METHOD_MSG + ": Invalid target object."); + + Type type = target.GetType(); + MethodInfo method = type.GetMethod(methodName); + + try + { + if (!XmlRpcExposedAttribute.ExposedMethod(target,methodName)) + throw new XmlRpcException(XmlRpcErrorCodes.SERVER_ERROR_METHOD, + XmlRpcErrorCodes.SERVER_ERROR_METHOD_MSG + ": Method " + methodName + " is not exposed."); + } + catch (MissingMethodException me) + { + throw new XmlRpcException(XmlRpcErrorCodes.SERVER_ERROR_METHOD, + XmlRpcErrorCodes.SERVER_ERROR_METHOD_MSG + ": " + me.Message); + } + + Object[] args = new Object[parameters.Count]; + + int index = 0; + foreach (Object arg in parameters) + { + args[index] = arg; + index++; + } + + try + { + Object retValue = method.Invoke(target, args); + if (retValue == null) + throw new XmlRpcException(XmlRpcErrorCodes.APPLICATION_ERROR, + XmlRpcErrorCodes.APPLICATION_ERROR_MSG + ": Method returned NULL."); + return retValue; + } + catch (XmlRpcException e) + { + throw e; + } + catch (ArgumentException ae) + { + Logger.WriteEntry(XmlRpcErrorCodes.SERVER_ERROR_PARAMS_MSG + ": " + ae.Message, + LogLevel.Information); + String call = methodName + "( "; + foreach (Object o in args) + { + call += o.GetType().Name; + call += " "; + } + call += ")"; + throw new XmlRpcException(XmlRpcErrorCodes.SERVER_ERROR_PARAMS, + XmlRpcErrorCodes.SERVER_ERROR_PARAMS_MSG + ": Arguement type mismatch invoking " + call); + } + catch (TargetParameterCountException tpce) + { + Logger.WriteEntry(XmlRpcErrorCodes.SERVER_ERROR_PARAMS_MSG + ": " + tpce.Message, + LogLevel.Information); + throw new XmlRpcException(XmlRpcErrorCodes.SERVER_ERROR_PARAMS, + XmlRpcErrorCodes.SERVER_ERROR_PARAMS_MSG + ": Arguement count mismatch invoking " + methodName); + } + catch (TargetInvocationException tie) + { + throw new XmlRpcException(XmlRpcErrorCodes.APPLICATION_ERROR, + XmlRpcErrorCodes.APPLICATION_ERROR_MSG + " Invoked method " + methodName + ": " + tie.Message); + } + } + + /// List methods available on all handlers of this server. + /// IList An array of Strings, each String will have form "object.method". + [XmlRpcExposed] + public IList listMethods() + { + IList methods = new ArrayList(); + Boolean considerExposure; + + foreach (DictionaryEntry handlerEntry in _server) + { + considerExposure = XmlRpcExposedAttribute.IsExposed(handlerEntry.Value.GetType()); + + foreach (MemberInfo mi in handlerEntry.Value.GetType().GetMembers()) + { + if (mi.MemberType != MemberTypes.Method) + continue; + + if(!((MethodInfo)mi).IsPublic) + continue; + + if (considerExposure && !XmlRpcExposedAttribute.IsExposed(mi)) + continue; + + methods.Add(handlerEntry.Key + "." + mi.Name); + } + } + + return methods; + } + + /// Given a method name return the possible signatures for it. + /// String The object.method name to look up. + /// IList Of arrays of signatures. + [XmlRpcExposed] + public IList methodSignature(String name) + { + IList signatures = new ArrayList(); + int index = name.IndexOf('.'); + + if (index < 0) + return signatures; + + String oName = name.Substring(0,index); + Object obj = _server[oName]; + + if (obj == null) + return signatures; + + MemberInfo[] mi = obj.GetType().GetMember(name.Substring(index + 1)); + + if (mi == null || mi.Length != 1) // for now we want a single signature + return signatures; + + MethodInfo method; + + try + { + method = (MethodInfo)mi[0]; + } + catch (Exception e) + { + Logger.WriteEntry("Attempted methodSignature call on " + mi[0] + " caused: " + e, + LogLevel.Information); + return signatures; + } + + if (!method.IsPublic) + return signatures; + + IList signature = new ArrayList(); + signature.Add(method.ReturnType.Name); + + foreach (ParameterInfo param in method.GetParameters()) + { + signature.Add(param.ParameterType.Name); + } + + + signatures.Add(signature); + + return signatures; + } + + /// Help for given method signature. Not implemented yet. + /// String The object.method name to look up. + /// String help text. Rich HTML text. + [XmlRpcExposed] + public String methodHelp(String name) + { + String help = null; + + try + { + help = (String)_methodHelp[_server.MethodName(name)]; + } + catch (XmlRpcException e) + { + throw e; + } + catch (Exception) { /* ignored */ }; + + if (help == null) + help = "No help available for: " + name; + + return help; + } + + /// Boxcarring support method. + /// IList of calls + /// ArrayList of results/faults. + [XmlRpcExposed] + public IList multiCall(IList calls) + { + IList responses = new ArrayList(); + XmlRpcResponse fault = new XmlRpcResponse(); + + foreach (IDictionary call in calls) + { + try + { + XmlRpcRequest req = new XmlRpcRequest((String)call[XmlRpcXmlTokens.METHOD_NAME], + (ArrayList)call[XmlRpcXmlTokens.PARAMS]); + Object results = _server.Invoke(req); + IList response = new ArrayList(); + response.Add(results); + responses.Add(response); + } + catch (XmlRpcException e) + { + fault.SetFault(e.FaultCode, e.FaultString); + responses.Add(fault.Value); + } + catch (Exception e2) + { + fault.SetFault(XmlRpcErrorCodes.APPLICATION_ERROR, + XmlRpcErrorCodes.APPLICATION_ERROR_MSG + ": " + e2.Message); + responses.Add(fault.Value); + } + } + + return responses; + } + + } +} + diff --git a/SOLVER/dkxce.Route.ServiceSolver/XmlRpc/XmlRpcXmlTokens.cs b/SOLVER/dkxce.Route.ServiceSolver/XmlRpc/XmlRpcXmlTokens.cs new file mode 100644 index 0000000..05ea0eb --- /dev/null +++ b/SOLVER/dkxce.Route.ServiceSolver/XmlRpc/XmlRpcXmlTokens.cs @@ -0,0 +1,76 @@ +namespace Nwc.XmlRpc +{ + using System; + + /// Class collecting String tokens that are part of XML-RPC files. + public class XmlRpcXmlTokens + { + /// C# formatting string to describe an ISO 8601 date. + public const String ISO_DATETIME = "yyyyMMdd\\THH\\:mm\\:ss"; + /// Base64 field indicator. + /// Corresponds to the <base64> tag. + public const String BASE64 = "base64"; + /// String field indicator. + /// Corresponds to the <string> tag. + public const String STRING = "string"; + /// Integer field integer. + /// Corresponds to the <i4> tag. + public const String INT = "i4"; + /// Alternate integer field indicator. + /// Corresponds to the <int> tag. + public const String ALT_INT = "int"; + /// Date field indicator. + /// Corresponds to the <dateTime.iso8601> tag. + public const String DATETIME = "dateTime.iso8601"; + /// Boolean field indicator. + /// Corresponds to the <boolean> tag. + public const String BOOLEAN = "boolean"; + /// Value token. + /// Corresponds to the <value> tag. + public const String VALUE = "value"; + /// Name token. + /// Corresponds to the <name> tag. + public const String NAME = "name"; + /// Array field indicator.. + /// Corresponds to the <array> tag. + public const String ARRAY = "array"; + /// Data token. + /// Corresponds to the <data> tag. + public const String DATA = "data"; + /// Member token. + /// Corresponds to the <member> tag. + public const String MEMBER = "member"; + /// Stuct field indicator. + /// Corresponds to the <struct> tag. + public const String STRUCT = "struct"; + /// Double field indicator. + /// Corresponds to the <double> tag. + public const String DOUBLE = "double"; + /// Param token. + /// Corresponds to the <param> tag. + public const String PARAM = "param"; + /// Params token. + /// Corresponds to the <params> tag. + public const String PARAMS = "params"; + /// MethodCall token. + /// Corresponds to the <methodCall> tag. + public const String METHOD_CALL = "methodCall"; + /// MethodName token. + /// Corresponds to the <methodName> tag. + public const String METHOD_NAME = "methodName"; + /// MethodResponse token + /// Corresponds to the <methodResponse> tag. + public const String METHOD_RESPONSE = "methodResponse"; + /// Fault response token. + /// Corresponds to the <fault> tag. + public const String FAULT = "fault"; + /// FaultCode token. + /// Corresponds to the <faultCode> tag. + public const String FAULT_CODE = "faultCode"; + /// FaultString token. + /// Corresponds to the <faultString> tag. + public const String FAULT_STRING = "faultString"; + } +} + + diff --git a/SOLVER/dkxce.Route.ServiceSolver/dkxce.Route.ServiceSolver.OneRegion.cs b/SOLVER/dkxce.Route.ServiceSolver/dkxce.Route.ServiceSolver.OneRegion.cs new file mode 100644 index 0000000..fbdc090 --- /dev/null +++ b/SOLVER/dkxce.Route.ServiceSolver/dkxce.Route.ServiceSolver.OneRegion.cs @@ -0,0 +1,510 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Diagnostics; +using System.ServiceProcess; +using System.Text; +using System.IO; + +using System.Xml; +using System.Xml.Serialization; +using System.Configuration.Install; + +using System.Threading; +using System.Runtime.Remoting; +using System.Runtime.Remoting.Channels; +using System.Runtime.Remoting.Channels.Tcp; +using System.Runtime.Serialization.Formatters; + +using dkxce.Route.Classes; +using dkxce.Route.GSolver; +using dkxce.Route.ISolver; +using dkxce.Route.WayList; + +namespace dkxce.Route.ServiceSolver +{ + public class OneRegionSolver : MarshalByRefObject, IRoute + { + // Multithread vars + private bool keepAlive = false; + + public static string GraphFile = null; + + private RMGraph gr; + private RouteDescription rd; + + public OneRegionSolver() + { + Init(); + } + + public OneRegionSolver(bool keepAlive) + { + this.keepAlive = keepAlive; + Init(); + } + + public ulong GraphSize + { + get + { + return gr.GraphSize; + } + } + + private void Init() + { + if ((GraphFile == null) || (GraphFile == "")) + { + XMLSaved.AddErr2SysLog("[OneRegionSolver] You must set fileName to `GraphFile` value or call OneRegionSolver(fileName)"); + throw new Exception("You must set fileName to `GraphFile` value or call OneRegionSolver(fileName)"); + }; + if (!File.Exists(GraphFile)) GraphFile = System.IO.Path.GetFullPath(XMLSaved.GetCurrentDir() + @"\" + GraphFile); + if (!File.Exists(GraphFile)) + { + XMLSaved.AddErr2SysLog("[OneRegionSolver] Route file " + GraphFile + " not found!"); + throw new Exception("Route file " + GraphFile + " not found!"); + }; + + gr = RMGraph.LoadToMemory(GraphFile, 0); + rd = new RouteDescription(gr); + } + + public RNearRoad[] GetNearRoadPrivate(double[] lat, double[] lon, bool getNames) + { + if ((lat == null) || (lon == null) || (lat.Length == 0) || (lon.Length == 0) || (lat.Length != lon.Length)) + { + return new RNearRoad[] { new RNearRoad(0, 0, 0, "Error: 011 Íåâåðíî óêàçàíû òî÷êè") }; + }; + if (lat.Length > 1000) + { + return new RNearRoad[] { new RNearRoad(0, 0, 0, "Error: 015 Âû ïåðâûñèëè ìàêñèìàëüíî äîïóñòèìîå ÷èñëî òî÷åê - 1000") }; + }; + + RNearRoad[] res = new RNearRoad[lat.Length]; + uint[] lines = new uint[lat.Length]; + if (res.Length > 0) + { + for (int i = 0; i < res.Length; i++) + { + res[i] = new RNearRoad(0, 0, 0, "", "", gr.RegionID); + //float[][] NRS = gr.FindNearestLines((float)lat[i], (float)lon[i], (float)2000); + uint line; + PointF ll = gr.PointToNearestLine((float)lat[i], (float)lon[i], (float)2000, out res[i].distance, out line); + if ((line == 0) || (line == uint.MaxValue)) + { + res[i].distance = double.MaxValue; + continue; + }; + res[i].lat = ll.Y; + res[i].lon = ll.X; + res[i].attributes = ""; + TLineFlags lf = gr.GetLineFlags(line); + if (lf.HasAttributes) + res[i].attributes = gr.AttributesToString(gr.GetLinesAttributes(new uint[] { line })[0]); + if (lf.IsOneWay) + res[i].attributes += (res[i].attributes.Length > 0 ? " 1w" : "1w"); + float d, t; + if (gr.GetLineLT(line, out d, out t)) + { + double speed = d / t / 1000.0 * 60; + res[i].attributes += (res[i].attributes.Length > 0 ? " avg" : "avg") + + speed.ToString("0."); + }; + res[i].region = gr.RegionID; + lines[i] = line; + }; + if (getNames) + { + string[] names = rd.GetRoadName(lines); + for (int i = 0; i < res.Length; i++) + res[i].name = names[i]; + }; + }; + return res; + } + + /// + /// Ôëàãè: + /// 0x01 - ïîëó÷àòü ïîëèëèíèþ + /// 0x02 - ïîëó÷àòü îïèñàíèå + /// 0x04 - èñïîëüçîâàòü òåêóùèé òðàôèê + /// 0x08 - èñïîëüçîâàòü èñòîðè÷åñêèé òðàôèê + /// 0x10 - îïòèìèçèðîâàòü ïðîìåæóòî÷íûå òî÷êè ìàðøðóòà (ðåîðãàíèçàöèÿ) + /// 0x20 - îïòèìèçèðîâàòü ïî ðàññòîÿíèþ + /// 0x40 - äîïóñêàòü âûåçä íà äîðîãó è ñúåçä ÷åðåç âñòðå÷íóþ ïîëîñó + /// + /// + /// + /// + /// + private RResult GetRoutePrivate(RStop[] stops, DateTime startTime, long flags, int[] RegionsAvailableToUser, + PointF[] roadsExcept, double roadsExceptRadiusInMeters, byte[] roadsOnly) + { + bool getPolyline = (flags & 0x01) > 0; + bool getDirections = (flags & 0x02) > 0; + bool getCurrentTraffic = (flags & 0x04) > 0; + bool getHistoryTraffic = (flags & 0x08) > 0; + bool optimiseTSP = (flags & 0x10) > 0; + bool optimizeByDist = (flags & 0x20) > 0; + bool allowLeftTurns = (flags & 0x40) > 0; + + if (optimiseTSP) + TSP.OptimizeWayRoute(stops); + + if ((roadsOnly != null) && (roadsOnly.Length == 16)) + { + int c = 0; + for (int i = 0; i < roadsOnly.Length; i++) c += roadsOnly[i]; + if (c == 0) roadsOnly = null; + } + else roadsOnly = null; + + gr.TrafficUseCurrent = getCurrentTraffic; + gr.TrafficUseHistory = getHistoryTraffic; + + RResult res = new RResult(stops); + if ((stops == null) || (stops.Length < 2)) + { + res.LastError = "011 Íåîáõîäèìî ìèíèìóì 2 òî÷êè"; + return res; + }; + if (stops.Length > 100) + { + res.LastError = "015 Âû ïåðâûñèëè ìàêñèìàëüíî äîïóñòèìîå ÷èñëî òî÷åê - 100"; + return res; + }; + + res.driveLengthSegments = new double[stops.Length]; + res.driveTimeSegments = new double[stops.Length]; + + res.startTime = startTime; + res.finishTime = startTime; + List vector = new List(); + List description = new List(); + + for (int i = 1; i < stops.Length; i++) + { + gr.TrafficStartTime = res.finishTime; + + FindStartStopResult start = gr.FindNodeStart((float)stops[i - 1].lat, (float)stops[i - 1].lon, 2000); + FindStartStopResult end = gr.FindNodeEnd((float)stops[i].lat, (float)stops[i].lon, 2000); + + if (start.nodeN == 0) + { + res.LastError = "014 Íå íàéäåíû äîðîãè âáëèçè òî÷êè `" + stops[i - 1].name + "`"; + return res; + }; + if (end.nodeN == 0) + { + res.LastError = "014 Íå íàéäåíû äîðîãè âáëèçè òî÷êè `" + stops[i].name + "`"; + return res; + }; + + gr.GoExcept.Clear(); + gr.GoThrough = null; + if (true) // UseGoLogic + { + if ((roadsExcept != null) && (roadsExcept.Length != 0)) + for (int r = 0; r < roadsExcept.Length; r++) + { + float[][] nl = gr.FindNearestLines(roadsExcept[r].Y, roadsExcept[r].X, (float)roadsExceptRadiusInMeters * 2); + if ((nl != null) && (nl.Length > 0)) + foreach (float[] nll in nl) + if (nll[0] <= roadsExceptRadiusInMeters) + gr.GoExcept.Add((uint)(nll[3]));//0-distance,1-x,2-y,3-line + }; + if((roadsOnly != null) && (roadsOnly.Length == 16)) gr.GoThrough = roadsOnly; + }; + + gr.BeginSolve(true, null); + gr.MinimizeRouteBy = optimizeByDist ? MinimizeBy.Dist : MinimizeBy.Time; + + // Added 21.12.2021 where 1 line in route for WATER + RouteResult rr; + if (allowLeftTurns && (start.line == end.line)) + { + rr = gr.GetFullRouteOneLine(start, end); + } + else + { + //gr.SolveDeikstra(new uint[] { start.nodeN }, end.nodeN); + gr.SolveAstar(start.nodeN, end.nodeN); + rr = gr.GetRouteFull(start, end, true, allowLeftTurns); + }; + + //gr.EndSolve(); + + if (rr.length > RMGraph.const_maxValue) + { + res.LastError = "100 Ìàðøðóò `" + stops[i - 1].name + "` - `" + stops[i].name + "` íå íàéäåí"; + return res; + }; + + if (getPolyline) + { + for (int x = 0; x < start.normal.Length; x++) + vector.Add(new PointFL(start.normal[x], 0, 0, (x > 0) && ((rr.vector != null) && (rr.vector.Length != 0)) ? rr.vector[0].speed : 20)); + vector.AddRange(rr.vector); + for (int x = 0; x < end.normal.Length; x++) + vector.Add(new PointFL(end.normal[x], 0, 0, (x < (end.normal.Length - 1)) && ((rr.vector != null) && (rr.vector.Length != 0)) ? rr.vector[rr.vector.Length-1].speed : 20)); + }; + + // DESCRIPTION + + RDPoint[] desc; + if (getDirections) + { + desc = rd.GetDescription(rr, start, end); + if (desc.Length > 0) + { + desc[0].name = stops[i - 1].name; + desc[desc.Length - 1].name = stops[i].name; + for (int x = 0; x < desc.Length; x++) + { + desc[x].dist += (float)res.driveLength; + desc[x].time += (float)res.driveTime; + description.Add(desc[x]); + }; + }; + }; + + res.finishTime = res.finishTime.AddMinutes(rr.time); + res.driveLength += rr.length; + res.driveTime += rr.time; + + gr.EndSolve(); + + if ((vector.Count > 0) && (res.vectorSegments == null)) res.vectorSegments = new int[stops.Length]; + if (res.vectorSegments != null) res.vectorSegments[i] = vector.Count; + if ((description.Count > 0) && (res.descriptionSegments == null)) res.descriptionSegments = new int[stops.Length]; + if (res.descriptionSegments != null) res.descriptionSegments[i] = description.Count; + + res.driveLengthSegments[i] = res.driveLength; + res.driveTimeSegments[i] = res.driveTime; + }; + + if (res.vectorSegments != null) res.vectorSegments[stops.Length - 1]--; + if (res.descriptionSegments != null) res.descriptionSegments[stops.Length - 1]--; + + res.vector = vector.ToArray(); + res.description = description.ToArray(); + return res; + } + + /// + /// Ôëàãè: + /// 0x01 - ïîëó÷àòü ïîëèëèíèþ + /// 0x02 - ïîëó÷àòü îïèñàíèå + /// 0x04 - èñïîëüçîâàòü òåêóùèé òðàôèê + /// 0x08 - èñïîëüçîâàòü èñòîðè÷åñêèé òðàôèê + /// 0x10 - îïòèìèçèðîâàòü ïðîìåæóòî÷íûå òî÷êè ìàðøðóòà (ðåîðãàíèçàöèÿ) + /// 0x20 - îïòèìèçèðîâàòü ïî ðàññòîÿíèþ + /// 0x40 - äîïóñêàòü âûåçä íà äîðîãó è ñúåçä ÷åðåç âñòðå÷íóþ ïîëîñó + /// + /// + /// + /// + /// + public RResult GetRoute(RStop[] stops, DateTime startTime, long flags, int[] RegionsAvailableToUser) + { + return GetRoute(stops, startTime, flags, RegionsAvailableToUser, null, 0, null); + } + + /// + /// Ôëàãè: + /// 0x01 - ïîëó÷àòü ïîëèëèíèþ + /// 0x02 - ïîëó÷àòü îïèñàíèå + /// 0x04 - èñïîëüçîâàòü òåêóùèé òðàôèê + /// 0x08 - èñïîëüçîâàòü èñòîðè÷åñêèé òðàôèê + /// 0x10 - îïòèìèçèðîâàòü ïðîìåæóòî÷íûå òî÷êè ìàðøðóòà (ðåîðãàíèçàöèÿ) + /// 0x20 - îïòèìèçèðîâàòü ïî ðàññòîÿíèþ + /// 0x40 - äîïóñêàòü âûåçä íà äîðîãó è ñúåçä ÷åðåç âñòðå÷íóþ ïîëîñó + /// + /// + /// + /// + /// + /// Èçáåãàÿ ïðîåçä ïî äîðîãàì ñêâîçü òî÷êè [X-Lon,Y-Lat] + /// Èçáåãàÿ ïðîåçä ïî äîðîãàì ñêâîçü òî÷êè, ðàäèóñ â ìåòðàõ + /// Ïàðàìåòðû ïîñòðîåíèÿ ìàðøðóòà èñïîëüçóÿ àòðèáóòû äîðîã + /// + public RResult GetRoute(RStop[] stops, DateTime startTime, long flags, int[] RegionsAvailableToUser, + PointF[] roadsExcept, double roadsExceptRaduisInMeters, byte[] RoadsOnly) + { + mtx.WaitOne(); + RResult res = new RResult(null); + try + { + res = GetRoutePrivate(stops, startTime, flags, RegionsAvailableToUser, roadsExcept, roadsExceptRaduisInMeters, RoadsOnly); + mtx.ReleaseMutex(); + return res; + } + catch (System.Threading.ThreadAbortException) + { + res.LastError = "101 Ìàðøðóò íå íàéäåí, ïðåâûøåíî âðåìÿ ðàñ÷åòà"; + mtx.ReleaseMutex(); + return res; + } + catch (Exception ex) + { + XMLSaved.AddErr2SysLog("Engine Exception: " + ex.ToString()); + res.LastError = "050 Engine Exception: " + ex.Message.ToString(); + mtx.ReleaseMutex(); + return res; + }; + } + private Mutex mtx = new Mutex(); // íà òîò ñëó÷àé åñëè âäðóã ê îáúåêòó ïûòàåòñÿ ïîëó÷èòü äîñòóï äðóãîé ïîòîê + + /// + /// Ïðèâÿçêà òî÷êè ê äîðîãå + /// + /// Øèðîòà + /// Äîëãîòà + /// Çàïðàøèâàòü íàèìåíîâàíèå äîðîãè (ðàáîòàåò äîëüøå) + /// Ïðèâÿçàííûå ê äîðîãå òî÷êè + public RNearRoad[] GetNearRoad(double[] lat, double[] lon, bool getNames) + { + mtx.WaitOne(); + RNearRoad[] res = new RNearRoad[0]; + try + { + res = GetNearRoadPrivate(lat, lon, getNames); + mtx.ReleaseMutex(); + return res; + } + catch (System.Threading.ThreadAbortException) + { + return null; + } + catch (Exception) + { + return null; + }; + } + + /// + /// Îáùåå ÷èñëî ïîòîêîâ íà ñåðâåðå + /// + /// + public int GetThreadsCount() { return 1; } + + /// + /// Íîìåð íåçàíÿòîãî ïîòîêà + /// + /// + public int GetIdleThreadCount() { return 0; } + + /// + /// Íàõîäèì ðàññòîÿíèå îò èñõîäíîé/êîíå÷íîé êîîðäèíàòû äî êàæäîé ëèíèè + /// + /// Øèðîòà + /// Äîëãîòà + /// Ðàäèóñ ïîèñêà áëèæàéøåé ëèíèè â ìåòðàõ + /// array[0..NumberOfNearPoints-1][0: distance,1: X or Lon,2: Y or Lat,3: line_id] + public float[][] FindNearestLines(float Lat, float Lon, float metersRadius) + { + return gr.FindNearestLines(Lat, Lon, metersRadius); + } + /// + /// Íàõîäèì ðàññòîÿíèå îò èñõîäíîé/êîíå÷íîé êîîðäèíàòû äî êàæäîé ëèíèè + /// + /// Øèðîòà + /// Äîëãîòà + /// Ðàäèóñ ïîèñêà áëèæàéøåé ëèíèè â ìåòðàõ + /// array[0..NumOfPoints-1][0..NumberOfNearPoints-1][0: distance,1: X or Lon,2: Y or Lat,3: line_id] + public float[][][] FindNearestLines(float[] Lat, float[] Lon, float metersRadius) + { + if ((Lat == null) || (Lon == null) || (Lat.Length == 0) || (Lon.Length == 0) || (Lat.Length != Lon.Length)) + { + throw new OverflowException(); + }; + + List res = new List(); + for (int i = 0; i < Lat.Length; i++) + res.Add(gr.FindNearestLines(Lat[i], Lon[i], metersRadius)); + return res.ToArray(); + } + + public void Close() + { + gr.Close(); + gr = null; + } + + ~OneRegionSolver() + { + if(gr != null) + gr.Close(); + } + + public static void OneRegion_Test_PreService() + { + OneRegionSolver.GraphFile = XMLSaved.GetCurrentDir() + @"..\..\..\RGSolver\bin\Debug\Matrix3\lipetsk.rt"; + OneRegionSolver ls = new OneRegionSolver(); + RStop[] ss = new RStop[2] { new RStop("POINT A", 53.365, 40.10), new RStop("POINT B", 52.105, 39.176) }; + //ss = new RStop[2] { new RStop("POINT A", 52.62165451049805, 39.56116485595703 ), new RStop("POINT B", 52.60966873168945, 39.567176818847656) }; + //RStop[] ss = new RStop[2] { new RStop("POINT A", 52.64549811935865, 39.660279750823975), new RStop("POINT B", 52.57972714326297, 39.51683521270752)}; + //ss = new RStop[2] { new RStop("POINT A", 52.64341, 39.65921), new RStop("POINT B", 52.57972714326297, 39.51683521270752) }; + //RStop[] ss = new RStop[3] { new RStop("POINT A", 52.59708, 39.5685), new RStop("POINT B", 52.63228, 39.5788), new RStop("POINT C", 53.365, 40.10) }; + // new RStop("POINT C", 53.365, 40.10) + RResult rr = ls.GetRoute(ss, DateTime.Now.AddHours(2), 3, null); + ls.Close(); + + // SAVE // + RouteDescription rd = new RouteDescription(null); + if(rr.description != null) + rd.SaveTextDescription(rr.description, XMLSaved.GetCurrentDir() + @"\Matrix3\WAY-LIST3.txt"); + if(rr.vector != null) + ToJS(rr.vector); + } + + public override object InitializeLifetimeService() + { + if (keepAlive) + return null; // to make the object live indefinitely + else + return base.InitializeLifetimeService(); + } + + private static void ToJS(PointFL[] route) + { + string s = ""; + s += "var polylipets = new GPolyline([\r\n"; + for (int i = 0; i < route.Length; i++) + s += "new GLatLng(" + route[i].Y.ToString().Replace(",", ".") + ", " + route[i].X.ToString().Replace(",", ".") + ")" + (i < (route.Length - 1) ? "," : "") + "\r\n"; + s += "], \"#0000FF\", 5);\r\n"; + s += "map.addOverlay(polylipets);\r\n\r\n"; + + System.Windows.Forms.Clipboard.SetText(s); + } + + public static void OneRegion_Test_SvcCmd() + { + OneRegionSolver.GraphFile = XMLSaved.GetCurrentDir() + @"..\..\..\RGSolver\bin\Debug\Matrix3\lipetsk.rt"; + OneRegionSolver lip = new OneRegionSolver(); + + BinaryServerFormatterSinkProvider provider = new BinaryServerFormatterSinkProvider(); + provider.TypeFilterLevel = TypeFilterLevel.Full; + + IDictionary RouteSearcherProps = new Hashtable(); + RouteSearcherProps["name"] = "dkxce.Route.TCPSolver"; + RouteSearcherProps["port"] = 7755; + + TcpChannel RouteSearcherChannel = new TcpChannel(RouteSearcherProps, null, provider); + ChannelServices.RegisterChannel(RouteSearcherChannel, false); + ObjRef reference = RemotingServices.Marshal(lip, "dkxce.Route.TCPSolver"); + + Console.WriteLine("Listen at " + string.Format("tcp://{0}:{1}/dkxce.Route.TCPSolver", "localhost", 7755)); + Console.ReadLine(); + + RemotingServices.Disconnect(lip); + reference = null; + ChannelServices.UnregisterChannel(RouteSearcherChannel); + RouteSearcherChannel = null; + lip = null; + } + } +} diff --git a/SOLVER/dkxce.Route.ServiceSolver/dkxce.Route.ServiceSolver.RouteThreader.cs b/SOLVER/dkxce.Route.ServiceSolver/dkxce.Route.ServiceSolver.RouteThreader.cs new file mode 100644 index 0000000..13b1a9f --- /dev/null +++ b/SOLVER/dkxce.Route.ServiceSolver/dkxce.Route.ServiceSolver.RouteThreader.cs @@ -0,0 +1,4127 @@ +#define noLICENSE + +using System; +using System.Diagnostics; +using System.IO; +using System.Threading; +using System.Collections; +using System.Collections.Generic; +using System.Text; +using System.Text.RegularExpressions; +using System.Xml; +using System.Net; +using System.Net.Sockets; +using System.Web; +using System.Xml.Serialization; +using System.Runtime.Serialization.Formatters; +using System.Runtime.Serialization.Formatters.Binary; +using System.Security; +using System.Security.Cryptography; + +using System.ComponentModel; +using System.Runtime.InteropServices; +using System.Security.Permissions; +using Microsoft.Win32.SafeHandles; +using System.Runtime.ConstrainedExecution; + +using dkxce.Route.ISolver; + +namespace dkxce.Route.ServiceSolver +{ + [StructLayout(LayoutKind.Auto)] + [Serializable] + public class RouteThreaderInfo + { + public DateTime startedAt = DateTime.UtcNow; + + public bool DynamicPool; + + public int MaxSolveTime; + public int MaxWaitTime; + + public int ObjectsUsed; + public int ObjectsIdle; + public int ThreadsAlive; + public int ThreadsCounted; + public int ThreadsMaxAlive; + + public string Protocol; + public string Area; + public string Mode; + public string GlobalRegionsCache; + public string ThreadRegionsCache; + + public ulong GlobalRegionsCacheSize; + public ulong ThreadRegionsCacheSize; + + public string ObjectsData; + + public SvcConfig config; + public string confile; + + public string GetGraphsPath() + { + if (config == null) return null; + + if (config.defArea == "one") + { + string path = config.OneRegion.Trim(); + path = Path.IsPathRooted(path) ? path : XMLSaved.GetCurrentDir() + path; + path = Path.GetFullPath(path); + path = Path.GetDirectoryName(path); + return path; + } + else + { + string path = Path.GetFullPath(config.MultiRegion.GraphDirectory()); + return path; + }; + } + } + + /// + /// Êëàññ äëÿ ðàáîòû ñ ñîçäàííûìè îáúåêòàìè, êàê äëÿ + /// êàæäîãî ïîòîêà â îòäåëüíîñòè, òàê è çàðàíåå èçâåñòíûìè. + /// Ðàñïðåäåëåíèå ïî êëèåíòàì, ðàáîòàþùèõ â îäíîì èëè â îòäåëüíûõ ïîòîêàõ + /// + public class RouteThreader: MarshalByRefObject, IRoute + { + public const string _RouteThreader = "dkxce.Route.GSolver/21.12.21.23-V4-win32"; + + public static RouteThreaderInfo mem = new RouteThreaderInfo(); + private static FileMappingServer fms = null; + + public static Type IsDynamic = null; + // solve timeout, çíà÷åíèå áåç ó÷åòà ïîñòðîåíèÿ ìàðøðóòà ñ ó÷åòîì àòðèáóòèâíûõ äàííûõ ëèíèé! + public static int MaxSolveTime = 5 * 60 * 1000; // 5 minutes // 2.5 mins per start // 2.5 mins per end + public static int MaxWaitTime = 5 * 60 * 1000; // + public static bool threadLog = false; + public static bool threadLogMem = false; /////////////// + public static List IPBanList = new List(); + + public static bool authorization = false; + public static List Users; + + private static int _objCount = 0; + private static List _objects = new List(); + private static Mutex _mtx = new Mutex(); + + private static int _ttlCreated = 0; + private static int _currAlive = 0; + private int createdID = 0; + + public RouteThreader() + { + createdID = _ttlCreated++; + _currAlive++; + UpMem(); + } + + ~RouteThreader() + { + _currAlive--; + UpMem(); + } + + public static void UpMem() + { + if ((fms == null) && (threadLogMem)) + { + fms = new FileMappingServer(); + fms.Connect(); + }; + if (threadLogMem) + { + mem.ThreadsAlive = _currAlive; + mem.DynamicPool = IsDynamic != null; + mem.MaxSolveTime = MaxSolveTime / 1000; + mem.MaxWaitTime = MaxWaitTime / 1000; + mem.ObjectsUsed = _objCount; + mem.ThreadsCounted = _ttlCreated; + mem.ObjectsIdle = RouteThreader._objects.Count; + + mem.ObjectsData = ""; + mem.ThreadRegionsCacheSize = 0; + int od = 0; + for (int i = 0; i < _objects.Count; i++) + { + try + { + if (_objects[i].GetType().ToString() == "dkxce.Route.ServiceSolver.RussiaSolver") + { + RussiaSolver rs = (RussiaSolver)_objects[i]; + mem.ObjectsData += od.ToString() + ":" + IntArrayToStr(rs.GetRegionsGlobal) + ":" + IntArrayToStr(rs.GetRegionsPreload) + ":" + IntArrayToStr(rs.GetRegionsSession)+ " - "+(((double)rs.GetRegionsSessionSize)/1024/1024).ToString("0.00").Replace(",",".")+"MB;"; + od++; + mem.ThreadRegionsCacheSize += rs.GetRegionsPreloadSize; + }; + + if (_objects[i].GetType().ToString() == "dkxce.Route.ServiceSolver.OneRegionSolver") + { + OneRegionSolver rs = (OneRegionSolver)_objects[i]; + mem.ObjectsData += od.ToString() + "::" + mem.ThreadRegionsCache + ":;"; + od++; + mem.ThreadRegionsCacheSize += rs.GraphSize; + }; + } + catch { }; + }; + + fms.WriteData(mem); + }; + } + + public static string IntArrayToStr(int[] arr) + { + string res = ""; + foreach (int i in arr) + res += (res.Length > 0 ? "," : "") + i.ToString(); + return res; + } + + /// + /// Äîáàâëÿåì ìîäóëü ðàñ÷åòà + /// + /// + public static void AddObject(IRoute obj) + { + RouteThreader._objCount++; + RouteThreader._objects.Add(obj); + UpMem(); + } + + /// + /// Ïðèâÿçêà òî÷êè ê äîðîãå + /// + /// Øèðîòà + /// Äîëãîòà + /// Çàïðàøèâàòü íàèìåíîâàíèå äîðîãè (ðàáîòàåò äîëüøå) + /// Ïðèâÿçàííûå ê äîðîãå òî÷êè + public RNearRoad[] GetNearRoad(double[] lat, double[] lon, bool getNames) + { + RNearRoad[] rr = new RNearRoad[0]; + + // dynamic + if (IsDynamic != null) + { + _objCount++; + UpMem(); + try + { + //rs = (IRoute)Activator.CreateInstance(RouteThreader.IsDynamic); + + ToCallNearRoad tc = new ToCallNearRoad((IRoute)Activator.CreateInstance(RouteThreader.IsDynamic), new RNearRoadAsk(null,lat,lon,getNames), null); + if (RouteThreader.threadLog) + XMLSaved.Add2SysLog("RouteThreader TtlCreated " + _ttlCreated.ToString() + " CurrID " + createdID.ToString() + " CurrAlive " + _currAlive.ToString() + " TtlObjs " + _objCount.ToString() + " IdleObjs " + _objects.Count.ToString()); + System.Threading.Thread thr = new System.Threading.Thread(CalcTimed); + thr.Start(tc); + thr.Join(RouteThreader.MaxSolveTime); + thr.Abort(); + rr = tc.result; + tc.solver = null; + } + catch (Exception ex) + { + XMLSaved.AddErr2SysLog("RouteThreader Exception: " + ex.ToString()); + rr = null; + }; + _objCount--; + UpMem(); + return rr; + }; + + // static + DateTime wst = DateTime.UtcNow; + IRoute rs = null; + do + { + if (!_mtx.WaitOne(RouteThreader.MaxWaitTime)) // åñëè êëèåíò èòàê ñëèøêîì äîëãî æäåò, ÷òîáû íå íàãðóæàòü ñåðâåð + { + return null; + }; + if (RouteThreader._objects.Count > 0) + { + rs = RouteThreader._objects[0]; + RouteThreader._objects.RemoveAt(0); + UpMem(); + }; + _mtx.ReleaseMutex(); + + if (DateTime.UtcNow.Subtract(wst).TotalMilliseconds > RouteThreader.MaxWaitTime) + { + return null; + }; + + if (rs == null) Thread.Sleep(50); + } + while (rs == null); + + try + { + ToCallNearRoad tc = new ToCallNearRoad(rs, new RNearRoadAsk(null,lat, lon, getNames), null); + if (RouteThreader.threadLog) + XMLSaved.Add2SysLog("RouteThreader TtlCreated " + _ttlCreated.ToString() + " CurrID " + createdID.ToString() + " CurrAlive " + _currAlive.ToString() + " TtlObjs " + _objCount.ToString() + " IdleObjs " + _objects.Count.ToString()); + System.Threading.Thread thr = new System.Threading.Thread(CalcTimed); + thr.Priority = ThreadPriority.AboveNormal; + thr.Start(tc); + thr.Join(RouteThreader.MaxSolveTime); + thr.Abort(); + thr = null; + rr = tc.result; + } + catch (Exception) + { + rr = null; + }; + + _mtx.WaitOne(); + RouteThreader._objects.Add(rs); + UpMem(); + _mtx.ReleaseMutex(); + + return rr; + } + + /// + /// Ïîëó÷åíèå ìàðøðóòà; + /// Ôëàãè: + /// 0x01 - ïîëó÷àòü ïîëèëèíèþ + /// 0x02 - ïîëó÷àòü îïèñàíèå + /// 0x04 - èñïîëüçîâàòü òåêóùèé òðàôèê + /// 0x08 - èñïîëüçîâàòü èñòîðè÷åñêèé òðàôèê + /// 0x10 - îïòèìèçèðîâàòü ïðîìåæóòî÷íûå òî÷êè ìàðøðóòà (ðåîðãàíèçàöèÿ) + /// 0x20 - îïòèìèçèðîâàòü ïî ðàññòîÿíèþ + /// + /// Òî÷êè ìàðøðóòà + /// Íà÷àëüíîå âðåìÿ + /// ôëàãè + /// Ðåãèîíû äîñòóïíûå äëÿ ïîëüçîâàòåëÿ (null = âñå) + /// + public RResult GetRoute(RStop[] stops, DateTime startTime, long flags, int[] RegionsAvailableToUser) + { + return GetRoute(stops, startTime, flags, RegionsAvailableToUser, null, 150, null); + } + + /// + /// Ïîëó÷åíèå ìàðøðóòà; + /// Ôëàãè: + /// 0x01 - ïîëó÷àòü ïîëèëèíèþ + /// 0x02 - ïîëó÷àòü îïèñàíèå + /// 0x04 - èñïîëüçîâàòü òåêóùèé òðàôèê + /// 0x08 - èñïîëüçîâàòü èñòîðè÷åñêèé òðàôèê + /// 0x10 - îïòèìèçèðîâàòü ïðîìåæóòî÷íûå òî÷êè ìàðøðóòà (ðåîðãàíèçàöèÿ) + /// 0x20 - îïòèìèçèðîâàòü ïî ðàññòîÿíèþ + /// + /// Òî÷êè ìàðøðóòà + /// Íà÷àëüíîå âðåìÿ + /// ôëàãè + /// Ðåãèîíû äîñòóïíûå äëÿ ïîëüçîâàòåëÿ (null = âñå) + /// + public RResult GetRoute(RStop[] stops, DateTime startTime, long flags, int[] RegionsAvailableToUser, + dkxce.Route.Classes.PointF[] roadsExcept, double roadsExceptRaduisInMeters, byte[] RoadsOnly) + { + RResult rr = new RResult(stops); + + // dynamic + if (IsDynamic != null) + { + _objCount++; + UpMem(); + try + { + //rs = (IRoute)Activator.CreateInstance(RouteThreader.IsDynamic); + //rr = rs.GetRoute(stops, startTime, flags, RegionsAvailableToUser); + + ToCall tc = new ToCall((IRoute)Activator.CreateInstance(RouteThreader.IsDynamic),new RAsk(null,stops,startTime,flags,RegionsAvailableToUser),null,roadsExcept,roadsExceptRaduisInMeters,RoadsOnly); + if (RouteThreader.threadLog) + XMLSaved.Add2SysLog("RouteThreader TtlCreated " + _ttlCreated.ToString() + " CurrID " + createdID.ToString() + " CurrAlive " + _currAlive.ToString() + " TtlObjs " + _objCount.ToString() + " IdleObjs " + _objects.Count.ToString()); + System.Threading.Thread thr = new System.Threading.Thread(CalcTimed); + thr.Start(tc); + thr.Join(RouteThreader.MaxSolveTime); + thr.Abort(); + thr = null; + if (tc.result == null) + rr.LastError = "101 Ìàðøðóò íå íàéäåí, ïðåâûøåíî âðåìÿ ðàñ÷åòà"; + else + rr = tc.result; + tc.solver = null; + } + catch (Exception ex) + { + XMLSaved.AddErr2SysLog("RouteThreader Exception: " + ex.ToString()); + rr.LastError = "051 RouteThreader Exception: "+ex.Message.ToString(); + }; + _objCount--; + UpMem(); + return rr; + }; + + // static + DateTime wst = DateTime.UtcNow; + IRoute rs = null; + do + { + if (!_mtx.WaitOne(RouteThreader.MaxWaitTime)) // åñëè êëèåíò èòàê ñëèøêîì äîëãî æäåò, ÷òîáû íå íàãðóæàòü ñåðâåð + { + rr.LastError = "102 Ðàñ÷åò ìàðøðóòà íå íà÷èíàëñÿ, ïðåâûøåíî âðåìÿ îæèäàíèÿ"; + return rr; + }; + if (RouteThreader._objects.Count > 0) + { + rs = RouteThreader._objects[0]; + RouteThreader._objects.RemoveAt(0); + UpMem(); + }; + _mtx.ReleaseMutex(); + + if(DateTime.UtcNow.Subtract(wst).TotalMilliseconds > RouteThreader.MaxWaitTime ) + { + rr.LastError = "102 Ðàñ÷åò ìàðøðóòà íå íà÷èíàëñÿ, ïðåâûøåíî âðåìÿ îæèäàíèÿ"; + return rr; + }; + + if (rs == null) Thread.Sleep(50); + } + while(rs == null); + + try + { + // rr = rs.GetRoute(stops, startTime, flags, RegionsAvailableToUser); + ToCall tc = new ToCall(rs, new RAsk(null, stops, startTime, flags, RegionsAvailableToUser), null, roadsExcept, roadsExceptRaduisInMeters, RoadsOnly); + if(RouteThreader.threadLog) + XMLSaved.Add2SysLog("RouteThreader TtlCreated " + _ttlCreated.ToString() + " CurrID " + createdID.ToString() + " CurrAlive " + _currAlive.ToString() + " TtlObjs " + _objCount.ToString() + " IdleObjs " + _objects.Count.ToString()); + System.Threading.Thread thr = new System.Threading.Thread(CalcTimed); + thr.Priority = ThreadPriority.AboveNormal; + thr.Start(tc); + thr.Join(RouteThreader.MaxSolveTime); + thr.Abort(); + thr = null; + if (tc.result == null) + rr.LastError = "101 Ìàðøðóò íå íàéäåí, ïðåâûøåíî âðåìÿ ðàñ÷åòà"; + else + rr = tc.result; + } + catch (Exception ex) + { + XMLSaved.AddErr2SysLog("RouteThreader Exception: " + ex.ToString()); + rr.LastError = "051 RouteThreader Exception: " + ex.Message.ToString(); + }; + + _mtx.WaitOne(); + RouteThreader._objects.Add(rs); + UpMem(); + _mtx.ReleaseMutex(); + + return rr; + } + + /// + /// Èñïîëüçóåòñÿ äëÿ ïåðåäà÷è ïàðàìåòðîâ â îòäåëüíûé ïîòîê ñ òàéìàóòîì âûïîëíåíèÿ + /// + private class ToCall + { + public IRoute solver = null; + public RAsk data = null; + public RResult result = null; + // + public dkxce.Route.Classes.PointF[] roadsExcept; + public double roadsExceptRadiusInMeters = 50; + public byte[] roadsOnly = new byte[16]; + // + public ToCall(IRoute solver, RAsk data, RResult result, + dkxce.Route.Classes.PointF[] roadsExcept, double roadsExceptRadiusInMeters, byte[] roadsOnly) + { + this.solver = solver; + this.data = data; + this.result = result; + this.roadsExcept = roadsExcept; + this.roadsExceptRadiusInMeters = roadsExceptRadiusInMeters; + this.roadsOnly = roadsOnly; + } + } + + /// + /// Èñïîëüçóåòñÿ äëÿ ïåðåäà÷è ïàðàìåòðîâ â îòäåëüíûé ïîòîê ñ òàéìàóòîì âûïîëíåíèÿ + /// + private class ToCallNearRoad + { + public IRoute solver = null; + public RNearRoadAsk data = null; + public RNearRoad[] result = null; + public ToCallNearRoad(IRoute solver, RNearRoadAsk data, RNearRoad[] result) + { + this.solver = solver; + this.data = data; + this.result = result; + } + } + + /// + /// Ïîòîê ñ ðàñ÷åòîì äëÿ èñïîëüçîâàíèÿ ñ òàéìàóòîì + /// + /// + private void CalcTimed(object obj) + { + ToCall tc = null; + ToCallNearRoad nr = null; + try + { + tc = (ToCall)obj; + tc.result = tc.solver.GetRoute(tc.data.stops, tc.data.startTime, tc.data.flags, tc.data.RegionsAvailableToUser,tc.roadsExcept,tc.roadsExceptRadiusInMeters,tc.roadsOnly); + } + catch { }; + try + { + nr = (ToCallNearRoad)obj; + nr.result = nr.solver.GetNearRoad(nr.data.lat, nr.data.lon, nr.data.getNames); + } + catch { }; + } + + /// + /// Îáùåå ÷èñëî ïîòîêîâ íà ñåðâåðå + /// + /// + public int GetThreadsCount() + { + return RouteThreader._objCount; + } + + /// + /// Îáùåå ÷èñëî ïîòîêîâ íà ñåðâåðå + /// + /// + public static int getThreadsCount() + { + return RouteThreader._objCount; + } + + /// + /// ×èñëî ñâîáîäíûõ ïîòîêîâ íà ñåðâåðå + /// + /// + public static int getIdleThreadCount() + { + return RouteThreader._objects.Count; + } + + /// + /// ×èñëî ñâîáîäíûõ ïîòîêîâ íà ñåðâåðå + /// + /// + public int GetIdleThreadCount() + { + return RouteThreader._objects.Count; + } + } + + /// + /// TCP ñåðâåð äëÿ âõîäÿùèõ çàïðîñîâ + /// + public class RouteTCPListenter + { + private Thread mainThread = null; + private TcpListener mainListener = null; + private IPAddress ListenIP = IPAddress.Any; + private int ListenPort = 7755; + private bool isRunning = false; + private int MaxThreads = 1; + + private int ThreadsCount = 0; + + private Licenses lics = null; + + public RouteTCPListenter(int Port, int MaxThreads) + { + //// if use ThreadPool + //// Óñòàíîâèì ìèíèìàëüíîå êîëè÷åñòâî ðàáî÷èõ ïîòîêîâ + //ThreadPool.SetMinThreads(2, 2); + //// Óñòàíîâèì ìàêñèìàëüíîå êîëè÷åñòâî ðàáî÷èõ ïîòîêîâ + //// Ìàêñèìàëüíîå êîëè÷åñòâî ïîòîêîâ äîëæíî áûòü íå ìåíüøå äâóõ, + //// òàê êàê â ýòî ÷èñëî âõîäèò îñíîâíîé ïîòîê. + //// Åñëè óñòàíîâèòü åäèíèöó, òî îáðàáîòêà êëèåíòà áóäåò âîçìîæíà ëèøü òîãäà, + //// êîãäà îñíîâíîé ïîòîê ïðèîñòàíîâèë ðàáîòó (íàïðèìåð, îæèäàåò íîâîãî êëèåíòà èëè áûëà âûçâàíà ïðîöåäóðà Sleep). + //ThreadPool.SetMaxThreads(MaxThreads, MaxThreads); + //// Ïðèíèìàåì íîâûõ êëèåíòîâ. Ïîñëå òîãî, êàê êëèåíò áûë ïðèíÿò, îí ïåðåäàåòñÿ â íîâûé ïîòîê (ClientThread) + //// ñ èñïîëüçîâàíèåì ïóëà ïîòîêîâ. + + this.ListenPort = Port; + this.MaxThreads = MaxThreads; + + lics = new Licenses(); + #if LICENSE + { + // default: `dkxce.Route.ServiceSolver.lic` + string licFile = GetCurrentExe().Remove(GetCurrentExe().Length-4)+".lic"; + // Navicom Web HTTP RouteSolver.dll Key = D6AEA3EC848644258DCD06A781B2C036 + // Navicom Route Map Test Key = D6AEA3EC848644258DCD06A781B2C036 + // TO SAVE LICENSES USE `nmsRouteLicenseFileTool` + + // fix if system date changed wrong + if (DateTime.UtcNow < System.IO.File.GetLastWriteTimeUtc(GetCurrentExe())) throw new Exception("License Error [A]"); + if (!File.Exists(licFile)) throw new Exception("License Error [B]"); + if (DateTime.UtcNow < System.IO.File.GetLastWriteTimeUtc(licFile)) throw new Exception("License Error [C]"); + + System.IO.FileStream fs; + try + { + fs = new FileStream(licFile, FileMode.Open); + } + catch (Exception ex) { throw new Exception("License Error [D0]"+" ["+ex.ToString()+"]"); }; + + try + { + byte[] buffer = new byte[65536]; + ICSharpCode.SharpZipLib.GZip.GZipInputStream ins = new ICSharpCode.SharpZipLib.GZip.GZipInputStream(fs); + int length = ins.Read(buffer, 0, buffer.Length); + ins.Close(); + fs.Close(); + string coded = System.Text.Encoding.ASCII.GetString(buffer, 0, length); + string xml = Licenses.Crypto.DecryptStringAES(coded, "zSx1b0Izlk"); + lics = XMLSaved.LoadText(xml); + } + catch { throw new Exception("License Error [D]"); }; + + if (lics.keys.Count == 0) throw new Exception("License Error [E]"); + if (lics.keys.IndexOf("") >= 0) throw new Exception("License Error [F]"); + }; + #endif + } + + public bool Running { get { return isRunning; } } + public IPAddress ServerIP { get { return ListenIP; } } + public int ServerPort { get { return ListenPort; } } + + public void Dispose() { Stop(); } + ~RouteTCPListenter() { Dispose(); } + + public virtual void Start() + { + if (isRunning) throw new Exception("Server Already Running!"); + + isRunning = true; + mainThread = new Thread(MainThread); + mainThread.Start(); + } + + private void MainThread() + { + mainListener = new TcpListener(this.ListenIP, this.ListenPort); + mainListener.Start(); + while (isRunning) + { + try + { + TcpClient client = mainListener.AcceptTcpClient(); + if (RouteThreader.IPBanList.Contains(((IPEndPoint)client.Client.RemoteEndPoint).Address.ToString())) + { + client.Close(); + continue; + }; + + if (this.MaxThreads > 1) // multithread or multiclient + { + while ((this.ThreadsCount >= this.MaxThreads) && isRunning) // wait for any closed thread + System.Threading.Thread.Sleep(5); + if (!isRunning) break; // break if stopped + Thread thr = new Thread(ClientThread); // create new thread for new client + thr.Start(client); + } + else // single thread + ClientThread(client); + + // + // if use ThreadPool + // if (this.MaxThreads > 1) // multithread or multiclient + // ThreadPool.QueueUserWorkItem(new WaitCallback(ClientThread), client); + // else // single + // ClientThread(client); + // + } + catch { Thread.Sleep(1); }; + }; + } + + public virtual void Stop() + { + if (!isRunning) return; + + isRunning = false; + + if (mainListener != null) mainListener.Stop(); + mainListener = null; + + mainThread.Join(); + mainThread = null; + } + + /// + /// Client exchange + /// + /// TcpClient + private void ClientThread(object data) + { + ThreadsCount++; + TcpClient client = (TcpClient)data; + byte[] buff = new byte[21]; + client.ReceiveTimeout = 9000; // 9 seconds + + int read = 0; + try { read = client.GetStream().Read(buff, 0, buff.Length); } + catch { client.Close(); ThreadsCount--; return; }; + + if (read != 21) // 21 (0..20) // íå íàø êëèåíò + { + client.Close(); + ThreadsCount--; + return; + }; + + string code = System.Text.Encoding.GetEncoding(1251).GetString(buff,0,21); + if (code != "dkxce.Route.TCPSolver") // íå íàø êëèåíò + { + client.Close(); + ThreadsCount--; + return; + }; + + byte method = 0; + try { method = (byte)client.GetStream().ReadByte(); } + catch { client.Close(); ThreadsCount--; return; }; + if (method > 7) // íå ïîääåðæèâàåìûé ìåòîä + { + client.Close(); + ThreadsCount--; + return; + }; + + // response // + try + { + client.GetStream().Write(buff, 0, buff.Length); + client.GetStream().WriteByte(method); + if (method == 0) // ThreadsCount + client.GetStream().WriteByte((byte)RouteThreader.getThreadsCount()); + if (method == 1) // IdleThreadCount + client.GetStream().WriteByte((byte)RouteThreader.getIdleThreadCount()); + if ((method == 2) || (method == 6)) // GetRoute (binary result) or 6 + { + BinaryFormatter bf = new BinaryFormatter(); + RAsk ask = (RAsk)bf.Deserialize(client.GetStream()); + RResult rr; + + // roadsOnly + dkxce.Route.Classes.PointF[] roadsExcept = null; + double roadsExceptRadiusInMeters = 50; + byte[] roadsOnly = new byte[16]; + if (method == 6) + { + byte[] indata = new byte[16]; + client.GetStream().Read(indata, 0, indata.Length); + Array.Copy(indata, roadsOnly, indata.Length); + indata = new byte[8]; + client.GetStream().Read(indata, 0, indata.Length); + roadsExceptRadiusInMeters = BitConverter.ToDouble(indata, 0); + indata = new byte[2]; + client.GetStream().Read(indata, 0, indata.Length); + ushort points = BitConverter.ToUInt16(indata, 0); + roadsExcept = new dkxce.Route.Classes.PointF[points]; + if (points > 0) + { + indata = new byte[points * 2 * 8]; + client.GetStream().Read(indata, 0, indata.Length); + for (int i = 0; i < points; i++) + { + double Y = BitConverter.ToDouble(indata, i * 2 * 8); + double X = BitConverter.ToDouble(indata, i * 2 * 8 + 8); + roadsExcept[i] = new dkxce.Route.Classes.PointF((float)X, (float)Y); + }; + }; + }; + // end roadsOnly + + #if LICENSE + // CHECK LICENSES + int lIndex = lics.keys.IndexOf(ask.licenseKey); + if (lIndex < 0) + { + rr = new RResult(null); + rr.LastError = "001 BAD KEY"; + } + else if (DateTime.Now > lics.expires[lIndex]) + { + rr = new RResult(null); + rr.LastError = "002 Support Expired"; + } + else + #endif + // CALL SOLVER // + if(method == 6) + rr = (new RouteThreader()).GetRoute(ask.stops, ask.startTime, ask.flags, ask.RegionsAvailableToUser, roadsExcept,roadsExceptRadiusInMeters,roadsOnly); + else + rr = (new RouteThreader()).GetRoute(ask.stops, ask.startTime, ask.flags, ask.RegionsAvailableToUser); + bf.Serialize(client.GetStream(), rr); + }; + if ((method == 3) || (method == 7)) // GetRoute (XML result) or 7 + { + buff = new byte[20480]; + try { read = client.GetStream().Read(buff, 0, buff.Length); } + catch { client.Close(); ThreadsCount--; return; }; + if (read == 0) { client.Close(); ThreadsCount--; return; }; + RAsk ask = null; + int dataSize = 0; + try { ask = ParseMethod3Request(buff, out dataSize); } + catch (Exception ex) + { + XMLSaved.Add2SysLog(ex.ToString()); + buff = System.Text.Encoding.GetEncoding(1251).GetBytes("ERROR PARCING REQUEST"); + client.GetStream().Write(buff,0,buff.Length); client.Close(); ThreadsCount--; return; + }; + RResult rr; + + // roadsOnly + dkxce.Route.Classes.PointF[] roadsExcept = null; + double roadsExceptRadiusInMeters = 50; + byte[] roadsOnly = new byte[16]; + if (method == 7) + { + Array.Copy(buff, dataSize, roadsOnly, 0, 16); + roadsExceptRadiusInMeters = BitConverter.ToDouble(buff, dataSize + 16); + ushort points = BitConverter.ToUInt16(buff, dataSize + 16 + 8); + if (points > 0) + { + roadsExcept = new dkxce.Route.Classes.PointF[points]; + for (int i = 0; i < points; i++) + { + double Y = BitConverter.ToDouble(buff, dataSize + 16 + 8 + 2 + i * 2 * 8); + double X = BitConverter.ToDouble(buff, dataSize + 16 + 8 + 2 + i * 2 * 8 + 8); + roadsExcept[i] = new dkxce.Route.Classes.PointF((float)X, (float)Y); + }; + }; + }; + // end roadsOnly + + #if LICENSE + // CHECK LICENSES + int lIndex = lics.keys.IndexOf(ask.licenseKey); + if (lIndex < 0) + { + rr = new RResult(null); + rr.LastError = "001 BAD KEY"; + } + else if (DateTime.Now > lics.expires[lIndex]) + { + rr = new RResult(null); + rr.LastError = "002 Support Expired"; + } + else + #endif + // CALL SOLVER + if (method == 7) + rr = (new RouteThreader()).GetRoute(ask.stops, ask.startTime, ask.flags, ask.RegionsAvailableToUser, + roadsExcept, roadsExceptRadiusInMeters, roadsOnly); + else + rr = (new RouteThreader()).GetRoute(ask.stops, ask.startTime, ask.flags, ask.RegionsAvailableToUser); + + RouteFormatAsHTTPXML.Route route = RouteFormatAsHTTPXML.GetRoute(rr); + XmlWriterSettings s_ = new XmlWriterSettings(); + s_.Encoding = defEnd; + s_.Indent = false; + s_.NewLineHandling = NewLineHandling.None; + XmlWriter writer = XmlWriter.Create(client.GetStream(),s_); + System.Xml.Serialization.XmlSerializer xs = new System.Xml.Serialization.XmlSerializer(typeof(RouteFormatAsHTTPXML.Route)); + XmlSerializerNamespaces ns = new XmlSerializerNamespaces(); + ns.Add("", ""); + xs.Serialize(writer, route, ns); + }; + if (method == 4) // GetNearRoad (binary result) + { + BinaryFormatter bf = new BinaryFormatter(); + RNearRoadAsk ask = (RNearRoadAsk)bf.Deserialize(client.GetStream()); + RNearRoad[] nr; + #if LICENSE + // CHECK LICENSES + int lIndex = lics.keys.IndexOf(ask.licenseKey); + if (lIndex < 0) + { + nr = new RNearRoad[] { new RNearRoad(0, 0, 0, "001 BAD KEY") }; + } + else if (DateTime.Now > lics.expires[lIndex]) + { + nr = new RNearRoad[] { new RNearRoad(0, 0, 0, "002 Support Expired") }; + } + else + #endif + // CALL SOLVER + nr = (new RouteThreader()).GetNearRoad(ask.lat, ask.lon, ask.getNames); + bf.Serialize(client.GetStream(), nr);; + }; + if (method == 5) // GetNearRoad (XML result) + { + buff = new byte[4096]; + try { read = client.GetStream().Read(buff, 0, buff.Length); } + catch { client.Close(); ThreadsCount--; return; }; + if (read == 0) { client.Close(); ThreadsCount--; return; }; + RNearRoadAsk ask = null; + try { ask = ParseMethod5Request(buff); } + catch (Exception ex) + { + XMLSaved.Add2SysLog(ex.ToString()); + buff = System.Text.Encoding.GetEncoding(1251).GetBytes("ERROR PARCING REQUEST"); + client.GetStream().Write(buff, 0, buff.Length); client.Close(); ThreadsCount--; return; + }; + RNearRoad[] nr; + #if LICENSE + // CHECK LICENSES + int lIndex = lics.keys.IndexOf(ask.licenseKey); + if (lIndex < 0) + { + nr = new RNearRoad[] { new RNearRoad(0, 0, 0, "001 BAD KEY") }; + } + else if (DateTime.Now > lics.expires[lIndex]) + { + nr = new RNearRoad[] { new RNearRoad(0, 0, 0, "002 Support Expired") }; + } + else + #endif + // CALL SOLVER + nr = (new RouteThreader()).GetNearRoad(ask.lat, ask.lon, ask.getNames); + RouteFormatAsHTTPXML.NearRoad[] oof = null; + if (nr != null) oof = new RouteFormatAsHTTPXML.NearRoad[nr.Length]; + for (int i = 0; i < nr.Length; i++) + { + oof[i] = new RouteFormatAsHTTPXML.NearRoad(); + oof[i].lat = nr[i].lat; + oof[i].lon = nr[i].lon; + oof[i].distance = nr[i].distance; + oof[i].name = nr[i].name; + oof[i].attributes = nr[i].attributes; + oof[i].region = nr[i].region; + }; + + XmlWriterSettings s_ = new XmlWriterSettings(); + s_.Encoding = defEnd; + s_.Indent = false; + s_.NewLineHandling = NewLineHandling.None; + XmlWriter writer = XmlWriter.Create(client.GetStream(), s_); + System.Xml.Serialization.XmlSerializer xs = new System.Xml.Serialization.XmlSerializer(typeof(RouteFormatAsHTTPXML.NearRoad[])); + XmlSerializerNamespaces ns = new XmlSerializerNamespaces(); + ns.Add("", ""); + xs.Serialize(writer, oof, ns); + }; + + } + catch (Exception) + { + client.Close(); ThreadsCount--; return; + }; + + client.GetStream().Flush(); + client.GetStream().Close(); + client.Close(); + ThreadsCount--; + } + public static System.Text.Encoding defEnd = System.Text.Encoding.GetEncoding(1251); + + /* + // PACKET + [BYTE] LicenseKey Length + [....] LicenseKey + [BYTE] Stops Count + { + [BYTE] STOP N Name Length + [....] STOP N Name + [SINGLE] LAT + [SINGLE] LON + } + [DOUBLE] StartTime + [LONG] FLAGS + [BYTE] Region Count + { + [BYTE] Region ID + } + */ + /// + /// Method 3 Parse + /// + /// + /// + private RAsk ParseMethod3Request(byte[] data, out int dataSize) + { + RAsk ra = new RAsk(); + ra.licenseKey = System.Text.Encoding.GetEncoding(1251).GetString(data, 1, data[0]); + int z = 1 + data[0]; + ra.stops = new RStop[data[z++]]; + for (int i = 0; i < ra.stops.Length; i++) + { + byte nl = data[z++]; + string n = System.Text.Encoding.GetEncoding(1251).GetString(data, z, nl); + z += nl; + double lat = BitConverter.ToDouble(data, z); + z += 8; + double lon = BitConverter.ToDouble(data, z); + z += 8; + ra.stops[i] = new RStop(n, lat, lon); + }; + ra.startTime = DateTime.FromOADate(BitConverter.ToDouble(data, z)); + z += 8; + ra.flags = BitConverter.ToUInt32(data, z); + z += 8; + ra.RegionsAvailableToUser = new int[data[z++]]; + for (int i = 0; i < ra.RegionsAvailableToUser.Length; i++) + ra.RegionsAvailableToUser[i] = data[z++]; + dataSize = z; + return ra; + } + /// + /// Method 5 Parse + /// + /// + /// + private RNearRoadAsk ParseMethod5Request(byte[] data) + { + RNearRoadAsk ra = new RNearRoadAsk(null,null,null,false); + ra.licenseKey = System.Text.Encoding.GetEncoding(1251).GetString(data, 1, data[0]); + int z = 1 + data[0]; + ra.getNames = BitConverter.ToBoolean(data, z); + ushort count = BitConverter.ToUInt16(data, z+1); + ra.lat = new double[count]; + ra.lon = new double[count]; + for (int i = 0; i < ra.lat.Length; i++) + { + ra.lat[i] = BitConverter.ToDouble(data, z + 3 + 16 * i); + ra.lon[i] = BitConverter.ToDouble(data, z + 3 + 16 * i + 8); + }; + return ra; + } + + public class RouteFormatAsHTTPXML + { + + public static Route GetRoute(RResult rr) + { + Route rt = new Route(); + rt.LastError = rr.LastError; + rt.driveLength = rr.driveLength; + rt.driveLengthSegments = rr.driveLengthSegments; + rt.driveTime = rr.driveTime; + rt.driveTimeSegments = rr.driveTimeSegments; + rt.startTime = rr.startTime; + rt.finishTime = rr.finishTime; + rt.LastError = rr.LastError; + rt.stops = null; + if (rr.stops != null) + { + rt.stops = new Stop[rr.stops.Length]; + for (int i = 0; i < rr.stops.Length; i++) + rt.stops[i] = new Stop(rr.stops[i].name, rr.stops[i].lat, rr.stops[i].lon); + }; + + if (rr.vector != null) + { + List vec = new List(); + for (int i = 0; i < rr.vector.Length; i++) + vec.Add(new XYPoint(rr.vector[i].X, rr.vector[i].Y)); + rt.polyline = vec.ToArray(); + rt.polylineSegments = rr.vectorSegments; + }; + if (rr.description != null) + { + rt.instructions = new RoutePoint[rr.description.Length]; + for (int i = 0; i < rt.instructions.Length; i++) + { + double segt = i == rt.instructions.Length - 1 ? 0 : (double)rr.description[i + 1].time - (double)rr.description[i].time; + double segl = i == rt.instructions.Length - 1 ? 0 : (double)rr.description[i + 1].dist - (double)rr.description[i].dist; + rt.instructions[i] = new RoutePoint(i, (double)rr.description[i].Lon, (double)rr.description[i].Lat, segl, segt, (double)rr.description[i].dist, rr.startTime.AddMinutes(rr.description[i].time)); + rt.instructions[i].iStreet = rr.description[i].name; + + if (rr.description[i].instructions.Length > 0) + rt.instructions[i].iToDo = rr.description[i].instructions[0]; + if (rr.description[i].instructions.Length > 1) + rt.instructions[i].iToGo = rr.description[i].instructions[1]; + }; + rt.instructionsSegments = rr.descriptionSegments; + }; + return rt; + } + + /// + /// Ìàðøðóíûå òî÷êè + /// + [Serializable] + public class Stop + { + /// + /// Èìÿ + /// + [XmlText] + public string name = ""; + /// + /// Øèðîòà + /// + [XmlAttribute()] + public double lat = 0; + /// + /// Äîëãîòà + /// + [XmlAttribute()] + public double lon = 0; + + public Stop() { } + + public Stop(string name, double lat, double lon) + { + this.name = name; + this.lat = lat; + this.lon = lon; + } + } + + /// + /// Ñâåäåíèÿ î ìàðøðóòå + /// + [Serializable] + public class Route + { + public Route() { } + + /// + /// Äëèíà ìàðøðóòà â êì + /// + public double driveLength = 0; + /// + /// ðàññòîÿíèå ìåæäó ïðîìåæóòî÷íûìè òî÷êàìè ìàðøðóòà + /// + [XmlArrayItem("dls")] + public double[] driveLengthSegments = new double[0]; + /// + /// Âðåìÿ â ïóòè â ìèí + /// + public double driveTime = 0; + /// + /// âðåìÿ ìåæäó ïðîìåæóòî÷íûìè òî÷êàìè ìàðøðóòà + /// + [XmlArrayItem("dts")] + public double[] driveTimeSegments = new double[0]; + /// + /// Âðåìÿ âûåçäà + /// + public DateTime startTime = DateTime.Now; + /// + /// Âðåìÿ ïðèáûòèÿ + /// + public DateTime finishTime = DateTime.Now; + /// + /// Ìàðøðóòíûå òî÷êè + /// + [XmlArrayItem("stop")] + public Stop[] stops = new Stop[0]; + /// + /// ïîëèëèíèÿ ìàðøðóòà + /// + [XmlArrayItem("p")] + public XYPoint[] polyline = new XYPoint[0]; + /// + /// èíäåêñ, óêàçûâàþùèé íà ýëåìåíò ìàññèâà polyline äëÿ êàæäîãî + /// ó÷àñòêà ìåæäó ïðîìåæóòî÷íûìè òî÷êàìè ìàðøðóòà + /// + [XmlArrayItem("ps")] + public int[] polylineSegments = new int[0]; + /// + /// èíñòðóêöèè + /// + [XmlArrayItem("i")] + public RoutePoint[] instructions = new RoutePoint[0]; + /// + /// èíäåêñ, óêàçûâàþùèé íà ýëåìåíò ìàññèâà instructions äëÿ êàæäîãî + /// ó÷àñòêà ìåæäó ïðîìåæóòî÷íûìè òî÷êàìè ìàðøðóòà + /// + [XmlArrayItem("is")] + public int[] instructionsSegments = new int[0]; + + /// + /// Îøèáêà, åñëè åñòü + /// + public string LastError = String.Empty; + } + + [Serializable] + public class NearRoad + { + public double distance; + public double lat; + public double lon; + public string name; + public string attributes; + public int region; + } + + /// + /// Òî÷êà ìàðøðóòà + /// + [Serializable] + public class XYPoint + { + /// + /// Äîëãîòà + /// + [XmlAttribute()] + public double x = 0; + /// + /// Øèðîòà + /// + [XmlAttribute()] + public double y = 0; + + public XYPoint(double x, double y) + { + this.x = x; + this.y = y; + } + + public XYPoint() { } + } + + /// + /// Èíñòðóêöèÿ ìàðøðóòà + /// + [Serializable] + public class RoutePoint + { + public RoutePoint() { } + + public RoutePoint(int no, double x, double y, double segmentLength, double segmentTime, double totalLength, DateTime totalTime) + { + this.no = no; + this.x = x; + this.y = y; + this.sLen = segmentLength; + this.sTime = segmentTime; + this.tLen = totalLength; + this.tTime = totalTime; + } + + /// + /// Íóìðàöèÿ ñ 1 + /// + [XmlAttribute()] + public int no = 0; + + /// + /// Èíñòðóêöèÿ1 + /// + public string iToDo = ""; + /// + /// Èíñòðóêöèÿ2 + /// + public string iToGo = ""; + /// + /// Èíñòðóêöèÿ1 + /// + public string iStreet = ""; + + /// + /// Äîëãîòà + /// + [XmlAttribute()] + public double x = 0; + /// + /// Øèðîòà + /// + [XmlAttribute()] + public double y = 0; + + /// + /// Âðåìÿ òåêóùåãî ñåãìåíòà â ìèí + /// + [XmlAttribute()] + public double sTime = 0; + + /// + /// Äëèíà òåêóùåãî ñåãìåíòà â êì + /// + [XmlAttribute()] + public double sLen = 0; + + /// + /// Âðåìÿ ïðèáûòèÿ â íà÷àëî ñåãìåíòà + /// + [XmlAttribute()] + public DateTime tTime = DateTime.Now; + + /// + /// Äëèíà îò íà÷àëà ìàðøðóòà äî ñåãìåíòà + /// + [XmlAttribute()] + public double tLen = 0; + } + } + + public static string GetCurrentExe() + { + string fname = System.Reflection.Assembly.GetExecutingAssembly().GetName().CodeBase.ToString(); + fname = fname.Replace("file:///", ""); + fname = fname.Replace("/", @"\"); + return fname; + } + } + + + [Serializable] + public class SvcConfig + { + /// + /// Exchange Protocol: tcp/remoting + /// + public string defProto = "tcp";// tcp/remoting + /// + /// Default Use Area: + /// one - only one preloaded region; + /// multiple - full map; + /// + public string defArea = "multiple"; // one/multiple + /// + /// Default URI + /// + // dkxce.Route.TCPSolver + public string defChannel = "dkxce.Route.TCPSolver"; + /// + /// Default RouteServer TCP Port + /// + public int defPort = 7755; + /// + /// Default Mode: + /// single - one preloaded thread for everyone + /// multithread - creates new object for each client + /// multiclient - create & preload multiple objects + /// + public string defMode = "single"; // single/multithread/multiclient + /// + /// multithread min threads count + /// + public byte minThreads = 2; // multithread min threads count + /// + /// multithread max threads count + /// + public byte maxThreads = 8; // multithread max threads count + /// + /// multithread/multiclient fixed threads count, use only if value more than 1 + /// + public int fixThreads = -1; + /// + /// multiclient objects count + /// + public byte mucObjects = 4; // multiclient objects count + /// + /// preload regions to all threads, used for multithread & multiclient modes + /// + private string _globalRegions = ""; + /// + /// preload regions to current thread, used for multithread & multiclient modes + /// + private string _threadRegions = "10"; // 10 - lipetsk, 11 - msk ,24 - spb + + private int[] _gr = new int[0]; + private int[] _tr = new int[0]; + + /// + /// Region IDs to preload for all threads (format: x,x,x,...,x) + /// + public string globalRegions + { + get + { + return _globalRegions; + } + set + { + _globalRegions = value; + _gr = new int[0]; + if (globalRegions == String.Empty) return; + + string[] gr = globalRegions.Split(new string[] { "," }, StringSplitOptions.RemoveEmptyEntries); + _gr = new int[gr.Length]; + for (int i = 0; i < gr.Length; i++) _gr[i] = Convert.ToInt32(gr[i].Trim()); + } + } + /// + /// Region IDs to preload for current thread (format: x,x,x...,x) + /// + public string threadRegions + { + get + { + return _threadRegions; + } + set + { + _threadRegions = value; + _tr = new int[0]; + if (threadRegions == String.Empty) return; + + string[] gr = threadRegions.Split(new string[] { "," }, StringSplitOptions.RemoveEmptyEntries); + _tr = new int[gr.Length]; + for (int i = 0; i < gr.Length; i++) _tr[i] = Convert.ToInt32(gr[i].Trim()); + } + } + + /// + /// Âûâîä èíôîðìàöèè î ïîòîêàõ â ñèñòåìíûé ëîã + /// + public bool threadLog = false; + + /// + /// Âûâîä èíôîðìàöèè î ïîòîêàõ â ïàìÿòü + /// + public bool threadLogMem = false; + + /// + /// Íîìåð ïîðòà HTTP-ñåðâåðà + /// + public int defHTTP = 80; + + public static SvcConfig Load() + { + return XMLSaved.Load(XMLSaved.GetCurrentDir() + @"\dkxce.Route.ServiceSolver.xml"); + } + + public static SvcConfig Load(string fileName) + { + return XMLSaved.Load(fileName); + } + + /// + /// TCP Protocol ? + /// + public bool ProtoTCP { get { return (defProto == "tcp") || (defProto == "dual"); } } + /// + /// Remoting Protocol + /// + public bool ProtoRemoting { get { return defProto == "remoting"; } } + /// + /// HTTP Protocol + /// + public bool ProtoHTTP { get { return (defProto == "http") || (defProto == "dual"); } } + /// + /// single mode ? + /// + public bool IsSingle { get { return defMode == "single"; } } + /// + /// multithread mode ? + /// + public bool IsMultiThread { get { return defMode == "multithread"; } } + /// + /// multiclient mode ? + /// + public bool IsMultiClient { get { return defMode == "multiclient"; } } + /// + /// get regions to preload for all threads + /// + public int[] IsGlobalRegions { get { return _gr; }} + /// + /// get regions to preload for current thread + /// + public int[] IsThreadRegions { get { return _tr; }} + /// + /// is region is preloaded to all threads ? + /// + /// + /// + public bool InGlobalRegions(int regionId) + { + if (_gr.Length == 0) return false; + foreach (int rid in _gr) if (rid == regionId) return true; + return false; + } + /// + /// is region is preloaded for current thread + /// + /// + /// + public bool InThreadRegions(int regionId) + { + if (_tr.Length == 0) return false; + foreach (int rid in _tr) if (rid == regionId) return true; + return false; + } + + /// + /// + /// + public DirectoryXML MultiRegion = new DirectoryXML(); + + /// + /// Path to single graph file (.rt) + /// + public string OneRegion = "017.rt"; // + + [XmlArray("banlist"), XmlArrayItem("ip")] + public List IPBanList; + + [XmlElement("http.authorization")] + public bool authorization = false; + [XmlArray("http.users"), XmlArrayItem("user")] + public List Users; + [XmlElement("http.showhost")] + public bool http_showhost = false; + [XmlElement("http.showip")] + public bool http_showip = false; + [XmlElement("http.description")] + public string http_description = null; + [XmlElement("http.html")] + public string http_html = null; + [XmlArray("http.licenses"), XmlArrayItem("license")] + public List http_licenses; + } + + [Serializable] + public class UserPass + { + [XmlAttribute("name")] + public string user; + [XmlAttribute("pass")] + public string pass; + } + + [Serializable] + public class DirectoryXML + { + public string Graphs = "GRAPHS"; + public string Regions = "Regions"; + //public string RGNodes = "RGNodes"; + public string RGWays = "RGWays"; + + public string GraphDirectory() { return Path.IsPathRooted(Graphs) ? Graphs : XMLSaved.GetCurrentDir() + Graphs; } + public string RegionsDirectory() { return Path.IsPathRooted(Regions) ? Regions : XMLSaved.GetCurrentDir() + Regions; } + //public string RGNodesDirectory() { return Path.IsPathRooted(RGNodes) ? RGNodes : XMLSaved.GetCurrentDir() + RGNodes; } + public string RGWaysDirectory() { return Path.IsPathRooted(RGWays) ? RGWays : XMLSaved.GetCurrentDir() + RGWays; } + } + + [Serializable] + public class HTTPLicense + { + [XmlAttribute("key")] + public string key; + [XmlAttribute("expires")] + public DateTime expires; + [XmlAttribute("ip")] + public string ip; + } + + /// + /// Licenses Infos + /// + [Serializable] + public class Licenses + { + /// + /// License Keys + /// + public List keys = new List(); + + /// + /// Key Expires + /// + public List expires = new List(); + + public class Crypto + { + private static byte[] _salt = Encoding.ASCII.GetBytes("o6820135kbM8c7"); + + /// + /// Encrypt the given string using AES. The string can be decrypted using + /// DecryptStringAES(). The sharedSecret parameters must match. + /// + /// The text to encrypt. + /// A password used to generate a key for encryption. + public static string EncryptStringAES(string plainText, string sharedSecret) + { + if (string.IsNullOrEmpty(plainText)) + throw new ArgumentNullException("plainText"); + if (string.IsNullOrEmpty(sharedSecret)) + throw new ArgumentNullException("sharedSecret"); + + string outStr = null; // Encrypted string to return + RijndaelManaged aesAlg = null; // RijndaelManaged object used to encrypt the data. + + try + { + // generate the key from the shared secret and the salt + Rfc2898DeriveBytes key = new Rfc2898DeriveBytes(sharedSecret, _salt); + + // Create a RijndaelManaged object + aesAlg = new RijndaelManaged(); + aesAlg.Key = key.GetBytes(aesAlg.KeySize / 8); + + // Create a decrytor to perform the stream transform + ICryptoTransform encryptor = aesAlg.CreateEncryptor(aesAlg.Key, aesAlg.IV); + + // Create the streams used for encryption + using (MemoryStream msEncrypt = new MemoryStream()) + { + // prepend the IV + msEncrypt.Write(BitConverter.GetBytes(aesAlg.IV.Length), 0, sizeof(int)); + msEncrypt.Write(aesAlg.IV, 0, aesAlg.IV.Length); + using (CryptoStream csEncrypt = new CryptoStream(msEncrypt, encryptor, CryptoStreamMode.Write)) + { + using (StreamWriter swEncrypt = new StreamWriter(csEncrypt)) + { + //Write all data to the stream + swEncrypt.Write(plainText); + } + } + outStr = Convert.ToBase64String(msEncrypt.ToArray()); + } + } + finally + { + // Clear the RijndaelManaged object. + if (aesAlg != null) + aesAlg.Clear(); + } + + // Return the encrypted bytes from the memory stream. + return outStr; + } + + /// + /// Decrypt the given string. Assumes the string was encrypted using + /// EncryptStringAES(), using an identical sharedSecret. + /// + /// The text to decrypt. + /// A password used to generate a key for decryption. + public static string DecryptStringAES(string cipherText, string sharedSecret) + { + if (string.IsNullOrEmpty(cipherText)) + throw new ArgumentNullException("cipherText"); + if (string.IsNullOrEmpty(sharedSecret)) + throw new ArgumentNullException("sharedSecret"); + + // Declare the RijndaelManaged object + // used to decrypt the data. + RijndaelManaged aesAlg = null; + + // Declare the string used to hold + // the decrypted text. + string plaintext = null; + + try + { + // generate the key from the shared secret and the salt + Rfc2898DeriveBytes key = new Rfc2898DeriveBytes(sharedSecret, _salt); + + // Create the streams used for decryption. + byte[] bytes = Convert.FromBase64String(cipherText); + using (MemoryStream msDecrypt = new MemoryStream(bytes)) + { + // Create a RijndaelManaged object + // with the specified key and IV. + aesAlg = new RijndaelManaged(); + aesAlg.Key = key.GetBytes(aesAlg.KeySize / 8); + // Get the initialization vector from the encrypted stream + aesAlg.IV = ReadByteArray(msDecrypt); + // Create a decrytor to perform the stream transform. + ICryptoTransform decryptor = aesAlg.CreateDecryptor(aesAlg.Key, aesAlg.IV); + using (CryptoStream csDecrypt = new CryptoStream(msDecrypt, decryptor, CryptoStreamMode.Read)) + { + using (StreamReader srDecrypt = new StreamReader(csDecrypt)) + + // Read the decrypted bytes from the decrypting stream + // and place them in a string. + plaintext = srDecrypt.ReadToEnd(); + } + } + } + finally + { + // Clear the RijndaelManaged object. + if (aesAlg != null) + aesAlg.Clear(); + } + + return plaintext; + } + + private static byte[] ReadByteArray(Stream s) + { + byte[] rawLength = new byte[sizeof(int)]; + if (s.Read(rawLength, 0, rawLength.Length) != rawLength.Length) + { + throw new SystemException("Stream did not contain properly formatted byte array"); + } + + byte[] buffer = new byte[BitConverter.ToInt32(rawLength, 0)]; + if (s.Read(buffer, 0, buffer.Length) != buffer.Length) + { + throw new SystemException("Did not read byte array properly"); + } + + return buffer; + } + } + } + + + ////////////////////////////////////// + + /// + /// Direct Route Solving HTTP Server (not through NMS Auth) + /// + public class RouteHTTPListener + { + public const string _ServerTree = "-V4-win32"; + public const string _Server = "dkxce.Route.Server/21.12.21.23-V4-win32"; + private const string _ServerName = "dkxce.Route.ServiceSolver"; + private const string _ServerOwner = "milokz@gmail.com"; + public const string _ServerCustomHeaders = "Service-Mods: GARMIN, OSM2SHP, WATER\r\nService-Info: Debug\r\n"; + + private Thread mainThread = null; + private TcpListener mainListener = null; + private IPAddress ListenIP = IPAddress.Any; + private int ListenPort = 80; + private bool isRunning = false; + private int MaxThreads = 1; + private int ThreadsCount = 0; + + private IDictionary METHODS = new Dictionary(); + + private Licenses lics = null; + + public RouteHTTPListener(int Port, int MaxThreads) + { + InitMethods(); + this.ListenPort = Port; + this.MaxThreads = MaxThreads; + + lics = new Licenses(); + #if LICENSE + { + // default: `dkxce.Route.ServiceSolver.lic` + string licFile = RouteTCPListenter.GetCurrentExe().Remove(RouteTCPListenter.GetCurrentExe().Length - 4) + ".lic"; + // Navicom Web HTTP RouteSolver.dll Key = D6AEA3EC848644258DCD06A781B2C036 + // Navicom Route Map Test Key = D6AEA3EC848644258DCD06A781B2C036 + // TO SAVE LICENSES USE `nmsRouteLicenseFileTool` + + // fix if system date changed wrong + if (DateTime.UtcNow < System.IO.File.GetLastWriteTimeUtc(RouteTCPListenter.GetCurrentExe())) throw new Exception("License Error [A]"); + if (!File.Exists(licFile)) throw new Exception("License Error [B]"); + if (DateTime.UtcNow < System.IO.File.GetLastWriteTimeUtc(licFile)) throw new Exception("License Error [C]"); + + System.IO.FileStream fs; + try + { + fs = new FileStream(licFile, FileMode.Open); + } + catch { throw new Exception("License Error [D0]"); }; + + try + { + byte[] buffer = new byte[65536]; + ICSharpCode.SharpZipLib.GZip.GZipInputStream ins = new ICSharpCode.SharpZipLib.GZip.GZipInputStream(fs); + int length = ins.Read(buffer, 0, buffer.Length); + ins.Close(); + fs.Close(); + string coded = System.Text.Encoding.ASCII.GetString(buffer, 0, length); + string xml = Licenses.Crypto.DecryptStringAES(coded, "zSx1b0Izlk"); + lics = XMLSaved.LoadText(xml); + } + catch { throw new Exception("License Error [D]"); }; + + + if (lics.keys.Count == 0) throw new Exception("License Error [E]"); + if (lics.keys.IndexOf("") >= 0) throw new Exception("License Error [F]"); + }; + #endif + } + + public bool Running { get { return isRunning; } } + public IPAddress ServerIP { get { return ListenIP; } } + public int ServerPort { get { return ListenPort; } } + + public void Dispose() { Stop(); } + ~RouteHTTPListener() { Dispose(); } + + public virtual void Start() + { + if (isRunning) throw new Exception("Server Already Running!"); + + isRunning = true; + mainThread = new Thread(MainThread); + mainThread.Start(); + } + + private void MainThread() + { + mainListener = new TcpListener(this.ListenIP, this.ListenPort); + mainListener.Start(); + while (isRunning) + { + try + { + TcpClient client = mainListener.AcceptTcpClient(); + if (RouteThreader.IPBanList.Contains(((IPEndPoint)client.Client.RemoteEndPoint).Address.ToString())) + { + client.Close(); + continue; + }; + + if (this.MaxThreads > 1) // multithread or multiclient + { + while ((this.ThreadsCount >= this.MaxThreads) && isRunning) // wait for any closed thread + System.Threading.Thread.Sleep(5); + if (!isRunning) break; // break if stopped + Thread thr = new Thread(GetClient); // create new thread for new client + thr.Start(client); + } + else // single thread + GetClient(client); + } + catch { Thread.Sleep(1); }; + }; + } + + public virtual void Stop() + { + if (!isRunning) return; + + isRunning = false; + + if (mainListener != null) mainListener.Stop(); + mainListener = null; + + mainThread.Join(); + mainThread = null; + } + + public void GetClient(object data) + { + this.ThreadsCount++; + TcpClient Client = (TcpClient)data; + System.Text.Encoding defEncoding = System.Text.Encoding.GetEncoding(1251); + + string Request = ""; + bool utf8 = false; + byte[] Buffer = new byte[4096]; + int Count = 0; + bool CRLFok = false; + int CRLFaf = 0; + + try + { + while ((Count = Client.GetStream().Read(Buffer, 0, Buffer.Length)) > 0) + { + int copyTo = Count; + if (Count > 4) + { + for (int i = 3; i < Count; i++) + if ((Buffer[i - 3] == 13) && (Buffer[i - 2] == 10) && (Buffer[i - 1] == 13) && (Buffer[i] == 10)) + { + copyTo = i + 1; + CRLFok = true; + i = int.MaxValue - 1; + }; + }; + if (CRLFok && (copyTo != Count)) CRLFaf = Count - copyTo; + Request += Encoding.GetEncoding(1251).GetString(Buffer, 0, copyTo); + + int posEncoding = -1; + bool hasEncoding = (posEncoding = Request.IndexOf("charset=")) >= 0; + if (hasEncoding) + { + try + { + int till = Request.IndexOf("\r", posEncoding); + if (till < 0) till = Request.IndexOf("\n", posEncoding); + string txtEncoding = Request.Substring(posEncoding + 8, till - posEncoding - 8).Trim(); + int codEnc = 0; + if (int.TryParse(txtEncoding, out codEnc)) + defEncoding = System.Text.Encoding.GetEncoding(codEnc); + else + defEncoding = System.Text.Encoding.GetEncoding(txtEncoding); + if (defEncoding == null) defEncoding = System.Text.Encoding.UTF8; + } + catch { defEncoding = System.Text.Encoding.UTF8; }; + }; + + if (CRLFok) + Request += Encoding.GetEncoding(1251).GetString(Buffer, copyTo, Count - copyTo); + else + Request += defEncoding.GetString(Buffer, copyTo, Count - copyTo); + if (Request.IndexOf("\r\n\r\n") >= 0 || Request.Length > 4096) { break; }; + }; + } + catch { }; // READ REQUEST ERROR + + if (Count > 0) // PARSE REQUEST ERROR + try { ReceiveData(Client, Request, defEncoding, CRLFaf); } + catch (Exception ex) + { + XMLSaved.AddErr2SysLog("ClientThread Exception: " + ex.ToString()); + try + { + HttpClientSendError(Client, 500); + } + catch (Exception ex2) + { + XMLSaved.AddErr2SysLog("ClientThread Exception: " + ex2.ToString()); + }; + }; + + Client.Close(); + this.ThreadsCount--; + } + + #region Private ReceiveData Methods + private void ReceiveData_HTTPDescription(Stream outTo) + { + byte[] Buffer = Encoding.ASCII.GetBytes( + "HTTP/1.1 200 " + ((HttpStatusCode)200).ToString() + "\r\n" + + "Server: " + _Server + "\r\n" + + "Service-Name: " + _ServerName + "\r\n" + + "Service-Owner: " + _ServerOwner + "\r\n" + + _ServerCustomHeaders + + "Connection: close\r\n" + + "Content-Type: text/html; charset=windows-1251\r\n" + + "\r\n"); // charset=utf-8 + outTo.Write(Buffer, 0, Buffer.Length); + + FileStream fs = new FileStream(XMLSaved.GetCurrentDir() + @"\dkxce.Route.ServiceSolver.Web.desc", FileMode.Open, FileAccess.Read); + byte[] buff = new byte[fs.Length]; + fs.Read(buff, 0, buff.Length); + fs.Close(); + + outTo.Write(buff, 0, buff.Length); + } + + private void ReceiveDate_GetFile(Stream outTo, string fileName, string contentType) + { + byte[] Buffer = Encoding.ASCII.GetBytes( + "HTTP/1.1 200 " + ((HttpStatusCode)200).ToString() + "\r\n" + + "Server: " + _Server + "\r\n" + + "Service-Name: " + _ServerName + "\r\n" + + "Service-Owner: " + _ServerOwner + "\r\n" + + _ServerCustomHeaders + + "Connection: close\r\n" + + "Content-Type: "+contentType+"\r\n" + + "\r\n"); // charset=utf-8 + outTo.Write(Buffer, 0, Buffer.Length); + + FileStream fs = new FileStream(XMLSaved.GetCurrentDir() + @"\" + fileName, FileMode.Open, FileAccess.Read); + byte[] buff = new byte[fs.Length]; + fs.Read(buff, 0, buff.Length); + fs.Close(); + + outTo.Write(buff, 0, buff.Length); + } + + private Dictionary path2out = new Dictionary(); + private void StoreRegionNames(string l2w) + { + if (String.IsNullOrEmpty(l2w)) return; + + lock (path2out) + { + string[] spl = l2w.Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries); + for (int i = 0; i < spl.Length; i++) + { + string rt = spl[i]; + if (rt.IndexOf("-") > 0) + rt = rt.Substring(0, rt.IndexOf("-")).Trim(); + if (!path2out.ContainsKey(rt)) + path2out.Add(rt, null); + }; + }; + } + + private string GetRegionsAreAdditRegInfoText(string path, string reg) + { + string s = reg; + int di = s.IndexOf("."); + if (di > 0) + s = s.Substring(0, di); + else + while (s.Length < 3) s = "0" + s; + + string fAddit = path + @"\" + s + ".addit.xml"; + if (File.Exists(fAddit)) + { + string name = reg; + string styp = ""; + try + { + dkxce.Route.Classes.AdditionalInformation ai = XMLSaved.Load(fAddit); + if (!String.IsNullOrEmpty(ai.RegionName)) + name = ai.RegionName; + if (!String.IsNullOrEmpty(ai.SourceType)) + styp = " (" + ai.SourceType + ")"; + if (!String.IsNullOrEmpty(ai.TestMap)) + { + return String.Format("
{1}{2}", ai.TestMap, name, styp); + }; + } + catch (Exception) + { + }; + }; + return ""; + } + + private string GetRegionsAreText() + { + if (path2out.Count == 0) return ""; + if (RouteThreader.mem.config == null) return ""; + + string res = ""; + lock (path2out) + { + Dictionary tmPath = new Dictionary(); + bool updateValues = false; + foreach (KeyValuePair kvp in path2out) + { + string val = kvp.Value; + if (val == null) + { + val = GetRegionsAreAdditRegInfoText(RouteThreader.mem.GetGraphsPath(), kvp.Key); + updateValues = true; + }; + tmPath.Add(kvp.Key, val); + if (String.IsNullOrEmpty(val)) continue; + res += String.Format("{0} - {1}
\r\n", kvp.Key, val); + }; + if(updateValues) path2out = tmPath; + }; + if (String.IsNullOrEmpty(res)) return ""; else return "
\r\n" + res; + } + + private void ReceiveData_ServiceStatus(Stream outTo) + { + string modln = ""; + if (RouteThreader.mem.ObjectsData != null) + { + string[] mod = RouteThreader.mem.ObjectsData.Split(new string[] { ";" }, StringSplitOptions.RemoveEmptyEntries); + for (int i = 0; i < mod.Length; i++) + { + modln += ""; + string[] ln = mod[i].Split(new string[] { ":" }, StringSplitOptions.None); + for (int l = 0; l < ln.Length; l++) + { + if(l > 0) StoreRegionNames(ln[l]); + modln += ""; + }; + modln += ""; + }; + modln += "
ObjectIDGlobalRegionsThreadRegionsSessionRegions
" + ln[l] + "
"; + }; + string RA = ""; + try { RA = GetRegionsAreText(); } + catch (Exception) { }; + + string dInfo = "Service Params: "; + }; + + byte[] Buffer = Encoding.GetEncoding(1251).GetBytes( + "HTTP/1.1 200 " + ((HttpStatusCode)200).ToString() + "\r\n" + + "Server: " + _Server + "\r\n" + + "Service-Name: " + _ServerName + "\r\n" + + "Service-Owner: " + _ServerOwner + "\r\n" + + _ServerCustomHeaders + + "Connection: close\r\n" + + "Content-type: text/html; charset=windows-1251\r\n\r\n" + + + "Server: " + _Server + "
\r\n" + + "Service-Name: " + _ServerName + "
\r\n" + + dInfo + + "
" + + + "" + + "
Protocol:
Area:
Mode:
Threads Regions Cache Size:
Threads Regions Cache:
" + + RouteThreader.mem.Protocol + "
" + + RouteThreader.mem.Area + "
" + + RouteThreader.mem.Mode + "
" + + (((double)(RouteThreader.mem.ThreadRegionsCacheSize)) / 1024 / 1024).ToString("0.00").Replace(",", ".") + "MB
" + + RouteThreader.mem.ThreadRegionsCache + "
" + + + "
   Dynamic Pool:
Max Solve Time:
Max Wait Time:
Global Regions Cache Size:
Global Regions Cache:
" + + RouteThreader.mem.DynamicPool.ToString() + "
" + + RouteThreader.mem.MaxSolveTime.ToString() + "
" + + RouteThreader.mem.MaxWaitTime.ToString() + "
" + + (((double)RouteThreader.mem.GlobalRegionsCacheSize) / 1024 / 1024).ToString("0.00").Replace(",", ".") + "MB
" + + RouteThreader.mem.GlobalRegionsCache + "
" + + + "
   Objects Used:
Objects Idle:
Threads Alive:
Threads Counted:
Threads Max Alive:
" + + RouteThreader.mem.ObjectsUsed.ToString() + "
" + + RouteThreader.mem.ObjectsIdle.ToString() + "
" + + RouteThreader.mem.ThreadsAlive.ToString() + "
" + + RouteThreader.mem.ThreadsCounted.ToString() + "
" + + RouteThreader.mem.ThreadsMaxAlive.ToString() + + + "
" + + + "Objects Data:
" + modln + + + (String.IsNullOrEmpty(RA) ? "" : "
Regions are: " + RA) + + + (((RouteThreader.mem.config != null) && (!String.IsNullOrEmpty(RouteThreader.mem.config.http_html))) ? "
" + RouteThreader.mem.config.http_html : "") + + + "
"+ + "Started Time: " + RouteThreader.mem.startedAt.ToString("HH:mm:ss dd.MM.yyyy") + " UTC
\r\n" + + "Current Time: " + DateTime.UtcNow.ToString("HH:mm:ss dd.MM.yyyy") + " UTC
\r\n" + + "Running Time: " + RunningToString(DateTime.UtcNow, RouteThreader.mem.startedAt) + "
\r\n" + + "
" + + "Main page | Documentation" + + + ""); + outTo.Write(Buffer, 0, Buffer.Length); + } + + #endregion + + private string RunningToString(DateTime till, DateTime since) + { + TimeSpan ts = till.Subtract(since); + return String.Format("{4:00}:{5:00}:{6:00} {3:00}.{1:00}:{0:0000} UTC - {2} weeks", (int)(ts.Days / 365.2425), (int)(ts.Days / 30.436875), (int)ts.TotalDays / 7, ts.Days, ts.Hours, ts.Minutes, ts.Seconds); + } + + // BEGIN METHOD RECEIVE DATE + public void ReceiveData(TcpClient Client, string Request, System.Text.Encoding defEncoding, int bodyBytesCopied) + { + // PARSE REQUEST + byte methodIS = 3; // 3-Get, 4-Post, 7-OPTIONS + int x1 = Request.IndexOf("GET"); + int x2 = Request.IndexOf("HTTP"); + if ((x1 < 0) || (x1 > x2)) { x1 = Request.IndexOf("POST"); if (x1 >= 0) methodIS = 4; }; + if ((x1 < 0) || (x1 > x2)) { x1 = Request.IndexOf("OPTIONS"); if (x1 >= 0) methodIS = 7; }; + string query = ""; + if ((x1 >= 0) && (x2 >= 0) && (x2 > x1)) query = Request.Substring(x1 + methodIS, x2 - methodIS).Trim(); + + // ONLY ALLOWED PATH + string[] qpc = query.Split(new char[] { '?' }, 2); + if ((qpc.Length == 0) || (qpc[0].ToLower().IndexOf("/nms") < 0)) + { + HttpClientSendError(Client, 501); + return; + }; + + qpc[0] = qpc[0].Remove(0, 4); + if ((qpc[0].Length > 0) && (qpc[0][0] == '/')) qpc[0] = qpc[0].Remove(0, 1); + if ((qpc[0].Length > 0) && (qpc[0][0] == '\\')) qpc[0] = qpc[0].Remove(0, 1); + + string authorize = ""; + string authUser = ""; + string authPass = ""; + string xFrw4 = ""; + + IDictionary Cookies = new Dictionary(); + IDictionary Headers = new Dictionary(); + { + int iofbr = Request.IndexOf("\r\n"); int iofprev = 0; string cline = ""; + while ((iofbr = Request.IndexOf("\r\n", iofprev = iofbr + 2)) > 0) + { + cline = Request.Substring(iofprev, iofbr - iofprev); + if (!string.IsNullOrEmpty(cline)) + { + string[] kv = cline.Split(new char[] { ':' }, 2); + Headers[kv[0]] = kv[1].Trim(); + if (kv[0] == "X-Forwarded-For") + { + try + { + xFrw4 = kv[1].Trim().Split(new char[] { ':' }, 2)[0]; + } + catch { }; + }; + if (kv[0] == "Authorization") + { + try + { + string cup = kv[1].Trim(); + if (cup.IndexOf("Basic") == 0) + authorize = Encoding.UTF8.GetString(Convert.FromBase64String(cup.Substring(6))); + } + catch { }; + }; + if ((kv[0] == "Cookie") && (kv.Length > 1) && (!string.IsNullOrEmpty(kv[1]))) + { + string[] cks = kv[1].Trim().Split(new char[] { ';' }, StringSplitOptions.RemoveEmptyEntries); + foreach (string ck in cks) + { + string[] c = ck.Trim().Split(new char[] { '=' }, 2); + if (c.Length == 2) + Cookies[c[0].Trim()] = c[1].Trim(); + }; + }; + }; + }; + }; + + if (RouteThreader.authorization) + { + if (string.IsNullOrEmpty(authorize)) + { + HttpClientSendError(Client, 401); + return; + } + else + { + string[] up = authorize.Split(new char[] { ':' }, 2); + if ((up == null) || (up.Length < 2)) + { + HttpClientSendError(Client, 401); + return; + }; + authUser = up[0]; + authPass = up[1]; + bool validu = false; + if ((RouteThreader.Users != null) && (RouteThreader.Users.Count > 0)) + foreach (UserPass uspa in RouteThreader.Users) + if ((uspa.user == authUser) && (uspa.pass == authPass)) + { + validu = true; + break; + }; + if (!validu) // check valid user + { + HttpClientSendError(Client, 401); + return; + }; + }; + }; + + string Body = ""; + int BL = bodyBytesCopied; + { + string cl = "Content-Length:"; + int bytesCount = 0; + if (Request.IndexOf(cl) > 0) + { + int iofcl = Request.IndexOf(cl); + cl = Request.Substring(iofcl + cl.Length, Request.IndexOf("\r", iofcl + cl.Length) - iofcl - cl.Length); + int.TryParse(cl.Trim(), out bytesCount); + }; + if (bytesCount > 0) + { + int iofbrbr = Request.IndexOf("\r\n\r\n"); + if (iofbrbr > 0) + Body = Request.Substring(iofbrbr + 4); + if (iofbrbr < 0) + { + iofbrbr = Request.IndexOf("\n\n"); + if (iofbrbr > 0) + Body = Request.Substring(iofbrbr + 2); + }; + + if (BL < bytesCount) + { + Stream stream = Client.GetStream(); + byte[] Buffer = new byte[3145728]; + int Count = 0; + try + { + while ((Count = stream.Read(Buffer, 0, ((bytesCount - BL) > Buffer.Length) ? Buffer.Length : bytesCount - BL)) > 0) + { + Body += defEncoding.GetString(Buffer, 0, Count); + BL += Count; + if (BL == bytesCount) break; + }; + } + catch (Exception) { Body = ""; }; + }; + }; + }; + + ClientRequest clientRequest = new ClientRequest(Client, Headers, Cookies, Request, qpc[0].ToLower(), (qpc.Length > 1 ? qpc[1] : ""), Body); + if (string.IsNullOrEmpty(clientRequest.method)) clientRequest.method = "null"; + + // TEST + { + if (query.StartsWith("/nms/web")) + { + PassFileToClientByRequest(clientRequest, query, XMLSaved.GetCurrentDir() + @"\WEB\", "/nms/web/"); + //HttpClientSendError(Client, 200, query); + return; + }; + }; + + // API, call methods + if (METHODS.Keys.Contains(clientRequest.method)) + if (METHODS[clientRequest.method].implementation(clientRequest)) + { + Client.Close(); + return; + }; + + // method is not supported + HttpClientSendError(Client, 406, "HTTP or API METHOD NOT SUPPORTED (Only GET/POST allowed)"); + return; + } + // END METHOD RECEIVE DATE + + protected virtual void PassFileToClientByRequest(ClientRequest Request, string query, string HomeDirectory, string subPath) + { + string path = query; + if (!String.IsNullOrEmpty(subPath)) + { + int i = path.IndexOf(subPath); + if (i >= 0) path = path.Remove(i, subPath.Length); + }; + path = path.Replace("/", @"\"); + if (path.IndexOf("/./") >= 0) { HttpClientSendError(Request.client, 400); return; }; + if (path.IndexOf("/../") >= 0) { HttpClientSendError(Request.client, 400); return; }; + if (path.IndexOf("/.../") >= 0) { HttpClientSendError(Request.client, 400); return; }; + path = HomeDirectory + @"\" + path; + while (path.IndexOf(@"\\") > 0) path = path.Replace(@"\\", @"\"); + string fName = System.IO.Path.GetFileName(path); + string dName = System.IO.Path.GetDirectoryName(path); + if ((String.IsNullOrEmpty(dName)) && (String.IsNullOrEmpty(fName)) && (path.EndsWith(@":\")) && (Path.IsPathRooted(path))) dName = path; + if (!String.IsNullOrEmpty(fName)) + { + if (!File.Exists(path)) + { + HttpClientSendError(Request.client, 404); + return; + } + else + { + HttpClientSendFile(Request.client, path, null, 200, null); + }; + } + else if (!String.IsNullOrEmpty(dName)) + { + if (!Directory.Exists(path)) + { + HttpClientSendError(Request.client, 404); + return; + } + else + { + // load default file + { + List files = new List(Directory.GetFiles(path, "index.*", SearchOption.TopDirectoryOnly)); + foreach (string file in files) + { + string fExt = Path.GetExtension(file); + if (fExt == ".html") { HttpClientSendFile(Request.client, file, null, 200, null); return; }; + if (fExt == ".dhtml") { HttpClientSendFile(Request.client, file, null, 200, null); return; }; + if (fExt == ".htmlx") { HttpClientSendFile(Request.client, file, null, 200, null); return; }; + if (fExt == ".xhtml") { HttpClientSendFile(Request.client, file, null, 200, null); return; }; + if (fExt == ".txt") { HttpClientSendFile(Request.client, file, null, 200, null); return; }; + }; + }; + { + string html = ""; + if (true) // AllowGetDirs + { + html += String.Format(" {0}
\n\r", ".."); + string[] dirs = Directory.GetDirectories(path); + if (dirs != null) Array.Sort(dirs); + foreach (string dir in dirs) + { + DirectoryInfo di = new DirectoryInfo(dir); + if ((di.Attributes & FileAttributes.Hidden) > 0) continue; + string sPath = dir.Substring(dir.LastIndexOf(@"\") + 1); + html += String.Format("{0}
\n\r", sPath, UrlEscape(sPath)); + }; + }; + { + string[] files = Directory.GetFiles(path, "*", SearchOption.TopDirectoryOnly); + if (files != null) Array.Sort(files); + foreach (string file in files) + { + FileInfo fi = new FileInfo(file); + string sPath = Path.GetFileName(file); + html += String.Format("{0} - {2}, MDF: {3}
\n\r", sPath, UrlEscape(sPath), ToFileSize(fi.Length), fi.LastWriteTime); + }; + }; + html += ""; + HttpClientSendError(Request.client, 200, html); + return; + }; + }; + }; + HttpClientSendError(Request.client, 400); + } + + protected virtual void HttpClientSendFile(TcpClient Client, string fileName, Dictionary dopHeaders, int ResponseCode, string ContentType) + { + FileInfo fi = new FileInfo(fileName); + + string header = "HTTP/1.1 " + ResponseCode.ToString() + "\r\n"; + + // Main Headers + // Dop Headers + if (dopHeaders != null) + foreach (KeyValuePair kvp in dopHeaders) + header += String.Format("{0}: {1}\r\n", kvp.Key, kvp.Value); + + ContentType = GetMemeType(fi.Extension.ToLower()); + header += "Content-type: " + ContentType + "\r\n"; + header += "Content-Length: " + fi.Length.ToString() + "\r\n"; + header += "\r\n"; + + List response = new List(); + response.AddRange(Encoding.GetEncoding(1251).GetBytes(header)); + Client.GetStream().Write(response.ToArray(), 0, response.Count); + + // copy + byte[] buff = new byte[65536]; + int bRead = 0; + FileStream fs = new FileStream(fileName, FileMode.Open, FileAccess.Read); + while (fs.Position < fs.Length) + { + bRead = fs.Read(buff, 0, buff.Length); + Client.GetStream().Write(buff, 0, bRead); + }; + fs.Close(); + // + + Client.GetStream().Flush(); + //Client.Client.Close(); + //Client.Close(); + } + + public static string UrlEscape(string str) + { + return System.Uri.EscapeDataString(str.Replace("+", "%2B")); + } + + public static string UrlUnescape(string str) + { + return System.Uri.UnescapeDataString(str).Replace("%2B", "+"); + } + + public static string ToFileSize(double value) + { + string[] suffixes = { "bytes", "KB", "MB", "GB", "TB", "PB", "EB", "ZB", "YB" }; + for (int i = 0; i < suffixes.Length; i++) + { + if (value <= (Math.Pow(1024, i + 1))) + { + return ThreeNonZeroDigits(value / + Math.Pow(1024, i)) + + " " + suffixes[i]; + }; + }; + return ThreeNonZeroDigits(value / Math.Pow(1024, suffixes.Length - 1)) + " " + suffixes[suffixes.Length - 1]; + } + + private static string ThreeNonZeroDigits(double value) + { + if (value >= 100) + { + // No digits after the decimal. + return value.ToString("0,0"); + } + else if (value >= 10) + { + // One digit after the decimal. + return value.ToString("0.0"); + } + else + { + // Two digits after the decimal. + return value.ToString("0.00"); + } + } + + public static string GetMemeType(string fileExt) + { + // https://snipp.ru/handbk/mime-list + switch (fileExt) + { + case ".pdf": return "application/pdf"; + case ".djvu": return "image/vnd.djvu"; + case ".zip": return "application/zip"; + case ".doc": return "application/msword"; + case ".docx": return "application/msword"; + case ".mp3": return "audio/mpeg"; + case ".m3u": return "audio/x-mpegurl"; + case ".wav": return "audio/x-wav"; + case ".gif": return "image/gif"; + case ".bmp": return "image/bmp"; + case ".psd": return "image/vnd.adobe.photoshop"; + case ".jpg": return "image/jpeg"; + case ".jpeg": return "image/jpeg"; + case ".png": return "image/png"; + case ".svg": return "image/svg"; + case ".tiff": return "image/tiff"; + case ".css": return "text/css"; + case ".csv": return "text/csv"; + case ".html": return "text/html"; + case ".htmlx": return "text/html"; + case ".dhtml": return "text/html"; + case ".xhtml": return "text/html"; + case ".js": return "application/javascript"; + case ".json": return "application/json"; + case ".txt": return "text/plain"; + case ".md": return "text/plain"; + case ".php": return "text/php"; + case ".xml": return "text/xml"; + case ".mpg": return "video/mpeg"; + case ".mpeg": return "video/mpeg"; + case ".mp4": return "video/mp4"; + case ".ogg": return "video/ogg"; + case ".avi": return "video/x-msvideo"; + case ".rar": return "application/x-rar-compresse"; + default: return "application/octet-stream"; + }; + } + + #region HttpClientSend + public virtual void HttpClientSendError(TcpClient Client, int Code) + { + HttpClientSendError(Client, Code, ""); + } + public virtual void HttpClientSendError(TcpClient Client, int Code, string data) + { + // Ïîëó÷àåì ñòðîêó âèäà "200 OK" + // HttpStatusCode õðàíèò â ñåáå âñå ñòàòóñ-êîäû HTTP/1.1 + string CodeStr = Code.ToString() + " " + ((HttpStatusCode)Code).ToString(); + // Êîä ïðîñòîé HTML-ñòðàíè÷êè + string Html = "

" + CodeStr + "

" + data + ""; + // Íåîáõîäèìûå çàãîëîâêè: îòâåò ñåðâåðà, òèï è äëèíà ñîäåðæèìîãî. Ïîñëå äâóõ ïóñòûõ ñòðîê - ñàìî ñîäåðæèìîå + string Str = + "HTTP/1.1 " + CodeStr + "\r\n"+ + "Server: " + _Server + "\r\n" + + "Service-Name: " + _ServerName + "\r\n" + + "Service-Owner: " + _ServerOwner + "\r\n" + + _ServerCustomHeaders + + #if LICENSE + "Service-RLK: enabled\r\n"+ + #else + "Service-RLK: disabled\r\n" + + #endif + (Code == 401 ? "WWW-Authenticate: Basic realm=\"Need authorizate\"\r\n" : "") + + "Connection: close\r\n" + + "Content-type: text/html\r\n"+ + "Content-Length:" + Html.Length.ToString() + "\r\n\r\n" + Html; + // Ïðèâåäåì ñòðîêó ê âèäó ìàññèâà áàéò + byte[] Buffer = Encoding.ASCII.GetBytes(Str); + // Îòïðàâèì åãî êëèåíòó + Client.GetStream().Write(Buffer, 0, Buffer.Length); + // Çàêðîåì ñîåäèíåíèå + Client.Close(); + } + + public virtual void HttpClientSendData(ClientRequest Client, int Code, byte[] data, string headers, string contentType) + { + byte[] Buffer = Encoding.ASCII.GetBytes( + GetStandardHTTPResponseHeader(Client, Code) + + (string.IsNullOrEmpty(headers) ? "" : headers + (headers.EndsWith("\n") ? "" : "\r\n")) + + "Content-Type: " + contentType + "\r\n" + + "Content-Length:" + data.Length.ToString() + "\r\n" + + "\r\n"); + Client.client.GetStream().Write(Buffer, 0, Buffer.Length); + Client.client.GetStream().Write(data, 0, data.Length); + } + + public virtual void HttpClientSendData(ClientRequest clientRequest, int Code) + { + HttpClientSendData(clientRequest, Code, ""); + } + public virtual void HttpClientSendData(ClientRequest clientRequest, int Code, string data) + { + HttpClientSendData(clientRequest, Code, data, ""); + } + public virtual void HttpClientSendData(ClientRequest clientRequest, int Code, string data, string headers) + { + HttpClientSendData(clientRequest, Code, data, headers, "text/html"); + } + public virtual void HttpClientSendData(ClientRequest clientRequest, int Code, string data, string headers, string ContentType) + { + string codeStr = Code.ToString() + " " + ((HttpStatusCode)Code).ToString(); + if ((Code != 200) && (string.IsNullOrEmpty(data))) data = "

" + codeStr + "

"; + + byte[] DataBuffer = clientRequest.Encoding.GetBytes(data); + string charset = clientRequest.Encoding.WebName;//"utf-8"; + + string Str = + GetStandardHTTPResponseHeader(clientRequest, Code) + + (string.IsNullOrEmpty(headers) ? "" : headers + (headers.EndsWith("\n") ? "" : "\r\n")) + + "Content-Type: " + ContentType + "; charset=" + charset + "\r\n" + + "Content-Length:" + DataBuffer.Length.ToString() + "\r\n\r\n"; + + byte[] Buffer = Encoding.UTF8.GetBytes(Str); + clientRequest.client.GetStream().Write(Buffer, 0, Buffer.Length); + clientRequest.client.GetStream().Write(DataBuffer, 0, DataBuffer.Length); + clientRequest.client.Close(); + } + + public virtual void HttpClientSendData(ClientRequest clientRequest, int Code, string data) + { + HttpClientSendData(clientRequest, Code, data); + } + public virtual void HttpClientSendData(ClientRequest clientRequest, int Code, string data, string headers) + { + HttpClientSendData(clientRequest, Code, data, headers, "text/html"); + } + public virtual void HttpClientSendData(ClientRequest clientRequest, int Code, string data, string headers, string ContentType) + { + HttpClientSendData(clientRequest, Code, data, headers, ContentType, ""); + } + public virtual void HttpClientSendData(ClientRequest clientRequest, int Code, string data, string headers, string ContentType, string cookies) + { + HttpClientSendData(clientRequest, Code, data, headers, ContentType, cookies); + } + + public virtual void HttpClientSendData(ClientRequest clientRequest, int Code, T data) + { + HttpClientSendData(clientRequest, Code, data); + } + public virtual void HttpClientSendData(ClientRequest clientRequest, int Code, T data, string headers) + { + HttpClientSendData(clientRequest, Code, data, headers, (clientRequest.IsXML || clientRequest.IsXMLRPC || clientRequest.IsSOAP) ? "text/xml" : "text/html"); + } + public virtual void HttpClientSendData(ClientRequest clientRequest, int Code, T data, string headers, string ContentType) + { + HttpClientSendData(clientRequest, Code, data, headers, ContentType, ""); + } + public virtual void HttpClientSendData(ClientRequest clientRequest, int Code, T data, string headers, string ContentType, string cookies) + { + if (string.IsNullOrEmpty(cookies)) cookies = ""; + + string outdata = ""; + string codeStr = Code.ToString() + " " + ((HttpStatusCode)Code).ToString(); + if (data == null) + outdata = "

" + codeStr + "

"; + else + { + if (clientRequest.IsXMLRPC) + outdata = XMLRPCObject.Save(data); + else if (clientRequest.IsXML) + outdata = XMLObject.Save(data); + else if (clientRequest.IsJSON) + outdata = JSONObject.Save(data); + else if (clientRequest.IsSOAP11) + outdata = XMLSOAP.Save11(data, clientRequest.methodSOAP); + else if (clientRequest.IsSOAP12) + outdata = XMLSOAP.Save12(data, clientRequest.methodSOAP); + else + outdata = "

" + data.ToString() + "

"; + }; + + byte[] DataBuffer = clientRequest.Encoding.GetBytes(outdata); + string charset = clientRequest.Encoding.WebName;//"utf-8"; + + string Str = + GetStandardHTTPResponseHeader(clientRequest, Code) + + (string.IsNullOrEmpty(headers) ? "" : headers + (headers.EndsWith("\n") ? "" : "\r\n")) + + "Content-Type: " + ContentType + "; charset=" + charset + "\r\n" + + "Content-Length:" + DataBuffer.Length.ToString() + "\r\n\r\n"; + + byte[] Buffer = Encoding.UTF8.GetBytes(Str); + clientRequest.client.GetStream().Write(Buffer, 0, Buffer.Length); + clientRequest.client.GetStream().Write(DataBuffer, 0, DataBuffer.Length); + clientRequest.client.Close(); + } + + private string GetStandardHTTPResponseHeader(ClientRequest Client, int Code) + { + // Code = 401 + // Ïîëó÷àåì ñòðîêó âèäà "200 OK" + // HttpStatusCode õðàíèò â ñåáå âñå ñòàòóñ-êîäû HTTP/1.1 + string CodeStr = Code.ToString() + " " + ((HttpStatusCode)Code).ToString(); + string Str = + "HTTP/1.1 " + CodeStr + "\r\n" + + "Server: " + _Server + "\r\n" + + "Service-Name: " + _ServerName + "\r\n" + + "Service-Owner: " + _ServerOwner + "\r\n" + + _ServerCustomHeaders + + #if LICENSE + "Service-RLK: enabled\r\n"+ + #else + "Service-RLK: disabled\r\n" + + #endif + (Code == 401 ? "WWW-Authenticate: Basic realm=\"Need authorizate\"\r\n" : "") + + "Connection: close\r\n"; + return Str; + } + #endregion + + #region Standard Methods + // soap wsdl + private bool method_xmlwsdl(ClientRequest clientRequest) + { + string wsdl = WSDL.GenerateWSDL(typeof(SOAPWSDL), "http://127.0.0.1:" + this.ListenPort + "/nms/xmlsoap", false); + HttpClientSendData(clientRequest, 200, wsdl, "Method-Name: wsdl\r\n", "text/xml"); + return true; + } + + // soap forwarder page + private bool method_xmlsoap(ClientRequest clientRequest) + { + if (string.IsNullOrEmpty(clientRequest.body)) + { + string res = + "NMS ROUTE API" + + "
This page only forwards SOAP data with specifed method to JSON original method page. Original JSON method page detects if input data in JSON, XML, XML-RPC, SOAP format and automatically convert it to source object.
" + + " 
" + + "
Ýòà ñòðàíèöà òîëüêî ïåðåñûëàåò SOAP çàïðîñ ñ óêàçàííûì ìåòîäîì íà ñòðàíèöó îðèãèíàëüíîãî ìåòîäà JSON. Îðèãèíàëüíàÿ ñòðàíèöà ìåòîäà JSON îáíàðóæèâàåò âõîäíûå äàííûå â ôîðìàòå JSON, XML, XML-RPC, SOAP è àâòîìàòè÷åñêè ïðåîáðàçóåò èõ â èñõîäíûé îáúåêò.
" + + " 
" + + "main page" + + ""; + HttpClientSendData(clientRequest, 200, res); + return true; + }; + + XMLSOAP xro = XMLSOAP.ParseMethod(clientRequest.body); + if (xro.IsValid) + { + ClientRequest cr = new ClientRequest(clientRequest.client, clientRequest.headers, clientRequest.cookies, clientRequest.request, xro.method, clientRequest.query, clientRequest.body); + if (METHODS.Keys.Contains(cr.method)) + if (METHODS[cr.method].implementation(cr)) + return true; + + xro.error = "method `" + xro.method + "` not found"; + xro.errorCode = 3005; // XMLRPC METHOD + }; + + HttpClientSendData(clientRequest, 200, xro.errorResponse, null, "text/xml"); + return true; + } + + // xmlrpc forwarder page + private bool method_xmlrpc(ClientRequest clientRequest) + { + if (string.IsNullOrEmpty(clientRequest.body)) + { + string res = + "NMS ROUTE API" + + "
This page only forwards XML-RPC data with specifed method to JSON original method page. Original JSON method page detects if input data in JSON, XML, XML-RPC or SOAP format and automatically convert it to source object.
" + + " 
" + + "
Ýòà ñòðàíèöà òîëüêî ïåðåñûëàåò XML-RPC çàïðîñ ñ óêàçàííûì ìåòîäîì íà ñòðàíèöó îðèãèíàëüíîãî ìåòîäà JSON. Îðèãèíàëüíàÿ ñòðàíèöà ìåòîäà JSON îáíàðóæèâàåò âõîäíûå äàííûå â ôîðìàòå JSON, XML, XML-RPC, SOAP è àâòîìàòè÷åñêè ïðåîáðàçóåò èõ â èñõîäíûé îáúåêò.
" + + " 
" + + "main page" + + ""; + HttpClientSendData(clientRequest, 200, res); + return true; + }; + + // + // "testobjA1111objB0123" + // + XMLRPCObject xro = XMLRPCObject.ParseMethod(clientRequest.body); + if (xro.IsValid) + { + ClientRequest cr = new ClientRequest(clientRequest.client, clientRequest.headers, clientRequest.cookies, clientRequest.request, xro.method, clientRequest.query, clientRequest.body); + if (METHODS.Keys.Contains(cr.method)) + if (METHODS[cr.method].implementation(cr)) + return true; + + xro.error = "method `" + xro.method + "` not found"; + xro.errorCode = 3005; // XMLRPC METHOD + }; + + HttpClientSendData(clientRequest, 200, xro.errorResponse, null, "text/xml"); + return true; + } + + private static string ObjTypeToString(Type t, string typeTo, string prefix, out string attributes) + { + string res = ""; + attributes = ""; + if (typeTo == "json") res += "{"; + if (typeTo == "xml") res += ""; + if (typeTo == "rpc") res += ""; + string maint = ""; + object[] maina = t.GetCustomAttributes(false); + if (maina != null) + foreach (object ma in maina) + if (ma is XmlRootAttribute) + { + XmlRootAttribute xra = (XmlRootAttribute)ma; + maint = "[XmlRoot(\"" + xra.ElementName + "\")]\r\n"; ; + }; + if (typeTo == "c#") res += maint + prefix + "   " + "public class " + t.Name + " {"; + System.Reflection.MemberInfo[] m = t.GetMembers(); + foreach (System.Reflection.MemberInfo mi in m) + if (mi.MemberType == System.Reflection.MemberTypes.Field) + { + System.Reflection.FieldInfo fi = t.GetField(mi.Name); + object[] attrs = fi.GetCustomAttributes(false); + Type tp = fi.FieldType; + if (!tp.FullName.StartsWith("System")) + { + if (tp.BaseType.Name == "Array") // Array + { + Type et = tp.GetElementType(); + string ca; + string rrr = ObjTypeToString(et, typeTo, prefix + "   ", out ca); + if (typeTo == "json") res += String.Format("\r\n{2}'{0}': \r\n{2}[{1}],", mi.Name, rrr, prefix + "   "); + if (typeTo == "c#") + { + string arr = ""; + if (attrs != null) + foreach (object attr in attrs) + { + if (attr is XmlElementAttribute) + { + XmlElementAttribute a = (XmlElementAttribute)attr; + arr += String.Format("{0}[XmlElement(\"{1}\")]\r\n", prefix + "   ", a.ElementName); + }; + if (attr is XmlArrayAttribute) + { + XmlArrayAttribute a = (XmlArrayAttribute)attr; + arr += String.Format("{0}[XmlArray(\"{1}\")]\r\n", prefix + "   ", a.ElementName); + }; + if (attr is XmlArrayItemAttribute) + { + XmlArrayItemAttribute a = (XmlArrayItemAttribute)attr; + arr += String.Format("{0}[XmlArrayItem(\"{1}\")]\r\n", prefix + "   ", a.ElementName); + }; + if (attr is XmlAttributeAttribute) + { + XmlAttributeAttribute a = (XmlAttributeAttribute)attr; + arr += String.Format("{0}[XmlAttribute(\"{1}\")]\r\n", prefix + "   ", a.AttributeName); + }; + if (attr is XmlTextAttribute) + { + arr += String.Format("{0}[XmlText]\r\n", prefix + "   "); + }; + }; + res += String.Format("\r\n\r\n{2}{1}\r\n\r\n" + arr + "{2}public {3} {0};", mi.Name, rrr, prefix + "   ", tp.Name); + }; + if (typeTo == "xml") + { + bool els = false; + string elN = mi.Name; + string arN = rrr; + if (attrs != null) + foreach (object attr in attrs) + { + if (attr is XmlElementAttribute) + { + XmlElementAttribute a = (XmlElementAttribute)attr; + elN = a.ElementName; + }; + if (attr is XmlArrayAttribute) + { + XmlArrayAttribute a = (XmlArrayAttribute)attr; + elN = a.ElementName; + }; + if (attr is XmlArrayItemAttribute) + { + els = true; + XmlArrayItemAttribute a = (XmlArrayItemAttribute)attr; + arN = "<" + a.ElementName + ca + ">" + rrr + ""; + }; + }; + res += String.Format("\r\n{2}<{0}{3}>{1}\r\n{2}", elN, arN, prefix + "   ", els ? "" : ca); + }; + if (typeTo == "rpc") + res += String.Format("\r\n{2}{0}\r\n{2}\r\n{2}{1}\r\n{2}", mi.Name, rrr, prefix + "   "); + } + else + { + string ca; + string rrr = ObjTypeToString(tp, typeTo, prefix + "   ", out ca); + if (typeTo == "json") res += String.Format("\r\n{2}'{0}': \r\n{2}{1},", mi.Name, rrr, prefix + "   "); + if (typeTo == "c#") + { + string arr = ""; + if (attrs != null) + foreach (object attr in attrs) + { + if (attr is XmlElementAttribute) + { + XmlElementAttribute a = (XmlElementAttribute)attr; + arr += String.Format("{0}[XmlElement(\"{1}\")]\r\n", prefix + "   ", a.ElementName); + }; + if (attr is XmlArrayAttribute) + { + XmlArrayAttribute a = (XmlArrayAttribute)attr; + arr += String.Format("{0}[XmlArray(\"{1}\")]\r\n", prefix + "   ", a.ElementName); + }; + if (attr is XmlArrayItemAttribute) + { + XmlArrayItemAttribute a = (XmlArrayItemAttribute)attr; + arr += String.Format("{0}[XmlArrayItem(\"{1}\")]\r\n", prefix + "   ", a.ElementName); + }; + if (attr is XmlAttributeAttribute) + { + XmlAttributeAttribute a = (XmlAttributeAttribute)attr; + arr += String.Format("{0}[XmlAttribute(\"{1}\")]\r\n", prefix + "   ", a.AttributeName); + }; + if (attr is XmlTextAttribute) + { + arr += String.Format("{0}[XmlText]\r\n", prefix + "   "); + }; + }; + res += String.Format("\r\n\r\n{2}{1}\r\n\r\n" + arr + "{2}public {3} {0};", mi.Name, rrr, prefix + "   ", tp.Name); + }; + if (typeTo == "xml") res += String.Format("\r\n{2}<{0}{3}>{1}\r\n{2}", mi.Name, rrr, prefix + "   ", ca); + if (typeTo == "rpc") + res += String.Format("\r\n{2}{0}\r\n{2}{1}", mi.Name, rrr, prefix + "   "); + }; + } + else + { + if (tp.BaseType.Name == "Array") // Array + { + Type et = tp.GetElementType(); + if (typeTo == "json") res += String.Format("\r\n{2}'{0}': ['{1}'],", mi.Name, et.Name, prefix + "   "); + if (typeTo == "xml") + { + string elN = mi.Name; + string arN = et.Name; + if (attrs != null) + foreach (object attr in attrs) + { + if (attr is XmlElementAttribute) + { + XmlElementAttribute a = (XmlElementAttribute)attr; + elN = a.ElementName; + }; + if (attr is XmlArrayAttribute) + { + XmlArrayAttribute a = (XmlArrayAttribute)attr; + elN = a.ElementName; + }; + if (attr is XmlArrayItemAttribute) + { + XmlArrayItemAttribute a = (XmlArrayItemAttribute)attr; + arN = "<" + a.ElementName + ">" + et.Name + ""; + }; + }; + res += String.Format("\r\n{2}<{0}>{1}", elN, arN, prefix + "   "); + }; + if (typeTo == "rpc") + res += String.Format("\r\n{2}{0}\r\n{2}\r\n{2}<{1}>value\r\n{2}", mi.Name, et.Name, prefix + "   "); + if (typeTo == "c#") + { + string arr = ""; + if (attrs != null) + foreach (object attr in attrs) + { + if (attr is XmlElementAttribute) + { + XmlElementAttribute a = (XmlElementAttribute)attr; + arr += String.Format("{0}[XmlElement(\"{1}\")]\r\n", prefix + "   ", a.ElementName); + }; + if (attr is XmlArrayAttribute) + { + XmlArrayAttribute a = (XmlArrayAttribute)attr; + arr += String.Format("{0}[XmlArray(\"{1}\")]\r\n", prefix + "   ", a.ElementName); + }; + if (attr is XmlArrayItemAttribute) + { + XmlArrayItemAttribute a = (XmlArrayItemAttribute)attr; + arr += String.Format("{0}[XmlArrayItem(\"{1}\")]\r\n", prefix + "   ", a.ElementName); + }; + if (attr is XmlAttributeAttribute) + { + XmlAttributeAttribute a = (XmlAttributeAttribute)attr; + arr += String.Format("{0}[XmlAttribute(\"{1}\")]\r\n", prefix + "   ", a.AttributeName); + }; + if (attr is XmlTextAttribute) + { + arr += String.Format("{0}[XmlText]\r\n", prefix + "   "); + }; + }; + res += String.Format("\r\n" + arr + "{2}public {1} {0};", mi.Name, tp.Name, prefix + "   "); + }; + } + else + { + if (typeTo == "json") res += String.Format("\r\n{2}'{0}': '{1}',", mi.Name, tp.Name, prefix + "   "); + if (typeTo == "xml") + { + string arr = ""; + bool asTxt = false; + if (attrs != null) + foreach (object attr in attrs) + { + if (attr is XmlAttributeAttribute) + { + XmlAttributeAttribute a = (XmlAttributeAttribute)attr; + arr = a.AttributeName; + }; + if (attr is XmlTextAttribute) + asTxt = true; + }; + if (arr == "") + { + if (asTxt) + res += String.Format("{0} as {1}", mi.Name, tp.Name); + else + res += String.Format("\r\n{2}<{0}>{1}", mi.Name, tp.Name, prefix + "   "); + } + else + attributes += String.Format(" {0}=\"{1}\"", mi.Name, tp.Name); + }; + if (typeTo == "rpc") + res += String.Format("\r\n{2}{0}\r\n{2}\r\n{2}<{1}>value\r\n{2}", mi.Name, tp.Name, prefix + "   "); + if (typeTo == "c#") + { + string arr = ""; + if (attrs != null) + foreach (object attr in attrs) + { + if (attr is XmlElementAttribute) + { + XmlElementAttribute a = (XmlElementAttribute)attr; + arr += String.Format("{0}[XmlElement(\"{1}\")]\r\n", prefix + "   ", a.ElementName); + }; + if (attr is XmlArrayAttribute) + { + XmlArrayAttribute a = (XmlArrayAttribute)attr; + arr += String.Format("{0}[XmlArray(\"{1}\")]\r\n", prefix + "   ", a.ElementName); + }; + if (attr is XmlArrayItemAttribute) + { + XmlArrayItemAttribute a = (XmlArrayItemAttribute)attr; + arr += String.Format("{0}[XmlArrayItem(\"{1}\")]\r\n", prefix + "   ", a.ElementName); + }; + if (attr is XmlAttributeAttribute) + { + XmlAttributeAttribute a = (XmlAttributeAttribute)attr; + arr += String.Format("{0}[XmlAttribute(\"{1}\")]\r\n", prefix + "   ", a.AttributeName); + }; + if (attr is XmlTextAttribute) + { + arr += String.Format("{0}[XmlText]\r\n", prefix + "   "); + }; + }; + res += String.Format("\r\n" + arr + "{2}public {1} {0};", mi.Name, tp.Name, prefix + "   "); + }; + }; + }; + }; + if (res.EndsWith(",")) res = res.Remove(res.Length - 1); + if (typeTo == "json") res += "\r\n" + prefix + "}"; + if (typeTo == "c#") res += "\r\n" + prefix + "}"; + return res; + } + + private static string GetDocumentation(string typeTo) + { + bool isSOAP = typeTo == "soap"; + + if (string.IsNullOrEmpty(typeTo)) return ""; + string ca; + string res = ObjTypeToString(typeof(T), isSOAP ? "xml" : typeTo, "", out ca); + if (isSOAP) + { + string rootEl = (typeof(T)).Name; + object[] maina = (typeof(T)).GetCustomAttributes(false); + if (maina != null) + foreach (object ma in maina) + if (ma is XmlRootAttribute) + { + XmlRootAttribute xra = (XmlRootAttribute)ma; + rootEl = xra.ElementName; + }; + res = "\r\n" + + "<{METHOD}>" + + "<" + rootEl + ca + ">" + res + "\r\n<" + rootEl + ">" + + "" + + ""; + res = res.Replace("<", "<").Replace(">", ">").Replace(" ", " "); + }; + if (typeTo == "xml") + { + string rootEl = (typeof(T)).Name; + object[] maina = (typeof(T)).GetCustomAttributes(false); + if (maina != null) + foreach (object ma in maina) + if (ma is XmlRootAttribute) + { + XmlRootAttribute xra = (XmlRootAttribute)ma; + rootEl = xra.ElementName; + }; + res = "\r\n<" + rootEl + ca + ">" + res + "\r\n<" + rootEl + ">"; + res = res.Replace("<", "<").Replace(">", ">").Replace(" ", " "); + }; + if (typeTo == "rpc") + { + res = "{METHOD}\r\n" + res + "\r\n"; + res = res.Replace("<", "<").Replace(">", ">").Replace(" ", " ").Replace("Int32", "i4").Replace("Single", "Double"); + }; + return res.Replace("\r\n", "\r\n
"); + } + + /// + /// Generate Auto Documentation + /// + /// request type + /// response type + /// method name + /// html text + public string GetDocumentation(string methodName) + { + string res = + "NMS ROUTE API
" + + "Method: " + methodName + "
" + + "Input Format: JSON, XML, XML-RPC or SOAP
" + + "Request Object:
" + + "
" + + "" + + "
JSONC#XML
" + GetDocumentation("json") + "" + GetDocumentation("c#") + "" + GetDocumentation("xml") + "
" + + "Response Object:
" + + "
" + + "" + + "
JSONC#XML
" + GetDocumentation("json") + "" + GetDocumentation("c#") + "" + GetDocumentation("xml") + "

" + + "main page

" + + "This page was created automatically for method `" + methodName + "`" + + ""; + return res; + } + + /// + /// Parse Client Body to Specified Object + /// + /// object type + /// HTTP Web Client Request + /// null if error + public CrossSendObject ParseRequest(ref ClientRequest clientRequest, string methodName) + { + return ParseRequest(ref clientRequest, methodName, false); + } + + /// + /// Parse Client Body to Specified Object + /// + /// object type + /// HTTP Web Client Request + /// null if error + public CrossSendObject ParseRequest(ref ClientRequest clientRequest, string methodName, bool isValidOnNotEmptyQuery) + { + CrossSendObject clo = null; + + if (clientRequest.IsJSON) + clo = JSONObject.Parse(clientRequest.body); + else if (clientRequest.IsXML) + clo = XMLObject.Parse(clientRequest.body); + else if (clientRequest.IsXMLRPC) + clo = XMLRPCObject.Parse(clientRequest.body); + else if (clientRequest.IsSOAP11) + { + clo = XMLSOAP.Parse(clientRequest.body); + clientRequest.methodSOAP = ((XMLSOAP)clo).methodSOAP; + }; + + if (clo == null) + { + if (clientRequest.IsHTTPGet) + { + if (isValidOnNotEmptyQuery && (!string.IsNullOrEmpty(clientRequest.query))) return null; + HttpClientSendData(clientRequest, 200, GetDocumentation(methodName), "Method-Name: " + methodName + "\r\n"); + } + else + HttpClientSendData(clientRequest, 415, "Unsupported Media Type", "Method-Name: test\r\n"); + return null; + } + else if (!clo.IsValid) + { + HttpClientSendData(clientRequest, 400, clo.errorResponse, "Method-Name: test\r\n", (clientRequest.IsXML || clientRequest.IsXMLRPC || clientRequest.IsSOAP) ? "text/xml" : "text/html"); + return null; + } + else + { + return clo; + }; + } + #endregion + + private bool method_null(ClientRequest clientRequest) + { + FileStream fs = new FileStream(XMLSaved.GetCurrentDir() + @"\dkxce.Route.ServiceSolver.Web.index", FileMode.Open, FileAccess.Read); + byte[] buff = new byte[fs.Length]; + fs.Read(buff, 0, buff.Length); + fs.Close(); + + HttpClientSendData(clientRequest, 200, buff, "", "text/html"); + return true; + } + + private bool method_status(ClientRequest clientRequest) + { + ReceiveData_ServiceStatus(clientRequest.client.GetStream()); + return true; + } + + private bool method_help(ClientRequest clientRequest) + { + ReceiveData_HTTPDescription(clientRequest.client.GetStream()); + return true; + } + + private bool method_getdocs(ClientRequest clientRequest) + { + if ((string.IsNullOrEmpty(clientRequest.query)) || (!clientRequest.Query.ContainsKey("method")) || (!clientRequest.Query.ContainsKey("io")) || (!clientRequest.Query.ContainsKey("type"))) + return method_null(clientRequest); + + string res = "DOCS NOT FOUND"; + + string method = clientRequest.Query["method"]; + string io = clientRequest.Query["io"]; + string iotype = clientRequest.Query["type"]; + + if (method == "route") + res = io == "in" ? GetDocumentation(iotype) : GetDocumentation(iotype); + else if (method == "nearroad") + res = io == "in" ? GetDocumentation(iotype) : GetDocumentation(iotype); + + HttpClientSendData(clientRequest, 200, res, "Method-Name: getdocs\r\n", "text/html"); + return true; + } + + + private bool method_route(ClientRequest clientRequest) + { + tcRoute co = null; + + // parse input data + CrossSendObject clo = ParseRequest(ref clientRequest, "route", true); + if (clo == null) // parse query data + { + try + { + co = CrossSendObject.fromQuery(clientRequest.Query); + } + catch (Exception ex) + { + HttpClientSendData(clientRequest, 400, ex.Message); + return true; + }; + if (clientRequest.Query.ContainsKey("x") && (clientRequest.Query.ContainsKey("y"))) + { + string[] sx = clientRequest.Query["x"].Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries); + string[] sy = clientRequest.Query["y"].Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries); + if ((sx != null) && (sx.Length > 0) && (sy != null) && (sx.Length == sy.Length)) + { + co.xy = new XYN[sx.Length]; + string[] xn = new string[0]; + if (clientRequest.Query.ContainsKey("n")) + { + xn = clientRequest.Query["n"].Split(new char[] { ',' }, StringSplitOptions.None); + if (xn == null) xn = new string[0]; + }; + for (int i = 0; i < sx.Length; i++) + { + co.xy[i] = new XYN(double.Parse(sx[i], System.Globalization.CultureInfo.InvariantCulture), double.Parse(sy[i], System.Globalization.CultureInfo.InvariantCulture)); + if (xn.Length > i) co.xy[i].n = System.Security.SecurityElement.Escape(HttpUtility.UrlDecode(xn[i])); + }; + }; + }; + if (clientRequest.Query.ContainsKey("ex") && (clientRequest.Query.ContainsKey("ey"))) + { + string[] sx = clientRequest.Query["ex"].Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries); + string[] sy = clientRequest.Query["ey"].Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries); + if ((sx != null) && (sx.Length > 0) && (sy != null) && (sx.Length == sy.Length)) + { + co.exy = new XYN[sx.Length]; + for (int i = 0; i < sx.Length; i++) + co.exy[i] = new XYN(double.Parse(sx[i], System.Globalization.CultureInfo.InvariantCulture), double.Parse(sy[i], System.Globalization.CultureInfo.InvariantCulture)); + }; + }; + } + else + co = clo.obj; + if (string.IsNullOrEmpty(co.i)) co.i = "0"; + if (string.IsNullOrEmpty(co.f)) co.f = "0"; + if (string.IsNullOrEmpty(co.v)) co.v = "0"; + + if (string.IsNullOrEmpty(co.k)) + { + co.k = co.key; + if (string.IsNullOrEmpty(co.k)) + { + HttpClientSendData(clientRequest, 400, "USER KEY FAILED"); + return true; + }; + }; + + if ((co.xy == null) || (co.xy.Length < 2)) + { + HttpClientSendData(clientRequest, 400, "NEED AT LEAST 2 COORDINATES TO SEARCH ROUTE"); + return true; + }; + + List stops = new List(); + + foreach (XYN xy in co.xy) + stops.Add(new RStop(xy.n, xy.y, xy.x)); + + dkxce.Route.Classes.PointF[] el = null; + if ((co.exy != null) && (co.exy.Length > 0)) + { + el = new dkxce.Route.Classes.PointF[co.exy.Length]; + for (int i = 0; i < el.Length; i++) + el[i] = new dkxce.Route.Classes.PointF((float)co.exy[i].x, (float)co.exy[i].y); + }; + double er = 50; + double.TryParse(co.er, out er); + byte[] ronly = null; + if ((co.ra != String.Empty) && (co.ra.Length == 32)) + { + ronly = new byte[16]; + for (int i = 0; i < ronly.Length; i++) + { + string txt = co.ra.Substring(i * 2, 2); + byte b = 0; + try + { + b = byte.Parse(txt, System.Globalization.NumberStyles.HexNumber); + } + catch { }; + ronly[i] = b; + }; + }; + long otherFlags = 0; + if (co.p == "1") otherFlags += 0x01; + if (co.i == "1") otherFlags += 0x02; + if (co.ct == "1") otherFlags += 0x04; + if (co.ht == "1") otherFlags += 0x08; + if (co.o == "1") otherFlags += 0x10; + if (co.minby == "dist") otherFlags += 0x20; + if (co.v == "1") otherFlags += 0x40; + + DateTime startTime = DateTime.Now; + DateTime.TryParse(co.t, out startTime); + +#if LICENSE + int lIndex = lics.keys.IndexOf(co.k); + if (lIndex < 0) + { + HttpClientSendData(clientRequest, 423, "001 BAD KEY", "Method-Name: route\r\n", "text/plain"); + return true; + } + else if (DateTime.Now > lics.expires[lIndex]) + { + HttpClientSendData(clientRequest, 423, "002 Support Expired", "Method-Name: route\r\n", "text/plain"); + return true; + }; +#else + + if ((RouteThreader.mem.config != null) && (RouteThreader.mem.config.http_licenses != null) && (RouteThreader.mem.config.http_licenses.Count > 0)) + { + co.k = co.k.ToUpper(); + HTTPLicense hlic = null; + foreach(HTTPLicense tmpl in RouteThreader.mem.config.http_licenses) + if (tmpl.key == co.k) { hlic = tmpl; break; }; + if (hlic == null) + { + HttpClientSendData(clientRequest, 423, "001 BAD KEY", "Method-Name: route\r\n", "text/plain"); + return true; + } + else if (DateTime.Now > hlic.expires) + { + HttpClientSendData(clientRequest, 423, "002 Support Expired", "Method-Name: route\r\n", "text/plain"); + return true; + } + else if (!String.IsNullOrEmpty(hlic.ip)) + { + bool ma = true; + string hlicip = hlic.ip; + if (hlicip.StartsWith("!")) { hlicip = hlic.ip.Substring(1); ma = false; }; + Regex rx = new Regex(hlic.ip, RegexOptions.None); + string ip = ((IPEndPoint)clientRequest.client.Client.RemoteEndPoint).Address.ToString(); + bool mb = rx.IsMatch(ip); + if((ma && !mb) || (!ma && mb)) + { + HttpClientSendData(clientRequest, 423, "004 Client blocked by key rules", "Method-Name: route\r\n", "text/plain"); + return true; + }; + }; + }; +#endif + + RouteThreader rg = new RouteThreader(); + tsRoute rt = null; + try + { + rt = tsRoute.FromRR(rg.GetRoute(stops.ToArray(), startTime, otherFlags, null, el, er, ronly)); + } + catch (Exception ex) + { + HttpClientSendData(clientRequest, 500, ex.Message); + return true; + }; + + + if (clientRequest.IsHTTPGet) + { + //if ((co.f == "j") || (co.f == "json") || (co.f == "0") || (co.f == "")) + clientRequest.clientType = 1; + + if ((co.f == "xml") || (co.f == "x") || (co.f == "2")) clientRequest.clientType = 2; + + if ((co.f == "t") || (co.f == "txt") || (co.f == "1")) + { + string outtxt = ("Äëèíà ïóòè: " + rt.driveLength.ToString().Replace(",", ".") + " êì, Âðåìÿ â ïóòè: " + rt.driveTime.ToString().Replace(",", ".") + " ìèí, Ïðèáûòèå â " + rt.finishTime.ToString() + "\r\n\r\n"); + if((rt.instructions != null) && (rt.instructions.Length > 0)) + for (int i = 0; i < rt.instructions.Length; i++) + outtxt += ("[" + rt.instructions[i].no.ToString() + "] " + rt.instructions[i].tTime.ToString("HH:mm") + "\t\t\t " + rt.instructions[i].tLen.ToString().Replace(",", ".") + " êì\r\n" + rt.instructions[i].iToDo + " " + rt.instructions[i].iToGo + "\r\n\r\n"); + HttpClientSendData(clientRequest, 200, outtxt, "Method-Name: route\r\n", "text/plain"); + return true; + }; + }; + + if ((co.f == "kml") || (co.f == "k") || (co.f == "3")) + { + string outxml = ""; + outxml += ("Ìàðøðóò: " + System.Security.SecurityElement.Escape(rt.stops[0].name) + " - " + System.Security.SecurityElement.Escape(rt.stops[rt.stops.Length - 1].name) + "\r\n"); + outxml += ("Ïóòü\r\n"); + + for (int i = 0; i < rt.stops.Length; i++) + { + outxml += ("" + System.Security.SecurityElement.Escape(rt.stops[i].name) + ""); + outxml += (rt.stops[i].lon.ToString().Replace(",", ".") + "," + rt.stops[i].lat.ToString().Replace(",", ".") + ",0 "); + outxml += ("\r\n"); + }; + + outxml += ("" + System.Security.SecurityElement.Escape(rt.stops[0].name) + " - " + System.Security.SecurityElement.Escape(rt.stops[rt.stops.Length - 1].name) + ""); + outxml += ("\r\n"); + outxml += ("Äëèíà: " + (rt.driveLength / 1024).ToString().Replace(",", ".") + " êì. \r\n"); + outxml += ("Âðåìÿ: " + rt.driveTime.ToString().Replace(",", ".") + " ìèí. \r\n"); + outxml += ("Âûåçä: " + rt.startTime.ToString("HH:mm:ss dd.MM.yyyy") + " \r\n"); + outxml += ("Ïðèáûòèå: " + rt.finishTime.ToString("HH:mm:ss dd.MM.yyyy") + " \r\n"); + outxml += ("\r\n"); + outxml += ("\r\n"); + if((rt.polyline != null) && (rt.polyline.Length > 0)) + for (int i = 0; i < rt.polyline.Length; i++) + { + outxml += (rt.polyline[i].x.ToString().Replace(",", ".") + "," + rt.polyline[i].y.ToString().Replace(",", ".") + ",0 "); + }; + outxml += (""); + outxml += (""); + + if ((rt.instructions != null) && (rt.instructions.Length > 0)) + { + outxml += ("Èíñòðóêöèè\r\n"); + for (int i = 0; i < rt.instructions.Length; i++) + { + outxml += ("" + rt.instructions[i].no.ToString() + " (" + (rt.instructions[i].tLen / 1024).ToString("0.00").Replace(",", ".") + " êì)" + (rt.instructions[i].iStreet.Length > 0 ? ", " + rt.instructions[i].iStreet : "") + ""); + if (i < (rt.instructions.Length - 1)) + { + outxml += (""); + outxml += (rt.instructions[i].iToDo + ", " + rt.instructions[i].iToGo + "; \r\n"); + outxml += ("\r\n"); + }; + outxml += (""); + outxml += (rt.instructions[i].x.ToString().Replace(",", ".") + "," + rt.instructions[i].y.ToString().Replace(",", ".") + ",0 "); + outxml += ("\r\n"); + }; + outxml += (""); + }; + + outxml += (""); + HttpClientSendData(clientRequest, 200, outxml, "Method-Name: route\r\n", "text/xml"); + return true; + }; + + if ((co.f == "geojson") || (co.f == "g") || (co.f == "4")) + { + string outxml = ""; + outxml += ("{ \"type\": \"FeatureCollection\", \"features\": [\r\n"); + int fCount = 0; + + for (int i = 0; i < rt.stops.Length; i++) + { + if ((fCount++) > 0) outxml += (",\r\n"); + outxml += ("\t{ \"type\": \"Feature\",\r\n"); + outxml += ("\t\t\"geometry\": {\"type\": \"Point\", \"coordinates\": [" + rt.stops[i].lon.ToString().Replace(",", ".") + "," + rt.stops[i].lat.ToString().Replace(",", ".") + "]},\r\n"); + outxml += ("\t\t\"properties\": {"); + outxml += ("\"type\": \"stop\""); + outxml += (", \"name\": \"" + System.Security.SecurityElement.Escape(System.Security.SecurityElement.Escape(rt.stops[i].name)) + "\""); + outxml += (", \"driveLengthSegment\": " + rt.driveLengthSegments[i].ToString().Replace(",", ".")); + outxml += (", \"driveTimeSegment\": " + rt.driveTimeSegments[i].ToString().Replace(",", ".")); + if ((rt.polyline != null) && (rt.polyline.Length > 0)) + outxml += (", \"polylineSegment\": " + rt.polylineSegments[i].ToString()); + if ((rt.instructions != null) && (rt.instructions.Length > 0)) + outxml += (", \"instructionsSegment\": " + rt.instructionsSegments[i].ToString()); + outxml += ("}\r\n"); + outxml += ("\t}"); + }; + if ((rt.polyline != null) && (rt.polyline.Length > 0)) + { + if ((fCount++) > 0) outxml += (",\r\n"); + outxml += ("\t{ \"type\": \"Feature\",\r\n"); + outxml += ("\t\t\"geometry\": {\"type\": \"LineString\", \"coordinates\": ["); + for (int i = 0; i < rt.polyline.Length; i++) + { + if (i > 0) outxml += (","); + outxml += ("[" + rt.polyline[i].x.ToString().Replace(",", ".") + "," + rt.polyline[i].y.ToString().Replace(",", ".") + "]"); + }; + outxml += ("]},\r\n"); + outxml += ("\t\t\"properties\": {"); + outxml += ("\"type\": \"path\", "); + outxml += ("\"name\": \"route\", "); + outxml += ("\"driveLength\": " + rt.driveLength.ToString().Replace(",", ".") + ", "); + outxml += ("\"driveTime\": " + rt.driveTime.ToString().Replace(",", ".") + ", "); + outxml += ("\"startTime\": \"" + rt.startTime.ToString("yyyy-MM-ddTHH:mm:ss.fffffffzzz") + "\", "); + outxml += ("\"finishTime\": \"" + rt.finishTime.ToString("yyyy-MM-ddTHH:mm:ss.fffffffzzz") + "\", "); + outxml += ("}\r\n"); + outxml += ("\t}"); + }; + if ((rt.instructions != null) && (rt.instructions.Length > 0)) + { + for (int i = 0; i < rt.instructions.Length; i++) + { + if ((fCount++) > 0) outxml += (",\r\n"); + outxml += ("\t{ \"type\": \"Feature\",\r\n"); + outxml += ("\t\t\"geometry\": {\"type\": \"Point\", \"coordinates\": [" + rt.instructions[i].x.ToString().Replace(",", ".") + "," + rt.instructions[i].y.ToString().Replace(",", ".") + "]},\r\n"); + outxml += ("\t\t\"properties\": {"); + outxml += ("\"type\": \"instruction\""); + outxml += (", \"no\": " + rt.instructions[i].no.ToString()); + outxml += (", \"iToDo\": \"" + System.Security.SecurityElement.Escape(rt.instructions[i].iToDo) + "\""); + outxml += (", \"iToGo\": \"" + System.Security.SecurityElement.Escape(rt.instructions[i].iToGo) + "\""); + outxml += (", \"iStreet\": \"" + System.Security.SecurityElement.Escape(rt.instructions[i].iStreet) + "\""); + outxml += (", \"sTime\": " + rt.instructions[i].sTime.ToString().Replace(",", ".")); + outxml += (", \"sLen\": " + rt.instructions[i].sLen.ToString().Replace(",", ".")); + outxml += (", \"tTime\": \"" + rt.instructions[i].tTime.ToString("yyyy-MM-ddTHH:mm:ss.fffffffzzz") + "\""); + outxml += (", \"tLen\": " + rt.instructions[i].tLen.ToString().Replace(",", ".")); + outxml += ("}\r\n"); + outxml += ("\t}"); + }; + }; + + outxml += ("\r\n"); + outxml += ("]}\r\n"); + HttpClientSendData(clientRequest, 200, outxml, "Method-Name: route\r\n" + (rg == null ? "" : "Service-RTI: idle=" + rg.GetIdleThreadCount().ToString() + ",total=" + rg.GetThreadsCount().ToString() + "\r\n"), "text/plain"); + return true; + }; + + HttpClientSendData(clientRequest, 200, rt, "Method-Name: route\r\n" + (rg == null ? "" : "Service-RTI: idle=" + rg.GetIdleThreadCount().ToString() + ",total=" + rg.GetThreadsCount().ToString() + "\r\n")); + return true; // all is ok, close stream + } + + private bool method_nearroad(ClientRequest clientRequest) + { + tcNearRoad co = null; + + // parse input data + CrossSendObject clo = ParseRequest(ref clientRequest, "nearroad", true); + if (clo == null) // parse query data + { + try + { + co = CrossSendObject.fromQuery(clientRequest.Query); + } + catch (Exception ex) + { + HttpClientSendData(clientRequest, 400, ex.Message); + return true; + }; + } + else + co = clo.obj; + if (string.IsNullOrEmpty(co.f)) co.f = "0"; + + if (string.IsNullOrEmpty(co.k)) + { + co.k = co.key; + if (string.IsNullOrEmpty(co.k)) + { + HttpClientSendData(clientRequest, 400, "USER KEY FAILED"); + return true; + }; + }; + + if ((co.x == null) || (co.y == null) || (co.x.Length != co.y.Length) || (co.x.Length == 0)) + { + HttpClientSendData(clientRequest, 400, "Error: COORDINATES FAIL"); + return true; + }; + +#if LICENSE + int lIndex = lics.keys.IndexOf(co.k); + if (lIndex < 0) + { + HttpClientSendData(clientRequest, 423, "001 BAD KEY", "Method-Name: nearroad\r\n", "text/plain"); + return true; + } + else if (DateTime.Now > lics.expires[lIndex]) + { + HttpClientSendData(clientRequest, 423, "002 Support Expired", "Method-Name: nearroad\r\n", "text/plain"); + return true; + }; +#else + if ((RouteThreader.mem.config != null) && (RouteThreader.mem.config.http_licenses != null) && (RouteThreader.mem.config.http_licenses.Count > 0)) + { + co.k = co.k.ToUpper(); + HTTPLicense hlic = null; + foreach (HTTPLicense tmpl in RouteThreader.mem.config.http_licenses) + if (tmpl.key == co.k) { hlic = tmpl; break; }; + if (hlic == null) + { + HttpClientSendData(clientRequest, 423, "001 BAD KEY", "Method-Name: nearroad\r\n", "text/plain"); + return true; + } + else if (DateTime.Now > hlic.expires) + { + HttpClientSendData(clientRequest, 423, "002 Support Expired", "Method-Name: nearroad\r\n", "text/plain"); + return true; + } + else if (!String.IsNullOrEmpty(hlic.ip)) + { + bool ma = true; + string hlicip = hlic.ip; + if (hlicip.StartsWith("!")) { hlicip = hlic.ip.Substring(1); ma = false; }; + Regex rx = new Regex(hlic.ip, RegexOptions.None); + string ip = ((IPEndPoint)clientRequest.client.Client.RemoteEndPoint).Address.ToString(); + bool mb = rx.IsMatch(ip); + if ((ma && !mb) || (!ma && mb)) + { + HttpClientSendData(clientRequest, 423, "004 Client blocked by key rules", "Method-Name: nearroad\r\n", "text/plain"); + return true; + }; + }; + }; +#endif + + RouteThreader rg = new RouteThreader(); + tsNearRoads res = null; + try + { + res = tsNearRoads.FromRR(rg.GetNearRoad(co.y, co.x, co.n == "1")); + } + catch (Exception ex) + { + HttpClientSendData(clientRequest, 500, ex.Message); + return true; + }; + + if (clientRequest.IsHTTPGet) + { + //if ((co.f == "j") || (co.f == "json") || (co.f == "0") || (co.f == "")) + clientRequest.clientType = 1; + if ((co.f == "xml") || (co.f == "x") || (co.f == "2")) clientRequest.clientType = 2; + if ((co.f == "t") || (co.f == "txt") || (co.f == "1")) + { + string outtxt = ""; + for (int i = 0; i < res.roads.Length; i++) + outtxt += (res.roads[i].lat + " " + res.roads[i].lon + "; " + res.roads[i].distance + "; " + res.roads[i].name + "\r\n"); + HttpClientSendData(clientRequest, 200, outtxt, "Method-Name: nearroad\r\n" + (rg == null ? "" : "Service-RTI: idle=" + rg.GetIdleThreadCount().ToString() + ",total=" + rg.GetThreadsCount().ToString() + "\r\n"), "text/plain"); + return true; + }; + }; + + HttpClientSendData(clientRequest, 200, res, "Method-Name: nearroad\r\n" + (rg == null ? "" : "Service-RTI: idle=" + rg.GetIdleThreadCount().ToString() + ",total=" + rg.GetThreadsCount().ToString() + "\r\n")); + return true; // all is ok, close stream + } + + public void RegisterMethod(MethodInfo method) + { + if ((method.implementation != null) && (!string.IsNullOrEmpty(method.name))) + METHODS.Add(method.name, method); + } + + private void InitMethods() + { + // Standard + RegisterMethod(new MethodInfo("xmlwsdl", "0.0.0.1", method_xmlwsdl)); + RegisterMethod(new MethodInfo("xmlsoap", "0.0.0.1", method_xmlsoap)); + RegisterMethod(new MethodInfo("soap.asmx", "0.0.0.1", method_xmlsoap)); + RegisterMethod(new MethodInfo("xmlrpc", "0.0.0.1", method_xmlrpc)); + RegisterMethod(new MethodInfo("xmlrpc.asmx", "0.0.0.1", method_xmlrpc)); + // Main + RegisterMethod(new MethodInfo("getdocs", "0.0.0.1", method_getdocs)); + RegisterMethod(new MethodInfo("null", "1.8.0.2", method_null)); // + RegisterMethod(new MethodInfo("status", "1.8.0.2", method_status)); // + RegisterMethod(new MethodInfo("help", "1.8.0.2", method_help)); // + RegisterMethod(new MethodInfo("route", "1.8.0.2", method_route)); // + RegisterMethod(new MethodInfo("sroute.ashx", "1.8.0.2", method_route)); + RegisterMethod(new MethodInfo("nearroad", "1.8.0.2", method_nearroad)); // + RegisterMethod(new MethodInfo("snearroad.ashx", "1.8.0.2", method_nearroad)); + } + } + + internal class PrivilegeManager + { + [DllImport("advapi32.dll", SetLastError = true)] + [return: MarshalAs(UnmanagedType.Bool)] + static extern bool OpenProcessToken( + IntPtr ProcessHandle, + UInt32 DesiredAccess, out IntPtr TokenHandle); + + private static uint STANDARD_RIGHTS_REQUIRED = 0x000F0000; + private static uint STANDARD_RIGHTS_READ = 0x00020000; + private static uint TOKEN_ASSIGN_PRIMARY = 0x0001; + private static uint TOKEN_DUPLICATE = 0x0002; + private static uint TOKEN_IMPERSONATE = 0x0004; + private static uint TOKEN_QUERY = 0x0008; + private static uint TOKEN_QUERY_SOURCE = 0x0010; + private static uint TOKEN_ADJUST_PRIVILEGES = 0x0020; + private static uint TOKEN_ADJUST_GROUPS = 0x0040; + private static uint TOKEN_ADJUST_DEFAULT = 0x0080; + private static uint TOKEN_ADJUST_SESSIONID = 0x0100; + private static uint TOKEN_READ = (STANDARD_RIGHTS_READ | TOKEN_QUERY); + private static uint TOKEN_ALL_ACCESS = (STANDARD_RIGHTS_REQUIRED | TOKEN_ASSIGN_PRIMARY | + TOKEN_DUPLICATE | TOKEN_IMPERSONATE | TOKEN_QUERY | TOKEN_QUERY_SOURCE | + TOKEN_ADJUST_PRIVILEGES | TOKEN_ADJUST_GROUPS | TOKEN_ADJUST_DEFAULT | + TOKEN_ADJUST_SESSIONID); + + [DllImport("kernel32.dll", SetLastError = true)] + public static extern IntPtr GetCurrentProcess(); + + [DllImport("advapi32.dll", SetLastError = true, CharSet = CharSet.Auto)] + [return: MarshalAs(UnmanagedType.Bool)] + static extern bool LookupPrivilegeValue( + string lpSystemName, + string lpName, + out LUID lpLuid); + + #region Privelege constants + + public const string SE_ASSIGNPRIMARYTOKEN_NAME = "SeAssignPrimaryTokenPrivilege"; + public const string SE_AUDIT_NAME = "SeAuditPrivilege"; + public const string SE_BACKUP_NAME = "SeBackupPrivilege"; + public const string SE_CHANGE_NOTIFY_NAME = "SeChangeNotifyPrivilege"; + public const string SE_CREATE_GLOBAL_NAME = "SeCreateGlobalPrivilege"; + public const string SE_CREATE_PAGEFILE_NAME = "SeCreatePagefilePrivilege"; + public const string SE_CREATE_PERMANENT_NAME = "SeCreatePermanentPrivilege"; + public const string SE_CREATE_SYMBOLIC_LINK_NAME = "SeCreateSymbolicLinkPrivilege"; + public const string SE_CREATE_TOKEN_NAME = "SeCreateTokenPrivilege"; + public const string SE_DEBUG_NAME = "SeDebugPrivilege"; + public const string SE_ENABLE_DELEGATION_NAME = "SeEnableDelegationPrivilege"; + public const string SE_IMPERSONATE_NAME = "SeImpersonatePrivilege"; + public const string SE_INC_BASE_PRIORITY_NAME = "SeIncreaseBasePriorityPrivilege"; + public const string SE_INCREASE_QUOTA_NAME = "SeIncreaseQuotaPrivilege"; + public const string SE_INC_WORKING_SET_NAME = "SeIncreaseWorkingSetPrivilege"; + public const string SE_LOAD_DRIVER_NAME = "SeLoadDriverPrivilege"; + public const string SE_LOCK_MEMORY_NAME = "SeLockMemoryPrivilege"; + public const string SE_MACHINE_ACCOUNT_NAME = "SeMachineAccountPrivilege"; + public const string SE_MANAGE_VOLUME_NAME = "SeManageVolumePrivilege"; + public const string SE_PROF_SINGLE_PROCESS_NAME = "SeProfileSingleProcessPrivilege"; + public const string SE_RELABEL_NAME = "SeRelabelPrivilege"; + public const string SE_REMOTE_SHUTDOWN_NAME = "SeRemoteShutdownPrivilege"; + public const string SE_RESTORE_NAME = "SeRestorePrivilege"; + public const string SE_SECURITY_NAME = "SeSecurityPrivilege"; + public const string SE_SHUTDOWN_NAME = "SeShutdownPrivilege"; + public const string SE_SYNC_AGENT_NAME = "SeSyncAgentPrivilege"; + public const string SE_SYSTEM_ENVIRONMENT_NAME = "SeSystemEnvironmentPrivilege"; + public const string SE_SYSTEM_PROFILE_NAME = "SeSystemProfilePrivilege"; + public const string SE_SYSTEMTIME_NAME = "SeSystemtimePrivilege"; + public const string SE_TAKE_OWNERSHIP_NAME = "SeTakeOwnershipPrivilege"; + public const string SE_TCB_NAME = "SeTcbPrivilege"; + public const string SE_TIME_ZONE_NAME = "SeTimeZonePrivilege"; + public const string SE_TRUSTED_CREDMAN_ACCESS_NAME = "SeTrustedCredManAccessPrivilege"; + public const string SE_UNDOCK_NAME = "SeUndockPrivilege"; + public const string SE_UNSOLICITED_INPUT_NAME = "SeUnsolicitedInputPrivilege"; + #endregion + + [StructLayout(LayoutKind.Sequential)] + public struct LUID + { + public UInt32 LowPart; + public Int32 HighPart; + } + + [DllImport("kernel32.dll", SetLastError = true)] + static extern bool CloseHandle(IntPtr hHandle); + + public const UInt32 SE_PRIVILEGE_ENABLED_BY_DEFAULT = 0x00000001; + public const UInt32 SE_PRIVILEGE_ENABLED = 0x00000002; + public const UInt32 SE_PRIVILEGE_REMOVED = 0x00000004; + public const UInt32 SE_PRIVILEGE_USED_FOR_ACCESS = 0x80000000; + + [StructLayout(LayoutKind.Sequential)] + public struct TOKEN_PRIVILEGES + { + public UInt32 PrivilegeCount; + public LUID Luid; + public UInt32 Attributes; + } + + [StructLayout(LayoutKind.Sequential)] + public struct LUID_AND_ATTRIBUTES + { + public LUID Luid; + public UInt32 Attributes; + } + + [DllImport("advapi32.dll", SetLastError = true)] + [return: MarshalAs(UnmanagedType.Bool)] + static extern bool AdjustTokenPrivileges( + IntPtr TokenHandle, + [MarshalAs(UnmanagedType.Bool)]bool DisableAllPrivileges, + ref TOKEN_PRIVILEGES NewState, + UInt32 Zero, + IntPtr Null1, + IntPtr Null2); + + /// + /// Ìåíÿåò ïðèâèëåãèþ + /// + /// ID ïðîöåññà + /// Ïðèâèëåãèÿ + public static void SetPrivilege( + IntPtr PID, + string privilege) + { + IntPtr hToken; + LUID luidSEDebugNameValue; + TOKEN_PRIVILEGES tkpPrivileges; + + if (!OpenProcessToken(PID, TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, out hToken)) + { + throw new Exception("Ïðîèçîøëà îøèáêà ïðè âûïîëíåíèè OpenProcessToken(). Êîä îøèáêè " + + Marshal.GetLastWin32Error()); + } + + if (!LookupPrivilegeValue(null, privilege, out luidSEDebugNameValue)) + { + CloseHandle(hToken); + throw new Exception("Ïðîèçîøëà îøèáêà ïðè âûïîëíåíèè LookupPrivilegeValue(). Êîä îøèáêè " + + Marshal.GetLastWin32Error()); + } + + tkpPrivileges.PrivilegeCount = 1; + tkpPrivileges.Luid = luidSEDebugNameValue; + tkpPrivileges.Attributes = SE_PRIVILEGE_ENABLED; + + if (!AdjustTokenPrivileges(hToken, false, ref tkpPrivileges, 0, IntPtr.Zero, IntPtr.Zero)) + { + throw new Exception("Ïðîèçîøëà îøèáêà ïðè âûïîëíåíèè LookupPrivilegeValue(). Êîä îøèáêè :" + + Marshal.GetLastWin32Error()); + } + CloseHandle(hToken); + } + } + + internal class FileMappingServer + { + private SafeFileMappingHandle hMapFile = null; + private IntPtr pView = IntPtr.Zero; + + private const string FullMapName = "Global\\dRSSThreads"; + private const uint MapSize = 65536; + private const uint ViewOffset = 0; + private const uint ViewSize = 15 * 1024; + + private bool connected = false; + public bool Connected { get { return connected; } } + + public void Connect() + { + try { PrivilegeManager.SetPrivilege(Process.GetCurrentProcess().Handle, PrivilegeManager.SE_CREATE_GLOBAL_NAME); } + catch { }; + + try + { + SECURITY_ATTRIBUTES sa = SECURITY_ATTRIBUTES.Empty; + hMapFile = NativeMethod.CreateFileMapping(INVALID_HANDLE_VALUE, ref sa, FileProtection.PAGE_READWRITE, 0, MapSize, FullMapName); + + if (hMapFile.IsInvalid) throw new Win32Exception(); + + //IntPtr sidPtr = IntPtr.Zero; + //SECURITY_INFORMATION sFlags = SECURITY_INFORMATION.Owner; + //System.Security.Principal.NTAccount user = new System.Security.Principal.NTAccount("P1R4T3\\Harris"); + //System.Security.Principal.SecurityIdentifier sid = (System.Security.Principal.SecurityIdentifier)user.Translate(typeof(System.Security.Principal.SecurityIdentifier)); + //ConvertStringSidToSid(sid.ToString(), ref sidPtr); + SetNamedSecurityInfoW(FullMapName, SE_OBJECT_TYPE.SE_KERNEL_OBJECT, SECURITY_INFORMATION.Dacl, IntPtr.Zero, IntPtr.Zero, IntPtr.Zero, IntPtr.Zero); + + pView = NativeMethod.MapViewOfFile(hMapFile,FileMapAccess.FILE_MAP_ALL_ACCESS,0,ViewOffset,ViewSize); + if (pView == IntPtr.Zero) throw new Win32Exception(); + connected = true; + byte[] bMessage = Encoding.Unicode.GetBytes("BEGINS"+'\0'); + Marshal.Copy(bMessage, 0, pView, bMessage.Length); + } + catch (Exception ex) + { + XMLSaved.Add2SysLog(ex.Message); + }; + } + + public void WriteData(RouteThreaderInfo message) + { + if (connected) + { + byte[] bMessage = Encoding.Unicode.GetBytes(XMLSaved.Save(message) + '\0'); + Marshal.Copy(bMessage, 0, pView, bMessage.Length); + }; + } + + public void Close() + { + if (hMapFile != null) + { + if (pView != IntPtr.Zero) + { + NativeMethod.UnmapViewOfFile(pView); + pView = IntPtr.Zero; + }; + hMapFile.Close(); + hMapFile = null; + }; + connected = false; + } + + #region Native API Signatures and Types + + [DllImport("advapi32.dll", CharSet = CharSet.Unicode)] + private static extern uint SetNamedSecurityInfoW(String pObjectName, SE_OBJECT_TYPE ObjectType, SECURITY_INFORMATION SecurityInfo, IntPtr psidOwner, IntPtr psidGroup, IntPtr pDacl, IntPtr pSacl); + + [DllImport("Advapi32.dll", SetLastError = true)] + private static extern bool ConvertStringSidToSid(String StringSid, ref IntPtr Sid); + + private enum SE_OBJECT_TYPE + { + SE_UNKNOWN_OBJECT_TYPE = 0, + SE_FILE_OBJECT, + SE_SERVICE, + SE_PRINTER, + SE_REGISTRY_KEY, + SE_LMSHARE, + SE_KERNEL_OBJECT, + SE_WINDOW_OBJECT, + SE_DS_OBJECT, + SE_DS_OBJECT_ALL, + SE_PROVIDER_DEFINED_OBJECT, + SE_WMIGUID_OBJECT, + SE_REGISTRY_WOW64_32KEY + } + + [Flags] + private enum SECURITY_INFORMATION : uint + { + Owner = 0x00000001, + Group = 0x00000002, + Dacl = 0x00000004, + Sacl = 0x00000008, + ProtectedDacl = 0x80000000, + ProtectedSacl = 0x40000000, + UnprotectedDacl = 0x20000000, + UnprotectedSacl = 0x10000000 + } + + + [StructLayout(LayoutKind.Sequential)] + public struct SECURITY_ATTRIBUTES + { + public int nLength; + public IntPtr lpSecurityDescriptor; + public int bInheritHandle; + + public static SECURITY_ATTRIBUTES Empty + { + get + { + SECURITY_ATTRIBUTES sa = new SECURITY_ATTRIBUTES(); + sa.nLength = sizeof(int)*2 + IntPtr.Size; + sa.lpSecurityDescriptor = IntPtr.Zero; + sa.bInheritHandle = 0; + return sa; + } + } + } + + /// + /// Memory Protection Constants + /// http://msdn.microsoft.com/en-us/library/aa366786.aspx + /// + [Flags] + public enum FileProtection : uint + { + NONE = 0x00, + PAGE_NOACCESS = 0x01, + PAGE_READONLY = 0x02, + PAGE_READWRITE = 0x04, + PAGE_WRITECOPY = 0x08, + PAGE_EXECUTE = 0x10, + PAGE_EXECUTE_READ = 0x20, + PAGE_EXECUTE_READWRITE = 0x40, + PAGE_EXECUTE_WRITECOPY = 0x80, + PAGE_GUARD = 0x100, + PAGE_NOCACHE = 0x200, + PAGE_WRITECOMBINE = 0x400, + SEC_FILE = 0x800000, + SEC_IMAGE = 0x1000000, + SEC_RESERVE = 0x4000000, + SEC_COMMIT = 0x8000000, + SEC_NOCACHE = 0x10000000 + } + + + /// + /// Access rights for file mapping objects + /// http://msdn.microsoft.com/en-us/library/aa366559.aspx + /// + [Flags] + public enum FileMapAccess + { + FILE_MAP_COPY = 0x0001, + FILE_MAP_WRITE = 0x0002, + FILE_MAP_READ = 0x0004, + FILE_MAP_ALL_ACCESS = 0x000F001F + } + + + /// + /// Represents a wrapper class for a file mapping handle. + /// + [SuppressUnmanagedCodeSecurity, + HostProtection(SecurityAction.LinkDemand, MayLeakOnAbort = true)] + internal sealed class SafeFileMappingHandle : SafeHandleZeroOrMinusOneIsInvalid + { + [SecurityPermission(SecurityAction.LinkDemand, UnmanagedCode = true)] + private SafeFileMappingHandle() + : base(true) + { + } + + [SecurityPermission(SecurityAction.LinkDemand, UnmanagedCode = true)] + public SafeFileMappingHandle(IntPtr handle, bool ownsHandle) + : base(ownsHandle) + { + base.SetHandle(handle); + } + + [ReliabilityContract(Consistency.WillNotCorruptState, Cer.Success), + DllImport("kernel32.dll", CharSet = CharSet.Auto, SetLastError = true)] + [return: MarshalAs(UnmanagedType.Bool)] + private static extern bool CloseHandle(IntPtr handle); + + protected override bool ReleaseHandle() + { + return CloseHandle(base.handle); + } + } + + + internal static readonly IntPtr INVALID_HANDLE_VALUE = new IntPtr(-1); + + + /// + /// The class exposes Windows APIs used in this code sample. + /// + [SuppressUnmanagedCodeSecurity] + internal class NativeMethod + { + /// + /// Creates or opens a named or unnamed file mapping object for a + /// specified file. + /// + /// + /// A handle to the file from which to create a file mapping object. + /// + /// + /// A pointer to a SECURITY_ATTRIBUTES structure that determines + /// whether a returned handle can be inherited by child processes. + /// + /// + /// Specifies the page protection of the file mapping object. All + /// mapped views of the object must be compatible with this + /// protection. + /// + /// + /// The high-order DWORD of the maximum size of the file mapping + /// object. + /// + /// + /// The low-order DWORD of the maximum size of the file mapping + /// object. + /// + /// + /// The name of the file mapping object. + /// + /// + /// If the function succeeds, the return value is a handle to the + /// newly created file mapping object. + /// + [DllImport("Kernel32.dll", SetLastError = true)] + public static extern SafeFileMappingHandle CreateFileMapping( + IntPtr hFile, + ref SECURITY_ATTRIBUTES lpAttributes, + FileProtection flProtect, + uint dwMaximumSizeHigh, + uint dwMaximumSizeLow, + string lpName); + + + /// + /// Maps a view of a file mapping into the address space of a calling + /// process. + /// + /// + /// A handle to a file mapping object. The CreateFileMapping and + /// OpenFileMapping functions return this handle. + /// + /// + /// The type of access to a file mapping object, which determines the + /// protection of the pages. + /// + /// + /// A high-order DWORD of the file offset where the view begins. + /// + /// + /// A low-order DWORD of the file offset where the view is to begin. + /// + /// + /// The number of bytes of a file mapping to map to the view. All bytes + /// must be within the maximum size specified by CreateFileMapping. + /// + /// + /// If the function succeeds, the return value is the starting address + /// of the mapped view. + /// + [DllImport("Kernel32.dll", CharSet = CharSet.Auto, SetLastError = true)] + public static extern IntPtr MapViewOfFile( + SafeFileMappingHandle hFileMappingObject, + FileMapAccess dwDesiredAccess, + uint dwFileOffsetHigh, + uint dwFileOffsetLow, + uint dwNumberOfBytesToMap); + + + /// + /// Unmaps a mapped view of a file from the calling process's address + /// space. + /// + /// + /// A pointer to the base address of the mapped view of a file that + /// is to be unmapped. + /// + /// + [DllImport("Kernel32.dll", CharSet = CharSet.Auto, SetLastError = true)] + [return: MarshalAs(UnmanagedType.Bool)] + public static extern bool UnmapViewOfFile(IntPtr lpBaseAddress); + } + + #endregion + } +} + + diff --git a/SOLVER/dkxce.Route.ServiceSolver/dkxce.Route.ServiceSolver.Russia.cs b/SOLVER/dkxce.Route.ServiceSolver/dkxce.Route.ServiceSolver.Russia.cs new file mode 100644 index 0000000..3fa33a9 --- /dev/null +++ b/SOLVER/dkxce.Route.ServiceSolver/dkxce.Route.ServiceSolver.Russia.cs @@ -0,0 +1,1248 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Diagnostics; +using System.ServiceProcess; +using System.Text; +using System.IO; + +using System.Xml; +using System.Xml.Serialization; +using System.Configuration.Install; + +using System.Threading; +using System.Runtime.Remoting; +using System.Runtime.Remoting.Channels; +using System.Runtime.Remoting.Channels.Tcp; +using System.Runtime.Serialization.Formatters; + +using dkxce.Route.Classes; +using dkxce.Route.GSolver; +using dkxce.Route.ISolver; +using dkxce.Route.WayList; + +using dkxce.Route.Regions; + +namespace dkxce.Route.ServiceSolver +{ + public class RussiaSolver : MarshalByRefObject, IRoute + { + public class PreloadedRG + { + public bool forDescOnly = false; + public int region; + public RMGraph rmg; + public PreloadedRG(int region, RMGraph g, bool forDescOnly) + { + this.region = region; + this.rmg = g; + this.forDescOnly = forDescOnly; + } + } + + // Multithread vars + public static int[] _threadGraphsIds = new int[0]; + + // Õðàíèì îáúåêòû äëÿ íåñêîëüêèõ ïîòîêîâ + private static DirectoryXML _globalDirs = null; + private static PointInRegionUtils _globalRegions = null; + private static PreloadedRG[] _globalGraphs = new PreloadedRG[0]; + + private bool keepAlive = false; + + /// + /// Êýøèðîâàíûå ãðàôû, çàãðóæàþòñÿ ïðè çàïóñêå ñëóæáû + /// + private List _rt_Cached = new List(); + /// + /// Ñåññèîííûå ãðàôû, çàãðóæàþòñÿ ïî ìåðå íåîáõîäèìîñòè + /// + private List _rt_Session = new List(); + + /// + /// Ìàêñèìàëüíîå ÷èñëî ñåññèîííûõ ãðàôîâ, êîòîðûå áóäóò ñîõðàíåíû â ïàìÿòè äëÿ ñëåäóþùåé ñåññèè + /// + private const byte _rt_Session_SaveNext = 2; + /// + /// Ìàêñèìàëüíîå ÷èñëî ñåññèîííûõ ãðàôîâ, êîòîðûå ìîãóò áûòü ñîõðàíåíû â ïàìÿòè äëÿ òåêóùåé ñåññèè + /// + private const byte _rt_Session_SaveCurrent = 3; + /// + /// Ìîãóò ëè áûòü ñîõðàíåíû â òåêóùåé ñåññèè ãðàôû òîëüêî äëÿ îïèñàíèÿ + /// + private const bool _rt_Session_SaveDescripted = true; + /// + /// Ìîãóò ëè áûòü ñîõðàíåíû äëÿ ñëåäóþùåé ñåññèè ãðàôû òîëüêî äëÿ îïèñàíèÿ + /// + private const bool _rt_Session_SaveNextDescripted = true; + + public RussiaSolver() + { + RussiaSolverCreate(); + } + + public RussiaSolver(bool keepAlive) + { + this.keepAlive = keepAlive; + RussiaSolverCreate(); + } + + private void RussiaSolverCreate() + { + PreloadGlobalCache(null, null); // preload global cache if it still not + PreloadGraphsToCache(); // current thread cache + Thread.CurrentThread.Priority = ThreadPriority.AboveNormal; + } + + public static string PreloadGlobalCache(int[] regions, DirectoryXML initDirs) + { + if (_globalRegions != null) return ""; + + if ((_globalDirs == null) && (initDirs != null)) _globalDirs = initDirs; + if (_globalDirs == null) + { + string tmpfile = XMLSaved.GetCurrentDir() + @"\directories.xml"; + if (File.Exists(tmpfile)) + _globalDirs = XMLSaved.Load(tmpfile); + else + { + XMLSaved.AddErr2SysLog("[RussiaSolver] Configuration file `directories.xml` not found!"); + throw new Exception("Configuration file `directories.xml` not found!"); + }; + }; + + _globalRegions = new PointInRegionUtils(); + _globalRegions.LoadRegionsFromFile(_globalDirs.RegionsDirectory() + @"\regions.shp"); + + List tmp = new List(); + string regs = ""; + if(regions != null) + for (int i = 0; i < _globalRegions.RegionsCount; i++) + { + if (Array.IndexOf(regions, _globalRegions.RegionsIDs[i]) >= 0) + //if ((_globalRegions.RegionsIDs[i] == 11) || (_globalRegions.RegionsIDs[i] == 24) || (_globalRegions.RegionsIDs[i] == 10)) // 10 lipetsk // 11 msk // 24 spb + { + string file = _globalDirs.GraphDirectory() + @"\" + _globalRegions.RegionFileByRegionId(_globalRegions.RegionsIDs[i]); + if (System.IO.File.Exists(file)) + { + tmp.Add(new PreloadedRG(_globalRegions.RegionsIDs[i], RMGraph.LoadToMemoryGlobal(file, _globalRegions.RegionsIDs[i].ToString(), _globalRegions.RegionsIDs[i]), false)); + regs += (regs.Length > 0 ? ", " : "") + _globalRegions.RegionsIDs[i].ToString(); + }; + }; + }; + _globalGraphs = tmp.ToArray(); + + RouteThreader.mem.GlobalRegionsCache = _globalGraphs.Length.ToString() + "/" + _globalRegions.RegionsCount.ToString() + ": " + regs + " ... " + (_globalGraphs.Length == 0 ? "NONE" : "OK"); + RouteThreader.mem.GlobalRegionsCacheSize = 0; + if (_globalGraphs.Length > 0) + for (int i = 0; i < _globalGraphs.Length; i++) + RouteThreader.mem.GlobalRegionsCacheSize += _globalGraphs[i].rmg.GraphSize; + return "Load " + _globalGraphs.Length.ToString() + "/"+_globalRegions.RegionsCount.ToString()+" regions to global cache: " + regs + "... "+(_globalGraphs.Length == 0 ? "NONE" : "OK"); + } + + /// + /// Çàãðóæàåì ãðàôû â êýø ïðè çàïóñêå (äëÿ òåêóùåãî ïîòîêà) + /// + private void PreloadGraphsToCache() + { + string sx = ""; + if(_threadGraphsIds!=null) + for (int i = 0; i < _globalRegions.RegionsCount; i++) + { + if(Array.IndexOf(_threadGraphsIds,_globalRegions.RegionsIDs[i]) >= 0) + //if ((_globalRegions.RegionsIDs[i] == 11) || (_globalRegions.RegionsIDs[i] == 24)) // 10 lipetsk // 11 msk // 24 spb + { + string file = _globalDirs.GraphDirectory() + @"\" + _globalRegions.RegionFileByRegionId(_globalRegions.RegionsIDs[i]); + if (System.IO.File.Exists(file)) + { + _rt_Cached.Add(new PreloadedRG(_globalRegions.RegionsIDs[i], RMGraph.LoadToMemory(file, _globalRegions.RegionsIDs[i]), false)); + sx += (sx.Length > 0 ? ", " + _globalRegions.RegionsIDs[i].ToString() : _globalRegions.RegionsIDs[i].ToString()); + }; + }; + }; + RouteThreader.mem.ThreadRegionsCache = _threadGraphsIds.Length.ToString() + "/" + _globalRegions.RegionsCount.ToString() + ": " + sx + " ... " + (_rt_Cached.Count == 0 ? "NONE" : "OK"); + //if (this.keepAlive) + // XMLSaved.Add2SysLog("[RussiaSolver] Preload " + _rt_Cached.Count.ToString() + " regions: "+sx+" to client object"); + } + + /// + /// Ïîäãðóæàåì ñåññèîííûé ãðàô ïî ìåðå íåîáõîäèìîñòè + /// + /// + /// + /// + private RMGraph LoadGraph(int region, string file, bool forDescriptionOnly) + { + //look in static cache + for (int i = 0; i < _globalGraphs.Length; i++) + if (_globalGraphs[i].region == region) + //return _globalGraphs[i].rmg; + return RMGraph.IsolatedCopyFrom(_globalGraphs[i].rmg); + + // look in cached + for (int i = 0; i < _rt_Cached.Count; i++) + if (_rt_Cached[i].region == region) + return _rt_Cached[i].rmg; + + // look in session + for (int i = 0; i < _rt_Session.Count; i++) + if (_rt_Session[i].region == region) + return _rt_Session[i].rmg; + + // Åñëè ÷èñëî îòêðûòûõ ñåññèîííûõ ãðàôîâ = + // ìàêñèìàëüíîìó ÷èñëó ñåññèîííûõ ãðàôîâ, êîòîðûå ìîãóò áûòü îòêðûòû â òåêóùåé ñåññèè + // òî îñâîáîæäàåì ïàìÿòü îò îäíîãî ãðàôà, ÷òîáû äîáàâèò â ïàìÿòü íîâûé + if ((_rt_Session.Count == _rt_Session_SaveCurrent) && (_rt_Session.Count > 0)) + { + // â ïåðâóþ î÷åðåäü óäàëÿåì òîëüêî äëÿ îïèñàíèÿ + int delIndex = 0; + for (int i = 0; i < _rt_Session.Count; i++) + if (_rt_Session[i].forDescOnly) + { + delIndex = i; + break; + }; + _rt_Session[delIndex].rmg.Close(); + _rt_Session[delIndex].rmg = null; + _rt_Session.RemoveAt(delIndex); + }; + + // if no in session, then load in session + _rt_Session.Add(new PreloadedRG(region, RMGraph.LoadToMemory(file, region), forDescriptionOnly)); + return _rt_Session[_rt_Session.Count - 1].rmg; + } + + /// + /// Âûãðóæàåì ñåññèîííûé ãðàô + /// + /// + private void UnloadGraph(int region) + { + //// CloseAllTemporary + if(!_rt_Session_SaveDescripted) + for (int i = _rt_Session.Count - 1; i >= 0; i--) + if ((_rt_Session[i].region == region) && (_rt_Session[i].forDescOnly)) + { + _rt_Session[i].rmg.Close(); + _rt_Session[i].rmg = null; + _rt_Session.RemoveAt(i); + }; + + if (_rt_Session_SaveCurrent == 0) + for (int i = _rt_Session.Count - 1; i >= 0; i--) + if (_rt_Session[i].region == region) + { + _rt_Session[i].rmg.Close(); + _rt_Session[i].rmg = null; + _rt_Session.RemoveAt(i); + }; + } + + /// + /// Âûãðóæàåì âñå ñåññèîííûå ãðàôû (Çàêðûâàåì ñåññèþ) + /// + public void UnloadTemporaryGraphs() + { + if ((_rt_Session.Count > 0) && (!_rt_Session_SaveNextDescripted)) + { + for(int i=_rt_Session.Count-1;i>=0;i--) + if (_rt_Session[i].forDescOnly) + { + _rt_Session[i].rmg.Close(); + _rt_Session[i].rmg = null; + _rt_Session.RemoveAt(i); + }; + + }; + if (_rt_Session.Count > 0) + { + // Âûãðóæàåì ãðàôû, êîòîðûå áóäóò çàêðûòû, + // îñòàëüíûå áóäóò îòêðûòû äî ñëåäóþùåé ñåññèè + while (_rt_Session.Count > _rt_Session_SaveNext) // + { + _rt_Session[0].rmg.Close(); + _rt_Session[0].rmg = null; + _rt_Session.RemoveAt(0); + }; + }; + } + + public RNearRoad[] GetNearRoadPrivate(double[] lat, double[] lon, bool getNames) + { + if ((lat == null) || (lon == null) || (lat.Length == 0) || (lon.Length == 0) || (lat.Length != lon.Length)) + { + return new RNearRoad[] { new RNearRoad(0, 0, 0, "Error: 011 Íåâåðíî óêàçàíû òî÷êè") }; + }; + if (lat.Length > 1000) + { + return new RNearRoad[] { new RNearRoad(0, 0, 0, "Error: 015 Âû ïåðâûñèëè ìàêñèìàëüíî äîïóñòèìîå ÷èñëî òî÷åê - 1000") }; + }; + + RNearRoad[] res = new RNearRoad[lat.Length]; + RMGraph grS = null; + RouteDescription rd = null; + + int[] _RegIDs = new int[lat.Length]; + string[] _RegFiles = new string[lat.Length]; + string[] _RegName = new string[lat.Length]; + for (int i = 0; i < _RegIDs.Length; i++) + { + res[i] = new RNearRoad(double.MaxValue, 0, 0, "", "", -1); + + _RegIDs[i] = _globalRegions.PointInRegion(lat[i], lon[i]); + _RegFiles[i] = _globalDirs.GraphDirectory() + @"\" + _globalRegions.RegionFileByRegionId(_RegIDs[i]); + _RegName[i] = _globalRegions.RegionNameByRegionId(_RegIDs[i]); + + if((i==0) || (_RegIDs[i] != _RegIDs[i - 1]) || (grS == null)) + { + if (grS != null) UnloadGraph(_RegIDs[i-1]); + grS = null; + if (_RegIDs[i] < 1) + { + res[i].distance = double.MaxValue; + continue; + }; + try + { + grS = LoadGraph(_RegIDs[i], _RegFiles[i], false); + } + catch { grS = null; continue; }; + if (getNames) + rd = new RouteDescription(grS); + }; + + //float[][] NRS = grS.FindNearestLines((float)lat[i], (float)lon[i], (float)2000); + uint line = 0; + PointF ll = grS.PointToNearestLine((float)lat[i], (float)lon[i], (float)2000, out res[i].distance, out line); + if ((line == 0) || (line == uint.MaxValue)) + { + res[i].distance = double.MaxValue; + continue; + }; + res[i].lat = ll.Y; + res[i].lon = ll.X; + res[i].attributes = ""; + TLineFlags lf = grS.GetLineFlags(line); + if (lf.HasAttributes) + res[i].attributes = grS.AttributesToString(grS.GetLinesAttributes(new uint[] { line })[0]); + if (lf.IsOneWay) + res[i].attributes += (res[i].attributes.Length > 0 ? " 1w" : "1w"); + float d, t; + if (grS.GetLineLT(line, out d, out t)) + { + double speed = d / t / 1000.0 * 60; + res[i].attributes += (res[i].attributes.Length > 0 ? " avg" : "avg") + + speed.ToString("0."); + }; + res[i].region = grS.RegionID; + if (getNames) + res[i].name = rd.GetRoadName(new uint[] { line })[0]; + }; + if(_RegIDs.Length > 0) + if (grS != null) + if(_RegIDs[_RegIDs.Length-1] > 0) + UnloadGraph(_RegIDs[_RegIDs.Length-1]); + return res; + } + + + + /// + /// Ôëàãè: + /// 0x01 - ïîëó÷àòü ïîëèëèíèþ + /// 0x02 - ïîëó÷àòü îïèñàíèå + /// 0x04 - èñïîëüçîâàòü òåêóùèé òðàôèê + /// 0x08 - èñïîëüçîâàòü èñòîðè÷åñêèé òðàôèê + /// 0x10 - îïòèìèçèðîâàòü ïðîìåæóòî÷íûå òî÷êè ìàðøðóòà (ðåîðãàíèçàöèÿ) + /// 0x20 - îïòèìèçèðîâàòü ïî ðàññòîÿíèþ + /// 0x40 - äîïóñêàòü âûåçä íà äîðîãó è ñúåçä ÷åðåç âñòðå÷íóþ ïîëîñó + /// + /// + /// + /// + /// + private RResult GetRoutePrivate(RStop[] stops, DateTime startTime, long flags, int[] RegionsAvailableToUser, + PointF[] roadsExcept, double roadsExceptRadiusInMeters, byte[] roadsOnly) + { + bool getPolyline = (flags & 0x01) > 0; + bool getDirections = (flags & 0x02) > 0; + bool getCurrentTraffic = (flags & 0x04) > 0; + bool getHistoryTraffic = (flags & 0x08) > 0; + bool optimiseTSP = (flags & 0x10) > 0; + bool optimizeByDist = (flags & 0x20) > 0; + bool allowLeftTurns = (flags & 0x40) > 0; + + if (optimiseTSP) + TSP.OptimizeWayRoute(stops); + + if ((roadsOnly != null) && (roadsOnly.Length == 16)) + { + int c = 0; + for (int i = 0; i < roadsOnly.Length; i++) c += roadsOnly[i]; + if (c == 0) roadsOnly = null; + } + else roadsOnly = null; + + RResult res = new RResult(stops); + if ((stops == null) || (stops.Length < 2)) + { + res.LastError = "011 Íåîáõîäèìî ìèíèìóì 2 òî÷êè"; + UnloadTemporaryGraphs(); + return res; + }; + + if (stops.Length > 100) + { + res.LastError = "015 Âû ïåðâûñèëè ìàêñèìàëüíî äîïóñòèìîå ÷èñëî òî÷åê - 100"; + UnloadTemporaryGraphs(); + return res; + }; + + res.driveLengthSegments = new double[stops.Length]; + res.driveTimeSegments = new double[stops.Length]; + + /////////////////////// + // GET REGIONS POINTS IN + /////////////////////// + int[] _RegIDs = new int[stops.Length]; + string[] _RegFiles = new string[stops.Length]; + string[] _RegName = new string[stops.Length]; + for (int i = 0; i < _RegIDs.Length; i++) + { + _RegIDs[i] = _globalRegions.PointInRegion(stops[i].lat, stops[i].lon); + _RegFiles[i] = _globalDirs.GraphDirectory() + @"\" + _globalRegions.RegionFileByRegionId(_RegIDs[i]); + _RegName[i] = _globalRegions.RegionNameByRegionId(_RegIDs[i]); + + if (_RegIDs[i] < 1) + { + res.LastError = "012 Òî÷êà `"+stops[i].name+"` íå ïîïàäàåò â çîíó äîñòóïíîé êàðòû!"; + UnloadTemporaryGraphs(); + return res; + }; + if (!File.Exists(_RegFiles[i])) + { + res.LastError = "013 Äëÿ ðåãèîíà `" + _RegName[i] + "` ìàðøðóòû íåäîñòóïíû!"; + UnloadTemporaryGraphs(); + return res; + }; + }; + /////////////////////// + /////////////////////// + + + if ((RegionsAvailableToUser != null) && (RegionsAvailableToUser.Length > 0)) + { + if (RegionsAvailableToUser[0] > 0) + { + for (int i = 0; i < _RegIDs.Length; i++) + if (Array.IndexOf(RegionsAvailableToUser, _RegIDs[i]) < 0) + { + res.LastError = "003 " + stops[i].name + " - íåò ïðàâ íà ïîñòðîåíèå ìàðøðóòîâ â ðåãèîíå `" + _RegName[i] + "`"; + UnloadTemporaryGraphs(); + return res; + }; + } + else + { + for (int i = 0; i < _RegIDs.Length; i++) + if (Array.IndexOf(RegionsAvailableToUser, -1*_RegIDs[i]) >= 0) + { + res.LastError = "003 " + stops[i].name + " - íåò ïðàâ íà ïîñòðîåíèå ìàðøðóòîâ â ðåãèîíå `" + _RegName[i] + "`"; + UnloadTemporaryGraphs(); + return res; + }; + }; + }; + + res.startTime = startTime; + res.finishTime = res.startTime; + + for (int rNo = 1; rNo < _RegIDs.Length; rNo++) + { + if (_RegIDs[rNo] != _RegIDs[rNo - 1]) + { + RDPoint[] desc; + List descABC = new List(); + if (res.description != null) descABC.AddRange(res.description); + List descB = new List(); + List dtB = new List(); + + /////////////////////// + // GET RGNODES + /////////////////////// + List sRGNodes = new List(); + List sGraphNodes = new List(); + List sTimeToRGNode = new List(); + foreach (TRGNode rgnode in XMLSaved.Load(_globalDirs.GraphDirectory()+ @"\" + String.Format("{0:000}",_RegIDs[rNo-1]) + ".rgnodes.xml")) + if (rgnode.outer) + { + sRGNodes.Add((uint)rgnode.id); + sGraphNodes.Add(rgnode.node); + sTimeToRGNode.Add(Utils.GetLengthMeters(stops[rNo - 1].lat, stops[rNo - 1].lon, rgnode.lat, rgnode.lon, false) / 1500); // 90 km/h //// 1000 - 60kmph // 1670 - 100 kmph // 1840 - 110 kmph // 2000 - 120 kmph + }; + List eRGNodes = new List(); + List eGraphNodes = new List(); + List eTimeFromRGNode = new List(); + foreach (TRGNode rgnode in XMLSaved.Load(_globalDirs.GraphDirectory() + @"\" + String.Format("{0:000}", _RegIDs[rNo]) + ".rgnodes.xml")) + if (rgnode.inner) + { + eRGNodes.Add((uint)rgnode.id); + eGraphNodes.Add(rgnode.node); + eTimeFromRGNode.Add(Utils.GetLengthMeters(stops[rNo].lat, stops[rNo].lon, rgnode.lat, rgnode.lon, false) / 1500); // 90 km/h //// 1000 - 60kmph // 1670 - 100 kmph // 1840 - 110 kmph // 2000 - 120 kmph + }; + /////////////////////// + /////////////////////// + + int start_matrix_element = -1; + int end_matrix_element = -1; + + /////////////////////// + // Calculate shortest way (to_matrix+in_matrix) + /////////////////////// + dkxce.Route.Matrix.RMMatrix rm = null; + try + { + rm = dkxce.Route.Matrix.RMMatrix.LoadToMemory(_globalDirs.GraphDirectory() + @"\000.bin"); + } + catch(Exception) + { + res.LastError = "052 Ìåæðåãèîíàëüíûå ìàðøðóòû íåäîñòóïíû! Îñíîâíîé ôàéë íå íàéäåí!"; + UnloadTemporaryGraphs(); + return res; + }; + double time_abc = double.MaxValue; + for (int x = 0; x < sRGNodes.Count; x++) + for (int y = 0; y < eRGNodes.Count; y++) + { + float ttl_time = sTimeToRGNode[x] + rm.GetRouteTime(sRGNodes[x], eRGNodes[y]) + eTimeFromRGNode[y]; + if (ttl_time < time_abc) + { + time_abc = ttl_time; + start_matrix_element = x; + end_matrix_element = y; + }; + }; + + float dist_B = rm.GetRouteDist(sRGNodes[start_matrix_element], eRGNodes[end_matrix_element]); + float time_B = rm.GetRouteTime(sRGNodes[start_matrix_element], eRGNodes[end_matrix_element]); + float cost_B = rm.GetRouteCost(sRGNodes[start_matrix_element], eRGNodes[end_matrix_element]); + + if (dist_B > RMGraph.const_maxValue) + { + res.LastError = String.Format("100 Íåâîçìîæíî ïîñòðîèòü ìàðøðóò {0} - {1}", stops[rNo - 1].name, stops[rNo].name); + UnloadTemporaryGraphs(); + return res; + }; + + RouteResultStored nodes_B = new RouteResultStored(); + List points_B = new List(); + if (dist_B > 0) + { + List frt = new List(); + frt.Add(sRGNodes[start_matrix_element]); + uint[] mdl = rm.GetRouteWay(sRGNodes[start_matrix_element], eRGNodes[end_matrix_element]); + frt.AddRange(mdl); + frt.Add(eRGNodes[end_matrix_element]); + for (int i = 1; i < frt.Count; i++) + { + ushort bReg = rm.GetByReg(frt[i - 1], frt[i]); + string fN = _globalDirs.RGWaysDirectory() + @"\" + String.Format(@"{0}T{1}B{2}.rgway.xml", frt[i - 1], frt[i], bReg); + if(!File.Exists(fN)) fN = _globalDirs.RGWaysDirectory() + @"\" + String.Format(@"{0}T{1}.rgway.xml", frt[i - 1], frt[i]); + nodes_B = XMLSaved.Load(fN); + points_B.AddRange(nodes_B.route.vector); + // DESC++ + if (getDirections) + { + string regFN = _globalDirs.GraphDirectory() + @"\" + _globalRegions.RegionFileByRegionId(nodes_B.Region); + + if (!File.Exists(regFN)) + { + res.LastError = "053 Äëÿ ðåãèîíà `" + _globalRegions.RegionNameByRegionId(nodes_B.Region) + "` îïèñàíèå íå ìîæåò áûòü çàãðóæåíî!"; + UnloadTemporaryGraphs(); + return res; + }; + + RMGraph tmpG = LoadGraph(nodes_B.Region, regFN, true); + RouteDescription td = new RouteDescription(tmpG); + td.Templates.S_BEGIN = "Ïðîäîëæåíèå ìàðøðóòà"; + desc = td.GetDescription(nodes_B.route, null, null); + if (desc.Length > 0) + { + desc[0].name = _globalRegions.RegionNameByRegionId(nodes_B.Region); + desc[desc.Length - 1].name = _globalRegions.RegionNameByRegionId(nodes_B.Region) + ", ãðàíèöà"; ; + }; + descB.Add(desc); + dtB.Add(new double[] { nodes_B.route.length, nodes_B.route.time }); + + UnloadGraph(nodes_B.Region); // tmpG.Close(); // close in preloaded overcount + }; + // --DESC + }; + }; + rm.Close(); + /////////////////////// + /////////////////////// + + /////////////////////// + // FROM ROUTE + /////////////////////// + RMGraph grS = LoadGraph(_RegIDs[rNo - 1],_RegFiles[rNo - 1], false); + + grS.TrafficStartTime = res.finishTime; + grS.TrafficUseCurrent = getCurrentTraffic; + grS.TrafficUseHistory = getHistoryTraffic; + FindStartStopResult nodeStart = grS.FindNodeStart((float)stops[rNo-1].lat, (float)stops[rNo-1].lon, (float)2000); + if (nodeStart.nodeN == 0) + { + res.LastError = "014 Íå íàéäåíû äîðîãè âáëèçè òî÷êè `" + stops[rNo - 1].name + "`"; + UnloadTemporaryGraphs(); + return res; + }; + + grS.GoExcept.Clear(); + grS.GoThrough = null; + if (true) // UseGoLogic + { + if ((roadsExcept != null) && (roadsExcept.Length != 0)) + for (int r = 0; r < roadsExcept.Length; r++) + { + float[][] nl = grS.FindNearestLines(roadsExcept[r].Y, roadsExcept[r].X, (float)roadsExceptRadiusInMeters * 2); + if ((nl != null) && (nl.Length > 0)) + foreach (float[] nll in nl) + if (nll[0] <= roadsExceptRadiusInMeters) + grS.GoExcept.Add((uint)(nll[3]));//0-distance,1-x,2-y,3-line + }; + if ((roadsOnly != null) && (roadsOnly.Length == 16)) grS.GoThrough = roadsOnly; + }; + + grS.BeginSolve(true, null); + grS.MinimizeRouteBy = optimizeByDist ? MinimizeBy.Dist : MinimizeBy.Time; + grS.SolveAstar(nodeStart.nodeN, sGraphNodes[start_matrix_element]); + RouteResult resA = grS.GetRouteFull(nodeStart, sGraphNodes[start_matrix_element], true, allowLeftTurns); + if (resA.length > RMGraph.const_maxValue) + { + UnloadTemporaryGraphs(); + res.LastError = "100 Ìàðøðóò `" + stops[rNo - 1].name + "` - `" + stops[rNo].name + "` íå íàéäåí"; + return res; + }; + + if (getDirections) + { + RouteDescription td = new RouteDescription(grS); + desc = td.GetDescription(resA, nodeStart, null); + if (desc.Length > 0) + { + desc[0].name = stops[rNo - 1].name; + desc[desc.Length - 1].name = _RegName[rNo-1] + ", ãðàíèöà"; + for (int x = 0; x < desc.Length; x++) + { + desc[x].dist += (float)res.driveLength; + desc[x].time += (float)res.driveTime; + }; + }; + descABC.AddRange(desc); + }; + + grS.EndSolve(); + UnloadGraph(_RegIDs[rNo - 1]); // grS.Close(); // close in preloaded overcount + + //////RResult rr = null; // External GetRoute(... + //////if (rr.LastError != "") + //////{ + ////// res.LastError = rr.LastError; + ////// CloseAllTemporary(); + ////// return res; + //////}; + //////resA = new RouteResult(); + //////resA.length = (float)rr.driveLength; + //////resA.time = (float)rr.driveTime; + //////resA.vector = rr.vector; + //////descABC.AddRange(rr.description); + + //////////////////////// + // MATRIX DESCRIPTION // + //////////////////////// + if ((getDirections) && (descB.Count > 0)) + { + double pd = 0; + double pt = 0; + for (int i = 0; i < descB.Count; i++) + { + for (int x = 0; x < descB[i].Length; x++) + { + descB[i][x].dist += (float)res.driveLength + resA.length +(float)pd; + descB[i][x].time += (float)res.driveTime + resA.time + (float)pt; + }; + descABC.AddRange(descB[i]); + pd += dtB[i][0]; + pt += dtB[i][1]; + }; + }; + + /////////////////////// + // TO ROUTE + /////////////////////// + RMGraph grE = LoadGraph(_RegIDs[rNo], _RegFiles[rNo], false); + grE.TrafficStartTime = grS.TrafficStartTime.AddMinutes(resA.time + time_B); + grE.TrafficUseCurrent = getCurrentTraffic; + grE.TrafficUseHistory = getHistoryTraffic; + FindStartStopResult nodeEnd = grE.FindNodeEnd((float)stops[rNo].lat, (float)stops[rNo].lon, (float)2000); + if (nodeEnd.nodeN == 0) + { + res.LastError = "014 Íå íàéäåíû äîðîãè âáëèçè òî÷êè `" + stops[rNo].name + "`"; + UnloadTemporaryGraphs(); + return res; + }; + + grE.GoExcept.Clear(); + grE.GoThrough = null; + if (true) // UseGoLogic + { + if ((roadsExcept != null) && (roadsExcept.Length != 0)) + for (int r = 0; r < roadsExcept.Length; r++) + { + float[][] nl = grE.FindNearestLines(roadsExcept[r].Y, roadsExcept[r].X, (float)roadsExceptRadiusInMeters * 2); + if ((nl != null) && (nl.Length > 0)) + foreach (float[] nll in nl) + if (nll[0] <= roadsExceptRadiusInMeters) + grE.GoExcept.Add((uint)(nll[3]));//0-distance,1-x,2-y,3-line + }; + if ((roadsOnly != null) && (roadsOnly.Length == 16)) grE.GoThrough = roadsOnly; + }; + + grE.BeginSolve(true, null); + grE.MinimizeRouteBy = optimizeByDist ? MinimizeBy.Dist : MinimizeBy.Time; + grE.SolveAstar(eGraphNodes[end_matrix_element], nodeEnd.nodeN); + RouteResult resC = grE.GetRouteFull(eGraphNodes[end_matrix_element], nodeEnd, true, allowLeftTurns); + if (resC.length > RMGraph.const_maxValue) + { + UnloadTemporaryGraphs(); + res.LastError = "100 Ìàðøðóò `" + stops[rNo-1].name + "` - `" + stops[rNo].name + "` íå íàéäåí"; + return res; + }; + + if (getDirections) + { + RouteDescription td = new RouteDescription(grE); + td.Templates.S_BEGIN = "Ïðîäîëæåíèå ìàðøðóòà"; + desc = td.GetDescription(resC, null, nodeEnd); + if (desc.Length > 0) + { + desc[0].name = _RegName[rNo]; + desc[desc.Length - 1].name = stops[rNo].name; + for (int x = 0; x < desc.Length; x++) + { + desc[x].dist += (float)res.driveLength + resA.length + dist_B; + desc[x].time += (float)res.driveTime + resA.time + time_B; + }; + }; + descABC.AddRange(desc); + }; + + grE.EndSolve(); + + UnloadGraph(_RegIDs[rNo]); // grE.Close(); // close in preloaded overcount + + //////RResult rr = null; // External GetRoute(... + //////if (rr.LastError != "") + //////{ + ////// res.LastError = rr.LastError; + ////// CloseAllTemporary(); + ////// return res; + //////}; + //////resC = new RouteResult(); + //////resC.length = (float)rr.driveLength; + //////resC.time = (float)rr.driveTime; + //////resC.vector = rr.vector; + //////descABC.AddRange(rr.description); + + /////////////////////// + /////////////////////// + + // SUM // + res.driveLength += resA.length + dist_B + resC.length; + res.driveTime += resA.time + time_B + resC.time; + res.finishTime = res.finishTime.AddMinutes(resA.time + time_B + resC.time); + + if (getPolyline) + { + List vec = new List(); + if (res.vector != null) vec.AddRange(res.vector); + for (int x = 0; x < nodeStart.normal.Length; x++) + vec.Add(new PointFL(nodeStart.normal[x], 0, 0, (x > 0) && ((resA.vector != null) && (resA.vector.Length != 0)) ? resA.vector[0].speed : 20)); + vec.AddRange(resA.vector); + vec.AddRange(points_B); + vec.AddRange(resC.vector); + for (int x = 0; x < nodeEnd.normal.Length; x++) + vec.Add(new PointFL(nodeEnd.normal[x], 0, 0, (x < (nodeEnd.normal.Length - 1)) && ((resC.vector != null) && (resC.vector.Length != 0)) ? resC.vector[resC.vector.Length-1].speed : 20)); + res.vector = vec.ToArray(); + }; + + if (getDirections) + res.description = descABC.ToArray(); + } + else + { + List descABC = new List(); + if (res.description != null) descABC.AddRange(res.description); + + ///////////////////////// + // IN-ONE-REGION ROUTE // + ///////////////////////// + RMGraph gr = LoadGraph(_RegIDs[rNo-1], _RegFiles[rNo - 1], false); + gr.TrafficStartTime = res.finishTime; + gr.TrafficUseCurrent = getCurrentTraffic; + gr.TrafficUseHistory = getHistoryTraffic; + + FindStartStopResult nodeStart = gr.FindNodeStart((float)stops[rNo - 1].lat, (float)stops[rNo - 1].lon, (float)2000); + FindStartStopResult nodeEnd = gr.FindNodeEnd((float)stops[rNo].lat, (float)stops[rNo].lon, (float)2000); + if (nodeStart.nodeN == 0) + { + res.LastError = "014 Íå íàéäåíû äîðîãè âáëèçè òî÷êè `" + stops[rNo - 1].name + "`"; + UnloadTemporaryGraphs(); + return res; + }; + if (nodeEnd.nodeN == 0) + { + res.LastError = "014 Íå íàéäåíû äîðîãè âáëèçè òî÷êè `" + stops[rNo].name + "`"; + UnloadTemporaryGraphs(); + return res; + }; + gr.GoExcept.Clear(); + gr.GoThrough = null; + if (true) // UseGoLogic + { + if ((roadsExcept != null) && (roadsExcept.Length != 0)) + for (int r = 0; r < roadsExcept.Length; r++) + { + float[][] nl = gr.FindNearestLines(roadsExcept[r].Y, roadsExcept[r].X, (float)roadsExceptRadiusInMeters * 2); + if ((nl != null) && (nl.Length > 0)) + foreach (float[] nll in nl) + if (nll[0] <= roadsExceptRadiusInMeters) + gr.GoExcept.Add((uint)(nll[3]));//0-distance,1-x,2-y,3-line + }; + if ((roadsOnly != null) && (roadsOnly.Length == 16)) gr.GoThrough = roadsOnly; + }; + + gr.BeginSolve(true, null); + gr.MinimizeRouteBy = optimizeByDist ? MinimizeBy.Dist : MinimizeBy.Time; + + // Added 21.12.2021 where 1 line in route for WATER + RouteResult resF; + if (allowLeftTurns && (nodeStart.line == nodeEnd.line)) + { + resF = gr.GetFullRouteOneLine(nodeStart, nodeEnd); + } + else + { + gr.SolveAstar(nodeStart.nodeN, nodeEnd.nodeN); + resF = gr.GetRouteFull(nodeStart, nodeEnd, true, allowLeftTurns); + }; + + if (resF.length > RMGraph.const_maxValue) + { + UnloadTemporaryGraphs(); + res.LastError = "100 Ìàðøðóò `" + stops[rNo-1].name + "` - `" + stops[rNo].name + "` íå íàéäåí"; + return res; + }; + + if (getPolyline) + { + List vec = new List(); + if (res.vector != null) vec.AddRange(res.vector); + for (int x = 0; x < nodeStart.normal.Length; x++) + vec.Add(new PointFL(nodeStart.normal[x], 0, 0, (x > 0) && ((resF.vector != null) && (resF.vector.Length != 0)) ? resF.vector[0].speed : 20)); + vec.AddRange(resF.vector); + for (int x = 0; x < nodeEnd.normal.Length; x++) + vec.Add(new PointFL(nodeEnd.normal[x], 0, 0, (x < (nodeEnd.normal.Length-1)) && ((resF.vector != null) && (resF.vector.Length != 0)) ? resF.vector[resF.vector.Length-1].speed : 20)); + res.vector = vec.ToArray(); + }; + + if (getDirections) + { + RouteDescription td = new RouteDescription(gr); + RDPoint[] desc = td.GetDescription(resF, nodeStart, nodeEnd); + if (desc.Length > 0) + { + desc[0].name = stops[rNo-1].name; + desc[desc.Length - 1].name = stops[rNo].name; + for (int x = 0; x < desc.Length; x++) + { + desc[x].dist += (float)res.driveLength; + desc[x].time += (float)res.driveTime; + }; + }; + descABC.AddRange(desc); + + res.description = descABC.ToArray(); + }; + + gr.EndSolve(); + UnloadGraph(_RegIDs[rNo - 1]); // gr.Close(); // close in preloaded overcount + + // SUM // + res.driveLength += resF.length; + res.driveTime += resF.time; + res.finishTime = res.finishTime.AddMinutes(resF.time); + }; + + if ((res.vector != null) && (res.vectorSegments == null)) res.vectorSegments = new int[stops.Length]; + if (res.vectorSegments != null) res.vectorSegments[rNo] = res.vector.Length; + if ((res.description != null) && (res.descriptionSegments == null)) res.descriptionSegments = new int[stops.Length]; + if (res.descriptionSegments != null) res.descriptionSegments[rNo] = res.description.Length; + + res.driveLengthSegments[rNo] = res.driveLength; + res.driveTimeSegments[rNo] = res.driveTime; + + // + // + // Íàì åù¸ íåîáõîäèìû äëèíà è âðåìÿ äâèæåíèÿ ìåæäó êàæäûìè äâóìÿ òî÷êàìè + // res.driveLength + // res.driveTime + // + }; + + if (res.vectorSegments != null) res.vectorSegments[stops.Length - 1]--; + if (res.descriptionSegments != null) res.descriptionSegments[stops.Length - 1]--; + + UnloadTemporaryGraphs(); + return res; + } + + + /// + /// Ôëàãè: + /// 0x01 - ïîëó÷àòü ïîëèëèíèþ + /// 0x02 - ïîëó÷àòü îïèñàíèå + /// 0x04 - èñïîëüçîâàòü òåêóùèé òðàôèê + /// 0x08 - èñïîëüçîâàòü èñòîðè÷åñêèé òðàôèê + /// 0x10 - îïòèìèçèðîâàòü ïðîìåæóòî÷íûå òî÷êè ìàðøðóòà (ðåîðãàíèçàöèÿ) + /// 0x20 - îïòèìèçèðîâàòü ïî ðàññòîÿíèþ + /// 0x40 - äîïóñêàòü âûåçä íà äîðîãó è ñúåçä ÷åðåç âñòðå÷íóþ ïîëîñó + /// + /// + /// + /// + /// + public RResult GetRoute(RStop[] stops, DateTime startTime, long flags, int[] RegionsAvailableToUser) + { + return GetRoute(stops, startTime, flags, RegionsAvailableToUser, null, 0, null); + } + + /// + /// Ôëàãè: + /// 0x01 - ïîëó÷àòü ïîëèëèíèþ + /// 0x02 - ïîëó÷àòü îïèñàíèå + /// 0x04 - èñïîëüçîâàòü òåêóùèé òðàôèê + /// 0x08 - èñïîëüçîâàòü èñòîðè÷åñêèé òðàôèê + /// 0x10 - îïòèìèçèðîâàòü ïðîìåæóòî÷íûå òî÷êè ìàðøðóòà (ðåîðãàíèçàöèÿ) + /// 0x20 - îïòèìèçèðîâàòü ïî ðàññòîÿíèþ + /// 0x40 - äîïóñêàòü âûåçä íà äîðîãó è ñúåçä ÷åðåç âñòðå÷íóþ ïîëîñó + /// + /// + /// + /// + /// + /// Èçáåãàÿ ïðîåçä ïî äîðîãàì ñêâîçü òî÷êè [X-Lon,Y-Lat] + /// Èçáåãàÿ ïðîåçä ïî äîðîãàì ñêâîçü òî÷êè, ðàäèóñ â ìåòðàõ + /// Ïàðàìåòðû ïîñòðîåíèÿ ìàðøðóòà èñïîëüçóÿ àòðèáóòû äîðîã + /// + public RResult GetRoute(RStop[] stops, DateTime startTime, long flags, int[] RegionsAvailableToUser, + PointF[] roadsExcept, double roadsExceptRaduisInMeters, byte[] RoadsOnly) + { + mtx.WaitOne(); + RResult res = new RResult(null); + try + { + res = GetRoutePrivate(stops, startTime, flags, RegionsAvailableToUser, roadsExcept, roadsExceptRaduisInMeters, RoadsOnly); + mtx.ReleaseMutex(); + return res; + } + catch (System.Threading.ThreadAbortException) + { + res.LastError = "101 Ìàðøðóò íå íàéäåí, ïðåâûøåíî âðåìÿ ðàñ÷åòà"; + mtx.ReleaseMutex(); + return res; + } + catch (Exception ex) + { + XMLSaved.AddErr2SysLog("Engine Exception: " + ex.ToString()); + res.LastError = "050 Engine Exception: "+ex.Message.ToString(); + mtx.ReleaseMutex(); + return res; + }; + } + private Mutex mtx = new Mutex(); // íà òîò ñëó÷àé åñëè âäðóã ê îáúåêòó ïûòàåòñÿ ïîëó÷èòü äîñòóï äðóãîé ïîòîê + + /// + /// Ïðèâÿçêà òî÷êè ê äîðîãå + /// + /// Øèðîòà + /// Äîëãîòà + /// Çàïðàøèâàòü íàèìåíîâàíèå äîðîãè (ðàáîòàåò äîëüøå) + /// Ïðèâÿçàííûå ê äîðîãå òî÷êè + public RNearRoad[] GetNearRoad(double[] lat, double[] lon, bool getNames) + { + mtx.WaitOne(); + RNearRoad[] res = new RNearRoad[0]; + try + { + res = GetNearRoadPrivate(lat, lon, getNames); + mtx.ReleaseMutex(); + return res; + } + catch (System.Threading.ThreadAbortException) + { + mtx.ReleaseMutex(); + return null; + } + catch (Exception) + { + mtx.ReleaseMutex(); + return null; + }; + } + + /// + /// Îáùåå ÷èñëî ïîòîêîâ íà ñåðâåðå + /// + /// + public int GetThreadsCount() { return 1; } + + /// + /// Íîìåð íåçàíÿòîãî ïîòîêà + /// + /// + public int GetIdleThreadCount() { return 0; } + + /// + /// Íàõîäèì ðàññòîÿíèå îò èñõîäíîé/êîíå÷íîé êîîðäèíàòû äî êàæäîé ëèíèè + /// + /// Øèðîòà + /// Äîëãîòà + /// Ðàäèóñ ïîèñêà áëèæàéøåé ëèíèè â ìåòðàõ + /// array[0..NumberOfNearPoints-1][0: distance,1: X or Lon,2: Y or Lat,3: line_id] + public float[][] FindNearestLines(float Lat, float Lon, float metersRadius) + { + int reg = _globalRegions.PointInRegion(Lat, Lon); + string file = _globalDirs.GraphDirectory() + @"\" + _globalRegions.RegionFileByRegionId(reg); + if (!File.Exists(file)) return new float[][] { new float[0] }; + RMGraph g = LoadGraph(reg, file, false); + float[][] ret = g.FindNearestLines(Lat, Lon, metersRadius); + UnloadTemporaryGraphs(); + return ret; + } + /// + /// Íàõîäèì ðàññòîÿíèå îò èñõîäíîé/êîíå÷íîé êîîðäèíàòû äî êàæäîé ëèíèè + /// + /// Øèðîòà + /// Äîëãîòà + /// Ðàäèóñ ïîèñêà áëèæàéøåé ëèíèè â ìåòðàõ + /// array[0..NumOfPoints-1][0..NumberOfNearPoints-1][0: distance,1: X or Lon,2: Y or Lat,3: line_id] + public float[][][] FindNearestLines(float[] Lat, float[] Lon, float metersRadius) + { + if ((Lat == null) || (Lon == null) || (Lat.Length == 0) || (Lon.Length == 0) || (Lat.Length != Lon.Length)) + throw new OverflowException(); + + List regsTtl = new List(); + + List res = new List(); + for (int i = 0; i < Lat.Length; i++) + { + int reg = _globalRegions.PointInRegion(Lat[i], Lon[i]); + if (!regsTtl.Contains(reg)) regsTtl.Add(reg); + if (regsTtl.Count > 3) throw new OverflowException("Maximum allow only 3 regions in one query"); + + string file = _globalDirs.GraphDirectory() + @"\" + _globalRegions.RegionFileByRegionId(reg); + if (File.Exists(file)) + { + RMGraph g = LoadGraph(reg, file, false); + res.Add(g.FindNearestLines(Lat[i], Lon[i], metersRadius)); + UnloadGraph(reg); + } + else + res.Add(new float[][] { new float[0] }); + }; + UnloadTemporaryGraphs(); + return res.ToArray(); + } + + public void Close() + { + if (_rt_Cached != null) + foreach (PreloadedRG pp in _rt_Cached) + pp.rmg.Close(); + _rt_Cached = null; + + if (_rt_Session != null) + foreach (PreloadedRG pp in _rt_Session) + pp.rmg.Close(); + _rt_Session = null; + } + + ~RussiaSolver() + { + if (_rt_Cached != null) + foreach (PreloadedRG pp in _rt_Cached) + pp.rmg.Close(); + _rt_Cached = null; + + if (_rt_Session != null) + foreach (PreloadedRG pp in _rt_Session) + pp.rmg.Close(); + _rt_Session = null; + } + + //public static void RussiaSolver_Test_PreService() + //{ + // RussiaSolver ls = new RussiaSolver(); + // // 4 REGS + // //RStop[] ss = new RStop[] { new RStop("POINT A", 52.6163902330, 38.51806640625), new RStop("POINT B", 55.178867663282, 34.310302734375) }; + + // // LIPETSK + // //RStop[] ss = new RStop[2] { new RStop("POINT A", 53.365, 40.10), new RStop("POINT B", 52.105, 39.176) }; + + // // 4 REGS + LIP + // RStop[] ss = new RStop[] { + // new RStop("POINT A", 53.365, 40.10), + // new RStop("POINT B", 52.105, 39.176), + // new RStop("POINT C", 52.6163902330, 38.51806640625), + // new RStop("POINT D", 55.178867663282, 34.310302734375) + // }; + + // // NEREST LINES + // float[][][] nlns = ls.FindNearestLines(new float[] { (float)ss[0].lat, (float)ss[2].lat }, new float[] { (float)ss[0].lon, (float)ss[2].lon }, 100); + + // DateTime dt = DateTime.Now; + // RResult rr = ls.GetRoute(ss, DateTime.Now.AddHours(2), 3, null); + // TimeSpan ts = DateTime.Now.Subtract(dt); + // ls.Close(); + + // // SAVE // + // RouteDescription rd = new RouteDescription(null); + // if(rr.description != null) + // rd.SaveTextDescription(rr.description, XMLSaved.GetCurrentDir() + @"\Matrix6\WAY-LIST.txt"); + // if(rr.vector != null) + // ToJS(rr.vector); + //} + + public override object InitializeLifetimeService() + { + if (keepAlive) + return null; // to make the object live indefinitely + else + return base.InitializeLifetimeService(); + } + + //private static void ToJS(PointFL[] route) + //{ + // string s = ""; + // s += "var polyrussia = new GPolyline([\r\n"; + // for (int i = 0; i < route.Length; i++) + // s += "new GLatLng(" + route[i].Y.ToString().Replace(",", ".") + ", " + route[i].X.ToString().Replace(",", ".") + ")" + (i < (route.Length - 1) ? "," : "") + "\r\n"; + // s += "], \"#FF0000\", 5);\r\n"; + // s += "map.addOverlay(polyrussia);\r\n\r\n"; + + // System.Windows.Forms.Clipboard.SetText(s); + //} + + //public static void Russia_Test_SvcCmd() + //{ + // RussiaSolver rus = new RussiaSolver(); + + // //List stops = new List(); + // //stops.Add(new RStop("U-18", 55.54757, 37.5489)); + // //stops.Add(new RStop("Garage", 55.54166, 37.55245)); + // //stops.Add(new RStop("MAK", 55.54852, 37.5426)); + // //stops.Add(new RStop("I-46", 55.54569, 37.56069)); + // //stops.Add(new RStop("Parking", 55.54968, 37.5447)); + // //stops.Add(new RStop("I-50", 55.54378, 37.5599)); + // //stops.Add(new RStop("Gasoline", 55.55619, 37.5537)); + // //RResult rrtest = rus.GetRoute(stops.ToArray(), DateTime.Now, 1 + 2 + 0x10, null); + + // BinaryServerFormatterSinkProvider provider = new BinaryServerFormatterSinkProvider(); + // provider.TypeFilterLevel = TypeFilterLevel.Full; + + // IDictionary RouteSearcherProps = new Hashtable(); + // RouteSearcherProps["name"] = "dkxce.Route.TCPSolver"; + // RouteSearcherProps["port"] = 7755; + + // TcpChannel RouteSearcherChannel = new TcpChannel(RouteSearcherProps, null, provider); + // ChannelServices.RegisterChannel(RouteSearcherChannel, false); + // ObjRef reference = RemotingServices.Marshal(rus, "dkxce.Route.TCPSolver"); + + // Console.WriteLine("Listen at " + string.Format("tcp://{0}:{1}/dkxce.Route.TCPSolver", "localhost", 7755)); + // Console.ReadLine(); + + // RemotingServices.Disconnect(rus); + // reference = null; + // ChannelServices.UnregisterChannel(RouteSearcherChannel); + // RouteSearcherChannel = null; + // rus = null; + //} + + public int[] GetRegionsPreload + { + get + { + int[] result = new int[_rt_Cached.Count]; + for (int i = 0; i < result.Length; i++) result[i] = _rt_Cached[i].region; + return result; + } + } + + public ulong GetRegionsPreloadSize + { + get + { + ulong sz = 0; + for (int i = 0; i < _rt_Cached.Count; i++) sz += (ulong)_rt_Cached[i].rmg.GraphSize; + return sz; + } + } + + public int[] GetRegionsSession + { + get + { + int[] result = new int[_rt_Session.Count]; + for (int i = 0; i < result.Length; i++) result[i] = _rt_Session[i].region; + return result; + } + } + + public ulong GetRegionsSessionSize + { + get + { + ulong sz = 0; + for (int i = 0; i < _rt_Session.Count; i++) sz += (ulong)_rt_Session[i].rmg.GraphSize; + return sz; + } + } + + public int[] GetRegionsGlobal + { + get + { + int[] result = new int[_globalGraphs.Length]; + for (int i = 0; i < result.Length; i++) result[i] = _globalGraphs[i].region; + return result; + } + } + + public ulong GetRegionsGlobalSize + { + get + { + ulong sz = 0; + for (int i = 0; i < _globalGraphs.Length; i++) sz += (ulong)_globalGraphs[i].rmg.GraphSize; + return sz; + } + } + + + } +} diff --git a/SOLVER/dkxce.Route.ServiceSolver/dkxce.Route.ServiceSolver.csproj b/SOLVER/dkxce.Route.ServiceSolver/dkxce.Route.ServiceSolver.csproj new file mode 100644 index 0000000..d25b80c --- /dev/null +++ b/SOLVER/dkxce.Route.ServiceSolver/dkxce.Route.ServiceSolver.csproj @@ -0,0 +1,125 @@ + + + Debug + AnyCPU + 8.0.50727 + 2.0 + {C7B3FF98-D586-472C-9EC3-BA5CFA15FDEB} + Exe + Properties + dkxce.Route.ServiceSolver + dkxce.Route.ServiceSolver + + + solver.ico + + + true + full + false + ..\..\READY\Service\ + DEBUG;TRACE + prompt + 4 + + + pdbonly + true + ..\..\READY\Service\ + TRACE + prompt + 4 + + + + False + ..\..\READY\MAIN_DLLs\dkxce.Route.Classes.dll + + + False + ..\..\READY\MAIN_DLLs\dkxce.Route.GSolver.dll + + + False + ..\..\READY\MAIN_DLLs\dkxce.Route.ISolver.dll + + + False + ..\..\READY\MAIN_DLLs\dkxce.Route.Matrix.dll + + + False + ..\..\READY\MAIN_DLLs\dkxce.Route.Regions.dll + + + False + ..\..\READY\MAIN_DLLs\dkxce.Route.WayList.dll + + + False + ..\..\READY\3RD_PARTY_DLLs\Newtonsoft.Json.dll + + + + + + + + + + + + + False + ..\..\READY\MAIN_DLLs\XMLSaved.dll + + + + + + + Component + + + + + + + + Component + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/SOLVER/dkxce.Route.ServiceSolver/dkxce.Route.ServiceSolver.csproj.user b/SOLVER/dkxce.Route.ServiceSolver/dkxce.Route.ServiceSolver.csproj.user new file mode 100644 index 0000000..f58a043 --- /dev/null +++ b/SOLVER/dkxce.Route.ServiceSolver/dkxce.Route.ServiceSolver.csproj.user @@ -0,0 +1,9 @@ + + + + + + + dkxce.Route.ServiceSolver.WATER.xml + + \ No newline at end of file diff --git a/SOLVER/dkxce.Route.ServiceSolver/obj/Debug/dkxce.Route.ServiceSolver.exe b/SOLVER/dkxce.Route.ServiceSolver/obj/Debug/dkxce.Route.ServiceSolver.exe new file mode 100644 index 0000000000000000000000000000000000000000..025fa65153aa4d1677deceffe3db700915a6f2d9 GIT binary patch literal 348160 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%0A-fx`=%9+_Sg)&@r9EWR*y5FlGu&?hvHG7if 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 literal 0 HcmV?d00001 diff --git a/SOLVER/dkxce.Route.ServiceSolver/obj/Debug/dkxce.Route.ServiceSolver.pdb b/SOLVER/dkxce.Route.ServiceSolver/obj/Debug/dkxce.Route.ServiceSolver.pdb new file mode 100644 index 0000000000000000000000000000000000000000..e4f5b4695c3d36ad0f669cc6853e91df479731c9 GIT binary patch literal 337408 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 ggL`YcK` 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

jw5BQs;JB_t*T_S(U9HF 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 literal 0 HcmV?d00001 diff --git a/SOLVER/dkxce.Route.ServiceSolver/obj/Release/dkxce.Route.ServiceSolver.exe b/SOLVER/dkxce.Route.ServiceSolver/obj/Release/dkxce.Route.ServiceSolver.exe new file mode 100644 index 0000000000000000000000000000000000000000..0e4c243e6bb23d50b77bf2fc4ac923c26d70b29f GIT binary patch literal 323584 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 Lw#gF6YBX^2?YxCT>9{~H9Z9AP(P zf+G8>ZT~KiB=1r-U&o}%Md!7h@V+=IIkPN1tWy}(9UjH3m)VgmhkX?~nd~5Uk6(%2 zD(8QJ$U-?SV~(Bd1hykPq}v5|WQPS!`rqB7jp!Q_JF@f471}FWyO|}v9ohN1%CN(1 zQ8uM7=auDg1ShOPhgJs;yqw&&`*)kn$sGQ}kbm@E%TZS{^XZP2O!ipHN~Y>-b%ipc z3z_4`j9S*UXH)0~*q_!_OPHdIm7SVsqlA1DB&iaz9a43WrgGPXB`@VO>G)rS;K{7& z3HyuvIqFbSrkQfjEcy%4r07-yQNXBM$}ORH#MAV1hL&p1O&MN@IO~eO|1AnlNtLbg zzfkCq?f)yuFb}Q~GnY~80rn=drKDY_*>jp`fUtf@tf+yQ?@}*vc72?0^Rq(6!%sC# z!rX70G{K-+gJXV5qGA2MsTRsc@*#4#o_yH4le~R&Nt8isr2j4iu~}D)NKr!oDO-lB zPca<2Bol#7fSipSlwBfBFzI7e{Uo<&F&amqSLpsA zCX90v{+D3v7Q#{pQ{MQu<>?mmq_ZAAam=ydFN5iXoAC_3BGz*7RWX8l_;PBXA;nR@ z7YE~RDGzSJogn#4a5nU2biWU60sdRQPjc+Xx(|DF@e}`a|;czR&sa{&D{&S>UwD|OjVig8D9tohA`4p>b zv*tmICc+YzmU&~gXq>3 zlW_EKMI=PfWZLWb){*DQ^_Z6R;Yc&Hl@dr!ls9Y>vk8BavNMo<5ZlDiZ5)+6dR~&$ zKjXWx?c32S#C<}kWcma-&vrYV1VajU>jOkLHL~?Vj9P#F1t|Qt2}t3=Svb{e`ZeI| zYMLh0WH?|JYv-;Z8yu=^QdJ;lH1BL-e!C64s|9=*Ta)G?icND%FA+Ka9b51XnA^NN zh8YFJ*J7u4Ve>xho;2??3D#B#k`C@CjBd=;5lHw>#6We}(|?9r9XRq1j9pNoCmIrI zDLIxmI{;aCW#i-yX5XABevFdEIvD<%n6M0G0(47`{}aRv=Wq-k$pk3YTJU)>e10ZC zW7UF>hQBlMjAgmO7LUs##e{W3OEG~>?#>ARBD9OnVQ#M^S8RmIn$lxtJ(2-YHAndo z#&G{F(Qi;Db>zE)Hw9uayHB=uAZ%F%V~U-ONk>z&_F8|7FPXvcY^5VJq#+vjk}@m* z!{PY`yhrk~0iqC*XD(V5<*?GB<-V?l`b1@M>;1$jdxM-xy#EY{#jwP>4%tj#$Etc& zrZ(2`$hL|~&X(f_)lBwHd78h!P>vm^jHF+V7EsNO%hs(--*76IZx!LB#)+XM*}(&p zgQbx{q^6%g8WumtmO0? ziFPb!1W*_qZZ-@oUnMmo5<}Si&WPRimC`iC@Zs=d20n6?wi1u2)Mn;|_Zsm0tAwZ+ zdo-Le;IV9*;hnoPwA6GVk^Nb}fXMo{p|}1WJ{;Ew9>mOSm8u>*gmsd`QyA&S&w%98 z{mq|Z&I}jBKafgx&P<@6FDg(VXk>2w8 z>hQFlgDjQa3%*D4hSd@{kZFpEki#pih`ye9N}N{lAI3wY-n>82qPa+qt3QMijbH(G+GCO(8Ct0;l;pilz`3O<`8i6yl;O%qp5fTr`DQMN{l6MrBvn zOVP+#jiKP*$sx`Tzj0z?@t6(@uXzEOMcENCv(A1gitb)nL1(TgsFxj|ZvalmrO zfT%Pmt3s{L_vuzQ>R4ReWKUE_b(@{SteQ7{G1DMZ`F2y(yQ_qayOL zwPimB3$n}oF=%!gKj7PVl*$@eXWG{9x2=z<^+y`w$NFV3l?;9WxG8zp;Xq;wiQ0Lp zg7hZo#((f_{1BAL`lGh>$5?}(NNDMRG&GYN(^e&|4bO}Bf1G6})SN{)zN(w(pP2pQ>i^OB% zNH(PmxU54MDOWKGo9*tD3D@mtkd9~Pgt-I~?h;7&SNW5@^=HD&#|5U7{^l>mT5kSY z3^Sij7+BK4>f?;gnzYQiyW&@oDG|tIUqZ{||1Z)Vs7|ZbWQQ$5e*)H?u*CC~OvcPt z{$w{KGA?g>7?H1kfqHNSbO_95Wb)qxZr?E8q`P4=g?xi|f(Z{rSBT06{jIFpF*YU-RdveMem25DOU~8UF zTWQXY%I$Wq|D?H>EaDRz9k`iGxudxdWufNgS44_h(d1Vd^lJkVdqwz^v93y6vcJW( zCzR~+hNe)T*fL2~%8d<}o6DSWA5jeclh7XOyq99O?=maQl-VUL%!uRIsBz2;WyS`U z4(!gW(!SLx?TroSdkk#B|D5bPzKV!yyAQ=XwI=c4Hz0kJ=YjT+@;lt*{N=lkqmz0B z1MP+6hDrNx)tF)gB>*4kb-oz^%PV6jOm0C3mvYo@-ukO)EbG4`h;H1~z`^fvZlTHG zK9v4aym)`q`cgKk!Q4keNb0H;133Pmbg=!H*Fd8qQY<)#%l`w>jhf?qyT|kVKMDca z!M!8>Nst)IUbnB1mSIf0e3M%kJbm=^J%{s3#p?bnn-m4jB-0%`M>iM%t1fQQ?YYS9 zzNr3Rq_KnLz74X(?-o}4D>+@cuiUQ4rcCW5FrT{QC7( zVmsaE`hODwdS{N6)j`u$GqTOK1v|_wMNdWx&sN8dv>#spr(z1=#eYBPIU?qhi%M(<)uF?V{jSF-f z;x1^&7z9JcA3i;(Q(71Yau-HoII{O~lGcg-R?~`kG&4!&Ou;gqQy?L%lBAxMV5SSydeGtxl+e@%%pO{jq5o!) zN9%p?*Or_He^cwOwVyMVAB2zm(JiwAs(Y&CjSwn={9D$0`N{a{U-)&xAEl)e{NG>> zW5)QkgpS>p z^7a2AOWeHFx~4HvPIxzJkKWvgm$*2~mq?@A&floZj!l^=c!lbT5wO@1m>Vr#OPO-A zIJ+UwD~{T)rP8Bqha(QtlhD-5OM_;q(rm!e#)uWxcax$9_MafJrgS(O4k*i|xr>|9 z_e2mw+1X^Q`It~f2joS)QaU2>mUzRIfy)wZGJP_`TGmn=>+SFY$#(nu`#n|h?SUU` zKyUNIw{bP45s}Bswc+L>X0umHCOolSS{oFaE0`c+%O=u88^(IGQTu(XqxG~6jau(p zRj+A+KrcE^6qj6d=>%zTmHEaK z=HJT#SO#d55rbp|jaaTp15OU8Xu0VxP-Ov&olFpw-Gu+VgO*(VI=nam*buku7+G31 zcr43DFEt+`DaSzFy3FfY^SS znoXEV=SnHy*&a%Yp&d~3y4Kz^-nf`FKDUe zA22F1_rH=lDu2A$ewMUIQd?rX)DZK=yH=3MD)j@5mh@vsI&Bp<>}N|XDsEm|xMH}F zZp#Xvsag@e@i~n6@vKBMEzC-Z zIfOS;s(-;fX?r6@+K*)0b8j$SoW%^o$KW}ljAO@^WkS=VQ{w^diw4p_8d#2@7v-Rdk8hxW=EI_Oj zu9|PQ8)yNO;j6{_8suY&m2`z%A49md_=pJhmKH1y_x>2Nr*LJ7{q`73Vp7Q6yFeap zLExUSSGXuyGj}5{r#v@Gd8(hh^DS?+37)jry(|OfoW#o6FR=VVUSJ`d+^yISFLB1< z#s1{srM}+Ql4W64Q&?n&a^POB%)|OQbQ;Y8u^OEkI#-~Q@upN{fp}^#Z&?6cT?t5 zW}jFDVJyk*a_UQn-~7hIci@{Zb;aBqlMkQ58xL*1J*_t$ z5WoNZZ#>L;*nzxtFc#jZLUsUV4{cx-{74lzjJi*npdUA=;T*v z0Qq+6(8-HEVo;=$7iLi=vd3hBZCR&FJ)LL>+34iOh;;JpDOmJ6SX;|f zWX`~y5*+tgeTL2)P>?2vmp^-m3meyFxtL?)jbp`?HEe^}aw`{ND=Taen?QQ?hQ)Nb zlp1G%dzIX^$iSDcn_TgEc1v*2uA5xS&rNSEIhi&s-0PdxnY)f93InBVCOko8pAIp{ zlh58xc^*OT;jRVT?1>Ls*iXbyPueZ($%N;3!q5hfZjjCT8+omH2@<5^sZs%Lv|C_T z1QX3%E$0^X!H0YmRkpt8kWWuJdZU;;tQ=W5PE{N4q*Ss1`5n|&2e^!MS8yi0FwTLu zjNL8_v~$YreNhm<6biB)cZ#d7egeiHcr7f`Wk_~aFF)RPGHkf;sdCQDA*Jq+4OW-% zWYs1jX)o&9&iEfFDY>@OnHeti7_6Q-SiE6FYZ_^dR3bL2L?ABK!7q^7YgrHRJD=Zy zM3=?H;9u`ivl`ew!4FkX3yw0u>c-7VN=vUJ_@Bd#j>ozelX+RB?@3yhV?P6#^sgoZ z;caAQ{HuVjMFAQ;LUK1S-BhLRT`pl>#SwkC8ENjfJQ`^ZmFq688h3&n2@}n|g@ts+ z<1%-%@R3$MS;9ah0x~LN_cxK?^I{sz?ld+qD>3ZsoX#{F0ja8$)uqN z&{R*$-LEe-wB`>F&2SCir(lO{{5NZ+o^{yi@gC2luF;=K`bl&*tw$4hCSiFwKHZ$F z4utn|HIzBBjrLq*dT7Pt303nr;rmxmMq|JV89laJJ1SYs_ol!eq~*}GuFm*8_+HL*`yw>)HJ@X~&vP6a+2 z9)+6;W;T859@go1gJ81sHL_%;h_Wrr3!k-0wu`3Cj1}%wFLc5KfN2xN!PV^%vhF=J zdtEc0PH&|%sZQ8DJhI(i0dt)2aKec*JYFIYDS&p|TeUXOMkGB#=ULF%3^X<_7|__?)Ou84mb5#kr^J^eCS)(hf4`78yG z7*2e}faiq~c)kJCXbJXc3?9oG_`2!}ddx%R&@WT1i%F(g1A>j+1Bn-AlFy(ON-JQO}Enia{SAMb6w^b-(rc|!{ z*G}Jd*^HTVztrhF95c1Eu_2*RT9V^M&`W_Kui z)WU}W=>_J3F%jAaXq39aOM8csli)&F7qyMP+ZXS>xXa4j8@E~PiDIo}6ZLT@7d^Hn zgPnXbOfl!zflndrtw^Rb%lne%0EPMkvxnI~5&N7#+KNp}y~3Vvu8}BWAI^9yyiA(V zX=g(wx;sP%Lfpe@o)%(Z(;HiNvpZ&<7LrDq%M4gB=14t*&s=zR9J#lwXeY-1NUyGg zjf&n9>}}`z4|aSZaS}p01NQ!j-3vwlk1bo-6C;-Qiuk-;5Tm+o4Ab6~(%MLuGRDZ7 z+xj%`C6-;xc(znn{bHz0GWuipgBktFrUfnJH7DWa7NXpft*z)IsusEny|Dvsb{9rZ-Eg&a zX^~f2%(>=8?qWUVt&$L-Pq-8M#MDH@2{sCFNPp!J19z8#{Tl_#-CLbpSxm#t;<3Ak zHu{66Al%&GhKW*MhvgF#$bm1Fz4+gyET$h2YE3<>i5%V7mZMZe!lXN?e4LC(U|R%- zVfy5*fH@)hyzSgT(8pQzG^eMxevbrd=cp0Pr@*}Brx?d5j?zBWrG5MOV`Am-a>HkE zz^M8fGF0PSabtuowoH=;Svoh&hKp@>Rl zc1k4OvI?ZP{FvBU8cMoDfTenDNSet@%dOmUhc-t3k-V}4Lz&(;s8f|mPPZTQad?<) zPbo^n?l4axB;Da*bKeXnrH8#`qsj2GSh(6KgDn)#9bC5A+=x^fA#?kh4F;uoUTHpW z=nkaVA>qz%Pi}}6_lA;(F}QS+JrDQ~y52^2-t`ykn^tQzDUN6&GvC|y(;SNsNrE&iCPKUhXcu z6W&hBp1&A``UD^8$bw0+^sfFs<TthFHeeiF^FVu3AtJ`z{VAtt=^s9!d9~tCJ&@( zVlW?$VhK0%(JPs?;*`>k&t5m~WpSBpxEXk3RozU<^-6tQ=iqYpg*>`cuL%yymtYFZ z;91_jE2-02BPTCIB%&*?P{yRgkQC^A^FEper#;Vsgg*KVxeJ57WyQOk@UtMAGL!z9 z-Iy z!|Xcdjmn`?hPQ`S5@wda-qV_@-mm0&s+;Ic*W8I5k1dRz+`5Vg;wQIWi#>jF>n7~+ zlUwh=9zVJDKJ4+6Tc5xlKe=@$_V~%Id$7k(ZhZ@T{N&c7*jrC-{f9Vm{#Lj&5&l*j z`N;8Cal}tNY2uH-x6NTAF9KDfaxj5MBr%_9{FxD42q(vVqMGol) z#`+_NG~r_dk>db~Am+-U;)vNI4ft5hm*d4JX3S~gh&i)K95HJy5=YFN%ft~g=jGyv zx$`=4j71dOB#!aO@eXk;PzNuKNf|~(>2P?J;ZAP)EQ&OJIK70$98@>%xtL{s^Z6~} zw}js^e*5ubx2AP4KlWnDp?H0FY$N7b{LbTd5x-0My@X$r-z)ja1m*SoZsPYgez)>_ zFTW4*`#8T(^ShJZm-wN5uvVi%vBLL3c_q9@zyG1%^uYo#-zl{ps^4?<+tBap_4_XU zKGgC3mD;-wkr)Q_Th;G@`aOOR-*Xjyqkcc$@x4dwa(zK1{CBmR?{C$fI#l38`kmJA zrSe_F%`!R`js}xb&t}LeY;${TRo7?(kZfzh&0s7#JuTzr@Lj|tcd5{mB?rSV85e44 zR%f)c!lJ5&yt%4GhB==0HXJpVK%7H=Km(Xjf2-x&d9xcpTx1M$%?)<44FV>k3BiKVKDe=qX@| z{~YO=)8%+*yojrVlDdkcBS@|TmQJYiHO*Kj!^6B^6=Ksv-6?sQ_owO@;R><>J>_Fi zup=GOOgBmIp=9Qw;j^y1wAU6op(&3zjJ~E_Y==N5cam`W+7#oV;yyy$kSih-93~Ly zQ_um+b9{R**Q5?5mJUa=;XW-~C(Io|gDpKkZvv8D!8kvqWalGSu$DfAr%W#E_Ws+7=6y>ZBih|8E!L%5q*A;64)UztlJ430hk!lV*R@D>*?}e z%(P)@2+PG{>BSO=C9MUAJn3B|=*M?SBP%c|)B7mX7g46&k>=f0oL-}l%I&QN=Tp}% zW)wbUs&Beo!nxJ2qEbXe)v_u7K#De3tw;0<d#{;=UAiXJ=N^_g^ z*Q>|=c+diOdK|1C^Hsij5<5L1Mi&Mo_Ds0jQpG^^5@MLw>w81hql%YFgLuUtfDQHug*?mjO6&6QIHOiRwIE@TB zawn(mo4%i!fjM0gUILQYPjM}jbcJt{>OVcoMu#Tb`iq#K8U z2<)W>rm2u3J67A;6#(E$&5X=?A}A0)x2$ol<%Gvsqsf=n$2SV5C zfdb4p5Yj}A6EIlK4X^(zB4pzl#bw?zmG#TuGdNLhq=N+zE2@k+k8ZAcnBD~F(G-t) z&GZ*B+0&=d9pQBhUZVS89QP;jD-k7^g0T6-DHS?PVZsULodjnL5pJOa-#?Z};!x0I^#;f78tlwCm{>|K!9F-Am>V3wYp~PfU}8bfQw)DN zCs(dq;3o$NaT9ibC$CH791^}~&_JFq)$m8Mur zi^tw`c-CrArW=f+obZ!UDtnjz)hB}KW@pu=VN;t%=G3M;Pj1IH(ou*{TASwWu{O@LFnn$pxHqAFBIYzL#wP|c_ZIWPG%1hn(rijN0Hn%p7&#g@o zEUHcOw`grzK(M*BX~EpuB*CKEG;c4pY2GYx=%`Kep0qZN>`p$Oq&C$K-c{N-cz^F6ohc1O#;uv6$NPI%2JZJ}GJ4aJ@$uhq>?|5aK8lc~}o z4)IF!!s=*d`tFV<;{&ZGgVol!$(S%g$l|AIG8W;bg4X9w7(wGus%bLBONHqyytKXW z&3w8vyS?yR?M2)S3`Hc-O7NJaX)Z?G7T&xV&omc{XUWIW+FaZ&Okv@8PpoK_PYn(} z@{~E)?g`g2(K9{al0DYlid%{6ZpE;z>Mq%(?pEj4-6aHz>Tbobv_`PGb+;PdTP`Y z#_g}Em%A^q)%UT`Ge__fr?mxtZ(%#em($-urcJRe^Gf@&hIDw;K~`6p-f_9R+_0n1 zU2fR1!d;=6FD=7Mvz#asw4;mS&WB|hsTtg!=%VAJ$2&3Oi3>p z{<)9(GiJP7?GpFk?&2-FzNB>}6$tH;Ylpu5(dNwiMd70N0XS0$Ta-=A z9#pPT!prQT;7osq`qReKexulSN7ENnz_rypo|*Sbh3Y;mtroV+T*%DITsLK=Wil0# z85tYg87#A)Dp$X(cpw^5>fL95fl|3!1+7bQkoi|J9!nO7(fJie!hhSS2=fGCe)uip z(q4gUZDl|jPMjVsv1y+XE^9eu5i6XIoxG&o?j66kYbHzSU2-Wa(9^UY-Cn7u>bu=; zk1jo%T=u!qq)5k%j{l}d*c(AE=0$m zdO5BrM<-JaFNFN)&0x`i$ki}TbtJ}ohx7rj1|__mk9zi3oZwWFn?iqWqLV!YPH-A9 z#WH!CDw|wP^(1zuu@+SzF;%EoqF+27Gk{NKSJWeRz?g&V-W}nYy;6q1X4_g=MdNo zBt|pg#j#^5ll9TYR;y0d@4?Jfm!!ijv2ShO98@+OC@PDj)t0I;d^Py(C7?2QmS(K! z0bL43X5pSDUiSM4l~1p^gf1hZ(BB~PH#1Uz`8OZ{(XEWCvn?%p^pEUPiSu$hi74Bq zj{-43cXvP)w<8No&6K_SL~KjX3f_UpHA0H$M~EmS zYnxr_p||`zy1h+eby@vbc^WTk#e7AO*gcb#n_I-nhO4xj?PLUp+&Y{QBe*+6)SME{ ziZ9ERup33voCb|}v`~N;fZVT&|ZLIp~BwiwQK`QZ%Sf$Er$gON=qZpgBMQ4O=sllS17!HQs#S@%CFt(1us?-*(h(9U2$RfqP6&dFQK@rvc$~e z;uLxHP!7|XX0{E@zu;2NkVJK~JKjt%6E|X_GJ!w3#b4v<@;)VM= zP~&kj&X;@*KI3FGVrV?eB1KuCi#f|8O1(T7$b1v2| zP6^Fbda2MWI=^08Xp_=Qhh7Qv&II^CqHN0|l<-N5Vzm;3W7dtOP^z|bo+&eT$$v*p z4fs;4KE$t?;wxzvqq^Txvov6qY&J`iLze|O+NEJ1%+w9@b2wVZkc*I~hF+9-l%`qU zvO)(agkFK%da#orxU6%- zlIoW+eyP<9oTc}bSzA<{%uWHbY_r)ZIg}4o7&sRz5K(;HEsaypBMQW+)<+pSaVE08 z^~0z2T5G01g)DZ%irTNkVzVxc6xG2*?mqQx%EIrDP&|+5Sr&B)D@9S(G z4#Mh6!0f!)EJyWJF-YGqKb51{W;HEOQ5Vpd<(#h)W9XxGo=-n5^o+#2yd~Z*w8Yy? zM;WE#jR55r9=v;?j1avpR!&x!6#=u$X0sw$5(Y!tIav|T$%_A!lNITq*lRf_D_UZd z34xW9$iZGGiIfZ27k z*^TQ0yE8L3%umN}TM36+xGr?#x)9dSIKO_lE_4g$dXA9Bu!PETDF zvwAZeIFIhl@S+%3{cBqk@hVCcZn}ol*WG%suQICwX7|lzRk$iuMY^`kR$W_FYUpwJ z1kFg-mbsykJFTedP@P!aa`yF{-n=S3^lRlsq~C)VS@1$e{K)4()JMLMe(s}9OGQc& zp=VkZwJMxlnU*5=4xNHX@b6j@jD+^Eim|8JGhp`EZ1&`04128l(4Hykt72x)aJR^T zW+QN@r-j~^IQI;PmlkSWvHsF3xEd=s9^=d!HNb^~o1YIa+paYj=;YI6W^q&$=65{5 zez?|HBO3R7(LG2e>JYZ%B3aYNjm=%?MAw?MQ2cd~8WkP^($okb=eN|s7;6NmU|pFj zghzk@5lMIi7!;ONCt*UUMu03cD|BHboUDMaUBH)Jb&P9aJ6!MxS{?_LZ7nKbyP}z| z#On4WPcaM^Cx?zh0fun5XJ-Gq?zuQMoVk&15c=ouo{Q5%17?cBkZbLxhgx4tE|v!VmU3KlPc zTA6|YEP<<^id6O2T=tO&_CEeURE1DuOCSMXPSt(fRp+Q0#O)^%o3`qVnz~7yk#0HX z-*w}y>r7bx{M|U}%oQ>IfVnS(sQJFJnE_8H6Fc$QSHNIcJ~S0`GM2Tk{^s1$`t z!T!x;S-P;6dNy2XpKr>1mUg|;mLc~x4z)X~N9ZLsMQZLJm5vO#=hHcVjj)EO>8*z- ztk_}5&8@<*%>S>t1L@jxH~hQ4wpDi!*8ews?SJeJ{>m98GYxLCsk5cEg+0ze`)SqO zvO>kJG-M{}jbft^2{3TI-(g;in}w=dW71XlQsX8x2kMUVWaxh43f`Ues?XmG=>##lmA)qRL?YVwOCd+xfb&3rmI9jDz zZ{-!-DNF~90t!gPal#a5qR@r26CD!k= zyOjf_Y&3R*CoStk!4oLr0=&0_3uv&&;($l8$l{1zWO03n_v#{xEPFUlBa1AY#MX-} zB5AeAB9b;2S;VH*B8x~`EwYHDWswDMhFa4u1Gi;YHKVjm17Ejr-vtY~x1mL$t}TVsD1`}aDez8KIEaheQfMFLLz@cRJ%)Y24S(lG zvS*YJZ7A>^kl5l>_Y6Aeb(CKNnl66=8m}xY#DkbUkYUdW!}pGsCq&*&sz zanw_itRx%{q+ZfyrByQTI_Ti;N6F5Bq_U_>QbQ2ZMV$3TL!+Ho7lrZ}0nCN@-fA!Bl`<7NYPV{c&IMQ@yk--3F? z5%oa@^BcY4CI}bY47ZkXkr;2`&9^2t7A%HQFPP2F-u`dZZ3`BPTXA)b-(L`toGEC) zPeCI>R3ENH2J=4nOBmrWcAE?5!%>NK3}+#3FSM7sZ6$_n5gQfnq4vt};yTJRV%%4O z9P*UJ8U;An;}K2Vb@w>i--?KbO6P>XB-XHi6*ve9NBj$BB0{0Npd-Eo7eYmH#JXcs zuRek@2*g%B&&4n9f;U6Qy_#o^#eqH#L9TqtV4wIZLFGG#W2pw4;6lwbaU@8^ceXRy zGgC!L>EAP%tNk&gDq5xB7I+e9xC5aC7sKdM_fkd{wH)%u73HGE8wol_K2D(Qm%x3W zGK_`J;H@w&T7bC9ja$|R3cotGkcF+^>q?dnL*TuxlooH~8Ul_h#HpdrY&?B6__U6Z z9(owr3PXnFRf#k7BqW%*?o}2tXf1ddV~zxlFFd~rv!xv<$NLnH;zF_N&=|2X9UB^# zaNYvY5Lk})C@1hXwB@qPL2K<1+o^%j3lf$)Ih>xTPk5$S>2aqpgX<4Q6EW8O(uKoyi_zw>4g`H*yP(_Rkef3h=^8bmfVBAUQcotEIvew>zscIa}MnzSlSa(2DiArQow05xERvmIjS0P8DLuI+!szL5FW3$_;Kkf{bw%}6K z)U&FP%JBuSpbp^Nk%O*6p3g;|2Ry|cq>zjajp)7Xwu;0s<*HL~8@wvw?`IoUQFb|u z%O7wB5oe+^css1a?pn#%vAXCXDo$PgfZG+}mitZDS#G0b;#O`)RH~AmE`Nw3sTDUy zu|Ro!K(1nJr-XQKOX7u&*^V$n^NxM0F>S!MEF$vpD&xyklcwB%X@ zF-Ih!e)$*{mLX?wVzLNsy`NGrq5gzIq_W_|Dul-d1!o~Esy z0@_hM1Wwpku0?()T%t=ZiD!nts3%oKBANwH)VbbBTVeW$)&* zFNx0Ja_I0IeyGgOq>8pe!sW=ERU1rKBc2gGGZtI~v;>$^LNMMENNz0{3x>zNAfka+ z1{2){cf(N9kzF{Q$#?DL(!jw}+*o}-PB`2HOWbU>0zcvs`YTz#ob@|2vS(}(LuCKR z)lmkpIQ&Q-7!ETLZx#lB!Okc00hviNRI&EGr|%@IfJgMb7)N3Ljn@I?brybbPh|mz zunHc^;4Q&OIvOzn@GO{s$T@Jh9^SdEgz*VlPFO+^*K_fAZ|a~Eb#kiDZCJJ9gJI=q z&XQy|OepL?d8}?3rQFe?)f{?(=3Ak;kpHq)Q--qt|E z7)O>e#5!;qMU;GY2aca8Bl;^$;|g%0i6_okQXYpHe7l4SoGapGgyIC#h(o!pal`ew*(5DjWMbkI+*L223&8=c7^^MDY~Zyaj}51~8+*WDwMq{Z zc)A*FJs)I;t(qlHgNsMXLbXfQN$ymD*vDh4AwFa6!xQQVrs}~+&`4rY(_%KL%h~YG zQm6r1a>zWi_B{IG1Li3FK3&lJ#M!G)BT;eaI0L=E5>o(mVh*3jnjXg|*J7=CNvBb! z%UUP7$h;^JdI=$HHZMxHnK-M(aRf;Ty{4q8h(+uMNYX+@1)`^BdaWZLKE{Q}bXir5 zFyo4^inAvn(74qXb83qNUCtY7T-%|>{l`$_FjYkFZgQwAal7Gy;fOqL%XF#lkD;_Z z$-eli_Yo*z=ej4a&W8FxD%&CjE7{fffUmB2jyc|}yT_rCHk-kh zoS5AB3)q%iWcp!T1!M35#Li3tTODBm8^=CeQN_qr6*~7qX9j-P@Nb}CEq-!o(KEG^ zg6m*3>yS-#W}P`6*|bC@B1QeAs{Tk#|C?0Yp5)6&@@4vcSy3^c$XU&gkp&wN1z*ST(6lO{3YjE7S7LQ2RE`Y#mo^y@IJ5!W*R7~$Uedhvt4DZ znL7g?C(Xt=j2!Hvhqv-lg7-tK%XTxozv)+kHR5+h*zZi`_phLfw-!0rv#mH-yvNv< z)h1Zwo9%O7`F6XA*GR2ZO}HUTKC?mI(rT3rMTs5GBwzQQUGyhQXnnuVBgN|wTCsj%xJ zRft*W_2rp6bis{iN-gTkd9Y_LZWJq8{tUOVVQ?>T=$m?n4ZV~{ zyxGE$>R{$4c9{PljE#>VgMyC%oYlN$9#!QcD+Gxh8Xtmc%fp{6eLO1%{(vkb}{Nxwgc#a!I9 zX(sTr;6h9wJljueHqFC93&pa3gf^Qe)@F`(Y?8LOC46JR+)j z$cWZP37DONcx%KH+$4ecgU$Gjb5!5LgDTFrm&_0N%8P?$r#OdMzCot5%Ea^7ID}E_))n z?87)&IKhWgh8%X6WtelB)||_YC^#i{I49{3ZjtEX1ivk%SW6B*sHjRl&IPM}CHRmf zj!2S&+ff31IDV?+W z31p7hN!91BW>>S)?A)sA_P(7JtlAqD(7E*%6BCZcS+zCb>sH(s^}CzY?GBCoxVpRK z1E$wbSRky$vcIw%!gXfC0%6^d*Eq$;?W4;cObQZYK7bP1g}ez@Q>o6*YMiUadT#JB zWM8272OyE>KVSD2V^zRcU9}Uoe4ERaxOufYxC1WC9&NA`}%sgDRIRF`|nru(2$@a9GY)`2pJlEz1tHyq- zx!#9_@LTk%x$?x>YObnIowu>}jB2bs+ia}8&{%t-iS~*#R+!pothn3+jkULGti4+` zR=(22YOE?eTw&67W9@~k>t*(8qp|i3H`bov#@e%WW9^Bf)@tmuazQoLXmN6I7w321 z#J>MG8tbcE!F#I4+RyBF_Tbac?CUpcq6ePdE7*nAdbxpaIJezKdI_-#`1%)*M|j`ODk4uBc`i^bPZO!GuuzFGIqj@2@9}G zgRY~4eB`*Lc0)m$92B_U;Kz;mJVdpjA?;uRTN>3lm^rAa)&O)zqaedGN7yK{i-4~d z9|jnJ@oF1df?2yE5HM>4<$id~GmsLmWx(exow-Dt`W44n5*&%guDPe-QK$vCi({m} z)~vPsLKpC`Ilxkuun8ik)TiS?>a@G==6iX7Z z;AfSyqBRiF8W`ncmsQBV0m0pf@&e8hXZ2ln)E|8BAoy#R4TG%eCWzG2+6C4l8gedd zlPucVVkOZkRbN+{dZ#%wgy03`?x{jK5kI!K5meeU#7|f)x$w(4oMC^j57BPPaOXLf7fPIdm`;|L`!=N z8?E*@676vW;w$ZOBsYeU+#ZLA+oLkHG=VtF>fH7?5*aqq9BKI_?Qw*qY=t!n4Q~W8 zMZy}zVU4nw)$q<6YKrBN^~37tG`vv=e^iu@((pz^H#|IJkvT|p^`p(v=5Q_&)wPc? z$Dq3OUc?$>)MJI!ba)1+I(X5s9w^T4;KyP@HpU#=Mh9HWeS|rvrDG2-dq=u*+Fx;yQNo35*s3GrPuOy;@s4aRUpE?LOBaD21!#Xr?oM7NP zd*d8&SSBvO^`JPiqLiM3tr2r{Qoa$Ii6;lOSkcO=uQzlMHcoj_Pp$OusQ@GNtw^y| zL!#zcvpYl;oC8ZxhIPl)4QaO2r=_8!f~2AL$3 z)8O|WO*o4af2f+j3&&xlmQX@C+|(LM;BY<3MV9Zd&}u~ZYGrzceTJ+>d)iuc zz~>|}8I%WDuT!lyBqiU4qm1eN>5V|(uHEn(*HRbhxNtz$5@K9@!!JLX#;VeF%U&xl z7tcqS=h=rd8lHxWn;M=#Xr2ZfTlC-~bX8m7NJY}MZiXFy646-09efgcrA`=j!(aq| z4NNWfhWcVzq2Vczo7zf@yCpFkdr3}7A%D8gS`BbGO^4034k4)&1ot8$x?7&biqo(s zBnihhN+jWisK`Dos<=8ZD37(y;BVlT_aJpzg=8#{^5zZWk{;G>@Y9HAOtBAlS?_@f zCqyILuMq8psPq$j_CY@rz?8xIR3J_Tu@`D{ls)1d;~;w!3y*B#k=GgJk*&oeTn*gH zBX)}Y8`K${{FGfuafl|&ms0iuW#+hV{C_s?N1b}XKIHKSMSPC_YAefL5h@5FSL#Wi=)mO{C9DPa&&GS zA_0ZtP-5kSb;=}t;1`)&YL#yq@ zQMX!EKM_0)A5N)ioY3Vn3{6rmIlz+kdIzt3!qkeuUs0jZA+X(1r&E15^k}Ll^a;W< zT862!!%HB4UQ2kTr7Aoe_v35}R&ulGrid-r8EN5fhS(5WqFWG`;&#XnN&gqnipozfL<-h!CTN{q; zs4wpE+I!KJx-Iw~{I&((7kmfE+svvBavNSE`OV>})O(ER@N8#?XJELt!4u3$Y%~S# zaW>kt&B4~Cj;es^2*xH@%V!w?e6w)@|1=V z#1fX&S2b74B3C~7xxVnYz8c{#MfmCrnN3b1Sa;wjXoep3X&}sK`1*3mY>z!~O?j!| zRoBGg5_Bhj9LL=UJF%`5`*K8I+w4kJZs61S6;CS&)7|eXHwg4@Un>tQgpb0nfPs8J^B#x23 z*59J%+=vxC@>K`vT^m>(D(7 z-C^{i%jb9)d^W-eV$?K_R^ZFi!8c)Y1>XP$al*tnnicEJj%h;G-Gn1JZg~wuGDX?a z!dWDXFt$1I!mt7T1lpRo<5*s$YCI7`>ZcvQ%X;+i+H^ zZ-@IO_u*;(u|xY~`wqSn#o+ITE@hp|x_0i~1)0Pjl$imXJQi!x7(5T+_iIeZ+mD?S zs-JmP18eMCPxQe}kX!>vR6>d43w_8}aP%Mi9c})Wk(4_cqUfW1DHVV0W<35_7llX${@_&p z67h?EN&XNF{&_^sT5IgzX$C!Pzt3*aTlU>{51q0f1;#jzLXzoV+m3=Ig1vzr8Y;Hq zVUD8(j(UedOT_jO$K5c0_r%<1Popz2U&I(x6dNCF(AB^!dMaUMfpz{yseV=PSmHrPE@k;W z{(S1?FZ3tUjed^pT0e)Lm>eG)N6#m7Y|jAGD3J0+Od9n_>6B7LopRH24QiLinw|4F zZd3Ev=LhmQCeI1}kar}{Afp3gS_hU_2#ye}7raIAmx8|$d`D2r|67N4T2eljS8aY? zzCqIj@6YE{xODdIqkIn6(~%{Cjw~q>b3ehcBAG3CXGhk&S8%6DyajJ~12mzaPk}-8 z1>b1_x*6sG-7B~Ym`J}bIA8?mN73;Wawt83WfUx&R9HrffdP7`@USaDuLF_8MO;$- zi&%4v;Km{@&Bq1*DEJRSPciG{7ITgb7W1y+ynGLRS(X1V0gs>&fkX zVNWjiO+CNUE}+kQ{;6jgIcqqV5(TdnTnsd5TMhg9d=2Y6dNJP9YjUpuJ=IIxobr+ObS9-vH|3V2n}pc#Ew=LW&Y1fLOnMesAhYx;7y z-}UA8Mg5NCrBQ0Xk);L|^keyZ-MI$#h1{UuiR7JrTrO$-&-62>i(o&&`})u8Z_sZ9 z4+y@~pIv%>|o`m8(I*egRgC@A?cC_K5g$4L(`tLU@nEE*0O+ z8H4bMo(9XrOa%o^BSJ{U z`^WXdTspJGSkGc#e3*sg&{C`*a1Lg{&H;9d_}LlEpgZVxVZAK2T-Y#S%dtAdF`Hnq zwZg6dE2Nclzp$D3?0hXguD4a#ZD5nJF7v3c&0r3?k9G)qQrI?nT-ZzSrIenaXNCO< zc3tUdIxOrjqPd6uBrIL)ao= zZX7P=dVQya;L|+9?iE&`r3<@XSdo??>``H*TDHb<*)6_w(sEEG66hJR>#XH#1olT^ zy|l~Zqt72fGm{2tR|>-;B-mIm4{Cu86UkJ%1dPi)87z}7*RB$lFKjlLL-SK5ST)_i z3^UB3U=FZrCG~7KS5W87+F3nrDJB2L}wp_zA4F2H`9N4YY?$>EC7!3n_Kcw2 z$#G6}ZUjdAkS+2O=cADK74uLrUm}`UIUk37j&nC~nUnKjm2(epqevbTou{3@g(Nx$ zRGz35H5%;m0>PKWhu0;PbJKOi$$9&^^L5H0hwBR(zbM@`4p<=ANwAw>55fL|7YdFQ zoG5si;55N{!C8Vg3N92}B6z3ZTEPbdpA_6H_#zNbaBjwcV7mJ{JwQSC8r`Hv+*^Pz zxwirj3BDsbr`*5R4f>~h59D`xj-pzx_52#R)$_4#r#+r=cy?kPJ3R}tiMP>CLo?uY z+6=nD%Q<|Z7d{vlc_$<7mwL->;}_KnUT2is0yNuOYcuJzcMU>u#qNfys@T22zJh~e z*@sbrb%Iv_HM&0bdFad+Nt57hg6m>mh5P}*9U^&J@HxSsoL|5K`{$jV&zT%>d_Nl31%ej|zUt$Ao*rPlMldLNi{QP1F7SD~;0q#oEzlK`w_y&@$v_XMNq-IW!Bg-z zfm$Gki>D01e+D>3j%3EvW5XIoSn+$SSVO7Sd+>*Su5sYsoX;A1g{YJbueo* z7q%MRCb%YbH_RJ==y_0rcv3*Aaob^kR;K0P+2_7A4u#7U>mFjuWr}dqSzabsA=pE( zzu>%d)?b)j>{5Ns=tWy0AH8U&;6C90Qg$z=zl6i_QLwAv z0KqYWQv_!UE)rZTxI=KS-~qvR1&<4UA@~nLJ?F7VKE&mmL|7Su#e&tq(TmpRyo$Wt zF8E^39)0wpkAML>ld~J`H$FE9r8ze>*K1P$+>TfZ6=#^^;Kx93**ZF_E~XT)sJp9~~^NP4H>9(hn1S^h_Ddba_|C#=f-)qp~qIqctwC!Oul?!j`6_8HHf$lpW<8 zoiQWcnai3>snn>#JZ^P+#j1^7V0-cu8)6JVIi++^Y@9I|3)wYT<04v_@}YaX?xMlM zID|TK(WnTU1a^6Z)#17As#Yu*VOPTL)(D${=gut=R!4C(xg&?ShJI_z2ip>1x8f=E zxG)uZ0(}{=TaI~jXY9f%clV;)W(iZ8i8ME2w}}$zlS0;1c7FO&7>D;f=E|LUGtsh3 zqN-MmXTU0im+=hw$0)l1y&JLn6UK*5m>q|G!J!TLcfe6^`%pf8&h!AjLi`DykGqTJ z63Ne0>JxGI6=v5XgdK3jx&Dr4=kXD{Io%XqFik?Q3l^uQVx?0bm?G`%)yG(kw zjKfo@ZAZt1t)T*UNN-1932Q>=H|e?L?<6rpeYr*NK(7m1Nte5q>G`y$ob6W9H1|Dv zN1E1Ev3c$ddLfPKrr1*VCcTJW$03DqeJP?Zg{jbsu;#;dVOAqd)vO}ALoxaU^{j|? z3R^>8xOak`h;mmOUIHt%ShD98y^O|Mtb^we z*doQKtLGW8XN4W0-mvRTuPQq!qt5i1veRDkdhzq^uIi+`@ z!NQv8w5JX$42vvg_cGffYzZX@J1$J+LX>y&Yr0sp#ozm<^yM?WxYHyOQ8$B0c>9+2a+mAKbF4tB~B@tF=>q&=& zDPMZi5zFo-?_gVR`dgHpc!+0m)*NXIvjbYbagnV*dk?z<+9vNMw%Q2W?ya{Crtd93 zpYqPK4I#TIub~&c*V~5DFpGWVZL|%e+k~mO45t;!&h@kR78_Px2C%p22Vf1O z-7R$;h&^GOOqW~iEn(MK>?2{+sho!sluu(78JJ8VmAx>tzxu1?hC}_2g`0<+}E}#ls#H} zLE2;OQ>eRQu2JzPY}42xQkTMv>r%jerDex;Dbs#cgl+d0*{`8tmM_cT%e6GoV)w=$ z(yygy7JFEjV+=bzp#4Tzp0G9aT6|agwY2;qwo`rb4B8}Y4V{VaXP-ekEoMs?WWSEa zjTc{teVIuQ3sd!TChZia+|8sk2w6g0PVUw_ed81+!W7gq}+M)=1*1mw23wx0g&1dZk>FZe>`iqnX&6}y$Y-UZ= z%Y4y(GYt`TfJT}7^(Go7YzVS!6g ze!YZ1cLPZ9REv5xjMDZ6I4`xT|!qS#~p zSM<%4Zn57A%M!MfUibfGY^Kf;=5RhpcUg?nu$8t5dy$SKW?Si)ur>6#f4jbwo?gr$ zsQR*%4hmaIc$?q3m9{QnyEWua+OBV-D{f`R<^BvDvO1Z4(X3kUyC&*O@iGpVM|>rV7G&oSnNSz z2NlC??G)_nw@EzdH%T3_3b{|1ipx%VMcGMd?xYWuor}ZUNuOAZmn*g;x!$>pYJ`2NacMq5qwZllRqns0t0U}f zV=q;%V!I}~JNYI3Ir>T1ry7_0ezL7*yEU{fc@vn&Vq1j;gng=Uo!C!#!qn_(KW!4m zC3cH*Km8P8_d9=2srRy3e_p*x;f>9?I2xlu{%?K=R8PPS!`X(EBZkSDn<{d z)X_njD@^6fLE0khfW|%8LHa~k6Fn}P2iI_T2efJU=;=XIvI18g8*4gk5ei zPa50ZYOxeyYc1A6*fxuG7xs+BhNLCCj?oJiyHwag#b|a~2JB+CO01~~>^KcmOxnZ8 zbfy(Ewkgda>4)@>sl;LvgpILSy|B58S-v#4V$TU%Lrc@|w|z`MJfiYtE!ZcNu$|dT z;(6q!v{0BT=@WFdvXfcm3A#OEx7T@sK37cYHFm=+#`XFn{b(_+*Cz=b4*o5bdVP{& zgsFOclB$HMdVP}S3RCs^Bu(DI?o_=#Nt=W%rNikj!OzNFY}Z8Zr@!v{oc37kAL;L4 zmtw*b%FdrLiT+0KTC79HG1phL`blLsAmfn!4ei;j*hLwyyS|~pdzdYyV8*AeZ>iu} zW-n@u8Q-|Rr-J7dyEo&Xt{-Xj3(VHg){IrQpXpJHJpo4Aixzt}BgU<1YhPr|mGm;0 zuDvU44SfJjo7VXcYo$wZ0LS>Nd2JmzCX58M$t^b|S*c+;Q6X5!TI(Bag3y zHT$@IT1tcsaVKkauZHc$xihpYBJ47EJ8e#c)w|nkw@29Z?gDLngx%sU)3!v|UG8%2 z-3VLn?y7wmVGp@`XfOVe!)v1W%-!z3TIWNGm1YL){k26Fs{tFJ&3#STT?kgI&3c{L zN}8Ct&plAHA62YA^MHGZw)_~grBt7J&^=VU^tfV+Gv9Dus9halAG?QZD?VnsCi)fp z9Ho6>u}8s1YxHMjw-;=TmSVA&z{YABpD4Sxz{Y9IPb+pD>>@4YU(A-$H<{nL$7{91 znuxOMs7^a`M(kX}vrgFRG}q5cbCTGdve?wDN>80ug>^Fah35I*_zpcNY!Vb2>Otx;GL zU6or$4cN(LkJivlx!t`D+6+6hCb|oD*K5ZdifzvA>%CqZi*-u2+nzhbJ6D?^Y$@%5 z<~;31i}5UPo>qnROV;FB-h6FI4l^~{FV;3j*xSZ!+JszX$Mb@_wbw1iqy0+lO^fk} zzEXQvn40CS)P}WZcg!5l)!N`Z#kj=QYW5DyRG+n0drO#_*R9n)6SmZKC^y-)Rx8OD zcdk!ze{ZbSW?1Zu*zL5KzdhT1ZLzZU?5?1rayLNiE*GZCeXX`w*`ZF1@UGQ1Mc8ET z2JNE=8{*xleXW>0=iH|)Do|@7Kmz>_E~0+N8a0v3z5Ww^{o-!WzAswa!J#mv(tC=?`i}WdLPpcmZ%W8RCd6q(JlFm z+krYg3AE9(B6-4Kxx(rKHrI=UzoDpO@0%qpW*bfdu;ghcKLWE(kBMzU zA?u76{9Gi1V_Blm;bQX|*y?nBJew6pOQsgF?Hr(u<^nZ}mMoJH*NNOw%(jd=)fDS6 z*OstkKpEq7pib9_IdqO>g-AYev!*gDjE>2$PHfAl)95Jk{Ikq9%a+5^X%~)OBd>ru z_O;m@EpIWSETCf-O$|Gbtl5$$s=PG%T70{$oPApkw9z`Coi+j;v>AwfUdfX{7dB@B zbt(|Ex1zUh@g2W*|L{*^3Y z)FmypR%xjaeU+kF=a`j5m5ai&HFfN~v;QoQHfz|cWx2x364=~Q6Eqrw)oz_80Pt3)O@UStD3KBxQ&vr+H99qZ3lLW341l~ z0iD<>KELLF@?m&S_TegETcLk1?F+A;B0j4`=UmBaB9E@~+}=?xz;NogO=;4yGd6so{3XF^A+B@2ztj&eqW=rx&}rB86?kWvxT<9^_%k z0Ibi4>nF$GCgl~~YhjlVa$Wi{oAhaRx&W>mG!AIcWT2B~h(FQw@CK3G9EJbBO`RLt zhs7l?YJi$ZkPoPzHX1MTX(Ctp%4b_& z){g@^C>@CQ7=_X4Y7n_{d(T;Byd@=Vs>N1G?9x{_toW;zuH3em!*0)(D7WGMfnBxs z(~7P19xb-#(?6d)lIpYk3CEm6;j>1PGiT|X&(HJ8|Cg{@a#H!$8hI4cX_Ms1!+mv> z;7c-AvP6@SIvfXX#nEOPeIPoV+pYaPSJE>2Xf(MWhd2XhqZ@&CS^{*?-9UrZ0iAR| zP@`Qyot_c%rTy7Ftv_Xx{L_df=x+zG+zYf(3eZluKnGO<4H^ib zT$aDjdze<{V~RPTA!f%+)Q@$n0e;r8pWvXF!}M*(VK6_KKQ3m9{!_<&-g$az!NoCq^^OJmyiGJT zZ&6G=@}Z9QBdkgEvV?e8%tr*9XTY%}(z2hee`J*o4lu9G^SdtE6f5Sz5u3NDFl z(hdXH)0@C;BHu<=Ip@+g`cNbv1DokY!9%e9RwUm8zmZUO5uXm*MSRwEmz;IoMSRwE z7xB5UU6fY%W9%->yV;yyxEshPUZGj|GvtFr^0d<)w->$3IND2mMr<$I5F^KPuf%7s zoR@LiIK8GqDZ%}8U*U@QmtnpaxT|m@@VUYv-W=O|gq zLu@Y={S}g9Mc>9xL`;4VG!mxR5{t7Ej#EZ)`-FO1$Kry7iFz53<)y$c+_%_9<8*l) z&9;pzUJCQo#k~^dNm?=x$`Ee`YQjYc8FZ}p(u5|+CsC7)*NT_foF!L6Qe1K!u)5?% z@pA#p?Av;>& zWwtj;4khfe^(p;0;br*nypbdMnL~G!ew&a(Yf6z<^Z>9>4cN8 zecm_@A4b}a!%XIJ@|Hm&&#xzK9m`JGzOnTIvN^+bTGCaosoKkJ?Hig~HiIpX}^A&Je^(wa^3hw z(2aI6!Ys5Wce)7rnVnA93hlWtm&4UHW{$186G~sZxYJ(KZJXKYkX{XW9aY=+bvkHP z+mCm8(;Q;w_FfO)CediIooHdl&d(bY?Y#wubp8spXnf}*WO7#wIoa{fSM|YKBNWS3)w0R@$q}$0n|~*W^u1Y_|VB|MJ9b z@a>e|Z08bxU9)sbeL zPMjhsIt&Tt#wlo;_Mf_}vz@kcix>@`*`GiKV`jxkxXtWT=_`cWNw{3SS4E9)qCT*q z5iuMkII-dt^nTMS2BCkuw&IXp?zp~UD0CK79CPKN^-b`V(8BV1Umkk7ps$j+EcVmp zip4(7wxeR1kIgH5L&X0fj%U~h&E>n_H`?)5#TMTb$F~)~bJj=>Pt=XdC*ZSDxz|_k zXkWR?Rzszg^}ZVMxrVAMFG{G9cE>&N8@?Dhc^xCW=!fZw%J(4QGXmTXe+)C9$eyUr zsr;MoFx^@Cci%imzH!Dk4C8`{^U8nEFYsSN?{+NkAExIjyZTo;Uas8dy@YI@8kpay z+>bHEsO;x&cGwaw^lwA09_!x*^8}Gx>gU>ig+B&QJmvOXj#I8n?b9R`F_`(H&vayT z-R`favaWle!*yVW?ETLW^D?C9sJ{s@`Lln9oDi5HC&wr1bzKkXGvxI84D8R3fuDRP zp;>4BdQIv%R+RpX7&dfW6w|EF@7g1&S+B0_m$cvUVAoZ)bxcK*3s z3Ig~_5Bj2J+wI-T0<&$u>b6Nwg`|#BjneL215GIL{oWy{&ozN+V@3DDfg#3&-B;O$ z7`uR@jrY2b3QRF#swM`uNedcc6jrUWEvK$kSqarf->PMS!&G0jA}|krt^qz+^}Nw! z?63M&pb0$-1>U6)0flu>a2w2G_Cp;+iWdV{Z(Kdbp8?8 z3!O88+1l;ZlQC|l8AkGKZDn-=@bT)*w5;;>P0wsw7wdC7{ zwP$M)_4zo3tHJaXddZtKk%y_TY$Enj{?(r?n>TobnJOa>@K6M z=X~dWgXae85z4a&kzK8(`Cb2zJWuP|^UdUqBH3^7oMg6E+p~^VOaHJ@a5bIk@-cK6 zmua(Mdss?;yTp0BxZN(cvn6lcvg^MRwtsOp(-S=(ik+uD)ANFqiE=`u*}=W&5#v

Sac8+!){amXza0P7P+KMhWnwQB#9a&$zf|S<1`s?H<_PShFtW8)FqD z-x%C3nsuJ(?Us1%Mr(aFWw*pfb3R$~MM^VD@S7C3Gdz<1Glj>{m-OTGehu$19;>ON z-SlbA5brYES2c$))A0AwQ`f^)5s+t4>ouNbt=E!!OoSw}$8MT}z2CQuX6+HYC)BL% z5WKm1k3NNXWqqII$!@`2T7Iv`o!j8sWbZcFq28ty_1Xj-?uWO@zBI?A4mG()uOZ$- zZFsL&^g?ZXuQ{oyh%?%k^EJ=B)V;P}^;(o_I=1w>6ZlxKU!*p{&-Kvx-1RH5eK>WZ z{XnnXsfAYW!8yaJVEl8hafDI6S6-UwINhr#tyv_dL+{-?ZMG59djzno_qen|XSd#m zurtoCupf^aa!|^YXTLm38kIMsnf6{4Mdn-BIesLm95I|kLyQf*3lcsMSDy&>gS=h( zm!dP#>FG0$COVUVHBv@3=u4-jpF*#GBap}9YUvYr=N)A%i@aT>p$G*08uaGb`c<}QKG82cq+dzg0g<)^A=fE>d~nMb7mFL&}N@Qs)c z>#rc(8jVMyO5oM@65tqw$Y;h7E<%|mAx;zjXJ~xlZidDq;~Yuj9F5EUw7#R_@+=-n zugq$u9ThXP=18i!H^YfCaW!9D#X$d}gk4T=zZ15-$VrS-&QATxJ^P)rN|M^`r^OkBj*vaB#cRg0oS+ z=rf(c{!6npSDJBWb}Ddl_Ack8{mVVeCH}|h$pKGfuhzJJ?iI;i?d<`RXs`D9fMnNR z+p&(%W$)Ea4;U0PTZ^kbl)YTiyI0GpeMMg`Xw2HS|1yH)*I~bSzl^*(H#AInCI&Mgn7PR>4>96dNsDKmgw_gzFlvEdAa@u%q#SF zU|x;&i8xxP7aK0xsE>eolRg&soW0T&M=#o&fPb)W0iLq|=yuZ&_FRvfezJG9Ve84! z(c_{N2gfJF!STs<^a18M#zS7!1%DSzeuvIkJJD0A1ua=6T9+4EEXfWppid%`2k@>J6Mk zHefo9hkPt80yfehNN}iFrRgpuHdS0wiC@yiBh;W|_xCejM_TWBv?za;&C3pq-4dX{)pWvF(A= zVg~?!9Xk~m7q=Lg8TSCNByPXkyj*EQ{@DdjU0b3e4}vGyy-3X$FpnJ!X4TzdMfXZ|d3cHhY7So|t2QK${cW4>&(| z3UFy`6L4j0Gw_$O+w2_k{V=~Da~$|_Opc>Me=c?k@a5QM;2W{~fk$FBqe4F(n*;nT zb_($8Sk3t;T;%{ij?r9?YTe^ra4q)ru-V*vHUmG4-4A>t_BilJ?D1@NrR6Z@2sR7u7d$Sg z<%+FfKf&g_YZKO|HRo0652fwTdsN$zb{yunf!8J+NYgqzpdCxg0e+sAUHXjg-t6D& z8Q$ag!_6St$aZ+o&~Xyj4AdxF=NqFw@pg!r5_4Q^+T88AujPK0`?uVGW$VofCl0gi@~_TV+dBFhtdcdMI({pM3)&Ofj>Ea1P=1NfpQq`c^g>gc@NmhtJ@e8 zfLmg=1Gfu4Blriw!-B_RcEWaZ9J|^U_an?t3jRj$Il-3&Ul%+g__5%Zg8vZI zGQ97{-wjO$PDV}C@eGy@tj7%;I!1|hz!|8SI$ehlbef5}s8f(S0%u{ZRj1jgqdIPI zDFrs5hT@b7YAAMGFn(aC7B{2l`2KEp;9SH`$2UWJ0voYgf-^C=gGR@VF8zRuQIB=3 zl?(*lkNE1e74=!i8S@K)J83v@7wWZ+dsjvyjk_^c;XH@nujwL~pQ1Y8(^z@XX%9v< z9cv1g0-r%NG(}C~eUQ+CV0kI2?6zlXpQj9SZY1QdCQmNB-NS{up zkTRYAjx^z7P3=aw@&a|tx#qzf3&dS0S|iZZ7622qn}I&93Fy}r1Cz8{fdTC{V6wIh z*ipL^SfJenEX1ihl!dkuc%`-qxLCUvxI|kEyj5EdT&n#Nc$;<~@OJH2z!h3EaGmx5 zjqSIk-z)up=Fn+~eRBrqjLeyzvpV;|+yl9G?Iry>eE+Mj_IrJCmQELFZ|cKya1us) zN53iurvtPj`aJo4U%w5%JG&A6LbESIJ3`G_y-w6DmK}G&)#NU%>E%VS(ktvs9 z?Rp36wU!+~Z_wJUMu*X=&X#?rohzG%(=TWH=kcE_D{MoSo_n@`9-4%cS*^qM(04e2 zbha!8yU)DeD9K?X{nC%-gMY2lc1mR7)U&;ZZorwG*8XYqC!Ah6+wIO;mbIfSj4SQo zc_qe?N{l1j(Kf5lZ&aamR-wvxs)d$0Ao*7{v<{XS^@KCIuA$%Xf@ zzA%%+-=?n+zD-{%{85WP3Vx~nq`%HymvM*wRmR=;TYTv&&bVQEsBHS&=``WG8DnNm9XqdK&h+a>UUALzsknmd#;IjW zOmn98pVCl2_56O&oCc*aVd4mAODK?yofDjep9vF31?y+dfk`Y{5onK?J|#3JIAt2_ z+b}lJ*pdB4)s3wkM(U2yx={U`>7ly%Iad#yIW;&9w~kt|M`XtZubn=#A)K1&q53H^ z>TjAJvIGNW)K8x|XH+OScOC(+3Qf6=hR?GyW5~>gIa6lLm>z=7)aeZkZP?I&;LL_# zc{sPmOmCP4L73J~Z#X-^G1F&XKfPhj`E3w(IEs=&1Tbg%+&MHXc-64!H%yN z^;0{2#`LSE%n1iLaPF*N!}MwW=HTkpD^RR7cH&rEvZ@M^RAQ|d(D3PVt`1HcGV{tH z4L~Xtr2(N}L&MnVGpDH{pIlBu$BrBkArpoV8#8J^G>tZMvA~5CDd%A%o5T4Ml{i(8 z!WM1h$G}i17#a|qHXX%Xf8DGZ|A)Qz0gm&!?nCb`cCm|pOYV{sNehscqG*wp2!bFX zk`g6x34r99_(xztnlTk<0W8237rW5zLL}@u21q$$H+E`I?bd3XHvel+qgJ+~SgxZa zZkw5Srg@LbByW;=^|YBb@5S#WtuybvdC6-Uyx;Gfd-wZx0Z`OG$87}i?%wZy_s_ZK zoO|v$=brD|+_`FX(E&eN%#G*f^QEFPtfl54_<6C4QhV)c>sY5tH)gmCoGFzTvei`OTqZLH6oDV$G;%p&jMzYoX^Et~n<4cuFK5NM_R?Zc$d~>toXT6oz z$PU1}S*XmE%7y&2Q8u!i+MOP)TiLF7e5qK?FF<7F7D`o2xtj|&5B!YhvIXXsT}>hb z$a4#~{<5~NjV<>IE@lf$xy(#C^Z)s&*Ylyj=8P1j~SF?rF z%j3B@I~TurOxsK zk}f_EF*fUF+h2l|61r7Pnt2X+48cPT99>rE>~DI^SSDjl20zX z$#^DB<}w%og3}a`*BTY04JY#R#cXw{oU_-`a)Ee~_2TR9T5j3MBIYL-G8F1%DCF17 z98~c<)NasgAzz$chUSXhnkf|~|0J*7G@;N@Bi*mLM zrpEpG>Q&>*Pvqtou;MW??@NnXu6A!OU(8po%FR4BkMfcwivOZkc?f)^_*pC!mJ9h} z&bUmi4mO~2Rr;$yq=3;OFoA26brK%%fJE8iOwN==Ae!--#3^G5f{SDa@6K=&scnxr zw@;DYff&gcugd7?&|qrBTucp3 z4w{h^TBXLvQgUNn08l5~nG-$?Bt>;xg?DQh@S)d#pfbu0C9c4p*yuLY!g_;Zn^1RDLd}eEHJFsz&#Wl;0{ZFqMDt#<}0w*q6STgFd&gRIaKy( z4vzfm?~G9TjFlFhGBvhTx$5$QRftL;zL2W|P|kg#cID;H<^UW37PU;6hFvJgg5Rkr zh|M`s1vueL*>aK8tnD4bmV?DAq;NV_SuW1l#VmPB&uPy4G?sDEir>K^6f_aURnMf=du;NsTbe58B(_V8i0 z2Hb3B^XFVQN`dqkIir?mMa7auh&MeuHJJ>An4MC(BGb_?OvPq;k#SSdoPck$1l?t; zqIN6D4qQK|HP93+=&u#7YcWQs3#eREyrgEK$yoBGEB-6UxU4BnKMSP>2918!WGr}9 z6ghSx_aPG0f@F!@lTl>%mI}SDh7|>K(1;X1*H?W%4Sh^xpNAxbvYIo`R!T(yPA)C% zs160VB&>uHG9}Rl$+rT6%k-K`DZ41G*(0zoU%glzv}d@rnZ->1n1RK%U=~S_nwV-( z;x{Yr?!THX7ITG4H`c7ITfJ5*XaXLB8OSYL2|j~GZ1*%VxQ=XgHa90D_Q4TF91$Hxy4igmWw%C&Mqpd{WjEDYoLw~%Y8Fn zt~0SNWtT+|i1`YYYo?r6M@w1vFljUa$C@k$PSsfl1ne-FW=>S-KCZ4 z^@WyS=$51GW}m(eysT~P71)NB?ciNnhWebJ87pDg4QFo%&BeOJ#ieXsElusEg6(|P zx@9WFxwT3v%0+&vpq{-%H+nmT#cJSZ2D^z7pw7BVKdc|uQC-pcT0#Qt)?ZVKErbKy zS#`s)UsG`4E?%unEpkCFK-SLzRq2YIwyBDR1<$FMgQjfA*>GE?$4+O9!sXPpN@Zub zP_L<&snYbb%5coV+kzr;>r}N`=*MiUzyfr-a#<0e)+06QNr;XGEQ_kBwqie-)U5Td z()Bt+3dl0@Bb5x)$m$jG&YSU6saaRi8suN#%|<;SzL`6alCzyJhZ?u-@-%bs_D zeJo`2MIDp-E2mBqM~Z6~o(>HJ0d9<25sc-EP~f!MSP8pmz5=UP3?6WSor&WMMO-02 zqwB&|B$sougsGxxsa{BT(C+EW7JJ&lsG`tbU{i&4q^gXv`4Q*Z_31NxuIwx{O|@GF zakk+As15EL7#)jT<+d$s%Pq4xV%0{BLl z(egI#Vz;ZRx?Eq8;-bEUXsd6{I`t((JUwAWnG3a_+J*C;dL^PH@jg^&F?{7#x+3mR zouI$Ow`-;=bt~7_(k50*7Iw8fdbFQe#%CzDP6lIXhrI&3GK~G!4M_QP^g5TRddViZC)yc}=Vo%);wcxWhzI{h?cK{wp@nED6qCK! zeW6^H%Jx8o<6v&oRd~Kq!4kl#&-0Sb4Y301?n;T*dsg7(Q6lW4B_gc`6BcWw!hvzN zB91nC%S9nFRBE)0o16eQSuPA#X0mX_BR7eSUGkX{Z`L-4+(@ZN=lDQ=J`afuz#weZ zfnVR{pcr5EWwL*u2_S_bRGuZu#;yIO8kx1~r*141u2*IYzDt@vzRU9B4EIW!>@^P= zdLAgvz!~o>#SA=y8KPSRl$$!+q;UgZqqw&q?)jt3(WLA}5jqj&zAz>vdwE!T76nbSP?azWj*o=5@GWS)n9p4wotuM5G0aNYRoqmL zVG%dmB6dLCw5H$%vsX4}L?ajMPCyX^L(NX)ur=nZ%VeQTJT!&Ox6D70p9RX`07;L) zkDMNuI+q$57#f^Xr?S^MY^TYQ^CP2|Mj8&drp}~MT@SqsYSHRR_w(p$Y7D;X41Lgp zQ{#hY({LDHo;p8xnb$+Z6X#OnQtSNS_{iXpuZK(Nk%7@mzJh^?jV`9>x0X>xFQx}z zd<_hqfvb1GSNGCznm=>tE2+V8Y4p;gN2iYT5*}U9XF||=3ma;(94~KgFn8T-mbr7OoI6*S$VN{kJ4iRVtOTK?}csPx7JJcK*)qaF`hEroW zR{-d>D}||c$+>zrLG~$&7ctl@8pm-)h@(Jzr8*%OjXj@*CbOt(OT}Apq3(LBOkD_P zsHNf*eJLY6uW2l_D$KfaM_cNk8}#G9tvjjiXlWb|S=|ELRQ;iv+w9~}EM3&g$!fk( zYhrgr4k&tk-PlmEyz^ki1^8J`g;g6+Q@|C8+Rh_)+6UBKq;t4ic#Q1NXL1XRr7{jO z?darP2wDrR?M~E?b)_Q7>g!vCH`KSK8`M|O8>(xe)Lu8HZzHv^HPmwucrE>-d!=^d z#scXLM-HU0==bG?d86lM6iEG}lQ^%NS`g!1bo(h_4}6uiiu@E5TiABAZz^(VgHwxq zwRRRUbsb)Cd!Wp-VGQrPny1Ey=pc2YsVP9y#!w}&UK#GVb}yBx;sV0fCphFy=5^DZ z6)k|*DIDi6Oc&&Y?4o*Iy>oYWbKMPVsX(`<6RsN;7Zd|=1wtEvZUBF~*GqqC;Ue7b zI3@SWT+jVDBU^&nB`vBG%RbmIFFEvba6I!V|30;EKOJB7r3ofj83G^cn-{66wKEk zmeW{_Su61QuZV1^Jp*5MjWux6&X_^*fyt~S&ZkuJv3c!w9jBpTjT34aHXbZMbBC9t zw(5iqrR(lg*So<`2)wF)6!9bYM)-7PF^8S6jQEIIB9qIXa)|LVRbXuhhc-jtCJxQx zMG7LXH;BW55>S|fRqy#Vefe521|-UnUh_OuGKfO`s@)S!+b*_CxoP4?mkKUy-Ww8S z%2ZwvG@C^u&pyeTR>pIdSmFu_FTq zkDlo{bMQn@&%nXKffEBqPCR<1Z=mn+#{i~EUl)Ji+r=Jya6yDq&y7cW@Yg$Y@UY21 zH_BDz91md|!i7XlnK5EzLtoqkbtY&R@>H?s(y&^Bztc_xsf_oD- ztH;HxlA7pGr%7SUPNl`E!RHVffGxnJ78eIf^g0U0tU&gakV!p<3Ho4+l#qvTPgYgR z;d=yf0RpaC2C}8EObJJA5>3M>0vsF>()^6Bcbw2sf>Bv|qVMQYQ;)X8Cmsdb?3TrF zHcDM-=nBu|bA?%}*L%l(TE(t;5~)-KFK`3Jj|?w?+bbG9?4ifv89|kDm_e_dKTi%S zVhfQKPhZLP5{_3`%eUj}H8!q7c3Jq4_ie{=ZS$CaS%8rSawSq+eOz)achU&cp1C#; z(-YoQ65P&{Ssb7kIs5dL!=e`f3%U>I3x#|o2bF@h2>oYN3PH z#9KeEN>@OfyEY018B3p8L3E}>4?ZA(c080_1_OD>*6Z^)+cO0Td)Gr3LnTDQq-s?s z5rOBUQmtH-GWf>w4&}qyBC3kO_Oj}pci{vu(p??B;USIWU3c4O4S6kzUTwXuKG~Ha zV->>)C!CPgVy{g9*d)|I#90~2Mdlpb&V$pfVc_#LmY2=&K%ZV)oY%Hv5x_OV0BTCa zikyq53iCMEs$N}?O$Ex4#Al%=GhH<}iD!K+9-GD3L)TT~g6xHdGGG}Ht!UHwhTT2x?pKYh`pb#|gB z%ps@_LGV0fvyO8thSM-qb@5~2T2v@E`!D32CR0*johj9ch?)E%{9rm;9aP7#zIcqG zi`AQPrld-s$j=I&IDz1p)ePabUN;^|Kn2K@^9y2k;wgaZv_HZ2Krll?JifxoBW5l8 z^;kAvMz9!2RwEyFb13CF2b(PC1v3&vrO|90T4Rbx~J+>%4R?G4()L}WfTa<`- z&}9)DvSTpFBC);c-r+V4hdWRJ5nN+e(nXd&&HWj1-aG%b-8d<&?bZSKc|{GwmZ-wW z-YT-%5n0IRPEgTTRP!`I7w2)Tx3+L4Td->+7lIAR$wmReWpy4gdSrg15~Be91`-W= z9!Lib7^Fayr-a;p5D`#@AC`|`8du!8zFok?T^j!Fvd06yus{z)IQEB1*TIMld(`o1 z>`|Df!UiggXN&VWhj_QLAroiBKkn3Wck-d!HmQ*F3tJi_GM2oJKB(<2@`#gHF4RKc z8)B0%M?}ogr#M^70HgG>3F~u;c3e>)DDmyNg;c^d$8?~vy1Vbna9cubYuI9&^|4Z- zODIbqpmBC~YJC-PF6Pu$w;T$9|M&LIQ z7Vs9gxUBGS3yoepVKWM2prHnZIz+31U6U^2_|jT7v$Hs2bU4C*&bUGBm8`Uq>RZH$ ztXZLZsR#>7M0lp;i(xVuTBBzQS?FQt%DX`0DQwv_9jA8NU*z4b9YwNTnvV|Q;M(=5 z3hOwefKYf&MzenO)blV<=@-kCXq1@D1m4g9VY&bd3SEptRa1o?yYt*!eg>87e1&pe z={c}Av`l}gY@IY17^pQXS2%u#A6Vj9B$^95kCaOd3KrtKh;I#VK3h_HNv~&1uxLt4 z^H()+UP77-JU;^KX&u>J3fw4@N-6M=eSFW34OB}Ft~_X+@&r(k;rtTT?o+n8@#;Vl zSfkJ&`Gp--oOI1WYw8|Mht%W$4b~`xT@V-mR zJaxJVf@J{~)m6(|sRDqrwh(QH(@S%R^roYV_|x-zyV|5v8_z5^ZN4_(`g^uzwp=zT z`cbkpdsHhE3BU)PYFz*(!}@z7TA&QKjzCaGOW zgiopnZv`HHT&#Le3~=@~oWUBr7)Bpkus$}r9`16h>DEol?p?Jl2s+Z@GL#AHlEnJc zO&^kwVn8-e;+n8Dmd(P97Ofg$jn9ozX`>Q0ni_!Oj854XJebget;Y^TK{(XR5_bzH zglhs^!~$x__dLd9)Vi3CAWlUehqL;wy^>X3r6F=HQ71#k1IT-m(}z1I=EgRK+;(itp@ zP_{r7lF#Z=D^g)6(_?@r&S$Z(;o6797h79HQxNM_)5aP8E_M#6ln0Q471&9zu1X6& z&sAkgcy(1sxljnTNbkWL09l?ZK&h+G=SwDdQ0EFHa6+dq?gP<;W#-O3 zp{|A+G8qP2KwJs5Yyw&5M>De}dnQ)_4s;C)di_hCtvuLxRnsObh*MJq6?~NiJ;;zQ zLdRD$O!SYzQ#S`t&{u{T=_f)NP?mbK^58!%I7i(n<6J>OfRD{|wLmnI` z6yVMUacVuVXk1&Zk6AZrwM^2Eh>Zn=l!)c0KTwT>%3y-_yjrUZf36| zf;GRev_Qn3!=Y|{3G6&m(3mOd#>RIjtx*-bGeZ1ktxTG|&V{G}Rkkm$fL+aASN0s8 z6UmY(Q4SRr$@CCgB&o2U)vt8pqEHi(LC>Mk;2BqTR^?fRBA-J@Gh3D(;8JHB-eKIG zmBN1A)EC`go2mUZ$Ic)&eQJj&HfeZBv9Zi@%i^G_$+}n(pLq3+ml;1RmLj#5vH?F+ ztuq=|au%wtXkE}g=!4JG?yh?b0TQJQp)fvdGiV_in`|-e0!ofNC?I$G`OKN*RLO&? z3EGINLJ+JzEC5=7O@oG|=x5vsCky#8bsC{$s)<@fSCmzOflqtR@flk^rLD0Stz99d zgkMo3Kx{)sd~KU&8)0W;1*6q@WMHAkfvnL5iDj3_r%l8>90uluE0zyDB`EEdAE~GFDBmzdC0S+AE{dgw6>Y*jp ztH36SsW>0OE64Cg5yClfCpbxNKi=zUwJ21`S_+ct6`__1?*|N~i3x9yTKU2|KSWB% zPevk0MPY*~IC~LSWGND7K@c>ro-c+iZKtp@!Vx>yfqN-AZx;J9qyTx z^)?Ki?*;?tza&K2IgGl1f2M`2M8*pD;RTeYV;W;uFg9NvMuF%FHWSXX41E$Cu##-c zZhTiTljCT^S6G?@ZX}LN2(F+m$Gl=k15if61eW>geqb(m^#%dyyoHxEB^`(j2OlXw zt|JE$_sUQE@!B_TKg3vtQ0(lN8guArUij>zpwP#RdFt(rWVU!amvG#HJNE}0MTE~R zUg3NYumr+~@M+@A6MoK(D=H9Yxxa+Z_qDC`9OvQlfio3tk zK8aUlk{aFe&+Mz`40qRY>qo(npxpU8WBP7*MBxK>bW8%GEFjB)H%vY$yz^$cwi~T) zAh9+79YiV%MU+yUcRim57T)eiR@6gY@35*Sb|JOv;+EM zUuLIQHi2?y@R*JX?C&Y;avAhyTJU}=Gr(Mg<5Z!EoWZW0K@T@@h4MOGr{Btc)8^?q z=HaWTSp_#fCa=aW00PyzXk(Cqhp=;wV$3mPE)QEcDRp%pY^3JK2ASVNS+4^?JG^ib zFEPfG_UJVUj1u24wE;m9uTXse^0*uF`vKgel1&*$T2RvSE-^j_X?Ps@r|>fG4!p`W z@KLWv-A9%M;)+m0?KP*Uvk&g}#MvQyR#1~;!A*CfB=`)ulmQ{ zGK_Z4m<1JfdiI%TPh!@GCt#NjA@vJAKY%gMfVQL1<&t;}GiP`NFDakGD`e9soxq!~ zC(tvwfxGw!W?s|59>4p(RO>tqEOHNnrf}D7mE);RQKzI9XLgR^lRV><@#VJWDXstq zKe>uJmU0$pSAovfExhjbXs#_%q92@y_y6v@h&Bb8A$7M+W_{wVjzY@>qwJ=>TEr+^ zZ?xOh^1!@yUj)`mpl;(g?+k9(9ll?b()mJeH#=rfb5Yh84rg8c zdk2KS#}N@fhSDiqjSG*DLl08fmP3CFz)7QgRb7S}DuOG{FWw8=zxAozhw%0L0asymkLe50aVqO_Y zWd3LXWi)e>$eqJI=1|h~Q6%V`gkRa-Nt?;Z2`8OV-bFsiqW{OxD;);3Y<1?i zyT{$-PZ(@iql0a^#yDrQcO302C{YV02T93Z{ZcfrTh|e7L`t@Um>*|**aUXC{qG>S zgZeA?nZOqIIfq0%Vzo3qA~xhKXhB+;riU?$G;(e~bT*~av1v1^ht2Hsdv?@LulJ=T z@uK`d6H;8Yc-lc$N5_8X+a2Tns}JL~^#&z`XCC;=;brzL8Nj&C4wjOZ)0SgQ8zJV4 z_wjaho2UGBd9~C1J(>=GZ>DeK8B^-vg`sx7w3)e&;SE$63-&fA=eft*){=b zp(}`1iw`5UE5S+aO0cqpveM^I0G8`L7iL>Z#-P27m!X2kAThR`LoLb^u5s&`Xrm-9 zpcGmVJSMbnkbB7aISyh5!{AT)I@Hsl-WBz71j0hmrVoPyLF@2GX~%)nh?xScunCOL zk;Ume>S+jXU*|Xp?tBujeD^4cmAdyN^a+27yYFaNnn50G-%aFEWx= zsi8aIF;QspR_XDphSwn)u4B`_4yB}9m}MSdQW#Pk9>NAg=9++Dp|V7w>~}g);N-C7 zt{+Rc{dzU@&5zaCvzskdiu%5JUf>|Chyq82&eiv3=1L9$?s_472z`>+uEt}cD$Ihp zSQ^;YC~!e$2z`(gE`@qg%=&a|IC0NqHn*9vkl}>&f;%4vTQc>)GT^ zEO-P&qbA^y=-@ggsb>+zs-L`pi90jH`WD`38`B7EcCW{jjqT00^=xLk{Oq@`#ZIp` zKZ~o(THhPSU;U5o4pY7-v))~qhJoQ@G+Rceh56K_p@Mqiw&gXk$Ra=);~pG29)fJA+X&M6KovWK zbA;Tfg*igCcL5lo;YJloohNr})8dXj%)>L-Z}K8A)a66vP>+q(45Po3R#hM0TRNT=J8bSwbgB-E#VI(0gzRG!0ChF4*! zAF=liY}Afo%RhH%5pOItdp2t8#*sEH?#gsfIix`*M;v>TP}RpVUpg7+>X;Ci)h+b2 zxOYs)Fv`e}(qhk9%!$YER2`FOi#QXsRD(xqh`Aw{+>^oXucJ{}-k|RNcOKt7ys@jW z+hWuYtvO2v!wrn%r#anWH2WMB{Np>iQhV+Yl98}p};Yx_EVdpaZWc#{VHAW ze8gc%2+({c!QwC;r9bW==mCkf5 zBvDSDrgNMIag}b6L*&N-b`#>9Ga+=O2`NNuC56Aaa;48F2GD~)@PyQ>ug_2fI)@Y{ zO4?fMmDk>wiIebDDVP+wB!-?k@tdc+^dz{b0WM=s>=_@kpRskGLAiH+?wCqFpcGPf zUQGMfjfGRhl^1_#L2J4KH}c&ecU+LG4myWUaN340@;xZuq<+dXtH~F%Ko8@)3r9S? za{TiIj(gx{4Lyd#onuH(gwEsoG)m8+?06`!a%+7TJkw7|#i#5U(s`U69S=Q@q-REt z$u&=p9uEznQx0+zpHJZ&iKk4*Lnm?7htjjir%;PEbl5%&tf#hz0Wkjs!iTXKOe6{5 z`OV0cc`QbaVL>iTg~dGKpWc(9!=XX+den|ZxQ@%Y)=9u{5+n3t7QTsA*!l-Mvp||- z9<>BXnkRs-6M&fKZzKaT#`Cx%fE@5*M#S(jx$+?Ax(YNs1NBAml{B5`$2+x?`)yoj zJPAkLoywWoE!%B zQT=ogB#eO5SQIZDQ3TgP+KWBt{jO?1P37$hlJ_|d8ROq>uRz_QXuBdF|7pmodE_Zh zRq?(7H_a6hp7fYkA<1~+LUqw>p@>gIie&&#s^R*yF$dT8!?S_Q!1Iut9Av}=gx^X+ zZ-GHdISOhjxb(|Yh&E{KgV)*%yu~!?b?52rooUYP9i<)3P zC>e&^48N{9@m9vV^X|#hJ&cJ@^nb+LLj0<~;yDBS6)l9X^b%@LGuqanpUMzJ2B1wBy)ny0}5)D(QBcZ6dTsqr|a1|`>>=CDcIB}zT+ z1xcU0+9>kDlY-o{C^;X8d>akjjVydJ^eEaKMH`K*2p|@Vm{ntq(xqT=ONE>Bpi$%E zmG&Y1B!`OgU4FJB2~bZ7BFpTmhcnd>oaY;hTuAct$)f z3Fn(Q`M_`7niglGFanbDR?m`ncIQ@&-<0#0`%ONBogO^j!F`C12$91bXE9qwR-D89 zjGU=?W~=F-#J?mm0r8t%C7enf2R+%t5pcyd@Y^s-W_bP>r+bJ}m?lOQGS@V9Ai?x+ zp==ZRcGzz!`d7lHd)B?qKtF^ryM+(c-47mLeU6>_iOp^9?ug;KBO>~cdhxrt2XO@5 zi%;)B-`~H6@g1xw-t}Yomxo^@ZPddkM&MSX!NByg&_=ulyXF)~%PoW@-D2@92;wMw z8$C1}pX4nG!a0uCqNt^1a}Yv7LjYLQ6ToC9ir~kkeLcxGJA!5JOo6j+joB{&rfJNG zTN2Mc%<98_#5h#EN4kwj7uezS360jWl4JQK7=?x><%LEF9RlIik$7DY&SRq+sO4M) zTtSZfd#&^F0bvfVTYZLvrw~&h7IhZ>CMC}h)R{qtXBJmxk2*PYH+A=>(ZeC!6*k#& z50^WboKsUO#JZ|>&StcN+zX%s%V+-i^D_*3k&VW*f-*p6kaTFWq@@t#^WZJ$O!Uugr66du9G5Mg6jV zp-?Z?XD+CZGCGAWy2pIjxcm10R^F2047tn#SY}SL7{oZ9_Kjgy)85VXP2Z38J&m=# zh@Ee<{Q6b{*hBTv5)zT>p$3`w!KA@U|GKyDQz6$d+l}f`p`s|?xRzhiy?I36ZEHVV z>t}6N_q_9{^b2|NkUHu4RHHXmV;yJ1`0F(Cl4lFusg~NW&Ov^snvR_H{Wfk$=DZ(m zZhO!&PuMrkM`M!okjb01*>_U*aqgduD~mg`bv!@h)pB;A>I;5Gf?oWP_r#aRBvC2m zlbH2ShM8f~fX8eeBzMv&s0pZYs*#ZDOW=$}E7&rM#gT#CGzt|NwgjGyQEkNB{~;)& zXRvU}P<%Nbs)4h$vcSD5*fCXLfHf#PXa(!hnQ1$XD_T8J8pW%j4=(16xxZ1}9YU|P zjo1?-)mkAL4W8+#*NIHq6<9R*8E1H=%(lk6u;-q07Kihf(>h9nUx(3(@m`~1jgR1) zzN-n~a18%OLAeZS&{E%zt0FWgTAO;PaY$;=f}~%SkzkB+Bo^RP$MI4(ut<#2+lCyT zQ_`bT!IA3!}%pEDg)ubpRo*Ok*cTDE>sXe|ye@&SC z${%gk9Xs>7A#6YO!T`t~A#kKnkrPm0s; z?)oC*7OW#e`x^#>oWUqW-H~-Y*P|^Up)u2d%ZtbI$i>h_Ju!DG3f(?BZ|$FtkWoD_ zU5!h{uVMxEG~TUWNJ$fj?1Nnlr)--GRE9Gke4Zs?ZowveRz5TGIVPW6U?%({@_Ct` zksjcUE;n_)kqH+uuQ_4jS-7p9hY(=tM}V_M$??Pv%N|UwIWRKr)0jD8b4P3&iWP*p z<1Xz2^oiWG)MRcEv_lXwa?c`!PNi!kCXEQa})67NeWCws_vRS?@F?ugjVM?shO9hQaYAtc2PO(6?850|MRM zq1zGJexv_cgjWByQuWfm3hc|}zScKoX zZaHrUIf&at9ksSKmV)!@$}A7w@2{s+C3akofn%G&$-2t32Qjaba08VWuAZC;9Nw%Q zS2<@!pB3dY+t6tdfD-D-JIY2+5?+NX&{^F!zq<2pi(TDlSB~S{=DchwT%tVX(Ma}L z^~U5bLF2guu3j2S8JsX4po56;m&2Pjndgcu19 zWSY&iGiXnSmp;GXYV^{zz@$ldxm52?R6WsCn&BaNntLBpn^Pv$!YUuL=dd#cd2Mrt| zi*di^vk}CP{{=$i3#I;(bv_eMPd#bxzf;_C&^`*Sk4x*3-WeS2X*dZ3ULKQR2n~+u z!y(~$92NFRAcP-BjJIJB1s}Wymm~S(a2Nu@FqMcMeUdxp#1Msq^g*4B>&qiSe=jOJ>mK!#OR%cYa`dZCt}|dv3C@) zEp(Dl@h}k=?ZWpBz@@X}!%%e?gus|08u0sJMVPh+;0?7Q{NWkI+L@;|JE-xOQ?a7G zqX#s!HfUH=`7&X;*-RTxxzwp=_W4_GmN$o}OMetjuaDtbXmzRaiRYwPI$Hi=l+(e+ z$iTp1t>b1j2pAZ{qjnbOrgeSuJ6PYsgK)#zeVf%zi?X>O_**x|x>mG5sM0c0lS=A_ zV|CS!l|eoFiY;Bbh#3z%I;JZ#`xH0z6j4W~^A+Rxyy>Jd$GkpHS`2GF7j59bf5_H= z4YnHb-yn+J>qlt3=}8@J9i0T((<}40^uprVj(#>}5MDVugZcV;>YdOR&}pcHPS`_( zUUS^~x-6;hi<-6CGaQF*b3Y90YuC@!NC1tFwi$~mRAA4QpY~6^zN5E}wE79^V0Sn1 zdI-z`54!rPd{|Z=SJ^|l&K~k=I<9g2!jYBe;F6U!f5rOY-ui^=DdeY~pR)du6)8{p zD6e30N`C%fslN|i`}=>>+_A|*nF1|L3RS(s08>Rb&rh@r zB7EgVugjAn0pI@e^!NB?5L!=m(^B)Ltp3mMJt2JeZ%|->m~P(;73YDnx}?@WuKw=6 z)qrfkMejd`~Z*;m&N1UB0I>f7@0%Jrpv*F)jW!)(z$Yf(QdSiPQ8_MP!?y3U7vh@iT6cc;AcK$Jz1 zE!tCK`p1YOJ{~hKxy^kTCQL7ed0~o_;9)hty@uYox_1EWx!=-IZ=7TC3_x&iqPlzF zdE8C^em&@S<0@*jofU3{efTmF(RUch zyU)9fv7xJ2-w3GpxkkJ&1G=qeWu-la_I#3PUyWg?nY*Vo^)1vKg)Z7fd=smTfYay^ z?>^zvn5MG8Q$L;`V+Vn4T3YHN-WY#g=z|~9BRHaVa5}yqt^EPIf75XF!&>~|faypL zSL!eELq(jqu;;s@_MPadhZ7WqZ$wS=$gZY~m5>7x+SiC1B-V+i$<16D3_N@!lA6g-?ibzyXvfs^;^>mT- z;dpm{P~#LZe{W8QxVxjp9*7MdJX6+fbi~XfWty-4XI9_n*i;W%8;^+bl=s1BWVdk; zI-PBkxPg29YGwV|ec&KpZ?XP;#QMZ8#Ud3)7twI1C;(ESor;NoG=NN@q)32oX`?;>Pu2|sY0(IM(ap)rQTwS$}E zMxRI0(7%e#s|g{1O?YWa6Z#6%FUe0_-_Q4)@+rE{)(@ zV{=mygUj+1+Atos7pWgmGlG|Ir5(W?M)FReJcCjmE3-DA3O$D_FMNVeZQA!pHsKwe zO;vchU1aTcd7pqDDD%w>d@lpF^1wq$^B4|OdGwmVv1uRjd>c3qOY7?G<)JX2g=NkA zR5Pll>Oq&<)ZCY9k|FKlZ5q>zZIhH*dNzKSLSbKOryXhJd!Yo(* z&$naWGQ9i@B&B;T_DQJY?B4HDSno$r79rCyo|6Xz`oODuBJz;!g>Qc3lbfm@51`%* z9NPcTC=s6CfHq_){8GXfE;!vz2jHCsL5m0?-(^|Y&-yg5n zLnO1r1ABf*%>6XNIGPuqr~zH-wKQ8i_7==-QD$S*gUo)5$J%l~?wHwMgK-PT5PKmt z@Nm9BvZImJPObY|mWOfJcny0|8hampy z*N|>(x@N(5TPTuC68l^NN17%?(KaE9^y!acJQ}MSc=v!Dl|6uUqc1ej7n(Cnj;6Ff zJWyYt@qol`k-xQO1$~j~_O%?~cA3ke7C5iocpUaA^|KU&4}b>g+V!mWD4x<|AwWfGz1 z>yf>HPy7zxM$km;lL+A!V9Z>5vy|Cr4c;Y<_N>P_oi*HDvD0j#!- zaBs1Fum8Tow7mza6Hioos@M;e3N`9Jad)qk?#3GN|N96cE(VjD)f?*zG8uK^bL44f?t}XZ?4&TpN|fbTRS=D!8sOhUN821Egk$ zw!-grqJFVq{0*>Y>sRaRw{TsG3~2b7C5All5j8?VR~)6$6L^*UBY>?WG%E1L6^8~v zEAoK8p4#d35 zPCmFM3hBr0^gd21@Z6EO2IgfK;cQf6@m`t7D8D<8vT+399%H87<^FeHk-0P0nDgK} z!MTnR_zg8)9|Z)5g-7{=87(xmXwaCpA=IWBg?oJ(w(s@eVxOrym*A_=XlF(R>wA2; z2KbZ_{~@=NFLj|Q^Z;T#`F=V^rNY!b@4e8BKV$S1${A^@ah^0nj-m7k=)w9*HEJ^b zsKr;7G1`;;oI=_8&>j=mt1pg88fuR;dT9Re1#IlWj(3pbG1k<3$r@kR#uo%JO4sXO zdc>=odhj$D;GfcG{8;Za>NED2k*jRUp4a~b6OE|)ah{a=Y~zQE^?-*hJneoAiT|*N z?dJ1Yd>Q$vHlAGhUdTh~*eCluJmZHet&P&mpahB3PvATZy;#NUqbp6lhw zn0ugsbD>!CFHACp)}f1A&%~&jn$eWp8AQJ{8@>1U(Gfm_e^ij!8<+fb2ne2cu@5Rp zR5G|}vUmOtAKpGT{8sy8UsOx^8!olpmZ;i!@73})Nn(dkd8d0DJ&LhDw3;G_&mD0# zs-W{BK3)}3$`UN>nRjDU|FHtbKrqXC=*%9z23#>rm`GE7!yvIE;fUr9ydMWjlU)7;hA+l1Y9sylChKid)CN<@$KG;B^!h>f4P0| z#V3w!8U1X>pZ)ZS($g1A^cx?!a&h<3|M02k%TG;xJpTKwk41JQRz4rtWrV_baXT)oA4P6HFqVpH#K*~q9)Ll=ttfMsX2b3)daf| z4|c^T;}_7RgKZx~Cdy2bADyhcKXI8~J&C7T)DuDeXjkHC0<}M}i(f|*k6X6hka03rSwZZq@nENN)g=D&#>%yXaBHl|m?#MM9MTfT3#WBr(iCNABlMN(Nom%=cEKNAO#f!JP#}!f0^ooi4 zT93aVJp#;MB&`1qAFJ(Q5VR{6A<`2oUjc~%kR!8dL6k_uas3Pcr-}HzvlJXOAY0s&C2bjVnXe!YikdrWZN%5?$K88tSArW z(C?w%2Qp|w>87$npDP?f$@`!Pp~&~U3YZIc>hU0 zzb~KvcN^qIw1a=~3$i}`g4^iIUtmu+*kd6Du+b(~4JO_dwG)b87Qm_8-^NU&B^F=Z z9$($Xzh-P|v8}tXELOLNu%Vd{TAC2p3Jv)Y;YXAoE&RXqn#gUwu=o`_;HFK zNq%fa`}k@n#5O)zDH+;|V(=$EPVr-f9{>>_*o;H?$Nww*pt^u7et?hTs}F|mH(Lx> z&Mxk_y)x3t9CO?VedP_?C{B@hH116*?7<#Jg)>K6CvQS8E4(^whc z1PG#NjJs<<_#%pHXbB0foRvRPcKSnIsDI3%V^jsOUHuy|%SA_tpdw_&Qo?Ujb%f#wos1!}$4=Cfo&d#pR2>644 z4@DA*JZ>jeQ(c|WPK^DViPgbaXJR#-SRKaYA178%;7&6ZJroiQ9bbh$-4yHWq-quI zyeATc+>5VH;x1~l66OvkP9WNZ@ncbniWr3tZ>jDAkkH%e)AvO>5`)ng)O@rB41F*Y zR-aA`cA;eTX*LA(5olT~zqvcoiknvwDIlj4Ie^)xz{LZmeL7po&y44uTgp{%nw|*2 zPpBo8#Zs}7gYPn6T1T=Ax!JK&zKAN#0TX~rl3y^O`2~kdTfj8WjF*EEo9Ju}n6Ph1_(|n%5^8EY zDtlU^MX{tJ^scqS*q* zluVU_W1@IV5C_TIOE?R8xrj>{vsyw4HkkM%cbQ>+qzUQ%SirQ*jO4QA@ltkHD{GE- zdvw_BtnH>Ob;6Ng;%M{?z%ZFui1_aq8JQuB+{+dZ@&H$9j&+j$?adi{p#zh zxBq4G_OJPG-hR2Gb^l!QVDk3YZvQ&&|HkVpw_m;e8WO7Aeg&;pU;lf_*KeZvw_gAB z?SFau*ONz*hmzNr77F-0iZsuZD?M8&6%Qm!>jAoQXMnzX`&$_AS25lLEk&6Yp!nB#X!cj;Q zO8PMBu6_ZvVu@8znpXREMq0bVorzQo?4nCYKdC4u@*ynAPAu=l>Q_3jT|q=(8Gj|Q z`m<5WnLcD1(f*%EdV;P`rY{IAB9Ov zqgb`b{WC%J>Yq170>LnNeB~8Fc9X^@_Ipga8P->@g9ye2_IuNW;dt2+2}e;8;IQ4z zI95n}QF>chCB{0pL?FjM0Z|rA%(9};Eckf9^kuH*E6LLIv$>gS61igOda`=8oXgH8 zE7`f+Bgto%D%IptC6~+=llfw$nk~-cy0M3~M_^AvGK#zoL)dl(+at}fE|6>W6C%Gc z(>w+;iJN=cOfazuY5j%7&4U0daq}?bJD6bgbD&OZYy4(kJQ7aa>`L4`fErTuC02;v zd_unl-ybjo7&T}z!H!g+P`W<6RH)_`3-E3PThhg=xpKamn+-%D0JytE0o}eJz>x8W z<@17kPHy2y>BP<9SmNg8#LWwWvC9zs!PtSw7XK};l9#)H7WfYmVQM4`;Oh!^g>uLg8u{^e!2ztuLZ+;U!;x@!IKC$3pSa4DD!)sks9w-C|&9?&< z8U_5fERetDih)CPY3pDXiJRYvu`B?*5{~%I-@!s@w+lsqsT6tV*DgqyX&FcbWX_PjLuzkThO{`sGA=5#GIL(7E%9BM@#V<-CB zBGhzwE76Db2TuSl>3JYeUZLTS`6)ks_x?zmy_uNBDvBji)Mxqf^GGcD^5#Q;EDNInZ-%ey3B~M)8?K zANUrf2_`C-?t7hyn|}__0R$Q#pRN~f-#I4;RKJM&+7b}>!bue*|l9IwGeyfiQ z;4cHw`y$(5Sw<7LI_@jwfNeQoDhyG-^1T+U_ghZ@pQLr- zij}WdVEVqS@)c7Vgp|NiYJ$NP6vQ?)M?x3~if1`O+We3CQ6J_YmP)@2MA6~Ekf0@lQ6;cbu-%oXH{2OLlH zqNN3LD}F1BM)(hJ9_`w1qqG%ufahFDDk2R=BI2_#L389ouv;fJU(d_q<=jY|&^1 z0tOD4h#(%6gaVN`*ugFA*MtY?$itcy|NX7!Kxxnzc01SzQaLMpu+08$EwLb%xb-oJ z-ozE|TB{eZg0U)fC$yM743vR^e30OMSo&MbJ8iqrOuww6va_e7tJsJUuu?9~F?Y^Lll34kE0^(=o zPimJ@K&6{TjGG2*8myTZZbL{wK!94&AgI+IFp=qOv5=>=C&mnHmYo53=d0Dl?(9Ku8`kHnt-0QB&06^{=>b z$8WvDH6Y(`L2`mnMliv#$bOIs?eM3C?n_HWh3JZbKmUr-5-Vus3%~{ZN4ghV-J+|h z*0llMVnEGn%~HhmO>AI`4s_jzANQfgW8$~IgN-_V0ek}er1Rm(Jwyrsz-quB8YFIg zTfcrMrv2zVAr_=ocu%Ayaf|mvRnjs520EZRG1-cp2_ifM{RX@lVXuOsC^-u`Da3v! z#Zl-E_nF{*!UA7HmaOnI_WO(W`xo%t0fiDRY^!GOsL-BJ`4_Og;Op}N^xMRlpa586 z*_Uc%$e~Q!FL0r(ybw8s=G4-&SccHasUSdy$kTa8H_Srf){BYN<-}?p6Y{PbZ?d}Y zu9ro_SP++a-)&q$D*)6SG74`?B#zE47!De$4Wc^`FM;M(VCFvXsCo}uB0STfACZEK zjE`E0{ruR)kE8r}gc~dV&^ECvv0vLJcIgu1$u70p4s5$&@XGJw8<+75g~*eMUD7!k z^(jXa6j@2wCDV!R6j)Kp!&tZ#;&|mYPICK{H^l-B))*5`k?m+qHgf;DT<~AMq6F=c z#8C^{BM(3oeMHB81WOzpA7#fuXmuE$i%hJ|UAw6AKvy;)m=MujQLKNs39<0|bdl5h zkNqnQV+Q3almBw%i`{{hm5Jp_HMh_`k(*h9jkMf7mMbshD;0>UO82=^r8-tFRbl+$ zI#sQf^V4vLJd#|f%#_N7{PZKqi;!Ws_e5`Z5C1)q?1$mCRL(t7%q>;R*}@~qv8Cxk ze&&2`Ia9ipD?TxO>{zyMrti_iCypG=^&CI3EszPuhO^5EiJTL6ShNGHWOHi{Af0u(Re;WC)r@mRZ z05bp(KbhwuJ-taU{`wwh{BO^jsJ?==kRkyw#(-poy#=#edzWyl>dQP%5xXv_zV2Rx%^nDt2aoog z$o0(~pFViv$g#PDNBfREdhqznbnal^qrJy_XJ@j!?zBh%&5M{?JaCl`46kyG;v*?ggUrnK;6vbU!ffx!0#%R+Q0wD|JS)+{oMRV#(v_z-NGt2!;f7VNnK3$j}A|bjgNkCus<_#Wl9{& z6H{l?nW-xiqeB-5$FFRPfh%ybT^Y|6a@k65^IF}Dv(x6^0T%c7*UTr~RsHw(ef7LM zQ~jm#;EmjHHjkeap&ZZUx@QY`SPp+{`%Lnbj1>m(d=}sJ^T){n3cieT+J3)@Z|Z=5fNyve&G+%mC?aT_D-0w` z;+v}HaeOnJXbj)@^8G>S{J1e!Hz=n%y0Sqz8-I~E>;AOh%bS$Hx=HzOZ&LmTo0R{_ zCgp#zNqN*$S1q(!an~m0`%%95<3Y1O>UH?VpKLN;{=7HYQ+q?^lNs;&x37oH{?p#| z_rDo3U*6|kfAQbrn#8n!r@oK&B!>O_?Y|6}t0bcR>-p;t;!eH4<2Qr&Z36H5Xy_;| zE}9Aa%fXe`S zWpMo&`{+g*F{*r#3;!N81jLJ6<=YTkgsW6AFNZ!4#tZ-^FZO?ZPm5AVp9SORQ9S9@ zgAUG_U1-Z#`2`8I=hFgkMVmc%=;#!lF5?4B`luCi`ix!u!$y1t%^>=CPpuz@_!kjX z>w@;rd8UtXI?S>-(bAo*Jn`=gBt3UiZi&$GepYP|NH;+dHz9LQQ`)s7_ zW^_FzZByVd#^Li37ky~zZrcMLeEWr2VFrsH9uMYz82}zY9?-XOcX#&VVk(! zF>$+N;&#VG3CqL)T7P0J?b}WM{+M@Txv?EA4mJm?gWb)=&CNewboaOF&p&sEk48E- z($~?IbYxgG6MiMtP<7g36L(yuxJ?Os`_ndDzuDw(&%Eo~jm5DE0~6sPT#nZqpO8oV z{6XIE^M%8KA1}=RkMifASL3=SE*!1h8YbQv>Fel98jyzDk#->6gR~QA7t(H<-iPmd zeW??9f9k^Z8zp~z=3Rg6o5_vEaXCKWAUuSN@Ht)~+>S@cALNZjzTo`*@`7t&Bc4F< ze>Z;{(cH;!M{l>L9j%Ec;>*$4(bv(Icqc7LyZexmNPCbTK-!D+piTSm{eGJs!Z*|Y z4blOWHKxXTu06k9pX{GwaZDzTpG3MJiEt4<@{8jW#~*&)aD3sH8RQEmD;!S{XB+VY zihn5o9NpbIcQlUxTF%X_Z6~)WPq|)5YvPIPint>ViBCsg;+yy<9Z0heAU%R~5UCsK z5E9OPB=zF^2+~oT`ta@2qsZTFa&7qS`eMKApJVkPaa@j1I37kKT;w6b>G;I)ho3h% zPd{HcdBHW{c*4&Qln;JhaCk=X55=E@$I+eel7|~LwX$P2_zb5G;>onoyK=R(tu5a_;%?G@^6$}U4FYh*dP1l7^jdp9>?YQ zgoE%9F2YBCA-v=h!q0g)-XI@yo}6zIiF`r1MtMP;>_FOvL|l;{C?6d!5T{`zClegr zQS>+R=f)3Wbizc~2xAKp_d2d~$~w-6{LVRYZ6}fTA`us)HPCN=uVkNUZ$+$eD)xb?|gCg0$w^A)Zbl5qHGlIV9qh_;qw89Z0`P zq)SL2Lb{CfBS;@cx`OmH(vR9Sg>RRhLH^Aq*VgsNzL_`<$K$vhpKuT!!bSK9C;5at z;`qby2Ko3D66ec#A458d)Qd!%Jd8vf?L#8Yx{!!N;*vOZd_Y{24~Y9FB+`O3`9b{o zY0otuL86QzY=rS1r1v3_mmSS11IhP}-dxuyBu8tmW#Wr#jBD;967lM2OT3dF&md)y zW{_r)a!7MF&Exy3O?iB~^epllrE4g6X`}lrbA9mJ_04fOCdVcWgk>6ua6N-Wej&W% z5%P!Q4bF@6b9|9T{tQw-(kUeJ#0ezgi2OjD9Y7)uiA&;?xOMWN6?x*GG-yKlLGVB$ z?a7C2NR;!GRgUiakpBQu4^kfzW%*M`14!qPxGuOx9Ic5b;)}R@28sBbL2~pZ?nwjE zgfuH4Eg%(yO`V3^yjnCme)_a5FD@Wa#t|pP4RLe|i8v!K^dLQqM4XZjC=ZD1El9+D6zK=S1Ef6@d5z<7+;*fm z68W+VX)hA#ei(_ejqAK0iM&3HG>&u;iS(u%B~D0dt|Q`$cyl!N)7R0J^dSAJNJ}<7 zk8h^yHr>E?V_HVpn@NrBdF}e=w;R*JKzIn3;}^n99&!BPc!TrfJUL&^`xzwiJaIvs zOd=6Slo7-kd4V`2E{Rj(mN@Q2x(8`1QX>zLM(@TS`wb$6kSKRJF2~=AbRW|Dk-Cu{ zMWQSlL^_W|{=SGrS^iAe}%;A$<^uuwO!Y8j17DA#twP zkhm@uksPgwr$#z^^fl)1;6BsGZ2Galmf#D)2g9FkIvM?9_?eEEK(F75{zK6C%e%fG z`MK?D&7a+}*8F!n)*?TZSZjHC_gc%>-bVTtyZ>wSXLo)t^6Blr+g#rItP6rAidLn{VSD~G$fZ{jwTZv7dd`Iqkb zkL%VlY5R@$tu=pP>snJGwAPeIS^y6)%{Q$ze}1dd{~hLm8XPa}`hO#z-TuFX=eK;l z=|mLIUN`+X=2$le-?f{olV#+2$_hU}aD5PG#2s-si$qyK9-tg}66pxiLr7gn+mSku zqDXEJK=vK`qdW;BQNB?2bI;j@v2>V zux+jVm9Dimre9&|^wQVwU2A1xU$yksWd-z#|J=Ni`0dbe+s_B@5B&t@y!jlxdw!lE zj)*JbjJP8XsVB@JT}B#3qMW4+co^w^Bskwcyj|9M zQxWth?H&EE2G^p0fBV|jZ$7ZLx$FCy2f_`4PPx`F!i13Exu?_YB zKWyvr;8*MqzZbsT@y~(}gg=A1ulUkt^LP01^8n?*0utrv6(p`Pt~IW?N05?8JCU{^ zIURs&^_~3NZ2fcp;oko^lAr$Ew;cV+$9F}4u6OEJ(Vw~Je-*L^e(~P55Y~S1S?u|a_Vzn47g&paV#`|Mo9|yseCr|oW*#a2 z&3&3)eQ<57q`hlfz5)JV68=!W=&12Ur-kWF$cL}){%hGAKHTxo0{1k161aFH+H;*a z`cpUX)1R_+42kqVj>Pq!MB@5)^nW+jKf15UfASc|BF|C&lLrY4VIpjVaWnZ(KH%Ky zWC7)5cs};^=uhqZqZ-XEy}2&AR!Nhs-`I7ljl-~PZ_>}NXHLW`jP zwe|FG0#EQ>;+OZX-Sh2(Ydch)c*mXzY~AHHs2!@ z#P`e&$`7J1k_2MhM;p)qWO;ykfN>6O0r{EwfS*x$!KZP^I{yVx?-F+_l=?&t01cNeyVnDP3)B)u{FVv_A>X^Gg70Q~)LE&sFw z{e8u=x2J?H%O=^6l$C6UN=w!QrQE2b#O^Pl6tl0mzAj%odavP)EO_6{E}pPDg7$-U zBSCpJq=9YK`)#vo!}8AN%b?8kwu z?x$bw2O>s)C;q;8ecAx(8^#^kKzTq#LF9pCP+bstmDf$5r3;AqfO@R2Z{yH~LCa&_ zr9G$b6%O4_JxiTVSyLG&=D6osAeY2J@z`HnvH~Yk?EaFH4H(9~RzWgt$Rj>Ofd4J* zzx4;yHVp8QsHgHu&etnR+~IPP{ZKi{p+uf2BiRp@0Z){cYzIr}YiB)BQeyPI3{UVn zs3WK!GU56np^JFE8Mo)bX8;l-fDHiU2Ma%(Lei7i`?Ut&zHKe4~UraKJk80 zhqeYa1vLQG0967J`+}gHAj+SWeRtjecj51a_oIFxpON3_2Ut6h8~-l?Dgz>q@_MNY z$OkPz)L$I}hDSagvN8J?)SpJyiMi43QM(HO^McUFM$U2{$pk&=zT=JYumiSi_CFiRZmEw<75K`Qc@_1bm zd84epUv|7Nd4kswyT6#>#eGHeI(fb1SM?p}Q-Y7_tB?=qH!@B!vE}XU0(8OKK23wC z0=cK(cW6@Bk_OQV#*`slCn>X{to={viiD~2do_k$M?wt zv_rW-1wgz`>H_jXbxnWHM?^3w`r4c5%d+H%lJ9Nzz5WGce4w~Cw_u@#eCc= z%6e_*zE!~^aW4s?jisKYzZVUn+*|A^kCe;56MMY8;!oZppON1z4^R)#7EmA2CQ%nq zN0AT8_%{n{li`UR2QBXOk1hVc5z7vPBm z@`Q^Y+<3v!3-lexw=v*f+N&t|D)d{_Hh>RQA27dwn8EPDZFIp4F+ZSIwF-B)BJZ1X z{|ezTFDM>F8Kb?Y@AXe(kGIq>;%|9?JVzd&E#UR=x~L0cLF9vkpb?o{g*}(^q_yoX z+^wuD?zH8`{?Z;(|62LZb(FG6ERqx##R*vDd%YT{x)gf5o@9Hjg!rb#pE7^x9Wq)2*wj>I#TT2#*+PoQU?G2i2sKm2TVdd zcv~8TpTQSIC0?SI<&t7=Hy0SAf1M4_gI)0XiY;{!-8fZhWw-kopIVVd*C_wq?w7TV1dv=4#-k=q=v0a2Ab` zCyRRsp3~M-=F-~xe+qlNwSKwtfVBtY172Tn`1+j9BVNgKE)#Mp%(qZ4GPW{)J8>_o z_bl!(Fh7zA%%R(PUyoVLA>S^{YXg%yic6tW^?_4;De?xXfs{DcT;eyE5#M2f;x))e ze1`cO8ji=?(S!b|5i(zhyujEnDRQEo6nm?&6g}NYikxnU*CjQO!unp8C+ax7K-~a7 zfNmgfQZJBSa~`P#s;Igv`@wRm&kP@wz-KR}yq^g<3+9#>FND340A1k3jJMJSFU4H* ze=_ra=&BXo-FyakRrRLc|2N>S;Jf{E6CY&UlBW?q=UJoc>C3~9--ozO<=q{3N7h}q z6Z7hhoYzv!DUXFAmxUd?i@w=VioV%MioMww)I>^u&{}f7P)>YD0RN%De`J98jQSHa z0`UTBh5n;LrO5GmQtE7TDRJfjDNe%cn%8&diTZjSg-%gFIJ^Ko#Ouv-41UAWs^H%w z=&#D~SrWkq&r2Qj)Py6m9e_|bnxeJUyQsP z9iIpCPMvxa?zqp2`RN9b%Z9+C5wK}2#ouZoCEj`f)Kp5o-Au}T*iQ1iTuJ;#1c~P` z;6FC-&(WAbwG%#r{iW!u^`zVf?WEK@&85`a&GmIl;`R9+h9}4mjr2N-;CiTg3cpcT z?GNokz7x<1&{cVkLnq+#P><1$(VoT8Eqw_T^}+I%pJTblO^5;-tROs7`@wEO26AeN}p{h6+Y}BB~Lby z&?!;kF~n1RCI*Smc+iA9kn?kI*as}bkgRJ8OX8(2Qtn(EDf4bCDTCK7^KMIh59J5E zFW;YhNB%2*2Kom)SycI;o)kPq+XO#>d;s4u4{Sqjd_I0o%Lmz+Zz2yMk3oINoHOGe z+Q&%dl{Kf#Skc4?>{-wr7K6RzfuFzw%n|?Vz98?}K|7HjyH1&pMXrRtPEo`F`?-oLFJ7bl#CJ-t_)fk%(N1`?W(0pQ@7Bsv<&$nwp09bXEnXXh_b7X| zwZ1Rkzcl!+)H~oq)eGbU*q}4;6~M2?ee<1!!k>Kb6^J?Ef6W*2@`2#x$B@6dYVviEd3;XB@3|=RjMs4= z7`x>^Q60W}O<-PIb!d^(^&soO9Wqq{KA6S4G;}d#uq-fFtlw*^xKwz*gH%*%FNxDkNyr6iE@DraYLE<|-M0}^+hWIm(&!ixY5$Ol|j|`F0Cz?vqCq2yT z^R>ZS72Y@eP+obiwO&sd>K@ArZ_{U>F9LmFb%Oc`j2++~z*jVWB6I;{Ky!@L1&kA* z3z$!ghMhEdMAjX1OUR~dCWh(j(*0Kc?c;mk0p^^5Gnkbg{c6UFzX_556DY zx8nO9^*U5H;JV7bXZ1o0^%qLK)eN77z9W6chWLz(Q|K!~A0Tcu@dAAV#0rQR=^rv) z%to7l{1J5l>sy(SPYzifEuMYun9IBY{P%!z{kIta*Igg_{$u)hwDUPMXNPZb2o z>4Prd3Gm-}qkpVkC`Ue^ZF;8#d`I{Runon}nE0V6>>2$;8!uR0K)-;pp}GM1E~^We zLu4*Fcwv;VZw2_?iLT@43qZ{O{8zpZ&*z1{KfpXab70Jek+;d?^nb|n1z_h3s;-Bg zr+rsFZ*9Br<5b=)?v!=hW6B)m++a=|AeR?P>R?Ze&@ zF)N#RO$jjl-}BJ}ekYm-K0v=PdBOPF@CA?;%K3CzsrA($ss3qSN&2XVzAyRB@Pfk! z;00bMbrbaz{e-gg5#DJDeSlcf;REWp!pJ3%_X|J<=pWJ!YTkglKywDHMba;TZ-^K% zXjX)H_PQ(n<3ZoM`FP}Y+CO4%YtQeH)6st??vx+u zRMqjs9rx88cVeEbnD>%umwJO7%s=icH9qMtH9rO6vFQ{X_5oVjqnW)E>Y$gpW)fV2l_vEAr3cPab#{#5&+V z_60um1hoYA->bfVmDpEOUpEhUn>-s-r^4OHI(2(h z7v{vfpJGkSYkfLEYJWBeG*}-S{xDi@1JT>yKaz9D!3{y^|UnbL#*FTlSO=pV}k!Dq>r^?xw&v!+>%^Y1GG)NZJoO~?Wd+*zG(wdaANO_5x?c=cYVh?4Y4XzqDfUV|@gEPrenAN4ej>$xIe1`&8}Ye2J&Na#f=8A) ze6l>F_`+vk{lE+U7yW^Rr^-paZ-?VO2Z8r^E&bHyxcC72iT-C5^$)t>Go{uC%qNs` zbOHSW@&NNkg~$Vtk^IU7v2j*W6 zm3m)1DD}S_E{(n)BMrY9DTQCGA-;p)$HDgduLkyyf%v!@7`w>%-YPs=!hD#EN5~s^ z?l&(Cdcfp{{2mOH(ubQ#qswE#f6xWsLFylOKA;~;yFj8{NIc)!#0%hY@_HHYyzvVV zBOtHA90z5?6(7(ZIJJcMLlq26yUrpStPe+HSmL^vw=rz@W4x&D)h3n+?R{yxaRD;f9 zJW>s|E9s-2;DPSS1Jnf-kUJ>%UOU7HZQ%E|()ge_e1f9t7s4JO=gk-~KkPvq`jSj9 z;~nGw+v$bz;DNs_9*jFup<0f^6+UB)i*;Hf_sHQQwqcB;bvfqh6?^8;5fiD8M_W(7 zo_;g*B<@c#aIXs4seTE#&YBVE!dA|7sL)A1w_*O}-x|O@EvuW%oB1 z{~96qr;L4F`#Ko58g_Z6SMeo|y> zEot`aRMkE8po6H7$e*=89ReO0r23%x#{=~9RK3_ob(+-$iRZg04^)62D0{Z8!vif~ z3mm`D$rlwoU01R`UmTywQ@jv^q*MR%_n8-Dzu0~Mg1!$1EwnnHz8>>=tk1GmPMgMB z8Dk#ia>@dGtM4m81}X!4_3zZDXUtCDj`5rE<5kB)uIfSFY1bP-)*Ax%M$q$(z8M1= z3+%^Bi{GY8<&&Kxa7c*OdnmU7&&L@2$pfTkv)rBR?{0GA5z7yPu_iv1AP(6g}<8_i3>U;)$0N$m4K%1cY0H3caY(g@4y$W@~dD;W`hV%)*1J*C3 ztWaOFo>Ull@XV|82s(i81$+B9^T7k`$GWdy@bxO7$KitNeAGE!CrlQ=5v^{ zH+~-T^vs{qKTh%Qpd;ba*MzR8Z&yp@oqoLW=Nizqe{FDY49pvUJ5CyZH(nn2euA|4 zWt!AFH$XDY${`+OJ;k5cp@&NGeh!#FpG5*mFGSy+@O%9I0RElj7xIMV2h|f%;)j?3 z)0Yx4J)1Q8YP2-_X^P=T)koA#@C(4Rbw4K!(O9$wZ2~@Db$rfhE?v-FZ6AG~3gn(WP!hSmT+=Dombt|$zXYU<gZ!eA8WsRvi%l+K0X3sAKrcWLO!not+1EW`bRF!KkCNmVQe@A1;4S$WIa+)R*=*=1J2Z zCgHj!==C-Ej=E{AGy>0(ck7X06O3;FUEsz8H9iF&TtZC&w!rd0#Sf4(`T)8By(h&^ zG?ef;+0c&w-Ot`d?yyK-{OA7rU*K;O?+5t6-V4;8xk}CHGOvf+j*0P@$A`T~&YO81 zYwxM^Q^`GiW9Dcr_Ke}(WuEu1F=U={m4f>u#l89EsnX)dY0~bGxzhNP(GoR3m*O9? z3$qoR3kJrVvj}}9Wj2_z7a6u;Mi{m9w8Zc0&-pu;Gt|Gu-;+;L^84gfzkyKMPjyz(q{7VQ>&RmLi`33Z?cG;i_MgK7t=e*%B^GuQ;w z6{>y$UO?Tt+`Db0!0zf2J|kN7KKmEFhXH@~u(E&o-g#g&{+9iif9VVMJ`?CE^^Y?p--asUG1X5(wq=(L+d0QioJp7u#=HgRxH*HP zv%BcMH;-wav*${G7xNk12>?DZd;xyI>=t<`WJeD54?L&%O57vGrS(sFv&vZDmm@y1T9W1*UalOZ_V7L z+I;5qT-djTZ`;AtZ5-^GyJxMYhUV%W?7xJMhkL>pp0ON#`o_3#55T8x`U7-5WQzB- z#g9{^<&OsURzJ_wd*9}lhosZ>#Zu#R9|@X-d@by9#6B}`MT~X6A3ZeeHCJ+Gg*lt$ zPLcS&{T;mmUZ|=^V@c%Q5*JMA5otsx0T^uQ$WihT}rnLHbhVmn? zkJs58d`g~e3VTJn#m~c-r7_~v2auykM2;e28uWTc4+$C-CRrAu$7c%c%FsaVKi9m~ zKritbhrUJjtc?Nw>|v!IpdA==&phx0@GtvUz(?PT52z1&cC?18y*drk*nH&jojiVJ z_F}LuPwXN0%-vJxQ|{{#dnc|_eeY)Ho4M>fbUkJMr|EjH+d$^p{5)IQ0{gbV%#qI5 z7fG8dvnA)MQsVVckVNhUmb=kEM~u-!#Xc(ZpkY3fv!iByls$H-$^2Y@kH62~J5U&} zRY1bF=0pxDi}<2`;5Q*e5>}Lvrk_ugZt|$K{T0{nE3O6C!|Q4dzHEi-Y)M@Jo1nhR zkCUav&$xcXsLg+wD&>!~l8`ZoA7InjYs@&3xhlqYj48Z^BDa8kRqalbokGF z#Ukm|&Jr*sOv0XzlPm|>N6DE{&SN^W;pnAdKTQgu$12rx=l2d_PG^5n34JP?)`9(J zg-h7%7|Fi0h$QZ7EA4-ohxc199e$gK_n#~6LF7YTS8MPAbrbCqeUw(e;F^D(DOFCP zKj}mVDfV(*2^f|^JceQBbU_C3nTCEuVCxGR_nnIW&p;2F?N6GC|4#)?X3whAzsw$X z^rxyFAP?M|AFvvK$Jvp4`hu^YKi_LLKW43}u-5XN{ydHGiG5p1L~gV4hg~$cQx$a( z#=Balh1@egS`Rh4dTu)3_;^O&H@!^kA@i4~L8m%0|1<0?vHx`rn;Fa)^wF`8%Jv_!mm-BYyKA1aFO|QS{b(7>Q^ zJD@xOKDakK@ILV83|YFrfV~%}VS(3C&qIEiJ#CubV_zn6`r5N`9&}J>p``+0(~|&bR(Ov2PChN#9) zYfGfBJT5(Ntdhc;YDmDmj1qegb0wVDS2FWt?4vNmSrZax#yQJv=DFivuPB*cDya84 zepzv;`{p3&^2=iBEssebStC7VrM_3^KNbn8(;o|^(|;C9$NwyF_|WJB+JX*O@xAK{ zq{5-r5;QzaJUTxgZNShurHOp z%j{uSI{+RS;rIfo1JbPr*e6&Ql^uH8UpoH20QY^Nbe9#< z?fNo#;FEFE@#pzcepf3AfWFRl2)$>oqHjXy$uKjF`Z;GzP^(a4ozfC}E)z~AN%YHw z#e0;W6nrvSI{vUg`pG)!1?>6yU9T;bE?1XI*Q-mEy5O<%AB#cc0bUEQ$>87V+G6Q) zV~LdA)y&i)Ci_6Pfhl_qSa)D95j6#^EwQe|+9H2O9l*X5_8yT3&~xBB+rgi9Vv?H< zpdHY706O5_;(@8apL3b%`a*s$3iJZ=JnU^Q?&Np19~*j~{(j{TI|2J{$nW$7_K5Qs z<9{~5$?F+kpSAhM-y*h$UrZlaeSG-L^qUyhwWi!d-y8o5a<6ulI)6Uy_ab2OC}e(} zVo-WpV~H4_O)4MhAPqkpiJ1??02^~k?laXS*9puCzmB@p>*%*XjyZnxR~q8~L730W zbE>Lj-BwI|#|BA>7wSsaUmsC@(jD*7?btdO-JAlipX?NU0Yapx@tDGCY=DvhBg%fIZk7 zu&0dVK7rcg3DaMv^Q6bj^Mu2dBw%s|DfWCl>G_|P`uaU?JSwE_Hn~RKwUtdq#f!38&Ty*C-EB$>}LgO9wKB1W_mf>y#={vXtweL?B~#)F(^vpN7fPVPYmd=LD&iy>WKn9ryTyMJ9{eaJrh_9*+z z^KkA$eLm)Pk>jD>XO2g6`d={C1NO-0H$r}=3G$=V`NW>FeM`0X#NOC@#`Vre%__MOh``K%&;DIA6xRWx+FbCDUWMBxH1ibo*(U^p_`r;d0Ol;BN`f zEg$fadclnkh(GNDd9(hx2PI@Ic8<;p)*Ms#?%cY|$hG5vwS}}iz?w39PS|_IUL%(s z03WC?NIxKr4siDc?>#3_H(lW4myzS`!n&@>^SR4D=B-rrk=wU%K6Kb}wP(*@taOcvvp zw;M?49K7y`aA|gFf?~+`rLSiQJa9{1NYMxM4fr=Lznm)359bvh$SU&=k^2hjUPA5` zWganw2T-3teTsD??MGlg3UvT`jT}3mJm78zIJZI`;Ox?^bO2{Uhon0%+%x_7*Pq6D zc=m4IEc^8N9N9-sTWk1EKc^G`_qCC{k5`mh zr~Aqv@WNo(D0x>^kf>F;QJ)6xZ(>itY4oPN(?~*RXVIR{u(4V2cdfxgh$US3TRvEM z6CbE;fG*(gcKvOs6n&Qze5^K!#1?dZ{ zhaJ#(z_A19LDgPl8xPPITi}FjiE00L8-&RSU)##P#iofm3+-kVwURz$` z7C}c0&mak}RKQ*j%wnPcn7bWHoNFdgk0$8v;?xl-zq2{?#}m*4tKj>)>wy$L=$S?z z^npLp?7{?zoQ>MUI_wfWUe=lC#?HuHnCWLed7GKxWDSA!B<`e7We2DO*k7b}05-tJ z1Gm!wlW+C|xa&5Ze!#5s;*UP%U5xixo3^z*WA{_yy&8~xSAG|@Z&&Yz`uoW7Fs}>Q zSDO!iuNCro?U2i(+?U_qQUV5tYHlGQmf z9WbDU3Ug1s$=r8R*Kidp@9_mW$ z`oh>16C|yG<6!sz{b0-c%4)>@h7WGV3$zQAed1s9L?85LXTscGNr``>l4O0gv_u~$ zrh6UCOh4y%xgV7K-?%5%+4E!VfQ<)e2gn1qPo2I1dBEKlWR8&e0L-a!PSKSUa@7a_ zbS$tkz4&8h7Mf8o3JB+EwZPMMKSsvhkoxgJ3*fLJK! z*0LI#=GB8J@c%0`R;+VofN*bs|ALH&Jrg8yb6$x(ggM?LCC&UM zY7sii&E0SG1?=uO^eSk-5#s^&95OG!oB(|R_jrIg0mg&we!ySX0Z*hCf6OX;%6n#g ze$H9De14~&!zKIh`6&AhSkHCpI@af7oX_^E>zbSr@i=_;g_$M8)GW~1tt9tK==@;;l6QAy^vqz!>fL6# z7ox;z%;SS9Ug|6*PCp>wi*lfb6Do1fmzKl}$WwgTQ}XYtCY}%aN{zjpWc2lCWH|7D z5PsxP&|u^kEFbjM*z;yS=mq}h^4k*4Kje4>HH3#Tt344h0CIKV8{&|QE}{EDGwJ?l z?*B7;An6afVnX@?lx^Z_3N{y%UZtm`83uyIli`#dtzVY`C6J64}LU@*4?79 zLz6q9n49P9F!OY|pz|ZwCSWg52x5UElCY+X zIegCJv!Alkr(LD^8%>~BLZ$e+s#5=856LtYI(Sx;gghLLdP<;F+tF6W{k}=Y!A~56 z7;+S71o&VWe1Q}`cwF^?<%1NPz!(Ak;Z^v7zak&-^Ac(E9sJkrO(k$t1_@dkrT$=+ z14U4i#GWT-p96ae%&srS1J)OGbb#gr96!M31e~0Z)`w^VG$%+K0AfB!YeUfeS{wXR zHsDZt@yE>Cb?f)BufzC#DZO0A=cn#xp3n4enLMAV?U*|LH1td$#zXDA=nJ)hy^jPf z&w?5E0=hfZ?D}+e17ZF#C+44Go+~V26SGLu568;jKQ_vMs~cqC^{1uUk?s;WE`#LW znJ8t>bEXQo!#5%B^iQgM+FgnsZ>Ta~VtsWPb9ueYy|zP!e6dt&ZEr7?pKBsL&d-o( ze{7a1@`6l~XJw*1BjaV0j0G=@M(i*`Hn{P@GM2J#BzJd!~v!UqjF230jsJ zu~L4m$8!%7>u}tEz`6|gqj0BU$jnRIj&?@g4?e|v!=(E09+G)ZE{WYxSjt_1 zJ$K}t^=IzoNcya&6hGDwb@O1UxT&E`{rOp$Bd^FT#E5g{Wtn$vyF7e#yUe?>O=jbJ zGi8g+kj*k3d@xm>m&xFT3E&0lgwfCkvG0Q zMjwunY>Nv)K9Lig5Fo*8W3e+H@c`^V2=+UvFGxSY6%SGeIPsu+PRQB-tqUL)oPihs z@uq9Hk%K>dAohyh^4x>e_2SRck3aqX6y47~8=P~~o*tLqhnSB&PBz!WJTLor(6iYF zy%HU+&6gt2TI{1#C$jH?b$V;_b3pHNFHSD(h{<`NqWB@d$36+2!$!{p&vWv`{{E0D zky7kbBkh$;$wRl3q)&Tbe^&$K^n<0+rbaUJ*Ud6tcF4oB6_2mT0?ag3DN z+8FvE6V4`ym2mI?_nfm|QG1S=7rb3g$i@Nm1F@gLXF6uVxYv$3A3S<99}FAdHP~Bc zM5q(}$Ap^xfZNZE{Fq++wZ8+iJGa#R=xgST7X5yk=hgWP^gl7?YyAuQV}O5wr<0U7 z1D9t)Z&e=MdB$EG_F{0CHuqk*_JthB?#JWFl4*HP{Tt4|kUWtG;%=5qOLIwC`t$E| zFO!)cPWre9c7HXKAn-=zjg4f^Z!f{i*sWME1`jNio$?51ne0+}1dn{a6hB)m+x7Rz z3v*q3@B(bZbE*qy6Gl4rfWBdhEl8~gGcje^TQBik#=6bojBy6o9 zd0wfE*uB1#<1Qu#`$YDfU{6of%6w9MRTY_i`2|Fl2Y~+$#d^8yfv2_?NbE~RtMI)Q z_}Oys3HgD1vH<#ld@u*Lfp%dEbOC*Xv8o3)XpArzxkAQ>eei0%@XFQ}PzQ9s0djPJ z){2lPX3es|<5h$cJ^#g4z$ebYOOc)C=CunT|{6OEi*hK*Sp6khSQv2H> zQsM~mmyGrQb(9w5zfNO~AY`WCV4d+fsV*=j>iet;ghiOr4K4Ue4sQ zx5M;uHbTCq@wb@G!i)y{IdZQli|au?Z)K!p*om_pu-}gUaAxeqR=W?`XRL4bdz)QB zIzx_HjqVFMgSx|6%#tC0!_QdmJa@ferij=x7D2xm`=`sDX)6Jkm9F!ATcB_NsO$&r zQM}jU`Fc47DI^_s=#YNzaXAPi_v`PGPYfSyS6e}wFcUm56?%X?KwH50fN>(@!&};c z8>}6&hG^=@U9YpQO#CZL@S~Z*`|L5rIU)1|?VeBC0M>|U|5u`)m3aX20Q^AK1nJ}F zT2}`7wf>Ulxk}K9W?wPuzd9R;ejx5F^G5IRpRoUuUi>k?ciHy#ao@?!wjVX#uZF4Z zXAk!S$n&-NeYO-rZPp8N?}r+9=nkIokV_)4@0LBd+-*dkU*kRce2Dj~>~sD-WwylZ z3@NF#2Qxoz>dtnKw2M^#yq}ag(Nern4=J@QS(g619T*>jlpX+DhhV*rK!YEJXLl?W zJ%jIUlvnlVmXECuL zc);v^MjW8?NzteUXVhN*0PLXkga6_^Cs=bq-l+Tf4+%!kcwxynJ*)adUPIsmupW%q zU*`hg7n$=e;1k?E4*VwF_@8b46=f}TzTc_!sO@+9JK+1V@43}~W=pw!$m7U!idw+lv)2%HXU7(?{!sJF z0aE^r))F`}T!Q)s%Y$#tmFI7~foSd+r1m&8_-l~j6OiVUpi>T=goZz<-+vB2=kJnF z)0dJ79Fc+EjjkjRVLB>Ic9M(Els`OdSbcfVgKn zd(`t`&o6g=WB)&G0Pc}5e0<6<>le`rp(7uP*H}kqzmQ|5pHCiPK3H=>tO+9*to?zk z2aL9PKu0Is-u^$Ge*D`WNR{(t+>hSQl$@`r^>G%z@mFId>%s!!Im1`yaf4pw*_@om z!ugDfzlr&+?q@%y=K7HD(Rt$6I8SW%1G4A9k$v`E2sxn zfu8=VybwFxAz|sE>{*-^}f95ViCZiu^Q=I0!=m&CMiMgO4 z$UkS*eKG4n9^f2^2Yfiin|(o#fNX!zO*LU)KaTi=&>N<6B6pq_oO}=XKV|TD_x)1( zJlNmG9V{(>pCP4pJ%HYJ^tG?UIm`H5^l{1O)OVb%VUGmQbYjeJbidgh#F*dueLQPH zXG+m?z&)BNwFld4*jalHxGP3;5ZE11@7odDXPjeYG2BDw%XS_TIWkJ7y}3k=UHuTK zegsQ!US5|Em0pt%pz+Vc`kwk3>-pV;306xbVmo! z7i4aTIv{N@~h2^B(*ssEHv3EzTyu^T=B_xnONv^QWYX4m2K`LNFeJ->|k z?A{6O5hVV%st2-19QQjN__t0k{@B+tKkw0{om{|V@0Nc_i;_=`aM zBjtm`&k8l%fMRLI-TnIss#WRDK|2zbEDYhUpt) z9N6my>P5dVkvyx)i{GRW$?#m9#=`0Y@XQDHhG;$zae%XjBvn1ottY@$3*d|Z`GvIr z%Kz}Y%KsmT3wdT-y1wB14Xmj6qu1l6ydV2Jhf8zpLrFT>MSJeNR)i`~2ch>d_$Bm5 zK+l=;o*4Jj_7^cb!J+%P>yZ2IawF$scSqS>5-#13olz$LU~3QTGp6jb_GI%I#_s z36aoeac|%kYaW1kAm)OZ3nc#R3$eXnX=_1R52pX;hCloR&WM;<(c8xU?*RXt=>i|W zjJ#iM#@V*lN9TAo@5{U&?mK+H=08u7lG_{MnvkP@5_8f#w*vCddM9na`hLv&xN?4G zFSywUZ}vr|`2CzO<6JRxKlZ2ITzg=@8D|WzJH$0p$ovCp&h$ZlnXd6?v6t$Y*-G$$ zU%vpE`|4u({Muz8|07WU7N~y>KKKG2z$fqkFF@m;S6i?H+JSa}@#2#j4;Vjyxnt&q zSSw)7$l3tr1p5P9_ndH#H26~obiTS+YeeiNFR-?<_)iU!&=+X`nF|K~S`P&N%mc1> z@_@D$ME#$tAK(u7Ge3Om7=Zghd3H>?zF_+cVt3UK7Jt*@3%S!izXwt0A0-d`I8h2d zTMhd*5w~uN0`|~niofyw4E{L(NAYLeZ*qRd_q&zt=WJ<8&ynhW?K?2K-`XI~mvGMp zb&&3aLhgyP1#N$SNNWxyUTGlQ+ebYR*e^()e(PDea{YIp{}Zgi56}nSfCp$7K32cr zF#G}P0LBc@Ln}ND4`HpwgS%ys+5nRinhZaXIl+`TAay>_=zx^IVdBqOlFnBbX*|&E zvq=&%GC~5^WtQMqoc$FRf7=(7HV^F70Zcy#@MkTUbAnd?)Bn?cpxfd<8~F2Vwsd^~ z|5)I^|5o^O&q*Wn^*?ZVB69pyve2!G@N65b!e-b2;?KMg^Ta7Wz>BV2 z0PDo;6&R2vAMC;(Hh}tH@rMmy-$JR{v`b=$1BsGr&A6EL~slxxz5px0v|b{Vlf7Hx>RHlicu+ zL45X{+Fy)$qE0s!X`cq?vb?a{-@CVuy!q*y!mpp?Kd=Qx2fPPPpg+hMf$`#Y zJlhP7!2BTN0OHSFz{AiCGhqW52ijcFt?_qi!teuW^NBz0f4lGJXkRK$c9!5LW3aa( zm+1}VjDUMzAoc%k@n`-AJmAPb=ZLizg!0ck(5>;m2JCreaJs*+qs9l+h4cJ3;g5bV z%70VHf5B&x{~Z39&%G7?Cg*!Q{M~&&_8Z$?bIzDh_jA68_;bF1GiC4rFq6qyBF)KM zTPd+i3u%sR?2BXNv&)}5JaAQQ!0qur3hRClwS>KjKWjs`!hc{I`M3ST%mY&XDfd19 zScy7ddGQ$FC7~O#OT^y1scXS^#UDNZXG83asNxSD@aOR7KET}R2H*Ju^!t@WzU_*c z@3Z%wGu^=dJK+Dr1j+kkqIhxN_OqC+KyCB3^8XLw&l$oF|CtBg!341Ds zMD8!B`7l=wkn+zMa5EmCg&klm$ld;PN4ZP?-$wrLtpC>mf1b;GPhaTwiv|9>Os{_m z{;c~yfVjK)tZk}>t)WLd$a0%i#?IprDb|g*mG?BzX#BF)C@a# zSbOGt5%)*5|79*_br)csbg5K5*-heCloWsZgP8rmDeKbpg}y-jYuNq|H3z^N0c!%! zK^tsvazLyJ(*K`}pUglGV3PI(Y;^p8_6NG-58Drq!N&ibFRXo{ug(f&+KD|g`wAl$ z=2ioM|IhuE-Z-lwcxr?MPs=EtQ*ds@YV?9K2cUf*(EYk60{!6F72-1uwV%nT1x@)= z{y*nFE8LUdyZsUHPX_)!yW)TBv}=Iak9*E?tu8Gd6S3psDehq9-c8VLbhS_{GT#&QVBE0)jsPh<=$#5`FB*8if7s*?~fgO&YU4RDxY5oWKKlFNQ&zHu3%>Oa}WAHb%AD;hb^FOTlx6;1-%9pxHzU|4_`U}g6@p6z9oK-}Q zTt5ph?>%Js-h_mogzU2ha0IbGdr6G%Pv4Jyr0f|c{;UBJ|AB}Q`T~F38=gA%BK)7ozbVt1Ad)V8SbfT+tLX_F=+Fa<<4vMee@-PQ~^Z}vf zr)N>%Jc{rcu@b+&qy+K4+p|t@U;pU~{JsAY`1oVUz8`2f@n`OhHMiQI4AOnb9^-v< zM>6*u1UmRLrnUKh+B)X{UHM<`-9i4}oD;>`pRN6JkF?z_$Nf^xr2K^rQtC`|^aG-Q zc5)V}yS*GR$Sw2#+yQ*w_J9Nb3OM87bN2q#huoDp++6%I zo9neONCJVq=B|;$(A~=}{7wDO;BV@GruW12e7bS~sQsJsf=vC7`vywA*IYQO6O38@ z_{Bw}-CJX2){R#ny{}5E!-FJpZk$v(-yPS&J)7)9;rsz+PH6|&gX+wiQx|aN+(lQW z;$F|fj<2jT`Q!p*c|X*g-xlezlf zvi{H5kJJx*QsUXV5;zb2uiG&fh(1W&J-Rbad{N)^L~lps*E%9^jlGh0BtuH4Y zqcNYoHbP?-&0Q0J^s_OZu`z(D|C`>glpLUY4wyQC=LneIAKf+cR%0oEJ;>qHqowR~ z4W<9r%OQKry={gcwp|9Ee^_!XEGR_})|Uo9jM5rl%G|NpIbi3`$p?nGt97EZ!hW{u z=le?J_-I-8?KU9%7PR{7YV)c0ne(%?-$k(d> z{p=h7`agKKHD{cQ9j*`j;dk}JnHQtc|H1uWLvHH-=yyMKzr~-AIPa=q?XL#^n*3gO z$RGBvPlca?d{w~XAfCHH8-P9Pi~&+=0BQPvoE$Lc{A>*{!PWrL_p3EP>>A3vDxZXm z$S6H8FM-W{S$nVOcg@28$9%O`3azdvxnHUb8!$|2YAt~IAjAVsPRPula*s53h&zNl zQJZTIN!*6AlDMpzY`u0Gxqj34!Fo>$_PbyqOz+1mV9!2KQ};`${ae4^)dLLOuf0Eb zRQbPV_DInu==kdbiJA_3zbsNR?t}i{3H!e%4t-KV61yFNQuu|N7hJV*IT@Ysw}WItw@SK_=I#UJuN{HEOB#rvuIEe|yKc}!IOE2Ew)ytSsj zr|+Ur%~b}#SLH0L_A$HrfT#g8&p{u6^RVtd0MCMF?=NkD=>ah|K+l3cQCBiN6eE6p z{iQBshxk7TIU0p{Y8vEm^tX>oku^9g>xBwZ`)i)P!F^*!FKJ!U**(LV6z&&hj|$^N z_NgSF>nQ=yp_ATQ3S{3Hhq{5;D1WAOD>BF<;O&qCOjd58q&!tO7?_h&&5Ob7o>#QPF^GY4Y&f358E(Z>AN z_PgqSe_%fx>wnlEmWbUpndZi0HZ@qhM){zxH&$xD*I(NF=OOK(@EV1)tB61EtDOO2 z?+<(bQ2S@UmscOm!{AIh@{-N{`*0sj>fSHbd+z%=U_SkPGovqcozG;Rt%&PHe5!Wp zG2oA!mHGg*0qO&!=>ve>Gd-YY_DA<`stzcRS|HC4bZWsTaE2K6i^soMM*ARn4r77! zm8Jjhs}X-~hfMC34)09Tp3h=O8{(W^b2g`*0Sn*M=z^59;@BTl|7+~wMxR)wB?(ey zWs)qr{4$U{0(mFydt80r^!3^6vk-j1*}+zC42PbnEETsrAbq}n1a;rdYV%X|{NNSn z`?2Ro>wVYFzBt_(h`K*_g>h$OC+v{q-neF8O_EygVE;SvQH?%^PC~t+1$@#v7l&fr z89hBqp;L*!wf%M{6!U)Q`C*?QcLBQh{`sVy0X+-sOIw|NKOccbX3QOI;vQSS74S`X zZsH2)s@1^X`T(3|Q6GRlU`iYqwjFVxV*~8$Up7Yva8IK>Q%KJX#u;)2UaP6QytvDQ zz0lFv4OH`BSLtwJniPMsx@1}ykNtz_2gLkO63$cL-dS^w820OF2ZG`(gZl^kw)Lt13!B?;!C+Z?;b#Kh*Au zNY5XZ!UnzQiuqXEAu-3youth741`7D4kGR*WBylrf1p{oGg5b%q9)Pq_qn?7jyWpE zC)|t1+*OwOxy56WxBC9B-H_Y^;i~(h_75J=ybpAN&!}7aeysK1bH4XZ{6d|AS@u}roEI*x^TN5W(@h8Df2{`2 z7^ow;_f*ELKlUes2Y3dX-yqZ&28K$&kWk6{auuoaNe|sUTM2VutWk3ZsX0fG=gHwr zKAtNEyHE!{Le#=sn3?gGai6c0WjFRH<|#8@Th-P-1U*0H+Ov`{uc+pS1IMGEX*Av+ zyShDldr3~50np)_x#<0T7C3JN-o$sU=6u^@UvR^7!*m~Dg}vC3x3{HK+}}oOo#`j7 zzMHQ5ZaQCItocaY8;zUa`;#Q&Je=o^{&>X!{n4?j3+h}l&rU&)Dt6D? zGX=4Gp65)VUY!Je;OY~`x$s#Y$)|kOaA!AJbZr;xJ28I=_TA3@Zia99qLklQU%b#q zmHWj+DUBYqBFE}U_(QQ;KlZ|$b=btrQeZ=}l-k-z3O<#jyXrE{#ICQgxChuNg;?lxJ>5N>cTcj!V~K)UXZCkDe`K4sqj$;>XrGb)VL0--6_;N2a zeLwbma2FirK2-OQh5R$`PyG2_rswZzV4v!oU-O;TlK2tMnfwqt_&)%_M@as(x0HIVsrZk;96flT+3|rg z_4*dXm1YOb1nBdjzdR;U({f187qJ8WVn^(i!I|A};|$X?jj=r~?*6;*$$~MT20MUQfPNrjR@wmcFYB4B)(^ytE9(K=i5qHl0Ovu}4=}U9 zG5fH;UF|?w@BrsQD@g*+m33yq%o&qrHh^bm7e{`WJ>n%%BPfR*U&T)~k*w>BNbsZx z@fqwd*&Z+AvJa{k*gtxyt7KjR{|dF=Qcu^G30I%fK5owRjRpR#&y7bdD}(O2EQNhS z>_O#waPM^y>L5@d+M}b`GkpMirLjktXP)PJt&+qat0>uzl+_*doNvj3Iu~nwk^3?8 zcOakUd%b1^NzmwUsd*Ou0CpZXgYIWuQqPNl>@!!vb8(ozsPolOsrpeb=mDGqNglxN z55?cL6W+1?jQa-p@{E_Z|0MR74}gC`*nz`-;7^+iVDFmC4|L^&fj{`buD2{^R@%!b)B=k!c@5ac!Hqh05;;|v_`C!l}AoE7)gP-n58MPHWvjnrwG_ZLz>C-hnDAA@c5S&TD; zXW)D%^!_EI#%u7OtahKWulXs+J?E*|SHt<5n%JRT<$O1Zn1ehk{*L(T?icEQ=KMJu zXkvc)`}aN8w;12;(YvotTlkH6~mn&+zS>oF;d!Gm?RJ0coMms#}TVNj>jh@eo0Y@!ET{a?>E=84#;D~p1TMN zz!&BIXr6nS`*@PZs?1w5e@Wk!x{Eu^qS4<*yB4wDb(p*m_ko!jG5Z9}nX`r8sxMieEh^#DVx_^m!(}M4_^iVZ1dg4* zn=i5OpAxoJ)E$uAUx__tQtqR+`n|{**`@0b^MSjW-Czy3^N;g!K3A+H>`Ij4?=%7K zbyeoslgz#ZV$VKhUI+6O27Ac8JNC~0&wx2$5-}yKl-t!xntm}s&#+)^pF6PH{qeBc zeV%>68YTPIY;KylN|)>-X62kiGWMz`f80w7Y^$n!RG1&sUGR+g2Kt@{Rl5^5|J2Wb ze_r^z`_PkgO=lKYA$CP>(D#ur@rLg6nGfF;y=%-FvNwe1EvC$d;k-8Z0x3LD+~EP# z2W(70f53?g@|~)o@j>YPSSj&bUBuwr-@8U*@WIgIHIMdDotgJQGVB9vIA#f1OD=e< zw)jGJxRa^h)wPbT_Wf@>A+5idu64FdD-u+9(?%3~w~6FCQbTuZa2G?5YuwlO z81OOsdx(F{H~NYHgitATrk?70_Mq_maJus52{^U9i}zuLtZo*UaewWNbt-EDR8=$VorId zt|#uCQB{49ebhM)mw|1!Ta9{gMY)% zn*C?;_~yS&`H|-z`VEKQvLHlz1XKD$V&Dr<55(y#tn~+s9$;JmT>#l)zaZ~-#9Hjq zo){%@i;GIBEsdnbXOk66=G{BMp2y71r{_8G%#VU+aNfh4btG;_S@9nif-|0yq$lP; z*pJ6vJ?7*|%-z#|B<^V=!Lu_-zEjn4ZV+&1T<74W~OVRuE_uYNIfslRFh0tTiS!>R_ zaps*nZ!iP>4t8H9{Tpyi&o!X#IxB2y%&(rauq&JUj+qm1#e}R6GbSJppicn#Va5gA z6U9AotQBX5Ugci(j8CC=VpyPnPVvOY1oj#c{?{uWP10r**hrmPv`t^-LWJyP69>Qv+v8l@?s1 zWZzW^XAM-;xFb7lJkF9M?mSm820BP(p86ho$?W*&ZfEZI#!ffzZs>N*bG(Q%M5p6C z1I(GQkGs*Am`O*j$Jl&F@7q`py-LRBqeiLmULQS2$?ARX+eJR}P3*a>^>4xRUakXs zZ5Coq^(ym2nipby$kqp#AJ%zsJYsf$`=Yon%(XWFXZuDWmlFCI>MzLKasMxCX~dGY zyDwzA)Qb%z7`>Iuzr`IzFVTt0*ej1-%PBFi3-cVE|Cn_DZMhVDx~kcy)zj1L+JT%> zUq`M_koe=s;Suu#jOUHK^PEu1Jnay36!cA0=ArMI!_srZfxX%9pG|^xV4nwSpzO;K`qcaM`JneJp{|A93&*f~uiU-d^MBLd zAU}}FyN}Om?5zERwL;Yc+;iaMhZzs}EJS`AJ?;UhAq8*4`Rm*nw*xa0n{j^1Q^*;u z&!+t??0?SjXfdhvR$r-iZiv)=cYx$vSxQ2dWHI^Uqx8{W^RbJ-3$6FZ2iIG`aPDi44Q$Iv3DWruiWo{vy|^SbxO75xe_!O{xd__$)@x>UGwPz2^l<1a_M;FTz}S z#6#J|dlmYfF#pK2vnw8KBONXyH;WpG&syjL$X@W8XbE`?v?fME*J8K+3%NA@CSE*$ zEAxJ1r>Qe|ew^0qVdKNs#UVcroZ(M0$He%OSf|1pf1e5cDH_kASINk`(e>QdM44v| zE0{8`JG|NF1mfH_;uU=hp*MO}dO+uQ zJyiLFt_|d;%+4-e%g|eh-dE4= zo*M7xSyx^{CPDt!MM#GIkUzv(;rp;l`vCMYYO4`@5PK_D$Ri_e)IRh5h|722Z1}l2 zivv9w?AP$cc|jRB<ca_A`_dro>0q2^eSH`9%<+8G<6GGLrNBS#-;CM)zBcec0P2RFvG1}& z(d~5#wfJSqIQYjG<5y#*X^M}|6d;#uWEVP|XDbCk#|H1ruD$_vZ_sA=h42-*Q=j&j zx`949@zeS;@^O3&oCiGvUxBtDXpuR8g0W=;e~);>mt(xiIF5K*%rhV_MOoK#JW;n& z+*RgHtfDfHUgv|h}AB4sO1LF2QgFjnCX4gJ=fzgXMkC_!0p(TyAfvqFGMd5&RPzfh2G31 zn3>;<{Lyyg5Fw+KRf8d9mwANUz!h@L{p<7}LvRj<_1$U9)t);tZtOZSH@2NRp8NUq ztOj@78MCU)19R3l9qjd7=f_e1M4U_fbFL{Rbw1_UD8pdyf&Iq=jJ?0u>nvuer@-bX z+|T>>KjF2K-|msoXORC2ud%2TQJ$D9pk0NH^;n2=Fu)7Zi*eS&i*+T(f}-L%1ijK5 z5HoJaE-nvlh&yGTeJ+Sg)`N)q8uaX=_rVu?&%H+YNUwG6*pCEih`hs55&_g>pN=m-mP?~%>PHMj0MdQ8?CbI$gtvz93%Tr+`q5CN34~IwZU7@Y6Z{fUQYGxfI0Km zly~wZ``o#w6S|(5Ywz1io$J| zqrdxiJo|WN@$T68)aA%|SdYLX{$6*nQqFD7!r9B~!d=g81@@SG(f;QZ z)ccVAC1K(@+)LsfD<;)1_Bo9nu4(Y|lTptN`n&Jh|FqYKkLcso%PYTUPmlaLSC@=y zb#+#imcLCOSNp?(hazTY6OYN5g{N$CcN*hv#@`P9$`91n&i7S+Q=VNi&Hoes7{nXc z2Q(G=geiy<7U9f|r?JD5JV3j{dIe>jI-c^bdOk(onaeW$@7U9TSq;yj-hy*Hc9l8S zyi4709xR4h{@>n<|33})JAIyJKTq+gduec9>{IECT<~%3zw^a>ys0Z-CKmeFpLh{> zE5DTCw1l3tfaj2>#jG`YDsaY5S;_rG1pBr9F}01(`H-3_vycTO!dKRSGexpX!6ZCX^j2R)z9{pLYr$!##zuW(Bu3aJ)7HN zPt38C#UDGFxRal_d!wh!dywBL=&QDT7(^?~f8Y z>VF(LH~vldA6MARt7ovY|9-UgUSIJZ>i;HqZv$}e13`CkdbzwkqY9}1!$aW;0T ze1X1XouAZMO3YGoe#)bl$FZU>*J<1I#|cf*kI@`w7&XW2T?^D^n_yo=Vxu3%ltC|k zfvigkCE$0<;M}!Nz;_sM?gu`rhsR>zwFKm-GUNN+|H51Fzy6ZI1EIjE03N#lqj`|k zrzx+PBOQdiW6m;%nt1_#PxRt=0)J27e_Qzl{@%bn0Q9fyx%^)b_W#|0zjOz%5c`Jn z0-m}YTjZjBL4W;*{V~2fk>9v%f9&BA#^?J}o_q6o%2N*yJiX@rJW1qt_vdk`UQS=| zqWjNr1^e&x9B-KF=YQh)B=^_D@89itdSCx;zkkug?F*kT)pOiXx7(}tBklc4bw4NK z2D`l+@3;F0Qas$=KmpyK@(23!Nh!~j1KghL>!tiy8NiJl^m(f5NxB)|wAY{Z^QC=$ z(f$3>-k-Gma0|TMFW&# zSNzlP$6fg=HUHg$U(@pMe)s!%3;w_3&(q3J+UL+e7u{b!tv-rNqo43Rm3%|~Q{AwM zDb___R#HD#edG3iY4wplce@~5ZmKs-;&Zn*oS5c0pSsMO2em<}=lb$)2jj*bcbO=)mi!&(1>)@QJ1;QNJ~y}2T&;d@zX!ftf9~9Z zIQ#3)El5gvu13V|DL_h!bAO)l|NMC6&Y=AuPmg%~`(OW}FV2}}##SWeQF(q1{cjTM zC;^~AhnQa{1-nrQ{(m=e|9$%!_BHwXd><0ulkd;#An}@beYcGn@U#D4zU;l`=W)N! z_Ws)Y%G_24P#7p2lo1pG;+{dCFTtKgOWZ?ZiTlTIMfT@>w13Cfv9HJ1=lk&e_`ZC9 z;>qhFM!Y_ET--7Fx8q{(xxL@yF@7d~HhxBaUVe7oU)~emBi_RpP%J1LC^;hh|K|r41Qi7pcZg?dmUgHd9!cdv6&$LF z$J>$p9sa)k+p_pSUz1c4#P{L*6$bJBc^$-&I9ZH{53if}PgRnxNXC zI-t6sdZ79aHNc}gHFSG!|8IYnf5*S)>+tnzf%y7-pJY%K5OL&nlmYR&czy1;kXPbC z*+DTNel~taepY^FesixIJ*JW+;ff~tXt3qM;a zP!SM6Ge0};0q;c!i1&s#*!zY5-j^@Fo)3sPQxB5gvw`x03WG|6czrcMlzHB7@*4S$ zpRE&!pV!`FdvAHKcn=4G27`uxhPpjIi2sv@xsm;z{r;_<^Y`ud`Fi}neO?My2l=f?pbT12~q>mTF|`A zfy5#ah;;XN9{T%GM0O_;Nkd8@)e)`3_DB~*^IUT#Q|Fpjx)0q?rmn~Gd|ZZ%<;upR zi<#1S#EpqhM$OKCB6?%WN6`0^(f`yEQTp(l5-YnWCpE(jxE3X{w8idLY## zzx#Y!Y9MM`T0rB)*!>W_IpyQX8QEWsxISTbXl=$KN9YWH9hw8dYtv6j=G@S=>mD-K zjOLT>QR`Xvtb1>VG(xH(S_i2}0-`x9-TmE%){(|D8Oeu~N9rQ2k!umHQP~#F6d~kx4%U`t)RiM zh~|RkMdn=BwO)GN()(DvsE+*36~r;=!~))Vh@SB6=n43@H(@nCqOJas9dv$xrhp_`AkHYg>Dme6?;! z8>AkRj^ss>kgP~J@^>GX&j0*;SOug$BHO3$mQB>PTsrqJ9fR>%@`ue0yE=Yb^s1a^ z=xh9r{?>r{o4vk*{S}t5v#<%Tg6Jy*H-5o5Wp3E!)l_=KH80VqA9Q55zu{-&CK?8n`$XKeJzq1>+Nl-kSD9 z)RG);hIftM!Co|*`^nV*xQypo&$36-z4nH|h}OPrKr5sUa_Rh+&HlUd|5E#}G0lyX zL24n*k*kqj$c>1`AkzkEEoh#M3T>WsBewn3=zDX26{Eg{hw=sD&`pBxO)6r^^eKUj zVmTfuVc8!mt$s&~o{{AB@8^Gp{^5tPh*7bYV|z*Z9n&pkcUe<^YtF~ZSjuCiEr;)M zWnB1s@li51jAv0xWIWXelkiYMi`|jWj|KM1kA-a1&&PssxHs(^*~O6hQLEWOH3qtu z%soJQ*M2N}dp)B0*8$O9SPdzOq#^&L{nr>oBJ!)Ww--XR2WY%y_pU^`BC>@Vhk@*A zLqkeL&WIY3{YmgUz6;{e1bLd&C+7PJ=>ZSoJPE5b*e@K!D68ONW>NDm+-K(fMS-tC zc=6E_6FrthUT^|)?*U5$oX9+29Sch)?THE=XF#8mqJDGr9($Yt^&J0%EfNP;obYk9 zk7Vv0Kie;~U*DVhW#q)9{aI2%CoqdOw`A{if12|>kf5QLa zWBeMD9n*SBM6?EqAhLBDgQkdVQ71%ev3q!n*o85Ra~+T0Uf>7Wf~1FwT(lQp02z8g zz}I6Qt4BZY-inrIPh}J4DmZKwJ3FW0_hA3SF4`a2A#abs%S&2Wz`*jc{BTSZ*jK~y z?XPCSl*_xf3ZGHc@(AOF&!i`u&u6U&=Y#L0@88rPn(bli6>B5@p+epUYVXlF&|~nE zUnQILK-!N{w`G4mv~l!YW?-hjqcz_iX^AvMsw2|9=B51qctpOB?DjwP&}V5pwWnx& zH3s@V**mSfdPvhO(IHnvT%9m0{+@jA(z%TsJ0b8 z0A}*RnpS9kEi0&TVN5g@`S^~!PYHjcJl|X1Ql0>Jp-?B zFQToDi?}(tHlg>gy?s&NIyN~CTq)s6=0P&CkkO6j#wZN_AiDE7ltDby`W}}u z0nFkoa3Wl4d#F$JoGE%O(>CPu$!hY`iW)oQt>Z1$VCHYL3_^#V?eaAU&WtN#Sr;}xe(1s z*=NoB|Ag-OSpU$NYA?_j>-)4Pr-WC@S~+1|{=1SMF7{=PM@s}!9>eZxoExs1;OQ~F3_D|)zr6+6_xiV9zLKkMW` zZP_i>T{X+QrxNywJ>&5Ttj%(k^HDhDA1Nju%o29MBm7`q*(A<*8GCeaEqoCz%Mbz<@4$BN$t_QCh^1%+`WoGa~x9&_L0*^7Ha ze7wwaFi?fN@A>$Sfq(y8D_8DVYcSE7ewpEt#vW zt(S=ZO2)=cD;QFr%}MPPFnz z+E}%dS2G4zTIJ(cT1Cd9;_>zdPO_yxe>vX;-@!4~#ACQKw$icd-%{ur2 zHHDRiy{v4UFB~=$UrA>P-*1nvl+T2V6uBkELT`;SkHIl8EC6=T@sPS<@_+to4|E@u zeMgDm_%vUqK3P71|Ba6!{^{yg@K7D>ZGBhtNCSgw#7aJ+dDo2lZei)qwPB98k!D? zSgzHjtR`6WaMxJX6P>KuD_6s3(~yPVUuQ+-c>#{N9 zP#@cfU6M_Ds=DRIH-kR`UrA#CJ{|i4aSz4-jI&iaydUiSfB|6v`DE}1-b3WA;D2KP z!pp`)rR*!$AHU{fVd+Wl@@IstT2!2`%&C&kHuf0%!dy=W*T4LWZP9gG&+SnK4i;he zSA**Z97NCWA}nmM@m%fK_z6a0{kQwL65H#;jS4pUWcmTclk*D_Mn6!f_Gb3s!gp75 z_0RP2xZ1V&oSLVEvk6ZGToKjaoUi&yN6$a5ajyXXOF8UQI`&VtsT3ID9uFRjVEJS6 zU-5}u-aYb_bT$1`!iGj{$WlH;vA6%|BVk0|Cg4`SoQwTc zIHvjc)s*ke9Ky~#(~v!{DgH=H*i`8VDtG#-SG3HkFW%!p^cNJux*elYxPWB-y&E8P*NE6m< zBP)Ecp7+!8?dNRA85@6%9ydBF3W|d}`ec>`|mM_KtC2uc!zYTKN~+ z`+1_hy42AYvPtH75%7%*GOw_yPG>lcL5>HCi=XP(^p7nHe=D>@n9gJW_#@lM{4rp= zP0t4&V1CZ2L3;zA5SZ@b@+kdWGi(ifQmk$HB2`%LRhaMK>|zU;>)`Izdc6mF>ESUM z>!E95^a-Q0;pu)JyGuCjl4kD<&uy^hsSleCc9rUXklZZn%Vp)3f4r-y!V%hNoF$Z?PtX!_4)-FKE?IfWv(PyTsmK>E({z zXTo>2GRImu>=A3aG4_ZU$6?NH2Wwfb9c9t~ug-tjBJsDJ&N48h&2?k@WS$59_Bb?t zwo@8>YWEQ9x&T*609((QrjdzPxwOtaFSL=~#i56N#s9$0)I1TiGqq)BUgy5CF+o1n zeso{y`R*PJf46a|Yi&&M- zB>wrzWQ#!5D<83(*AeyQMlNE%00)rBu(-~w@mu{3TuiS^hwB-8al86)uv%cD z*Eoe;(%!&Yt@P4W#`(j_zZmpaOC943$J#EAF9%nM<=&nyZoFT!KbiXfG0T9^&FRz2 zD?am&JW`*kFcf}}^WurYS98TVM|sX7{0DJLW$dx6XZ%O7-Q|A-_ds|n!GZL4<~01J zey$I2P0tQ?O~H(8ft_g%PlPz4Jf}H0(&;;zgNq*LLdL)|xsl#!#sf9v1gCd68Z6)^A1>8y#psmxwh1wW7d)vxQ?+!Oc4oX5_*g`GLw zUv>r?BaGG|%*mUW>+nave~YyQ!xNrHYx(YQD}8SRam^W6WELeHs5`P-x{>y92U6|+2F^-BGzZudVn`F)bcG)H!$I?`FkE48v8bswKtfx(4V!? zUv`kS(AV$LTBp@dbg}B#&C0KI;!Jp@rLz{w`ZIJ(EA?D6OW9aLaluRd|4aR!OP_;R z9lEE^ZFLnN`pb`dKHL#n>R`ie@Hbx2d0jqo>7y-t%z(2D*T{MGCE5C`z27Zg62F5v zAKY6TpN6}eIj6l;xM{*nYynV zeoM$ze4lW0wrkcO-td>>5;vWiTr~gw8heUm#1Is>QLGCNLwvUm?6decn)CRSvN!Cn z_>tE!w{8?3sWm;rz6w`*vv-;A9}G8f(YE<$q_sUa8UY{Uld*OsSmqTUZf%hhV=ZDc z_$XV+m*1OWQTKzBvQ*l%vO7Viz?+6Liw4YJ0p2l-%d{NfvPZeR>_ zMybMiy7KYhzO3_%&g9zPl?RgU|Hc2mbpHFjfPLWU9-DgprP#zX=U)uZy}w$w!UyYq zsCi!!A4g}!3NN;`iZ4p{9q}L7XVE==C4NOOS0BHo@#z~(bH2&h!K{1sROUSP-CBJx z0-cKwc8p#A$rx)7XAB(i*8bcCmozu8g{_V!zCyfR`ln{WV-#-7!)w$rcq}V^UVP5$ z#D;~7=Ia}_YFvmD--qrQJ7ML7vsY)IThLmc9d6<#yPPq<{9}#%NY>wQV;y3Tz^#6F zF!Mxy66*k837!(pCOzON=_>z-xKd|VnR_kxU=7X~)C3R@2Xp-o>7OwYx6zOTZyZow z;7>i8KG!8XT!9-D$0;R#K>T9a9Dkm|=2RzsP(!{YK7@2H%;m;s`mwGDdK~r^%zJNZ znDcG1HJ5)hTJzmwjdg&dv%_Z-U8k?7yY?TB16w@Bh2NRvx$Lrv&yL)z=P#kAMEnH_ z=f)U(*v$C}uKnke4Bjk>IFs#~Z|1nd8>+EqCYtAoc&LCS zQqSYDTglNTJ&bq^-y-}hV&pV^jf!6PJRRgq^!^MiXKI1+S>&BLT*8bLYxLap*7=)R z<~iEFV6A;RLE`P+@*4i9#m!7{^$zy1YrmdtSARXjuKseG>-5DmyXyQD#$u9d_whJgm$m;K zp7iq*tofN?mS<^cYK+1a%e1V+iFXVnzk{tO=f++hZEzA3=ZJQp!|~5F2D1OyA&r55 z{_A7$BfjV@e@6eEULKg0TdgC`-r!%Z;{C5AK z&4CA?<@@-PAC80*YLw@K^>dy%*YUF{o+t9EFQ>y5JJa*XUHkPM*Y*2(uG7cUT)x%m z9?Lf8ljO&Rd%hbybMhdnBk>sa;wO>_=bRk6=hE6!&U0AAY{K?0OmcB^Q(eKem0Xh- z;i~&#vFq~fZSLA{W--pQ{C9TZyZu^V3_5)?-8DYZ&((Xbr^~yfoC~=n%!N)uzi<(H z83P~bB(RaD!tpjG)`d;vIX;!Jl0wB%O@8PP*dPBMY|!0x=GFbfdqA7x*A*^)q{$bh znfsitF2>LlyHZS1F|7t~^$GepXF1EhJBWQ2-D7j`aZG$%vN!EM8*f*B%ACjET*dtB ztU3SnEN>IKd^;B|uesLc+j*|{kISvjzAh%tkzD&!r;x6A7kqHkrI1_jd}Vtp^V3W4 z^?j8r`F^-+sg)?cv6hK%?y7euThAYsS}(Uky0F+WGv~)fn9g#MYm@!@iCmh^MR1mmn1{?l|5M|PSU0%`#(-E~=!j?w z6;CvFNHt==GyenlLFdX(ub|qX-+jz~XI*HKryI2PzUHykK8I9^7*#dJFJFU`T`^0= zE8n`obe_FTe$KnYIOh!aJ|39g#`<<%_n%E>%}*6irgU%Dd_7C^(Yky+2fg10pWXuN zX-i%AuNGR%SB6=(g?ZuokiLU@&QCp0eria>&zPUwlydmu^T~gxhGoBtePM21*Ys$A z>+$76>l;|*`q&EVbz!mf_Ac_a&}uyYy<9da*P%}FCiFXor&(J#8|{6@<3zIJ!23)9Ig`VP{<(m zg5UQ=#UG@4<==fQes5z`@uQ8$W%@f6$X6(CUxPDAt=GG9w(9MD9q|h_eRqJzpl{*h z2e-gUGZNc67JiBe@RUu&)=y>aPxqXKon>>rp6#yvc8=@z-F(;k!V1?HuC?Z`400tl z)^p8X8st(J!*{={j4Sjk@%N`|EAAEKPJbcad><9A;y5=tqhKmax zCR^cp{kYWi{Beovd10~Z^#ebDT#OA`&dx+vm56;;c>1Zj?Mvic|^IwisT8aki)C~>NUzsSzY4CU_EnQ>8F?$@x>vWDQ~jY z_|oD7g8$dxg2cDM=A55uSAEGo3s-1oY);p2=UdMUi(L1w7g^UY=2_dfM!+9k-y(-( zby)``SnHQ>ww5mpb+OZOSn|dqmbMkn)NSRIOAh8~RjWdcN})Y9;nc`)?cbbWH^7zE zJFv`pUsz^+0xKAY<<`rVT5ns%IADi43GpOfHoKN^Fu39;3?EU8xO!K}Ix@W&*{m*mVe_Ui&emKc$?d|MJZmwtf7o}VL2w-!>uNX`*mv3P?gLBZdeq?j5 z3#>$zYfV`nFUwso)3_|P9zQIyUOz5#EnXUIi8Jz8+!nrXcQMuES{(S*I>&LQ=G?|Q z*g_nMxRS>lC+@0vcjV%1@N5zX*BDG=AI1)aO~|MTxD{J8oG};@`A78s3i|)u+|1(l zH`OkEti@Z3X;vXWq;r;d>*~C&^KD;Zi2bnngE+$vaV@aa zABTD09UE}fCsSONU01l2sfArQe19SIvVg7W5*Fold3IHFxp%?Y1n+B?cjvnP@OCyj zOkDCnch~#;Qg_YSnJ)M8(yr*d)^Rma=xEw1B6CaIt6}Pr>J-%9m4HM@tbKk9W zj03V9;rGBY_ym{pbA{{t(F~V=WqB9BF|X(JO`^6W5q?L{{X*SgG-o&B8N`(k#gT*o zE?ii!fFqVDuAPAmItv>lJ2a7T0Jq-rcHfE}k_}=F_!_-mu|v%NH?Ti7esl8kpG)4` z+@5^shr~1$Pgab<=L)g=_&e9@d>f1_5I<@C0cYEDqlhPrHt|tncd$L|wSJ$SWA%>o zw3u6nMGlBCc(*M3mZC0gdpXPZL}lZA;i%uV)cZ=g^n06Gw~yyp$qjYj=LjKwA8I+L z6?Dnt^H}QY62w`l6C%e@;gxn)a9cHTbXorS<*fG?i`)%?)z;UT{~8BdWm*q?H5ReG{Uif57jfF0DjJs6BJ5%)9Cxv`Gt7ySEKK=$V>^Z&Bn*Z=K3xz{g( zH44Pm$dSv}ug@8m9EOkUw2;5^{>>&_(aSm8UcvcF=bDZ>TVZpq#kZ-ttG$6mYvQZP zeos-$^>}&m^;Lb1Y~iEztQefvR9}A{Lc-gEOuP7h2tBt$6C2( zT3MA-y1%6j{9(Nt5LjdVZ8dv=^uOAqcdZGHgGBnrp1GKL zIgGuXy6bY{)uQIG3}c|44SEsix$!Y3;z)|;MZ>?Km^Qfu^J^ezhb&Ti@ys}jm`<#a zH4r`)`@uxiPyb8bzhe;fIp2|!!}ehJ*>mOdH1Kmj=hg_;)UT1M8jhl6aj}6Ha}yukA?P3YXAbC9pwx zT#4J^23}dsCC$s{N*`*g0+(R^KHq%I``))x_04+ml+icE0AV z<4Ysm&2ZKZfvZ?D08YYwa1V=%So-(t0lOqlTXEBhJ0vGQQ`YI(UF@n{{wyaRI`P@4 z?cSZ6ZUf$C&f1LCRuH5-Kf zKf(T}cKtUW%ih29R&;PdvCUeix)6`;K}=b(wf^k80~Eu@*C(F&A+f|yM*BUNSQ_z! z>F9r^mAk*0>6(%rC_)`sSxo)pauyJ;;jdpjs zTkTG}#Wveb>>WdFqYbe2)?ed*ExInl9$m-T;JP1ITJP_d+tnXVb7i+&W^hAW_FZri zKS7P#W5s-JRm_9LRn>n<{FE4yMcvN)C%>j#CucI#KA_r*h*_)wxGlpbG56&QsSfNG z{Geg%#e;t_E~NQ?p84PFHM1pnM*2i#C7nX4!pWJ0lfS zQ#_NiExrz%wCN8t<6M(y*&Zm&yl1UbZ_ioE(W^p@UoGmIbGy=aG_-3!n2o)k?;0QM zYdIGbRt}RoxQ_T*9bNTTi7!zDm;c@>uFUFMHu%h9n-zG-jrwGrUH{5-8~*+ZH!ZNu zCI#-ZN$x&3-tM;1w#7!eE$(K3{hLTgFwQM$P-2vOVOpRI8x)T61Ew@_Cf2y@FVNyU&Q> z6UXdgx4ClnHF42n6I}e3{GMNu`g7`*Do{Iv-JzaLHKF0dB3;x?a8^#v>yjrCXC9lw z71>eKRePPhE3qZ-YrWas6+riemXvp+&uw&b0z2Itx5Lfj=lsAf|8tJp?q<0My-alv zxJmAQH^JTQMzJ1laksl+tc8J$!HwP?$ri2jK9c;S-tvhI|Ma`1uGMQdyNWx=Yt4dh z>Hd74b1U{iY!LY#&$j@!w$DK;zpPw8`d6KW>XAYxQilSsQz!xtEHNR?dpOyKlY1V@ z*%+R_OV4EJ{{r?${bRrRSpMN%w&G&< zepcPneO%!OYFql6dN%3Y?QW5K%oYY7CPMM3TWXJSx_T7N?RLxT5nF;Rbi3Sb_K?lC zZ8n2(m|*wWSk}Wx#$gz?Xs~TyZ(ifi34OI6`!&E>S!XoPY&xgi=r&pP9amb`H7Vjd zGxbX>u)~1{@HuI&rhtU{+raJscwN7n|Mw$ZBKh*YwbQ7>q=~{ zV-e$HEpBT*M?VifMM+;v?|Y2)RiTC~SR+SWD7CossvKx+r4BZ+vWJ_y3eUF1*84h8 zt4$7#Iz*RpTM@hdxhb|hu*WS6Jc>87+t#{0ZoTcbb;x?R*R8QVSoX(lrF+~hW=!VW z!>qs^ZklbiiHyNG*1|1zhYdylgV+ylU{C&OFMuB&-D?aKujq^aT61Sdi&>lMh+(Vu zBG^}t{#gUTI)HWPp4d<%aiQ?pv6e6`#i|{-iW=1h)EXtyhY;$bMkZLUjb$xyc5ZTH z|9%$!qxxU*;oT#N_n7j~!MxTD+Iv0UT+0ur&rv=LpXcgtXSh;Z8aVM~MBkOm`w&UH ziqmgcO1)MtH+?<@h?`;essE>Lg8F~rsq*7}y^89dtDPXO#6F|?Tl`yBc@h%f2g1TZ9f`i?Z22{RiEf!Arqop6mujF|2f;kMaYE|CqGiw$BtDq zng0Mib%)e@(ZEVli(Z;u2%V!UQP&}RUxV`<^|7qA9@g;e4OZtw4;M8o-YPDrWlPU( zclQOJVKzT)+uTvN!;aYwd(L*aV{W@WYY*5ncCUNd-DwAyc{ik*E@2XY)$x$k*>&w z>XtUY1U3bpX3kc0oLiQmp)Pz1v7l*j)W~E1slD?(I_z;F^arXg{Sy15{r3y(PmkYJ zKL5GmqkH-gYd)`9Nnf)@yhq%+stc6g51)fIe4$SuVP>j@-cVT_-|Bo(_jT$f6w`ZmpvyV0s73UR zvifUVxh?1S+M|Kv_NaToJ#H`A6ZWz_;f}lAb{tK=;K$;AJA(If5H|9s+;aAaMYhwl z4kp|EHZE{?V1(?D)&TmyL1$uC3o(j|`oA9i!-s6*w@-e!nD0xaPg^-<#iR{vdlxYz z+G0i|5%*U;d{E~RiiuK>9X17DRC$51!Lx7}xf$Q9_V4r5C5i zLA8A8)ZDA?yXq@fl0Ux2)u#4OHcs`=)PGoWxb>*6`A{?m2`c4>`0$sYZfEpR(C_JVs^16xe~klzQi z24sWShw+0LgJr>U@(;@`*P@b+HDK8ur7xH~zwjfXx2IVo{1U$31z$6gI!NU=iOKOg zv51-IpZOob{0|=!!}!o2!dduN^nU{Vt8e``A1gn;w;^>GXX@a02J4fRTO3TBd6>KW z^D&;^BxW|bqAl5d+)7;a!odJTzzG8&7d_~C6lajnN$qe^UmvZWFX|_#>7y?wSf{9% zDz(u5Y)y@vcuZBN)%Md-uI>vxT=I;3o?o^6tg7zrw;ypQ-3RU^ch<`b?lczZ4R(W5 z?7%Of?dR}7kGM_j3v1XjmSpS&lX+Ep@o=5Zh*kGzw@_?|xP-srlOShc{!M13qmYk+frcwEB76$EcjFfaD+=V0v5Ui{DB ztqEOy?%p!hPhR^^l!|GDSvY~WLS%YEcd*n3!`Gxn@|)9tepc%sMcLH8_s!9lzo)&TqQT>R3h z*q{lVlSi-*2hYaxMZNxg%v$rm_m9i02RQ=8Njttb$qKHlgfE)PeX0MHSP;BQ>iOav z;Q75HRxtPd{P%eoVnNJ*#ez5oD=!vy3-g~i(7)J!?Z3;I|FOS0`T5UP=k80XezMCx z>7ROKAM011MKx6Iz8L2UZmeSAOXE2sa&6Sxs7EtF_yUj6=N{a9$rDz?_mSeaFwYsCXbxqUvaj6t1okZ05(qb&-k~*HOL>6Bc9=!of>4>r{yzHE?mo{ zZS2+0-mr6l^X_dsXRq1&cHEtDvPn-e8d?K)qyJ6p#VgVOJoG=4U3wBb_z1kEoA{pr zw$^-nh_irfP*DHmX@YqIAHVBxW`aeJPlR`#dM{z7+{YR0PV}$b4E4Pc%Q*)x!UoMp z|LVz+{h2Ht)eQa1{tx@N8ZGjVAwwoSG*K7=zxi18$$eR?pXxH#`<{wBz-zABq}J5Q zO8@!cK@4A>K%G;ni`fQWGd*e9;N_(r#MdRL2UYo6a0KWF%czw;*36ZqKUcO#XFK_v z!MGmz9O8P7so83deWMYlKAYsa{y5KF@%~tscX1gP(Ie7L+cm>|bK!gU zu{)3EKXxbFd+r&n0iHd=9(_Ol&?fd_`9kxtO0(F9C%Su`k4Z2R%n1++jl?GnpMeb`FYNbV z*&li`i9-ba&x{%^>J=TeppAZ0@frWQ>f`%DtDow6t$HOIl4IB0l>YI3nE&Hl{&f`$ z{c}d7=8v;F7#sMWh3V5Qh5qIHRPgz7^_mxXx*mRydVbk^RX2+Mecd8`8D9TE|CXG> z0CEb$s2dv2{yti@iNX3T>J@r$((U;EB)Hb&tliS~_ReSTxbNHrdoS>ropSHHWA=va z#|Ftqy3Y>V?fkYH{V%`|nrYijevr)7{>v9)59q~NOnJ+0pU-#2*447e z$?=@QJZH1c!K!Cu{!@Fsk@=7Q{rso*!*jI-b7H~yKb}~S?2qQZ>!2om%Er5$(Hz_aG;9d*J1yqfAMB=#-RrOC;Rg={bPeCm2fLZKwyH z`5&}D8U3i7yBxl!`hMkmYW@f9&uiWBeXetj>6Me;Lv22FvGQ+;X=8ta^@*yPnB{Fm zlNbBDgpnyudqMPo7^? zy&c8dtolmozf*mUa&Z4GoU#9wQ@kJhQw{r1Un(^V!W>Y)vv3)_{b&EB?=4t6ir-)J zITzpU&%%3&s_ka~-D%T^%Z;pZ4G7ioua5SYsXD7-w zrm+OMfP%v5vT)+gijSArQkz<%d=|EV7zBBF^_$UmN&KH&JUOtC5#(ORL{>;$mmFGaI_D3rRi4Za97JR zHk|Vp{wMkmBQ8Wey2Xr6A}>^szSKyc3-;%)pZlMW6CW-7rIupI(UXGlN$r;t`D@FLM+6A509w$3eaS zAFP$|{wJ%YAAgy5Sy`8GSALHJq+05%Thd&XVVuEF44__dx@&O!I+tZ6`lq)^aX6j3 z6l)XTYWm)mE`DkXJlVwEIRAzXy?FlmhPt;Yhu%CSjFdn1IR5QxQP`ki#6CZ7^hQ6I zvZ$zq&Lh?d2CDpFYBhw9ga1!W4S6Hsy5-zmQu%F<1tI(?V$Z&IsyOiFhPm$Kba3_|HK3KFUYR|HR)R z2C5jeugmJ^Hdwj)n!1=(#219hV>CS zEXK<0ZbH3#nuXj<{{5%;k9twhsP=sCYkU7vFY5FU*HvirZvU5R9O>k;PNODa1-)7L zVP5}ttLFqf)NOgOmx{j?%ZR^~^*Kk?ZTdZcGk|(kwFi_u)Wl_*ozI#byn&qIRyQ)R z#irt;_jz%W6}`O%F`(<&>xZxpXbi}+(Ld0Jc(pBiu50?)cF zfkSwf*d4_kd@caLllbRE?EV;HKgt6r_HZNmSDlJt4Vm#z&c0s%#DuKr3jpH4D(Vp7RSc`-sT7Acn^MiGvp%bDl>eg7V|G3FH!DEsBiGM2o z4>k(>?w+2Tdlmds6aSJoZ#=&p7>L=IIKB~MBgn=^Avhc@+byD z{J#i35cQkXjjMJ!(+2rEp9~vRba!1BJv`o}-_e*{;Z`4)nSiePyfV!d*;L*4?kU$p zU$C$5QoNNu4o824|9QpdV_l8sy14R-Yq_;wJj$+m(AymOJIi$DB?mJbnaTX0;Qb!X zz1W=ryi4^d!I}v9J*rh);dU60UrB=QB*9%;kdm0hb#LwA459^$)uJC&LXTF^3 z3Q#){wgB#5@6bPT=DkGaKYKd! zz`XFp>ACyS8%GToedvn+tyPVl)&N+{;;Hw&T8aTF23Oo;=J@;zHO%?Ia-nY=tfPAJ zgRJ=ehAwUbzSGcH>v&>}8^MWb3KqP>(?hMm=F0S|s-Hl0)zq{r=1u>YddSqvM18f@ zeWjP>Ax=5&)PjY?Unq#;8c&7~xY@h~+nv~$& z_w!$8F6wnv8>$*z>-OCOUn6?eCsVEFQ=P5w=IZ!7b*$;hfz*{vbcJuPM$8MpV`XMt zG2%h#F~n1-_YMSA90wb^LUaY>)5VtFWszIp64D{FyqqU=0fXCv|YX{$vb( z|0vahl7nGAXkX^cyR+8Z+QNnVTaVbG@s-H!d=#O)|B7s$J3W$`7}bc;_vvkr>L=AR zCrn$gih?y)#DVgXhf%%0j|CmBOC0nvSMur0T#n_19b@2x6A*TNxJ#Ou&sBcDBfSMZ zsI%_j>ZsoC4Pryo9W@{}t^8*#a+6Ub<6Xx+{fRF>?ry`z%=P)kZQj=z@%cKJG>W+8 z_?#~3wtT+MH0I_+SNF*-uIIVMuG_i!?&=SwQ;RjiH9XwgRovE^T9^i|^p=LM67^y& zULEW@pO>FIhhCW(-rwrLIj|kl?9G8LX<8l^b{oAIi_pUy)nM^l*hKWjfYT+OdKXSE zQg}qvV7-mc-}Y}QKI4x!KD{XvWckTq6SJOI{y$=+YLc))^ejYEv#okP;^fp&qJMhl z=#LZ5sp`uNOfp|{sJ@AU!XqOWBkV8X?&Y~N-6hS*XUVF2+uIb(2;tL^6BAw!c^Tz@ z$bkx~703wV=y64P3*~tl1&xYXI>XaP2+DYhUV3ZwRsIn_^u7V$aP_4&ux) zP5qfZ4yFDz`nRp-;j4p~T+_iL0tZKUP#HZj8MWxl|C^%ldBVTO?$7SNsfRGo|CvYM zEJZ_yggwmn1~~r(h{MwFpMySU;)3`=It#0oKAzq~`ESBpRW2a2{tBEyD{!Eu6$Sq= zXoonDk&74RVL5vHRM%Nq{oJn-n|K5Lzb>pE^1^TSP@K-{Pzyjj%5tqJWudH_8&1!* ziGi)uIo##O2JW_2`){zcRV7`uQ`e}5&d0e+A8BD}>q}YWNODxv<3!#{zHUM`i@S|F zhgJA%o9Ua}T+qd@B*r`wylL``Al$OQl%}3+3iXte@O{Tx8{#3Y>DyL6XZoWpS%cKx zQuh|@1)%ndyjQUPEm((6taBIZy5v8j_@6!{&&a&>@o!&NZ&Vb1m|}s#WeBbT#(}d~ z41Q1|XUAl05WR}Ne=gS()R==IMgI`B5Y#-Y76MEcoyp4hetLQ-(KI9+}qgW4pjgT zL|8Z;$LD#lGl)MG-d`8IB6?|_u0!uqb!t&7QJ?T$XA5!@V6?c3PhBp|KWabe#q&LR8TFs|{q$zP9eY!}@ZtaQ$G+G0 zN9P}1U@$({50NXA0ugJlKb!D}?_eG1EO0-20kwPJ`1<&vYJspr!tHWt^wE(MCLgbQ z6z#>-KNFWI0p6F!f%g>l^BoL+gV4a7lna|XJEVcBC zA0|;trW*Skj|qbqEZjX6eD9nv27_ZjZU%f>#YeR#q^vG(<+rwUH+;R$2D#hqhObv? z9axz|&9Nz0lD7emZv1`RNpD1mf1^wj6T`xvGzKuofo=TRZYR?LQjl`;>)Oa0O?**2DsJ z{va=^+E*hM=7X^ViS4@$92R{bB4joKvVsl{Pk{<)p$Q66G zk;}8Qk}I&blI!v5LSGNnFR;NiIn>YPSW%2Ug1r6l%U#){t-Rkg(tc3t~YNdy>rwVi|(1N*%CtPkn|SE{fIb^~ zBGsqqdxP=!RZ~xWF?N3h_(UGNh8X!k>JjJ{CNEW&nvKfG+Pj3Q;DiqeyO3o-$nHry zC;#I%|Ca{xolnn(P1rG^YQc#`Z_c-&;?t$KHTtpIzN-R7*H%+)nD>jsHxav?xG0K{xI6M0oFR0#| z9v>x8(E{6@SV7VVF@3Jk=Z`6BIJKfAWzB|coWZri;J;Aci$Zt8fi>+#iM&QEK7&D!;xr3R2~N#EMs((WoneQyJ>@@jjWX|SDzm&cw{ z37Z49v-lXm|MwUM#7N@rCZ|6z)Josg(Dx>*S5y5v#Jr8TtB?Jumz5Mc%mmbnTj|7APmOzfL3OZA{`MK`?+o0APadk2b79eELl?w&+jB8Ct=JrRGU_pe zA19cjr@m78rBrYOVi%{lLdz<->%Lq`{CA_~wCi?$o=cri9o_9ku}ckIp?$T$Jj&;L z?ew1O18ZHEkLO}@u63wu1EVRrI*2V3Fcy;oneyMDKji-q3H9^YK#N z4rUXcGj;xP59A|XMP26&F|PLEYh6cTJoL?8^mkNiAj~Y~y=8YAoe@Uk^}c3++{F** ze*c^g*8S<2{@>B_ul?=Ok6#QaGPUG%&gAM}4v3>m_(vWWiTatC?bHadCsR{Kog6Vb zVnjKgEN#)Vl3b2S1?)<4f2s>t9bmI(Z*(#9b9xNv!bj;lT9MC6-d@joeziopw@&X( zwL;4)JMtM8J3QI4jY;#ii+T(3EKu|7ZH@PFw8#26PfT2VFhQOL&jI7IQZpG%J-KQ- zD?fTUxFD01^8qJ^J(u1R)fv<4KKq2}S8 zu~y-M7A}5u9?QF*+Fktgh_SI&`t}Can_h{Y=NDU%HPtQaRB(c(gA;IbjCe}OH&;=< zfxKrW=6iYa56JFxauH>ucYNXEaQ(njB|aqfBru#*S0cP7&P~#PTj8MKYmO8qkjG_G zZ>{x!<$=U-ik*fo0F##&gELhW`*mvvUM?;GLF>0s_59)wUwpL|ylmkYiSa3Eat zWa_>9MLPA0mAb2ei(i`Na_@)RlZ5 z4h*Ll;#2e%`I^G4#0@=0)~F~~@sT$8`s2_&F>dnzs==eTTs2|7Hc7RqU`)N=_3cq} z=YF*D4`Z18)B61*pI2vYy<+4X?urDDHhfJ|AaZ;~tyz3DD-V}29fSHwVUHRt{uJ4#yG-tsPu z99!C+bmlr(HE>Vm#J55?cf+fLeFLY-^Rg)(CER#8nEadvQ;wJ|G4p$5BU3DlzB$D< zbQslvyce!cpurn`!My1Ce802Pu0Qv~XTMuJ_(yc~pMDSPAP=@^PnJ<( zU#Bc8_GX8#CcE^VEdt?-5&~iLkH_7bOpjy}iJgR9te(xcR|NPoM8 zuT&h}mbADPY1Dwz(*XZk{IXp5FmOrHKdoAK)!gZfmyC@OE|y|X;?mLij~t?6f{IJ2 zjuZSo^|PS&yE1wk*{9%_bm1&QhO-=Ygd296OV9#>loT1h8?0c=K@5_33 zE*Gy_YT`%Au9-p<*=^MWz{{4K1 zw{ID!I;elWxBsvG{)wHB9CT)G-S{b~+rs9NN27K)g1!>sMlNh6b#(KRUD~n|7CSZA zYa9D;ki*gIlD-b{*0DZZ>>asH5)VdM9Ix>c+d`cnb!wXDUgzSqQ(d0sJNT5|&dAm< zzLCOm-AwKXoYshS^pk>*s5;vkM>;FE6KMSQK%?I8&025uT(SPM2P-}Q%}Md;{GWNG z&#qh|%ixfs9?Jsk;81X-axN?qsB^fRtNz557Bd;Vg^fw7IYWoO_L%cSCjKPnY1wi7 z#;mH#7Y-%j@eVV1Ha#vV*p=SSsDE1hyQ*6zPwH!D*Mk==JOS146F(1~pEZzeR&H1S zWFK%32Yg=t^bPB4zS*PIySlUI*0y~HS`tVj*THNf!@vIiLC|0gt`HbAwcg?1e^`@ES||SGLsZQ)~|$=Z7{cCvOKm)F{^I*y-=FW`TZhE=_kZHyoZF)t ziQfD9Q*SlZxy#CMc@$=00BszEL^NXK@=JsU1 zhtHpo`TWxB`IqOJZ~3_%#$R%e<1bzsT{Ng3^`X$d3|9|lO()<0H zPA=8YCC~qmo-ZAvUwQs3bDKGEaojJR56qc8ng4O=Tw=bR&V2pSxyQP@IC#v}ix)B8 zUHk$*{^E13-^@wrpJ#j-A9?W$3g~&pht}8g46W#C#s~S2%(&8^tq5LS0sofZACC_{ z*KKCJ-G4*I+x?~bZ}o5U*W#R##sVdnuRqFCkbnQ<5AA^xop;1zD_gF!zG7U_hnbNCTuUqVK7ONQcs& zbSJ%Od^86&X1Z3*Fl&p4UAyk(3Zw(l z3F(YmGD3x+mS+-+AcorSAkppRF+|gJ^y>~5|Lh}-KhS=Z11XNwKs0~#U78~rH|ayV&^3-gMj@k-F(Nhi7%U6-zJT!#4PA;rVzNAyp4B5GC6cXfZlAZlAscs=0twIeMMwK3%!^XqU(mBI+8lZU!N;M^_>Zk+Mh{@>l1N)}+>Erv0hO zbIqa7NFPLd$KWh6AtS@u#@-RLG53d>AIc#MlTP`0^&+S@Tzo#NK}~(6tcBmq{K>#b z6;_hwQsT;d!QKEclXHVzsvZG)NP>Su%|!}z#L}5~m$Fe)>9G>&c?ixc^rX5XKc~>s zovEL*t{=@37b5*=O$|h}fAm148;x^SqzICXL?eI2{`~9yRf^A%UDM~cLpo>49yTC) zOpe{;a=(YiKAQEF6BDi~0%Txzp1b?o#h9 z1FuWmdeW1hPtsS^ zyzI}1l#7s#wBO6-v_={rm62jd3Zl8Ab@EsA!=L%TlaHV^nu-)g$|2RmYsK`A-;nPm zYLx=idjuHcK$?2Ds3prwy?ow%Rp1$~LH|%KU)!o)#)5ll1(-jYGoEvU`jDWVMo-~G z!Nzz9-0UL_1L`{!#ymI#!ha4FI>6^p7pt0N>S6<6@l&ftO)`BN;74fv1%##OvG2TX zPYv4fEvfH@w#q6U)kdTjjd6ZNYeKq-K>o_!&YxX;=pla)z20 z^aAe{+yQyi)5e(RdrG*zVBB$U^pk)w*wFX&sK>C_{)QGIo^1Lcz5N+XU$*-4=n2l8 zQ$?Su@A;F}{~&H#VFbYW<@bb_2W25|B z3V@UIX+;0T@vNe}TzgI=5s}@{ywSb=UH$M8{xiba1!H1v%y~I>^9=ShkSfeSt}*Xk zYVE*1E1c2iR21y962e|QN^b!86Qz%-N28T1b*Py|jv&tlZ-vLpqi>YnQ77?s8!mbE zj-|f{ANeu3nBhO=Z`H%^`=+SL2HQ)u?(hVGYpuSXJbS9S+)q@ZCJcTD`rne!Q^Jly z)ClCswBMRb=fiJ`xg)eqXdhOA^z&EOlXUURkI*b3v4c|^WPiNmYw)B6G)$!0|q`&20mi?(YD}2!?#F%l;@lq6$Q2w{Z?MYI~3t^ zEGlf3!AY+4VtabWuJE{`;)3>kz4XGs;m#UlUeSABn7%)_EM0-8YOwCAxLl7{fa8rl zkUB50yTFiAO$GZKIESG_)Vm(`RcP1np`5<{as9-P$Xzbyp3*O*(FX!XuzD1Hp9olC zPJHgA;BznKIeuHJpGsK4;H7qO;sC1*K71885o*5P#d0p9hj#>gy}}(52EOnYCHx*X z5?u|;YUK~N5w^Cg20yTH$11^JSP4F>iZ8(13?5CH=jqcr2G;_8*>D}gH-(*|c3=24 zs_zt*Yffx9d!6TMiCUVh8c~ny1LR*K)U-{dQuso4rsSlT1MK8;b z+II^c5EnY!tViL5#GV(w$Bmxqiy~|RbQFsH&b73-$EFsyaj+-3o2zxQt1!GgcDOhTDuL^Tp5ST>+Ncur zK&j7D+*!hcRL@_|oh6;eMq!WCK9C_g;~WgB78>(+6_olw*(<37|6cu8MZjGxPCp8J zk@^wgQg7quePuYMtDop()lb124E|CbIKRPJG;oH5bqUXaun=#QShEj?xZEpC2XU_# zP%pQTo6!~KiWerv`=_ncI3aje>K?Ez7V$N#exTG2n)mW zh?itfQs1XAImNdi9C(jK{#rNBccebE2H-KM?}pwd&%YqPXkoR9gQV%(gIx0b{4RVk z`dChl4cP1w&yzx*eB@Ge22N}k*mUrSy1XmP!8fhC?ta4909T-o1v$Ta2nX8FSNOC& z*QE9W^)sr66hDeSy*e(>BNcvGKlom(vzOAxR8ZXPPd|>rGo8Ap!i<6kq?;hen|dhI z(G7in0r7Ikz6h(DI&|SB2gLar#0eQ7+^#?~dNqU}NZ*F_fdQ8_ zQ03*TJr7a(^KG$*tpX*ni|WzJ`*3Ay#l1h8X@7#g=|CStU<|U1J@nS0KfRx|e6D+S zI2_(#4-FKjzp;$>VcL2uQE?HApSmVke&U_4_ty2U(Ob+HFas|WrXRgqEyOiWKaqNh z+QQLSeP2fxaTEI$YsquP!?U9vT0}p2Eu(G@>}}6SNUdZfHFTk)BQ4j0;=WHnSb@SL zhr8T01e*f>U3wzv4P(vKJkiasIqj9{;JlYRhVO)*k!NcKYL7#-UVpy6GS(aG?5(P^ zswsZ+haZoBvOm1YfjUd!C=Y-y6OeASXNx1ds_^B(a;S5vN6_wajg3!h9f_kEZfws> z4o`59O9ou^ajw?W*SLsL*kfV+QirHoH_rni{73ldyns8T8bx6OM{l9dQ1w_~Ge;~- zu&lQvx@K<;@_nPNK7eDK97ki@ZsIKj*ZXFAt%msd3eE|98-0cKApUjD zBm97?Jnwm&@YVW@+vb<&kMxDE-UIWc#vf7+Zz_7I?pXS?FO+_^se@zM+rCS50|txd zKM?1fx4X^3XB2mQklz?gu201+4c{Vse+{3%4s4VJ7qb&iNqCfmi>J7kVmabRK=jl9 zP93qww^vNf$1BiT$WYYynz!Hlyj!7!n>G$5YycJGh3q{Y&M@EQvS)T;qzn#XJ592ZE2 z>pXc^@b?UE^ML1Od$^#^P~a`a1scNBE$(3YwBa?L6aXige$~<9Sob{~U_=E9tgUSM z*Ho|)4>qvWMa2RU_~Gd7pBlVD*u+AB>e>AJ{UJrZ%q8X#8u(VNnTXIH8|1-p5J+%SNrPoGlY`} zcGVjO!P}hYu{roR)$uLx^Sv#m&%oOod>Ip;lyt*5I@uZcs>SC8Z|^j5 zRlCmMK?##c9Iox(8Ry~`=YqcvJO|y~!(Ok1gY>bnMq zd%3GVoa%(}F3#mH@c;6ed_KJF;2gDiZ=}c9jt4ghUtIn`rhnX7xf9A4X+8aG4ulSAeZ-gsQUwb%bgC^|V z!n|(tAzWMZrh-XLf4q2grq3Aa3F${G~V~{cA}5H z)A{LvYrdYTwE(XCGVxsmI-DJExo4NOQkxrC&Bw2{_%*o$!h|YBOi>u&g$~vW5X-Rw zPgJwqE6Uil=jMn{J0OlEj}v!ciMWIV;u7xhy|CgISm!Th1+qLc#M<%<@;}k3&C-#s1=BUJr^WXtJ0$*faSdf~zFumBm_O1_`(IQJ zFOGWqwwo2})0q=qZ_OQi!0WB)S#b90{}r#U#{p+uiO*QN5jI?@JL|iMTVpJKc`lc_ zqm0Y7ChR(rEMtXnjITJe{E^b7jX1|6BRcy*%f`HuB!;AWyP1K!V1-S@Rx9*CbyxOaOIPfP2Cl%iYF6XTuCC-hu!wly@Bnzl;0uYbA;_sJ%v|wEVy}N# z?#e&d!X+)BA8k>p%f17wE-+P+!P*h0wlLx4cMF3dasxeQT4#y}C}u+ctzvLKW;q(0 z9>i_>HT@{}`HPP+XXY>0`L4#PuGr-uM;K@30OuXyMS)Wr^#9na0-e5?Ztz!F?5b4H zhe|BU+g`X(t>Eg4*7!i*K(k|mtkBvjR`jtt20sRJWk5J^1-4eRTKBiJ4*LfM3M@;v zs&_R9Yj1;%3EX8P19t|*sW1dykwM^U_Y15ITqpituq3qhuKRICp!0{*E&s|27QZQv z<$&iDe!IX=ye{-G-42EnymtSOy7K_D`RdyK^lk=&G1`pYdp9~k^cqABDI!YrZgiqY zh~6U6iRgroB8h|`ks=b2E?v6dob~oqveyXxnc&9yn z-zm%E4PQb;tTRy%oA{D5i68kqB-R1u~UCkIg4%|g6l~&pMpk%86g%B ztThJLIQ9N~`j9`K>mQ$oZ#F(-KYnDT{Bo)>R~w(5xCX>8))YNiJ_^$q7nxd*loUpX8C(n}=sMW__ z{rmA*e$(;!Wd2I^MgCst%HqNm2N?Dhw)0qPabXlSe{-Rq8jt0xy3wle%#LKbP#6TXJFq}UCHO@{b5)0a0#!ux{`2= z`gqhgn`+z+c3j538V;)G>1tT1e#}+s$6Q{59a_l6{gs#O;>`F>@V}{kt$4dFbaJ#6 z-crL;Xj=^n8^{?(eTK}`Lni+)eQdN(`{&Qfn~hKEC-WC*ZXw5f>AA(_Z3m#N@=uty-v+sL4>nE1oLxahIa*Z~4=$y^1$zFJrtt)z94J zi5{HMJNctEo^@0=Qf<2}-lMQh9;MFOE3B%c?zP9fhnXPN!FE92aEGmTETTpYzVTtgodBX?AcoOCp^uT3Ej5gd8H6o)o zfcizj(iMleI+|WzJvH~-?Lq$WnQ^o68TaXeNv@_Pz8(3~8{#u)43}2xi{q@=lXYGF zqUha@x8HFnfI)EB1D#jI4P2d4#YxM;yG9*&5B0#@Iam`PJ$1S)!|1G@qSMOSk_+2e zO|RQN&nb`UpdFw#pz08*7R6={yyW&gC)PpM+b)|zErcrPtTE+027wEKca{3y)L7wM51tf7{b|m6Y%*~u!GGroCXSnCZ(KKj zg#WtXHSV)V`@r!kA2@ptwRKhB>C0iB2JiNzPCR-Ad!MjQV41MPi#U#z+|*Cc3+|$z zc$8oD*K8V=}@ZU*UNEKs)k?qgV9!SVsTq_Uezl<@VrW$6xB+3(ayls{-*8r zoN)CkweEcN%657tQmaY(^@FUl`*oJFLbb-U58druWKG^2=!spB!&e^#jy-%w#6{r3 zWL;@}X%B*@*l|;bPWHtkT}?9S(z3_=^_cwgr{)a@hZo0xwy=d8AM~Dj?9HnG*7Cd2 zp5oi;S@2S7&xprn2Rsq@aI!vK)Y;&Qq2zD?)>b~fr9TCNdEw&UYNp7-nvs#tx-4EoTG(;?~`s@CUvMr^s}kY|ra=h_%5Jq(8T zOtnmOmihJ|*|5~nW4+aWxhFh1)RulKkJG2cbE8`FzC9Y7buQxrcY5d)U#wRAmBCXD zQ8=>UMAhEoYPH}OA=XLE$5(?~_KAGc*e1@0*6G(7*7B247BMK!({s%|_N(WzU9gL$ zx?HbP7wQ@Iq;3A1XsTB|!(R_=C~K@g^GEiF>XB+~_23-iocFZ`j!HHTDpk@zFE*By4m;cL>?SMPugt6p9me6#hn_S@YdjL$}R z*3-wQ72}hj@!60?{$p`jUmG9zpxoYk6rNqir?~cJYS~o6kFWT${6^a6;SO?j3Yw#T zi_Z^Vh;_d@-|8H_$CGz>UfccV9{b|Ai|j&QP&ey6H$JLcqkVcIJo?kAT`(S z+VQqCKCVs{x?=aA9`Pj3Eo3ok*n{BI6Mv6eU)c2U()-5;zsC$>+3-`RkB`=uj~ASE z7J3!`m~e`Jc~v^w`2k|WS2Ta9hv8~rWI!i|gWv}9hw&lqta^KC^XK~UQ7pBd_IZsD zK77^p(fHs4R9z+Od~v2HZd8J0>XX?zuI^$detF-Hdf%hI>KkZ?s_Xe2_0O-(pJ9KP zKh)FUJX;2jdJ9j6$8)V7r4MY&sP!lhuE{~Fsl}i zYH_l@&dP@CVHJ$z99MZ=H#dos_?d>p#3IcduWD4Q9^hj1#M$1RUe$wAO%~Op?(JQP zy-Gc5rz0+MHfxRNx_D#PC&3?9z{N=d#)NvCeKNxRPR3cpK+tLNNqdQ-dg5m$vtJZa z%^NSc4qsdY8#T0l__V(qnCt%7;Dh_`L7)4z+_Nn#XljJVos%2zKVjP_ekJ`!IMqZj zyTT-?mWR`Sj{EA#71&eVimtBi>33nFP5NOgbye!PeMq(n{H@q3Bk}2{8a_5+LBu?M zfD3GMecSZyv-Xttm}diL`$}vM)yq}AEbTqRY@M%G6Z(&@Rx~~j>@Vqvt=}E(iC&z; z>4!1shj0RTntn3OYP{Oj!c>P+`VZ%O@Yrz6I5mgm-B8g29t1DtKi^qf-$V|Ku65lI z{N>XpzTcaZ`adUgtte^1^J6>_vW2NR;OfrcuLJk(c*=bGa|QNjFbv?OiV&wS@=|?Q zGvR@6mr{Riy-m2h)oSk`?)rKs_M!gREAq2p?|wDXooA}?Q~v|FKG(NmY>wL#-Xk83 z%|gaTbsi>TfsEpN2C-XHfx}19L|{ zvt`a-=IWa=cU0fB`{ntr)=?wsTx4C$7|qRM#kSP(wES|k<6;a|+y_6RVm{KRgQz3o z_8rADz$7Y8$k~mGyU{xg#oOHrVdFxUyoV^Vp#`wh`Z=r3q zJa@e?)T7!gk9zle=6UyeXL)yd#{KYwr_!26p3I{Yy)9oG2xt5{>a9?V#g=<}F^bea zL#V+5|0-+D+vW0HPlxXnuN~!S_uT|yxx{T}=c48?=N7zW_@TX=?f9U@{m$474f9fS z#S5SCXT>L%5bph!uDBtYTA^otkL}`h^@UX13GN}SG37vH03RCvG;>I`Erm;@rcgfY zFySSOyj0gROw8&Lhh}i^P%E&bx>Y;ZjWbO+A!4v#QdB?Xw$I^bo{-hLzcLbAbf2j{ z{Z#6AjQx47<$V}j^ZfjlVG3NS4}@CPy?0pK_s3&v4f51@p{o@qCL%vv^1`xKdRrq; zi;qTHCt`?q{4hm(8*%PbI5eB$cSaY)7L$KWby27X>hQAQi(NdGxbh6RlK(b#BW)13 zzrH<^IW#vE{vL5yg`tN=tYaUNU4#A=3%93uh21_){FB-Ws{00(lsXS!!HZJsB;THD zR`_6Thl^3XsOni^sk%~UhFUZDgX(WQ0{o!D`xg;B#KbO5o^VQ?;|5+|8RzroE2dk{V#%Bnoqp1ppu>i0PeL*vhf zSb+`Iu;0V|<3l`kG(P%aobl8wfwS|ay7TG_PydguwoBV32Mh{&P4=&N1>s2|Mxgp& z32@`(WPGSiMP82hI>mqP&N6V@`Ck%75q%na)!{dVf5xUSxVxq&X;oRvzon{+0T3hc zlz6t0#f`{ny+3=Hx>akf?{|wmc~+GI!_x*`ikcT-B+xxAX*c;B+o}Dtube060dYW! zd%L*fOpIEe!xJzp)G8llj&T-B4^^$h#+(CSJ1p&%78nI8*h1 zG%(kFsNURqje{pg{uWB?R=6(55lrnI)o>Rs#pUW?%TqfFUs+l7MOUlBVI-9!Pz;=M zarDOQOAA@b(;YnbeY4Ptudi#RUTf}rMA)*#{7TyW7Z*DJMXNW4;lHn7rB62pd(_0? z!NE&79bNU1h)t9CQqHYw)uD)xI?6?!p+{Tht)@%o;`^(8%ZkKC=gR^I!5S?VdcwwkBpvBuy9TY2*zsNpHS zwV|i?)fN1Gm8a64*4_fo)KDE9;hH%U>w5Fy9{_XB_rha+sGL_EvoWi3c#3YQ<56w0 z&cDs_-g#+;Y!??}Y4*hkuWECE^Mj`v>=ZH1DsOl4hL6nPRqQKfaO}3@AHDW(V|&vE zYUk@aV{6Z=J0#=m+%M%{SH)9udjoIyFx7m>;{0`S4Uq^(u;EL zfv0#;LF@X>T)X$`GEar=EiCcz;#T5~CYJX=iYM>#^45)5#J$+$s>fM)eN9h+Bh=_% zpDzeDAKx4MT2fc5gOB<9n}lL^j$VQ=&7!tc1Uyrm7G>rG_!DNvS;CA0*7|E|se+qQU0cO=RnriTdB#Wl z@?aD36>DtDzjMbsvoEZweEQQjmACUhcFlNqY2kpe;opd(QRlsMM%k_6*i?)KzIO5d zTE?yUJlUq@x1K-aBSx=N4YRn1b6~5bSWbBNli=2tU*euCORdWOJ1o!qQdV(CE6cPX z54uzp?3T*-w&Bah{||37_$g`*VSh^Ricy`{)zoe16M+rU&DHyD{uTAMuwBFfub7?u z!;X8OoCdJAXQq6<z6!++paUBO6l1VgCvTNfA{Jglo~QU=2u~GgXTtCd3-R;57t~Z%QP>K<#@Cx?T>aG>tt1f zu?@5=+Y5VgJYN<+aSjXX6J=$$q1!CZ<+#;zu!eHLy-v*xYB!a1XLnZCs`6NwGZsrd z57oE9cdEK`J|6YSkyhnMdutBvQ5@>R2~e|yHFcjC-`thf=LbIi#5cQ?gZsaJJ$Y(d zX!L-XQNh!qeuTIGCu$v7=0#w-=EbcSPaBu28 z!}~5ST9^O6)#vvV&O$LN#a`oflgOp1D!t_Rqw*(Z~k%K$^XQdeeU@t zB4t;ro&giWzNW4OT+*4n!3#53=0}q)8?{qH7sLwpjBSg5WG8rMVV<|=@kDQ+KA`@O zU(&}1kju}D4+ntei}2$3c7^Sczun>JsIwWmJflTSj*^DO^wELaQy#r`?&#NERv~@0%mC|oUZU6$Oqt)9OQ<&+-&!M z#r43`dsQO?|2p-}h|z2STPO}#}XJ1^Woa+B?uMaML8hZDt zd&=Sqm>MuT^bLHUFTuZj(Q#a_&5C}&7$BjHNs-O9?Dh`_Se2JLT8?EUENpu0FVw&A z3bPyfFnHaEVtxr48~GvMHM7U+o;Ssr{{J{w+fHo@-hOI(mR+y!j7ynSy=}nIpceuk ziu?}U;OBtU(9gj4E@=Ao@G*_Q8j{-Oo5{nwemUv>n%i5or_S$C=E|JxqjC((Jv!-* z#1T15?tEj{O=EcfKaS0f+Whb{^P(R)Jijc`;E{v#iavgJ%T06C<{X^+e|8r6s28D9 zq!WJL(pvUThu`eH>s7dc1F~`Md7yz|)%$eWGi^Lx-_w9pZ1}7G=d})$xc2-=uXdzUP^N*=MeMzAf!N zf#!MKllEC7E|m5>mDqiH`}efJ)*kp`(%Xh#_L9F}NplNddwzewwddeIFZ$mTH#qd# zb9{E`uM^up?|)A?kN@)dI~{*Wf6w_|p7iI$5YwMOlyL2JxHZyW$A^;s9G^$}^H&>Q zdrrO6^w-I&Nq>&bn*Mx6lWWhx9;Lk=N9;DeU)+mp&!01$kiIJ4~&%cKq zr!n=>cz!kM5dXeZ%~OPT*G9%6fdR?<`#*MR578c@y;VL2ah_D)FC)k4Yk4 zFNy4f8%f&V^HYd#E+i3=4k!*5#qu&D8Yhj9##rO>zcD82v&LWj z)$gmX>Sqo_?ahxALW&_Jk+O*V2bGX2NQz%-@K_zGiRigR&-I$#Q_U}mJyk@?A*GSx zh^BP`BpFE?8;y(FqBf~*YNOivpSm>HG{(Be8h_mn-6Qo?{Zt>-=2}QSq!H2-X@Rsx z#OZMd(jMu6bVTmFf#`LK-lzAsL)suMk!Hy4$Zbd+MB}7!ErV!W3L?pf+NL(Dt!lH{ z{!gz!KB#%6HK^~@c&pF)&8mp{+89y$)L!+eD{>cdH*zm>Khhg{z%PAx?0cQ`yY9JO z*Wc4bpV8;2scYJl*`K8+>z5W1zXv9nl=nn$|f3vG^H%ylcLB;l_deBYa8LbAg3IC(|C?7xi1`gU(x>ljV^lBn}BfZuQch zsd3AKXbiLu)J7Ty6$$Sfvo6<%s>iBarflRi5<_$%`&%H{HQh_@53%6*_BeGYPc zSN|pA#*7>nX9eI?681&$bNCP)-YmCryxo|9HGtDhoRV4g6?J}S`Jd&7OX_U@4}pl)T%$eux1tn zmxp-vd>n<$1LgV>yUMe<9K2ED)M;YiRKc$_6ov(!z1oiRE19v(LmrRj1bl?7jZ&-& z=ELp+%ms2r#J?-fM)B=En&pXra)FJ|gtgy=BLC!`^RYi)8D`{e2e$T7cJVZDui^e< zzE-yaZ~=-FQ2c{M#Xm?tN|CEw`t=qLlU(BE#$XbIUH-0ec&`_YN#gQiCf>oar{Epr zGo??7_Y8aq`S5TKy17yCr8raC-y&cjxQ_!B@%snE&S< z{PS1h9!{#6?NIR_#On%wDeDz%`b)La_yuVzcq2F$g&QgZe`0wsMB|K@La-Y1HT0Gs}?yq)tPhR z6D-R<%RUL8U?$EBowdQr|JC}^KHD}}`slxXMRm!VEBmvhKF`4(P0kCLbGYDGukgq? zPB9;+VhhI!QW5-l<#)iNiHnFFD!2pT{<+I4ywcX;dqS0Cp*#Ze-d*lH&&7$CX-00V z`4M;pc$CQ71Ea-wfNO&*%yA-!3r{?6nqR`eX^#*lPQ0l($deS8O5C<&)jz+s&-M?! z#2D27cLpG|SX5}@k+KI>i(dP)?s<`8bscU>_%b+j9M_xp=p0wf88CR{my<&c?*~{# z@~xCZCd_*Hcyb2t<%huwD2@#$;s|6+#OIcGT}7++S#OskT7xl5VI0UM^6|JaC(6KC zskKpp`B3y&1M!u*xu89gTu96GIQ@rjD(#GMkNrc>2UHHs_)o_m$4ljg~<@l$>K?R<`3HSnPpMxo!4_#sUZ!=8?|&*zni(hIIzZ)=OV6@ zlFUQ!c8+f~eo0=|{~zYRU*AGITyZP?Z++_C3as}l!m5cow$usj>*Ao(-qr~ofbOhs z_$^((A0Qt^ynKV;g%U5{aBvaI0T^wu%5$BU!SSUDHz5q`HR1o{hKbifc^ZyG1rCgW zenFOUtc&9b6PH>8xcP)7t;0BIUDP-$zPYYekuw8sQt~oeS_$St^rS4m%elUOA7Bn# zsxhag^w+<2<$R&yT5$?%k5A*6b9|QUNiK(7Yn(hKVK^Is|4$R`VPSJG zDQO|Az{+hE7J$BjlStEB-QzZg5pcP=4l5?C05RggNfB25=@!=NVyZQV)1~PbL*3Xa z7f$(1b-;fszbWNRH-lRi{yXs!lJ9aIhtu_aPkYWB*!Fii-|mh3bA#Lbxd?rSL(ZMW zf9$)^NaYGVFHTaSorWdfl~mU&Jd3&g&5ef8%o zru94RkvVXcIZ*sxjX~}gs|+a&mnvMQRt9ckmy_tf@7mkd_XgVA+&%a4%Cv$vug$mP z9S53n%sRn0B@S2d1c_T*I4f660h?I)BTm4$XWB<@IJyhGa2C5S*+N%mGB`x6({Hof zcfmI&K0e1K*6hm>;IT#-x!4vzCASrMs+MJ)o8LkngjXNEI%GJy4>j%6c)Zg3ef=X= zt9%7Fz2<(rA{efP7fPIH1 z<8>$8F`X~XwnnG>S>)1qKffC`F*afX`WhVGPQ>vd{Vg*-g2}2YD)&ONv(#jyIh*)rr$dkAch4<)ea6cKmLw=zFV+-1G0~ zH}@QlE_m3cyL&Irv3opAE%Sn8OMI@3%eNP2ajxgeJA2OA{x4LpOdIooF)v|_-+0iv z{V>;hk~uHVJBji*#lzF-${ee7sGSAf4VUIP&Jp-aUEOc64`FlR=MZ-Qx$!PPBaLV3 zy4?8d$3XjF&AGMY54qu$@73C^N}|h`;f&XsC$EBio?KJ-Uc}W4zSiw?;m2gh7FqjmrdX{P@3I0Vs2cYfj<_8-3Vxo~K>Jb!USNDr+e-osBg<34|ovu!B*+$gs< z-SNHV`($^Il#|?*Hn;g?yj9-c&gFq+ot$i4zn*LH^Y9I=%5Pa8FQnW9XCo&ct_m+w zP3sNrS-IMdbL^^ewimj*x9*HXPySz%F${Sq+A{11*Nb1!)rsefaA)OG`cM8_nD8&t z(W589g*29&ossa6{2~AU`Z3@fSbW3I^J1an4fcuiTlYQ%K5KDL*M(oXAsl0ATtDJ# zX$RMj_BpNd_TNl)c@q&2V#{EEfXTF+PnWdF+RMaqgtyQl9*ngNqq3y? z1&SU)AMO`!oj;pOZoo3e0Nw}2;a+mn;SDqK(G}ZJ*J0nYKU-S(RWO+3biuPKUx&-# z2Wv?^bjAR_Fxe5xQ5T<@xG&iULWW=i-(Vl0|3`1u|Kg{be(SsU@LF>3$-!`Xd}DNw zW?<}F!zrx%%P#Cm6?V6yk2NORdHC*t~9K=Vn3(m^L#Vzlm@|JsZS@LO`TAuY~ zv6)&~?k(kgdH!cRTJ}c@*{C3|5H3gzHwN>^W|3cnf8`(9zNxTiS9QXc3xOz z&Q!3KPFGTXW;&PCZ2uhKJP01cIv5J46F#Ot?gRAyotyQ)o`3>>GQjL zuUw4ImuFk4t&J>VUc4nRHxtSEp`MFnV|`cK*U_53J{TUt+bwBZMf^JLoV`-z{VwF> z6|kOfO|o)p>sjGtm2A-0OX2?5;Bv19lL0z_z2E`H;XcN}$7#hQe3o~9G2OC0jE?YR zUWCM6iVnc;tPr7{opMv8Fwf16^5AQ^?b+&!WYJxPgq^p;%1V| zjTAr92tI0bhYxyKu4N@{%%>~K3Exld^M1#Tvk3l|MLZXG*KG2Ar^7Qao^cpOuJ}MV z4_3OhpuJIC1KJOjJKp5PK#P6?OuM)$gfW)QAa2Fw*pQruK@%g$ORQ=Ix28B-I^TBA z+Z~l1Px*EC-)`3bvTwHa%6}t0*T+*KU1ylJ{b{llSzE(`$@|T?pR){|Ej#yKe5~@% z%2rbCk23f~DxQ%K>`vzsss8R=mU~)ZcC#bQ>_gn$7i_&>*77KRuBEUn%@=YwKd7}#hjJ!Gn6=B0)o@OuG``q<+=<&PuyuEEtgK67t#~Fi{*!BFpS}>G| zziuEbCB8Y3#;JvV^y{M*H#>*3rJ{)sI(reFCy?AgVfTdx)*cWd|0@0W@f)-LuR90n z|L&Xhzx>-B4#|fnKUO39FMF%RQ}rzvJ6=Ba46M6&Y9WzJ<9yJHT@^ekE_(R{@r#My z$FDQjIS)50H49o^9AkwxR5#EPHvE|hjKDXrWqo3=!wYrP&eH4CZeBdbh%978X7E4F z0i6jt53X@S`FQ*8_-vv@&&=lX4je!IR?fn;ItRrY${r~GV(G)*iL8v_eqJ@- z8bC+%^B%xqY!R($k^SNSs? zyQ=@nkxT1;mIZmyyR*8uqjIGb(^ecru>kQqsn(I=SK?QN*V%6~sQ;Xu*vayPNpI-p zdDtrKYi(iohS`t5{cK;`kKBEDotP0%GaELuI+n3V&ZYm8SOX*22m7%@UgLCH?06r< zzgu8gWs6(|ryIG>uK(m5Do?=a!pb3#E}Yi?>$r-r|E%WRT7_=dd0y=O$>enQ==}Iy6BHY~;k68oos{?QI-&l{f8CVaxA5uU zb?{B8|FQHxi~8@s{{{YV{}l^R4WN3T`Z(sq&D5OxFQ1rfd2zniex;`c_YSw{-qH5- zg_qg+&Y}^WV#WLRK=FS}kzZRp`t zn5f=yXMi|R7NHBwgtIG^{tx90e1J31?SIU9_5ZFPAF?XPVu_2W4>S@^hM`dwH6DEkJ1C7SM?N8{WeUUbm)8TIJyZ-1*DJSu*w?})(0BaP zT4Rc{XCRMPxwh0a9t|JV6PPP`R5NW6bZSsV5FYAd>;sx>5z(S$MZb5A?F z+1bu;ESDocZt>YotoD;=zb|9)9JWW82~(K+;slf~EUx6V{U7dkw|>Mqr<^?b3j;=l zShJ6Z*=_I(1mYtJTYwFKFDUfE2rIIuj<|wcjVzsi_`W`!uzTXajD@}a>)F8CpY+;W z`spSXI4i;;#0M+RIP^_809|cY`S5i9C&8a2oP&!+9jF%`_KMj?-ucr>7B(f;@eap5lxU$#h^1fyx$|#GgcaUZ%K{%n4@~0%dLUr+U*7oZ z{#fx;heoke(Jhyds|P+lMpnWmfnzjxTC9Ghrq=;5cjnpAF!< z_vxHJaMIp|U#Roz&+ay=J+EB06od+_TO zrbpRQs)Ht5Qk=iihw6UN+sdz~ZL7S}cMdS;_rM3W+XjBR!17EjVx`v9L-*OpT$ev! zIggT6$ZGEYQtNi*5qyoatmVfe@IOv;cByJLh$|}$AAsXbAB{g$eBh36Buw_eyX^Z> zf3NcZh-Ow#2pk#yspDTkuW~llM&BBU28*Q}VPSv72cdct!u!YuNZJn8i5y#yf|loT zxUSE2M<4XpYa&jleYM1ahE`@#4f=fmeIMQ)^t~ZpEwz|Y@s{g}(%h#Yd?)3s<(W~| z=wx53a-f~FsdLRPZpn+vTFUdCe113fkk-T;#79tf2dXZN$Y@%=Jx{>fJ)Ul49769r#Qe%fBCA!a!;% z_h#=J5CI<#`L}b>Kj60tO(pN07;*NQ1&9gIe|!@1OErPNKF6Zs7BoJ>;VaU8;pje` zd7HTR{|pDzJ7Bf5D>z#nmz?r9IS0g1q&Xlv5WWFt3phLYC^19EKs9s}H!MZ1Rn}2_;`lp-c*KIW=rC2&0IW}8f;)2_{_^GZhlca zz^L&_T~V;4k3?JEl@;s`Z1NWHf;3ajDfH|H_@@&V6b5I*+L!-}xgXFk@O;Yb>hbCK z^cJ6t+c_>vz_8$t9M>$dYwd#({(VrofUtjA83Wa=xyG;KvxkdtF6LZN-0t~tkqx-I z&T_3N0pI%_?mj23C}zEWT8MtL+G-u{VufC)7jE{Rp?GN>{5-i~_zGAJ&MqPmQEY^u69KcKJ_lPnnrgCt!Hc7uZyu zs99MoW-2~6Y)x?{s5X3N?7;+hIGjxc{!duA0>|q(JVM)ZK21F5T3*F!hr1&){Oe4=&~`^;k&6mo-TaPjuQr- zl=#zSV>MuJmCr)Hi_$MPgMTXEGI)}4f9lM?@xs6hbB8zoW~3+6%v{un<4nL0Eqx#( zu}j}PkY0@M_vtbgKR+36yBc=il@-?P?O_%*CEkjiqGsNH+Tu=7)h z??rJcafFwBx81&}&&^EyH@bS$k0!1xwI~?wQ*li>|0`o4+*ur0Zq-N5cBlk6rwrEd zlWFKKD;)oi{1pY64+&d~TiGX@(C0Pybg4b^L``dWysu@NpU1b(!4rztB|C9K`B$=l z{}m4!obSYVm~TVl9mf{@b<|uC7tj#L^L-nBN?~tw)|P&|&B0SYpUH634*Z*cNZpZI zC}33R1#;6J4~F)FkR@>zy)BpH5s5=T4jmt3$xF-Io!?Ejx<~J}OzZPm($Q)bHZt1o z`gy*qI}kM%tPA={$e;+$(DGm!%R7If=DYCV(y?6~W&AB^`0uFE8CmmVT|EW)q#NO% zkdIO^n(Ek`<=(kt^QoWT6<+y&^h%jgy6E{oNUHA)LCCl*qdyz+t?d+itDg2_mn((`j=V-jW@c{tCQUsv9n zd0z5YA^4qy;R`1w6}kyqoR~z+X88;l3-$+x+Xkbl{>N_AzNz{)!iEsjLZ1+>JsNx7 zVVQN$Wpk;v)MK1C;KZV-38MW@^$Orqxm5Z6Zi|Z^F!a>+55%^7_@l%OMM>P;)_J})%JQx12{zj?Kie-pLM!p=yG^j%wq4?%% z;+w+7;e*Jzq&V2f2QSz7;NBe%d^S~iE&o+lwHYY|(EEp!IoNDeo1Z3}3ZI1UK$tK2 zPT<>-4^14Gie0++C4CLs1jo}N?Dci%m%85$2glsuemmX|=8)V>J`QvRD_WNSC za&i9aueCoP468l6Uh9A%AxDFm4}lLwUD1B&Fo4n>@Tmyvlxb!jOL@7oFJVuZM5E{p(?CYM;A*cF3^k$pM3ccjLF&f}egewob$GyT<>M+?^Y==Kubs z3A-jFP1-%F34W-0vyVO+@_*kVI0+OD6_>z8wIw#vZy)W%C?f23i|M+{ZximQK@x1$*fbjp4$Mklk zwa@=}vvErsuUcvS_doi_hjBU_z{R+^4#Jz_9=Tuci<5lx5aNe$1IGQ-0P}YDLEh%x zP)m<|bE+N*z;PAfTgxEbk$=b&A-zkOLggDN*Gze%%DqzVpmOK3A;R4KCq&<+oMxT- z84>CF(s{K2I3rnuofNYP-fp->J6tMFt{+k)e{n%)w(rJ7#z+Y(o6uut}LthCCQ` zCTvEgk0TyWxDfGJwhIw!^qBB@#IkH3Mm(DJo$#4ij)jfNbReWz^wNN^z!7QR5 zcYmZe(j94y)Iv13G#BLS)%>{GrS|JSX}%Xl^w~DZ-H5(-2;$4<4-QBTX&bXPVqwwf|N7uOI)ad@gPL@8fyDfKX5o z9W$(sSVeC3b~tF^Kh1Qgpv9~pW~kbI_?g4UMmyh)_~@0tEL@3Vyuud=XD8j<<(EE1 zzqTb_iCB>J?clnR^Z0&^e?LTR*F4pn)f|$Z_IJkr`uVT^>K>>M4Ff^~+XPpO92mJY z;iRkif}P}Yj1S^pda=A^T$u#62YeTK)IsFCWLlPFxnCp?4ji8B>g+Cmn!4iHmBQT1 zC!t(?*AHQ8)O)SSc@>;;wI&7)xNPw+V4nn@Ct2rNEkz?{>iWj{$ zpRMk&k-|!4!$%sAe?z&;vi)2?cILRqTJI55AvhOph(^MYzteW!mVO0hdNglb{O*Di ze7N> zoywOlpRB%1{%ze4-BYa<`G1w)0>9@~;w+B`-xI2P@UO-^z0qk;@b!geeY$vG&0FQQ zD)(Ez>Ea0BiiAfm2ev}EOS;f;}_TTI5-m4s3 z)kGFHrKrmltmE!S?&p*{D?b}^>Oel{TXgvneM6rGAEWtyOBd~LtaT?0tgBZA9>&E# z$VqaT7%))|Q%la4%bohTm*sk_6m<`YQwgV`Iyc}Ilp~#!cxG+>F5F~Quq5zPyBt{M zMe93@@ZE6JgFW%(6^I)^{#NY;eth2=9yR~})&=iEuAGOW$kh>!c~iS27Ms+q~PZ2#CydDe6P#>r5+V{ zdSAYtzT20#$((wnI<@P|SokQg8rRyderQknTNimGE5tWY_*K>>d9k|R${9|>FxSK< zE?#2gQYwF=*>@xD_74VH60yn91=!m77Se_IdB_av#0&_rV%zFk$+ z{W1U6-=|uW4+mM|ilP=Uj~L|!{5|-B;B)bF!V*{9C|@VOFY;W3;V8eaxwX4A*&pBW z`MH%-ox*%n-d~lEI)m-4;`ZL_`BiAU+W#SRe80e$%hm6lxm6M%i}D%CiwESr^87Syd@+4jTlRLp_6sIJRSV>2x~@s zw%NDC$rl{JTqK|Mll!c~skRnBN8C6!&DWA1cEgK(eUZc5FyGVi72qa!m_y}b;#cuu zZoV4_K4gL^AFJ-^doANrkh)`&N$ z#+T|h*LuCD723qvyav4g`tp`(E_?&Sg|TP6rH}Z=J?&AomEJ&PtNrd`z85C1^n%ur z8+Y!f_Lelfwd$uR$3~bj)#T|&O}`!>M0#9aV1@S7G}R}~NjyPks?O+KM=Ii5FF>wE zIjjC^7i<3EFzZSlRyX?G<+nL5AFa%e#uhUTd?>lNAv3{+PK^R9&e`Xy_h=!5!HE36 z{rdmUh;+N(UF3z{Q{qI^pLHHpJ=2A_o3QeI++0@kMZ1Oh>j`GF+1rC% zt=?=qiaMPpnVfpzCvzPrZ>9D(vQA%5r)IA5V8D8Lsr}^v??Rocl$SbN`25UZaKWQ6 z{~XR0oRe^Fp;PFOaIPb`4{&Mxp%0h%|DSj;sQI$6^r@DYd|1`HTnt6?U3s?3VO4BZ z`IkNHQEPr~7_}E#sBX9A64vJY2&;XP80&$?mT!NG6+P9!vMkMStv(p#;(9KZ$?L1J zt-OUM?+&tz%i$>521f~NLu))@HEUdcUFGa3Z)+m?8j9Ed`5s)R{ab%G`1}XmXeEx^?yw{|XBDx0^UG2{ zsg6}R*Piz0qh3H0a&VpiZzGK55@MIjtn0-&R&aZDIL_hEKU~!1vZ{ua!^0`}N_d;O zoO?RMbq~;^{%{Yj(Eh!DY(F@MH!HoZkBw4|*SUH$mNFV?rjO{J{G$p^vAZ*X};YWsa)hPwYW z&r0vR9bN=tvpcYB4uY9itbsi@oY;cn)P|2C47`-9y$n_~`1kh!9+lAN|JZ)=LcbBl zUGZksMDW$$97Sw;scxS1QY~rW-W=`^tW(d+i>=+K6D&V@91+C9sI}soOTr|I z8yp|GbdR73%zxr0qomo zTMvG14cLa|%%!C+&fodFS?*rMY~tM5jn1q%h<`1IfL)DWNW61Ab#y0WGPvK4o`8NVrN9|>6`q2=}x*$J!k(n*qbKtVb%TaAdrx(E|RPxm(R_*<+ zR`i92)?i;JTlV8KjP#2jj9=jK1yBgj($a(UV>j5vZRFvs=ROFd;LF7lR-^t~_gls- z@K5a{F3UQOTtb{rwE-T=N}cbr7D3&hNc4`F3Gsi~e&)`*)!*;oFxIz&4;E)YzD?xl ztfc0^As?26dP$DcLVA1Y(=DyyJMFDDXJ)zA+F2slr_{H|7V(_6{ouy;B0I>T*a((z z1^DrYc}4hn)pYI4E5b~x{SDsgW0^N|{vAxBrWmowG2q&UffXJGPH;4sA>|Mc!!Mwm zDc^af`E%rtxMU+sKU*mNDhEF4SL-v6%fy*y+?3hr>+uk;Hu^{wLwWE5CiG zTQAMN8*a%PD_e%)8EyVskJ%fZPsoBf?{WarFwl$rxVX`*XXV88;?Ai3oxYx71)i#A z_+Om?DifM>1JHqYr1?eNg># zt%q@7KnMGCSndYd+?)B-?&I;6V=esko0U&NOpth=I8c21D0?XOoH&g9GPboxi=9z+mO-WM3kE$y+Ag*@QC7}l0A?D7g0TIm&VMuHso;Xj4imA zyoG6{?Xzz_p$|VXgWhN6oOJ6!m`q{Nm4~EttoPsNS#B-PjjixRiw3{$*T`geN! zeR+r1wf|SzFMrqXF1Rbo)BbO@_Xrc5b3L_4H)e9}mp$iOyK4V!VCZN++*m2^b#-Tj zFfYoxmp&?NXySrmcGv12_WYN}K+u0gtJB)AHQ;N%_EOc~>h$dlOWIJu)f9-?liR|G zF^4P8s`j&ohD;%EbS(SmwekOf_RBZ)y9*3s2=nKVa+~VD4c=@KG5T%fkL74jZZ3 zsA|9R#G9WRVcE78wV0>D3T((>$y+K}mX+A=VBTdvM@(crq+-iByuaK3Pttz*m;ZE; z)7_}ig+agMT!S6HoX?WqAY7~bY{GDfx33U9PqI~uJ>S5Zyxz}RzSiGrpYG|_0JVZ0 z_Od%D)_UB>JNDdbPup8=?koY%Jc~Oql0CE^)uqVZx=g~{RKhgeRcza?du_jVEi`D*qp%)Rw0&aRm zj)`3p`Y1NIYRrPIjRNZvN8O>UB;6+`FMNBM<5JH z<8Ovo=@(j9ry~Pxwf6-y?E^Oc;#y1D0)O15Ttc>jCDf!>8C0)EVpY%WP}> zJ~@qFj7v-?sTY)w+7-IXfeHU3m+dgdM}$4W;Ig(?R=( ze#_VwPHX00J)-YDBL9c*-KsMl1$S%QKHURh8Sx|P96JWK{TMzi@l73TY$d^Omp#jJ{+t!M~f0$(@I_J_nmT670MLnL~0;Yfm8x&|M zFLtu_mPcCH#(0Z? zL)NVW@aefY3tS&g;E#O?T<-2VcIRi)toDoG>r`hiHTim&)q3}C%Q!0sc}8yC zZe;A`6aU*+P~Xs$_(zlXrSoWN93^9m+FReN$@WidXZMYVd^=w5IP3gfrnG zE4~vBJo=MoV_9o|VG_E|4y$^kgC##(6@M>t#?Of+UINwpD*bE|>-sZ!N1PjN;BU~m zBW|*K)a|Nwp^ue({&ou+7QKPC-?INx9nG`6R9yDEz4>3PTkAApXzX{(%Z!;<9u>wy9})IUgwy9+;IN~qlae-B+sQ9 zd%?M=H3^oCk0$FAa1gI8VA+=ywaC#&vLFTVcGV;L$n+ITJ|i> zH`N_hjH8+6;!0oCI-6 zMS~|)ZlJ^Gu3JLBK|6{!Wv5fyQ#QzxM ze+>J>>!JSt2L$-O|Jvhu{a$$cvu+&1@AtQFi2pHzzx~Pn$CCbjrugt}sf~PiE^Fr= z1Mv|1U|ItlOp8dYAExy_$Sh&=-sSOppurPSgr7}DY9qIZ(^8CEab?*;@kn+=@n)U% zw<7vXA|gyzETVm1vFg9N^mmxJ!g@$2mFTnGk#>mspxdHxz0o-6HMLK;qQ=PG$b-l*WJFNI$kpLfGoK1u9RFod z|FDbUi!%Qbu`TgeFyOz2Z_f5Jxc`g71%;(%Iu@7`F6_*3|7X>nUWocr0nt6Z(HI2r zy2f6%fZE!DIwZY<8%M2*Sd#q%aQWWMhYNcn;20BcYUD$38j+Wv+*a8z4wp}E59g?t zxRy73PWBzUzyjec~1dD6uS=S9ccLvRClptcn}?i zBN@&<#hF|?&@15F@I-7#*d16cr~*inf2sRqoR>Fy)_p}cxi*&R_$bGxc7RyxNPOOI?{#~F1I${ z%QcuY*?qsyoC)d?qV@2n>%jLfK^%6TnbJoW-46nf1VcUmmU;EwF{8Z15 za3}wwyjF2n*8oFN|HD4SfPEa2&GCEZd=lT~dhBofPZ3X|_vsP8V(?~i1C}OR^UsGn zPT||XRNhM;$B|wFAAZCrd`8z|_E*^rrd{) zn1qi9Zn^6?g~+!I{<`IoR@#r<)%$E}dB*A2O7JBsMkg$QVxx*Lc7P{TTvpwFeb_1= zZtL`SVZDSeO4?J|n!P{NI{z?>*e5)gQlJbPl8@J%#63*Q*AtVrthC@06|0plxmao17Ao7giPuSTEX ztNgz3jP4qAe(E%^9NwC6>A3hF7=R8xO|u$DyTXN;&$4aDzp|~g<=E#vPud{b;5ZP7 z12#E3$fBv$9gdGJY$-9zS#g$a9%I5fh)Pwyq5J)rX}>@GlQ}b3Z(d;`s=zft{V6zO zidio9abe5E)g_!*b@snvORCr-@2_(_EaKx54~=+Ol$-D4;8^B-EE!oBu6}VUF(dNu z6?0V1pW;QVMU8*DuYbg+bNk~XzuJVjZcey9WrxbIDZfTh@OawG6oYIC9;DLI_EzkX z@^eiI<2AxKEJgzjPXR zjr{D9sx?2j_mXfRnbzfVwy4GCMm$hlEs8&jkD|kmQ?0=VgRJ$6w)XZn?-3O| zL(gA^i(|Xv;Bj1p;1bFlXlhX#`F%Lc6+6~G9n9~mo(aEyncr`a_WQ#=of}#6{5>Bw z`shK6g4 z@a`n`m1%Q6i+VDLWm#LuB9_F1;qb*<{J;Mt`;YXX^sCqBQy)m)TIo_S_P=ay#fEYd z7cE3wOB@S#ygAYuoa*KF-p;<%lTAk zi+L=km4BwCMJ|LJWnu=)FgZbbgO~kxa{3SZpX_{hPgU@7pNGLsr9C|pdW>?Lg%M2L zT+*s-ZDTc9--_ej{^cO6^=dbp{P`MNc=dqYdwP!%)I6(|OBVruk9-Wm&WN{6oc@XH zOIY!j8d=3t?W`79y+RwRTK^B{+1(#LWCeDnxR`XVh19uOR>WdvX0;+4YdQX+2Iu-( z{GxntF*E;%hgptMIj6t!!7DekFd#E<| zppR94t-Tf8SJOIwFv)5kzssHTswtCme|gKctElDJRMJZCZ$hkiGhM7(;xQ#;j5p&3LNs| zq6$GXBYzCTuNaAMC+=x{>?_eP-W=%8ff5HB+3lwXSfSNm4t7@n2TLCO!P2ep$@%K&cc7F6tb-v&I=5_yh zaN~m^0Rw}JmpjsWaP-Xh3*ig#)vu8+3_sXbuypJb&gaNHl^@LIh~fhaTaw9&A82It zKkt8xoZqfJJ|6oob?)na_J&V8tm>S<(+m9vWm!}3aNzO`-{J?l60tSG8@@K1C+o(- zS0h&^T;Z(08nP(k6?j)(?*7(@jyL?GfAhti@9oVwbmxdhL1V+02G58(m;13&Yny&H zbZ*K0jV1>S4xSk>IAlomc{K~(%Fp1Jh&zu>bQqf~P56JXUQhem^?x6S?eur#@bAAb z-2Z(^_=RdAsWwizY2nUKAqPVlZX#)aZ_D3hyH`f^TM@_~Fa5Uk|Mo~XM7OpjOaHqB7eN1ctL)K#$@dD4DFL~A9V&V z#~&`@4WA6w6gwo_ULT);_BO@g6@Ou``z5$rhAoWBU3|6~QUZ}b;E$L51ks^&V=8BS zGT(dI9k*R2D@fcgW*X-kwt4u-7?(?++E3CUgrASwogclJ-&vFGcwmLl(tL-$Ti^Ak zD{e}joC$|Zek5L(!s5%MzE}Bo?%<5c3rAfTalsHPup`Ck1;U)D#*;Aa2?t7AhJ8um zfd4Y6RZxvTeK9Wt6%7y0airWavlY_Lew+^%>QKbNM3D)B6QIe0?8|{qTBd^2;^8m5nIuv|9ZP6=}_DxQ=!#cdxx0iefK0Bx{ zF-!2N*g>6tn`M=Vr7J!qy)Yi!M#57itm=tQu8u+TPr;=;R>Cqa$mKZYe`jm;3YeSL zhXTjy9S|;Fc1F_+@Fc@?sk#jfPd;E(4z;(!obTdsDz?8qTsXp#EhY|0O@OrpEd;w) zdwU4@!w_ns1*LIR_6|6a_Wi|AHT$FnT-=IPwgsbiJMquV%i&+!TF44*tLgaP3cWz> zIdTsAqBRR^QTOD1aBui>Y=oDk?yQB7YoYk8vz4yn|1I-oo6F)5X%2R@-s$@-ZY}l^ zI%4voGFIkg@CGlnwV|IbvT;AIg_ChJ`rvB27rUtChoda>*8JR)1o+3X-{E2n!*3Ec zB#L`+jbFU{I~{%!@7rx)@x#HrDo;c?Ilh`Y?XBChgNfXp_s>`b&?X z(OeqzN>fDc`2EwSsO;O7XX{o>6Ho`5|`?gQVSKK>Qo?Yvr?eHqr~g7>erpW&ae{O8rXC19|1-94t+T2IK0JK*X-<2i&{_Z+qK|}z$*uXwH7`W z&+C@7_V@m5YVDLax_Lv_fPW(IPI`~*gUTn{+ih>%=P>MdVzZaoR3D4%EfC31JDW(D z>Pko3ISf-_uxP>4qukmHz!sy%P0O_J*CRaj=fc2e#1LQ8_zM?P0_Vv8z~EF4i=Y# zI6SnDq+jQKhWZxI*SGS=$U(x!?sR;FwK+Z5a_>N&onO%6m*uypiSYS+HQwr-z29-R z1+ov;m|e3=+V`eCzHs)1z<}|gJ7XV1M|v_RG1?Lin_BcxJ#b0zOH*I7>*q7A)bmZO z$ZPd|xYYv{tT8s7Y;SN*R^~`E-PdJl-}%SKS1+6hE_Ud)_2O+2S4qr6zG2S>Om(CEVf;`I8y!kLb@q2*i-NZ!PzLDTxYj}+mrnqy(IguHO}8VXT^8h|I&6yYx|8J=e)KsZ~dhW`-RMn zIh%QD@^iPn*Jpj~tn8};MuaYExT2~2;(vLa$8~%-Ab1AiMNGnL?orRj!Hw{*B<*vD z`J6s`F(8R}Q!PSAzPx@Z6UoRe=wX4pT{@1=!9+y4sX9+2X?oVpeEoV|pOY>iok_Y? zCq%l9M0%Ib@FYaPq2EfoGiCOXtQ4z=e^P@5##682@d}kM0JuU&-Z*2Gt9Cj?Zdd zCnj&Me5dlUbPl!s!B;y>IU<=47P2h63tP?8cUhD3gDvlt$`%9GT6w2I9YQ|fvptYJ z#hz`jSblufBf5?JF!}j}E6l#Fq&53s72lTJ8VsT-1ND^}sVNfnjH~$NPWkt)~CAKbHN^{yq1<-L<6ue47;@^>r<9%qf-i z9Z)}LK1<&6O3Wg=>xusbHYkDHY@qg+)zR?(i=J)))&@8Jw*k-h1fBDzcE}NUb|Y|( z0W@Zn%K8?lHy(&(fa|BKb&h$0*FmTP*UN$Scew%EK+(qv|L=Hr99ZV>`=0|GhtWIX z^PhD-aIGh>y}+Ev`Vgo$2#Cd;9%O2ZuhsqqIzI|@Cb{YUfd6iHf%ld?DE#04bkYCH z_X~kzD8TzOjtBmiTn1cg2D%?3lJzuDFQ~l@>T@sv_i(HRtuFz!eHC|F{x?1u2;55) z{XgP%)qkapz+b%5ou$p6+Cfor|%x&ARaF;xMzf${^m%;PBGk(6Anbqq8e!~ z8mr}54=nS6ePNyjlK<^5r#vuR<(m%F3z~Zc+Y6*IfX-%jQ_gOoCicm|6FRq8?*y)i zUBcHWS*%!W3d+Nv^o{}^unYb_z$o~?fq@r@f$bLtU>kq|SWhz`+5y1s!xLa~1Bw*^ z)inNZU3NUjqcz8f~9l*X63xk6L zRHYNhF$M-umB75n#-N}8} literal 0 HcmV?d00001 diff --git a/SOLVER/dkxce.Route.ServiceSolver/obj/Release/dkxce.Route.ServiceSolver.pdb b/SOLVER/dkxce.Route.ServiceSolver/obj/Release/dkxce.Route.ServiceSolver.pdb new file mode 100644 index 0000000000000000000000000000000000000000..294104c980be38d1dbabd2eab60c443fe187fdfb GIT binary patch literal 284160 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 literal 0 HcmV?d00001 diff --git a/SOLVER/dkxce.Route.ServiceSolver/obj/dkxce.Route.ServiceSolver.Lipetsk.csproj.FileList.txt b/SOLVER/dkxce.Route.ServiceSolver/obj/dkxce.Route.ServiceSolver.Lipetsk.csproj.FileList.txt new file mode 100644 index 0000000..fdbb2c5 --- /dev/null +++ b/SOLVER/dkxce.Route.ServiceSolver/obj/dkxce.Route.ServiceSolver.Lipetsk.csproj.FileList.txt @@ -0,0 +1,13 @@ +obj\Debug\ResolveAssemblyReference.cache +bin\Debug\dkxce.Route.ServiceSolver.Lipetsk.exe +bin\Debug\dkxce.Route.ServiceSolver.Lipetsk.pdb +obj\Debug\dkxce.Route.ServiceSolver.Lipetsk.exe +obj\Debug\dkxce.Route.ServiceSolver.Lipetsk.pdb +bin\Debug\dkxce.Route.Classes.dll +bin\Debug\dkxce.Route.ISolver.dll +bin\Debug\dkxce.Route.ISolver.pdb +bin\Debug\dkxce.Route.Classes.pdb +bin\Debug\dkxce.Route.GSolver.pdb +bin\Debug\dkxce.Route.WayList.pdb +bin\Debug\dkxce.Route.WayList.dll +bin\Debug\dkxce.Route.GSolver.dll diff --git a/SOLVER/dkxce.Route.ServiceSolver/obj/dkxce.Route.ServiceSolver.Lipetsk.csproj.FileListAbsolute.txt b/SOLVER/dkxce.Route.ServiceSolver/obj/dkxce.Route.ServiceSolver.Lipetsk.csproj.FileListAbsolute.txt new file mode 100644 index 0000000..c0b0176 --- /dev/null +++ b/SOLVER/dkxce.Route.ServiceSolver/obj/dkxce.Route.ServiceSolver.Lipetsk.csproj.FileListAbsolute.txt @@ -0,0 +1,13 @@ +D:\Projects\projects.c# III\_GRAPH_SOLUTION\dkxce.Route.ServiceSolver.Lipetsk\bin\Debug\dkxce.Route.ServiceSolver.Lipetsk.exe +D:\Projects\projects.c# III\_GRAPH_SOLUTION\dkxce.Route.ServiceSolver.Lipetsk\bin\Debug\dkxce.Route.ServiceSolver.Lipetsk.pdb +D:\Projects\projects.c# III\_GRAPH_SOLUTION\dkxce.Route.ServiceSolver.Lipetsk\bin\Debug\dkxce.Route.Classes.dll +D:\Projects\projects.c# III\_GRAPH_SOLUTION\dkxce.Route.ServiceSolver.Lipetsk\bin\Debug\dkxce.Route.ISolver.dll +D:\Projects\projects.c# III\_GRAPH_SOLUTION\dkxce.Route.ServiceSolver.Lipetsk\bin\Debug\dkxce.Route.ISolver.pdb +D:\Projects\projects.c# III\_GRAPH_SOLUTION\dkxce.Route.ServiceSolver.Lipetsk\bin\Debug\dkxce.Route.Classes.pdb +D:\Projects\projects.c# III\_GRAPH_SOLUTION\dkxce.Route.ServiceSolver.Lipetsk\bin\Debug\dkxce.Route.GSolver.pdb +D:\Projects\projects.c# III\_GRAPH_SOLUTION\dkxce.Route.ServiceSolver.Lipetsk\obj\Debug\ResolveAssemblyReference.cache +D:\Projects\projects.c# III\_GRAPH_SOLUTION\dkxce.Route.ServiceSolver.Lipetsk\obj\Debug\dkxce.Route.ServiceSolver.Lipetsk.exe +D:\Projects\projects.c# III\_GRAPH_SOLUTION\dkxce.Route.ServiceSolver.Lipetsk\obj\Debug\dkxce.Route.ServiceSolver.Lipetsk.pdb +D:\Projects\projects.c# III\_GRAPH_SOLUTION\dkxce.Route.ServiceSolver.Lipetsk\bin\Debug\dkxce.Route.WayList.dll +D:\Projects\projects.c# III\_GRAPH_SOLUTION\dkxce.Route.ServiceSolver.Lipetsk\bin\Debug\dkxce.Route.WayList.pdb +D:\Projects\projects.c# III\_GRAPH_SOLUTION\dkxce.Route.ServiceSolver.Lipetsk\bin\Debug\dkxce.Route.GSolver.dll diff --git a/SOLVER/dkxce.Route.ServiceSolver/obj/dkxce.Route.ServiceSolver.csproj.FileList.txt b/SOLVER/dkxce.Route.ServiceSolver/obj/dkxce.Route.ServiceSolver.csproj.FileList.txt new file mode 100644 index 0000000..14aaf64 --- /dev/null +++ b/SOLVER/dkxce.Route.ServiceSolver/obj/dkxce.Route.ServiceSolver.csproj.FileList.txt @@ -0,0 +1,17 @@ +bin\Debug\dkxce.Route.ServiceSolver.exe +bin\Debug\dkxce.Route.ServiceSolver.pdb +bin\Debug\dkxce.Route.Classes.dll +bin\Debug\dkxce.Route.GSolver.dll +bin\Debug\dkxce.Route.ISolver.dll +bin\Debug\dkxce.Route.Matrix.dll +bin\Debug\dkxce.Route.Regions.dll +bin\Debug\dkxce.Route.WayList.dll +bin\Debug\dkxce.Route.ISolver.pdb +bin\Debug\dkxce.Route.Matrix.pdb +bin\Debug\dkxce.Route.Regions.pdb +bin\Debug\dkxce.Route.GSolver.pdb +bin\Debug\dkxce.Route.WayList.pdb +bin\Debug\dkxce.Route.Classes.pdb +obj\Debug\ResolveAssemblyReference.cache +obj\Debug\dkxce.Route.ServiceSolver.exe +obj\Debug\dkxce.Route.ServiceSolver.pdb diff --git a/SOLVER/dkxce.Route.ServiceSolver/obj/dkxce.Route.ServiceSolver.csproj.FileListAbsolute.txt b/SOLVER/dkxce.Route.ServiceSolver/obj/dkxce.Route.ServiceSolver.csproj.FileListAbsolute.txt new file mode 100644 index 0000000..6461b17 --- /dev/null +++ b/SOLVER/dkxce.Route.ServiceSolver/obj/dkxce.Route.ServiceSolver.csproj.FileListAbsolute.txt @@ -0,0 +1,82 @@ +D:\Projects\projects.c# III\_GRAPH_SOLUTION\dkxce.Route.ServiceSolver.Lipetsk\bin\Debug\dkxce.Route.ServiceSolver.Lipetsk.exe +D:\Projects\projects.c# III\_GRAPH_SOLUTION\dkxce.Route.ServiceSolver.Lipetsk\bin\Debug\dkxce.Route.ServiceSolver.Lipetsk.pdb +D:\Projects\projects.c# III\_GRAPH_SOLUTION\dkxce.Route.ServiceSolver.Lipetsk\bin\Debug\dkxce.Route.Classes.dll +D:\Projects\projects.c# III\_GRAPH_SOLUTION\dkxce.Route.ServiceSolver.Lipetsk\bin\Debug\dkxce.Route.GSolver.dll +D:\Projects\projects.c# III\_GRAPH_SOLUTION\dkxce.Route.ServiceSolver.Lipetsk\bin\Debug\dkxce.Route.ISolver.dll +D:\Projects\projects.c# III\_GRAPH_SOLUTION\dkxce.Route.ServiceSolver.Lipetsk\bin\Debug\dkxce.Route.WayList.dll +D:\Projects\projects.c# III\_GRAPH_SOLUTION\dkxce.Route.ServiceSolver.Lipetsk\bin\Debug\dkxce.Route.ISolver.pdb +D:\Projects\projects.c# III\_GRAPH_SOLUTION\dkxce.Route.ServiceSolver.Lipetsk\bin\Debug\dkxce.Route.Classes.pdb +D:\Projects\projects.c# III\_GRAPH_SOLUTION\dkxce.Route.ServiceSolver.Lipetsk\bin\Debug\dkxce.Route.GSolver.pdb +D:\Projects\projects.c# III\_GRAPH_SOLUTION\dkxce.Route.ServiceSolver.Lipetsk\bin\Debug\dkxce.Route.WayList.pdb +D:\Projects\projects.c# III\_GRAPH_SOLUTION\dkxce.Route.ServiceSolver.Lipetsk\obj\Debug\ResolveAssemblyReference.cache +D:\Projects\projects.c# III\_GRAPH_SOLUTION\dkxce.Route.ServiceSolver.Lipetsk\obj\Debug\dkxce.Route.ServiceSolver.Lipetsk.exe +D:\Projects\projects.c# III\_GRAPH_SOLUTION\dkxce.Route.ServiceSolver.Lipetsk\obj\Debug\dkxce.Route.ServiceSolver.Lipetsk.pdb +D:\Projects\projects.c# III\_GRAPH_SOLUTION\dkxce.Route.ServiceSolver\bin\Debug\dkxce.Route.Classes.dll +D:\Projects\projects.c# III\_GRAPH_SOLUTION\dkxce.Route.ServiceSolver\bin\Debug\dkxce.Route.GSolver.dll +D:\Projects\projects.c# III\_GRAPH_SOLUTION\dkxce.Route.ServiceSolver\bin\Debug\dkxce.Route.ISolver.dll +D:\Projects\projects.c# III\_GRAPH_SOLUTION\dkxce.Route.ServiceSolver\bin\Debug\dkxce.Route.WayList.dll +D:\Projects\projects.c# III\_GRAPH_SOLUTION\dkxce.Route.ServiceSolver\bin\Debug\dkxce.Route.ISolver.pdb +D:\Projects\projects.c# III\_GRAPH_SOLUTION\dkxce.Route.ServiceSolver\bin\Debug\dkxce.Route.Classes.pdb +D:\Projects\projects.c# III\_GRAPH_SOLUTION\dkxce.Route.ServiceSolver\bin\Debug\dkxce.Route.GSolver.pdb +D:\Projects\projects.c# III\_GRAPH_SOLUTION\dkxce.Route.ServiceSolver\bin\Debug\dkxce.Route.WayList.pdb +D:\Projects\projects.c# III\_GRAPH_SOLUTION\dkxce.Route.ServiceSolver\obj\Debug\ResolveAssemblyReference.cache +D:\Projects\projects.c# III\_GRAPH_SOLUTION\dkxce.Route.ServiceSolver\bin\Debug\dkxce.Route.ServiceSolver.exe +D:\Projects\projects.c# III\_GRAPH_SOLUTION\dkxce.Route.ServiceSolver\bin\Debug\dkxce.Route.ServiceSolver.pdb +D:\Projects\projects.c# III\_GRAPH_SOLUTION\dkxce.Route.ServiceSolver\obj\Debug\dkxce.Route.ServiceSolver.exe +D:\Projects\projects.c# III\_GRAPH_SOLUTION\dkxce.Route.ServiceSolver\obj\Debug\dkxce.Route.ServiceSolver.pdb +D:\Projects\projects.c# III\_GRAPH_SOLUTION\dkxce.Route.ServiceSolver\bin\Debug\dkxce.Route.Regions.dll +D:\Projects\projects.c# III\_GRAPH_SOLUTION\dkxce.Route.ServiceSolver\bin\Debug\dkxce.Route.Regions.pdb +D:\Projects\projects.c# III\_GRAPH_SOLUTION\dkxce.Route.ServiceSolver\bin\Debug\dkxce.Route.Matrix.dll +D:\Projects\projects.c# III\_GRAPH_SOLUTION\dkxce.Route.ServiceSolver\bin\Debug\dkxce.Route.Matrix.pdb +D:\Projects\projects.cs.III\_GRAPH_SOLUTION\dkxce.Route.ServiceSolver\bin\Debug\dkxce.Route.ServiceSolver.exe +D:\Projects\projects.cs.III\_GRAPH_SOLUTION\dkxce.Route.ServiceSolver\bin\Debug\dkxce.Route.ServiceSolver.pdb +D:\Projects\projects.cs.III\_GRAPH_SOLUTION\dkxce.Route.ServiceSolver\bin\Debug\dkxce.Route.Classes.dll +D:\Projects\projects.cs.III\_GRAPH_SOLUTION\dkxce.Route.ServiceSolver\bin\Debug\dkxce.Route.GSolver.dll +D:\Projects\projects.cs.III\_GRAPH_SOLUTION\dkxce.Route.ServiceSolver\bin\Debug\dkxce.Route.ISolver.dll +D:\Projects\projects.cs.III\_GRAPH_SOLUTION\dkxce.Route.ServiceSolver\bin\Debug\dkxce.Route.Matrix.dll +D:\Projects\projects.cs.III\_GRAPH_SOLUTION\dkxce.Route.ServiceSolver\bin\Debug\dkxce.Route.Regions.dll +D:\Projects\projects.cs.III\_GRAPH_SOLUTION\dkxce.Route.ServiceSolver\bin\Debug\dkxce.Route.WayList.dll +D:\Projects\projects.cs.III\_GRAPH_SOLUTION\dkxce.Route.ServiceSolver\bin\Debug\dkxce.Route.ISolver.pdb +D:\Projects\projects.cs.III\_GRAPH_SOLUTION\dkxce.Route.ServiceSolver\bin\Debug\dkxce.Route.Matrix.pdb +D:\Projects\projects.cs.III\_GRAPH_SOLUTION\dkxce.Route.ServiceSolver\bin\Debug\dkxce.Route.Regions.pdb +D:\Projects\projects.cs.III\_GRAPH_SOLUTION\dkxce.Route.ServiceSolver\bin\Debug\dkxce.Route.GSolver.pdb +D:\Projects\projects.cs.III\_GRAPH_SOLUTION\dkxce.Route.ServiceSolver\bin\Debug\dkxce.Route.WayList.pdb +D:\Projects\projects.cs.III\_GRAPH_SOLUTION\dkxce.Route.ServiceSolver\bin\Debug\dkxce.Route.Classes.pdb +D:\Projects\projects.cs.III\_GRAPH_SOLUTION\dkxce.Route.ServiceSolver\obj\Debug\ResolveAssemblyReference.cache +D:\Projects\projects.cs.III\_GRAPH_SOLUTION\dkxce.Route.ServiceSolver\obj\Debug\dkxce.Route.ServiceSolver.exe +D:\Projects\projects.cs.III\_GRAPH_SOLUTION\dkxce.Route.ServiceSolver\obj\Debug\dkxce.Route.ServiceSolver.pdb +C:\PROJECTS\CSharp_Navicom\ADDR_SEARCH\_GRAPH_SOLUTION\dkxce.Route.ServiceSolver\obj\Debug\ResolveAssemblyReference.cache +C:\PROJECTS\CSharp_Navicom\ADDR_SEARCH\_GRAPH_SOLUTION\dkxce.Route.ServiceSolver\bin\Debug\dkxce.Route.ServiceSolver.exe +C:\PROJECTS\CSharp_Navicom\ADDR_SEARCH\_GRAPH_SOLUTION\dkxce.Route.ServiceSolver\bin\Debug\dkxce.Route.ServiceSolver.pdb +C:\PROJECTS\CSharp_Navicom\ADDR_SEARCH\_GRAPH_SOLUTION\dkxce.Route.ServiceSolver\bin\Debug\dkxce.Route.Classes.dll +C:\PROJECTS\CSharp_Navicom\ADDR_SEARCH\_GRAPH_SOLUTION\dkxce.Route.ServiceSolver\bin\Debug\dkxce.Route.GSolver.dll +C:\PROJECTS\CSharp_Navicom\ADDR_SEARCH\_GRAPH_SOLUTION\dkxce.Route.ServiceSolver\bin\Debug\dkxce.Route.ISolver.dll +C:\PROJECTS\CSharp_Navicom\ADDR_SEARCH\_GRAPH_SOLUTION\dkxce.Route.ServiceSolver\bin\Debug\dkxce.Route.Matrix.dll +C:\PROJECTS\CSharp_Navicom\ADDR_SEARCH\_GRAPH_SOLUTION\dkxce.Route.ServiceSolver\bin\Debug\dkxce.Route.Regions.dll +C:\PROJECTS\CSharp_Navicom\ADDR_SEARCH\_GRAPH_SOLUTION\dkxce.Route.ServiceSolver\bin\Debug\dkxce.Route.WayList.dll +C:\PROJECTS\CSharp_Navicom\ADDR_SEARCH\_GRAPH_SOLUTION\dkxce.Route.ServiceSolver\bin\Debug\dkxce.Route.ISolver.pdb +C:\PROJECTS\CSharp_Navicom\ADDR_SEARCH\_GRAPH_SOLUTION\dkxce.Route.ServiceSolver\bin\Debug\dkxce.Route.Matrix.pdb +C:\PROJECTS\CSharp_Navicom\ADDR_SEARCH\_GRAPH_SOLUTION\dkxce.Route.ServiceSolver\bin\Debug\dkxce.Route.Regions.pdb +C:\PROJECTS\CSharp_Navicom\ADDR_SEARCH\_GRAPH_SOLUTION\dkxce.Route.ServiceSolver\bin\Debug\dkxce.Route.GSolver.pdb +C:\PROJECTS\CSharp_Navicom\ADDR_SEARCH\_GRAPH_SOLUTION\dkxce.Route.ServiceSolver\bin\Debug\dkxce.Route.WayList.pdb +C:\PROJECTS\CSharp_Navicom\ADDR_SEARCH\_GRAPH_SOLUTION\dkxce.Route.ServiceSolver\bin\Debug\dkxce.Route.Classes.pdb +C:\PROJECTS\CSharp_Navicom\ADDR_SEARCH\_GRAPH_SOLUTION\dkxce.Route.ServiceSolver\obj\Debug\dkxce.Route.ServiceSolver.exe +C:\PROJECTS\CSharp_Navicom\ADDR_SEARCH\_GRAPH_SOLUTION\dkxce.Route.ServiceSolver\obj\Debug\dkxce.Route.ServiceSolver.pdb +C:\PROJECTS\CSharp_Navicom\ADDR_SEARCH\_GRAPH_SOLUTION\dkxce.Route.ServiceSolver\bin\Debug\ICSharpCode.SharpZipLib.dll +C:\PROJECTS\CSharp_Navicom\ADDR_SEARCH\[READY]\ROUTES\Service\dkxce.Route.ServiceSolver.exe +C:\PROJECTS\CSharp_Navicom\ADDR_SEARCH\[READY]\ROUTES\Service\dkxce.Route.ServiceSolver.pdb +M:\NAVICOM_PROJECTS\_ROUTES_GIT_\SOLVER\READY\Service\dkxce.Route.ServiceSolver.exe +M:\NAVICOM_PROJECTS\_ROUTES_GIT_\SOLVER\READY\Service\dkxce.Route.ServiceSolver.pdb +M:\NAVICOM_PROJECTS\_ROUTES_GIT_\SOLVER\dkxce.Route.ServiceSolver\obj\Debug\ResolveAssemblyReference.cache +M:\NAVICOM_PROJECTS\_ROUTES_GIT_\SOLVER\dkxce.Route.ServiceSolver\obj\Debug\dkxce.Route.ServiceSolver.exe +M:\NAVICOM_PROJECTS\_ROUTES_GIT_\SOLVER\dkxce.Route.ServiceSolver\obj\Debug\dkxce.Route.ServiceSolver.pdb +M:\NAVICOM_PROJECTS\_ROUTES_GIT_\READY\Service\dkxce.Route.ServiceSolver.exe +M:\NAVICOM_PROJECTS\_ROUTES_GIT_\READY\Service\dkxce.Route.ServiceSolver.pdb +M:\NAVICOM_PROJECTS\_ROUTES_GIT_\SOLVER\dkxce.Route.ServiceSolver\obj\Release\ResolveAssemblyReference.cache +M:\NAVICOM_PROJECTS\_ROUTES_GIT_\SOLVER\dkxce.Route.ServiceSolver\obj\Release\dkxce.Route.ServiceSolver.exe +M:\NAVICOM_PROJECTS\_ROUTES_GIT_\SOLVER\dkxce.Route.ServiceSolver\obj\Release\dkxce.Route.ServiceSolver.pdb +M:\NAVICOM_PROJECTS\_ROUTES_PSOURCE_\READY\Service\dkxce.Route.ServiceSolver.exe +M:\NAVICOM_PROJECTS\_ROUTES_PSOURCE_\READY\Service\dkxce.Route.ServiceSolver.pdb +M:\NAVICOM_PROJECTS\_ROUTES_PSOURCE_\SOLVER\dkxce.Route.ServiceSolver\obj\Debug\ResolveAssemblyReference.cache +M:\NAVICOM_PROJECTS\_ROUTES_PSOURCE_\SOLVER\dkxce.Route.ServiceSolver\obj\Debug\dkxce.Route.ServiceSolver.exe +M:\NAVICOM_PROJECTS\_ROUTES_PSOURCE_\SOLVER\dkxce.Route.ServiceSolver\obj\Debug\dkxce.Route.ServiceSolver.pdb diff --git a/SOLVER/dkxce.Route.ServiceSolver/solver.ico b/SOLVER/dkxce.Route.ServiceSolver/solver.ico new file mode 100644 index 0000000000000000000000000000000000000000..dc22860db6b1aa0f6595b539c2fcf3fedf86eeed GIT binary patch literal 161862 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 literal 0 HcmV?d00001 diff --git a/SOLVER/dkxce.Route.Shp2Rt/DBFSharp.cs b/SOLVER/dkxce.Route.Shp2Rt/DBFSharp.cs new file mode 100644 index 0000000..8392d81 --- /dev/null +++ b/SOLVER/dkxce.Route.Shp2Rt/DBFSharp.cs @@ -0,0 +1,1190 @@ +// http://www.realcoding.net/articles/struktura-dbf-failov-dlya-neprodvinutykh.html +// http://www.autopark.ru/ASBProgrammerGuide/DBFSTRUC.HTM#Table_9 + +using System; +using System.IO; +using System.Collections; +using System.Collections.Generic; +using System.Text; + +namespace DBFSharp +{ + public class DBFFile: FileStream + { + private const byte MAIN_HEADER_SIZE = 32; + private const byte FIELD_INFO_SIZE = 32; + + private bool _tenHeaderMode = true; + private bool header_exists = false; + private string filename; + private uint records = 0; + private uint _header_space = 0; + + private CodePageSet _cp = CodePageSet.Default; + private FieldInfos _FieldInfos = new FieldInfos(); + public CodePageList CodePages = new CodePageList(); + private MyBitConverter bc = new MyBitConverter(true); + + public bool ShortenFieldNameMode { get { return _tenHeaderMode; } set { _tenHeaderMode = value; } } + + public DBFFile(string fileName) : base(fileName, FileMode.OpenOrCreate, FileAccess.ReadWrite) + { + filename = fileName; + _cp = CodePageSet.Default; + if (this.Length < MAIN_HEADER_SIZE) + WriteHeader(); + else + ReadHeader(0); + } + + public DBFFile(string fileName, byte dbfCodePage) : base(fileName, FileMode.OpenOrCreate, FileAccess.ReadWrite) + { + filename = fileName; + SetCodePage(dbfCodePage); + if (this.Length == 0) + WriteHeader(); + else + ReadHeader(dbfCodePage); + } + + public DBFFile(string fileName, FileMode mode) : base(fileName, mode, FileAccess.ReadWrite) + { + filename = fileName; + _cp = CodePageSet.Default; + if (this.Length < MAIN_HEADER_SIZE) + WriteHeader(); + else + ReadHeader(0); + } + + public DBFFile(string fileName, FileMode mode, byte dbfCodePage): base(fileName, mode, FileAccess.ReadWrite) + { + filename = fileName; + SetCodePage(dbfCodePage); + if (this.Length == 0) + WriteHeader(); + else + ReadHeader(dbfCodePage); + } + + public FieldInfos FieldInfos + { + get + { + return _FieldInfos; + } + } + + public byte FieldsCount + { + get + { + if (_FieldInfos == null) return 0; + if (_FieldInfos.Count == 0) return 0; + return (byte)_FieldInfos.Count; + } + } + + public ushort RecordSize + { + get + { + if (_FieldInfos == null) return 0; + if (_FieldInfos.Count == 0) return 0; + return _FieldInfos.RecordSize; + } + } + + public ushort HeaderSize + { + get + { + if (_FieldInfos == null) return 0; + if (_FieldInfos.Count == 0) return 0; + return (ushort)(_FieldInfos.Count * FIELD_INFO_SIZE + MAIN_HEADER_SIZE + 1 + _header_space); + } + } + + private ushort StdHeaderSize + { + get + { + if (_FieldInfos == null) return 0; + if (_FieldInfos.Count == 0) return 0; + return (ushort)(_FieldInfos.Count * FIELD_INFO_SIZE + MAIN_HEADER_SIZE + 1); + } + } + + public bool HeaderExists + { + get + { + return header_exists; + } + } + + public uint RecordsCount + { + get + { + return records; + } + } + + private void SetCodePage(byte dbfCodePage) + { + _cp = CodePages[dbfCodePage]; + if (_cp.headerCode == 0) + { + base.Close(); + throw new Exception("Unknown Code Page"); + }; + try + { + if (_cp.Encoding == null) + { + base.Close(); + throw new Exception("Unknown Code Page " + _cp.codePage); + }; + } + catch (Exception ex) + { + base.Close(); + throw new Exception("Unknown Code Page "+_cp.codePage+"\r\n"+ex.Message); + }; + } + + private void ReadHeader(byte dbfCodePage) + { + byte[] buff; + // records count + this.Position = 4; + buff = new byte[4]; + this.Read(buff, 0, buff.Length); + records = bc.ToUInt32(buff, 0); + // header size + buff = new byte[2]; + this.Read(buff, 0, buff.Length); + ushort hdr_size = bc.ToUInt16(buff, 0); + // record size + this.Read(buff, 0, buff.Length); + ushort rec_size = bc.ToUInt16(buff, 0); + // code page + this.Position = 29; + byte cod_page = (byte)this.ReadByte(); + this.SetCodePage(dbfCodePage > 0 ? dbfCodePage : (cod_page > 0 ? cod_page : (byte)201)); + // read fields + this.Position = 32; + _FieldInfos = new FieldInfos(); + int tb = hdr_size - 2; + while (this.Position < tb) + { + buff = new byte[11]; + this.Read(buff, 0, buff.Length); + string fName = _cp.Encoding.GetString(buff).Trim('\0').Trim(); + byte ft = (byte)this.ReadByte(); + buff = new byte[4]; + this.Read(buff, 0, buff.Length); + int offset = bc.ToInt32(buff, 0); + byte fsize = (byte)this.ReadByte(); + byte dpnt = (byte)this.ReadByte(); + buff = new byte[14]; + this.Read(buff, 0, buff.Length); + FieldInfo fi = new FieldInfo(fName, fsize, dpnt, (FieldType)ft); + fi.offset = (ushort)offset; + _FieldInfos.Add(fi); + }; + this._header_space = (uint)hdr_size - this.StdHeaderSize; + this.Position = hdr_size; + header_exists = true; + } + + private void WriteHeader() + { + byte[] buff = new byte[0]; + this.Position = 0; + this.WriteByte(0x03); // 0 - TYPE + MEMO 0x83 + this.WriteByte((byte)(DateTime.UtcNow.Year % 100)); // 1 - YY + this.WriteByte((byte)DateTime.UtcNow.Month); // 2 - MM + this.WriteByte((byte)DateTime.UtcNow.Day); // 3 - DD + buff = bc.GetBytes((uint)0); + this.Write(buff, 0, buff.Length); // 4 - records count + buff = bc.GetBytes((ushort)0); + this.Write(buff, 0, buff.Length); // 8 - header size + buff = bc.GetBytes((ushort)0); + this.Write(buff, 0, buff.Length); // 10 - record size + this.WriteByte(0x00); // 12 - Reserved + this.WriteByte(0x00); // 13 - Reserved + this.WriteByte(0x00); // 14 - Ignored + this.WriteByte(0x00); // 15 - Normal + buff = new byte[12]; + this.Write(buff, 0, buff.Length); // 16 - reserved + this.WriteByte(0x00); // 28 - No Index + this.WriteByte((byte)_cp.headerCode); // 29 - Code Page + this.WriteByte(0x00); // 30 - Reserved + this.WriteByte(0x00); // 31 - Reserved + } + + public void WriteHeader(FieldInfos fields) + { + if (this.records > 0) throw new Exception("Can't write header if any records exists"); + _FieldInfos = fields; + WriteHeader(); + + byte[] buff = new byte[0]; + ushort hdr_size = MAIN_HEADER_SIZE + 1; + int mhl = 0; + + fields.ReIndex(); + for (int i = 0; i < fields.Count; i++) + { + buff = fields[i].BName(_cp.Encoding); + if (fields[i].GName.Length > 11) + buff[10] = (byte)(0x41 + (mhl++)); + if(_tenHeaderMode) buff[10] = 0; + this.Write(buff, 0, buff.Length); // 0 - Field Name + buff = new byte[] { (byte)fields[i].FType }; + this.Write(buff, 0, buff.Length); // 11 - Field Type + buff = bc.GetBytes((int)fields[i].offset); + this.Write(buff, 0, buff.Length); // 12 - Field Offset + this.WriteByte((byte)fields[i].FLength); // 16 - Field Size + this.WriteByte((byte)fields[i].FDecimalPoint); // 17 - No Decimal Point + buff = new byte[14]; + this.Write(buff, 0, buff.Length); // 18 - Reserved + + hdr_size += FIELD_INFO_SIZE; + }; + this.WriteByte(13); //TERMINAL BYTE + this.WriteByte(26); //TERMINAL BYTE + + this.Position = 8; + buff = bc.GetBytes(hdr_size); // header size + this.Write(buff, 0, buff.Length); + buff = bc.GetBytes(fields.RecordSize); // record size + this.Write(buff, 0, buff.Length); + + this.Position = hdr_size; + header_exists = true; + } + + private bool WriteData(Dictionary record, long position) + { + if (!header_exists) throw new Exception("Header doesn't created or exists"); + if (record == null) return false; + if (record.Count == 0) return false; + if ((_FieldInfos == null) || (_FieldInfos.Count == 0)) return false; + + _FieldInfos.ZeroValues(); + foreach (KeyValuePair kvp in record) + { + FieldInfo fi = _FieldInfos[kvp.Key]; + if (fi != null) + fi.FValue = kvp.Value; + }; + + this.Position = position; + this.WriteByte(0x20); //_BEGIN RECORD_ // + + for (int i = 0; i < _FieldInfos.Count; i++) + { + byte[] def = new byte[_FieldInfos[i].FLength]; + if ((_FieldInfos[i].FType == FieldType.Numeric) || (_FieldInfos[i].FType == FieldType.Float)) + { + for (int x = 0; x < def.Length; x++) + def[x] = (byte)' '; + if (_FieldInfos[i].FValue != null) + { + string ddd = _FieldInfos[i].FLength.ToString(); + string nf = "{0,-" + ddd + "}"; + if (_FieldInfos[i].FDecimalPoint > 0) { nf = "{0,-" + ddd + ":0."; for (int x = 0; x < _FieldInfos[i].FDecimalPoint; x++) nf += "0"; nf += "}"; }; + byte[] buff = _cp.Encoding.GetBytes(String.Format(System.Globalization.CultureInfo.InvariantCulture,nf, _FieldInfos[i].FValue)); + if (buff.Length > def.Length) + throw new Exception("Numeric Value is too large: " + _FieldInfos[i].FValue.ToString()); + Array.Copy(buff, 0, def, def.Length - buff.Length, buff.Length); + }; + }; + if ((_FieldInfos[i].FType == FieldType.Memo) || (_FieldInfos[i].FType == FieldType.Binary) || (_FieldInfos[i].FType == FieldType.General) || (_FieldInfos[i].FType == FieldType.Picture)) + { + for (int x = 0; x < def.Length; x++) + def[x] = (byte)' '; + if (_FieldInfos[i].FValue != null) + { + byte[] buff = _cp.Encoding.GetBytes(_FieldInfos[i].FValue.ToString().Replace(",", ".")); + if (buff.Length > def.Length) + throw new Exception("Meme Value is too large: " + _FieldInfos[i].FValue.ToString()); + Array.Copy(buff, 0, def, def.Length - buff.Length, buff.Length); + }; + }; + if (_FieldInfos[i].FType == FieldType.Integer) + { + def = bc.GetBytes((int)_FieldInfos[i].FValue); + }; + if (_FieldInfos[i].FType == FieldType.Character) + { + if (_FieldInfos[i].FValue != null) + { + byte[] buff = _cp.Encoding.GetBytes(_FieldInfos[i].FValue.ToString()); + if (buff.Length > def.Length) + Array.Copy(buff, def, def.Length); + else + Array.Copy(buff, def, buff.Length); + } + else + { + byte[] buff = new byte[def.Length]; + Array.Copy(buff, def, def.Length); + }; + }; + if (_FieldInfos[i].FType == FieldType.Logical) + { + byte[] buff = new byte[] { (_FieldInfos[i].FValue == null) || (((bool)_FieldInfos[i].FValue) != true) ? (byte)((char)'F') : (byte)((char)'T')}; + if (buff.Length > def.Length) + Array.Copy(buff, def, def.Length); + else + Array.Copy(buff, def, buff.Length); + }; + if (_FieldInfos[i].FType == FieldType.Date) + { + for (int x = 0; x < def.Length; x++) + def[x] = (byte)' '; + if ((_FieldInfos[i].FValue != null) && (_FieldInfos[i].FValue is DateTime)) + { + byte[] buff = _cp.Encoding.GetBytes(((DateTime)_FieldInfos[i].FValue).ToString("yyyyMMdd")+" "); + Array.Copy(buff, 0, def, def.Length - buff.Length, buff.Length); + }; + }; + if (_FieldInfos[i].FType == FieldType.DateTime) + { + for (int x = 0; x < def.Length; x++) + def[x] = (byte)' '; + if ((_FieldInfos[i].FValue != null) && (_FieldInfos[i].FValue is DateTime)) + { + byte[] buff = _cp.Encoding.GetBytes(((DateTime)_FieldInfos[i].FValue).ToString("yyyyMMddHHmmss")); + Array.Copy(buff, 0, def, def.Length - buff.Length, buff.Length); + }; + }; + this.Write(def, 0, def.Length); + }; + return true; + } + + public uint WriteRecord(Dictionary record) + { + long pos = (long)this.HeaderSize + (long)this.records * (long)this.RecordSize; + bool res = WriteData(record, pos); + if (res) return this.records++; + return 0; + } + + public uint WriteRecord(object[] record) + { + if ((record == null) || (record.Length == 0)) return 0; + if ((_FieldInfos == null) || (_FieldInfos.Count == 0)) return 0; + Dictionary rec = new Dictionary(); + for (int i = 0; (i < record.Length) && (i < _FieldInfos.Count); i++) + rec.Add(_FieldInfos[i].FName, record[i]); + return WriteRecord(rec); + } + + public uint WriteRecord(uint index, Dictionary record) + { + if (index < 1) return 0; + + uint tmpi = index - 1; + if (tmpi > this.records) return 0; + long pos = (long)this.HeaderSize + (long)tmpi * (long)this.RecordSize; + bool res = WriteData(record, pos); + if (res) return tmpi == this.records ? ++this.records : index; + return 0; + } + + public uint WriteRecord(uint index, object[] record) + { + if ((record == null) || (record.Length == 0)) return 0; + if ((_FieldInfos == null) || (_FieldInfos.Count == 0)) return 0; + Dictionary rec = new Dictionary(); + for (int i = 0; (i < record.Length) && (i < _FieldInfos.Count); i++) + rec.Add(_FieldInfos[i].FName, record[i]); + return WriteRecord(index, rec); + } + + public uint WriteRecord(Dictionary record, long position) + { + ushort hs = HeaderSize; + ushort rs = RecordSize; + if (position < hs) return 0; + if (position > this.Length) return 0; + uint index = 1; + for (long i = hs; i < this.Length; i += (long)RecordSize, index++) + { + if (position == i) return WriteRecord(record, index); + if (position < i) break; + }; + return 0; + } + + public uint WriteRecord(object[] record, long position) + { + if ((record == null) || (record.Length == 0)) return 0; + if ((_FieldInfos == null) || (_FieldInfos.Count == 0)) return 0; + Dictionary rec = new Dictionary(); + for (int i = 0; (i < record.Length) && (i < _FieldInfos.Count); i++) + rec.Add(_FieldInfos[i].FName, record[i]); + return WriteRecord(rec, position); + } + + private Dictionary ReadData() + { + byte x20 = (byte)this.ReadByte(); //_BEGIN OF RECORD_ // + if (x20 != 0x20) return null; + + Dictionary result = new Dictionary(); + + for (int i = 0; i < _FieldInfos.Count; i++) + { + byte[] def = new byte[_FieldInfos[i].FLength]; + this.Read(def, 0, def.Length); + string dv = _cp.Encoding.GetString(def).Trim('\0').Trim(); + object val = dv; + + if (_FieldInfos[i].FType == FieldType.Numeric) + { + int tmi; long tml; float tmf; double tmd; + if (int.TryParse(dv, out tmi)) + val = tmi; + else if (long.TryParse(dv, out tml)) + val = tml; + else if (float.TryParse(dv, System.Globalization.NumberStyles.Any, System.Globalization.CultureInfo.InvariantCulture, out tmf)) + val = tmf; + else if (double.TryParse(dv, System.Globalization.NumberStyles.Any, System.Globalization.CultureInfo.InvariantCulture, out tmd)) + val = tmd; + }; + if (_FieldInfos[i].FType == FieldType.Float) + { + float tmf; double tmd; + if (float.TryParse(dv, System.Globalization.NumberStyles.Any, System.Globalization.CultureInfo.InvariantCulture, out tmf)) + val = tmf; + else if (double.TryParse(dv, System.Globalization.NumberStyles.Any, System.Globalization.CultureInfo.InvariantCulture, out tmd)) + val = tmd; + }; + if ((_FieldInfos[i].FType == FieldType.Memo) || (_FieldInfos[i].FType == FieldType.Binary) || (_FieldInfos[i].FType == FieldType.General) || (_FieldInfos[i].FType == FieldType.Picture)) + { + int tmi; long tml; + if (int.TryParse(dv, out tmi)) + val = tmi; + else if (long.TryParse(dv, out tml)) + val = tml; + }; + if (_FieldInfos[i].FType == FieldType.Integer) + { + val = bc.ToInt32(def, 0); + }; + // if (_FieldInfos[i].FType == FieldType.Characters) { }; + if (_FieldInfos[i].FType == FieldType.Logical) val = dv == "T"; + if (_FieldInfos[i].FType == FieldType.Date) + { + DateTime dt; + if(DateTime.TryParseExact(dv,"yyyyMMdd", null, System.Globalization.DateTimeStyles.None, out dt)) + val = dt; + }; + if (_FieldInfos[i].FType == FieldType.DateTime) + { + DateTime dt; + if (DateTime.TryParseExact(dv, "yyyyMMddHHmmss", null, System.Globalization.DateTimeStyles.None, out dt)) + val = dt; + }; + result.Add(_FieldInfos[i].FName, val); + }; + + return result; + } + + public Dictionary ReadRecord(uint index) + { + if (records == 0) return null; + + uint tmpi = index - 1; + if (tmpi > this.records) return null; + + this.Position = (long)this.HeaderSize + (long)tmpi * (long)this.RecordSize; + return ReadData(); + } + + public Dictionary ReadNext() + { + if (records == 0) return null; + if(this.Position < this.HeaderSize) this.Position = (long)this.HeaderSize; + return ReadData(); + } + + public System.Collections.Generic.IEnumerable> ReadAllRecords() + { + if (this.records > 0) + { + this.Position = this.HeaderSize; + for (uint i = 1; i <= records; i++) + yield return ReadData(); + }; + } + + public Dictionary this[uint index] + { + get { return ReadRecord(index); } + set { WriteRecord(index, value); } + } + + private void WriteRecordsCount() + { + long pos = this.Position; + this.Position = 4; + byte[] buff = bc.GetBytes(records); + this.Write(buff, 0, buff.Length); + this.Position = pos; + } + + public override void Close() + { + WriteRecordsCount(); + this.Position = (long)this.HeaderSize + (long)this.records * (long)this.RecordSize; + WriteByte(26); // TERMINAL BYTE + base.Close(); + } + } + + public enum FieldType : byte + { + Numeric = (byte)'N', + Float = (byte)'F', + Character = (byte)'C', + Logical = (byte)'L', + Date = (byte)'D', + Memo = (byte)'M', + Binary = (byte)'B', + General = (byte)'G', + Picture = (byte)'P', + Integer = (byte)'I', + DateTime = (byte)'T' + } + + public class FieldInfo + { + public string FName; + public byte FLength; + public byte FDecimalPoint = 0; + public FieldType FType; + + internal ushort offset = 0; + internal object FValue = null; + + public FieldInfo(string fName, byte fLength, FieldType fType) + { + this.FName = fName; + this.FLength = fLength; + this.FType = fType; + } + + public FieldInfo(string fName, byte fLength, byte fDecimalPoint, FieldType fType) + { + this.FName = fName; + this.FLength = fLength; + this.FType = fType; + this.FDecimalPoint = fDecimalPoint; + } + + public string GName + { + get + { + return this.FName.ToUpper(); + } + } + + public byte[] BName(Encoding encoding) + { + byte[] res = new byte[11]; + byte[] bb = encoding.GetBytes(this.GName); + for (int i = 0; (i < bb.Length) && (i < res.Length); i++) + res[i] = bb[i]; + return res; + } + } + + public class FieldInfos : List + { + public void Add(FieldInfo fi) + { + if (this.Count > 0) + foreach (FieldInfo ff in this) + if (ff.FName.ToUpper() == fi.FName.ToUpper()) + throw new Exception(String.Format("Field with name {0} already exists.", ff.FName)); + CheckValidLength(fi.FType, ref fi.FLength, ref fi.FDecimalPoint); + base.Add(fi); + } + + public void Add(string fName, byte fLength, FieldType fType) + { + if (this.Count > 0) + foreach (FieldInfo ff in this) + if (ff.FName.ToUpper() == fName.ToUpper()) + throw new Exception(String.Format("Field with name {0} already exists.", ff.FName)); + CheckValidLength(fType, ref fLength); + this.Add(new FieldInfo(fName, fLength, fType)); + } + + public void Add(string fName, byte fLength, byte fDecimalPoint, FieldType fType) + { + if (this.Count > 0) + foreach (FieldInfo ff in this) + if (ff.FName.ToUpper() == fName.ToUpper()) + throw new Exception(String.Format("Field with name {0} already exists.", ff.FName)); + CheckValidLength(fType, ref fLength, ref fDecimalPoint); + this.Add(new FieldInfo(fName, fLength, fDecimalPoint, fType)); + } + + public ushort RecordSize + { + get + { + int res = 1; + if (this.Count > 0) + for (int i = 0; i < this.Count; i++) + res += this[i].FLength; + if (res > ushort.MaxValue) + throw new Exception("Record size is too big! Max allowed size is " + ushort.MaxValue.ToString()); + return (ushort)res; + } + } + + public FieldInfo this[string fieldName] + { + get + { + if (this.Count > 0) + for (int i = 0; i < this.Count; i++) + if (fieldName == this[i].FName) + return this[i]; + return null; + } + } + + internal void ReIndex() + { + ushort res = 1; + if (this.Count > 0) + for (int i = 0; i < this.Count; i++) + { + this[i].offset = res; + res += this[i].FLength; + }; + } + + internal void ZeroValues() + { + if (this.Count > 0) + for (int i = 0; i < this.Count; i++) + this[i].FValue = null; + } + + private void CheckValidLength(FieldType fType, ref byte fLength) + { + byte fdc = 0; + CheckValidLength(fType, ref fLength, ref fdc); + } + + private void CheckValidLength(FieldType fType, ref byte fLength, ref byte fDecimalPoint) + { + switch (fType) + { + case FieldType.Numeric: + case FieldType.Float: + if (fLength > 20) fLength = 20; + if (fDecimalPoint >= fLength) fDecimalPoint = (byte)(fLength - 1); + break; + case FieldType.Character: + fDecimalPoint = 0; + break; + case FieldType.Logical: + fDecimalPoint = 0; + fLength = 1; + break; + case FieldType.Date: + case FieldType.Memo: + case FieldType.Binary: + case FieldType.General: + case FieldType.Picture: + fDecimalPoint = 0; + fLength = 10; + break; + case FieldType.Integer: + fDecimalPoint = 0; + fLength = 4; + break; + case FieldType.DateTime: + fDecimalPoint = 0; + fLength = 14; + break; + }; + } + } + + public class CodePageSet + { + public byte headerCode = 0; + public int codePage = 0; + public string codeName = "UNKNOWN"; + + public Encoding Encoding + { + get + { + return System.Text.Encoding.GetEncoding(codePage); + } + } + + public CodePageSet(){} + + public static CodePageSet Default + { + get + { + CodePageSet result = new CodePageSet(); + result.headerCode = 201; + result.codePage = 1251; + result.codeName = @"Russian Windows \ Windows-1251 [0xC9]"; + return result; + } + } + + public override string ToString() + { + return codeName; + } + } + + public class CodePageList : List + { + public CodePageList() + { + this.Add(204, 01257, "Baltic Windows"); + this.Add(079, 00950, "Chinese Big5 (Taiwan)"); + this.Add(077, 00936, "Chinese GBK (PRC)"); + this.Add(122, 00936, "PRC GBK"); + this.Add(031, 00852, "Czech OEM"); + this.Add(008, 00865, "Danish OEM"); + this.Add(009, 00437, "Dutch OEM"); + this.Add(010, 00850, "Dutch OEM*"); + this.Add(025, 00437, "English OEM (Great Britain)"); + this.Add(026, 00850, "English OEM (Great Britain)*"); + this.Add(027, 00437, "English OEM (US)"); + this.Add(055, 00850, "English OEM (US)*"); + this.Add(200, 01250, "Eastern European Windows"); + this.Add(100, 00852, "Eastern European MS-DOS"); + this.Add(151, 10029, "Eastern European Macintosh"); + this.Add(011, 00437, "Finnish OEM"); + this.Add(013, 00437, "French OEM"); + this.Add(014, 00850, "French OEM*"); + this.Add(029, 00850, "French OEM*2"); + this.Add(028, 00863, "French OEM (Canada)"); + this.Add(108, 00863, "French-Canadian MS-DOS"); + this.Add(015, 00437, "German OEM"); + this.Add(016, 00850, "German OEM*"); + this.Add(203, 01253, "Greek Windows"); + this.Add(106, 00737, "Greek MS-DOS (437G)"); + this.Add(134, 00737, "Greek OEM"); + this.Add(152, 00006, "Greek Macintosh"); + this.Add(121, 00949, "Hangul (Wansung)"); + this.Add(034, 00852, "Hungarian OEM"); + this.Add(103, 00861, "Icelandic MS-DOS"); + this.Add(017, 00437, "Italian OEM"); + this.Add(018, 00850, "Italian OEM*"); + this.Add(019, 00932, "Japanese Shift-JIS"); + this.Add(123, 00932, "Japanese Shift-JIS 2"); + this.Add(104, 00895, "Kamenicky (Czech) MS-DOS"); + this.Add(078, 00949, "Korean (ANSI/OEM)"); + this.Add(105, 00620, "Mazovia (Polish) MS-DOS"); + this.Add(102, 00865, "Nordic MS-DOS"); + this.Add(023, 00865, "Norwegian OEM"); + this.Add(035, 00852, "Polish OEM"); + this.Add(036, 00860, "Portuguese OEM"); + this.Add(037, 00850, "Portuguese OEM*"); + this.Add(064, 00852, "Romanian OEM"); + this.Add(201, 01251, "Russian Windows"); + this.Add(101, 00866, "Russian MS-DOS"); + this.Add(038, 00866, "Russian OEM"); + this.Add(150, 10007, "Russian Macintosh"); + this.Add(135, 00852, "Slovenian OEM"); + this.Add(089, 01252, "Spanish ANSI"); + this.Add(020, 00850, "Spanish OEM*"); + this.Add(021, 00437, "Swedish OEM"); + this.Add(022, 00850, "Swedish OEM*"); + this.Add(024, 00437, "Spanish OEM"); + this.Add(087, 01250, "Standard ANSI"); + this.Add(003, 01252, "Standard Windows ANSI Latin I"); + this.Add(002, 00850, "Standard International MS-DOS"); + this.Add(004, 10000, "Standard Macintosh"); + this.Add(120, 00950, "Taiwan Big 5"); + this.Add(080, 00874, "Thai (ANSI/OEM)"); + this.Add(124, 00874, "Thai Windows/MS–DOS"); + this.Add(202, 01254, "Turkish Windows"); + this.Add(107, 00857, "Turkish MS-DOS"); + this.Add(136, 00857, "Turkish OEM"); + this.Add(001, 00437, "US MS-DOS"); + this.Add(088, 01252, "Western European ANSI"); + this.Add(255, 01251, "Default Unknown"); + } + + private void Add(byte headerCode, int codePage, string codeName) + { + CodePageSet cpc = new CodePageSet(); + cpc.headerCode = headerCode; + cpc.codePage = codePage; + try + { + cpc.codeName = codeName + " "; + Encoding enc = System.Text.Encoding.GetEncoding(cpc.codePage); + if ((enc.EncodingName.ToUpper().IndexOf("DOS") >= 0) && (enc.EncodingName.ToUpper().IndexOf("WINDOWS") < 0) && (enc.EncodingName.ToUpper().IndexOf("OEM") < 0)) + cpc.codeName += @"\ DOS-" + cpc.codePage.ToString() + @" \ " + enc.EncodingName; + else if ((enc.EncodingName.ToUpper().IndexOf("DOS") < 0) && (enc.EncodingName.ToUpper().IndexOf("WINDOWS") >= 0) && (enc.EncodingName.ToUpper().IndexOf("OEM") < 0)) + cpc.codeName += @"\ Windows-" + cpc.codePage.ToString() + @" \ " + enc.EncodingName; + else if ((enc.EncodingName.ToUpper().IndexOf("DOS") < 0) && (enc.EncodingName.ToUpper().IndexOf("WINDOWS") < 0) && (enc.EncodingName.ToUpper().IndexOf("OEM") >= 0)) + cpc.codeName += @"\ OEM-" + cpc.codePage.ToString() + @" \ " + enc.EncodingName; + else + cpc.codeName += @" \ " + enc.EncodingName; + } + catch + { + cpc.codeName = codeName + @" \ --**--UNKNOWN--**-- "; + }; + cpc.codeName += String.Format(@" -- 0x{0:X2}", cpc.headerCode); + this.Add(cpc); + } + + public CodePageSet this[byte headerCode] + { + get + { + if (this.Count == 0) return new CodePageSet(); + foreach (CodePageSet cpc in this) + if (cpc.headerCode == headerCode) + return cpc; + return new CodePageSet(); + } + } + + public CodePageSet this[int codePage] + { + get + { + if (this.Count == 0) return new CodePageSet(); + foreach (CodePageSet cpc in this) + if (cpc.codePage == codePage) + return cpc; + return new CodePageSet(); + } + } + + public CodePageSet this[string codeName] + { + get + { + if (this.Count == 0) return new CodePageSet(); + foreach (CodePageSet cpc in this) + if (cpc.codeName == codeName) + return cpc; + return new CodePageSet(); + } + } + } + + public class MyBitConverter + { + public MyBitConverter() {} + + public MyBitConverter(bool IsLittleEndian) { this.isLittleEndian = IsLittleEndian; } + + private bool isLittleEndian = true; + + public bool IsLittleEndian { get { return isLittleEndian; } set { isLittleEndian = value; } } // should default to false, which is what we want for Empire + + public byte[] GetBytes(bool value) + { + if (IsLittleEndian) + { + return System.BitConverter.GetBytes(value); + } + else + { + byte[] res = System.BitConverter.GetBytes(value); + Array.Reverse(res); + return res; + } + } + + public byte[] GetBytes(char value) + { + if (IsLittleEndian) + { + return System.BitConverter.GetBytes(value); + } + else + { + byte[] res = System.BitConverter.GetBytes(value); + Array.Reverse(res); + return res; + } + } + + public byte[] GetBytes(double value) + { + if (IsLittleEndian) + { + return System.BitConverter.GetBytes(value); + } + else + { + byte[] res = System.BitConverter.GetBytes(value); + Array.Reverse(res); + return res; + } + } + + public byte[] GetBytes(float value) + { + if (IsLittleEndian) + { + return System.BitConverter.GetBytes(value); + } + else + { + byte[] res = System.BitConverter.GetBytes(value); + Array.Reverse(res); + return res; + } + } + + public byte[] GetBytes(int value) + { + if (IsLittleEndian) + { + return System.BitConverter.GetBytes(value); + } + else + { + byte[] res = System.BitConverter.GetBytes(value); + Array.Reverse(res); + return res; + } + } + + public byte[] GetBytes(long value) + { + if (IsLittleEndian) + { + return System.BitConverter.GetBytes(value); + } + else + { + byte[] res = System.BitConverter.GetBytes(value); + Array.Reverse(res); + return res; + } + } + + public byte[] GetBytes(short value) + { + if (IsLittleEndian) + { + return System.BitConverter.GetBytes(value); + } + else + { + byte[] res = System.BitConverter.GetBytes(value); + Array.Reverse(res); + return res; + } + } + + public byte[] GetBytes(uint value) + { + if (IsLittleEndian) + { + return System.BitConverter.GetBytes(value); + } + else + { + byte[] res = System.BitConverter.GetBytes(value); + Array.Reverse(res); + return res; + } + } + + public byte[] GetBytes(ulong value) + { + if (IsLittleEndian) + { + return System.BitConverter.GetBytes(value); + } + else + { + byte[] res = System.BitConverter.GetBytes(value); + Array.Reverse(res); + return res; + } + } + + public byte[] GetBytes(ushort value) + { + if (IsLittleEndian) + { + return System.BitConverter.GetBytes(value); + } + else + { + byte[] res = System.BitConverter.GetBytes(value); + Array.Reverse(res); + return res; + } + } + + public short ToInt16(byte[] value, int startIndex) + { + if (IsLittleEndian) + { + return System.BitConverter.ToInt16(value, startIndex); + } + else + { + byte[] res = (byte[])value.Clone(); + Array.Reverse(res); + return System.BitConverter.ToInt16(res, value.Length - sizeof(Int16) - startIndex); + } + } + + public int ToInt32(byte[] value, int startIndex) + { + if (IsLittleEndian) + { + return System.BitConverter.ToInt32(value, startIndex); + } + else + { + byte[] res = (byte[])value.Clone(); + Array.Reverse(res); + return System.BitConverter.ToInt32(res, value.Length - sizeof(Int32) - startIndex); + } + } + + public long ToInt64(byte[] value, int startIndex) + { + if (IsLittleEndian) + { + return System.BitConverter.ToInt64(value, startIndex); + } + else + { + byte[] res = (byte[])value.Clone(); + Array.Reverse(res); + return System.BitConverter.ToInt64(res, value.Length - sizeof(Int64) - startIndex); + } + } + + public float ToSingle(byte[] value, int startIndex) + { + if (IsLittleEndian) + { + return System.BitConverter.ToSingle(value, startIndex); + } + else + { + byte[] res = (byte[])value.Clone(); + Array.Reverse(res); + return System.BitConverter.ToSingle(res, value.Length - sizeof(Single) - startIndex); + } + } + + public string ToString(byte[] value) + { + if (IsLittleEndian) + { + return System.BitConverter.ToString(value); + } + else + { + byte[] res = (byte[])value.Clone(); + Array.Reverse(res); + return System.BitConverter.ToString(res); + } + } + + public string ToString(byte[] value, int startIndex) + { + if (IsLittleEndian) + { + return System.BitConverter.ToString(value, startIndex); + } + else + { + byte[] res = (byte[])value.Clone(); + Array.Reverse(res, startIndex, value.Length - startIndex); + return System.BitConverter.ToString(res, startIndex); + } + } + + public string ToString(byte[] value, int startIndex, int length) + { + if (IsLittleEndian) + { + return System.BitConverter.ToString(value, startIndex, length); + } + else + { + byte[] res = (byte[])value.Clone(); + Array.Reverse(res, startIndex, length); + return System.BitConverter.ToString(res, startIndex, length); + } + } + + public ushort ToUInt16(byte[] value, int startIndex) + { + if (IsLittleEndian) + { + return System.BitConverter.ToUInt16(value, startIndex); + } + else + { + byte[] res = (byte[])value.Clone(); + Array.Reverse(res); + return System.BitConverter.ToUInt16(res, value.Length - sizeof(UInt16) - startIndex); + } + } + + + public uint ToUInt32(byte[] value, int startIndex) + { + if (IsLittleEndian) + { + return System.BitConverter.ToUInt32(value, startIndex); + } + else + { + byte[] res = (byte[])value.Clone(); + Array.Reverse(res); + return System.BitConverter.ToUInt32(res, value.Length - sizeof(UInt32) - startIndex); + } + } + + public ulong ToUInt64(byte[] value, int startIndex) + { + if (IsLittleEndian) + { + return System.BitConverter.ToUInt64(value, startIndex); + } + else + { + byte[] res = (byte[])value.Clone(); + Array.Reverse(res); + return System.BitConverter.ToUInt64(res, value.Length - sizeof(UInt64) - startIndex); + } + } + } +} diff --git a/SOLVER/dkxce.Route.Shp2Rt/Properties/AssemblyInfo.cs b/SOLVER/dkxce.Route.Shp2Rt/Properties/AssemblyInfo.cs new file mode 100644 index 0000000..16f9b8f --- /dev/null +++ b/SOLVER/dkxce.Route.Shp2Rt/Properties/AssemblyInfo.cs @@ -0,0 +1,35 @@ +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +[assembly: AssemblyTitle("dkxce.Route.Shp2Rt")] +[assembly: AssemblyDescription("Модуль подготовки файлов графа из Shape'ов")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("Milok Zbrozek ")] +[assembly: AssemblyProduct("dkxce.Route.Shp2Rt")] +[assembly: AssemblyCopyright("Copyright © Milok Zbrozek 2021")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// Setting ComVisible to false makes the types in this assembly not visible +// to COM components. If you need to access a type in this assembly from +// COM, set the ComVisible attribute to true on that type. +[assembly: ComVisible(false)] + +// The following GUID is for the ID of the typelib if this project is exposed to COM +[assembly: Guid("b0ee0b7f-fcf5-4d19-8a50-dfb689320d69")] + +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +// You can specify all the values or you can default the Revision and Build Numbers +// by using the '*' as shown below: +[assembly: AssemblyVersion("21.12.21.3")] +[assembly: AssemblyFileVersion("21.12.21.3")] diff --git a/SOLVER/dkxce.Route.Shp2Rt/Route.Shp2Rt.cs b/SOLVER/dkxce.Route.Shp2Rt/Route.Shp2Rt.cs new file mode 100644 index 0000000..c238c64 --- /dev/null +++ b/SOLVER/dkxce.Route.Shp2Rt/Route.Shp2Rt.cs @@ -0,0 +1,3813 @@ +/* + * C# Class by Milok Zbrozek + * Ìîäóëü ïîäãîòîâêè ôàéëîâ ãðàôà èç Shape'îâ + * GARMIN èëè OSM2SHP + * Author: Milok Zbrozek + * Âåðñèÿ: 211221DA + * + * Ïîääåðæèâàåò èñòî÷íèêè äàííûõ: GARMIN, OSM, OSM2SHP, WATER (OSM) + * + */ + +using System; +using System.IO; +using System.Collections; +using System.Collections.Generic; +using System.Text; +using System.Text.RegularExpressions; +using System.Xml; +using System.Xml.Serialization; + +using dkxce.Route.Classes; + +namespace dkxce.Route.Shp2Rt +{ + ///

+ /// Garmin Shapes 2 Graph Files Converter + /// + public class ShpToGraphConverter + { + private const string _Converter = "dkxce.Route.Shp2Rt/21.12.21.3-V4-win32"; + + /// + /// Èíôîðìàöèÿ î ëèíèè Shape ôàéëà + /// + private class TLine + { + /// + /// Bounds + /// + public double[] box; + /// + /// Numer of line parts + /// + public int numParts; + /// + /// Number of points + /// + public int numPoints; + /// + /// Links To Parts Start Point + /// + public int[] parts; + /// + /// Points + /// + public PointF[] points; + + public override string ToString() + { + return "Pts in line: " + numPoints.ToString(); + } + } + + /// + /// Èíôîðìàöèÿ î çàïðåòå ïîâîðîòà + /// + private class TurnRestriction + { + /// + /// Ïðè äâèæåíèè ïî ëèíèè fromLine + /// + public uint fromLine = 0; + /// + /// ×åðåç óçåë throughNode + /// + public uint throughNode = 0; + /// + /// Íåëüçÿ ïîâåðíóòü â LINK_ID + /// + public int toLineLinkID = 0; + + /// + /// Ñîçäàåì çàïðåò ïîâîðîòà + /// + /// Ïðè äâèæåíèè ïî ëèíèè fromLine + /// ×åðåç óçåë throughNode + /// Íåëüçÿ ïîâåðíóòü â LINK_ID + public TurnRestriction(uint fromLine, uint throughNode, int toLineLinkID) + { + this.fromLine = fromLine; + this.throughNode = throughNode; + this.toLineLinkID = toLineLinkID; + } + + public override string ToString() + { + return fromLine.ToString() + "->-" + throughNode.ToString() + "->-" + toLineLinkID; + } + } + + // çàãîëîâêè ôàéëîâ + private static byte[] header_RMLINES = new byte[] { 0x52, 0x4D, 0x4C, 0x49, 0x4E, 0x45, 0x53 }; + private static byte[] header_RMSEGMENTS = new byte[] { 0x52, 0x4D, 0x53, 0x45, 0x47, 0x4D, 0x45, 0x4E, 0x54, 0x53 }; + private static byte[] header_RMGRAF2 = new byte[] { 0x52, 0x4D, 0x47, 0x52, 0x41, 0x46, 0x32 }; + private static byte[] header_RMGRAF3 = new byte[] { 0x52, 0x4D, 0x47, 0x52, 0x41, 0x46, 0x33 }; + private static byte[] header_RMINDEX = new byte[] { 0x52, 0x4D, 0x49, 0x4E, 0x44, 0x45, 0x58 }; + private static byte[] header_RMPOINTNLL0 = new byte[] { 0x52, 0x4D, 0x50, 0x4F, 0x49, 0x4E, 0x54, 0x4E, 0x4C, 0x4C, 0x30 }; + private static byte[] header_RMPOINTNLL1 = new byte[] { 0x52, 0x4D, 0x50, 0x4F, 0x49, 0x4E, 0x54, 0x4E, 0x4C, 0x4C, 0x31 }; + private static byte[] header_RMLINKIDS = new byte[] { 0x52, 0x4D, 0x4C, 0x49, 0x4E, 0x4B, 0x49, 0x44, 0x53 }; + private static byte[] header_RMLATTRIB = new byte[] { 0x52, 0x4D, 0x4C, 0x41, 0x54, 0x54, 0x52, 0x49, 0x42 }; + private static byte[] header_RMTURNRSTR = new byte[] { 0x52, 0x4D, 0x54, 0x55, 0x52, 0x4E, 0x52, 0x53, 0x54, 0x52 }; + private static byte[] header_RMTMC = new byte[] { 0x52, 0x4D, 0x54, 0x4D, 0x43 }; + + private const byte const_LineRecordLength = 15; + private const byte const_SegmRecordLength = 30; + + private double[] bounds_box = new double[] { double.MaxValue, double.MaxValue, double.MinValue, double.MinValue }; + + private bool writeLinesNamesFile = true; + /// + /// Ïèñàòü ëè ôàéë íàèìåíîâàíèÿ äîðîã + /// + public bool WriteLinesNamesFile { get { return writeLinesNamesFile; } set { writeLinesNamesFile = true; } } + + /// + /// Ñïèñîê òî÷åê ñòûêîâêè ìåæðàéîííûõ ìàðøðóòîâ + /// + private List analyse_RGNodes = new List(); + + /// + /// Èìåíà ïîëåé DBF ôàéëà + /// + private ShapeFields stream_ShapeFile_FieldNames; + + /// + /// Ìàêñèìàëüíàÿ îøèáêà â ðàñ÷åòàõ + /// + private const Single const_maxError = (Single)1e-6; + + /// + /// Êîäèðîâêà DBF ôàéëà + /// + private System.Text.Encoding stream_DBFEncoding; + + /// + /// Èìÿ shp ôàéëà + /// + private string stream_ShapeFileName; + /// + /// Èìÿ ôàéëà ãðàôà + /// + private string stream_FileName; + /// + /// Èìÿ ïðåôèêñà ôàéëîâ ãðàôà + /// + private string stream_FileMain; + + /// + /// Îáùåå ÷èñëî ëèíèé + /// + private int analyse_LinesCount = 0; + private int analyse_LinesDCount = 0; + /// + /// Îáùåå ÷èñëî ñåãìåíòîâ + /// + private int analyse_SegmentsCount = 0; + + /// + /// Pointer to Lines + /// + private Stream stream_Lines; + /// + /// Pointer to Segments + /// + private Stream stream_LinesSegments; + /// + /// Pointer to Line Index + /// + private Stream stream_LineIndex; + /// + /// Pointer to Line Attributes + /// + private Stream stream_LineAttr; + /// + /// Pointer to Line TMC + /// + private Stream stream_TMC; + /// + /// Pointer to WriteLinesNamesFile + /// + private Stream stream_Names; + + /// + /// Óçëû ãðàôà + /// + private List analyse_Nodes = new List(); + + /// + /// Ìàêñèìàëüíîå äëèíà ëèíèè + /// + private float analyse_maxLengthBetweenNodes = 0; + /// + /// Ìàêñèìàëüíîå âðåìÿ äâèæåíèÿ ïî ëèíèè + /// + private float analyse_maxTimeBetweenNodes = 0; + /// + /// Ìàêñèìàëüíàÿ îöåíêà ìåæäó óçëàìè + /// + private float analyse_maxCostBetweenNodes = 0; + + /// + /// Ñïèñîê íàéäåííûõ çàïðåòîâ ïîâîðîòîâ + /// + private List analyse_NoTurns = new List(); + + /// + /// ×èñëî äîáàâëåííûõ çàïðåòîâ ïîâîðîòîâ + /// + private int analyse_NoTurnsAdded = 0; + + /// + /// Ïîäñ÷åò àòðèáóòèâíîé èíôîðìàöèè + /// + public bool analyse_attributes_do = false; + private int[] analyse_attributes_bit = new int[56]; + private int[] analyse_attributes_val = new int[10]; + + /// + /// Íîìåð ðåãèîíà + /// + private int analyse_regionID = 0; + + /// + /// Íîìåð ðåãèîíà + /// + public int RegionID { get { return analyse_regionID; } set { analyse_regionID = value; } } + + /// + /// Êîíâåðòîð Shape ôàéëà + /// + /// Ïîëíûé ïóòü + public ShpToGraphConverter(string ShapeFileName) + { + Create(ShapeFileName, 0); + } + + /// + /// Êîíâåðòîð Shape ôàéëà + /// + /// Ïîëíûé ïóòü + /// Íîìåð ðåãèîíà + public ShpToGraphConverter(string ShapeFileName, int regionID) + { + Create(ShapeFileName, regionID); + } + + /// + /// Êîíâåðòîð Shape ôàéëà + /// + /// Ïîëíûé ïóòü + /// Íîìåð ðåãèîíà + private void Create(string ShapeFileName, int regionID) + { + this.analyse_regionID = regionID; + + stream_NumberFormat = (System.Globalization.NumberFormatInfo)stream_CultureInfo.NumberFormat.Clone(); + stream_NumberFormat.NumberDecimalSeparator = "."; + this.stream_ShapeFileName = ShapeFileName; + + //shpf = new ShapesFields(); + //ShapesFields.Save(ShapesFields.GetCurrentDir()+@"\fldcfg.xml", shpf); + + string fieldCongifDefault = XMLSaved.GetCurrentDir() + @"\default.fldcfg.xml"; + string fieldConfigFileName = Path.GetDirectoryName(stream_ShapeFileName) + @"\" + Path.GetFileNameWithoutExtension(stream_ShapeFileName) + ".fldcfg.xml"; + string fieldConfigFileDef = Path.GetDirectoryName(stream_ShapeFileName) + @"\default.fldcfg.xml"; + if (File.Exists(fieldConfigFileName)) + stream_ShapeFile_FieldNames = ShapeFields.Load(fieldConfigFileName); + else if (File.Exists(fieldConfigFileDef)) + stream_ShapeFile_FieldNames = ShapeFields.Load(fieldConfigFileDef); + else if (File.Exists(fieldCongifDefault)) + stream_ShapeFile_FieldNames = ShapeFields.Load(fieldCongifDefault); + else + stream_ShapeFile_FieldNames = new ShapeFields(); + + stream_DBFEncoding = stream_ShapeFile_FieldNames.CodePage; + } + + DateTime started = DateTime.MinValue; + + // todo = 0 - ïîëÿ âñåãäà äîëæíû áûòü (LinkID, GarminType, OSM_ID, OSM_SURFACE, SpeedLimit, OneWay); îøèáêà åñëè ïîëåé íåò + // todo = 1 - æåëàòåëüíûå ïîëÿ (OSM_TYPE, OSM_SURFACE, GarminType); íåò îøèáêè åñëè íåò ïîëåé èëè íå óêàçàíû + // todo = 2 - ïðîâåðÿþòñÿ, åñëè óêàçàíû (ROUTE_LEVEL, ROUTE_SPEED, TMC, RGNODE, ...); îøèáêà åñëè óêàçàíû, íî íåò ïîëåé + // todo = 3 - æåëàòåëüíûå ïîëÿ (Length, Name, TurnRestrictions); îøèáêà åñëè óêàçàíû, íî íåò ïîëåé + private void CheckFields(string name, ref string f, List flds, ref string fieldsOk, ref string fieldsBad, ref string fieldsErr, ref string fieldsEdd, ref bool raiseNoFields, byte todo, char fType, Hashtable fTypes, ref string cautions) + { + if ((f != null) && (f != String.Empty) && (flds.Contains(f)) && (fType != '0') && ((string)fTypes[f]!= fType.ToString())) + cautions += name + " is not `" + fType.ToString() + "`, "; + + string[] ff = new string[0]; + if ((f != null) && (f != String.Empty)) ff = f.Split(new char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries); + + bool fCont = false; + foreach(string fff in ff) + if (flds.Contains(fff)) + { + f = fff; + fCont = true; + break; + }; + + if (todo == 0) + { + if (fCont) + fieldsOk += name + ", "; + else + { + fieldsErr += name + ", "; + fieldsEdd += name + ", "; + raiseNoFields = true; + }; + }; + if (todo == 1) + { + if (fCont) + fieldsOk += name + ", "; + else + fieldsErr += name + ", "; + }; + if (todo == 2) + { + if ((f != null) && (f != String.Empty)) + { + if (fCont) + fieldsOk += name + ", "; + else + { + fieldsErr += name + ", "; + fieldsEdd += name + ", "; + raiseNoFields = true; + }; + } + else + fieldsBad += name + ", "; + }; + if (todo == 3) + { + if ((f != null) && (f != String.Empty)) + { + if (fCont) + fieldsOk += name + ", "; + else + { + fieldsErr += name + ", "; + fieldsEdd += name + ", "; + raiseNoFields = true; + }; + } + else + fieldsErr += name + ", "; + }; + } + + /// + /// Êîíâåðòàöèÿ Shape ôàéëà â ãðàô + /// + /// + public void ConvertTo(string GraphFileName) + { + ConvertTo(GraphFileName, null); + } + + /// + /// Êîíâåðòàöèÿ Shape ôàéëà â ãðàô + /// + /// + public void ConvertTo(string GraphFileName, string regionName) + { + ConsoleColor cc = Console.ForegroundColor; + + Console.ForegroundColor = ConsoleColor.White; + Console.WriteLine("dkxce Shape-Graph Converter"); + Console.WriteLine(_Converter); + Console.WriteLine("Copyrights (c) 2014 - 2021 "); + Console.WriteLine("Supported sources by *.fldcfg.xml: GARMIN/OSM/OSM2SHP/WATER"); + Console.WriteLine(); + Console.ForegroundColor = cc; + + Console.Write("Lines shape : "); + Console.ForegroundColor = ConsoleColor.Yellow; + Console.Write(Path.GetFileName(stream_ShapeFileName)); + Console.ForegroundColor = cc; + Console.WriteLine(", " + GetFileSize(new FileInfo(stream_ShapeFileName).Length)); + + string dbffile = stream_ShapeFileName.Substring(0, stream_ShapeFileName.Length - 4) + ".dbf"; + Console.Write("Lines fields : "); + Console.ForegroundColor = ConsoleColor.Yellow; + Console.Write(Path.GetFileName(dbffile)); + Console.ForegroundColor = cc; + Console.WriteLine(", " + GetFileSize(new FileInfo(dbffile).Length)); + + string fieldConfigFileName = Path.GetDirectoryName(stream_ShapeFileName) + @"\" + Path.GetFileNameWithoutExtension(stream_ShapeFileName) + ".fldcfg.xml"; + if (File.Exists(fieldConfigFileName)) + { + Console.Write("Config file : "); + Console.ForegroundColor = ConsoleColor.Yellow; + Console.Write(Path.GetFileName(fieldConfigFileName)); + Console.ForegroundColor = cc; + Console.WriteLine(", " + GetFileSize(new FileInfo(fieldConfigFileName).Length)); + } + else + { + fieldConfigFileName = Path.GetDirectoryName(stream_ShapeFileName) + @"\default.fldcfg.xml"; + Console.Write("Config file : "); + Console.ForegroundColor = ConsoleColor.Yellow; + Console.Write(Path.GetFileName(fieldConfigFileName)); + Console.ForegroundColor = cc; + Console.WriteLine(", " + GetFileSize(new FileInfo(fieldConfigFileName).Length)); + }; + + Console.ForegroundColor = cc; + Console.Write("Source type : "); + Console.ForegroundColor = ConsoleColor.Yellow; + + List flds = new List(); + Hashtable fht = new Hashtable(); + string fieldsOk = ""; + string fieldsBad = ""; + string fieldsErr = ""; + string fieldsEdd = ""; + string cautions = ""; + bool raiseNoFields = false; + // READ FIELDS + { + try + { + string[] FIELDS = ReadDBFFields(this.stream_ShapeFileName, out fht); + if ((FIELDS == null) || (FIELDS.Length == 0)) + throw new Exception("No Any Fields Found"); + flds.AddRange(FIELDS); + } + catch (Exception ex) + { + Console.WriteLine(); + Console.WriteLine("Error: Cannot read DBF File"); + Console.WriteLine(ex.Message); + }; + + + if (stream_ShapeFile_FieldNames.SOURCE == "GARMIN") + { + Console.WriteLine(stream_ShapeFile_FieldNames.SOURCE); + + CheckFields("LinkId", ref stream_ShapeFile_FieldNames.fldLinkId, flds, ref fieldsOk, ref fieldsBad, ref fieldsErr, ref fieldsEdd, ref raiseNoFields, 0, 'N', fht, ref cautions); + CheckFields("GarminType", ref stream_ShapeFile_FieldNames.fldGarminType, flds, ref fieldsOk, ref fieldsBad, ref fieldsErr, ref fieldsEdd, ref raiseNoFields, 0, 'C', fht, ref cautions); + } + else if (stream_ShapeFile_FieldNames.SOURCE == "WATER") + { + Console.WriteLine(stream_ShapeFile_FieldNames.SOURCE); + + CheckFields("OSM_ID", ref stream_ShapeFile_FieldNames.fldOSM_ID, flds, ref fieldsOk, ref fieldsBad, ref fieldsErr, ref fieldsEdd, ref raiseNoFields, 0, 'N', fht, ref cautions); + } + else if (stream_ShapeFile_FieldNames.SOURCE == "OSM") + { + Console.WriteLine(stream_ShapeFile_FieldNames.SOURCE); + + CheckFields("OSM_ID", ref stream_ShapeFile_FieldNames.fldOSM_ID, flds, ref fieldsOk, ref fieldsBad, ref fieldsErr, ref fieldsEdd, ref raiseNoFields, 0, 'N', fht, ref cautions); + CheckFields("OSM_SURFACE", ref stream_ShapeFile_FieldNames.fldOSM_SURFACE, flds, ref fieldsOk, ref fieldsBad, ref fieldsErr, ref fieldsEdd, ref raiseNoFields, 0, 'C', fht, ref cautions); + } + else if ((stream_ShapeFile_FieldNames.SOURCE == "OSM2") || (stream_ShapeFile_FieldNames.SOURCE == "OSM2SHP")) + { + Console.WriteLine(stream_ShapeFile_FieldNames.SOURCE); + + string nodes_file = Path.GetDirectoryName(stream_ShapeFileName).Trim('\\') + @"\[NODES].shp"; + string nodes_dbff = Path.GetDirectoryName(stream_ShapeFileName).Trim('\\') + @"\[NODES].dbf"; + if (!String.IsNullOrEmpty(stream_ShapeFile_FieldNames.fldOSM_ADDIT_DBF_NODES)) + { + nodes_file = Path.GetDirectoryName(stream_ShapeFileName).Trim('\\') + @"\" + stream_ShapeFile_FieldNames.fldOSM_ADDIT_DBF_NODES; + try { nodes_dbff = nodes_file.Replace(Path.GetExtension(nodes_file), ".dbf"); } catch { }; + }; + Console.ForegroundColor = cc; + Console.Write("Nodes shape : "); + if (File.Exists(nodes_file)) + { + Console.ForegroundColor = ConsoleColor.Yellow; + Console.Write(Path.GetFileName(nodes_file)); + Console.ForegroundColor = cc; + Console.WriteLine(", " + GetFileSize(new FileInfo(nodes_file).Length)); + } + else + { + Console.ForegroundColor = ConsoleColor.Red; + Console.Write(Path.GetFileName(nodes_file)); + Console.ForegroundColor = cc; + Console.WriteLine(" - no file"); + }; + Console.Write("Nodes fields : "); + if (File.Exists(nodes_dbff)) + { + Console.ForegroundColor = ConsoleColor.Yellow; + Console.Write(Path.GetFileName(nodes_dbff)); + Console.ForegroundColor = cc; + Console.WriteLine(", " + GetFileSize(new FileInfo(nodes_dbff).Length)); + } + else + { + Console.ForegroundColor = ConsoleColor.Red; + Console.Write(Path.GetFileName(nodes_dbff)); + Console.ForegroundColor = cc; + Console.WriteLine(" - no file"); + }; + + string noturns_file = Path.GetDirectoryName(stream_ShapeFileName).Trim('\\') + @"\[NOTURN].shp"; + if (!String.IsNullOrEmpty(stream_ShapeFile_FieldNames.fldOSM_ADDIT_DBF_NOTURN)) + noturns_file = Path.GetDirectoryName(stream_ShapeFileName).Trim('\\') + @"\" + stream_ShapeFile_FieldNames.fldOSM_ADDIT_DBF_NOTURN; + Console.ForegroundColor = cc; + Console.Write("NoTurn file : "); + if (File.Exists(noturns_file)) + { + Console.ForegroundColor = ConsoleColor.Yellow; + Console.Write(Path.GetFileName(noturns_file)); + Console.ForegroundColor = cc; + Console.WriteLine(", " + GetFileSize(new FileInfo(noturns_file).Length)); + } + else + { + Console.ForegroundColor = ConsoleColor.Red; + Console.Write(Path.GetFileName(noturns_file)); + Console.ForegroundColor = cc; + Console.WriteLine(" - no file"); + }; + + CheckFields("OSM_ID", ref stream_ShapeFile_FieldNames.fldOSM_ID, flds, ref fieldsOk, ref fieldsBad, ref fieldsErr, ref fieldsEdd, ref raiseNoFields, 0, 'N', fht, ref cautions); + CheckFields("OSM_TYPE", ref stream_ShapeFile_FieldNames.fldOSM_TYPE, flds, ref fieldsOk, ref fieldsBad, ref fieldsErr, ref fieldsEdd, ref raiseNoFields, 1, 'C', fht, ref cautions); + CheckFields("OSM_SURFACE", ref stream_ShapeFile_FieldNames.fldOSM_SURFACE, flds, ref fieldsOk, ref fieldsBad, ref fieldsErr, ref fieldsEdd, ref raiseNoFields, 1, 'C', fht, ref cautions); + CheckFields("GarminType", ref stream_ShapeFile_FieldNames.fldGarminType, flds, ref fieldsOk, ref fieldsBad, ref fieldsErr, ref fieldsEdd, ref raiseNoFields, 1, 'C', fht, ref cautions); + + CheckFields("SERVICE", ref stream_ShapeFile_FieldNames.fldOSM_ADDIT_SERVICE, flds, ref fieldsOk, ref fieldsBad, ref fieldsErr, ref fieldsEdd, ref raiseNoFields, 2, 'C', fht, ref cautions); + CheckFields("JUNCTION", ref stream_ShapeFile_FieldNames.fldOSM_ADDIT_JUNCTION, flds, ref fieldsOk, ref fieldsBad, ref fieldsErr, ref fieldsEdd, ref raiseNoFields, 2, 'C', fht, ref cautions); + CheckFields("LANES", ref stream_ShapeFile_FieldNames.fldOSM_ADDIT_LANES, flds, ref fieldsOk, ref fieldsBad, ref fieldsErr, ref fieldsEdd, ref raiseNoFields, 2, 'C', fht, ref cautions); + CheckFields("MAXACTUAL", ref stream_ShapeFile_FieldNames.fldOSM_ADDIT_MAXACTUAL, flds, ref fieldsOk, ref fieldsBad, ref fieldsErr, ref fieldsEdd, ref raiseNoFields, 2, 'C', fht, ref cautions); + }; + // other fields + if (stream_ShapeFile_FieldNames.SOURCE == "WATER") + { + CheckFields("SpeedLimit", ref stream_ShapeFile_FieldNames.fldSpeedLimit, flds, ref fieldsOk, ref fieldsBad, ref fieldsErr, ref fieldsEdd, ref raiseNoFields, 1, 'N', fht, ref cautions); + CheckFields("RouteSpeed", ref stream_ShapeFile_FieldNames.fldRouteSpeed, flds, ref fieldsOk, ref fieldsBad, ref fieldsErr, ref fieldsEdd, ref raiseNoFields, 1, 'N', fht, ref cautions); + CheckFields("OneWay", ref stream_ShapeFile_FieldNames.fldOneWay, flds, ref fieldsOk, ref fieldsBad, ref fieldsErr, ref fieldsEdd, ref raiseNoFields, 1, '0', fht, ref cautions); + CheckFields("Length", ref stream_ShapeFile_FieldNames.fldLength, flds, ref fieldsOk, ref fieldsBad, ref fieldsErr, ref fieldsEdd, ref raiseNoFields, 1, 'F', fht, ref cautions); + CheckFields("Name", ref stream_ShapeFile_FieldNames.fldName, flds, ref fieldsOk, ref fieldsBad, ref fieldsErr, ref fieldsEdd, ref raiseNoFields, 1, 'C', fht, ref cautions); + } + else + { + CheckFields("SpeedLimit", ref stream_ShapeFile_FieldNames.fldSpeedLimit, flds, ref fieldsOk, ref fieldsBad, ref fieldsErr, ref fieldsEdd, ref raiseNoFields, 0, 'N', fht, ref cautions); + CheckFields("RouteLevel", ref stream_ShapeFile_FieldNames.fldRouteLevel, flds, ref fieldsOk, ref fieldsBad, ref fieldsErr, ref fieldsEdd, ref raiseNoFields, 2, 'N', fht, ref cautions); + CheckFields("RouteSpeed", ref stream_ShapeFile_FieldNames.fldRouteSpeed, flds, ref fieldsOk, ref fieldsBad, ref fieldsErr, ref fieldsEdd, ref raiseNoFields, 2, 'N', fht, ref cautions); + CheckFields("OneWay", ref stream_ShapeFile_FieldNames.fldOneWay, flds, ref fieldsOk, ref fieldsBad, ref fieldsErr, ref fieldsEdd, ref raiseNoFields, 0, '0', fht, ref cautions); + CheckFields("Length", ref stream_ShapeFile_FieldNames.fldLength, flds, ref fieldsOk, ref fieldsBad, ref fieldsErr, ref fieldsEdd, ref raiseNoFields, (byte)( stream_ShapeFile_FieldNames.SOURCE == "GARMIN" ? 3 : 1), 'F', fht, ref cautions); + CheckFields("Name", ref stream_ShapeFile_FieldNames.fldName, flds, ref fieldsOk, ref fieldsBad, ref fieldsErr, ref fieldsEdd, ref raiseNoFields, 3, 'C', fht, ref cautions); + CheckFields("TurnRestrictions", ref stream_ShapeFile_FieldNames.fldTurnRstr, flds, ref fieldsOk, ref fieldsBad, ref fieldsErr, ref fieldsEdd, ref raiseNoFields, (byte)(stream_ShapeFile_FieldNames.SOURCE == "GARMIN" ? 3 : 1), 'C', fht, ref cautions); + CheckFields("TMC", ref stream_ShapeFile_FieldNames.fldTMC, flds, ref fieldsOk, ref fieldsBad, ref fieldsErr, ref fieldsEdd, ref raiseNoFields, 2, 'C', fht, ref cautions); + CheckFields("RGNODE", ref stream_ShapeFile_FieldNames.fldRGNODE, flds, ref fieldsOk, ref fieldsBad, ref fieldsErr, ref fieldsEdd, ref raiseNoFields, 2, 'C', fht, ref cautions); + CheckFields("ACC_MASK", ref stream_ShapeFile_FieldNames.fldACCMask, flds, ref fieldsOk, ref fieldsBad, ref fieldsErr, ref fieldsEdd, ref raiseNoFields, 2, 'C', fht, ref cautions); + CheckFields("ATTR", ref stream_ShapeFile_FieldNames.fldAttr, flds, ref fieldsOk, ref fieldsBad, ref fieldsErr, ref fieldsEdd, ref raiseNoFields, 2, 'C', fht, ref cautions); + CheckFields("MaxWeight", ref stream_ShapeFile_FieldNames.fldMaxWeight, flds, ref fieldsOk, ref fieldsBad, ref fieldsErr, ref fieldsEdd, ref raiseNoFields, 2, 'F', fht, ref cautions); + CheckFields("MaxAxle", ref stream_ShapeFile_FieldNames.fldMaxAxle, flds, ref fieldsOk, ref fieldsBad, ref fieldsErr, ref fieldsEdd, ref raiseNoFields, 2, 'F', fht, ref cautions); + CheckFields("MaxHeight", ref stream_ShapeFile_FieldNames.fldMaxHeight, flds, ref fieldsOk, ref fieldsBad, ref fieldsErr, ref fieldsEdd, ref raiseNoFields, 2, 'F', fht, ref cautions); + CheckFields("MaxWidth", ref stream_ShapeFile_FieldNames.fldMaxWidth, flds, ref fieldsOk, ref fieldsBad, ref fieldsErr, ref fieldsEdd, ref raiseNoFields, 2, 'F', fht, ref cautions); + CheckFields("MaxLength", ref stream_ShapeFile_FieldNames.fldMaxLength, flds, ref fieldsOk, ref fieldsBad, ref fieldsErr, ref fieldsEdd, ref raiseNoFields, 2, 'F', fht, ref cautions); + CheckFields("MinDistance", ref stream_ShapeFile_FieldNames.fldMinDistance, flds, ref fieldsOk, ref fieldsBad, ref fieldsErr, ref fieldsEdd, ref raiseNoFields, 2, 'F', fht, ref cautions); + }; + }; // END READ FIELDS + + Console.ForegroundColor = cc; + Console.Write("Output file : "); + Console.ForegroundColor = ConsoleColor.Yellow; + Console.WriteLine(Path.GetFileName(GraphFileName)); + + Console.ForegroundColor = cc; + Console.Write("Region ID : "); + Console.ForegroundColor = ConsoleColor.Yellow; + Console.WriteLine(RegionID.ToString()); + + if (!String.IsNullOrEmpty(regionName)) + { + Console.ForegroundColor = cc; + Console.Write("Region Name : "); + Console.ForegroundColor = ConsoleColor.Yellow; + Console.WriteLine(regionName); + }; + + Console.ForegroundColor = cc; + Console.Write("DBF Encoding : "); + Console.ForegroundColor = ConsoleColor.Yellow; + Console.WriteLine(this.stream_DBFEncoding.CodePage.ToString() + " " + this.stream_DBFEncoding.EncodingName); + + Console.ForegroundColor = cc; + Console.Write("Attrib stats : "); + Console.ForegroundColor = ConsoleColor.Yellow; + Console.WriteLine(analyse_attributes_do ? "calculate" : "no"); + + if (cautions.Length > 0) + { + Console.ForegroundColor = cc; + Console.Write("Cautions : "); + Console.ForegroundColor = ConsoleColor.DarkRed; + Console.WriteLine(cautions.Trim().Trim(',')); + }; + + Console.ForegroundColor = cc; + Console.Write("Used Fields : "); + if (fieldsOk.Length > 0) + { + Console.ForegroundColor = ConsoleColor.Green; + Console.Write(fieldsBad.Length > 0 || fieldsErr.Length > 0 ? fieldsOk : fieldsOk.Trim().Trim(',')); + }; + if (fieldsErr.Length > 0) + { + Console.ForegroundColor = ConsoleColor.Red; + Console.Write(fieldsBad.Length > 0 ? fieldsErr : fieldsErr.Trim().Trim(',')); + }; + if (fieldsBad.Length > 0) + { + Console.ForegroundColor = ConsoleColor.Gray; + Console.Write(fieldsBad.Trim().Trim(',')); + }; + if (raiseNoFields) + { + Console.WriteLine(); + Console.WriteLine("Error: Required Fields (" + fieldsEdd.Trim().Trim(',') + ") not Found"); + Console.ReadLine(); + return; + }; + if (true) // -- ELSE FIELDS -- + { + string elseF = ""; + string noelF = ""; + if (flds.Contains("BRIDGE")) elseF += (elseF.Length > 0 ? ", " : "") + "BRIDGE"; else noelF += (noelF.Length > 0 ? ", " : "") + "BRIDGE"; + if (flds.Contains("TUNNEL")) elseF += (elseF.Length > 0 ? ", " : "") + "TUNNEL"; else noelF += (noelF.Length > 0 ? ", " : "") + "TUNNEL"; + if (flds.Contains("FERRY")) elseF += (elseF.Length > 0 ? ", " : "") + "FERRY"; else noelF += (noelF.Length > 0 ? ", " : "") + "FERRY"; + if (flds.Contains("ROUTE")) elseF += (elseF.Length > 0 ? ", " : "") + "ROUTE"; else noelF += (noelF.Length > 0 ? ", " : "") + "ROUTE"; + if (flds.Contains("FORD")) elseF += (elseF.Length > 0 ? ", " : "") + "FORD"; else noelF += (noelF.Length > 0 ? ", " : "") + "FORD"; + if (flds.Contains("TOLL")) elseF += (elseF.Length > 0 ? ", " : "") + "TOLL"; else noelF += (noelF.Length > 0 ? ", " : "") + "TOLL"; + if (flds.Contains("FOOTWAY")) elseF += (elseF.Length > 0 ? ", " : "") + "FOOTWAY"; else noelF += (noelF.Length > 0 ? ", " : "") + "FOOTWAY"; + Console.ForegroundColor = ConsoleColor.DarkGreen; + if (elseF != "") Console.WriteLine("{1}Addit Fields : {0}", elseF, "\r\n"); + Console.ForegroundColor = ConsoleColor.DarkMagenta; + if (noelF != "") Console.WriteLine("{1}NoAdd Fields : {0}", noelF, elseF == "" ? "\r\n" : ""); + }; + Console.WriteLine(); + Console.WriteLine(); + + started = DateTime.Now; + Console.ForegroundColor = cc; + Console.Write("Started: "); + Console.ForegroundColor = ConsoleColor.Magenta; + Console.WriteLine(DateTime.Now.ToString("HH:mm:ss dd.MM.yyyy")); + Console.WriteLine(); + Console.ForegroundColor = cc; + + + string tmp_dir_c = Path.GetDirectoryName(GraphFileName); + Directory.CreateDirectory(tmp_dir_c); + + this.stream_FileName = GraphFileName; + this.stream_FileMain = GraphFileName.Remove(GraphFileName.LastIndexOf(".")); + + Console.WriteLine("Preparing: " + Path.GetFileName(stream_FileMain) + ".lines.bin"); + stream_Lines = new FileStream(stream_FileMain + ".lines.bin", FileMode.Create); + stream_Lines.Write(header_RMLINES, 0, header_RMLINES.Length); + byte[] ba = new byte[4]; + stream_Lines.Write(ba, 0, ba.Length); + + Console.WriteLine("Preparing: " + Path.GetFileName(stream_FileMain) + ".segments.bin"); + stream_LinesSegments = new FileStream(stream_FileMain + ".segments.bin", FileMode.Create); + stream_LinesSegments.Write(header_RMSEGMENTS, 0, header_RMSEGMENTS.Length); + ba = new byte[4]; + stream_LinesSegments.Write(ba, 0, ba.Length); + + Console.WriteLine("Preparing: " + Path.GetFileName(stream_FileMain) + ".lines.id"); + stream_LineIndex = new FileStream(stream_FileMain + ".lines.id", FileMode.Create); + stream_LineIndex.Write(header_RMLINKIDS, 0, header_RMLINKIDS.Length); + ba = new byte[4]; + stream_LineIndex.Write(ba, 0, ba.Length); + + Console.WriteLine("Preparing: " + Path.GetFileName(stream_FileMain) + ".lines.att"); + stream_LineAttr = new FileStream(stream_FileMain + ".lines.att", FileMode.Create); + stream_LineAttr.Write(header_RMLATTRIB, 0, header_RMLATTRIB.Length); + ba = new byte[4]; + stream_LineAttr.Write(ba, 0, ba.Length); + + if ((stream_ShapeFile_FieldNames.fldTMC != null) && (stream_ShapeFile_FieldNames.fldTMC != String.Empty)) + { + Console.WriteLine("Preparing: " + Path.GetFileName(stream_FileMain) + ".lines.tmc"); + stream_TMC = new FileStream(stream_FileMain + ".lines.tmc", FileMode.Create); + stream_TMC.Write(header_RMTMC, 0, header_RMTMC.Length); + ba = BitConverter.GetBytes(analyse_regionID); + stream_TMC.Write(ba, 0, ba.Length); + ba = new byte[4]; + stream_TMC.Write(ba, 0, ba.Length); + }; + + if ((stream_ShapeFile_FieldNames.fldName != null) && (stream_ShapeFile_FieldNames.fldName != String.Empty) && (writeLinesNamesFile)) + { + Console.WriteLine("Preparing: " + Path.GetFileName(stream_FileMain) + ".lines.txt"); + stream_Names = new FileStream(stream_FileMain + ".lines.txt", FileMode.Create); + ba = System.Text.Encoding.GetEncoding(1251).GetBytes("Ôàéë íàèìåíîâàíèé ëèíèé\r\n"); + stream_Names.Write(ba, 0, ba.Length); + }; + Console.WriteLine(); + + + ReadInnerFiles(this.stream_ShapeFileName); + Console.WriteLine("Shape Files Reading Completed"); + + // do not save yet, until TurnRestriction check + //lnStr.Position = RMLINES.Length; + //ba = BitConverter.GetBytes(linesCount); + //lnStr.Write(ba, 0, ba.Length); + //lnStr.Flush(); + //lnStr.Close(); // .lines.bin + //Console.WriteLine("Write: " + Path.GetFileName(grMain) + ".lines.bin Completed"); + + stream_LinesSegments.Position = header_RMSEGMENTS.Length; + ba = BitConverter.GetBytes(analyse_SegmentsCount); + stream_LinesSegments.Write(ba, 0, ba.Length); + stream_LinesSegments.Flush(); + stream_LinesSegments.Close(); // .segments.bin + Console.WriteLine("Write: " + Path.GetFileName(stream_FileMain) + ".segments.bin Completed"); + + stream_LineIndex.Position = header_RMLINKIDS.Length; + ba = BitConverter.GetBytes(analyse_LinesCount); + stream_LineIndex.Write(ba, 0, ba.Length); + stream_LineIndex.Flush(); + List linkids = new List(analyse_LinesCount); + for (int i = 0; i < analyse_LinesCount; i++) + { + stream_LineIndex.Read(ba, 0, ba.Length); + linkids.Add(BitConverter.ToInt32(ba, 0)); + }; + stream_LineIndex.Close();// .lines.id + Console.WriteLine("Write: " + Path.GetFileName(stream_FileMain) + ".lines.id Completed"); + + stream_LineAttr.Position = header_RMLATTRIB.Length; + ba = BitConverter.GetBytes(analyse_LinesCount); + stream_LineAttr.Write(ba, 0, ba.Length); + stream_LineAttr.Flush(); + stream_LineAttr.Close();// .lines.att + Console.WriteLine("Write: " + Path.GetFileName(stream_FileMain) + ".lines.att Completed"); + + if ((stream_ShapeFile_FieldNames.fldTMC != null) && (stream_ShapeFile_FieldNames.fldTMC != String.Empty)) + { + stream_TMC.Position = header_RMTMC.Length + 4; + ba = BitConverter.GetBytes(analyse_LinesCount); + stream_TMC.Write(ba, 0, ba.Length); + stream_TMC.Flush(); + stream_TMC.Close();// .lines.tmc + Console.WriteLine("Write: " + Path.GetFileName(stream_FileMain) + ".lines.tmc Completed"); + }; + + if ((stream_ShapeFile_FieldNames.fldName != null) && (stream_ShapeFile_FieldNames.fldName != String.Empty) && (writeLinesNamesFile)) + { + stream_Names.Flush(); + stream_Names.Close(); + Console.WriteLine("Write: " + Path.GetFileName(stream_FileMain) + ".lines.txt Completed"); + }; + + try + { + SaveNodes(linkids); + } + catch (Exception ex) + { + Console.WriteLine("Error: " + ex.ToString()); + throw ex; + }; + + // TurnRestrictions Checked ->- Save Lines + stream_Lines.Position = header_RMLINES.Length; + ba = BitConverter.GetBytes(analyse_LinesCount); + stream_Lines.Write(ba, 0, ba.Length); + stream_Lines.Flush(); + stream_Lines.Close(); // .lines.bin + Console.WriteLine("Write: " + Path.GetFileName(stream_FileMain) + ".lines.bin Completed"); + + // Save Additional Information + AdditionalInformation ai = new AdditionalInformation(); + ai.ConvertedWith = _Converter; + ai.SourceType = stream_ShapeFile_FieldNames.SOURCE; + ai.regionID = analyse_regionID; + ai.minX = bounds_box[0]; + ai.minY = bounds_box[1]; + ai.maxX = bounds_box[2]; + ai.maxY = bounds_box[3]; + ai.TestMap = "{lat:" + ai.centerY.ToString(System.Globalization.CultureInfo.InvariantCulture) + ",lon:" + ai.centerX.ToString(System.Globalization.CultureInfo.InvariantCulture) + ",zoom:12}"; + if (!String.IsNullOrEmpty(regionName)) ai.RegionName = regionName; + XMLSaved.Save(stream_FileMain + ".addit.xml", ai); + + // DONE // + + DateTime ended = DateTime.Now; + TimeSpan elapsed = ended.Subtract(started); + + FileStream rtStr = new FileStream(GraphFileName, FileMode.Create); + StreamWriter sw = new StreamWriter(rtStr, Encoding.GetEncoding(1251)); + sw.WriteLine("dkxce shape-graph converter result main file"); + sw.WriteLine("Version: " + _Converter); + sw.WriteLine("Started: " + started.ToString("yyyy-MM-dd HH:mm:ss")); + sw.WriteLine("Converted: " + ended.ToString("yyyy-MM-dd HH:mm:ss")); + sw.WriteLine("Elapsed: " + String.Format("{0:00} äí {1:00}:{2:00}:{3:00}", new object[] { elapsed.Days, elapsed.Hours, elapsed.Minutes, elapsed.Seconds })); + sw.WriteLine("Source type: " + this.stream_ShapeFile_FieldNames.SOURCE); + sw.WriteLine("Source path: " + Path.GetDirectoryName(stream_ShapeFileName)); + sw.WriteLine("Source file: " + Path.GetFileName(stream_ShapeFileName)); + if (!String.IsNullOrEmpty(this.stream_ShapeFile_FieldNames.fldOSM_ADDIT_DBF_NODES)) sw.WriteLine("Nodes to Split file: " + this.stream_ShapeFile_FieldNames.fldOSM_ADDIT_DBF_NODES); + if (!String.IsNullOrEmpty(this.stream_ShapeFile_FieldNames.fldOSM_ADDIT_DBF_NOTURN)) sw.WriteLine("External NoTurns file: " + this.stream_ShapeFile_FieldNames.fldOSM_ADDIT_DBF_NOTURN); + sw.WriteLine("DBF CodePage: " + this.stream_DBFEncoding.CodePage.ToString()); + sw.WriteLine("DBF Encoding: " + this.stream_DBFEncoding.EncodingName); + sw.WriteLine("Latitude Inversed: " + this.stream_ShapeFile_FieldNames.InverseLat.ToString()); + sw.WriteLine("Longitude Inversed: " + this.stream_ShapeFile_FieldNames.InverseLon.ToString()); + if (this.stream_ShapeFile_FieldNames.SOURCE == "OSM2SHP") sw.WriteLine("Process Aggreagated Tags: " + this.stream_ShapeFile_FieldNames.fldOSM_ADDIT_PROCESSAGG.ToString()); + sw.WriteLine("Max Cost Between Nodes: " + analyse_maxCostBetweenNodes.ToString(stream_NumberFormat)); + sw.WriteLine("Max Length Between Nodes: " + analyse_maxLengthBetweenNodes.ToString(stream_NumberFormat) + " m"); + sw.WriteLine("Max Time Between Nodes: " + analyse_maxTimeBetweenNodes.ToString(stream_NumberFormat) + " min"); + sw.WriteLine("Lines: " + analyse_LinesCount.ToString()); + sw.WriteLine("Nodes to Split: " + nodes_list.Count.ToString()); + sw.WriteLine("Splitted Lines: " + analyse_LinesDCount.ToString()); + sw.WriteLine("Segments: " + analyse_SegmentsCount.ToString()); + sw.WriteLine("Nodes: " + analyse_Nodes.Count.ToString()); + sw.WriteLine("External NoTurns: " + noturns_list.Count.ToString()); + sw.WriteLine("Turn Restrictions: " + analyse_NoTurnsAdded.ToString()); + + if (analyse_attributes_do) + { + sw.WriteLine("Attributes..."); + string[] attnms = new string[56] + { + // avg.. - average speed + // max.. - max speed + // lvl - level + // 1w - oneway + "00x01 ca Äâîðîâûé ïðîåçä / Æèëàÿ çîíà (5.21)", // 0x01 + "00x02 up Ãðóíòîâàÿ äîðîãà / Äîðîãà áåç ïîêðûòèÿ", // 0x02 + "00x04 cc Äîðîãà ñ áåòîííûì ïîêðûòèåì", // 0x04 + "00x08 st Äîðîãà îòñûïàííàÿ ãðàâèåì (1.16)", //0x08 + "00x10 sa Äîðîãà îòñûïàííàÿ ïåñêîì", // 0x10 + "00x20 tm Âðåìåííàÿ äîðîãà", // 0x20 + "00x40 tn Òîííåëü (1.31)", //0x40 + "00x80 br Ìîñò", //0x80 + "01x01 db Ðàçâîäíîé ìîñò (1.9)", //1x01 + "01x02 pt Ïàíòîííûé ìîñò", //1x02 + "01x04 ft Ïàðîì / ïåðåïðàâà", //1x04 + "01x08 rc Æåëåçíîäîðîæíûé ïåðååçä (1.1, 1.2)", // 1x08 + "01x10 wd Áðîä", // 1x10 + "01x20 ??", // 1x20 + "01x40 ??", // 1x40 + "01x80 ??", // 1x80 + "02x01 r1 Ðåâåðñèâíîå äâèæåíèå â îäíó ïîëîñó", //2x01 + "02x02 aa Äîðîãà äëÿ àâòîìîáèëåé (5.3)", //2x02 + "02x04 hw Àâòîìàãèñòðàëü (5.1)", //2x04 + "02x08 tr Ïëàòíàÿ äîðîãà", //2x08 + "02x10 nt Äâèæåíèå ãðóçîâîãî òðàíñïîðòà çàïðåùåíî (3.4)", //2x10 + "02x20 nm Äâèæåíèå ìîòîöèêëîâ çàïðåùåíî (3.5)", //2x20 + "02x40 na Äâèæåíèå òðàêòîðîâ çàïðåùåíî (3.6)", //2x40 + "02x80 nw Äâèæåíèå ñ ïðèöåïîì çàïðåùåíî (3.7)", //2x80 + "03x01 ct Òàìîæíÿ / Òàìîæåííàÿ ãðàíèöà (3.17.1)", //3x01 + "03x02 iu Êðóòîé ñïóñê (1.13)", //3x02 + "03x04 id Êðóòîé ïîäúåì (1.14)", //3x04 + "03x08 rw Äîðîæíûå ðàáîòû", //3x08 + "03x10 ot Îáãîí çàïðåùåí (3.20)", //3x10 + "03x20 ol Îáãîí ãðóçîâûì òðàíñïîðòîì çàïðåùåí (3.22)", //3x20 + "03x40 ns Îñòàíîâêà çàïðåùåíà (3.27)", //3x40 + "03x80 np Ñòîÿíêà çàïðåùåíà (3.28)", //3x80 + "04x01 nd Äâèæåíèå ñ îïàñíûìè ãðóçàìè çàïðåùåíî (3.32)", //4x01 + "04x02 ne Äâèæåíèå òðàíñïîðòíûõ ñðåäñòâ ñ âçðûâ÷àòûìè è îãíåîïàñíûìè ãðóçàìè çàïðåùåíî (3.33)", //4x02 + "04x04 tl Ñâåòîôîð", //4x04 + "04x08 fw Äîðîãè äëÿ ïåøåõîäîâ (OSM Pedestrian)", //4x08 + "04x10 lt Íåîñâåùåííûå äîðîãè (OSM)", //4x10 + "04x20 ??", //4x20 + "04x40 ??", //4x40 + "04x80 ww Âîäíûå ïóòè (WATER)", //4x80 + "05x01 ??", //5x01 + "05x02 ??", //5x02 + "05x04 ??", //5x04 + "05x08 ??", //5x08 + "05x10 ??", //5x10 + "05x20 ??", //5x20 + "05x40 ??", //5x40 + "05x80 ??", //5x80 + "06x01 ??", //6x01 + "06x02 ??", //6x02 + "06x04 ??", //6x04 + "06x08 ??", //6x08 + "06x10 ??", //6x10 + "06x20 ??", //6x20 + "06x40 ??", //6x40 + "06x80 ??" //6x80 + }; + string[] attnms2 = new string[10] + { + "07xFF ?? Îãðàíè÷åíèå ìàññû ÒÑ", // 7 mwe.. + "08xFF ?? Îãðàíè÷åíèå íàãðóçêè íà îñü ÒÑ", //8 mos.. + "09xFF ?? Âûñîòà ïîëîñû", //9 mhe.. + "10xFF ?? Øèðèíà ïîëîñû", //10 mwi.. + "11xFF ?? Îãðàíè÷åíèå äëèíû ÒÑ", //11 mle.. + "12xFF ?? Ìèíèìàëüíàÿ äèñòàíöèÿ ìåæäó ÒÑ", //12 mdi + "13xFF ??", //13 + "14xFF ??", //14 + "15xF8 max.. SpeedLimit", //15 + "15x07 lvl.. RouteLevel" // 15 + }; + + for (int i = 0; i < 56; i++) + if (analyse_attributes_bit[i] > 0) + sw.WriteLine("\t" + attnms[i] + ": " + analyse_attributes_bit[i].ToString()); + + for (int i = 7; i < 15; i++) + if (analyse_attributes_val[i - 7] > 0) + sw.WriteLine("\t" + attnms2[i - 7] + ": " + analyse_attributes_val[i - 7].ToString()); + + if (analyse_attributes_val[8] > 0) + sw.WriteLine("\t" + attnms2[8] + ": " + analyse_attributes_val[8].ToString()); + if (analyse_attributes_val[9] > 0) + sw.WriteLine("\t" + attnms2[9] + ": " + analyse_attributes_val[9].ToString()); + }; + + sw.WriteLine(); + sw.WriteLine("Files:"); + sw.WriteLine(" " + Path.GetFileName(stream_FileMain) + ".addit.xml - Additional information"); + sw.WriteLine(" " + Path.GetFileName(stream_FileMain) + ".lines.bin - Lines information (segments count, pos, oneway, node start, node stop)"); + sw.WriteLine(" " + Path.GetFileName(stream_FileMain) + ".lines.id - Lines LINK_ID/ROAD_ID"); + sw.WriteLine(" " + Path.GetFileName(stream_FileMain) + ".lines.att - Lines attributes"); + sw.WriteLine(" " + Path.GetFileName(stream_FileMain) + ".segments.bin - Lines segments"); + if ((stream_ShapeFile_FieldNames.fldTMC != null) && (stream_ShapeFile_FieldNames.fldTMC != String.Empty)) + sw.WriteLine(" " + Path.GetFileName(stream_FileMain) + ".lines.tmc - Lines TMC Codes"); + sw.WriteLine(" " + Path.GetFileName(stream_FileMain) + ".lines.txt - Lines names"); + sw.WriteLine(" " + Path.GetFileName(stream_FileMain) + ".graph.bin - Graph nodes information"); + sw.WriteLine(" " + Path.GetFileName(stream_FileMain) + ".graph.bin.in - Index for node position in graph"); + sw.WriteLine(" " + Path.GetFileName(stream_FileMain) + ".graph[r].bin - Graph nodes information for inverse solve"); + sw.WriteLine(" " + Path.GetFileName(stream_FileMain) + ".graph[r].bin.in - Index for node position in graph (inverse solve)"); + sw.WriteLine(" " + Path.GetFileName(stream_FileMain) + ".graph.geo - Nodes Lat Lon information"); + sw.WriteLine(" " + Path.GetFileName(stream_FileMain) + ".graph.geo.ll - Indexed Lat Lon for nodes"); + sw.WriteLine(" " + Path.GetFileName(stream_FileMain) + ".rgnodes.txt - Region Nodes Text Information"); + sw.WriteLine(" " + Path.GetFileName(stream_FileMain) + ".rgnodes.xml - Region Nodes Information"); + sw.WriteLine(" " + Path.GetFileName(stream_FileMain) + ".analyze.txt - Nodes In/Out fail information"); + sw.Flush(); + sw.Close(); + rtStr.Close(); + + Console.WriteLine(); + Console.WriteLine("Convertion Done: " + ended.ToString("HH:mm:ss")); + Console.WriteLine("Elapsed: " + String.Format("{0:00}:{1:00}:{2:00}", elapsed.TotalHours, elapsed.Minutes, elapsed.Seconds)); + } + + /// + /// Ñîõðàíÿåì óçëû è âñå ÷òî ñ íèìè ñâÿçàíî + /// + private void SaveNodes(List linkIds) + { + Console.WriteLine(); + + // // // // TEST // // // // + //nodes.Add(new TNode(1, 0, 0)); + //nodes[0].links.Add(new TLink(5, 0, 0, 0, 1, false)); + //nodes[0].rlinks.Add(new TLink(5, 0, 0, 0, 1, false)); + //nodes.Add(new TNode(2, 0, 0)); + //nodes[1].links.Add(new TLink(5, 0, 0, 0, 2, false)); + //nodes[1].rlinks.Add(new TLink(5, 0, 0, 0, 2, false)); + //nodes.Add(new TNode(3, 0, 0)); + //nodes[2].links.Add(new TLink(5, 0, 0, 0, 3, false)); + //nodes[2].links.Add(new TLink(6, 0, 0, 0, 6, false)); + //nodes[2].links.Add(new TLink(7, 0, 0, 0, 7, false)); + //nodes[2].rlinks.Add(new TLink(5, 0, 0, 0, 3, false)); + //nodes[2].rlinks.Add(new TLink(6, 0, 0, 0, 6, false)); + //nodes[2].rlinks.Add(new TLink(7, 0, 0, 0, 7, false)); + //nodes.Add(new TNode(4, 0, 0)); + //nodes[3].links.Add(new TLink(5, 0, 0, 0, 4, false)); + //nodes[3].rlinks.Add(new TLink(5, 0, 0, 0, 4, false)); + //nodes.Add(new TNode(5, 0, 0)); + //nodes[4].links.Add(new TLink(1, 0, 0, 0, 1, false)); + //nodes[4].links.Add(new TLink(2, 0, 0, 0, 2, false)); + //nodes[4].links.Add(new TLink(3, 0, 0, 0, 3, false)); + //nodes[4].links.Add(new TLink(4, 0, 0, 0, 4, false)); + //nodes[4].rlinks.Add(new TLink(1, 0, 0, 0, 1, false)); + //nodes[4].rlinks.Add(new TLink(2, 0, 0, 0, 2, false)); + //nodes[4].rlinks.Add(new TLink(3, 0, 0, 0, 3, false)); + //nodes[4].rlinks.Add(new TLink(4, 0, 0, 0, 4, false)); + //nodes.Add(new TNode(6, 0, 0)); + //nodes[5].links.Add(new TLink(3, 0, 0, 0, 6, false)); + //nodes[5].rlinks.Add(new TLink(3, 0, 0, 0, 6, false)); + //nodes.Add(new TNode(7, 0, 0)); + //nodes[6].links.Add(new TLink(3, 0, 0, 0, 7, false)); + //nodes[6].rlinks.Add(new TLink(3, 0, 0, 0, 7, false)); + //noTurns.Add(new TurnRestriction(1, 5, 1004)); + //noTurns.Add(new TurnRestriction(4, 5, 1003)); + //noTurns.Add(new TurnRestriction(3, 5, 1002)); + //noTurns.Add(new TurnRestriction(4, 5, 1001)); + //noTurns.Add(new TurnRestriction(3, 3, 1007)); + //linkIds.Clear(); + //linkIds.Add(1001); + //linkIds.Add(1002); + //linkIds.Add(1003); + //linkIds.Add(1004); + //linkIds.Add(1006); + //linkIds.Add(1007); + + + // save turn restrictions + Console.WriteLine("Turn Restrictions Analyze (TRA)... "); + Console.WriteLine("Found ... "); + + int noTurnsWas = analyse_NoTurns.Count; + int noTurnsSkipped = 0; + int newNodesAdded = 0; + while (analyse_NoTurns.Count > 0) + { + TurnRestriction ctr = analyse_NoTurns[0]; + TNode nd = analyse_Nodes[(int)ctr.throughNode - 1]; // óçåë throught + List nns = new List(); // óçëû ïîäìåíû + + // äëÿ êàæäîé âõîäÿùåé ñâÿçè) + for (int _in = 0; _in < nd.rlinks.Count; _in++) + { + List canLine = new List(); // ñïèñîê ëèíèé êóäà ìîæíî åõàòü + for (int _ot = 0; _ot < nd.links.Count; _ot++) canLine.Add(nd.links[_ot].line); + + for (int nt = analyse_NoTurns.Count - 1; nt >= 0; nt--) // óäàëÿåì êóäà íåëüçÿ åõàòü + if ((analyse_NoTurns[nt].fromLine == nd.rlinks[_in].line) && (analyse_NoTurns[nt].throughNode == nd.node)) + { + try + { + int lid = linkIds.IndexOf(analyse_NoTurns[nt].toLineLinkID); /// OSM_ID may be overflow !!! /// + if (lid >= 0) + { + uint line = (uint)lid + 1; // find line by link_id/osm_id/road_id + if (line == nd.rlinks[_in].line) + { + // No U-Turn + }; + canLine.Remove(line); // remove line from can go list + analyse_NoTurnsAdded++; + } + else + noTurnsSkipped++; + } + catch + { + noTurnsSkipped++; + }; + analyse_NoTurns.RemoveAt(nt); // remove turn restriction + }; + TNode nn = new TNode((uint)(analyse_Nodes.Count + _in), nd.lat, nd.lon); // ñîçäàåì íîâûé óçåë + nn.rlinks.Add(nd.rlinks[_in]); // äîáâëÿåì èíôîðìàöèþ î ëèíèè ïî êîòîðîé ïðèøëè + for (int _ot = 0; _ot < nd.links.Count; _ot++) // äîáàâëÿåì êóäà ìîæíî ïîéòè + if (canLine.Contains(nd.links[_ot].line)) + { + TLink link = nd.links[_ot]; + nn.links.Add(link); + }; + nns.Add(nn); + }; + // replace nd node + nns[0].node = nd.node; + analyse_Nodes[(int)nd.node - 1] = nns[0]; + // add new + for (int i = 1; i < nns.Count; i++) + analyse_Nodes.Add(nns[i]); + // update near nodes + for (int i = 0; i < nns.Count; i++) + { + for (int _in = 0; _in < nns[i].rlinks.Count; _in++) + { + TNode upd = analyse_Nodes[(int)nns[i].rlinks[_in].node - 1]; + for (int _ot = 0; _ot < upd.links.Count; _ot++) + if (upd.links[_ot].node == nd.node) + upd.links[_ot].node = nns[i].node; + }; + for (int _ot = 0; _ot < nns[i].links.Count; _ot++) + { + TNode upd = analyse_Nodes[(int)nns[i].links[_ot].node - 1]; + for (int _in = 0; _in < upd.rlinks.Count; _in++) + if (upd.rlinks[_in].node == nd.node) + upd.rlinks[_in].node = nns[i].node; + }; + }; + // update changes in noTurns + if(analyse_NoTurns.Count > 0) + for (int i = analyse_NoTurns.Count - 1; i >= 0; i--) + { + // ïðîâåðêà ñõîäèìîñòè + if (analyse_NoTurns[i].throughNode == nd.node) + { + string txt = ""; + try /// OSM_ID may be overflow !!! /// + { + txt = "NoTurn from ROAD_ID " + linkIds[(int)analyse_NoTurns[i].fromLine - 1].ToString() + " to ROAD_ID " + analyse_NoTurns[i].toLineLinkID.ToString(); + } + catch + { + txt = "NoTurn from ROAD_ID ??? to ROAD_ID " + analyse_NoTurns[i].toLineLinkID.ToString(); + }; + // åñëè â óçëå íåñêîëüêî çàïðåòîâ ñ ïîâîðîòîâ è íà÷àëüíûå + // ëèíèè íå áûëè íàéäåíû ðàíåå, òî âîçìîæíî äîðîãà îäíîñòîðîííÿÿ, + // à çàïðåò ïîâîðîòà óêàçàí â çàïðåùåííîì íàïðàâëåíèè äâèæåíèÿ. + // Ïîýòîìó ñïåðâà èùåì ëèíèþ â èñõîäÿùèõ ñâÿçÿõ + bool deleted = false; + for (int _out = 0; _out < nd.links.Count; _out++) + if (analyse_NoTurns[i].fromLine == nd.links[_out].line) + deleted = true; + // åñëè ëèíèÿ íàéäåíà, òî äîðîãà îäíîñòîðîíÿÿ è ïîâåðíóòü + // â óêàçàííîì â çàïðåòå íàïðàâëåíèè íåëüçÿ - óäàëÿåì ëèøíþþ èíôîðìàöèþ + if (deleted) + { + Console.SetCursorPosition(0, Console.CursorTop - 1); + Console.WriteLine(txt + " ignored - WRONG WAY DIRECTION"); + Console.WriteLine(""); + analyse_NoTurns.RemoveAt(i); + } + else + { + // åñëè ëèíèÿ íå íàéäåíà, òî åå íåò â èñõîäíîì shp ôàéëå + Console.WriteLine("ERROR: Çàïðåòû ïîâîðîòîâ íå ñõîäÿòñÿ, ïðîâåðüòå èñõîäíûå äàííûå!!! " + txt); + Console.ReadLine(); + throw new StackOverflowException("Çàïðåòû ïîâîðîòîâ íå ñõîäÿòñÿ, ïðîâåðüòå èñõîäíûå äàííûå!!! " + txt); + }; + }; + }; + // update incoming lines + for (int _in = 0; _in < nd.rlinks.Count; _in++) + { + stream_Lines.Position = header_RMLINES.Length + 4 + const_LineRecordLength * (nd.rlinks[_in].line) - 8; + byte[] ba = new byte[8]; + stream_Lines.Read(ba, 0, 8); + uint node1 = BitConverter.ToUInt32(ba, 0); + uint node2 = BitConverter.ToUInt32(ba, 4); + if (node1 == nd.node) node1 = nns[_in].node; + if (node2 == nd.node) node2 = nns[_in].node; + stream_Lines.Position -= 8; + ba = BitConverter.GetBytes(node1); + stream_Lines.Write(ba, 0, ba.Length); + ba = BitConverter.GetBytes(node2); + stream_Lines.Write(ba, 0, ba.Length); + }; + stream_Lines.Flush(); + // + newNodesAdded += nns.Count - 1; + Console.SetCursorPosition(0, Console.CursorTop - 1); + Console.WriteLine(String.Format("NoTurns with new analyzed added: {0} from {1} found; skipped {2}", analyse_NoTurnsAdded, noTurnsWas, noTurnsSkipped)); + }; + // TRA DONE + + Console.WriteLine("New nodes to add (after Turn Restrictions Analyze): " + newNodesAdded.ToString()); + Console.WriteLine("Turn Restrictions Analyze (TRA) Completed"); + Console.WriteLine(); + ///// + + // save graph + Console.WriteLine("Preparing: " + Path.GetFileName(stream_FileMain) + ".graph.bin"); + FileStream grStr = new FileStream(stream_FileMain + ".graph.bin", FileMode.Create); + grStr.Write(header_RMGRAF2, 0, header_RMGRAF2.Length); + byte[] nodesC = BitConverter.GetBytes(analyse_Nodes.Count); + grStr.Write(nodesC, 0, nodesC.Length); + byte[] maxl = BitConverter.GetBytes(analyse_maxLengthBetweenNodes); + grStr.Write(maxl, 0, maxl.Length); + + // save reversed graph + Console.WriteLine("Preparing: " + Path.GetFileName(stream_FileMain) + ".graph[r].bin"); + FileStream grStrR = new FileStream(stream_FileMain + ".graph[r].bin", FileMode.Create); + grStrR.Write(header_RMGRAF3, 0, header_RMGRAF2.Length); + BitConverter.GetBytes(analyse_Nodes.Count); + grStrR.Write(nodesC, 0, nodesC.Length); + BitConverter.GetBytes(analyse_maxLengthBetweenNodes); + grStrR.Write(maxl, 0, maxl.Length); + + // save graph index + Console.WriteLine("Preparing: " + Path.GetFileName(stream_FileMain) + ".graph.bin.in"); + FileStream giStr = new FileStream(stream_FileMain + ".graph.bin.in", FileMode.Create); + giStr.Write(header_RMINDEX, 0, header_RMINDEX.Length); + giStr.Write(nodesC, 0, nodesC.Length); + + // save reversed graph index + Console.WriteLine("Preparing: " + Path.GetFileName(stream_FileMain) + ".graph[r].bin.in"); + FileStream giStrR = new FileStream(stream_FileMain + ".graph[r].bin.in", FileMode.Create); + giStrR.Write(header_RMINDEX, 0, header_RMINDEX.Length); + giStrR.Write(nodesC, 0, nodesC.Length); + + // graph nodes lat lon + Console.WriteLine("Preparing: " + Path.GetFileName(stream_FileMain) + ".graph.geo"); + FileStream geoStr = new FileStream(stream_FileMain + ".graph.geo", FileMode.Create); + geoStr.Write(header_RMPOINTNLL0, 0, header_RMPOINTNLL0.Length); + geoStr.Write(nodesC, 0, nodesC.Length); + + Console.WriteLine("Write Node..."); + FileStream ninf = new FileStream(stream_FileMain + ".graph.analyze.txt", FileMode.Create); + StreamWriter nw = new StreamWriter(ninf); + nw.WriteLine("Àíàëèç óçëîâ ãðàôà íà íàëè÷èå ðåáåð... "); + for (int i = 0; i < analyse_Nodes.Count; i++) + { + bool nl = false; + if (analyse_Nodes[i].Ins == 0) + { + Console.SetCursorPosition(0, Console.CursorTop - 1); + string ln = String.Format("... â óçåë {0} íåëüçÿ ïîïàñòü {1} {2} ", i + 1, analyse_Nodes[i].lat, analyse_Nodes[i].lon); + Console.WriteLine(ln); + nw.WriteLine(ln); + nl = true; + }; + if (analyse_Nodes[i].Outs == 0) + { + if (!nl) Console.SetCursorPosition(0, Console.CursorTop - 1); + string ln = String.Format("... èç óçëà {0} íåëüçÿ âûåõàòü {1} {2} ", i + 1, analyse_Nodes[i].lat, analyse_Nodes[i].lon); + Console.WriteLine(ln); + nw.WriteLine(ln); + nl = true; + }; + if (nl) Console.WriteLine(); + + byte[] lat = BitConverter.GetBytes(analyse_Nodes[i].lat); // Write nodes Lat Lon + geoStr.Write(lat, 0, lat.Length); + byte[] lon = BitConverter.GetBytes(analyse_Nodes[i].lon); + geoStr.Write(lon, 0, lon.Length); + + byte links = (byte)analyse_Nodes[i].links.Count; // Write Node links pos + byte[] pos = BitConverter.GetBytes((uint)grStr.Position); + giStr.Write(pos, 0, pos.Length); + + byte rlinks = (byte)analyse_Nodes[i].rlinks.Count; // Write Node rlinks pos + byte[] posR = BitConverter.GetBytes((uint)grStrR.Position); + giStrR.Write(posR, 0, posR.Length); + + grStr.WriteByte(links); + grStrR.WriteByte(rlinks); + + for (int x = 0; x < analyse_Nodes[i].links.Count; x++) // Write Node links + { + byte[] next = BitConverter.GetBytes(analyse_Nodes[i].links[x].node);// 4 + grStr.Write(next, 0, next.Length); + byte[] cost = BitConverter.GetBytes(analyse_Nodes[i].links[x].cost);// 4 + grStr.Write(cost, 0, cost.Length); + byte[] dist = BitConverter.GetBytes(analyse_Nodes[i].links[x].dist);// 4 + grStr.Write(dist, 0, dist.Length); + byte[] time = BitConverter.GetBytes(analyse_Nodes[i].links[x].time);// 4 + grStr.Write(time, 0, time.Length); + byte[] line = BitConverter.GetBytes(analyse_Nodes[i].links[x].line);// 4 + grStr.Write(line, 0, line.Length); + byte rev = analyse_Nodes[i].links[x].inverse_dir ? (byte)1 : (byte)0;//// 1 + grStr.WriteByte(rev); + }; + grStr.Flush(); + + for (int x = 0; x < analyse_Nodes[i].rlinks.Count; x++) // Write Node rlinks + { + byte[] next = BitConverter.GetBytes(analyse_Nodes[i].rlinks[x].node);// 4 + grStrR.Write(next, 0, next.Length); + byte[] cost = BitConverter.GetBytes(analyse_Nodes[i].rlinks[x].cost);// 4 + grStrR.Write(cost, 0, cost.Length); + byte[] dist = BitConverter.GetBytes(analyse_Nodes[i].rlinks[x].dist);// 4 + grStrR.Write(dist, 0, dist.Length); + byte[] time = BitConverter.GetBytes(analyse_Nodes[i].rlinks[x].time);// 4 + grStrR.Write(time, 0, time.Length); + byte[] line = BitConverter.GetBytes(analyse_Nodes[i].rlinks[x].line);// 4 + grStrR.Write(line, 0, line.Length); + byte rev = analyse_Nodes[i].rlinks[x].inverse_dir ? (byte)1 : (byte)0;//// 1 + grStrR.WriteByte(rev); + }; + grStrR.Flush(); + Console.SetCursorPosition(0, Console.CursorTop - 1); + Console.WriteLine("Nodes added: " + (i + 1).ToString()); + }; + nw.WriteLine("Çàâåðøåíî"); + nw.Flush(); + nw.Close(); + ninf.Close(); + + Console.WriteLine("Write: " + Path.GetFileName(stream_FileMain) + ".graph.bin Completed"); + grStr.Flush(); + grStr.Close(); + + Console.WriteLine("Write: " + Path.GetFileName(stream_FileMain) + ".graph[r].bin Completed"); + grStrR.Flush(); + grStrR.Close(); + + Console.WriteLine("Write: " + Path.GetFileName(stream_FileMain) + ".graph.bin.in Completed"); + giStr.Flush(); + giStr.Close(); + + Console.WriteLine("Write: " + Path.GetFileName(stream_FileMain) + ".graph[r].bin.in Completed"); + giStrR.Flush(); + giStrR.Close(); + + Console.WriteLine("Write: " + Path.GetFileName(stream_FileMain) + ".graph.geo Completed"); + geoStr.Flush(); + geoStr.Close(); + + Console.WriteLine(); + + Console.Write("Saving " + Path.GetFileName(stream_FileMain) + ".graph.geo.ll ..."); + analyse_Nodes.Sort(TNode.Sorter.SortByLL()); + + // graph nodes lat lon indexed + FileStream gllStr = new FileStream(stream_FileMain + ".graph.geo.ll", FileMode.Create); + gllStr.Write(header_RMPOINTNLL1, 0, header_RMPOINTNLL1.Length); + gllStr.Write(nodesC, 0, nodesC.Length); + for (int i = 0; i < analyse_Nodes.Count; i++) + { + byte[] ba = BitConverter.GetBytes(analyse_Nodes[i].node); // Write Node Lat Lon Indexed + gllStr.Write(ba, 0, ba.Length); + ba = BitConverter.GetBytes(analyse_Nodes[i].lat); + gllStr.Write(ba, 0, ba.Length); + ba = BitConverter.GetBytes(analyse_Nodes[i].lon); + gllStr.Write(ba, 0, ba.Length); + }; + gllStr.Flush(); + gllStr.Close(); + Console.WriteLine(" Completed"); + + Console.WriteLine(); + if (analyse_RGNodes.Count > 0) + { + Console.WriteLine("Saving RGNodes: " + analyse_RGNodes.Count.ToString() + " - in " + Path.GetFileName(stream_FileMain) + ".rgnodes.xml"); + XMLSaved.Save(stream_FileMain + ".rgnodes.xml", analyse_RGNodes.ToArray()); + Console.WriteLine(); + }; + } + + private int total_lines = 0; + + public static string GetFileSize(long size) + { + string[] sizes = { "B", "KB", "MB", "GB", "TB" }; + double len = size; + int order = 0; + while (len >= 1024 && order < sizes.Length - 1) + { + order++; + len = len / 1024; + }; + string res = String.Format(System.Globalization.CultureInfo.InvariantCulture, "{0:0.##} {1}", len, sizes[order]); + return res; + } + + private string[] ReadDBFFields(string filename, out Hashtable fieldsType) + { + string dbffile = filename.Substring(0, filename.Length - 4) + ".dbf"; + + FileStream dbfFileStream = new FileStream(dbffile, FileMode.Open, FileAccess.Read); + + // Read File Version + dbfFileStream.Position = 0; + int ver = dbfFileStream.ReadByte(); + + // Read Records Count + dbfFileStream.Position = 04; + byte[] bb = new byte[4]; + dbfFileStream.Read(bb, 0, 4); + total_lines = BitConverter.ToInt32(bb, 0); + + // Read DataRecord 1st Position + dbfFileStream.Position = 8; + bb = new byte[2]; + dbfFileStream.Read(bb, 0, 2); + short dataRecord_1st_Pos = BitConverter.ToInt16(bb, 0); + int FieldsCount = (((bb[0] + (bb[1] * 0x100)) - 1) / 32) - 1; + + // Read DataRecord Length + dbfFileStream.Position = 10; + bb = new byte[2]; + dbfFileStream.Read(bb, 0, 2); + short dataRecord_Length = BitConverter.ToInt16(bb, 0); + + // Read Çàãîëîâêè Ïîëåé + dbfFileStream.Position = 32; + string[] Fields_Name = new string[FieldsCount]; // Ìàññèâ íàçâàíèé ïîëåé + Hashtable fieldsLength = new Hashtable(); // Ìàññèâ ðàçìåðîâ ïîëåé + fieldsType = new Hashtable(); // Ìàññèâ òèïîâ ïîëåé + byte[] Fields_Dig = new byte[FieldsCount]; // Ìàññèâ ðàçìåðîâ äðîáíîé ÷àñòè + int[] Fields_Offset = new int[FieldsCount]; // Ìàññèâ îòñòóïîâ + bb = new byte[32 * FieldsCount]; // Îïèñàíèå ïîëåé: 32 áàéòa * êîë-âî, íà÷èíàÿ ñ 33-ãî + dbfFileStream.Read(bb, 0, bb.Length); + int FieldsLength = 0; + for (int x = 0; x < FieldsCount; x++) + { + Fields_Name[x] = System.Text.Encoding.Default.GetString(bb, x * 32, 10).TrimEnd(new char[] { (char)0x00 }).ToUpper(); + fieldsType.Add(Fields_Name[x], "" + (char)bb[x * 32 + 11]); + fieldsLength.Add(Fields_Name[x], (int)bb[x * 32 + 16]); + Fields_Dig[x] = bb[x * 32 + 17]; + Fields_Offset[x] = 1 + FieldsLength; + FieldsLength = FieldsLength + (int)fieldsLength[Fields_Name[x]]; + + // loadedScript.fieldsType[Fields_Name[x]] == "L" -- System.Boolean + // loadedScript.fieldsType[Fields_Name[x]] == "D" -- System.DateTime + // loadedScript.fieldsType[Fields_Name[x]] == "N" -- System.Int32 (FieldDigs[x] == 0) / System.Decimal (FieldDigs[x] != 0) + // loadedScript.fieldsType[Fields_Name[x]] == "F" -- System.Double + // loadedScript.fieldsType[Fields_Name[x]] == "C" -- System.String + // loadedScript.fieldsType[Fields_Name[x]] == def -- System.String + }; + dbfFileStream.Close(); + + return Fields_Name; + } + + /// + /// ×èòàåì shp è dbf + /// + /// Èìÿ shp ôàéëà + private void ReadInnerFiles(string filename) + { + // PRE READ + if ((stream_ShapeFile_FieldNames.SOURCE == "OSM2") || (stream_ShapeFile_FieldNames.SOURCE == "OSM2SHP")) + { + string method = ""; + try + { + method = "Read_OSM_ADDIT_DBF_NODES: "; + Read_OSM_ADDIT_DBF_NODES(filename); + + method = "Read_OSM_ADDIT_DBF_NOTURN: "; + Read_OSM_ADDIT_DBF_NOTURN(filename); + } + catch (Exception ex) + { + Console.WriteLine("ERROR: " + method + ex.ToString()); + Console.ReadLine(); + throw ex; + }; + }; + + Console.Write("Open Shape Files "); + + FileStream shapeFileStream = new FileStream(filename, FileMode.Open, FileAccess.Read); + long shapeFileLength = shapeFileStream.Length; + + bool readAll = shapeFileLength < 1024 * 1024 * 250; // 250 MB + if (readAll) + Console.Write("to Memory ... "); + else + Console.WriteLine(" ..."); + + + Byte[] shapeFileData = new Byte[readAll ? shapeFileLength : 100];//new Byte[shapeFileLength]; + shapeFileStream.Read(shapeFileData, 0, shapeFileData.Length); + if (readAll) + { + Console.WriteLine(GetFileSize(shapeFileLength)); + shapeFileStream.Close(); + }; + + // check valid records type + int shapetype = readIntLittle(shapeFileData, 32); + if (shapetype != 3) + { + Console.WriteLine("ERROR: Shape doesn't contains roads (not polyline)"); + Console.ReadLine(); + throw new Exception("Shape doesn't contains roads (not polyline)"); + }; + + // read DBF + string dbffile = filename.Substring(0, filename.Length - 4) + ".dbf"; + FileStream dbfFileStream = new FileStream(dbffile, FileMode.Open, FileAccess.Read); + + // Read File Version + dbfFileStream.Position = 0; + int ver = dbfFileStream.ReadByte(); + + // Read Records Count + dbfFileStream.Position = 04; + byte[] bb = new byte[4]; + dbfFileStream.Read(bb, 0, 4); + total_lines = BitConverter.ToInt32(bb, 0); + Console.CursorTop = Console.CursorTop - 1; + Console.Write("Lines in shape: "); + ConsoleColor cc = Console.ForegroundColor; + Console.ForegroundColor = ConsoleColor.Yellow; + Console.Write(total_lines.ToString()); + Console.ForegroundColor = cc; + Console.Write((readAll ? " - in mem " : " - on disk ") + GetFileSize(shapeFileLength)); + { + string s = ""; + for (int i = Console.CursorLeft; i < 60; i++) s += " "; + Console.WriteLine(s); + }; + + // Read DataRecord 1st Position + dbfFileStream.Position = 8; + bb = new byte[2]; + dbfFileStream.Read(bb, 0, 2); + short dataRecord_1st_Pos = BitConverter.ToInt16(bb, 0); + int FieldsCount = (((bb[0] + (bb[1] * 0x100)) - 1) / 32) - 1; + + // Read DataRecord Length + dbfFileStream.Position = 10; + bb = new byte[2]; + dbfFileStream.Read(bb, 0, 2); + short dataRecord_Length = BitConverter.ToInt16(bb, 0); + + // Read Çàãîëîâêè Ïîëåé + dbfFileStream.Position = 32; + string[] Fields_Name = new string[FieldsCount]; // Ìàññèâ íàçâàíèé ïîëåé + Hashtable fieldsLength = new Hashtable(); // Ìàññèâ ðàçìåðîâ ïîëåé + Hashtable fieldsType = new Hashtable(); // Ìàññèâ òèïîâ ïîëåé + byte[] Fields_Dig = new byte[FieldsCount]; // Ìàññèâ ðàçìåðîâ äðîáíîé ÷àñòè + int[] Fields_Offset = new int[FieldsCount]; // Ìàññèâ îòñòóïîâ + bb = new byte[32 * FieldsCount]; // Îïèñàíèå ïîëåé: 32 áàéòa * êîë-âî, íà÷èíàÿ ñ 33-ãî + dbfFileStream.Read(bb, 0, bb.Length); + int FieldsLength = 0; + for (int x = 0; x < FieldsCount; x++) + { + Fields_Name[x] = System.Text.Encoding.Default.GetString(bb, x * 32, 10).TrimEnd(new char[] { (char)0x00 }).ToUpper(); + fieldsType.Add(Fields_Name[x], "" + (char)bb[x * 32 + 11]); + fieldsLength.Add(Fields_Name[x], (int)bb[x * 32 + 16]); + Fields_Dig[x] = bb[x * 32 + 17]; + Fields_Offset[x] = 1 + FieldsLength; + FieldsLength = FieldsLength + (int)fieldsLength[Fields_Name[x]]; + + // loadedScript.fieldsType[Fields_Name[x]] == "L" -- System.Boolean + // loadedScript.fieldsType[Fields_Name[x]] == "D" -- System.DateTime + // loadedScript.fieldsType[Fields_Name[x]] == "N" -- System.Int32 (FieldDigs[x] == 0) / System.Decimal (FieldDigs[x] != 0) + // loadedScript.fieldsType[Fields_Name[x]] == "F" -- System.Double + // loadedScript.fieldsType[Fields_Name[x]] == "C" -- System.String + // loadedScript.fieldsType[Fields_Name[x]] == def -- System.String + }; + // end read dbf + + long currentPosition = 100; + int lines = 0; + Console.WriteLine(); + Console.WriteLine("Read data..."); + Console.WriteLine(); + while (currentPosition < shapeFileLength) + { + // Read Shape + int offset = 0; + if (!readAll) + { + shapeFileData = new byte[8]; + shapeFileStream.Read(shapeFileData, 0, shapeFileData.Length); + currentPosition += shapeFileData.Length; + } + else + { + offset = (int)currentPosition; + currentPosition += 8; + }; + + int recordNumber = readIntBig(shapeFileData, offset + 0); + int contentLength = readIntBig(shapeFileData, offset + 4); + + if (!readAll) + { + shapeFileData = new byte[contentLength * 2]; + shapeFileStream.Read(shapeFileData, 0, shapeFileData.Length); + currentPosition += shapeFileData.Length; + } + else + { + offset = (int)currentPosition; + currentPosition += contentLength * 2; + }; + + TLine vline = new TLine(); + int recordShapeType = readIntLittle(shapeFileData, 0); + vline.box = new Double[4]; + vline.box[0] = readDoubleLittle(shapeFileData, offset + 4); + vline.box[1] = readDoubleLittle(shapeFileData, offset + 12); + vline.box[2] = readDoubleLittle(shapeFileData, offset + 20); + vline.box[3] = readDoubleLittle(shapeFileData, offset + 28); + vline.numParts = readIntLittle(shapeFileData, offset + 36); + vline.parts = new int[vline.numParts]; + vline.numPoints = readIntLittle(shapeFileData, offset + 40); + vline.points = new PointF[vline.numPoints]; + int partStart = offset + 44; + for (int i = 0; i < vline.numParts; i++) + { + vline.parts[i] = readIntLittle(shapeFileData, partStart + i * 4); + } + int pointStart = offset + 44 + 4 * vline.numParts; + for (int i = 0; i < vline.numPoints; i++) + { + vline.points[i] = new PointF(0, 0); + vline.points[i].X = (float)readDoubleLittle(shapeFileData, pointStart + (i * 16)); + vline.points[i].Y = (float)readDoubleLittle(shapeFileData, pointStart + (i * 16) + 8); + }; + + // Read DBF + string[] FieldValues = new string[FieldsCount]; + Hashtable recordData = new Hashtable(); + for (int y = 0; y < FieldValues.Length; y++) + { + dbfFileStream.Position = (long)dataRecord_1st_Pos + (long)((long)dataRecord_Length * (long)lines) + (long)Fields_Offset[y]; + bb = new byte[(int)fieldsLength[Fields_Name[y]]]; + dbfFileStream.Read(bb, 0, bb.Length); + FieldValues[y] = stream_DBFEncoding.GetString(bb).Trim().TrimEnd(new char[] { (char)0x00 }); + recordData.Add(Fields_Name[y], FieldValues[y]); + }; + + if ((vline.numParts == 0) || (vline.numPoints == 0)) + { + string err1 = recordData[stream_ShapeFile_FieldNames.fldLinkId].ToString(); + err1 = "Line with ROAD_ID " + err1 + " have no points!!!"; + Console.WriteLine("ERROR " + err1); + Console.ReadLine(); + throw new Exception(err1); + }; + + try + { + OnReadLine(vline); + + if (stream_ShapeFile_FieldNames.SOURCE == "GARMIN") + OnReadLine_0_GARMIN(vline, recordData); + else if (stream_ShapeFile_FieldNames.SOURCE == "OSM") + OnReadLine_1_OSM(vline, recordData); + else if ((stream_ShapeFile_FieldNames.SOURCE == "OSM2") || (stream_ShapeFile_FieldNames.SOURCE == "OSM2SHP")) + OnReadLine_2_OSM2SHP(vline, recordData); + else if (stream_ShapeFile_FieldNames.SOURCE == "WATER") + OnReadLine_3_WATER(vline, recordData); + } + catch (Exception ex) + { + string pref = ""; + if ((stream_ShapeFile_FieldNames.fldLinkId != null) && (stream_ShapeFile_FieldNames.fldLinkId != String.Empty) + && (recordData[stream_ShapeFile_FieldNames.fldLinkId] != null) && (recordData[stream_ShapeFile_FieldNames.fldLinkId].ToString() != null) + && (recordData[stream_ShapeFile_FieldNames.fldLinkId].ToString() != String.Empty)) + pref = " [LINKID:" + recordData[stream_ShapeFile_FieldNames.fldLinkId].ToString() + "] "; + Console.WriteLine("ERROR" + pref + ex.ToString()); + Console.ReadLine(); + throw ex; + }; + lines++; + }; + UpdateCounter(true); + + if (!readAll) + shapeFileStream.Close(); + dbfFileStream.Close(); + } + + private Dictionary noturns_list = new Dictionary(); + private void Read_OSM_ADDIT_DBF_NOTURN(string filename) + { + if (String.IsNullOrEmpty(stream_ShapeFile_FieldNames.fldOSM_ADDIT_DBF_NOTURN)) return; + string noturn_file = Path.GetDirectoryName(filename).Trim('\\') + @"\" + stream_ShapeFile_FieldNames.fldOSM_ADDIT_DBF_NOTURN; + + if (File.Exists(noturn_file)) + { + Console.WriteLine("Read {0} file", Path.GetFileName(noturn_file)); + DBFSharp.DBFFile dbff = new DBFSharp.DBFFile(noturn_file); + Console.Write(" .. 0/0"); + int rdd = 0; + foreach (Dictionary rec in dbff.ReadAllRecords()) + { + rdd++; + if (rdd % 100 == 0) + { + Console.SetCursorPosition(0, Console.CursorTop); + Console.Write(" .. {0}/{1} of turn restrictions", rdd, dbff.RecordsCount); + }; + int ROAD_ID = int.Parse(rec["LINE_ID"].ToString()); + string FL = rec["FL"].ToString(); + noturns_list.Add(ROAD_ID, FL); + }; + Console.SetCursorPosition(0, Console.CursorTop); + Console.Write(" .. {0}/{1} of turn restrictions", rdd, dbff.RecordsCount); + Console.WriteLine(); + Console.WriteLine(); + dbff.Close(); + }; + } + + // // Must be replace with (No Hashset in .Net 2.0) + // HashSet nodes_list = HashSet(); + private Dictionary nodes_list = new Dictionary(); + private void Read_OSM_ADDIT_DBF_NODES(string filename) + { + if (String.IsNullOrEmpty(stream_ShapeFile_FieldNames.fldOSM_ADDIT_DBF_NODES)) return; + string nodes_file = Path.GetDirectoryName(filename).Trim('\\') + @"\" + stream_ShapeFile_FieldNames.fldOSM_ADDIT_DBF_NODES; + + if (File.Exists(nodes_file)) + { + Console.Write("Read {0} file ", Path.GetFileName(nodes_file)); + FileStream shapeNodesStream = new FileStream(nodes_file, FileMode.Open, FileAccess.Read); + long shapeNodesLength = shapeNodesStream.Length; + + bool readAll = shapeNodesLength < 1024 * 1024 * 250; // 250 MB + if (readAll) + Console.Write("to Memory ... "); + else + Console.Write("... "); + Console.WriteLine("{0}", GetFileSize(shapeNodesLength)); + + byte[] shapeNodesData = new byte[readAll ? shapeNodesLength : 100];//new Byte[shapeFileLength]; + shapeNodesStream.Read(shapeNodesData, 0, shapeNodesData.Length); + if (readAll) shapeNodesStream.Close(); + + string dbf_file = nodes_file.Replace(Path.GetExtension(nodes_file), ".dbf"); + DBFSharp.DBFFile dbff = new DBFSharp.DBFFile(dbf_file); + + int nodescount = (readIntBig(shapeNodesData, 24) * 2 - 100) / 28; + int shapentype = readIntLittle(shapeNodesData, 32); + + if (shapentype == 1) + { + Console.Write(" .. 0/0"); + + int readCount = 0; + long currentPosition = 100; + + unsafe + { + ulong xy = 0; + ulong* pxy = &xy; + float* px = (float*)&xy; + float* py = px + 1; + + while (currentPosition < shapeNodesLength) + { + int offset = 0; + if (!readAll) + { + shapeNodesData = new byte[28]; // Standard size of Point Record + shapeNodesStream.Read(shapeNodesData, 0, shapeNodesData.Length); + } + else + { + offset = (int)currentPosition; + }; + + // Read Shape + //int rn = readIntBig(shapeNodesData, offset); // Record Number + //int cl = readIntBig(shapeNodesData, offset + 4); // Content Length + //int t = readIntLittle(shapeNodesData, offset + 8); // Shape Type + double x = readDoubleLittle(shapeNodesData, offset + 8 + 4); // X Coordinate + double y = readDoubleLittle(shapeNodesData, offset + 8 + 12); // Y Coordinate + + *px = (float)x; + *py = (float)y; + + // Read DBF + Dictionary dbfrec = dbff.ReadNext(); + ulong NODE_ID = ulong.Parse(dbfrec["NODE_ID"].ToString()); + int L_COUNT = int.Parse(dbfrec["L_COUNT"].ToString()); + int ML_COUNT = int.Parse(dbfrec["ML_COUNT"].ToString()); + bool add = (ML_COUNT > 1) || ((L_COUNT > 1) && (ML_COUNT > 0)); + + // KEEP + if (add) + { + if (!nodes_list.ContainsKey(xy)) + nodes_list.Add(xy, 0); + else + nodes_list[xy]++; + }; + + currentPosition += 28; // (4 + cl) * 2; + readCount++; + + if (readCount % 5000 == 0) + { + Console.SetCursorPosition(0, Console.CursorTop); + Console.Write(" .. {0}/{1} of nodes", readCount, nodescount); + }; + }; + }; + Console.SetCursorPosition(0, Console.CursorTop); + Console.Write(" .. {0}/{1} of nodes", readCount, nodescount); + Console.WriteLine(); + }; + shapeNodesStream.Close(); + dbff.Close(); + + Console.Write("Found {0} Nodes to Split Lines", nodes_list.Count); + Console.WriteLine(" - in mem " + GetFileSize(30 * nodes_list.Count)); + Console.WriteLine(); + }; + } + + private void UpdateCounter(bool always) + { + if (always || (analyse_LinesCount == 1) || (analyse_LinesCount % 50 == 0)) + { + Console.SetCursorPosition(0, Console.CursorTop - 2); + ConsoleColor cc = Console.ForegroundColor; + if (analyse_LinesDCount == analyse_LinesCount) + { + Console.Write("Lines"); + Console.ForegroundColor = ConsoleColor.DarkCyan; + Console.Write("/Segm"); + Console.ForegroundColor = cc; + Console.Write(" Nodes/NoTurns: "); + Console.ForegroundColor = ConsoleColor.Yellow; + Console.Write(String.Format("{0}", analyse_LinesCount)); + Console.ForegroundColor = ConsoleColor.DarkCyan; + Console.Write(String.Format("/{0}", analyse_SegmentsCount)); + Console.ForegroundColor = ConsoleColor.Yellow; + Console.WriteLine(String.Format(" {0}/{1}", analyse_Nodes.Count, analyse_NoTurns.Count)); + } + else + { + Console.Write("Lines"); + Console.ForegroundColor = ConsoleColor.DarkCyan; + Console.Write("/Splitted/Segm"); + Console.ForegroundColor = cc; + Console.Write(" Nodes/NoTurns: "); + Console.ForegroundColor = ConsoleColor.Yellow; + Console.Write(String.Format("{0}", analyse_LinesCount)); + Console.ForegroundColor = ConsoleColor.DarkCyan; + Console.Write(String.Format("/{0}/{1}",analyse_LinesDCount, analyse_SegmentsCount)); + Console.ForegroundColor = ConsoleColor.Yellow; + Console.WriteLine(String.Format(" {0}/{1}",analyse_Nodes.Count, analyse_NoTurns.Count)); + }; + Console.ForegroundColor = cc; + TimeSpan elapsed = DateTime.Now.Subtract(started); + DateTime end = started.AddSeconds(elapsed.TotalSeconds / (double)analyse_LinesCount * (double)total_lines); + TimeSpan more = end.Subtract(DateTime.Now); + Console.Write("Shape read "); + Console.ForegroundColor = ConsoleColor.Green; + Console.Write(String.Format(System.Globalization.CultureInfo.InvariantCulture, "{0:P}", (float)analyse_LinesCount / (float)total_lines)); + Console.ForegroundColor = cc; + Console.Write(", elapsed "); + Console.ForegroundColor = ConsoleColor.Yellow; + Console.Write(String.Format(System.Globalization.CultureInfo.InvariantCulture, "{0}:{1:00}:{2:00}", (int)elapsed.TotalHours, elapsed.Minutes, elapsed.Seconds)); + Console.ForegroundColor = cc; + Console.Write(", end at "); + Console.ForegroundColor = ConsoleColor.Magenta; + Console.Write(String.Format(System.Globalization.CultureInfo.InvariantCulture, "{0:HH:mm dd.MM}", end)); + Console.ForegroundColor = cc; + Console.Write(" - "); + Console.ForegroundColor = ConsoleColor.DarkGreen; + Console.Write(String.Format(System.Globalization.CultureInfo.InvariantCulture, "{0}:{1:00}:{2:00}", (int)more.TotalHours, more.Minutes, more.Seconds)); + Console.ForegroundColor = cc; + Console.WriteLine(" more "); + }; + } + + /// + /// Èñï-ñÿ äëÿ string-->float + /// + private System.Globalization.CultureInfo stream_CultureInfo = System.Globalization.CultureInfo.InstalledUICulture; + /// + /// Èñï-ñÿ äëÿ string-->float + /// + private System.Globalization.NumberFormatInfo stream_NumberFormat; + + private void OnReadLine(TLine vline) + { + if (vline.box[0] < this.bounds_box[0]) this.bounds_box[0] = vline.box[0]; + if (vline.box[1] < this.bounds_box[1]) this.bounds_box[1] = vline.box[1]; + if (vline.box[2] > this.bounds_box[2]) this.bounds_box[2] = vline.box[2]; + if (vline.box[3] > this.bounds_box[3]) this.bounds_box[3] = vline.box[3]; + } + + // Get ROAD_ID as OSM_ID (WAY_ID) or LINK_ID + private int GetRoadID(ref Hashtable data, string fldName, string idName) + { + try + { + string idd = data[fldName].ToString(); + if (idd.IndexOf(".") > 0) idd = idd.Substring(0, idd.IndexOf(".")); + return int.Parse(idd); // LINK_ID or OSM_ID + } + catch + { + try + { + Console.WriteLine("ERROR: " + idName + " `" + data[fldName].ToString() + "` READ ERROR"); + } + catch + { + Console.WriteLine("ERROR: " + idName + " READ ERROR"); + }; + Console.ReadLine(); + throw new Exception(idName + " READ ERROR"); + }; + } + + // Get String Parameter from FieldName + private string GetStringID(ref Hashtable data, string fldName, string idName) + { + try + { + if (String.IsNullOrEmpty(fldName) == false && data.ContainsKey(fldName)) + return data[fldName].ToString().ToUpper(); + } + catch + { + Console.WriteLine("ERROR: " + idName + " READ ERROR"); + Console.ReadLine(); + throw new Exception(idName + "OSM_TYPE READ ERROR"); + }; + return null; + } + + // REQ: ONE_WAY, SPD_LIMIT, HWY, LINK_ID, LEN, TURN_RSTRS + /// + /// Âûçûâàåì äëÿ êàæäîé ëèíèè shp ôàéëà + /// + /// ëèíèÿ + /// ïîëÿ DBF + private void OnReadLine_0_GARMIN(TLine vline, Hashtable data) + { + // Inverse Latitude + if (stream_ShapeFile_FieldNames.InverseLat) + for (int i = 0; i < vline.points.Length; i++) vline.points[i].Y *= -1; + // Inverse Longitude + if (stream_ShapeFile_FieldNames.InverseLon) + for (int i = 0; i < vline.points.Length; i++) vline.points[i].X *= -1; + + analyse_LinesCount++; // ñ÷åò÷èê ëèíèé â ôàéëå + analyse_LinesDCount++; // ñ÷åò÷èê ëèíèé â ôàéëå + analyse_SegmentsCount += vline.points.Length - 1; // ñ÷åò÷èê ñåãìåíòîâ ëèíèé â ôàéëå + + // Main Fields + uint LINE = (uint)analyse_LinesCount; + int ROAD_ID = GetRoadID(ref data, stream_ShapeFile_FieldNames.fldLinkId, "LINK_ID"); + string GRMN_TYPE = data[stream_ShapeFile_FieldNames.fldGarminType].ToString(); + + // Addit Fields + string onewayvalue = data[stream_ShapeFile_FieldNames.fldOneWay].ToString().Trim(); + bool one_way = (onewayvalue == "yes") || (onewayvalue == "1") || (onewayvalue == "T"); // îäíîñòîðîííåå äâèæåíèå + bool roundabout = GRMN_TYPE == "ROUNDABOUT"; + + // Speed Fields + int ROUTE_SPEED = 0; + if ((stream_ShapeFile_FieldNames.fldRouteSpeed != null) && (stream_ShapeFile_FieldNames.fldRouteSpeed != String.Empty)) + { + try + { + string rsp = data[stream_ShapeFile_FieldNames.fldRouteSpeed].ToString(); + if (rsp.Length > 0) + ROUTE_SPEED = int.Parse(rsp); // ñêîðîñòü íà ó÷àñòêå + } + catch { Console.WriteLine("ERROR: ROUTE SPEED READ ERROR"); Console.ReadLine(); throw new Exception("ROUTE SPEED READ ERROR"); }; + }; + int SPEED_LIMIT = 60; + try + { + string spddlmt = data[stream_ShapeFile_FieldNames.fldSpeedLimit].ToString(); + if (spddlmt.IndexOf(".") > 0) spddlmt = spddlmt.Substring(0, spddlmt.IndexOf(".")); + SPEED_LIMIT = int.Parse(spddlmt); // îãðàíè÷åíèå ñêîðîñòè íà ó÷àñòêå + } + catch { + Console.WriteLine("ERROR: SPEED LIMIT READ ERROR"); + Console.ReadLine(); + throw new Exception("SPEED LIMIT READ ERROR"); + }; + + // Recalculate Speed + if ((GRMN_TYPE == "UNPAVED_ROAD") && (SPEED_LIMIT > 30)) SPEED_LIMIT = 30; + + // Normalize Speed + int speed_normal = ROUTE_SPEED; + if (speed_normal == 0) + { + speed_normal = SPEED_LIMIT > 70 ? SPEED_LIMIT - 15 : SPEED_LIMIT - 10; // ñêîðîñòü äâèæåíèÿ íà ó÷àñòêå + if (roundabout && (SPEED_LIMIT > 40)) SPEED_LIMIT = 40; + if (speed_normal <= 0) speed_normal = 3; // åñëè ñêîðîñòü îòðèö. èëè íîëü - 3 êì/÷ (ãðóíòîâêà) + }; + if ((GRMN_TYPE.IndexOf("HWY") >= 0) && (SPEED_LIMIT < 110)) SPEED_LIMIT = 110; // ìàãèñòðàëü/øîññå + + OnReadLine_Calculations(ref data, ref vline, speed_normal, SPEED_LIMIT, LINE, ROAD_ID, 0, vline.numPoints - 1, one_way, roundabout, GRMN_TYPE, null, null, null); + UpdateCounter(false); + } + + /// + /// Âûçûâàåì äëÿ êàæäîé ëèíèè shp ôàéëà + /// + /// ëèíèÿ + /// ïîëÿ DBF + private void OnReadLine_1_OSM(TLine vline, Hashtable data) + { + // Inverse Latitude + if (stream_ShapeFile_FieldNames.InverseLat) + for (int i = 0; i < vline.points.Length; i++) vline.points[i].Y *= -1; + // Inverse Longitude + if (stream_ShapeFile_FieldNames.InverseLon) + for (int i = 0; i < vline.points.Length; i++) vline.points[i].X *= -1; + + analyse_LinesCount++; // ñ÷åò÷èê ëèíèé â ôàéëå + analyse_LinesDCount++; // ñ÷åò÷èê ëèíèé â ôàéëå + analyse_SegmentsCount += vline.points.Length - 1; // ñ÷åò÷èê ñåãìåíòîâ ëèíèé â ôàéëå + + // Main Fields + uint LINE = (uint)analyse_LinesCount; + int ROAD_ID = GetRoadID(ref data, stream_ShapeFile_FieldNames.fldOSM_ID, "OSM_ID"); + string OSM_SURFACE = data[stream_ShapeFile_FieldNames.fldOSM_SURFACE].ToString(); + + // Addit Fields + string onewayvalue = data[stream_ShapeFile_FieldNames.fldOneWay].ToString().Trim(); + bool one_way = (onewayvalue == "yes") || (onewayvalue == "1") || (onewayvalue == "T"); // îäíîñòîðîííåå äâèæåíèå + + // Speed Fields + int SPEED_LIMIT = 60; + try + { + string spddlmt = data[stream_ShapeFile_FieldNames.fldSpeedLimit].ToString(); + if (spddlmt.IndexOf(".") > 0) spddlmt = spddlmt.Substring(0, spddlmt.IndexOf(".")); + int.TryParse(spddlmt, out SPEED_LIMIT); // îãðàíè÷åíèå ñêîðîñòè íà ó÷àñòêå + } + catch { Console.WriteLine("ERROR: SpeedLimit READ ERROR"); Console.ReadLine(); throw new Exception("SpeedLimit READ ERROR"); }; + + // Recalculate Speed + if ((OSM_SURFACE == "unpaved") && (SPEED_LIMIT > 30)) SPEED_LIMIT = 15; + if ((OSM_SURFACE == "paving_stones") && (SPEED_LIMIT > 30)) SPEED_LIMIT = 30; + + // Normalize Speed + int speed_normal = SPEED_LIMIT > 70 ? SPEED_LIMIT - 15 : SPEED_LIMIT - 10; // ñêîðîñòü äâèæåíèÿ íà ó÷àñòêå + if (speed_normal <= 0) speed_normal = 3; // åñëè ñêîðîñòü îòðèö. èëè íîëü - 3 êì/÷ (ãðóíòîâêà) + + OnReadLine_Calculations(ref data, ref vline, speed_normal, SPEED_LIMIT, LINE, ROAD_ID, 0, vline.numPoints - 1, one_way, false, null, null, OSM_SURFACE, null); + UpdateCounter(false); + } + + /// + /// Âûçûâàåì äëÿ êàæäîé ëèíèè shp ôàéëà + /// + /// ëèíèÿ + /// ïîëÿ DBF + private void OnReadLine_2_OSM2SHP(TLine vline, Hashtable data) + { + analyse_LinesCount++; // ñ÷åò÷èê ëèíèé â ôàéëå + + if ((nodes_list == null) || (nodes_list.Count == 0)) // íåò óçëîâ â ëèíèÿõ + OnReadLine_2_OSM2SHP_Splitted(vline, data, 0, vline.numPoints - 1); + else + { + unsafe + { + ulong xy = 0; + ulong* pxy = &xy; + float* px = (float*)&xy; + float* py = px + 1; + + List split_to = new List(); + for (int i = 1; i < vline.numPoints - 1; i++) + { + *px = (float)vline.points[i].X; + *py = (float)vline.points[i].Y; + + if (nodes_list.ContainsKey(xy)) + split_to.Add(i); + }; + if (split_to.Count == 0) // íåò óçëîâ â ëèíèè + OnReadLine_2_OSM2SHP_Splitted(vline, data, 0, vline.numPoints - 1); + else + { + split_to.Insert(0, 0); + split_to.Add(vline.numPoints - 1); + for (int i = 1; i < split_to.Count; i++) + { + TLine l2 = new TLine(); + l2.box = vline.box; + l2.numParts = 1; + l2.numPoints = split_to[i] - split_to[i-1] + 1; + l2.parts = new int[] { 0 }; + l2.points = new PointF[l2.numPoints]; + for (int y = split_to[i - 1]; y <= split_to[i]; y++) + l2.points[y - split_to[i - 1]] = vline.points[y]; + + OnReadLine_2_OSM2SHP_Splitted(l2, data, split_to[i - 1], split_to[i]); + }; + }; + }; + }; + + UpdateCounter(false); + } + + /// + /// Âûçûâàåì äëÿ êàæäîãî ó÷àñòêà ðàçäåëåííîé ëèíèè shp ôàéëà + /// + /// ëèíèÿ + /// ïîëÿ DBF + /// èíäåêñ íà÷àëüíîé òî÷êè + /// èíäåêñ êîíå÷íîé òî÷êè + private void OnReadLine_2_OSM2SHP_Splitted(TLine vline, Hashtable data, int sFrom, int sTo) + { + // Inverse Latitude + if (stream_ShapeFile_FieldNames.InverseLat) for (int i = 0; i < vline.points.Length; i++) vline.points[i].Y *= -1; + // Inverse Longitude + if (stream_ShapeFile_FieldNames.InverseLon) for (int i = 0; i < vline.points.Length; i++) vline.points[i].X *= -1; + + analyse_LinesDCount++; // ñ÷åò÷èê äåëåíûõ ëèíèé â ôàéëå + analyse_SegmentsCount += vline.points.Length - 1; // ñ÷åò÷èê ñåãìåíòîâ ëèíèé â ôàéëå + + // Main Fields + uint LINE = (uint)analyse_LinesDCount; + int ROAD_ID = GetRoadID(ref data, stream_ShapeFile_FieldNames.fldOSM_ID, "OSM_ID"); + string GRMN_TYPE = String.IsNullOrEmpty(stream_ShapeFile_FieldNames.fldGarminType) == false && data.ContainsKey(stream_ShapeFile_FieldNames.fldGarminType) ? data[stream_ShapeFile_FieldNames.fldGarminType].ToString().ToUpper() : ""; + string OSM_TYPE = GetStringID(ref data, stream_ShapeFile_FieldNames.fldOSM_TYPE, "OSM_TYPE"); + string OSM_SURFACE = GetStringID(ref data, stream_ShapeFile_FieldNames.fldOSM_SURFACE, "OSM_SURFACE"); + string OSM_SERVICE = GetStringID(ref data, stream_ShapeFile_FieldNames.fldOSM_ADDIT_SERVICE, "OSM_SERVICE"); + if (String.IsNullOrEmpty(OSM_TYPE)) return; // Not a Road + + // Addit Fields + string onewayvalue = data[stream_ShapeFile_FieldNames.fldOneWay].ToString().Trim(); + bool one_way = (onewayvalue == "yes") || (onewayvalue == "1") || (onewayvalue == "T"); // îäíîñòîðîííåå äâèæåíèå + bool roundabout = GRMN_TYPE == "ROUNDABOUT"; + try // ROUNDABOUT by OSM + { + if ((!String.IsNullOrEmpty(stream_ShapeFile_FieldNames.fldOSM_ADDIT_JUNCTION)) && data.ContainsKey(stream_ShapeFile_FieldNames.fldOSM_ADDIT_JUNCTION)) + if (data[stream_ShapeFile_FieldNames.fldOSM_ADDIT_JUNCTION].ToString().ToUpper() == "ROUNDABOUT") + roundabout = true; + } + catch { }; + + // Speed Fields, SPEED_LIMIT from MAXSPEED + int SPEED_LIMIT = 60; + bool SPEED_UP = false; + try // MAXSPEED + { + if ((String.IsNullOrEmpty(stream_ShapeFile_FieldNames.fldSpeedLimit) == false) && data.ContainsKey(stream_ShapeFile_FieldNames.fldSpeedLimit)) + { + string spddlmt = data[stream_ShapeFile_FieldNames.fldSpeedLimit].ToString().ToUpper(); + if (!String.IsNullOrEmpty(spddlmt)) + { + if (spddlmt.IndexOf(".") > 0) spddlmt = spddlmt.Substring(0, spddlmt.IndexOf(".")); + int sl = 0; + if (int.TryParse(spddlmt, out sl)) + { + SPEED_LIMIT = sl; // îãðàíè÷åíèå ñêîðîñòè íà ó÷àñòêå + SPEED_UP = true; + } + else + { + if (spddlmt == "RU:LIVING_STREET") { SPEED_LIMIT = 15; SPEED_UP = true; }; + if (spddlmt == "RU:RURAL") { SPEED_LIMIT = 20; SPEED_UP = true; }; + if (spddlmt == "RU:URBAN") { SPEED_LIMIT = 40; SPEED_UP = true; }; + }; + }; + }; + } + catch { }; + + // Speed Fields, SPEED_LIMIT from MAXSPEED:PRACTICAL + try // MAXSPEED:PRACTICAL + { + if ((!String.IsNullOrEmpty(stream_ShapeFile_FieldNames.fldOSM_ADDIT_MAXACTUAL)) && data.ContainsKey(stream_ShapeFile_FieldNames.fldOSM_ADDIT_MAXACTUAL)) + { + string spddlmt = data[stream_ShapeFile_FieldNames.fldOSM_ADDIT_MAXACTUAL].ToString().ToUpper(); + if (!String.IsNullOrEmpty(spddlmt)) + { + if (spddlmt.IndexOf(".") > 0) spddlmt = spddlmt.Substring(0, spddlmt.IndexOf(".")); + int sl = 0; + if (int.TryParse(spddlmt, out sl)) + { + SPEED_LIMIT = sl; // îãðàíè÷åíèå ñêîðîñòè íà ó÷àñòêå + SPEED_UP = true; + } + else + { + if (spddlmt == "RU:LIVING_STREET") { SPEED_LIMIT = 15; SPEED_UP = true; }; + if (spddlmt == "RU:RURAL") { SPEED_LIMIT = 20; SPEED_UP = true; }; + if (spddlmt == "RU:URBAN") { SPEED_LIMIT = 40; SPEED_UP = true; }; + }; + }; + }; + } + catch { }; + + // Speed Fields, ROUTE_SPEED + int ROUTE_SPEED = 0; + if ((stream_ShapeFile_FieldNames.fldRouteSpeed != null) && (stream_ShapeFile_FieldNames.fldRouteSpeed != String.Empty)) + { + try + { + string rsp = data[stream_ShapeFile_FieldNames.fldRouteSpeed].ToString(); + if (rsp.Length > 0) ROUTE_SPEED = int.Parse(rsp); // ñêîðîñòü íà ó÷àñòêå + } + catch { }; + }; + + // Recalculate Speed + if (!SPEED_UP) // SPEED BY TYPE + { + switch (OSM_TYPE) // speed by OSM TYPE + { + case "PATH": case "BRIDLEWAY": case "CYCLEWAY": case "FOOTWAY": case "STEPS": case "CROSSING": case "BUS_STOP": + case "PEDESTRIAN": case "LIVING_STREET": case "BUS_GUIDEWAY": case "CORRIDOR": case "SIDEWALK": + SPEED_LIMIT = 3; + break; + case "REST_AREA": case "PLATFORM": case "CONSTRUCTION": case "PROPOSED": + SPEED_LIMIT = 5; + break; + case "PRIMARY_LINK": case "TERTIALY_LINK": + SPEED_LIMIT = 60; + break; + case "PRIMARY": case "TERTIALY": + SPEED_LIMIT = 80; + break; + case "SERVICE": case "SERVICES": case "BUSWAY": + SPEED_LIMIT = 15; + break; + case "ROAD": case "UNCLASSIFIED": case "TRACK": + SPEED_LIMIT = 20; + break; + }; + if (!String.IsNullOrEmpty(OSM_SURFACE)) // speed by OSM SURFACE + { + switch (OSM_SURFACE) + { + case "UNPAVED": + case "PAVED": + case "PAVING_STONES": + case "PUBBLESTONE": + if (SPEED_LIMIT > 15) SPEED_LIMIT = 15; + break; + case "MUD": + case "DIRT": + case "EARTH": + case "GROUND": + case "DIRT/SAND": + case "SAND": + SPEED_LIMIT = 20; + break; + case "GRAVEL": + SPEED_LIMIT = 30; + break; + case "FINE_GRAVEL": + case "WOOD": + SPEED_LIMIT = 40; + break; + case "GRASS": + SPEED_LIMIT = 15; + break; + case "METAL": + SPEED_LIMIT = 5; + break; + case "ASPHALT": + if (SPEED_LIMIT < 15) SPEED_LIMIT = 15; + break; + }; + }; + if (!String.IsNullOrEmpty(OSM_SERVICE)) // speed by OSM SERVICE + { + switch (OSM_SERVICE) + { + case "ALLEY": + case "DRIVEWAY": + case "PARKING_AISLE": + case "EMERGENCY_ACCESS": + SPEED_LIMIT = 5; + break; + }; + }; + if (!String.IsNullOrEmpty(GRMN_TYPE)) // speed by GARMIN TYPE + { + switch (GRMN_TYPE) + { + case "ALLEY": + case "TRAIL": + SPEED_LIMIT = 5; + break; + case "UNPAVED_ROAD": + case "IMPROVED_UNPAVED_ROAD": + if (SPEED_LIMIT > 15) SPEED_LIMIT = 15; + break; + + }; + }; + }; + + if ((GRMN_TYPE.IndexOf("HWY") >= 0) && (SPEED_LIMIT < 110)) // speed by GRMN_TYPE + SPEED_LIMIT = 110; // ìàãèñòðàëü/øîññå + + try + { + if ((!String.IsNullOrEmpty(stream_ShapeFile_FieldNames.fldOSM_ADDIT_LANES)) && data.ContainsKey(stream_ShapeFile_FieldNames.fldOSM_ADDIT_LANES)) + { + int lanes = int.Parse(data[stream_ShapeFile_FieldNames.fldOSM_ADDIT_LANES].ToString()); + if ((lanes > 3) && (SPEED_LIMIT < 60)) SPEED_LIMIT = 60; + if ((lanes > 7) && (SPEED_LIMIT < 80)) SPEED_LIMIT = 80; + }; + } + catch { }; + + if ((ROUTE_SPEED > 0) && (SPEED_LIMIT > ROUTE_SPEED)) ROUTE_SPEED = 0; + + // Normalize Speed + int speed_normal = ROUTE_SPEED; + if (speed_normal == 0) + { + speed_normal = SPEED_LIMIT > 70 ? SPEED_LIMIT - 15 : SPEED_LIMIT - 10; // ñêîðîñòü äâèæåíèÿ íà ó÷àñòêå + if (roundabout && (SPEED_LIMIT > 40)) SPEED_LIMIT = 40; + if (speed_normal <= 0) speed_normal = 3; // åñëè ñêîðîñòü îòðèö. èëè íîëü - 3 êì/÷ (ãðóíòîâêà) + }; + + OnReadLine_Calculations(ref data, ref vline, speed_normal, SPEED_LIMIT, LINE, ROAD_ID, sFrom, sTo, one_way, roundabout, GRMN_TYPE, OSM_TYPE, OSM_SURFACE, OSM_SERVICE); + } + + /// + /// Âûçûâàåì äëÿ êàæäîé ëèíèè shp ôàéëà + /// + /// ëèíèÿ + /// ïîëÿ DBF + private void OnReadLine_3_WATER(TLine vline, Hashtable data) + { + // Inverse Latitude + if (stream_ShapeFile_FieldNames.InverseLat) + for (int i = 0; i < vline.points.Length; i++) vline.points[i].Y *= -1; + // Inverse Longitude + if (stream_ShapeFile_FieldNames.InverseLon) + for (int i = 0; i < vline.points.Length; i++) vline.points[i].X *= -1; + + analyse_LinesCount++; // ñ÷åò÷èê ëèíèé â ôàéëå + analyse_LinesDCount++; // ñ÷åò÷èê ëèíèé â ôàéëå + analyse_SegmentsCount += vline.points.Length - 1; // ñ÷åò÷èê ñåãìåíòîâ ëèíèé â ôàéëå + + // Main Fields + uint LINE = (uint)analyse_LinesCount; + int ROAD_ID = GetRoadID(ref data, stream_ShapeFile_FieldNames.fldOSM_ID, "OSM_ID"); + + string onewayvalue = ""; try { onewayvalue = data[stream_ShapeFile_FieldNames.fldOneWay].ToString().Trim(); } catch { }; + bool one_way = (onewayvalue == "yes") || (onewayvalue == "1") || (onewayvalue == "T"); // îäíîñòîðîííåå äâèæåíèå + + // Speed Fields + int SPEED_LIMIT = 48; // 26 knots + try + { + string spddlmt = data[stream_ShapeFile_FieldNames.fldSpeedLimit].ToString(); + if (spddlmt.IndexOf(".") > 0) spddlmt = spddlmt.Substring(0, spddlmt.IndexOf(".")); + int.TryParse(spddlmt, out SPEED_LIMIT); // îãðàíè÷åíèå ñêîðîñòè íà ó÷àñòêå + } + catch { }; + + int ROUTE_SPEED = 0; + try + { + string routespd = data[stream_ShapeFile_FieldNames.fldRouteSpeed].ToString(); + if (routespd.IndexOf(".") > 0) routespd = routespd.Substring(0, routespd.IndexOf(".")); + int.TryParse(routespd, out ROUTE_SPEED); // îãðàíè÷åíèå ñêîðîñòè íà ó÷àñòêå + } + catch { }; + + + /* CHECK ROUTE SPEED */ + if (data.ContainsKey("AMENITY")) + { + string rv = data["AMENITY"] == null ? "" : data["AMENITY"].ToString().ToLower(); + if ((!String.IsNullOrEmpty(rv)) && (rv == "ferry_terminal")) ROUTE_SPEED = 3; + }; + if (data.ContainsKey("MAN_MAID")) + { + string rv = data["MAN_MAID"] == null ? "" : data["MAN_MAID"].ToString().ToLower(); + if ((!String.IsNullOrEmpty(rv)) && (rv == "pier")) ROUTE_SPEED = 3; + }; + if (data.ContainsKey("HARBOUR")) + { + string rv = data["HARBOUR"] == null ? "" : data["HARBOUR"].ToString().ToLower(); + if ((!String.IsNullOrEmpty(rv)) && (rv == "yes")) ROUTE_SPEED = 3; + }; + if (data.ContainsKey("INDUSTRIAL")) + { + string rv = data["INDUSTRIAL"] == null ? "" : data["INDUSTRIAL"].ToString().ToLower(); + if ((!String.IsNullOrEmpty(rv)) && (rv == "port")) ROUTE_SPEED = 3; + }; + + /* Normalize Speed */ + if(ROUTE_SPEED == 0) + { + ROUTE_SPEED = SPEED_LIMIT > 26 ? SPEED_LIMIT - 15 : SPEED_LIMIT - 10; + if (ROUTE_SPEED <= 0) ROUTE_SPEED = 5; + }; + + OnReadLine_Calculations(ref data, ref vline, ROUTE_SPEED, SPEED_LIMIT, LINE, ROAD_ID, 0, vline.numPoints - 1, one_way, false, null, "WATERWAY", null, null); + UpdateCounter(false); + } + + /// + /// Àíèëèç ó÷àñòêà è åãî ñîõðàíåíèå + /// + /// ïîëÿ DBF + /// ëèíèÿ + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + private void OnReadLine_Calculations(ref Hashtable data, ref TLine vline, int speed_normal, int SPEED_LIMIT, uint LINE, int ROAD_ID, int sFrom, int sTo, + bool one_way, bool roundabout, string GRMN_TYPE, string OSM_TYPE, string OSM_SURFACE, string OSM_SERVICE) + { + float dist = CheckLineDist(ref data, ref vline); + float lat1 = vline.points[0].Y; + float lon1 = vline.points[0].X; + float lat2 = vline.points[vline.points.Length - 1].Y; + float lon2 = vline.points[vline.points.Length - 1].X; + + uint sn = NodeByLatLon(lat1, lon1); // íà÷àëüíûé óçåë + if (sn == 0) sn = AddNode(lat1, lon1); + uint en = NodeByLatLon(lat2, lon2); // êîíå÷íûé óçåë + if (en == 0) en = AddNode(lat2, lon2); + + if (dist > analyse_maxLengthBetweenNodes) analyse_maxLengthBetweenNodes = dist; // ìàêñ äëèíà ó÷àñòêà + if (dist < const_maxError) dist = const_maxError + (float)0.00001; // íóæíî äëÿ êîððåêòíîãî ðàñ÷åòà + + float time = dist / 1000 / (float)speed_normal * 60; // âðåìÿ äâèæåíèÿ ïî ó÷àñòêó â ìèíóòàõ + float cost = dist / 1000 / (float)SPEED_LIMIT * 60; // îöåíî÷íîå âðåìÿ äâèæåíèÿ ïî ó÷àñòêó â ìèíóòàõ + if (time > analyse_maxTimeBetweenNodes) analyse_maxTimeBetweenNodes = time; + if (cost > analyse_maxCostBetweenNodes) analyse_maxCostBetweenNodes = cost; + + // Turn Restrictions // çàïðåòû ïîâîðîòîâ + CheckTurnRestrictions(ref data, LINE, sn, en, ROAD_ID, sFrom, sTo); + + analyse_Nodes[(int)sn - 1].AddLink(en, cost, dist, time, LINE, false); // äîá. èñõ. ñâÿçü â íà÷. óçåë + analyse_Nodes[(int)en - 1].AddRLink(sn, cost, dist, time, LINE, false); // äîá. âõ. ñâÿçü â êîí. óçåë + if (!one_way) + { + analyse_Nodes[(int)en - 1].AddLink(sn, cost, dist, time, LINE, true); // äîá. èñõ. ñâÿçü â êîí. óçåë + analyse_Nodes[(int)sn - 1].AddRLink(en, cost, dist, time, LINE, true); // äîá. âõ. ñâÿçü â íà÷. óçåë + }; + + // tmc êîä + ushort tmc_code = CheckTMCCode(ref data); + + // ++ÀÒÐÈÁÓÒÈÂÍÛÅ ÄÀÍÍÛÅ ËÈÍÈÉ + bool hasattrib = CheckHasAttributes(ref data, GRMN_TYPE, SPEED_LIMIT, OSM_TYPE, OSM_SURFACE, OSM_SERVICE); + // --ÀÒÐÈÁÓÒÈÂÍÛÅ ÄÀÍÍÛÅ ËÈÍÈÉ + + byte[] seg = BitConverter.GetBytes((ushort)(vline.points.Length - 1)); // ñåãìåíòîâ â ëèíèè + byte[] pos = BitConverter.GetBytes((int)stream_LinesSegments.Position); // ïîçèöèÿ ïåðâîãî ñåãìåíòà ëèíèè â ôàéëå ñåãìåíòîâ + byte one = (byte)(0 + + (one_way ? (byte)1 : (byte)0) + // îäíîñòîðîíêà ? + (roundabout ? (byte)2 : (byte)0) + // êðóãîâîå ? + (tmc_code > 0 ? (byte)4 : (byte)0) + // tmc code exist ? + (hasattrib ? (byte)8 : (byte)0) // åñòü ëè àòðèáóòû ó ëèíèè ? + ); + byte[] nd1 = BitConverter.GetBytes(sn); // íà÷. óç. + byte[] nd2 = BitConverter.GetBytes(en); // êîí. óç. + + // ïèøåì ëèíèþ â ôàéë + stream_Lines.Write(seg, 0, seg.Length); + stream_Lines.Write(pos, 0, pos.Length); + stream_Lines.WriteByte(one); + stream_Lines.Write(nd1, 0, nd1.Length); + stream_Lines.Write(nd2, 0, nd2.Length); + stream_Lines.Flush(); + + byte[] linkid = BitConverter.GetBytes(ROAD_ID); // LINK_ID or OSM_ID or ROAD_ID + stream_LineIndex.Write(linkid, 0, linkid.Length); // ïèøåì LINK_ID or OSM_ID or ROAD_ID + + // ïèøåì lines names + if ((stream_ShapeFile_FieldNames.fldName != null) && (stream_ShapeFile_FieldNames.fldName != String.Empty) && (writeLinesNamesFile)) + { + string nam = data[stream_ShapeFile_FieldNames.fldName].ToString(); + byte[] btw = System.Text.Encoding.GetEncoding(1251).GetBytes(nam + "\r\n"); + stream_Names.Write(btw, 0, btw.Length); + }; + + // ñîõðàíÿåì RGNode + if ((stream_ShapeFile_FieldNames.fldRGNODE != null) && (stream_ShapeFile_FieldNames.fldRGNODE != String.Empty)) + { + string val = data[stream_ShapeFile_FieldNames.fldRGNODE].ToString(); + if (val.Length > 0) + { + bool inner = val.IndexOf("I") >= 0; + bool outer = val.IndexOf("O") >= 0; + bool begin = val.IndexOf("F") >= 0; + int len = 1; + int id = 0; int number = 0; + try + { + while (int.TryParse(val.Substring(1, len++), out id)) number = id; + } + catch { Console.WriteLine("ERROR: RGNODE READ ERROR"); Console.ReadLine(); throw new Exception("RGNODE READ ERROR"); }; + if (number == 0) + { + Console.WriteLine("ERROR: RGNODE COULDN'T BE ZERO(0) - ROAD_ID " + ROAD_ID.ToString()); + Console.ReadLine(); + throw new Exception("RGNODE READ ERROR"); + }; + TRGNode rgn = new TRGNode(begin ? sn : en, inner, outer, number, val, begin ? lat1 : lat2, begin ? lon1 : lon2); + analyse_RGNodes.Add(rgn); + }; + }; + + // ïèøåì ñåãìåíòû ëèíèè + byte[] lno = BitConverter.GetBytes(LINE); // íîìåð ëèíèè + for (int i = 1; i < vline.points.Length; i++) + { + byte[] sno = BitConverter.GetBytes((ushort)i); + byte[] lt0 = BitConverter.GetBytes((Single)vline.points[i - 1].Y); + byte[] ln0 = BitConverter.GetBytes((Single)vline.points[i - 1].X); + byte[] lt1 = BitConverter.GetBytes((Single)vline.points[i].Y); + byte[] ln1 = BitConverter.GetBytes((Single)vline.points[i].X); + float k = ((Single)vline.points[i].X - (Single)vline.points[i - 1].X) / (vline.points[i].Y - vline.points[i - 1].Y); + byte[] ka = BitConverter.GetBytes((Single)k); + float b = vline.points[i - 1].X - k * vline.points[i - 1].Y; + byte[] ba = BitConverter.GetBytes((Single)b); + + stream_LinesSegments.Write(lno, 0, lno.Length); + stream_LinesSegments.Write(sno, 0, sno.Length); + stream_LinesSegments.Write(lt0, 0, lt0.Length); + stream_LinesSegments.Write(ln0, 0, ln0.Length); + stream_LinesSegments.Write(lt1, 0, lt1.Length); + stream_LinesSegments.Write(ln1, 0, ln1.Length); + stream_LinesSegments.Write(ka, 0, ka.Length); + stream_LinesSegments.Write(ba, 0, ba.Length); + stream_LinesSegments.Flush(); + }; + } + + /// + /// Äëèíà ëèíèè + /// + /// + /// + /// + private float CheckLineDist(ref Hashtable data, ref TLine line) + { + float dist = 0; // äëèíà ó÷àñòêà â ìåòðàõ + if ((stream_ShapeFile_FieldNames.fldLength != null) && (stream_ShapeFile_FieldNames.fldLength != String.Empty)) + dist = float.Parse(data[stream_ShapeFile_FieldNames.fldLength].ToString(), stream_NumberFormat); // faster // read from DBF + else + for (int i = 1; i < line.points.Length; i++) // slower // calculate + { + float _lat1 = line.points[i - 1].Y; + float _lon1 = line.points[i - 1].X; + float _lat2 = line.points[i].Y; + float _lon2 = line.points[i].X; + dist += GetLengthMeters(_lat1, _lon1, _lat2, _lon2, false); + }; + return dist; + } + + /// + /// Ïðîâåðêà íà íàëè÷èå çàïðåòîâ ïîâîðîòà + /// + /// + /// + /// + /// + /// + /// + /// + private void CheckTurnRestrictions(ref Hashtable data, uint LINE, uint sn, uint en, int ROAD_ID, int sFrom, int sTo) + { + // Turn Restrictions // çàïðåòû ïîâîðîòîâ èç îñíîâíîãî DBF ôàéëà + if (!stream_ShapeFile_FieldNames.NoTurnRestrictions) + { + string tr = data[stream_ShapeFile_FieldNames.fldTurnRstr].ToString(); + if (tr.Length > 0) + { + // FORMAT:L0001;F0002;L003:01100111;F8976:0100111; or M.....[..] M0000001[01] + // M....[..] == Middle WAY_ID [PointNum]; where PointNumber is zero-indexed + string[] restrictions = tr.Split(new string[] { ";" }, StringSplitOptions.RemoveEmptyEntries); + foreach (string r in restrictions) + CheckTurnRestriction(r, LINE, sn, en, ROAD_ID, sFrom, sTo); + }; + }; + + // No turns from additional dbf file + if (noturns_list.Count > 0) + { + if (noturns_list.ContainsKey(ROAD_ID)) + { + string tr = noturns_list[ROAD_ID]; + // FORMAT:L0001;F0002;L003:01100111;F8976:0100111; or M.....[..] M0000001[01] + // M....[..] == Middle WAY_ID [PointNum]; where PointNumber is zero-indexed + string[] restrictions = tr.Split(new string[] { ";" }, StringSplitOptions.RemoveEmptyEntries); + foreach (string r in restrictions) + CheckTurnRestriction(r, LINE, sn, en, ROAD_ID, sFrom, sTo); + }; + }; + } + + /// + /// Ðàçáîð çàïðåòà ïîâîðîòà + /// + /// + /// + /// + /// + /// + /// + /// + private void CheckTurnRestriction(string restriction, uint LINE, uint sn, uint en, int ROAD_ID, int sFrom, int sTo) + { + // FORMAT:L0001;F0002;L003:01100111;F8976:0100111; or M.....[..] M0000001[01] + // M....[..] == Middle WAY_ID [PointNum]; where PointNumber is zero-indexed + + string rr = restriction; + if (rr.IndexOf(":") > 0) rr = rr.Substring(0, rr.IndexOf(":")); + if (rr.StartsWith("M")) // middle point + { + string[] qq = rr.Split(new char[] { 'M', '[', ']' }, StringSplitOptions.RemoveEmptyEntries); + if (qq.Length > 1) + { + int lineTo_linkId = 0; + int point_id = 0; + try + { + lineTo_linkId = int.Parse(qq[0]); + point_id = int.Parse(qq[1]); + } + catch { throw new Exception("Parse Turn Restriction M Error: " + restriction + " ROAD_ID: " + ROAD_ID.ToString()); }; + if (point_id == sFrom) analyse_NoTurns.Add(new TurnRestriction(LINE, sn, lineTo_linkId)); + if (point_id == sTo) analyse_NoTurns.Add(new TurnRestriction(LINE, en, lineTo_linkId)); + }; + } + else + { + bool fromStart = rr.Substring(0, 1) == "F"; + int lineTo_linkId = 0; + try + { + lineTo_linkId = int.Parse(rr.Substring(1)); + } + catch { throw new Exception("Parse Turn Restriction FL Error: " + restriction + " ROAD_ID: " + ROAD_ID.ToString()); }; + if (fromStart) + analyse_NoTurns.Add(new TurnRestriction(LINE, sn, lineTo_linkId)); + else + analyse_NoTurns.Add(new TurnRestriction(LINE, en, lineTo_linkId)); + }; + } + + /// + /// Ïîëó÷åíèå TMC êîäà + /// + /// + /// + private ushort CheckTMCCode(ref Hashtable data) + { + ushort tmc_code = 0; + if ((stream_ShapeFile_FieldNames.fldTMC != null) && (stream_ShapeFile_FieldNames.fldTMC != String.Empty)) // ïèøåì TMC + { + // @E0+000+00000;@E0-000-00000; + // @E0+000+00000@E0-000-00000; + string tmc = data[stream_ShapeFile_FieldNames.fldTMC].ToString(); + bool inverse = false; + if (tmc.Length > 10) + { + tmc = tmc.Split(new string[] { ";", "@" }, StringSplitOptions.RemoveEmptyEntries)[0]; + inverse = (tmc.IndexOf("+") > 0) && (tmc.IndexOf("-") > 0); + tmc_code = (ushort)(int.Parse(tmc.Substring(7))); + }; + stream_TMC.WriteByte(inverse ? (byte)1 : (byte)0); + byte[] btw = BitConverter.GetBytes(tmc_code); + stream_TMC.Write(btw, 0, btw.Length); + }; + return tmc_code; + } + + /// + /// Ïîëó÷åíèå àòðèáóòèâíîé èíôîðìàöèè î ëèíèè + /// + /// + /// + /// + /// + /// + /// + /// + private bool CheckHasAttributes(ref Hashtable data, string GRMN_TYPE, int SPEED_LIMIT, string OSM_TYPE, string OSM_SURFACE, string OSM_SERVICE) + { + bool hasattrib = false; + byte[] attrib = new byte[16]; + + if (!String.IsNullOrEmpty(GRMN_TYPE)) + { + // BYTE[0] 0x01 - Äâîðîâûé ïðîåçä / Æèëàÿ çîíà (5.21) + if (((GRMN_TYPE == "ALLEY") || (GRMN_TYPE == "DRIVEWAY")) && (SPEED_LIMIT == 5)) { SetRoadAttributesData(ref attrib, 0, 0x01); hasattrib = true; }; + // BYTE[0] 0x02 - Ãðóíòîâàÿ äîðîãà / Äîðîãà áåç ïîêðûòèÿ GARMIN_TYPE = + if (GRMN_TYPE == "UNPAVED_ROAD") { SetRoadAttributesData(ref attrib, 0, 0x02); hasattrib = true; }; + // BYTE[0] 0x08 - Äîðîãà îòñûïàííàÿ ãðàâèåì (1.16) + if (GRMN_TYPE == "IMPROVED_UNPAVED_ROAD") { SetRoadAttributesData(ref attrib, 0, 0x08); hasattrib = true; }; + // BYTE[1] 0x04 - Ïàðîì / ïåðåïðàâà + if (GRMN_TYPE == "FERRY") { SetRoadAttributesData(ref attrib, 1, 0x04); hasattrib = true; }; + // BYTE[2] 0x04 - Àâòîìàãèñòðàëü (5.1) + if ((GRMN_TYPE == "MAJOR_HWY") && (SPEED_LIMIT >= 110)) { SetRoadAttributesData(ref attrib, 2, 0x04); hasattrib = true; }; + }; + + if (!String.IsNullOrEmpty(OSM_TYPE)) + { + // https://wiki.openstreetmap.org/wiki/OSM_tags_for_routing/Access_restrictions#Worldwide + // https://wiki.openstreetmap.org/wiki/Key:highway + switch (OSM_TYPE) + { + // BYTE[4] 0x80 - WATER WAYS + case "WATERWAY" : + SetRoadAttributesData(ref attrib, 4, 0x80); hasattrib = true; break; + // BYTE[0] 0x01 - Äâîðîâûé ïðîåçä / Æèëàÿ çîíà (5.21) + BYTE[4] 0x08 - Äîðîãè äëÿ ïåøåõîäîâ (OSM Pedestrian) + case "PEDESTRIAN": + case "FOOTWAY": + case "STEPS": + SetRoadAttributesData(ref attrib, 0, 0x01); SetRoadAttributesData(ref attrib, 4, 0x08); hasattrib = true; break; + // BYTE[4] 0x08 - Äîðîãè äëÿ ïåøåõîäîâ (OSM Pedestrian) + case "CORRIDOR": + case "PLATFORM": + case "BRIDLEWAY": + case "CYCLEWAY": + case "SIDEWALK": + case "CROSSING": + SetRoadAttributesData(ref attrib, 4, 0x08); hasattrib = true; break; + // BYTE[0] 0x01 - Äâîðîâûé ïðîåçä / Æèëàÿ çîíà (5.21) + case "LIVING_STREET": + SetRoadAttributesData(ref attrib, 0, 0x01); hasattrib = true; break; + // BYTE[0] 0x20 Âðåìåííàÿ, 3x08 Äîðîæíûå ðàáîòû + case "CONSTRUCTION": + case "PROPOSED": + SetRoadAttributesData(ref attrib, 0, 0x20); SetRoadAttributesData(ref attrib, 3, 0x08); hasattrib = true; break; + // BYTE[2] 0x02 Äîðîãà äëÿ àâòîìîáèëåé (Çíàê 5.3) + case "MOTORWAY": + case "MOTORWAY_LINK": + SetRoadAttributesData(ref attrib, 2, 0x02); hasattrib = true; break; + // BYTE[0] 0x02 - Ãðóíòîâàÿ äîðîãà / Äîðîãà áåç ïîêðûòèÿ + case "ROAD": + case "UNCLASSIFIED": + case "TRACK": + case "PATH": + SetRoadAttributesData(ref attrib, 0, 0x02); hasattrib = true; break; + }; + }; + + if (!String.IsNullOrEmpty(OSM_SURFACE)) + { + switch (OSM_SURFACE) + { + // BYTE[0] 0x02 - Ãðóíòîâàÿ äîðîãà / Äîðîãà áåç ïîêðûòèÿ + case "UNPAVED": + case "PAVED": + case "MUD": + case "DIRT": + case "EARTH": + case "GROUND": + case "WOOD": + case "GRASS": + SetRoadAttributesData(ref attrib, 0, 0x02); hasattrib = true; break; + // BYTE[0] 0x08 - Äîðîãà îòñûïàííàÿ ãðàâèåì + case "PAVING_STONES": + case "GRAVEL": + case "FINE_GRAVEL": + case "PUBBLESTONE": + SetRoadAttributesData(ref attrib, 0, 0x08); hasattrib = true; break; + // BYTE[0] 0x10 - Ïåñîê + case "SAND": + SetRoadAttributesData(ref attrib, 0, 0x10); hasattrib = true; break; + // BYTE[0] 0x10 - Ïåñîê + BYTE[0] 0x02 - Ãðóíòîâàÿ äîðîãà / Äîðîãà áåç ïîêðûòèÿ + case "DIRT/SAND": + SetRoadAttributesData(ref attrib, 0, 0x02); SetRoadAttributesData(ref attrib, 0, 0x10); hasattrib = true; break; + }; + }; + + if (!String.IsNullOrEmpty(OSM_SERVICE)) + { + // BYTE[0] 0x01 - Äâîðîâûé ïðîåçä / Æèëàÿ çîíà (5.21) + if ((OSM_SERVICE == "EMERGENCY_ACCESS")) { SetRoadAttributesData(ref attrib, 0, 0x01); hasattrib = true; }; + }; + + bool noTrucks = false; bool isBridge = false; bool isTunnel = false; bool isFerry = false; bool isFord = false; bool isToll = false; + try + { + // FIELDS: BRIDGE, TUNNEL, FERRY, ROUTE, FORD, TOLL + // bridge=yes, tunnel=yes, route=ferry & ferry=*, ford=yes (áðîä), toll!=no + if (data.ContainsKey("BRIDGE")) + { + string rv = data["BRIDGE"] == null ? "" : data["BRIDGE"].ToString().ToLower(); + if ((!String.IsNullOrEmpty(rv)) && (rv != "no")) + { + isBridge = true; + if (rv == "movable") SetRoadAttributesData(ref attrib, 1, 0x01); + }; + }; + if (data.ContainsKey("TUNNEL")) + { + string rv = data["TUNNEL"] == null ? "" : data["TUNNEL"].ToString().ToLower(); + if ((!String.IsNullOrEmpty(rv)) && (rv != "no")) isTunnel = true; + }; + if (data.ContainsKey("FERRY")) + { + string rv = data["FERRY"] == null ? "" : data["FERRY"].ToString().ToLower(); + if ((!String.IsNullOrEmpty(rv)) && (rv != "no")) isFerry = true; + }; + if (data.ContainsKey("ROUTE")) + { + string rv = data["ROUTE"] == null ? "" : data["ROUTE"].ToString().ToLower(); + if ((!String.IsNullOrEmpty(rv)) && (rv == "ferry")) isFerry = true; + }; + if (data.ContainsKey("FORD")) + { + string rv = data["FORD"] == null ? "" : data["FORD"].ToString().ToLower(); + if ((!String.IsNullOrEmpty(rv)) && (rv != "no")) isFord = true; + }; + if (data.ContainsKey("TOLL")) + { + string rv = data["TOLL"] == null ? "" : data["TOLL"].ToString().ToLower(); + if ((!String.IsNullOrEmpty(rv)) && (rv != "no")) isToll = true; + }; + if (data.ContainsKey("FOOTWAY")) + { + string rv = data["FOOTWAY"] == null ? "" : data["FOOTWAY"].ToString().ToLower(); + if ((!String.IsNullOrEmpty(rv)) && (rv != "no")) { SetRoadAttributesData(ref attrib, 4, 0x08); hasattrib = true; }; + }; + if ((stream_ShapeFile_FieldNames.fldIsTunnel != null) && (stream_ShapeFile_FieldNames.fldIsTunnel != String.Empty) && (stream_ShapeFile_FieldNames.fldIsTunnel != "TUNNEL") && (data.ContainsKey(stream_ShapeFile_FieldNames.fldIsTunnel))) + { + string rv = data[stream_ShapeFile_FieldNames.fldIsTunnel] == null ? "" : data[stream_ShapeFile_FieldNames.fldIsTunnel].ToString().ToLower(); + if ((!String.IsNullOrEmpty(rv)) && (rv != "no")) isTunnel = true; + }; + if ((stream_ShapeFile_FieldNames.fldTollRoad != null) && (stream_ShapeFile_FieldNames.fldTollRoad != String.Empty) && (stream_ShapeFile_FieldNames.fldTollRoad != "TOLL") && (data.ContainsKey(stream_ShapeFile_FieldNames.fldTollRoad))) + { + string rv = data[stream_ShapeFile_FieldNames.fldTollRoad] == null ? "" : data[stream_ShapeFile_FieldNames.fldTollRoad].ToString().ToLower(); + if ((!String.IsNullOrEmpty(rv)) && (rv != "no")) isToll = true; + }; + } + catch { }; + + // AGGREGATED TAGS + if (stream_ShapeFile_FieldNames.fldOSM_ADDIT_PROCESSAGG) + { + Dictionary aggr_tags = CheckAggregatedTags_Get(ref data); + CheckAggregatedTags_Analyse(ref aggr_tags, ref attrib, ref hasattrib); + }; + + // ACC_MASK + if ((stream_ShapeFile_FieldNames.fldACCMask != null) && (stream_ShapeFile_FieldNames.fldACCMask != String.Empty)) + { + string accm = data[stream_ShapeFile_FieldNames.fldACCMask].ToString(); + if (accm.Length == 10) + { + // Äâèæåíèå ãðóçîâîãî òðàíñïîðòà çàïðåùåíî + if (accm.Substring(6, 1) == "1") noTrucks = true; + // BYTE[2] 0x02 Äîðîãà äëÿ àâòîìîáèëåé (Çíàê 5.3) + if (accm == "0000110000") { SetRoadAttributesData(ref attrib, 2, 0x02); hasattrib = true; }; + }; + }; + + // ATTR + if ((stream_ShapeFile_FieldNames.fldAttr != null) && (stream_ShapeFile_FieldNames.fldAttr != String.Empty)) // ïèøåì Attr + { + string attr = data[stream_ShapeFile_FieldNames.fldAttr].ToString().Replace(" ", ""); + if (attr.Length > 0) + { + attr = "," + attr + ","; + // BYTE[0] 0x40 Òîííåëü (Çíàê 1.31) + if (attr.IndexOf(",92,") >= 0) isTunnel = true; + // BYTE[0] 0x80 Ìîñò + if (attr.IndexOf(",501,") >= 0) { SetRoadAttributesData(ref attrib, 0, 0x80); hasattrib = true; }; + // BYTE[1] 0x01 Ðàçâîäíîé Ìîñò + if (attr.IndexOf(",502,") >= 0) { SetRoadAttributesData(ref attrib, 1, 0x01); hasattrib = true; }; + // BYTE[1] 0x02 Ïàíòîííûé Ìîñò + if (attr.IndexOf(",503,") >= 0) { SetRoadAttributesData(ref attrib, 1, 0x02); hasattrib = true; }; + // BYTE[1] 0x04 Ïàðîì / Ïåðåïðàâà + if (attr.IndexOf(",504,") >= 0) { SetRoadAttributesData(ref attrib, 1, 0x04); hasattrib = true; }; + // BYTE[1] 0x08 Æåëåçíîäîðîæíûé ïåðååçä (Çíàê 1.1, 1.2) + if (attr.IndexOf(",53,") >= 0) { SetRoadAttributesData(ref attrib, 1, 0x08); hasattrib = true; }; + // BYTE[2] 0x08 Ïëàòíàÿ äîðîãà + if (attr.IndexOf(",505,") >= 0) isToll = true; + // Äâèæåíèå ãðóçîâîãî òðàíñïîðòà çàïðåùåíî (Çíàê 3.4)      + if (attr.IndexOf(",93,") >= 0) noTrucks = true; + // BYTE[2] 0x80 Äâèæåíèå ñ ïðèöåïîì çàïðåùåíî (Çíàê 3.7) + if (attr.IndexOf(",95,") >= 0) { SetRoadAttributesData(ref attrib, 2, 0x80); hasattrib = true; }; + // BYTE[3] 3x01 Òàìîæíÿ / Òàìîæåííàÿ ãðàíèöà (Çíàê 3.17.1) + if (attr.IndexOf(",506,") >= 0) { SetRoadAttributesData(ref attrib, 3, 0x01); hasattrib = true; }; + // BYTE[3] 3x02 Êðóòîé ñïóñê (Çíàê 1.13) + if (attr.IndexOf(",88,") >= 0) { SetRoadAttributesData(ref attrib, 3, 0x02); hasattrib = true; }; + // BYTE[3] 3x04 Êðóòîé ïîäúåì (Çíàê 1.14)     + if (attr.IndexOf(",89,") >= 0) { SetRoadAttributesData(ref attrib, 3, 0x04); hasattrib = true; }; + // BYTE[3] 3x08 Äîðîæíûå ðàáîòû + if (attr.IndexOf(",65,") >= 0) { SetRoadAttributesData(ref attrib, 3, 0x08); hasattrib = true; }; + // BYTE[4] 4x01 Äâèæåíèåñ îïàñíûìè ãðóçàìè çàïðåùåíî (Çíàê 3.32) + // BYTE[4] 4x02 Äâèæåíèå òðàíñïîðòíûõ ñðåäñòâ ñ âçðûâ÷àòûìè è îãíåîïàñíûìè ãðóçàìè çàïðåùåíî (Çíàê 3.33) + if (attr.IndexOf(",96,") >= 0) { SetRoadAttributesData(ref attrib, 4, 0x01); SetRoadAttributesData(ref attrib, 4, 0x02); hasattrib = true; }; + // BYTE[4] 4x04 Ñâåòîôîð + if (attr.IndexOf(",115,") >= 0) { SetRoadAttributesData(ref attrib, 4, 0x04); hasattrib = true; }; + }; + }; + + if (noTrucks) { SetRoadAttributesData(ref attrib, 2, 0x10); hasattrib = true; }; // 2x10 Äâèæåíèå ãðóçîâîãî òðàíñïîðòà çàïðåùåíî (Çíàê 3.4) + if (isBridge) { SetRoadAttributesData(ref attrib, 0, 0x80); hasattrib = true; }; // 0x80 Ìîñò + if (isTunnel) { SetRoadAttributesData(ref attrib, 0, 0x40); hasattrib = true; }; // 0x40 Òîííåëü (Çíàê 1.31) + if (isFerry) { SetRoadAttributesData(ref attrib, 1, 0x04); hasattrib = true; }; // 1x04 Ïàðîì / ïåðåïðàâà + if (isFord) { SetRoadAttributesData(ref attrib, 1, 0x10); hasattrib = true; }; // 1x10 Áðîä + if (isToll) { SetRoadAttributesData(ref attrib, 2, 0x08); hasattrib = true; }; // 2x08 Ïëàòíàÿ äîðîãà + + // Max Weight + if ((stream_ShapeFile_FieldNames.fldMaxWeight != null) && (stream_ShapeFile_FieldNames.fldMaxWeight != String.Empty)) + { + string ML = data[stream_ShapeFile_FieldNames.fldMaxWeight].ToString().Trim(); + if (ML != String.Empty) + { + double ml = float.Parse(ML, stream_NumberFormat) * 1000 / 250; + if (ml > 0) { attrib[7] = (byte)ml; hasattrib = true; }; + }; + }; + + // Max Axle Weight + if ((stream_ShapeFile_FieldNames.fldMaxAxle != null) && (stream_ShapeFile_FieldNames.fldMaxAxle != String.Empty)) + { + string AL = data[stream_ShapeFile_FieldNames.fldMaxAxle].ToString().Trim(); + if (AL != String.Empty) + { + double al = float.Parse(AL, stream_NumberFormat) * 1000 / 250; + if (al > 0) { attrib[8] = (byte)al; hasattrib = true; }; + }; + }; + + // Max Height + if ((stream_ShapeFile_FieldNames.fldMaxHeight != null) && (stream_ShapeFile_FieldNames.fldMaxHeight != String.Empty)) + { + string HL = data[stream_ShapeFile_FieldNames.fldMaxHeight].ToString().Trim(); + if (HL != String.Empty) + { + double hl = float.Parse(HL, stream_NumberFormat) * 10; + if (hl > 0) { attrib[9] = (byte)hl; hasattrib = true; }; + }; + }; + + // Max Width + if ((stream_ShapeFile_FieldNames.fldMaxWidth != null) && (stream_ShapeFile_FieldNames.fldMaxWidth != String.Empty)) + { + string WL = data[stream_ShapeFile_FieldNames.fldMaxWidth].ToString().Trim(); + if (WL != String.Empty) + { + double wl = float.Parse(WL, stream_NumberFormat) * 10; + if (wl > 0) { attrib[10] = (byte)wl; hasattrib = true; }; + }; + }; + + // Max Long/Length + if ((stream_ShapeFile_FieldNames.fldMaxLength != null) && (stream_ShapeFile_FieldNames.fldMaxLength != String.Empty)) + { + string LL = data[stream_ShapeFile_FieldNames.fldMaxLength].ToString().Trim(); + if (LL != String.Empty) + { + double ll = float.Parse(LL, stream_NumberFormat) * 10; + if (ll > 0) { attrib[11] = (byte)ll; hasattrib = true; }; + }; + }; + + // Min Distance + if ((stream_ShapeFile_FieldNames.fldMinDistance != null) && (stream_ShapeFile_FieldNames.fldMinDistance != String.Empty)) + { + string DL = data[stream_ShapeFile_FieldNames.fldMinDistance].ToString().Trim(); + if (DL != String.Empty) + { + double dl = float.Parse(DL, stream_NumberFormat); + if (dl > 0) { attrib[12] = (byte)dl; hasattrib = true; }; + }; + }; + + // Speed Limit [15] // + byte s2w = (byte)(SPEED_LIMIT / 5); + if (s2w > 31) s2w = 31; + attrib[15] = (byte)(s2w << 3); + + // Route Level [15] // + if ((stream_ShapeFile_FieldNames.fldRouteLevel != null) && (stream_ShapeFile_FieldNames.fldRouteLevel != String.Empty)) + { + string DL = data[stream_ShapeFile_FieldNames.fldRouteLevel].ToString().Trim(); + if (DL != String.Empty) + { + double dl = float.Parse(DL, stream_NumberFormat); + if (dl > 0) { attrib[15] += (byte)(((byte)dl) & 7); hasattrib = true; }; + }; + }; + + stream_LineAttr.Write(attrib, 0, attrib.Length); + CalculateAttributes(attrib); + return hasattrib; + } + + /// + /// Ïîëó÷åíèå àòðèáóòèâíîé èíôîðìàöèè î ëèíèè èç àãðåãèðîâàííîãî ïîëÿ TAGS_1 OSM2SHP + /// + private static Regex tag_agg_rx = new Regex(@"(?(?[\w:]*)=(?[^\n=]*));", RegexOptions.None); + private Dictionary CheckAggregatedTags_Get(ref Hashtable data) + { + Dictionary result = new Dictionary(); + try + { + // tag_agg_rx + if (data.ContainsKey("TAGS_1")) + { + string tags = data["TAGS_1"] == null ? "" : data["TAGS_1"].ToString().ToLower(); + if (!String.IsNullOrEmpty(tags)) + { + if (!tags.EndsWith(";")) tags += ";"; + MatchCollection mc = tag_agg_rx.Matches(tags); + foreach (Match mx in mc) + result.Add(mx.Groups["tag"].Value, mx.Groups["value"].Value); + }; + }; + } + catch { }; + return result; + } + + /// + /// Àíàëèç àòðèáóòèâíîé èíôîðìàöèè î ëèíèè èç àãðåãèðîâàííîãî ïîëÿ TAGS_1 OSM2SHP + /// + /// + /// + /// + private void CheckAggregatedTags_Analyse(ref Dictionary agg_tags, ref byte[] attrib, ref bool hasattrib) + { + if (agg_tags == null) return; + if (agg_tags.Count == 0) return; + + //if (agg_tags.ContainsKey("footway") && agg_tags["footway"] != "no") { SetRoadAttributesData(ref attrib, 4, 0x08); hasattrib = true; }; + if (agg_tags.ContainsKey("ford") && agg_tags["ford"] == "yes") { SetRoadAttributesData(ref attrib, 1, 0x10); hasattrib = true; }; + if (agg_tags.ContainsKey("motor_vehicle") && agg_tags["motor_vehicle"] == "yes") { SetRoadAttributesData(ref attrib, 2, 0x02); hasattrib = true; }; + if (agg_tags.ContainsKey("motor_vehicle") && agg_tags["motor_vehicle"] == "no") { SetRoadAttributesData(ref attrib, 4, 0x08); hasattrib = true; }; + if (agg_tags.ContainsKey("vehicle") && agg_tags["vehicle"] == "no") { SetRoadAttributesData(ref attrib, 4, 0x08); hasattrib = true; }; + if (agg_tags.ContainsKey("living_street") && agg_tags["living_street"] == "yes") { SetRoadAttributesData(ref attrib, 0, 0x01); hasattrib = true; }; + if (agg_tags.ContainsKey("crossing") && agg_tags["crossing"] == "traffic_signal") { SetRoadAttributesData(ref attrib, 4, 0x04); hasattrib = true; }; + if (agg_tags.ContainsKey("traffic_signals:direction")) { SetRoadAttributesData(ref attrib, 4, 0x04); hasattrib = true; }; + if (agg_tags.ContainsKey("motorcycle") && agg_tags["motorcycle"] == "no") { SetRoadAttributesData(ref attrib, 2, 0x20); hasattrib = true; }; + if (agg_tags.ContainsKey("motorroad") && agg_tags["motorroad"] == "yes") { SetRoadAttributesData(ref attrib, 2, 0x02); hasattrib = true; }; + if (agg_tags.ContainsKey("lit") && (agg_tags["lit"] == "no" || agg_tags["lit"] == "disused")) { SetRoadAttributesData(ref attrib, 4, 0x10); hasattrib = true; }; + if (agg_tags.ContainsKey("electrified") && agg_tags["electrified"] == "no") { SetRoadAttributesData(ref attrib, 4, 0x10); hasattrib = true; }; + + // https://wiki.openstreetmap.org/wiki/RU:Key:traffic_sign + // https://wiki.openstreetmap.org/wiki/Proposed_features/Traffic_sign + + // 3x02 Êðóòîé ñïóñê (Çíàê 1.13) + // 3x04 Êðóòîé ïîäúåì (Çíàê 1.14) + if (agg_tags.ContainsKey("incline")) + { + Regex rx = new Regex(@"^-?(?[\.\d]*)[%|°]?$"); + Match mc = rx.Match(agg_tags["incline"]); + double val = 0; + if (mc.Success && (!String.IsNullOrEmpty(mc.Groups["value"].Value)) && (double.TryParse(mc.Groups["value"].Value, System.Globalization.NumberStyles.AllowDecimalPoint, System.Globalization.CultureInfo.InvariantCulture, out val)) && (val >= 10)) + { + SetRoadAttributesData(ref attrib, 3, 0x02); + SetRoadAttributesData(ref attrib, 3, 0x04); + hasattrib = true; + }; + }; + + // 3x10 Îáãîí çàïðåùåí (Çíàê 3.20) + if (agg_tags.ContainsKey("overtaking") && agg_tags["overtaking"] == "no") + { + SetRoadAttributesData(ref attrib, 3, 0x10); + SetRoadAttributesData(ref attrib, 3, 0x20); + hasattrib = true; + }; + + // [07,0xFF] ..............FF................ - Îãðàíè÷åíèå ìàññû ÒÑ + if (agg_tags.ContainsKey("maxweight")) + { + double d = 0; + if (double.TryParse(agg_tags["maxweight"], System.Globalization.NumberStyles.AllowDecimalPoint, System.Globalization.CultureInfo.InvariantCulture, out d)) + { + double ml = d * 1000.0 / 250.0; + if (ml > 0) { attrib[7] = (byte)ml; hasattrib = true; }; // â 1/4 òîííû (0x04 = 1 òîííà; îò 250 êã äî 63750 êã) + }; + }; + + // [08,0xFF] ................FF.............. - Îãðàíè÷åíèå íàãðóçêè íà îñü ÒÑ + if (agg_tags.ContainsKey("maxaxleload")) + { + double d = 0; + if (double.TryParse(agg_tags["maxaxleload"], System.Globalization.NumberStyles.AllowDecimalPoint, System.Globalization.CultureInfo.InvariantCulture, out d)) + { + double ml = d * 1000.0 / 250.0; + if (ml > 0) { attrib[8] = (byte)ml; hasattrib = true; }; // â 1/4 òîííû (0x04 = 1 òîííà; îò 250 êã äî 63750 êã) + }; + }; + + // [09,0xFF] ..................FF............ - Îãðàíè÷åíèå âûñîòû + if (agg_tags.ContainsKey("maxheight")) + { + double d = 0; + if (double.TryParse(agg_tags["maxheight"], System.Globalization.NumberStyles.AllowDecimalPoint, System.Globalization.CultureInfo.InvariantCulture, out d)) + { + double ml = d * 10.0; + if (ml > 0) { attrib[9] = (byte)ml; hasattrib = true; }; // â äåöèìåòðàõ (îò 10 ñì äî 25 ì) + }; + }; + + // [10,0xFF] ....................FF.......... - Îãðàíè÷åíèå øèðèíû + if (agg_tags.ContainsKey("maxwidth")) + { + double d = 0; + if (double.TryParse(agg_tags["maxwidth"], System.Globalization.NumberStyles.AllowDecimalPoint, System.Globalization.CultureInfo.InvariantCulture, out d)) + { + double ml = d * 10.0; + if (ml > 0) { attrib[10] = (byte)ml; hasattrib = true; }; // â äåöèìåòðàõ (îò 10 ñì äî 25 ì) + }; + }; + + // [11,0xFF] ......................FF........ - Îãðàíè÷åíèå äëèíû ÒÑ + if (agg_tags.ContainsKey("maxlength")) + { + double d = 0; + if (double.TryParse(agg_tags["maxlength"], System.Globalization.NumberStyles.AllowDecimalPoint, System.Globalization.CultureInfo.InvariantCulture, out d)) + { + double ml = d * 10.0; + if (ml > 0) { attrib[11] = (byte)ml; hasattrib = true; }; // â äåöèìåòðàõ (îò 10 ñì äî 25 ì) + }; + }; + + // traffic_sign + // ex: lit=yes;maxweight=2.8;motor_vehicle=destination;segregated=no;smoothness=good;traffic_sign=DE:240,1020-30;262[2.8];width=4; + if (agg_tags.ContainsKey("traffic_sign")) + { + + }; + } + + /// + /// Óñòàíîâêà àòðèáóòèâíîé èíôîðìàöèè ëèíèè + /// + /// + /// + /// + private void SetRoadAttributesData(ref byte[] attr, int index, int code) + { + if ((attr[index] & code) == code) return; + attr[index] += (byte)code; + } + + /// + /// Ñîõðàíåíèå ñòàòèñòèêè àòðèáóòèâíîé èíôîðìàöèè + /// + /// + private void CalculateAttributes(byte[] ba) + { + if (!analyse_attributes_do) return; + + if (ba == null) return; + if (ba.Length != 16) return; + for (int i = 0; i < 56; i++) + { + int ai = (int)(i / 8); + int bi = i % 8; + if ((ba[ai] & (byte)Math.Pow(2, bi)) > 0) analyse_attributes_bit[i]++; + }; + for (int i = 7; i < 15; i++) + if (ba[i] > 0) + analyse_attributes_val[i-7]++; + if((ba[15] & 0xF8) > 0) analyse_attributes_val[8]++; + if((ba[15] & 0x07) > 0) analyse_attributes_val[9]++; + } + + /// + /// Äîáàâëÿåì óçåë â ñïèñîê + /// + /// øèðîòà + /// äîëãîòà + /// Íîìåð óçëà + public uint AddNode(float lat, float lon) + { + analyse_Nodes.Add(new TNode((uint)analyse_Nodes.Count + 1, lat, lon)); + return (uint)analyse_Nodes.Count; + } + + /// + /// Íàõîäèì óçåë â ñïèñêå + /// + /// øèðîòà + /// äîëãîòà + /// Íîìåð óçëà (åñëè 0 - íå ñóù) + public uint NodeByLatLon(float lat, float lon) + { + uint res = 0; + for (int i = 0; i < analyse_Nodes.Count; i++) + if ((analyse_Nodes[i].lat == lat) && (analyse_Nodes[i].lon == lon)) + { + res = analyse_Nodes[i].node; + break; + }; + return res; + } + //{ + // uint res = 0; + // for (int i = 0; i < analyse_Nodes.Count; i++) + // if (EqualCoord(analyse_Nodes[i].lat, lat, 0.00000001f) && EqualCoord(analyse_Nodes[i].lon, lon, 0.00000001f)) + // { + // res = analyse_Nodes[i].node; + // break; + // }; + // return res; + //} + + public static bool EqualCoord(float a, float b, float eps) + { + if (a == b) return true; + + float diff = Math.Abs(a - b); + if (diff < eps) return true; + + return false; + } + + /// + /// Ìåòîä äëÿ ÷òåíèÿ shp ôàéëà + /// + /// + /// + /// + private int readIntBig(byte[] data, int pos) + { + byte[] bytes = new byte[4]; + bytes[0] = data[pos]; + bytes[1] = data[pos + 1]; + bytes[2] = data[pos + 2]; + bytes[3] = data[pos + 3]; + Array.Reverse(bytes); + return BitConverter.ToInt32(bytes, 0); + } + + /// + /// Ìåòîä äëÿ ÷òåíèÿ shp ôàéëà + /// + /// + /// + /// + private int readIntLittle(byte[] data, int pos) + { + byte[] bytes = new byte[4]; + bytes[0] = data[pos]; + bytes[1] = data[pos + 1]; + bytes[2] = data[pos + 2]; + bytes[3] = data[pos + 3]; + return BitConverter.ToInt32(bytes, 0); + } + + /// + /// Ìåòîä äëÿ ÷òåíèÿ shp ôàéëà + /// + /// + /// + /// + private double readDoubleLittle(byte[] data, int pos) + { + byte[] bytes = new byte[8]; + bytes[0] = data[pos]; + bytes[1] = data[pos + 1]; + bytes[2] = data[pos + 2]; + bytes[3] = data[pos + 3]; + bytes[4] = data[pos + 4]; + bytes[5] = data[pos + 5]; + bytes[6] = data[pos + 6]; + bytes[7] = data[pos + 7]; + return BitConverter.ToDouble(bytes, 0); + } + + /// + /// Ðàññ÷èòûâàåì äëèíó â ìåòðàõ îò òî÷êè äî òî÷êè + /// + /// A lat + /// A lon + /// B lat + /// B lon + /// Radians or Degrees + /// length in meters + private static float GetLengthMeters(double StartLat, double StartLong, double EndLat, double EndLong, bool radians) + { + return Utils.GetLengthMeters(StartLat, StartLong, EndLat, EndLong, radians); + } + } + + // https://programmingwithmosh.com/net/csharp-collections/ + // Hashtable - Unical list + // List - Represents a list of objects that can be accessed by an index + // Dictionary - Dictionary is a collection type that is useful when you need fast lookups by keys + // HashSet - Unical list + // Stack - LIFO buffer + // Queue - FIFO buffer + public static class DigitConvertions + { + public static uint to4(float input) + { + unsafe + { + uint res = 0; + float* p_val = (float*)&res; + *p_val = input; + return res; + }; + } + + public static void from4(uint input, out float output) + { + unsafe + { + float res = 0; + uint* p_val = (uint*)&res; + *p_val = input; + output = res; + }; + } + + public static uint to4(short x, short y) + { + unsafe + { + uint xy = 0; + short* px = (short*)&xy; + short* py = px + 1; + + *px = x; + *py = y; + + return xy; + }; + } + + public static void from4(uint input, out short x, out short y) + { + unsafe + { + uint xy = input; + short* px = (short*)&xy; + short* py = px + 1; + x = *px; + y = *py; + } + } + + public static uint to4(ushort x, ushort y) + { + unsafe + { + uint xy = 0; + ushort* px = (ushort*)&xy; + ushort* py = px + 1; + + *px = x; + *py = y; + + return xy; + }; + } + + public static void from4(uint input, out ushort x, out ushort y) + { + unsafe + { + uint xy = input; + ushort* px = (ushort*)&xy; + ushort* py = px + 1; + x = *px; + y = *py; + } + } + + public static uint to4(short x, ushort y) + { + unsafe + { + uint xy = 0; + short* px = (short*)&xy; + ushort* py = (ushort*)px + 1; + + *px = x; + *py = y; + + return xy; + }; + } + + public static void from4(uint input, out short x, out ushort y) + { + unsafe + { + uint xy = input; + short* px = (short*)&xy; + ushort* py = (ushort*)px + 1; + x = *px; + y = *py; + } + } + + public static uint to4(short x, byte y, byte z) + { + unsafe + { + uint xy = 0; + short* px = (short*)&xy; + byte* py = (byte*)px + 1; + byte* pz = py + 1; + + *px = x; + *py = y; + *pz = z; + + return xy; + }; + } + + public static void from4(uint input, out short x, out byte y, out byte z) + { + unsafe + { + uint xy = input; + short* px = (short*)&xy; + byte* py = (byte*)px + 1; + byte* pz = py + 1; + x = *px; + y = *py; + z = *pz; + } + } + + public static uint to4(ushort x, byte y, byte z) + { + unsafe + { + uint xy = 0; + ushort* px = (ushort*)&xy; + byte* py = (byte*)px + 1; + byte* pz = py + 1; + + *px = x; + *py = y; + *pz = z; + + return xy; + }; + } + + public static void from4(uint input, out ushort x, out byte y, out byte z) + { + unsafe + { + uint xy = input; + ushort* px = (ushort*)&xy; + byte* py = (byte*)px + 1; + byte* pz = py + 1; + x = *px; + y = *py; + z = *pz; + } + } + + public static uint to4(byte[] input) + { + unsafe + { + uint val = 0; + byte* pval = (byte*)&val; + + for (int i = 0; i < 4 && i < input.Length; i++) + *pval++ = input[i]; + + return val; + }; + } + + public static void from4(uint input, out byte[] output) + { + unsafe + { + uint v = input; + byte* pv = (byte*)&v; + + byte[] res = new byte[4]; + for (int i = 0; i < 4 && i < res.Length; i++) + res[i] = *pv++; + + output = res; + }; + } + + public static ulong to8(double input) + { + unsafe + { + ulong res = 0; + double* p_val = (double*)&res; + *p_val = input; + return res; + }; + } + + public static void from8(ulong input, out double output) + { + unsafe + { + double res = 0; + ulong* p_val = (ulong*)&res; + *p_val = input; + output = res; + }; + } + + public static ulong to8(float x, float y) + { + unsafe + { + ulong xy = 0; + float* px = (float*)&xy; + float* py = px + 1; + + *px = x; + *py = y; + + return xy; + }; + } + + public static void from8(ulong input, out float x, out float y) + { + unsafe + { + ulong xy = input; + float* px = (float*)&xy; + float* py = px + 1; + x = *px; + y = *py; + } + } + + public static ulong to8(float x, int y) + { + unsafe + { + ulong xy = 0; + float* px = (float*)&xy; + int* py = (int*)px + 1; + + *px = x; + *py = y; + + return xy; + }; + } + + public static void from8(ulong input, out float x, out int y) + { + unsafe + { + ulong xy = input; + float* px = (float*)&xy; + int* py = (int*)px + 1; + x = *px; + y = *py; + } + } + + public static ulong to8(float x, uint y) + { + unsafe + { + ulong xy = 0; + float* px = (float*)&xy; + uint* py = (uint*)px + 1; + + *px = x; + *py = y; + + return xy; + }; + } + + public static void from8(ulong input, out float x, out uint y) + { + unsafe + { + ulong xy = input; + float* px = (float*)&xy; + uint* py = (uint*)px + 1; + x = *px; + y = *py; + } + } + + public static ulong to8(float x, short y, short z) + { + unsafe + { + ulong xy = 0; + float* px = (float*)&xy; + short* py = (short*)px + 1; + short* pz = py + 1; + + *px = x; + *py = y; + *pz = z; + + return xy; + }; + } + + public static void from8(ulong input, out float x, out short y, out short z) + { + unsafe + { + ulong xy = input; + float* px = (float*)&xy; + short* py = (short*)px + 1; + short* pz = py + 1; + x = *px; + y = *py; + z = *pz; + } + } + + public static ulong to8(float x, ushort y, ushort z) + { + unsafe + { + ulong xy = 0; + float* px = (float*)&xy; + ushort* py = (ushort*)px + 1; + ushort* pz = py + 1; + + *px = x; + *py = y; + *pz = z; + + return xy; + }; + } + + public static void from8(ulong input, out float x, out ushort y, out ushort z) + { + unsafe + { + ulong xy = input; + float* px = (float*)&xy; + ushort* py = (ushort*)px + 1; + ushort* pz = py + 1; + x = *px; + y = *py; + z = *pz; + } + } + + public static ulong to8(float x, short y, ushort z) + { + unsafe + { + ulong xy = 0; + float* px = (float*)&xy; + short* py = (short*)px + 1; + ushort* pz = (ushort*)py + 1; + + *px = x; + *py = y; + *pz = z; + + return xy; + }; + } + + public static void from8(ulong input, out float x, out short y, out ushort z) + { + unsafe + { + ulong xy = input; + float* px = (float*)&xy; + short* py = (short*)px + 1; + ushort* pz = (ushort*)py + 1; + x = *px; + y = *py; + z = *pz; + } + } + + public static ulong to8(float x, short y, byte za, byte zb) + { + unsafe + { + ulong xy = 0; + float* px = (float*)&xy; + short* py = (short*)px + 1; + byte* pza = (byte*)py + 1; + byte* pzb = pza + 1; + + *px = x; + *py = y; + *pza = za; + *pzb = zb; + + return xy; + }; + } + + public static void from8(ulong input, out float x, out short y, out byte za, out byte zb) + { + unsafe + { + ulong xy = input; + float* px = (float*)&xy; + short* py = (short*)px + 1; + byte* pza = (byte*)py + 1; + byte* pzb = pza + 1; + x = *px; + y = *py; + za = *pza; + zb = *pzb; + } + } + + public static ulong to8(float x, ushort y, byte za, byte zb) + { + unsafe + { + ulong xy = 0; + float* px = (float*)&xy; + ushort* py = (ushort*)px + 1; + byte* pza = (byte*)py + 1; + byte* pzb = pza + 1; + + *px = x; + *py = y; + *pza = za; + *pzb = zb; + + return xy; + }; + } + + public static void from8(ulong input, out float x, out ushort y, out byte za, out byte zb) + { + unsafe + { + ulong xy = input; + float* px = (float*)&xy; + ushort* py = (ushort*)px + 1; + byte* pza = (byte*)py + 1; + byte* pzb = pza + 1; + x = *px; + y = *py; + za = *pza; + zb = *pzb; + } + } + + public static ulong to8(short[] input) + { + unsafe + { + ulong val = 0; + short* pval = (short*)&val; + + for (int i = 0; i < 4 && i < input.Length; i++) + *pval++ = input[i]; + + return val; + }; + } + + public static void from8(ulong input, out short[] output) + { + unsafe + { + ulong v = input; + short* pv = (short*)&v; + + short[] res = new short[4]; + for (int i = 0; i < 4 && i < res.Length; i++) + res[i] = *pv++; + + output = res; + }; + } + + public static ulong to8(ushort[] input) + { + unsafe + { + ulong val = 0; + ushort* pval = (ushort*)&val; + + for (int i = 0; i < 4 && i < input.Length; i++) + *pval++ = input[i]; + + return val; + }; + } + + public static void from8(ulong input, out ushort[] output) + { + unsafe + { + ulong v = input; + ushort* pv = (ushort*)&v; + + ushort[] res = new ushort[4]; + for (int i = 0; i < 4 && i < res.Length; i++) + res[i] = *pv++; + + output = res; + }; + } + + public static ulong to8(byte[] input) + { + unsafe + { + ulong val = 0; + byte* pval = (byte*)&val; + + for (int i = 0; i < 8 && i < input.Length; i++) + *pval++ = input[i]; + + return val; + }; + } + + public static void from8(ulong input, out byte[] output) + { + unsafe + { + ulong v = input; + byte* pv = (byte*)&v; + + byte[] res = new byte[8]; + for (int i = 0; i < 8 && i < res.Length; i++) + res[i] = *pv++; + + output = res; + }; + } + } +} diff --git a/SOLVER/dkxce.Route.Shp2Rt/dkxce.Route.Shp2Rt.csproj b/SOLVER/dkxce.Route.Shp2Rt/dkxce.Route.Shp2Rt.csproj new file mode 100644 index 0000000..6bd1f3e --- /dev/null +++ b/SOLVER/dkxce.Route.Shp2Rt/dkxce.Route.Shp2Rt.csproj @@ -0,0 +1,58 @@ + + + Debug + AnyCPU + 8.0.50727 + 2.0 + {D74D414F-7F88-4C32-8E8C-32D279C52C97} + Library + Properties + dkxce.Route.Shp2Rt + dkxce.Route.Shp2Rt + + + true + full + false + ..\..\READY\MAIN_DLLs\ + DEBUG;TRACE + prompt + 4 + true + + + pdbonly + true + ..\..\READY\MAIN_DLLs\ + TRACE + prompt + 4 + true + + + + False + ..\..\READY\MAIN_DLLs\dkxce.Route.Classes.dll + + + + + + False + ..\..\READY\MAIN_DLLs\XMLSaved.dll + + + + + + + + + + \ No newline at end of file diff --git a/SOLVER/dkxce.Route.Shp2Rt/dkxce.Route.Shp2Rt.csproj.user b/SOLVER/dkxce.Route.Shp2Rt/dkxce.Route.Shp2Rt.csproj.user new file mode 100644 index 0000000..1a4ff35 --- /dev/null +++ b/SOLVER/dkxce.Route.Shp2Rt/dkxce.Route.Shp2Rt.csproj.user @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/SOLVER/dkxce.Route.Shp2Rt/obj/Debug/ResolveAssemblyReference.cache b/SOLVER/dkxce.Route.Shp2Rt/obj/Debug/ResolveAssemblyReference.cache new file mode 100644 index 0000000000000000000000000000000000000000..3df16753d27bf24b56530f7acdc2cef5843e7d23 GIT binary patch literal 6134 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 z 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 IOX0x(1r{>3d;kCd literal 0 HcmV?d00001 diff --git a/SOLVER/dkxce.Route.Shp2Rt/obj/Debug/dkxce.Route.Shp2Rt.pdb b/SOLVER/dkxce.Route.Shp2Rt/obj/Debug/dkxce.Route.Shp2Rt.pdb new file mode 100644 index 0000000000000000000000000000000000000000..5d0e18a200226747b7f100d6d90809a29b840c95 GIT binary patch literal 153088 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 literal 0 HcmV?d00001 diff --git a/SOLVER/dkxce.Route.Shp2Rt/obj/Release/ResolveAssemblyReference.cache b/SOLVER/dkxce.Route.Shp2Rt/obj/Release/ResolveAssemblyReference.cache new file mode 100644 index 0000000000000000000000000000000000000000..581d5dff7de063a237f4342cbd360e2242499803 GIT binary patch literal 6126 zcmeHLOLG)e6rP^UtD7MSAOeC`1bkExdXiuSDG|buU@#M6CZu8+tE)48C$#i*Q{6o& z!bX<*6Wm+nW1(1<;=;$m$HK?XN4Xkw<%0j9-*;!G=^>-xu}kG9_ssdG?>&9*Ip00! zCJ7~xNc@AwPqus#VxeSLd@t~-p?hQ2NI%FO((|pb2U9Ico)gTnLa%hHv zqtvSH2#I?3H6Q6k&v8U0#0moaMKibHy<(bxmSqVKq+uBa9 z=+!QpzVQ2LwCGu4#`jiiOZYi{QMRv&6m}G3=1r$Af<&UHCy`EX$#r|zWZTxkE^D4# zWB=C6$4>6!s-r*oXUE6Rys}sto18YzOicxg3#F;Dxgspx za-0nJcDVaE>(Z5q&}Y4RDDE zb6lu?FB4vUjZ@hF-gWETv)BK4Q`G=e>F7K(g*)bk-+6oQ;l)qzd@G;#QuINjIsBg2 z*lPyy_29QwAq+@n0!V#KVdwpiS;QyGbVyfU*5;&eN>u|qek4-e}jqx#7D=gzG= zPL?}O@F>aCanCzZw_~chgW@5GZS)zNLN`fQ?u3$g7^2jLVh^xzhTuUKz6;aU-4uHu zwlSD&DSCIEC~%W$gXGnWD3|r!R%Ket8?C%I=~g|}V8%FY1|ny)5=yVZgFfagd%hiB ztnKcE6P{o6+|c)&?FP8vxyyVV63mQg`#akLWn9D(*G<18ulFcTR z9@(cpr_361FNftw<_`&V z37JVGEKunqwb+s=65@`N$EuhyO6KdHj}P1BhrCCr#;jPeS5TRCb70nXKeisw7_lBNy=@;qqj2&D2e=-5sM%1<$%DL(>5)cpaVfsQ#y z8a#}fq>&fTjak@^GR&>|xlnU7^%%Zr(&jm6%J-l`M4RtoKvTX2ifHoB%AA6xd<_~zl=&(KH04X6h%#RQG|({zb&utnEvc~5vi7a1 zU@V`TtlGe=8b^R*6>I{q$*Z%_l+VGHh*vjaKvO;gig@)YKm#3fkcxQ8+9b^eCe0KA z9Q)I(1lT0aG&JR75FsMX^%&5UkANc5d$RZ z@&Tw2(dPXa(3JOpBHFwQ&_Kr=)G%JT`G3FUjjN0Ed!D)ZmcpwyYZ?Cni?=>rvpR?J ry47{)$u&by{nt=t%ucJ!oL#N*oUkPoo|A6%wvRsPv_{`_v$o}5Y>nAV literal 0 HcmV?d00001 diff --git a/SOLVER/dkxce.Route.Shp2Rt/obj/Release/dkxce.Route.Shp2Rt.dll b/SOLVER/dkxce.Route.Shp2Rt/obj/Release/dkxce.Route.Shp2Rt.dll new file mode 100644 index 0000000000000000000000000000000000000000..2760bbb566d7d6a7e9b4e79fb5d2f055cc70dae8 GIT binary patch literal 98304 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

d~@}dd>;*2r|~Vv zaTHxU%pYFiX5POf;`E1OCh?cS)BfwMuQL*zwG9AO)XzHO*%g2~wP?IaOzmpQ`7k+; zk?{-C_;{C3pYnZh$yO=jcR*{~_)`$JjXxh@+xVv-Y#aXqgl*$rjIeF|D-pJhe=^%1irB_~nj*IGU#5s{{8uSr8=uWY#5R7CBGUM{{ew z)P>kOo4C6fG3T0hcP(PhCCKhbr>h~ZdO*XXo7@R?liNOUx&uu}j!(<&8I4eKTA1oX zIRl&Q{rKj8T`!qp8ccz<$&DrvU4bYXsT>=)iQyu_d2bM-59joyKwLvlh->Hxc?})5 z90op&Yv_rryoR3OHR5orW)$j$;oRqcgWsahKO~dz|dC2z`Gz4 zqbTs^haDH`_1LeaxAV+)UbmgsJBMSn>b+2PUA*+Vd4uF*AC5K3sD$)64<$~$KH|j- zvCSIpAUDbbFkGXi12Br8N{3@v4d32tmT5SUpfrk$v>bhMe-?TT9gfw?!?9Z5;TVqE zU~9T=UgI2&wK%whgTt5H+{3XJc{qmiiaCn+sDI^f3>T5rzWo=dW!|a|$F}mV_Tku8 zbvTCa2^goD#_95K>@u`%x9SeEC@9ggL^Xns025vTLh`DxDK*bf;y*CV*{NA4RU84EUw^>R|kf^Myw7DRcpq9A>6+H1H5Q*7f?B~ z4^Aq4RPIRysJvJ3CwLFI+=CKOd9UDOs=^ig3Eq=J53OlTG>u87fh&-r4(~-B{;OB; zabZ$b9S$xB${t)!>^zJp6&y?R;_=zIs4K01#PLFYTT^wD|h9(2BgOCO!5)q&1`a5)(m|H0)%V0;Ic zz6vfaukYY;LivMBvWxHF(nsenukYZ}N9QlE@8Hr$=P$4C;BrFwgGtG;^xZ(l9q=aH zI>x~zu8fOO;lTnT_}G%<~e!bUwWmQ@i+wqtgk^e7aYIV?MZ?!Do0h z=;1T`8i?b&nS7=zJHaR5;Bux{_%R<`(&q*LgSHM=(6HOXaf#Ynd?6ek`11>o^VweE z4^q}+Ik=p|=lF!rDI%W4((02tNy+WLGdcPFQ zCzLO+kRl6}WIgpmg{5qSlFxjOOm9rcKT;NQ7|f4t|!^Z4Qu&lT##(|496L>~Kz zCr-uGwEjyBD|}_iiRUWdim%|W2Cn!D{+hILf@!QZjT3R=xz;$5uT1k3=*05`u~DdA z`_@i8PsEAmR`@5X)u!nPC!Rxm4Ng3BIMvMZReUvvNP%erra^?75o+|Fcn*0_JcrZ9 zI(g!`PMvtJm)m5%&fY$&1H+TNc-lTI{01AZ&bs8;<~v-hhjwET){d5(c&?Moyy@!1 z^JIRq5^TTcE)*pp{N!SKoOqtXPf_%zsuRy)lMg$+LY#Q6H~D%$<|LD!D3AOa}Mzgn0{_a#*{8m%j*}mr~=)o~amqPwEH3Y~?k%zdoHEE?kn%AnswPn26@Q{ozZK;p z>9||Ig)X7^U{87|sEeO)5x;ffN$6n4c#W-v)I4lq;slibJR(2;`$x>k!G85& zW`+9`aC$$!&*Y)|9dPl^YVk=D5C6W;hCAS{gN!s}j3s*q`?Yk3797q`h9%=+eFCB; z=@DZ6pn;#8%inj6hs~gV&CTI-5NDfsW`cT#o^?UJj-GTb3!40yc*y+S|5AQCC+Qbr z%T!+Z(Z{37t`F+={ovw^d73v^Me$D0Q_6EZ0Vxq z$F0V5^>GW99k+Z9yoeINVAbsTeZbSRAJ0Y0=N&hM=ZfPOEnl;I=~4`#_~*tkV~9BT zEm<^Au|fLM*=yFUS_J=___u1=niEznU$uJ8Dkr{dE`q`FLH3$Nu_p0me%q59QSbS4 zVa|PM@j8Cu4HXt>d-7xlJsKgK7}i(B^m7z8_7n#TC%S_@)xn~J=-Gr~yxBpc^||OR z4jS^-{c2MtrY=+hiDT=uTgr#t8_gc=l&Z4MS~MekT=eFbxrwr3@whfr|wqFhI_ zmS0Sb%92m~xb+$kX!_n0=n>kB{-RTL8nEF)JQ2osor5qI+Ksk{i1SlW&Fmq zFr3l$P+o$#l*`VS!4;2)wmKSIt@6`32c>H=FQo?~3s>vWg{y^J%HMO8{FLs?zX6Qlb#6V)`mojwVH?_&9X3Fbh_NVhdK;HX)wqDQ}4< z(UtO~0(yA{8M*=Mb9myj+!c{FD3Q>j*Q^qsPOKjnj%x7r|2ho2hREhLwkh6nbW574 z&WdPEW?XQymZ=R!nb+C()JX zxd=SbXgxe}ZSpPgB)alENl%w2ok3#f<>yJAAqHURwgpykJw)9?lnukB$m8YjW^t{t zU{wV!>9~D_WWinhFUz7lN0LQW^2-X+oi#SYl_fh5Y7Cv{+SSFK2efwo!CFJfs=sO& zBdybaDDT2s4%2_6yjkVtz5ht^W_#p8U%$LXN0x`V*S2Mu!J*k596aTl>&TNU5T|@J zu&D6?Iep{9oYjlx1n6~E{G)N=oqavydnS&b+=oudScq*0{96{^qq~r?%{j&%z+l+A zdY83r$7wr>q7e=3MHsgAgw>4gVT{hqTNj+LXda$bh|jA;e9ra)CUx;ogB?!%`N7T@ z0_^XBer5uJ;5z)#Sc2J=-HgA#<1d82sYoQAnAike7*CXwMe#@USnG*<5A;mok9c7g zWik9=f>R|6vmdi3S(v@TUIP51fJWeN2=5ILKB`f8rhumf*9YV5@zDLDIC~y2%&rbU z2~K|qQ#cbO4pq^AM#Ai8(Z`};_Bvpkb;T+5;`mwdF#E88&&D4>_$2{f6PW4*rFILr zP{2(BULfF20)9@w-z1($gjpy_a7?l$`7SmUl@n$o$;HVq`ws!{ND{ZllBEA@Nzy8q zA{Y~JynxF98`wQCOqhKuMP+0aL^D>vSpu#Wa74hf1U$Eb%5{kde?WvEub}dNzk)ct zAi}eG4Kx|Scdx?iQcgS%^2JF*$@;UvjIAd8odUjCO`881;R^PC<1!=6?lMU8Ljo3R zi1Jne?-cOW8cO}9N$@GaIE$vq!l$H(a#x!0`vK$ZMS<_jyoCAj95jP4dv}KPygNho ze-U`pxPYIidkOUaT}ON_YaslG8m^|vU9}SG2LZIU7VI)YB8;Ea!7M!%ttpNfg3_iT zmO`VIvH6IFF(0&uw3Q;Q5$i6Z+<;gdzpF4##70C~7V|KrozJcUmmFJ)wpztL0u55^ zcy@+}eN4pGurt~IKo$F(pgfTkSP-%MDv0t#c0Fj&AFC<0p54OmO=fm4Vu8SjiUsSv zv3_6dBfi*6zSs=dLvmTUuRf4rEBAE*2G9?w#ESwsz*T`(z;%Ikz;^^XV1bc955l_w zeJmXQrj}uA_kCCUC*ZRJ{!GAM3HW;fUls5*0a=hJqXJe5m;ns4mS7HWOfUmDPQdBF z2ie?UIuK-wgY|(hyItTv9o&TQ1E3GE-v*nY^DdnT+3(W_Ng%<-hhDmy_fU^Z$8Qz5E zvsu9N1iU`H9FzwI{JemV3HU<+Ul8!W!>d4}M|uE92{=Q*b&++zj6|rU7ez>i>m#QC zbC-Z$13tk15;+H$DNza+qMt?hhUgane-nKKFctfT7G{<4DS$?t_%sUG9zO+`{`i}K zQ{t_#_FMsvM{0m2tD3_Bwy}!nudnI|V|1%(MSFX)`htiNm}vmAopp~U4EBD4fo%Q0 zq!CzAe+l4b5k61AD+T;={bj&EC19Z8N`z|#9NR$j>l)sdT#=)eeQD<0z$BFMAtyE! zH?g`}?6lcTXE!^sh0s}kL-Nw-rGXXbt*KFhGJ1XB1jHt&*hd4yh|wVqBt-8MvCCEL zYk>_&yGF&H32Z{_W)a)ZUJ7hMY_nJxwoLm5X3bke$CrY>W0i+*Z3!#P+it z+6cz5S4Hd_Y@dj=O%PmA4^8-4qB%~iEs$lW$yjt{um>Z-E*WEI1^W=YPsR2Grw2x} zA#5*5mp#FzKpXpm6KliIIbVrw1=6BaD_!gr6+20r8|Y%=#p>f-Y+rB$JD>AZ>@pF% zOT_lG_XigRy4hn+Y-L~^+ls9KctYzDjN3b8Ec$S8Ge#!*daaxGJ`uYi`kml5ql>$qISQu=LyL3W*t;rFfY2uxuQIkCF~Q`sv{?7qM>mYE|Yfbt80 z>1>`8dnkaLk523xftl=PC-&{YEcTcadpakAqBG%Fc3PVQm?^%Za75$UCdq|+qj_~-|<9c;pR6uW`VkKV2o*pni*pRJ1Csh!2Hyg*W(3@#R1aj}f; zL2M_x>s>N-D`LCYz@;+wh3IX8bJ!)9%UDb7TiQEW_!#)8e*5TXH@K|*l)EfSof2Z?;7@t*q^kk*kdx5dA+VFdM$h6 zDN2*Q>RR@qh{?WrEqld@>A`DR@@bdydUmpi-M~(YCxX|r^Hl8QcvbKQcB7M)4&KNf zaMGHB2iOmtwD#aF>~Bt5SMb9u^F5M4JSPSZvH=x4IX*RbI~#J+<^?~__Bm-wf}db_ zIcaNyce7`lv<<;~7<N&8svo9uKa?bE?;vG+M? zp9?<0zT~7m9DIts=%hUse1=v1KuXve|6cHiY(T|E;y(`lgl%@xUJCx4-RPwKF8Bg_ z(n=DIit^qHsIfbou*3w| z`U=8Rsy|#zZ|5a?NomvH%n9>lK#hG3Fv$M11oIRyy2AfTr2e6V=E%AJF6fCyN(l&V zwnX9|z#5!VKMfef8r;SN1SX&`TXe!po&Q~^u^H7ix3?0Oa!V6EKoz%2mFw7bNBdiTD%Ekf4*mS_Suxf(MK{&}40S4G*4%FBU zBK*@d;XjlixG11O%55qvF)sX@!2dze6VzA(+$RC{R>B__lyPv-ScTx@4d07Yjol9z zWSg?TzvFgRB z!H`Nlwp^uFeJhxaRVnO!QtU_gYsTO6_`4q~7}{~(B;c(A-U)bH;2sfvP{4-;d|be% z1pJYJ&kOh)0sja%s0RY)24?CUa73#k$XWm=p}(ISSfLNI?vR8N4yn?c!{vH&Nh&IO#3+N#ZFb5l&49axpRNGI5X-P4Jwbx7Tu+5+$C zj@0$~Hg-NJx3P-_yb^GjU6(oli6?2FLay&YZljRi$i9?%R3FWLl=`9G#a>Fi0{FYs zAAzB{bXy=emd+2%ui&BCfh85qAqtNUZ3BK> zs1YTlUFDwO_RwHpQ^ggb%K@(qT?2Si=vKgwA=ecZ_k#Xo6%U3cK$D8_J%KN!GU0~< zBz+pRdPRRYFavY-!+{^A+QW|vOFk8NC!ZJokqFlbDbI`W?7+`?Pap|C8^iNNUefk# zgo#@cnw%T{V}N#eNs((d)2nX@*Qjt+HQBtS`i}6RprKNKDopTR&`{nQVX+#)f2rWV zRB(PRkkg+FpC6c1{mU?g|0Lkw1bjn4Jwo`nfK>vT0yYXb3UI8RkDMP^RNW5xUcC>P zL46Q#wmu8+$H4^xE(6V^>NO&~0dTRt1#q>#9q=T5XC$VDjSC|ui4tuVaJzup@GD^F zz!yO^vPZ!4S=M+Rb-LR4WMn@hx%=5>V-mZBeaQHHq(!^O_#)sVfMkJ(B4f1|jK?BZ zvX_nTM^*|BE7|Xj&9K<2njBilP|dxe>)6(sUq#MF8~a^krLy70HGhf>YM-k~L1}gXU+}ei3?JAn?};_#pxB74UHZe=6Xg1q_(Pxl+I;0mlf~ zE8w7j#|gMpz_kKy5^$ShV;7VHg-mOQ}k?b+lJlkp_)l-n|5Uyql9+7fFBm{ zlYpYvz}lZrH?jSq9#^tQ5WYt6-z<6oaTsCeYozV@8jWDvv?m~!@}3vnE@-ez#%Qxy zz`H~}ZelN|e;K_`VD@W&NVl@PL>ccB^qbgUkh+Pz4*bomrTVYYyVyU>Uq!aFKxRbS z#NwGAzzPA+4g3>)s8`-4THR(5-psaWdThTYIgs>0tvZv44QjbeW$bd%#>fJ-u}y4I zW-GX@1l+H!1JC{1MgcbqxGjV7YI`ybvCZt7OiSz}q2WpFhD=xNOTwPFih7yNz7zan zjK<^??DoaXMf%y$TIMH!PeJ=%I43tHmT{>Q`{VU3>nVBoiz ziSb>?i_sFPW8(K{zs;A=A1My94Cg4i8u#VdK8o))+>XG61xP=EMSh>AH6$AJo2BcUJPXz}M=|Pd==X zN8nD4#@nZatwLA}G+@S$3fRR0fe;&yQ;iUtz(RlnECM)<#Q%Dm<~!#a*0$xTjN%C!JRsc!uz-VI%sx z^@IAo`h?Kd(5}#hp?8NK3%wMY8eSS+89p(*H+*^cz2WP^H->Kue*H6)pNP*$d@}LV#OCA~$#as|C2vZ8IQh}!r;_(4znuJL@~Pwx zlg}rAmHb`uFUfxmdjarT?N@-e2zZC~TZHe|eh>JF_GiF%262H+(LAE9NBFeh4!{?J^mCSv zXx9k%0Re9T+@ceQKg9@!AP81Go~$zfVI!m&tRf4~U-)1X%jFa|9(*cMA9 zRwwLT52)c3jsuQ{&KhgOy%!BKq6dMmuS&H=qt^k}6*a$c&a1}J; z?92L-`iuH+La&Clg})UZ7r89*-pCD+TOzkdJ`;H&@_b}^bY=9p=F1yMp=~eBC39rhb)fs7I3M==|&a)IR2{fXW*{} zfA}|TSz+@z+qcYMo6k7!)Ga-$3g_(F(zE*Xv-(!;>e;+~J6zZE=WpA-g`TTV|3B@0 zU2I!hcHTbvBWX#LL|u>VSR7NiS;fS@leP~;)NOcNlP1T!i6(6^$VhrR?T(7yJieaYLP?f0#9HqSW} z<)3EK0)<5JoPE|_d+oK?T6^ua_u1z#U)wiJCAVD6zTS5=wNlxs`l-5^uNK|S{H~jE z8_o1;sopSaujfjQ`D*2bTWh#AgDSGsM)GAwU9a|d;jZ(E@ z7D~HKTDY#8y?UWqE0?xS=5@W{?v1Z(fTyyH%@A&W&jXsp%E6x5*#1qo(6D&()p8k^ zq%pqiR$NqI$n7_iW-Yz4p1Z%8URd19WmdkwXqHwMR~K?C>q{GY{mji5-CE9l1^l|% zL3Net7uPLP^B?U+l z9&Cj&b!++UvI~(hBV8_gbqm`o(1xjlAxTJ$A=c*0)w*X%9J6{^|$}WplfA6QUcgLzmb5;=291nd|SuJ_4Hb3)#KcO&q%!y9sFS#`YoDkG+j}}XPtKR~^*Z&lwY*LX$yf5_*L63imv#8r{Jtx0 zsBYju;SO^isO+lG5k71l+Dez(y)$7 z{k2zz;9JJz!eR%3+J6E?(v3#VB4ihL?CzsEZP^Rj zQ1fCQ`iBFoH}V*Ri){u$b3b2y)}T9AH{=E8;n(Jd-+BXCkQti2t4vd zT3;ZUo5(Gv`3Of4Hp#XG0aFA_W$tgb1?DpQW%y&LVLo3j9F)-*TCQ4wfq78OhKIS= ztNF$%!k)$7I>?vjs|YU;W#o%+u5+bbn^fm6R}0kxXwU;dH)_>uE=Iz-4(ZaHq(_JY zY8nVV6h`z-*awt_1jjkdyyRLgmhht;0^6xo_e3m>XSM3V?lWPxQ6&i9=di;@b=nYX z8mXI-x@q;agh%L<;}8V~(EW^Cdr>OT zAP-7KpUQl7?@_5M5V0V{(!7rsS4E_vZQGxbAs}Z&r8m%=|q5x^- zmRruhl2qL%=M@w=HA>qhbdG?uydVal8@jAtXvYpiw4QVUs;`Ut^FoT^_D(bK-D7v6 zYt#W~5wjhUDnmX5D;e20jVVi|fXI<}YaoV+j6|=S)p|)>3WFhWTyl^rbTC^O@utbv zN_$eiSw@C%K_%ITjlz2MrC>a9fiG26D+n%`TFAfF9*PNtIMABJ{pfTa175(*=>sYb zTs?4KO8~i(#V#x;Fz^4+&BZ%m4#9rw8i6VQiZfqd6BOnOl)}l z!>p*Egnhp#VcKK#(xhuOaLf(?f$W#_1=q|~t7R7fW=R6uZ0$9?31WPR8KIyTEUJsm zG+uL1PhLA8Tu{ji(XQXYW zed87lHh$+FX#PaWVyW`4dS!HedG8*klR@pYp%|#}{m9J3eV>XUCj~+eLfGLezQ@V3+GM7WRfll)tf?-CcbGgQ|Qr+As-J8kf zCfgPMyON0QH1FZpqNx{jYxheC=mIX`Hl&}9VV34k?Kqp2m$XW5%`Yh>~>@}x)YkAVp6uhkKXFq`R7i_c+)iT zFG4^p)tjGE4R!(`nG#-a>|nkeSiISCv5JE}ErFy4;F!oGL@MhvxjDlS5_dLhr57-P zmA(D4%V=L*|AO1dm&)~fzrB#2o|?WsF+a96adUcX`ufcqV{_Bj=f@_e7t(W!*XHIY z<|lq=#BWIpbGZyD6vXwcR7wp(xn6J=Zv1=S+jASws>O*{*C+5dGckr`2@MkNyJd)? zZZ9RYy`QfX5$lpliE*Q={%oyOQ9ns>tYEg9$1+jz;fi&J%}~3wx=B>WGNBNXA-DoO z-DF&7KTm)3_1Y>U>SieZ^n(H9_w!A4dB zZ95Reaw;RuL(w|M6O!N=&JJRuh%o@UyNEn1MTJqyt+3|gnPO{FXF}rr%)xeDhkbYMRfWhiX_$f1RGs zK1{C?oY{9>G;j}s$Ca%4uA)nqn^%G$1S;-h4Di6RUZz|Wy#T^_?G^;cTu!t}YI%KQ zLHJJ3&#&d{u&1&(ES}f$uO7P$o4t$lE9h0>_k-}qr6LSnGyGc7Co!rt@)d*_%_$iT zfzed6OZX|#uugdW+|_&?Q#~xW!J}WSE10Zz=V1=C-fEY_#j^7|m$v|V;>!$pG(LVp8mYj8P|odC-)Vw(sT5ruh4 zHU{yZMzHs*2k=z{q2XK@kTjzBDpr!NFP- zD*c8eV67|l>;YCfq!VRvUtx<5*LpsN-w+S(eY6fy*Ewb&z+HA5I_9*DDafBP+j+A_ z@4pFK&*R3DyAK|=F)_!Dg>2OeprM&sgC?PgDuNEkhX9^>o4?#%P{inb+o9^KIUIyA9jm;<^_!+PS)U$WBw*DRFwniL7t@c&OJ@ z@a#hcPanR-F@+~@tGLVPBDDz<*+t4+d_PVKn?3t^$NTTkqf`a=O&g%_63;`FkRr8b zIOc_N4Ob-u4A{K_%-1+0u*Ch%D$eMJxOUN|5>gF(o%H=s$s+I&F*fTcNa?)PQbbu& zX`wLi+t`J06?cLsasHukhJ)9)0K=1wofFuc`a`@RVBH+xxlA}Wa8LlHN8qvy7~4Re zQmCnlPYTdHuqdHhxH6qr@g2u29M%9Kg^wsZ^cr&DXAPesKBhZGn#or9ee9Lk!v~A- zs4Z*E@)Ed0z>G4KH>LdyDJ-CSJg}`l1ca@ioT&rKJSbyu{bUOetAiA%mta#z+q@0< zF7BD9z-Jy>Qo3cx<0Y`kLu*Mh@X)MdHwM-?@l@-&F%PyNP4Zs?1zOx=q$(&&8kFzT zBQR=i3h%L)M9vS;o>#EaSv-B~B&~@@PvPZY?Q*Cs^@HqfdCG7sh&L9p1jUb24nHA`feygSAx%O~K;^J4p-xrFu z&u3r-9Bmq~q_40i4wiJ~L$FftIL_n)(4sG={S+WydQR$=zLCB8N-NKwK7i$^pJgw& zjGdwDsB;DH2+(#zDxXu9-vaN2w2WArxUzlz2+i~BLbI)mygYi}-BvlB4pMFUq9ma; z$m0MdIIgL0v^sxRE_=cjN~>MAXywAY{kloE=7)9Nn(OiNX)C;q9iGoXc9f>-Nxh9% z{#?eh2iyOxKFpCEErB+k$#|ogE#uSDQ7#PE5^8nf90Sg1!L)Do0FIB%`fnf2YaIzK zF5e=-2#21G`#MdVvMb25-dAy}fUx(p^s0+T>un>`bHVY^j+`mJOX@-vcF%F=80)^| z=ZD+#x%BSgl;_Vuha<#uP|~q7jBS#w`C)r$&GmFN%rUE_#h*PEE4R{VH#S*Gn@&Vs z5#`VfJcg{-W&C*zswU#q(a#7)amI`j(TK&IZWp&Wf~)0#`?=zd!594oK0Jq`qhL6P;oVd+8~x36olAg5I}*7+sq&-}l&Zn^FWAcV= zM9b)(QN=fC<2Q(uA%ku??iQh+SD?x0iJp|+)dfc!8JK1~!x=+GdLO+C$NvAx76*6^XE zShL1A)^hC3g8gC+dxlf^Dkr8tC=t`IEq@OAfF|M`YLJ?$AR<@Z*v}|6)34_oa2H_3 z_6mD8AmJr&JdY^T#1xKLY`~^GDW7|a*#hSs3&6`@zQEnz&(MC;CdbN~(x9#>;WnDV zvm~@Zw%eDsb0JuYI`AbZS~_nz$qMi5L0+V+dNX?WBN`mC?apEiYLhJ<$l$nzndyp3 zVCXCHBJ+^o3R;UfR_`jLvo5VR!)r)?Ez)A`X^bW2G)F}jpCYbGBL4=U9NRf3aRGIu zN5g{zpnfUphW5*d?=>_l8 zIaXI@h`OD}UTE^3K|eQm0wash7PioHw0eb_`7E6J3NxUvG~l#;i^G+JCeDy8S3;|W zPmfZF_cLoKft|rPl3$M9>^bJbhDc^#j%~Dr=tm<d$@>2b7_*R-#3_)MnFdG>VbLt}T!shKw%E$jTdX5=OZiLTwowXg@vemNR5Ble zsnYr|OiHjV=0Mo?Oba)v?Y1R*f7|N;x8M!0BF%n@^zc=gc~PFX5K}OgqMj*j%A0YN z7dbr%#y$S)!N6k&-HdjQOxvf4;%3iW_ng(RWvhUCBu{b`gb z;L}<%jZ!Sl+V0}>0A9M4&J18q#!|Wo8fr;l9`1og8s)zb@6NW8^K0N{0(vp>6!S*Zvu3Y_-YfHE;?(&nx~-!QY1cq|6BL(`d1Cn^s|MgAp@g3AFfz*av;i zJ+Y2E9=?^pEa`#|Elch1gZq@ZAky=-!763_FlqYrOXg&B|T?I>r}0L zfuEr@9zpl{`oI(P;@nlgjUQWIU* zP>Oaz>03);e-}G~zO^hhK|e(O(L>CEYwa&q7qow8Pw`d4T+33w6K*$q*gQ1JxauD2 zzXyJ`{=49W9^p&Sr{}qWBkf|QYenQn%*$Bs9>+QYS_Usi?o?;kq0zQBN`?|zLOXAP zch>qY$}^l6}WcoP@ZoIb@i+7qAUKx<5(@IBD$bo4$Frgj;+24p4l(7uN*In z8|3&OOh7KSR~JO`zYgiK_3S0I74|kC7W6gh^Jte#B6pSXB*8$TyV3_a%b(e+rrb9gIelkF_R_#iL@48=&)k8aGMf`2_lswHvMx zwX<|uostUx(LsvS%H~M zi>TO%$<`Dc3B!k}u4S-CBT#0@5S`0il=$1RE@u3x<(y`W%~3dxqD~D%7Er^NGK8oo zX|6InUm<$II31lXQrv7FvNC9(or1S(R@gdAL4}hAtcNXAz^+9 z3G;Iu5DuAsOBE92MtwzQ-P1MDsVzfK zcF?^eM$E8}&TzEL*_Z&O4=c+d&l>$LF?m90XK4w+gx=T$wl#$5B~V)$Hll+X9i9&K za9G$w#c(>v`DIY1^H%!Qe874*mX+t|0-X$6=F$ z2ZPh==z9!Rq@6>P;(UD04Is4J00gb0UDE7~;Rc6Hg!=tu7c34ew_6C%1>ZE>n=TOOGMe64<793JQ%Wvjb6Tu<&f&if zubS9(3a%Xc^E%#rX;+*czjgJB^BK<285c1wtD4U3a2dNI)LKg6;TfiL_g$-0trS{i;LL_= zwku4n<#a_^R{?Y--=d zmaO2O!SJoKWQM;8fDmBVwLZ?z7%DRiX286N>uC(=T>09-TO^6Cb62idtO8Cv4*!bD z0D_Qd)S;_wGhL&GAM9*+{r{}y!#6=q&~d+nM7gA`^9oKC!@Ynq)*A$rH{%A{C70QK zOQ3Bk#M;ko`LXW@Av|WX8H&PUf5**xW^Yv+U*47?y>(R#yYySQCma>f*I8L8V{yR#w@NeUS zHuSNbB9EYkBNuPCn@@xFG0lj=#sI37R*MeenA2@rJsPe>w>#M0uX7RgZsj49g z2#kWbedV>@4G$tgdPg76;JD9;2-`((%dwO8$Mj{ubejOfTt*$d3C0NxBD=?bM|4M9 zr(pEc_C~yD0xEimiJ;Xht8LmSOgaA5B3{ua9TW`=w5;bpw~T4Ggv95YcSNmZvOkwXC6*5ai0cTjGzo=58?Bvl3cIi>;s3{@~x7 zWn8EBiLFc6WaXznN3YTwv}V*FkLr*u>Df`ZuA_29>oPG)nURDUvVPsl-6Tmdd{a13 z$B-@A#K)#(Ys30L75fL1jd^Z#V9>^`Y23QWDV<<^syw_izQ(o*mefUFo$;6p zO4*OvgIjk{8#czWw>Z6Azo9pA0eg)jA6=RRHw;6${dEB`_?)Dn&r#og*%w=T%Qx_G z-vG|IHjR?p%xeQ$bInh;E8DgV`e-^C9BN5XwhrUjI#iQLD0;t8~L8((;qPQ0D;F1L2zg=o;<`{Pk+ zCAevfV`5m&;%7U*1ntl8#n$LvZcJQ7In+C}0A5yvugBmIkk8n1K7O^)EVF``fg=QqzPY2=G0yxu5qvQWHO>*UtNWDtmENMTHqX{oWhT~veX7fa^42h9v{{;Jivu8WxJtOH%X#L zV~b(1J>mSeeG1VGw+QQ)a7>%=NL-L=yLIDZN`CecxC302<)$c(-`JRUUeg>IcEKM< zO2!f5^)PA&`IbKLILu{OPah+7E(q_TMqR|^<8r~)+j{LL;$vEV=>zdvyp$~!-kN<( z9b+GbJ-P+EyCvR(8=kqsk%R8Jazn4n2tYA-L;g6v?(9d{vZvbZScon@qx0aKe6|W}pMMw_UYP)7= z6SZ&yGwJi;0CSF-<%3}?`7p3TLtOSJyzCFTq;JjWEMGt`P}&Xdk@G7WDrNBiY5UVpSOy@B+3O$W8Z)=>`Jxcd-Vm=ig(y_#bpYk;G5 zF&Akow5W!(yA@o_^|CtBbAYMFiK%b_SQwzMoXf;xoMrP zCS_e)TmioMmGyDkbJTM>;83@K)7$XAm&T*wS0ZD0zy;$fes5}N?yrCJKYn-VPs^YD z_0MnrTm0nQpMCrE(YfjW@=tqCCx)EFpq|cl^mIF^j-HN=o_I%3tg|O^7T-_s9l!0ARJ@yV%FN5|>JxsLeAsaVR1 zX%bnnhZ?1SrvzQ2+{ii9Ujo-W6zAqFtBC&1G>28F)}1A1-dS}PoHb|8S#~y^6(`%#6Y1y~kw$e7^+i)%XeknCL%b*DB)b!%pacn^ zIfFPR2ICRbI@CAV9fKfv9_;SEOn666lrkCZGA41B{ET)*k?H|jca#(oXS?MXm1CTx z0O2tz$2g_efy`vL9y=x7FULMPvS_mVlpK5H7?WeK93zlhPqI6TQ&dl<^wftFFycun z5yvRn%M&ppiW1XPFHX*Y^WBb~zOJ9$_{TGypoedNM66}#B5dLczN7e#DJ(JRov#8f z3b{cFj)Ur8Em6pQ=6tHpi4VqUbU1mRj_%IH?4Vj!JcO*4y|`2 zh{pBY+lxBy;+sZGoWy0SA#ph|%c~>=+Y#%-?~r$P^x>51=x6KjJL~=Uqb)?cdXkAn z>LM0nH8J4Acn16MLj$p%o~S{_V9#I=FC!7Xj0{F3*SqW)#4n|H#(KK(^YLAR4b>A8 zv5<%u1BfTPBSJmdjjDS4Syk^~KZy1A^^tb(V4u|7+Xp7~GAg+-dl>`a-oBn5Rz+;E zCXh(PLcpEkG$CLxV!BYOySooRyrIRwqX5CA1zI+HlRad!cQA=&JH1JimMgRxSJDLJ z(Po{YAEGljLx=w;h98cQccz;dWC=eobokGq^HbnHJ~D!W@#IJ((vdj)gX9S9;8Y~l zNn2F&>l}!{A|vb$(eA`xvJ-t}Xa*?IU^IFv(v|EUn&Ag^4x1<>3+yP$izUQIFsDR? zf7~%_hMkC{EbJ#u*iXO+`r)wQ!69GqIJ@NCnCXls4u1*;K|R?Wr#KRaKa289a|PZh zCsK4{7-{JGb53qZgqxWAU+a3 z)z{zGA3a5>B|AGKPVAKLAbU?I4*#>~1N-SYn^#!XldECAawKv1U$u|LN1#jk{b=;E z=X%k1MnE;%g&_sM$I%%bj7Fnf5hpR-9qFJlBb_1)5*#}G8#J4W`5Ssmik`9ttQRIR zXyK90Xf)Cl>4-!@xEr*F&1#u}IVKlie{n_R0~RN_=PsGL5=X!*)_z z;zr3Cv&4U@y`VYZ6gWf@e+n<6Md(lA1n=NCOvu;Jo0#WF<&>Dz(^awWXk1Rcy&Oi; zNWbZKqMgRTd|`{|#S{iFI^q$@Ok4rW_%#k#6*6EI@UW0Kx{cr^| z$Efn~W)h8d;?R2v{$C`OQqCJMm@~9D^xv?R|o27<|0HKRE&zu!KM?sseqJhJ+C0yy0LGMO)xvI6iWD!Q6xSE(0qLauNa$*3*5|dHX z!OThh#yjY)VzGp{2sFWd-pocR4uJK)=|%turW5K{;=Pd`v@S}OjnI9KazGs!`6SXC zCv7x2F$-#_nqJf!aQpghMgCr*`xJ~fDrl5=v?mHuiCK$}BGJTU9ti~=G(hoEBJmOQ zIUGlz<6#H_l%w(U5gcjDVTU^q+~uz?;~M9N<6YgCVGo#-+9!hwa8vJycy^tm9M)-mL=xL0{i~GsBQX)7bUIO1lH*awi07qg66UBLG~zN`3d(oK(G9ElC| z;n+8T(5o{x&@<2@=g2_ByN<*#d;;D*&@HJ5Q$56m&t(=A76pagfqoqO2YOLXBM{v`paw}0}B!?!;sDE0Qw-~L%j-rReMS@5uq_XAW&MA<6yT?g~h zY{z#V<9D0ZtCi;4AMuvs>dU%w_%Ftt!ymQ0#4h+2`f>YayEbp3znZc?;&e6jNPh?5 z?$r1MKUY)Ui+Ar<+ylHrvwStRiC;J<74TNYZ1uTYxx0PiMt-I+bA595+O#`ybM`c* zg@c*rrF~Gs`}6Qhcf8J1G=o-L_;3Fz&(?I{`vTuz798`-jAOPk3z?t(``*-O&J*{s4=2N`w-p$wDHreC*#ck04!=mNPn4dG90MU4M-(WJigQBP7Q5;&2-i3Cn0a3X;d37kmaL;@!gIFZ0RB;epzbB#G`%wZUb z(;$P56G!31!);LW^`T>~V%5j~UG17i@{!?1<03kOuW&Bs0#w}KmseDH*S-@_u1!HrSA{f1jP^$k<{ zD2E`JA9wv8*AKyyzITLMAdXUcCOCHE4IgUVrVOx&;xm-h4Z7T1soNioynTWX59%8R zxN&+~p32te6ZBz9Zq?@7m-LB+;P!3ZKJ9OgyM#wBr$nMfY^}8QanlChf47b^>*gQd z1g7r~gWEsuPphFS~1ztOaTrOY2ec7I#BrcgKE-hg!uyw{HH+7OBIAu4T` zl{c?cn;+Z0`=U3#bBvoo51_L~$TmKN9_4gL^cAMlsE_NA0fL%-Z~w+9R425G)k zKCJcQ%Cr8HzY__ZNZ>>QClWZ3z=;G-Byb{u6A7G1;QxXIzHv++s(H)l`pMsk1WqJy lB7qYLoJinA0w)qUk-&)rP9$(5ffEUwNZ>>Q|6fYre*<0P*_=H~@WH3N-~WAHkKSCFnR|NKnS1x_8J?A%pIeYSy)b%U zyMe7*MGsFJ6y2?D`}P&f*NIQE_>{1$2=FUXFH#kfbNO4T*}Tz7?Q&zn?r`m0qRX=zzMl^yy>>c*V7JsC?A?>#zT z-;(@I>ojcixx2~@eXba@>b98DTYBDIH|x!^QI@rLL`)s*f~48Y0n%E{Tnh#z-vE1Zj#iLz*Kk5Sqhkg{XdQkhVxWq&?CB z>4u1GgTbFBx`6X}KYM*1Lqk$y-V(jOUs3`F9Q1Y{607#V^LMNUJ8A&JOv zWCSu28HJ2S#vt0iB_m^zamaXN0x}VqgiJ>MUHzXjJNIzUS6*vf`Orl*9vofj*?iJ2 zKnjt$$UI~|vH)3#EJDsi79(dNXCvnzHnId+ikyoqLzW}wA?G72kd?><$c4x% zaxt<7xdgcsxeQs0T#j6UT!~zTtV6Cwu0hr#*CN*;*CRI|HzGG7HzOO6Tab;&CS)^m zD{>ohJF*421KEn)iEKl*BX=QpBRi0Lkb9B)ko%DbkOz^6kcW{+kVlcnke$fm$P>tu z$S!0z@)Ytk@(l7U@*MI!@&fWA@)EKK*^9i4yn?)nyoT&UUPs5240dLw<1zDPeL4(X2!Kn5c5NCGkl8H@};h9ajS!;nN|I5Gkm ziHt%BxEu&1vwp=iliW^NE$K?Nk=k}Ok_GT1DT0rA+wQe zWDb&p<8Av`-fD|Hgk$K2`WC5}eS%jR4EJn^k&PL8bY-919m ztn}PDDS7$1vog~Q3#O#xOT8dvMpj|Ul!Dysd71ep9Veh|0qNuyPRW=yy}(Q7Unq{h zY%0>fP$GZvlvEiSN>>D38Qwv>k5)r9Vkyt#e+BCvY#*_OlFk}@b(_{7zY(Dt{FP4$ zlp_(vD{msIb($keJ7ZRbA-V=CTrH+BUEjQqTF}!i_;}7b>8d5Y*7fUpasKANuLZpR z-}UDG!#dFa>d(LO`FHmJuAM(j{O*6wO2w; zdTz#FDNm2EzG-Xfz1L(=&C3Y3Ca=4_dbdq4%*{X9I)~@s)#v|a|A)85Kk9!q{|hB7 zyDFz2>FRvs_CbVmrc-!Hq`m&&^Ax%j;9e(=%X0KwIZkyAIMFGMWW=325k+%PS4FMq z`n*ou((nzF#+$Gn?zdnw__pKUoypb$X^tc!ZrU2l?%arQuEaQt#1RI{#B4qsQ$kFKiu>Gz*D%}pnR0IeBy2w!UQk-m!J*U!SOwdo(NPn!Q; zeKPo4AGMM9;jCUd#;ec2Fekk{o-qllAH5H@fYN>b4S9HLYI`*vAOAXrt)X<9mxtD| z!EWE2+?pCbr@XrSH}ro;+R43!j-0RdqUoG#=r{bWdF=LmMA4Y=&*N6iHO=ET&YWW$ z!5X;R!Md%F9RN%NU%S}#Y8P?e zM2;frqk4$ekwhdF3EuD?Q%F-Ezpm12 zWOSYD|M>i@!py|1oXi4Epn^eJ+0GVSYn;-mK^lth#VK#aRvnwPu%Iw=4mQK0zuOKS zsr4-69+;b*%{ehEH>ZH>NU{EH2WRGF=4YkThN1A}%msxivp?+#bF#zIz}+^9m}%Kr zi_(+@`gN3s{~S9oJFTD~Q)V=0%^dKL_H?wXQ(yE&eKa;AOVkY8?|5yy&$O*{yw7mj zwuRTW1*}OYXxo!pquhM|YX3WZIwo@ltui#8g8eIbZ82lbUq`yRba#Ip|HZt#wYN%1 zw-wiVjR{AQSDcsEU%FP+3!6J$9)-o^F`7K~{TuVhHiPFQUp>Z<$IM1%4>2%5Gp#Vw z*+VR#Jl)Zkt{2|a>>*fxiq0m}vof$eLbsx{+Q4@ru)%o;5?$*tsA|Pu=(@ zdZg*jk&_!M?zty8E|2L#!Y9&<8U39^y%SkDRZeT*%*^!JgH#h|PHKJ0qwdcTPjNiG z29#Ib#D2)sKhheQ6x%+wJs+~9?WZ%P>KW!wpJ_2uT{lzcT@BDtI3#v5`#jafz0SM)BCkKZ zJyV7%$)}tP=ig-dV^kBbKXP+0*%c<|{&Q=Dm(MO;%=x_S+hmR8rQ|8 z@3mi>6NG#1hmEAz_+I;I-&I`tUi+z@#f5wAr+O9_?zNxlSxk6GrR&Z4P&oJY(nE9J z?~lEEy0%c>y6X?~)^Y#(taU@{U6@|c8tJZeVPP{1i`KX>e`jSKIh&-Ma83W?!v~~g zm~gFe$A>56=bLa{^NR`3@ZxJ-@rS3U&2=|>_&1_XvK{-w^V6~lGDqYVT>vyEsswZj z=j5eiWaX#Ov`(9AG4Q7`EzNE7Y61W3ten|dTvpUi+Q<9jq;YUo8=o5R&&32#C5L=(N$$<@#iyW zXhNdCl%e%rYop>FLJ1vfsfnk2P6@=zTo4{-CJOH}h@N2)P+n?VEzADAa&j}cS>p^% zC%jUz;TpYe|5ZLNyl`%Qj+a7s{_DwK^YAw&v+`G&s|VuK4Po`%OB}V|6GZgl)Cj~0 z)^in=+OB%`3biTM&air>6&B{qDRBE$?dWd{)6*89jmneZr8|SZG$KCUKBG*pE^RBNSX#n!ss>xzL z?-|OsjX2WxbTl3Y5|_GZO7S^%9-T9`u7##?6#xxaESWF;nPTGQOyqqvy+mB0g zj2qTC7?u^vFSfWa6HnLkurxDe*LTxw8VJkD%3)Ty^Fr5gf4m&l43$4F;6Ecf+euIB z!ZG^vD3jxC)`v9H@0w#wg|M{JDS-SV1O7R*zx+!D{W+T}{k=@~ql}C_bm9fR^vNzP z{gkX6N54H|>j?T=(ZAH_s}8!R`0JLQmLtQ0lQ&Z*EG&mZyYfyYt^J7h0qcBu>-ytQ zD3id30=h?#C4@ie)5j}Je{P=J?kfm5giIj(h)3jP*T|fQlXkG7s zpUS8?5e(~ypVzjc%BVFmp2m42k~MNzsEj%n`Qv--`yJ(rL;pVXvwZq30{S^zMKq6E z2mG_sGY_89KTbAluGe0QlT4f$==|u5)9N3@8Nz^_#F*?dJk-YO4}U%jaH~%y zkbXS+ZPD*z^i`Km0sS0f^Ho^qKv;TiK_OmF`*aC}Wn_iIx(31uvvjAWl7yu>8zjdoJf7Uqpvz&XY^ICo&kM-oqGks{B`af z2=mvuPaw=+XSSzd<@49MUm(n1XK!A4b7~89xfK1)qeFG?ABgYGsUhfYM&=TJhfkkN zbXZw5@4bA)le0U9?~lFvAvLs!@mb@-`FA|~;}4h}bOASUG7Du4P0Cti`n+V-LzM9V z3#Q_DdfFqi6zEyzs)|b6wWie5r`$SI`Q!WNfzqiM z2=}E^GzeAyN&!7H){Eu~Ti39BikmMwGx*Em>Lfdjs65o!{&15=(R`{_e0bP=s$Q&4 zQB|D&=5igDPx{>a{LGv}+APbtQ>^}ETN0+DYoohPGani2H&9TG(e2~H=cB*;o_=pU z*CUP5zu%{?wb8GyYos@Soq10_`%u_{|J7WuG|n|9Y6RkW^WKYdlzG^L3snw_w&JKh zY&pX6$~B9S=1=WFSUR_)Xpf>sQ+%Br{AKm_3hFmqUj1QtX|jOw5B>_*XTH!H_e zP&n&fSh&;gFnXp*K1!dPJ7xZ z7oCrMak&2eX`Bq=T!c>gq)YJYd~Ja3LCT1c$z#W`zg0W5rr-~ghT?m1)VEq2qyOakpmi}2-bMFW)mVxT zeBrV=$_DKkv6XKg`QA^yU!hm)^ica#jIemFRok6kB?4jj+|f{4he&G&X`M;8-~%oytRjnE~+zU{-GlhQg{+WY3VxR4;z#i-iQBcKi<%c4EW4Z zCC!K7Rl3a7KkLW%gd}v;2H#PiY|>DCFOK>_>q|^gosPF1E2~hr`YCj;LFsm9qcD?n z>yz#{Qx;vHA_DQ8YqMh!#`NiK1B>pX`O^>S6)j^$*ZSi1-1S6tQUCaL7#rrUNa$K0 z2zTb1H=g}rPCe6|ZKpF{HJ<(9PC0YjjfC1^4egLYJ7h&*KQry1aiM*HKb|`#qpNBU z==V?0$#eSYDmGTBq|=df4*Js3HOH^NfW=DbYd_)l&tqMYzxEGd{*FHOQqrG7`g->3 zM_>BdPx$roxdDjKo_6>gje7bfp2j-iUBCVOSN7tG zEy#pVpOP;1FH3Ie!c;R~$L6tR%XAJlIuvRQZJ=Lj6HjqGJ#SpIggI;GiO#OYg?nqQ z*6QNIJL0eO%bXy*lL^-tE-rp&{8jG#8c&qF5#?T;>ef%~Ot3Fr_=$D z5`j3}%XP+yn$aI;PHujt()ar7pXn>_KHLt|S1XmE`LOJl-kxsyYGjVCl8G`com@WQ zh^&upf4a}&Q%1KWIT|s!=2}$G&VHP)E}Yr-D@6R&bU#Z_`?Q|89pKUH2}wyDI((=*k2P-n@pE%B=cg^4rwyi4HjUdrcnS(m+8VR|Fuoa> zlaV&fv4X2!>UU%$eiK$_X+sRW-k4{ z0e|}6@$VP#&&lZE_{SaR-_faW|A4>xnyz-@uuTiAQ+7@+{w1sa#C*G|jr&aBU^72e zCe*|9vv6w-^5VQ;;@G}85&s~L4nTv@nMzAaSNZ6A@9(25bB*%y=}a8i^J`8I#nE2C zA1A*cFRX0YUOpy{=7IJJ{x}7B85!AgLic0U4z1gn_ZG|u<)!PtKc3n_Wy>Rv=IFCG zwH6qC<)eLpUq8i63Wcdr!^7N3p|EPlg}IYLVOmCm@iZyCYl7ESiS60*(y)iw(0lEx zv#md_?(a*#J!Kz){z1YkQ7P$bO{gEx$6m|GHV?rQrnsrZjVJDI+^tMp^<{%#T%*4p z{W$b*#NF4Y&v`JcYwKRrKpj(1*H8Dj$BI_oFrrf9eiWjGeKOR#-*P=-4R zUpFh%KD13(84Bm5J98;E;Gd-@O$*$4*(4A)t#E$W_}jvUVFU~Fu-R@t>O-~;VflCq zhU(iq5XN&U`E%2qTWwBzvrFoQ`}9dBOkY<;|CmxfWhtEY7M0Hk)rVq-#T#Ps*+3qV=&SraefoHZ>CY@CpFES# zDqlRci@%@7n|w|oAlu|~pHE-=Sik=KV)A*@s$V|3Cdgm*Ujn#TzN{Vd%Q!B1hj4*T0$FT(J`R0n_9G`@uJtvi#4eDbg$-8|E6$O+dbcHZ!2^r zOz9x|DdFmy4BB}JaTU+g)wM`vwXTFJ1uybB9! zuf9O0a+L~%1J;?5VWJ^~WvloK+#9 z<3DFr4TSm6S?V@_+S$HyR`p<*@0?X580I@?)eMAr=d4o${@yvOR>0qX&eEC9Uq1gi zOZz{67<;d-|_o<=Pa%Jet++rrS;wK@13)B9SHY#&sjRh z`ThOpEUk}WVdk851M@{Mdut6|F>_0E8)ull)-vy!qBxyRoC*s<>mSS8pT?O<9IgEY zzBrM=IKFe1^0|RHTKCH>bo0@CDjkRuJToa?DvgwnUiP9;`A!MM^Va7L1=fMIib3=2*wMXjTA4rpL;f1yfoC-I@|g4^Ug*`$zv4yoe1CL)7RO}uOB=cDW8W; zKEM0oXj%$9$|p9?Jsa7+csl#|<9TPJo#YXXzQS+! z>Fdnq*AJeJl+P;S=?wOpFP_eB{&?Qms5!bT5arW+S*Si80{X$Tk@ESDc*l%pX<&%o;PLt0%pFUGJtX%$l{MWG>1KjJ&>*s~a$Pf;T>z$1l z3Ss`iwW8iY_iQxy{7_nPfjHjTs5bf5M*kDSvyHyi7OE1KhyQFul&~=W*@&dV!u)5W z_&}IVEleEO#a z^u4o@&StSi`*_;UoQ)EL{^o3?b3wSidj=X2^fzZCoxS|}-q}cJuQ2~K_Y9=7m*0OH zZe2ge1pU$XuJPhOb2jqsW7+B;K1*pc?~}^e=(m+_d;8Bu9d$P9m^4J?*Zi{MIhzn) zaXo!qr^^!Fq^MoPpF>c*ox~eLywix+=7LbaD*sSC_7d#VRDTuC@9*6gFA?-dU-_2| z_!s15^YY8WT)drf|3v^Y1oWw5Sl@f&;N-?Y_&W#&ne*{_9lrTg)<(^I z(ij8hm~s?522zsLs`~1RQ~qU?eJ1HB4KJShf?%EvIr07O%oBv`TBZ2YPY_PCIpH&o z4-b1s#LVNvi{25THBw_JRKCzz+Z#vzu;T8C`on|gWsQwMc+ox0(t)txJx%qyKd%3r zulW@WGq-A;HYrz3xc{7AzPRv&F}#4*wF6WLga_>iI{WzZcf-eOS#a{#fzKcAzgOId zHrKh_A6}fTK<9J6j^9?GVd@X_+X{4c2n+Ms3hD>Le71rH!7!h#pkW})vlT=K{5@Mi zOu*l7D`*r5^VHkXe-dZ${!xI6$}l8d$xkp0{)(@U|7K4vlZz2=g-Hp73lgG z?(f^#}@;WsTPkp62Z6=RY^e5x)Z1mOUwF3Hn8;ERZ{{BcYMn1)h zIxZ|^1Cd=K7*E#*@4D#q%Q6P3Y#_H>5h{Pk5CoDJkE z;w~ocZgfBO<<%q@7q`l`5B&w`Ys~!O)2B{h_44i;Hw*X&Z6M79;U{z7SpB_(HHD3Mwr7@*;*pI%AzS^PERiQGp4(by@ z*XA|>|6n_`4TS$$J9uN{DEZ$>ysUMh{M!f8@$5j_pZM$Hw*zVX`NRBYJGJ#84!*i~ zUiWG@AB}OHef@F#b|9T|{b4~nP}e|s&_b)1%|mouEPZ`Q zU+bH{K0*7C^4V|lIo%fzb7WXN&pxyO-8W4>D}4Hx7sB*|_95jHKgPAEyzh&rJ-)wu zo_**5dBmZwv0MIzP<{FZ^n>;x<+H`)GsPD#E)dVN4-G+gv&rXtpML*L0WZDWAo}<9}eQ7a#!s2-Lq3-0{9sN%TkKEwqtu=@43Dfu6 zhp1*)nBP7`a$#Y9`w-cLg?aX&aRGnNJ~Tey@3#+42!sXgL(aa0gk>N4#?(vWYf>Pd zw=apKaH;5@js7n_eeF~H^U<>pO$qpW_My{*{>DC}b<3Ylwz+qn67)Crq11r?Y}_h; zTF@U4`A-Y@%Ps%(pg;QF{zp7H+d%lebI(3>Kpn*ARTs{``86(${Gec5?X?|IXQZTA2CJTt%M@@>%8Oqf7=YOiU|Gbl%0Qwn$`>9YPex)ARa* z^|Yuj*yA~Ux(wZq5Um}nO}f%oU-59PeEO2}(44{n zd?8)!y_2#vCyw+z9j|<~edU|B(49ypKYzo^=e>8qIfRjy_RHR92IXtL*^E6?zC>(! zdZV<;m`eFxKorN*`%je7dp>8g7GORcg^E5iDdR+c8RK*3PRr&6*lsbMaz+xb5K%l& z_di+A+PWa{ImLzZFXO!QMz5T_!@~Wh+i>3Lqi+>|M*>kY+66zAwD^-*hPCNY=qhbl%afbCCPa>Ipz3PdO4m>DaS7zmgDVW<=8R0(iV<0BE25GgT5(r-_5_1 zG~9PwM>xNYf%AW)9^adK{AlX&(_gN~VCvDPs2;~CxBHJ7t_UxJmEbz4_y1o5E91TyR)KdK|Lu^AlKlXz z26r3(ry<{$v|oXz!Vh6BSdlAlMaFDJ?!f5x0xB}PDq0(n9Hb)`LhWqzdz)SPJNdZ3 zt6Kfh8(h=|6PO(CyRsvk_hu`C#&@D74WAhD)H$#b)R>BeOJEbIu_SJR&EQtp9I8&L z^S#FXFl>Rp>edQA16#xAU>o=Xl)mb!_>6C>J$w)HomBe+*a?0OrS~oDikp71y20wO zJEVQAUQoY-&<8ezePKJOcpYFI?*4E990cRx1jyg^WH=bkhSHw{x%X$E1&6_lAiu3( zUt+>9gQIZY49CFDFd04w$H7P7c=#ezdN09AxZi{1Wq%3zO$GZK6aFns#a)uNp9U-P zOPf`B8$d;N1Qq#JnlAi0XGJTT=UAK20{R`*hJ-hV^^rzMUB^F~zbo>0Rivi5qSj>G zxYDxNFjv1jIt_V`Y6mBsD8`d3Z5_AbpRAs@R%k4ZqPSXD%Q>lpug9~fXIcDdbGxGR zJ3;Omb5#|tl_s9|E^yk$T7|zp1?ZQCbDennrYY3gIUmNr1yK9gg;2Fw1iQk;Fb>kE z_F%{v%N`HUfjTeQa0y%rZ-M7R&DCX4<9RuJ9G(X?N6&|!z?G2sZ(RWOJ?B-h0c6bB z%n@rfWK3HZL&mPP29AXq7mN{WE$%t+a!4JlD&XV)I)o);*BlL2>l>eG}^e+^55bpxy((oUkv4l-Yg+D!nJ*PTc&y zll25V40l1@Ag4}t4=BC9@M+w+@L6~cq^|bu@CEn=d=Vaodth`V-;IG?pyGEkZv94r z+&v*}WXHi*;c0LmOoFe&N$?Fg9liRVg7k&`E<6N(gG%=gcm#LpQe3lPHAr9Cwc%H=5oFDHcR$5FarJ#OTb7b8f%hW3Gy;w zyDKaMr$WYxeI6_ax55hWb$AN=9ae-*xrkPRBOqhSo(HSL>ma|8WIqLK!Y|>eumcN1 zEjSU@hU;Mz+y(2vBd{*4!Gcl`_J)j6I|DX=t6)R814hIBFa}0)L%9)b4V%J_kg;s{ zhRxwX$e6ZAK>c=6GHeZ}!Zt7y>NkuQLj88p5~$xHIv;j|mq7g<(N$2tM|2%zPS_h@ z54aWfg!jN+@I%-K9)|jzp>JV7_zR4K)hlqFg7qPD%5Dr3U>nHXvOB@SFd3c(C&6Jb z19JVgbKnR#7mkEm;b?e2OoETWWcVc<2Y-U>2khVBMA(o6#AMhQGKcNva4MVtQ{YsX z3RB=Tm;uva7R07*7sBaq5u5>+!I|(vm<4Z!v*2bp8*YU;@Lre;ABAVY-7p{ShlTK0 zI2YEc$hr^P!TGQoTmXl{MQ|oO6E1^`;d*!$+yKvp_d*-K2A9CE;Zj(x66-$HjnrkZ zF+2|rfak-ha0Q$PSHiR51#k^q1s{Z~;al)x_&r<$D^}+Buwfl|DQpcdgPq}8I0#+| z=fZVxExa0TgV(^P;ClEbybit#Z-j^8P4HW|1(xO-c?YZxx56gyPN?@RZ-c$yb~p*% z4d=iea1p!*>Kc15yb|6AH^BShCa87dR`?+9hv7r;c@zG!;XCjV{6B$@!ctXP-(hX| zIBWu+fZgDeZ~)u|hr``48$Jy$gU`av@Hu!7d>%dxUx2T`7va0`C3p_4KM8+?&%vMITkscn5dI3khsR(< z4W4I%jo|OFAN&JufL2M%-U%b%epmuV)WjRshmo)^ECo|wX}AQIftz7jxCfSlpTqL7 z%&DyJurWLZ4uKV62CNKoA=hmCOjxa?_2``#ibj{TR@I7Py}-W?RJ+%MskocNG&t6T zPc}@0>G)?r=}(6lxC>z>yv2myZnz!J!2e-56MhP_;J0uVjIP5wh+s3A13N+X5Oy-m zgLB~-@Cuj@?}G*KO~`LN*~j2qSfB0nJlGe`hbfTXT(WJr5Z(wE!6)FE@I$y5M%H89 zflc7qa1dngV$Xm!%z;bbT(}f2hRfg*xE!vB=fSt&`OrQ0^<*zT4w-61`}!C}d-Pt& zKtz5DpM`k-U5)=}sB@#vjFNuHAfzpl#sHF$FB>^N%uUxzuQO@1L3HM5>=U_lHkpVF z;2aSTTbXp5@OKMj5Yox`DSQ~R8+p<3JJkvI{Pq~XvyEOpl%$jPI!-Oqo$xGKQTWuP z+%-7^*W@e{#d$XhJ4Y1mC@a+oS9wByJ^rHZT=X-DzaDz|bi%ECB*A<>meqt2?*)0m1yYU8KzDv3puR&%5` zG8~b={1T9kMkc~EWD0T`(gaah1~LPgfHXifH)Iz{LB=5R)3{e$`DyISuM0AdvScDt zks*lc(HUvvu%dMdRCubP(oxxDdr{l!_bdA$%2VZ)%tHDjs*CiSA_IND?bw5~dXjs0 zPVSvd_;jfB6i4M!-6X1)%BcCNc30Wdev;XQseEc@$!sLn8Q&_STbDZMsQs0$+Dh|M zqIBbt)`*vv#~1MHL{1~&IHVQQ9g#Z;QQNBxCAT8Ui27y{qHxt;Wy?oovp5q;KonnN zNo^**W|XlVQp=H3t!St0HEG)@=5q_m7K2X6zZd?wMgCPOqvpTIio6xt9ZT78Ju(eZ zyLxSy#ornOa}bU3rN}BI7g1T~B6)@ypOU(W`df9qpvZ1kgS}#>0j^!c`z@84oS)0$ zug_}MX&t8?gKW#Josi3s^#p7JpM=feF4zLOslpyJ;NU%~wyd>vMz+?<^qJK9??3isPk_KNplPxw9@ z0u>*dm~{~M2;&|FKf*m4egelD|MBn;?hL5>vGq92ho9lT9DWY5Em%k3T~O)EuJHwK z&hFM%PkTbBO$6425WC`|9_*aB#pX!E9;rF?nZ`+fGW;1gXAH-m zvxGy=0@kniv-fxO*yCHj;l9wg*~43Z;C=vFk?c2&KYLs&0yle0s{~|^=7h8Na#$5A zomz$+U?h5-q3YWMmc~5|mVxYX9DnvSR$1KV!g6qf3BS$oK^TcYW6L3Z=9K?{;g_%? z;gs2`1Q93Q>W~)~+8rQ&+p>q83ePp+%VBNY=fOJgR^xv=jK;kc#z5IORQ|hRBiwJp z#!&VQg@0)HEo_SWN7x)jGBH}fny@8o2wTC{Q0cXW?Q!>ml+jLr9pQMWdYo>U39;$e zGoj+mfxOGsv43FOv2VfM3*G~J!^dDBD7!~rxXKE!kV(?vmKO;0WBW!jbS@I0_zw$uI&t$XFN! z$H6vmJnRQ2z~OKroCL8^*)!qk@O(HGUJp~?-7ppIf@$y-I1RoB)8P>~9ag}eG6Ob- zGhsKF1rs1PFFOOyfs0`dTmy6Abub@30t?`4un-=GbK#G0K8(QrvH(WGg|HD^1lz(h zVF#%G>k7}p-2-QFcRP49>;pHzY48@92RFjYAvQ((X1EzX18;?|!`tAmkhy7> z!!EJ~wu5)T?oj#lHJk$P#GMYAyY_Uba?FOzVS5eS0k4Diz$f9o@MU-(`~lt%Be}*s z09(KZq3kZ$IPEF$VK@su0`LL3Ux6FptMCr^8hio14qt_D zz_;OB@Mriow78JJ1Ixg7;VJNa*a{wiz2Jv134R1;z>lHqIiJ7RSYJPdDy zpTP&==kOVL1bzU&fL}qy|K6|+c9pMiSAs`jP53oz2)~7~@H^NM{s33NAK_;B6TAcd z0^NO$_F_7}>0A(tH0Gkk^@06qRVyCp!v3p~<5!b?WF7XI`ovoq?Cb}yJCmQDFxBtx zoy$&XD$524q!ke%c)~7z{#jqE3|L)0&X&Afi1om>LBb|!!h$8*^&K|ja zQC>BP*^{&z<6o8BRnE}8VJ>6Ec1Wmj2i zlDhWNHEAP{p|;a`p*@m-Y^L9JUeq2q5z&5E`(&M=WJef+=$tYNX@_JOiHABDXzUC? z+9L`}M-)$SwD~H?=00$z8h|W^Yk(RzOBzuM0>>qIwIxR_Q5Ur)O8~V~vnC_+i zBTh!A6{Bk~X$&BZXhi)nl-B4$4b?u)5brFavz*#WXA+6dSvvDb^tb1)^Nr^(eeZAe ztNOGDqJDDwpc>)&xNW5|p|XS+DvOtn)(fT83cah58Ay|&v(Ylr`e2NEHd^DP%>ETF zFn?R6xHj>31k_ol1k?(mwNcNvl)^m_a{o(TwXjOUbXXRyhUK99{6j;^fRT+)ReD`# zcK4inHmvPDbEC6^`x`S6MZZy_6^#3Q&ZiP-VcxTj@O{`G9)=y@_pl@U33h_NLbatu9lPLe1-n9>)4DRcJ`6~9Z?r+IN6#W*>4Yb25 z{Ph`0`P;(LunQambyXS*2SLsj&RClO$Kjp?Q{iN&u{Qmc`pM$F*_tLG4A@{F8-$6!4T7s2P?GWa~a1ilE@!aeXhxEJdD|1!J_D&HOOHQe{Z z*Wu&vEr<=tdK%sS72Y3L+!w=wico5ElA41M%7H4I9 z8T=TY50yV>EbCL;HyVG=Do*%a@G$;Q!p|UkcSrvjcm($c@C#^h-u@ECKQXVQ+?&;a$f6KFABb z><1t=274#0QQBJCjkT&4?i5%X&WBO(ELaEXVMJ^Z_IdC@%6&1Uto9W!8m@yeQ0M{_7ff%b}`^3q;V>wO0CwO4ZU?8n;PlbvlxXFuPR@V|Nu(H=>8{Ik~(?XR?N(tbwe zjWKPZ`Zi#Hrv0_{neG|Kdxp;4D-AO`+G_`Obbe}y3^tUmu4SIct?QZG(rx40KaOSR zr*nYzuLFGk+Lum8W)ZVH;ku6#hjjPptRY(?Q~67JJ!LianrbH zPpG|z`&&K{MZXKAeOEmG`ZQ;pa@*V?x3{epxZ`0fs6AjCsOvH|ILGeY4(8!*5A$IM zcn;KjTw>h1E_cHJBFNlzo>%4BC1?MI4bQm__keo|?+FjWUhr$E^mP4IdSxkNAKcYp zU)UD*gPmX;><;_GzHlI{$T@C`GsiBV4KxPS*GY)}u20L3CS|p=`asWUHmCK5BI*1+ z1kruVPV}30$7*-Y!^ub!BMpk$^@bAIjHkML?K%9dk51V>9i|r znA5Jqq4u#OU<$;R>Fi@iLAC1`xEv-y?PFQ<>>J@YxCOHIIs2N4P^aEW@I^QoYQH)K zz5`RC_N~+4M=%|J4%NO#;Y{4RACU!rhqIveJF{U`m<{W~IZ*o@)>>!3lLvd_J_Bms zQwT@Gxo`%Y2YI&Bnh&+VVQqGvpF9)le#1HNaj0@U376pBW!z7}b8){6m%}&U`S1g{ z67r0mbph0Uh)k&a5Ldw3@Jd)8u7i!?)vzU8598srQ2UqbU^ct~>i*ee=bqIH#!U!9Bf3JJP)-megSG< z{37fDUxK##NL{|4*`--Ny4+pr>I zz_ma0g0d;KHhn90MAX;1h73p4=cA1~hnCVa7oL6>{w_{G%jnM`eLZI)JIrE4&kM+{ zd+)L*=x^C@bkBRcakqxL)-5z{*{@`$*lgUbi`K+tlx2ImJJvJ?^eKldaQ|1{&K%8vgGL#^M((6ixha5elL-U9!C zTE9z_anGS8;ZwLH;d8JI{1ldjI&YSPF|a(0g%zRJ-AZtnp~ih>+&W*XT-lHxdUBp? zuL-sO%3pSdTDY%<+~cx082^p1F77R`9=s1WgqkOfAjJMa)O=&lZr=>M z!%eU!d{iXBe&CxOqm=;mfceZk{Q0co_D_&9i~l09b?hI1qM&Dwoci3Ai;+ zs@1fe^H{*`v{5A`J?1R>9Sj(^t%*L&A;~c1SV;)R~ia!qK z;~sA~7Z%`N2n!)L4Mz`KhQ%}M&i!P?yB)X6fla_V6YhhHA!k*KvzpDB)H(;&D2*Kk zc7)4d7q}dzz?E=5yZ|nO7ee+J)>;v!;_$|B?GN-M}AahUe>9v_- z7H2=Z4!j2TFr<$i_ZWCB{waoY4Hv-c@uy4ox2G?|^Y|8yssm0p5jsx}okf%Y6>K7v2OPguCHR_!WEt zp30*BBy0?KL)|}q8YUPHfzRR|Z+M1bA$%VHa}C!Su7@w;f4kx1hPto32meM z>i%_m{B{4D@5K;mE z4kyD5csg7Rr^0nG1>O$R;cGAxegRo4>|fwaScwf&7HkA(!LD#N>;bc3Z^M32>vw;c zi+_UQ>Bc_=o`HX=;Vi>E!!uz%;pf0YcsZO4uYvR6Mz{dJ3Kzly@N9SpvXC{QX2-HyaM+H@JcA#ns-0FFZZcEd(w&hbstXmX8Ity zr!yImT}b}28Or{sdyw_nyN^Y5zdG3=TTc9|aZXsSKk+-2zvIo{vAAVRT!x>X6_DLT z)(%%M3R~K6(oeH4Mo(wuwph0^U`Izs>AL4;rK4wd<2l9X`BwK{QdQ^t)0I<>&e+XJ zU1c1?$yw#sy-%H0&T!K5+QYS@$&S<6$S7a?$et>RGa}n-6m}okLj8X$&nfsR&ylb{ zqB#1_?*t!Z3(&c`F?kixYHr;dIA{K5q}+j;>P#Mww4-&0IAx9EOdeyMgI_cJWaW`v zz-2SXPM1U;vgyihr}W43xB5%Z9n03BvzBZPvyf59Aly2;>AWVJpW4&?-arO%=36Up zccAoxtihB=_RT)jYZN`BzHUR?$2sPksWD^ z!PH1L=w(Lq48%;Ng;RIgBD$jy#lO862_vZE$^G4pJT!KuI{G~vTb!3xcvvW1zyHbn z9V(M-B(mLhX7ru-@AIhFG^90U8jr-%I=yMf5yVmZ$c|fF*m7UIk%4%cH)$rG7uJVf z97&q~{DNT@5GTXLlWkaK@#5(jiUwHpn?pUzy#hViF;zBC*KJ$ZmZkf=x_6-QRvnT3 z-Y>Endv5Q3zV1I}T8X;}VR?wkIsmuYPS3$~Wu@?*iI5FKb3mfDmn=av_GQ-<<4zz7leBg0_3pF& zjf(6PySOg9zt#W!+f|2JsWO@tKqHi7I+)n0`GuZ;Wqdb+zwwe{2bne`&+1d^bEod+&{qk zVKnuSeZp32bJtp`mQEFXQfJsC&<^;2sHIg~^8F;p@1k!Z+Yj z_$IsssysUTzm5AgkHyufeb3VfYRF z){y7nt#5J5CLmUXKfwC%C)fr43jE3BYwi>~@oWVJF+T0JaVj=fW ztfnvxHiNTZbGR6`hTLbcc;4Aw0XstO6F9_6%MP*MI>cUU^~C=z*bDB5 zeBa%EANGSKIb-*Sb>RTm6mtHxdl~kHgK;MsPBYAe!|-1LM?#(T$3o7j7UyM~bCxv$ zmgB6=^Vc@#8fyyVJmRn|oQk`TA^Um9Jqf1bpJm9t(s3_^)9`2i>5#R@A#075f&T-B zdkmR_)^z+oF#OT*7dR7t`rhFwa2D>mhV+@0jk}E@b$8sS!5sW28s-}2!#w<#7+z_3 zH6+Zw)$lRHCm{9%`(?vV4L^hP@&DPdGG}kOtHFgZ#;}`VPk1)|eGSJNPJrj&KgCeC z0J-Nu8!j?jV|W?Fj$z*im&1MVJa`bUfWO0)umWdov6^8`xEgm4xCV}cmq5Kc;4)~# zwNPh!QD=JbO1KU_1h0W_LhL5?C-6F`GyU~Y&!UU^v1hRc+yM1V`bIbwZi0Fioi?@? z!rS0^hN}%Pfp_A658Mu4fp@_Ja0k>g>G!~roVCRYhLzxhxI4m!;Yj!hJRLp;=fItC zk>OIq<#0Ftx5B64Q}7wM4?YJ!g3m*}D?t3&@EF{KyAs##z3^1H59*Bn8tesMFJ~>E z2>0Wj2H%CV;Q@FS`~Y4I4?>;wKZIN1M{pAbbH^z%St- z_!XQ0zlBTT_wZ`?1Kb3Ef)7E)taEn%1%8MddzSqPJO=e{0r3dbx~en%AGp6UEYBHS z{-?l*@?0MbYZ>aSFaPGS1Z)j?4~IPfmV!fIX_y4dLK~KY7r{#Ka>!h=^*$iwb1lTq z=Ddr5xn)0wyE=RWVs~?F12thuHcF?$L9iAa1^FI`Jr71f8`g!F!g_E6tPk&n4d647 z?~B-P!)SN}GKcNoVIx?Dvo`iUyDn7uVhr0u?0t4O*bJWdjC`Uqb@1$5kNu*{~5Tu6Yid^b&k?A3M=#9*`oklrJJD|(+m8!R(%ST=g0(*}R{x*&UC6mc35S08=1q`qS#Yy%S! z#T~#^qo)(D=X-`@vFnA6L(dN>%@(*+ChysXH*2ytz0mD*?>D*jQuY_{*C*YngG;sx zPMdJ~bo^Tywl$Rfg7<4V_6u;o@{)8G~G9H{t9;8nPn z!mHsb$o)b4Qn(&o3$KS8;7w4^AlwXje~}aa5WEGqo;}zEdGC<58U74!g^?w>XAAXg z{2h?@{#e^!S9llHv+Z}oDexXR+i(fI7xyyAnZ&V2JOE{nco1FzRsO5sqqsL3>X~-A z?|_fNhYTMxd;;#of3M*_!#AMPdkgL+{B7gj51++dCX#(RjD;`2Ht;3L_rV>GfqQU| zg?nKtd3; z_weU?yN>$~cmTKTARj_$`!O;ycLml-3WB=O?WnVLtpB&V#=|o|CkWLD?_A7MlI zn_&d!{>He=!zOSjYz4UwY4QDOoBNAa2e=k?f!w#Uy25pkGp>ET;mt4(_kFNGdEZYLXJW3k5KKHV@Ca=+c40Vl!>A@B9Gw?gH!4Nk#*w{dgkwWi|ctZJpew_qwf z4AUTIJ8K%Of*nBdI1@Q+1T%4WfYTw@Q)>pC0B6EHI194oS+gN)oWoTx8#il@H3zcR zIAraxcs{^pZE(n3xA^|L^K63n9B!T)uo?4K0sICQLdKXwJ)1BWcO^r{inRcDQ@9BB zg=fNH@N7sKt#cq{aoUBn95*`F68s6XmcrGB8{oOPAArl?!|;6gJXE{B2v_2M$?yog z0QXUNAuNTRL3(8%HW9m?aW{f0M;mx4)OYQ%mDr=;6;SU+yb3Oc>!1yl&I;qc7+!<_ zWpF*b$?$%7E$$cLb#O1d5xx%<{{zVT0PKT?T$nBDXh*_ZU=);IUAPH%d*kj3RgV5} z3rvA`Kt1EI6)u6>pz~dQsPF3E19!rE;b-tcSc1*mL$DO2EuCi^9);a;KL#hmoly3T zC!pSu_$1Ub4ZGkv_zaYt<2iT>d;#j7h^X)0i|<1E#Qw}s-@%u=B-{(D80uLDxn=)& z1$H$|G#m-{;Xln#-^G{vO!zuH8@>UTKx|sJo^^N!Zier|o$x*QJp2G2FqFOIL)>2* z>bv=J%P#UMYy&@squ|$2?^yg6-Uz>gdUwzd@NxJP+-vwM`~~+x!()bjz+?F9nFle} zuo?Uvx1N0v6Aec~eh9#xYFKDEAC|!XJj3;d*TYEsw;FDTrE%{xd=i$$t#>bqvWtjc z!SYb{5wQmL53v?J1vWM8ZP*W1!heKehN0fcSOx!ihN}!OhSl-E&QR}Sl>0td6Fz0Q z-|&4{2mcQZe=*d%8SCO7!LtowZ9_dP!JM`m8g?=44tWo%Jq5}`hk89oSG;{P7xc_#Z;$QogntHJdOHi7M7N5dY5yWiOrp8^A%Zm0>5tu5cLsli+YTAC7>_A#0d@4IB;iPDpW^ z;oWc??l<5B_#K=GOPtEHJg^$%eIs^5!)AspVH*A&;569HuouJ@Y$rh8OJZlineaTw z`(*94koT0>8(=ovZup|%UYLjfL3jrI49vx&G`=TY@$6le{bR}J&*HqD*0f9u&IJuBe1zpf)*x-VR3d4=oy@A@v+^@L~n!sAW2o=sBt?S$u^Al$VR zyJ^fuuRG<_b41xN7U{*gUElX<k}!v|8FUJb*pOKN}7fL z_H^Cnie#&EpWkZ1GeY{vhOLjji>dcGL^*a({T6}jpJL17sOLarAFa<*Po1#3y5CJw zo%J216H)dKg}ZS=Y3TbV`re&v#Nj%!hwGWEs@9E!XCuAnL460trCV-qOvr|==c)ee znX><8Te_YD()WMVmVfmbwf_kly;g$%>1Wjbw&RCCzxF?E$Nx`1qxRor*Z1tZdKPQ- zM%TXks77*9db;xIJ??xLmjd`v|hr^Hp$sXD4o5y z>%*5}4CLOv-NSGUl>Ruw$#5U;)1meudV2LW+?nuoXhVfBGh7MZzi;4Yc4{L0!x1bKTVSsS!S*=l^uiE*j~{YCoQ%7-S^;u=&sV($TTQ6|_;vPTxO6Mqy zglZd1b=KFo+rn>Q9Q+OrfYQ?yS4@UKKt1;xs&6v&(K`?7vVwc>pmN`(l#2dAQx^53 zKFUk!=u@hqTLw}7Wgy35y%X2@?zyOOP#)_2Oi{Fy`%Vb8y`KB5DiCuhNZa!vvylLIp{gW_i=1H-~HKe}32SZJE)#lq5}qSC^`8x|Fo-LSBWg=Svt zVqv|%|60#FXPq?;Cb-xVOGd)Z!7ifPQ-R%J?~k63rh@_!Gh8+ASeAEbOiFd z!Y;5F!&ZVvfbLK30^Qot{$K)_4O)QisjLK#06o8{dnWDo;W`1R0Fyv1xEkCFRs-$1 zvlZ+H-58J+U=nBn%fVW(5o`xZ2g(8!UiIRIWu)TA=Ikw}Lfb z1K0+3gYI2GTAip2d*E9N^RoJd-D6_MTd3w;*#0Blf%Y$6$6Iaxyz!FCuOocBcZv0} zc#2`_D!VrHv5V_kW{t0}Yv2RJa~qrYaLnY_6~4i{)9UK0hPJ@;SGKfOUCm<~7cFr8 zVbA8G{Q81zvl);IeLT5;v9nBjd8kh(vTbVJ9KP#3t^UfoH)UI>i#_aJ(7G)Irn53V zQ<1G}0^ez_Tll8y3Vzi6Z-uzcSXY+)vvpnL7S}hoG$Z?F{21z6U8FwNJ!Kte&#Z0U zkJ*NMGxY^uE~5h~toG#oeINC84)sl|YZ=RD#;4R=T&G0MS-SVGy#bUb$Q_;dZ-%3z zo3nM+7(1z*>)c_W;M zM_Hp?FO<7;34^&r=^S4~&+h9Gqc0|_)NuP(1?2#_&KC%4V zvuft6GWnS-`Du)L z#xEO+ajxCYTUg&xXAMWH`eYS~b|s(k1i9dU+*7pel#c#MvGl>jD_#CCmaer?X!~4x zuI=}{@A~h&W0&i@!3QnsbcBV@VE;F_cFWigx1opFu=`bGaiPB)Tq0flMftmxNFQqH z`VCu9zbn6jc=hwu=)Hjx!f=lDn?|Z%P^> zjNMR=-sRW_A?=eA>QQ^g`P6=r=b5o&6Y_fBO!ID#S9{0uwRLlyyq;&7$%#h4oAnzk z$df%!o>PI-OLZvER`UFgIQBis=Arz&JPYRfv581te3+M27SH}9&j76<^t&(AkBjp1 zg!<*1phGuKBGQ}p3$yw7vuM7MXA*g?LgrxFPjzYB@n>G1pkG`U_g0fLkmH?|Y(CuZ zy7{5;f|nP1T9P`=SVDB7b$d4ing4vjtfXFNAW>nlG8!bn5QK9)xqq4O%eeksvaQyk-(vD9PmohvY2IT_ zFq`t%!r`2oOUEDcn`B0|z2dacj%xones8p6#x$I($}MmXE8{wCNt@STub!Jyo*>s& zJ8nmQ0`h9dbFAFZFW-)KY|=@ZFx8X$m-B9!zOz$m%q>AbJ#(czK`z+D)N5X1t=;VB zZj}?q*Dt8m&lcBj*CAa=S%WzKYGkk4FE0w$)`L) zF4!BlNf?W(k=J*6)rR`+v+RF6+Ayr=$`7Rig7y#$fvBe@wJx}I}khNW8`YnjhFKZcP z9gobGs4S-6f;`?1x_3c*L!MsiD2vCOl6iE3pcn4R%Tr66Y7DBKoF6TZ-lGk9P^D;| zFm}an=DZX7x}M2X81Bja%YDPLKbQ`#uiFwqdR8F60!Ti{gmVi1&CXTfoU-To6+hS4 z+D%OPBLvpJWnZBt7pJi}x}m|V*v!sIdvMK$g?+xbLhWJA%(PnogV#vw?f%W%mc2biHw+uAslU>v5r;3Jg_He-431=*qqp z>fuVsTd5~p_uFap$R{DtcgwyV>WS8g;liK#LM8du1LX^{VP2!JliLTaA=F3IUU7W9 z=H0VCoZm;nJ&zeUU%|JO|GNkJ|2618wxO|^h2Nglk$;W(Ws1Ak7fF9hW$%?}UI_P6 z8MYbCEewkc;7hswSqWU@?yb^h8I2coa`%6af+ui%G&~LFnF4puRrgMHN3Dw1R1wIb0 zg8RW|!TsTCSo%(f-_P+(cmUj5-^He{?q%zJ_n>e8Jbk}Q{x|F2LDVaKX@95hU|9Yg z0?WTcVcpXX{vF1#{7ar9`qu7|fBn6=H|O6<>Xp7H!Se6Pu>3m`mVb%M^Y3XK%fF-G z*8bJ^khKq7Y5&rm$+ZkV`B&#(1rFVBX8k>$a`nus`nuZH-=|5b{aw(xU;b1;KV4pP zta<5djx`;MH4LY?vifr#)psuj@Ra6oxIA07zbBK*-m8hro?&H+RW@zr$`-3^#s+#8 zmVH9DY<~|X<<`E4>-Tk5Z^nbuTdcC@z|vc+vTNbiWnbvZmjC|QhW{E|-o9B`f4`)- zuUnj~{~p%8l0_uT!#CGxm}@;L-4BVfu~c(aZJ7 zdd@ift$p(pCsv%EWv{cp{qxAEi0{=l`ktEh{S)^#9s=uGNsX@{qdo4l_r9Lh(s{wp z1>t<4cisJciB$H!hWdV*c!h7HujYmCz-l+_!y91QGcgI|V8%XmBGV?7@>3TPitePc+^sA+#d?dch_8uOY&bZ{XW?a({9Q0Fn&({1pgYwPnjJsaDDy-_+K3V1@3_E zTj5T|hroa3_$U~^X8OR46Sx20E3o?h-{5iZ|G?+LyI{SS|94p55MVsHZ`AFE<-cQ@ zQN2%(gw+?-&-LA*qod~+bxzRpi~8P?`tvEq`lf}B^*)E*(@_7`@j!M#7{c?18aEm< zg4$l+s!|(j42kpmy`Jat_g7Ncdovf}i+RMmkn-~tCqwt_V+uZ$1aWt`9h^4q1@FW0 ziN+&f{OQiyW$+}9)s~t)b$l+&H;LSQhQHnXyB~aorC(?AH^W_szXRSMz6BBSptoC<#(#`erl;IVLL`bHJ3?@3_yRI_fZ>ek7FhcQ|G16vE;U)PWcA$}?QJ~T>eC*=D(f_- z&rxQNzK^DNti1dxWQVw82`NqQconx{HtAOa)itUOnX62uoLTNf>eqSXaJLSurVfAq zB!y-^&?MRQXf17{xuy<22A&J|GOmCx=C})Q!};&s9YWh^ZE&b7TWcVH44v44)m% z=O^*Z<`nEdllVSPN9p44Nu;v(G^EQCpl}&w($yW8!OSmiU48|8FvsFU;49(2Fwezg zPJpk5hZvs?U&FE9N9#eoen0a*^j3W%P|x>^^PRtMkjh@Oj(v9><;izq>HASw z?IV`&mca7eQaJYA^&HE0ikI)i^4-VaJ@?%J=ev#M^Y;N#j36HlfY#gJ?1SUhYd6CC z6UTly&Szrz>{Bq;796MHn>beA`ZU}JR(s2aTR2v`i?tSE|D23QyyQ+do&tY{WB=Xx z-uUqtW(TdY^iGEQdk^}7YSWrkbBp#J@5L{^2}o+b$@$%1>o4y2&ryf`E|%X{!1B9T ze!mlz&Yy>4zkh*a`CakyyI6i-3Gcbz{cp$_?ZWl@RQB3`Ib}^EUg2)al#chfvOTL^ z?&Vm1{|bBm09y zzX9I|EB=0%XW}#K;YZ;oEdD3(H#y!4e+zyd{x6^V~UMU*cv1h5y1%^)Io;!1J)i_n%<(EAip*4p?*H3$WJJ z$8fIB&3zh^1vK45e?6sfWlyNZU7S{i|ewO%a%c(^5E8zabpXJ#* z4%to|iw|Zkt}izz-)!Ko|E93nhcZa#K!tYg{Cu?!tntzw?g?|9Br^c!;WIZ*_J#dg zLu-4z@1^;pXZAOl%JbKBQ%+Y7^RDsG=Q667Ybvh%E^vR2_lM=L17Lrx>@3RF?~@~3 z**i&-Z{!z+t)PMkJ<~QDv;e-{k*oylo31^}weNS*9%u9bde%&P1?joD;UaMCrKKx-$YUk z*k?g|AZR}Vy~D5f_4MAD-seivfOnIUDPSI023CT#V9&0FcXQ9gPjXF^yZ^!O8W$#b za{tap=C}8m52JTXbe~`z5}SeKgUr#~4^YPAv-b(|?~lIG`$j=W^+)xS?>Svky5{ae z2mTHEp2Kfd^^;C(??6uHSij-E7%3}oXy?}T1SO@A+=U$uv>=>w2k+N1mDOzG5PQQg!@wOwZHoL zTW^2$@jdV7`Ogi7ws7yesafrPrO^HlsZ&^B?kjtR1&SNCZ>arGF8WT)OE&&z>f~U7 zb4Qu>193^CYn>Wl?5`tIvLRh#Us?J6l(j{4FIw%f6Ghgdo8*Ix{2~2VW5n$-IDYn6?NyNOo=sMJsN8-C ztO04sS>3Xm!ziEk)86R!Th&1bvE8(N+1VxR-hpm<_fzsgW^dS?rp$XmnsRI30lT-@ zxSmRVA<(DGR+O-N8@jC`kK}{Q-mtqnWv&E$DEFba(e9Tie?<(GFbKlT;1>Tnd!?j8Gd+LASK^*UbN5SmR>h=--JIr;S5@NRe+{2KgO z_@6Mp5tDzx--DBVxbFd{;O%fb_*HlxSih%uui1UCyaRj!$7S$nnD5iL>#ghqo2lct z6MQ+mAAAGMwNv*!+|KX=9Cv}g3-1p<1s?$a0qzQ8Tf*d<(Kl}ng7vMNgW*9i-@MI? zf)9bG!iU28*3DtC-mmTse-b87W+i+C{8ji!_%XN#{7d*KcsqPF{3?75ydQmuv6MLy z?gr{$HKa<+8dq=_kkC~ec>D7ArH=?{MU#w&0m8@hGFNE^MiXUrG`5~`#iOY~)dTwMtw{A_-kNo*J<<7Zp15aUEPf#+BwsO;}hU+@DNyId?>8Bo_FfqJ&a*6_Y2*%fgixbIo_YL_!g4; zE|jhr)NowMvHJK3`0udd`OTS}%yD=6nvS*4GT)nb`z)UZ53u+_@Mw;!;W4o8A&iB+ zKXeUB_lNY`U-wAY@Y}l%O=Q=@{9PaY?c)#OH@kxW#^8ASdlJV-X8p8+SbttjWzQ}A z?8;tSok;y1ITmXPe+JCb%Gsgc=sG?IJ`?T-Pl5+nyw(n~cN{#K_%q?NVBP2Hi*5sH zXN4oUvZlS6v>(s${5Dt6Z;|jDL^}F&SaBV>C*pJzOUHBJSVtX8$Maz6I0IHKijQ?X zpJVBG0bE>1T~9Bqqd(u|u3^T0tf5T#Q7j!Vf@2+ZEFI^-1L0a&-ckHXu>5!iT*vVg zcrN@#bPT`G=!!1L5Bd(wNKg&t0V#Gn(EAV@z*eve?AdQ;zh0lDwHWLCus&ZxA67Wn zll!*`nbDkhoGvYmT7tSYm9D+%I+zhxzg81Bv2F6J61Q-T^qm){b#}(=0t5%s6@zzi$ftwbB|WTPfu>Vo!On zXYRtr`6%rCLRtgzk`3vKZ%^Dj&^0gK+e5$479HCY$L~#h-j4Q{i^5u)v68iC@fAK^ z>2ZA1Vjr)rm=}-y-e|LVoYNJ$d2;_=N}E*|X)|5t)jlnf4e4q#J!ho#o%((*-nUt- z^ZzXyCu#5y;&HqX8|MWZqjB7T9a=9-Hl)kO6|%ckyti>siFSzh|vKNExQM>PyjmS$jq|5f+#I0==?`QJ=cHIk8=SX;C}Cat;w{;iu2TS9M)L=cflUK zuVj176t0c+9SH^2L)mZ@J~+ebPvZ7RH{BbQY)E(QPaJ!Kx?h>Oc<+Ouu@A^6d$g8} z&wb^hrez`pOrKPb_3DQsZNml~N zhIFSlaVuKId%sjfeu;lG#PNIcH^Zv^y&3v_9Kto&^U+|B+8K+axAqljLSC{V-PuW8 z1JHRr7w_#ER>Gb*es9{d>;P|tbP3^F?72PI6SdF1=vMe_H{4h4I4mL(@wj4Vuk(X>pmyLSAzk>LK^WxtUCd4*=1RFO88>4ot zmOqe}Y)F@ldcS`+P&?-0-#s?!`zi{tjn`r0_F!Ywj@nybo7ouBW#c^Jwzi7*HZnEI zGcLsAF^-ShF)w~Ewd3w0HhvTvcLy7zcI<)d1|WZgblEtGxW@qhNAd3-8+Ta)>RcPb z5^U_cI(uyq*ZT8>jC%}7Hl)kOa^lvviuX2-DAA5_eB6$C@wB7X2|DlR#qXuHu=Y4m zh}XhPv3)?WJ!;?GvJrX7hIH9JfH=LkFQ4S%-~G0~bf_%%di%fl4i2_Y47Nw(S9?dS zLtZw9blKjIxJO#Wd)rSc(e814-0petQM>2GUzuA6zm@ChI}Y;}$L;>S+o);grdtUrrYWHo2dyC_CzX97nA8e1>eTQsBUa}!ww)Y@zHIPqo@$Y`ycOBtv z@9W9^`*CdlR9V~$aqC;fd)r5rX!kfiZuh+SD{}LEUi_6cZvN*| zFn7_D?0TT-%8RnUhu_LP(7A_qMt@K4-%sF^XM<0o{;(Unw;bvAF-StXd@_Kz&7dE- zbMgQ0`Xp_GBkm{5@yUJV2;PKnwvUf0F(aX-n6kNQbo zeAG|!3tM3$V)b)%O};u?*{58x%mHgeNw3#?Swv_ z+`pg1C+7#BMDs}{{%DW9WJ9`qGEaVO74Lm=YSd5SYiV(Od@U_QS-SzKoN*p5a1XvLRi5 zSweh|R`K31qhh~A*IDEExNoeWtnQR0AAB|Pfv&U0dG@9c8hTMUVW21X@2By>rr?99 zZ_GfqO5`OQ(&d9?#8(inzLAUfJ{TSQfb`He;`q34#POkTtfc&M%9me$8~H_jBbMKr zerYq z2lKDN$9eXq50=>t2(@LjU#T|T=fDzEji= z{vcci^L=Zc*JQ4T{eCq1&SM(%aL+DQljfi2NfGBm2T1iO@NSbUryk~3Px2wS3w#O8 z<;7$^tbL~rpC1J(n)nHG?Q1lw!n&C1iufy9Nr&Z3`?gg z9Un#c{XuVVxWT{sHyauM97`&Doh`2CI`XTYkHU&y0;`^-FqeUo>tS7Y;vKGxf6p<$ zp75OKY-Id1CdKXfB>7d(r(o5?d&aJwn_<~=3oLtXb1Zx0Gd*Y7+8+NrM{#@ZB){tU zJgj>7R=KN(do9kMyI|S#CD_}OUr%h0f7YV7J@=7c^?U_ZJ@>=%+XJxdc@UO8YaEC6 z(fgaN?eWhw6u0LQ@~fUlVb$|ZSoM4hR{N}jWzTouT>Iqe3HB^T#y@kA%HFf?NL&L@ zc#Qn2=W$r|{18?>KZ4blpMX`*k6|unBtL=qiI+SHAIL9U-~Wz>^)1w3quBRD)$i~7 zr`+#h4wJb4Ur>(f|0S&Ye+8@lEwJi;8s_p@@@tr%)yZ#Qcg}%xcDJrSw%^}-FK+)I zC`a{ggH``?uyPdC_n=eRd)Kl5+wJe`-v?Ix9bl#Fc~{MCWgM%1 z#jAdCFSsM@=g#AGjvz+&0Q)iLo|g3F8T2rh-bB2=&zs7wXH@PIWgzfgqO<=%SoI$a zYcA~utDj2`ji*C6=BKiYXIbjFKYSSRI*%O=`?ZzSbFzz^=NL_bKv>s41b?9udvv;4U{ z^wrtO`1^sy>!~8Y`sz4XZ8aWNUp*aGJriJ!l`~-N$xwK13Vm`mGX9=i@p`6^U-p~> z%buyQ?BO|SSI=}<_M8Xj?9n%d!~Byw2m1S8#p{_xe%Uh{mOVAF?70Y*J#%2$QwQhl z$<-6vR_GnDEw#VNeDqhc(&Y*BJ_f6Omcg>;23Ib>6=C)1DvEK{ZISH^#;Ml{BwrCA5whI{5Q&xojfb=?7Rb(ou7p@XMPS={VQP2 zS$D#kGrs`m+Oc*0vHkvDMREJ@rX1OS4=nq?49k9=9iV*H2C(YCAC~>AVcGwnOAq$z zTph1-^6jr%t=|*H?f*LE$o_A@YUf8_+5adk`@adR{%^sue;q9QzXRv&Z(Vi;n;`+ow<{wG~}uwVYqtyg?M$gLUt_3`5N|AKO4 z|1V+L|0`JbZ-Hh1)3ECQH7xso1G_Z?oU^}m{lR{nv;4K|+@7TIIqMIUBm1|(vi~_) z_W#k9&wd)P?0z1W-G73)e3$$gPQyE3ejX(+!nyG-ee&0&nwJCgJ4br?>%^(-^~6}O zzfqq2@;|Wr!n-5RFR#M#%im$GVg3P2uiY@0y^`19UhqHResFR?p`VKD75mFy!!7Qw zGRl*`_J!rIj7?@oQ4m8d?tUDKj6oa z)(Q%-zYeE7`RfQ+{yGv?Kk5O?Uq`|6*U_-_ItG@%(y;v16PCY@g>(I?v|hnqnqU33 z%-p`T@%-AK^5n1MVfkwStlz6z3rW9$9CKUM#cM69^kd-@VE?;w!0WEb{Pn`(YqAq5 zM}Db<<(HFSt;tS?bsh<8vXLBXO{RFQ$;9&Wsqg@J6ztciI%mc@63L+j{R~5$MTEf;2z$Ti+#Bmu+Apt}Ug6qT++XHUp888IEWgZ!W4~O?vHYTV z`9&;r`4U zxwng+dGAc#>l9~CKox3%`M#`o5npW~y#;y6hV(tLsUvxsz-aPSSh;VfO;>Ax64a(4 zyxI2m`CGRW`>Q2Y)FYc7cpGgB-y3Vvq(_+M$^FYZq3lTdJgT(%4zK!>CMxakpgciN z?Irink*qJ}?++8&C6})6cKPSc_1+-woF{4W_qBQ@uli&8dXC>p-wgZj^wS_BRC;p% za!x2)5Zi3u0&({M&}}D>e2`K6y~Mo)G@oA{>8%1;o0%UtM{vA1^wv9h3MYAT|Mo@i zdxG9m>n7S~r8r0PYy|R;0m%oM&<;!iS^Yvg%tm%S7=-*okv(dMSblHWvql$p2wMMz za2)n*4fb46x3KZtnubNzPxP+h)#Q+aY{=rMgTdYfpk) zK&P^foDbZX89T3T&Lt>bUpuL8!No1}5R;y3(J@V4joKF@J2UZ@(E`U#3i*ll*xsl|BDy zeSQ;A;9YvR4m$_tJmuES^uda(|KNr^edM?a96dBFe>}j1@3ZDyi zVWv6W^>Xdo&^I}R{X`B=<|oJ5FTyT~_8Rp23(>z|NqBiZcd)>L+0)>JYZDBMC>((P6__Qh=+s~;&| zZ6szcPd)?Z*Zclfb&f>N&xa{=^nuf=-n(_-vy`EJ@j00JJXzt&JObI=UO8F|`uQrA zo%5KllHINZ*39IY!QZRk4;o(t-_5b+XK^EZ58MRb3pc~}!7cFp@a6Do_)3^PnKDyj=SKR1EHU7e}yc_W@zG)~kfUrzb)!G3y~u^hhw zp8+d<68txgFSO(NmaaCI+$Sv_qTlJh%wWb+PaV=0109#sa=q-lBE2;8cwgu$v=8F$ zfTavAeLPyzNAwRtc7*U5Z1y%0Gr94yy0hvQs~>6|p}gv&IlHy?NxQP}mt*@4nEl?b zZ?`w^bNNgC_PzGsJME7vUB43-j@Pcl&0wrGfn`ANIW#WRy8Lz8kIvOTRatcZ&kd@G zz_8DTVe~OQ6YKis8`@(uzmBlxth7#UOHWtNaOyaa!RM0PzLw3C>RVbG>c%aot*=?| zrfdrJg=-9&>q0n@`nreu+_x6rdVOJ>&elnYpt&T3O6p68`cAKF8FNJozgGM>)iogP zizfLXqw%|yc#Yw3{ioIn(>?7FDk%5GH`O-z-$D#^?A`XyuOqa_+t>cZ>wEj!Kfk`W zqy78QFSK?$!TL`49mu)C=5K#}MDwk%XJfzke#7kX=tA6YSr?X_TB6_bTOrwI{Wi#` z-`-B#R?~a(JD~TbB6^>M-ZM++&0dv>_GglvK}LE{A?|h{e_!$r=)FvXn;<WXp-JHyaRfV;`)R_tT$`(vfE4Oy&T;-+jW;9BfWJEsUz{y z`^)cu-n)wEeF}Piy@cLX$UkO!2N~(DYe?&X^nUyu(0dKnSrn)$8%{;<%_a2Sjc!+y zNAf{NdY2Qo7)b9wSl+jDKAC4Hc`XbteVq?*??+VR{D{>AjM;?WXrJ?||N0is(HWy$6-hyEpQyfb0x1 z(t8GRD}nrd$~&Om>{f5)SD=d}IaDfp(!I&>RJ9?1t8>HQM%+H>h} z;*YevZ|6MNuL~6sVt=2G-WBQMdh5G&JAvebjP$;jxR(Igk}AvlcIv&=^w#~U5GJ5^ zZMwML1CU=0Bp+m?_iWQ1T~r-zA9`tclnQcE7m z2N}h8CywWAoxi_mdEZXGwO5lutoIq{{rz;--_qMngwl^^MfKd5lMgbA-$Zni$ z%<{gSdUxzfMTA)IGtv9ybe`UBB9wkSljNRhk$jL*y!O1>WO}#j>GQrFdh1%Du7UgC z`>6zXxv&ra1{=6fpJB<7urFbyxU^e0rrdf(vK@eIQMe5Gj__ibrbw=axg?!j1NVThg>`>H-*h_=UHtRV zxp&a~@7LmGFCnkW=KHg*?2p4L`xCIrUJkcaw*QS;yzHCFtFmu}r8mDnUDu_6o z``=T=%U(xbmHi!9Wq%)5**}0)_G55cW&7Ve#moLNc~$mCSY>a5RrXV`%KjPLR@we{ zN%69`kXL2@8dll=39Ibi!76(z+*aBCw?px=|43eyy&YEBJ7AUl0<5xMgxf0HukVYO z%`+>m?7zV(`|q&I{s*kGcf)O!J;|-1ihsASU3*`4d$=oQajn9Y*$M8&G2aHUvQKAB zR@k`Ajd{OLE?#z5^2#R%!7BSuSo$6Yt8Dh=ZnJE^mMvcP(d1RxX;@|VhE;YSSY`Kx zy-$kk?bn;d%jS6-SN0%SWe_E1=5SHQmP36W3cX6M1qX`N$o_g&+8@Fem|?~$FFYYfuGxpNanCvt|3W zRm!ci5YL;x&n2(Qo&oE^=1f@Yt_$HlFyGp?vh`g~>8*Fn&dQeU*FVMet|hO^=KC^E z?+?M!`x03GZh+hJw_l?aFT0t%Dti$upIiZ}>?>iFeHGkR*?t{SyzGyVS7m<`R@one zRW{cRUD%eBP1GMLceh*LqCV^UTHMkY52HKRzc0iu@Eb`yorR6~VHQE+4oqlb*3*u8 zPs8yd^jCa;t}%%pM@R8p{3GUjOpc#tfu!SWOzt@bosOTi@>4XBj&G#%ieEX{bG_+# zj_K9k^r}Hfa`mRiFsrxD%72x1Qu@CLM|3*jucNp|&_bPy%ny^z58n&rn;-sa@i_C>ZKm%y+D7Rk%>NyXpR#)H zG_E%uX8cq;pYLJw>twV07ff0zug3gXZ+iXz+Wt>kKj?4%=Us5;pGU19+-O{5JS@bU ze`}2YYVG*A@i1eag>vQHW#!(2aI!DaI2`?^CSYqinn^ z4gJ!NUo-vAF?*NVyzv_2Pkwp8?0c019S=1Bb+B@dGPygfy$-SQQfK4k5F0OdSw7Ai zt{i=|Qso_GdUi3t-)H&{GrLc*@-H=i9cA?{wQ)Dh^t#jZKE?E?vG$tCysmmWm_F03 zo{6SU%G&cbn+HB^$A{Z|agOP8l$Af-^jT{DKhXTU$l{+ee~vSKA2mHMwSGOq{5;*t zd)D-Q$oM11olNd2lUr(bEH(WfxB8wiy(gQ#51C$1nqTiWeGU)$SiAQ$y`DBdO*a1= zW&DD*V4MQbC}t6l;yuO z*k}EQclv#QGHD1N*~j|N`KIS{VO$6MjQQQ}^7k~qJa2kEY4tv9>A$dgpEo^j zGm{Ls_-@o1}Ww9O~sdGt?PJB=`Y*7U!@c(C!)){Y-B?r;2*`SS|np2km@o|hUQ zZu~uK58h96e&D@N$IqD`o-_N0**x`av%6DhH;aGG`R57Cf1mm9Mw6dx`EM|}2dw-R@SAf#eui?~kv8i( zDoLj^{7#||WYX!RLkFVC0KNI>`%E=)x#t*7%Tz0f4u_S3-qm_ z^P3QPhsKrLtjSA%8XRZK}XJ4 z-9Q@XK3OHG0#m?DFb}YQnl3~n%fann6<|*;?VFWs1_vd5I9s4I*eCH1kRF=!kK)RQ zmlFop=49s;k@ayVTc>-xzTAyYRu7Gyepb!=I^uoVKHlW#=E|;M-0hQ$$&>YQUUmo* zLf=T|j)}@XZ()5)-K6>jb(2_mGQnb~d>@`Tq8CW+!@v@;7J8ud16{v#6nk<50d& zvpnb){Jt35I&f2RTFb&beSEyh(@yWT|C?|BuCzn3uo2&fYeU7--;4X-;ejn~{?Pn0 zweI5j#sw3ra^upc*_^>R3uC#8wSb>uOriFsHlLDq+4HHYBHe6BAv>#Jw0hzP_%ZwmHh<)2xo6xjGW9 z6Oyrw3off$*izk?owt0v$yem$=arE6@g_ekC%=JnSjS{q4KLR;*1C6${k-erO@4UJ z27SAsqaG5}IbvG}y% z&ognsg1UvOP43Fp<ipiDyMV@-mi}QiE@6X`8sdS%c-PoNYec@-dD= zof*bwUcMp9H)Ps`DY?8}#^)W*xH{hST{6B@-dWR{8h9I~t~To@FKcBm-a`E=&s7;? zYZ~S(YQVjtTR1mgv?#o5;`^!eg$O zRMRr4aY4>TpJsU&dm&HyeB~K;>7ts3v5k!jX{}rypJsU&e<9C$mxn2&mZylu)U)!* zwrJn@ZYR*Z8<@z|2rH=&JM~cY$IFqGs1pn(daLTQ5 z-2^ys!Q4i6VW^67ucJ=9^kKhrVc2b+$gAZuz2q zQp>r^*EfMaS+}q-pHH`ZQ9t2Xle~Q67S}hoU}0z*pKkf+Cqd6qG@7r^>lq9T`Fy(N zqy59US>y6et7{p{5S>zUaXhAdn&pY+=H(q!mu6XSTkL=G8$nRioEhg{dO`h=(hp7kk2BfGC%Rr+Sgw!rvM1t` zP_E7^@3RjvhjM+K$wuc_p2uxfu8%X>==?ebLki3FaV8u2LDy{y_4RQk%Ulrj)pgmz za($f1G6w`%U3)Do*TKF(wr_d!n%>!e=sKW2Onp$(Ku!Q z;#TGQIFpU~?{dyBUf;^B4nEFgqyF2(d8JTaALnH&qyDRJ+7_1U<4iW{zxp<8VYxoe zWTXD8Z>$!U>*Gu|>c85oqp(~bXR=ZM)&7cw<@z|2jry;?g;`jxk2Be*|L){mR9LQ$ zGuf#B>RXG2<@z|2jry;?O;}j2k2Be*|LR+Qh2{DsQ>EQZ-wRh zIFpU~ufB;^SgwyV*{J_k@+^K~xjxQhqy9UR=YtE&^>HQ}_224r>vDaZmmLxHUwx0M zuv{N!vQhtS>eaejA7`>r|7|(8b-6yyWTXD8b58q$bEuE=vO^*rwiJ=|aV8t-u$uEw zVYxoeWYHn4Su&i5+PibJUq}`H9`WgxkMR`Fxht#e7fahtc83tIA67u&!=0y zXnm-*Y8P#s6YBBtUVa2Ng=;kHoO~M_7DYCCSt}zN>neNSB5SmLZH+cGn)9?CE0pzd zzTBa-Pq_A@`(69`HCp~=CXr5F#`0oU$UBn$wy(QSHL+w~FJpOWv(PWpFZYdJiVi;X z@g`4O1$o`mE++5eO+IR)9`w^<@;=_=YjWjpE+OyZO`bV2=(C&#DOSFZH~Bd^`6~Ko zF?kN4mL%)Xh@g~pQ73B4vv&q{#e_r0ln>_PZke|fb&E)M}J1_6!O+K2p zbnjd8;bq^@-+a8uNAs56r*-lL_bGk6$uky$K6;O}n7ofS`KbTvzIZWtA8+ze|JQq) zk`FI)2K{}!$w&QP?@I=GIW)-oc$1I%zur>}@^Wa9_wgoA|M%el_iVrZ)_2w!%E?X7 z4LR7Saj$>O_-XTM7B&rXw+}U)~xd6#9I}J|BEShK8p~-PSJdC#-mM~{kbmf^0;$KoG3x~poyT4ytZ&9yf z*Z!^Af7f5mDcMGEto;ve)&5-{)Dz!6WZT2~)?07?_qA&ON0y9lqmAB3`ybS*{U^-* zKxdW_{BB8S`lCW6rKUyI0G7 zzZ1)c46CRbF~()&pSJ7hoMgCXqA;b&*RlTC;n_NBFIhaNZqU?5Zg&luHm_;O)D}^7 zqul})3PnOv9V|M4XSqcE60x;J$%@h;hY9s zXuIA6lFq7(a68bS8}7`Fn?0>}(L!#QHgnRO)54Pj$%$hs$Csa2HB`mEj@<_)%X>Sq zq~k%p{+DV;x8>)m`irxzN?pxKW##C~;lnFj*BtoGL4P%Kc%!>@P@3W|Y@Ot6|E{GM zCM#c0{wbC3TGDLF&daKNOZlg7UaUV*+Wq{~r$pK&(gu}C`zL9o>g&J+UMj6KX{$?= zsb@T|l2QdhQM@mj{C7dT4wcrIbJW5T`EFH7OCQJUgHP}=>ZWhc^*04wclq_Mnh6_oaE()`LJKUryiCC$%Jt;mP}`%N}<`CXd}N~`E zy{DB((;nMlo-8a=`(K|_BHvch`jtr2zR`3i7YfVNyJ|O=Nc%Er!Dn{*bds|DYoy^C z7Yft#{w0r}6is`Pv@jPG=6i*-hb%H4qN?v6uKUfjhAT{K$F;l3R$pP-*=?k)AZ==i zeA;J(Vder;Mm9(n?FWmhE)=F|FOXngVVd^-2xFx%ElnE#7cEo!bCgQc{u-syv_D3v zH0^IuDoy)SluFb75~b3#KSZfC?e9=3P5U#HO4I%dVJ;~2nf6C0m8Sg-N~LLkf>LRn z)46d}SYHKcrSjF17S4@@`EG6_-}l={d%2CYUOjXDEcCa8p#IsPw9wBA(+0PZud()KUy1OcFyC_0&MlGld(sXok@hNSLrbI$xYvJ2NXdouoljag2Nb5=Ls~eG6{dZa zv{y^icmI95e&j<(W0BnWJ<`HDq*FoKZ%LbAafNApzM}gpKE!Jym03<2OCJ{s(?*kK z&7QZWQod@^IQ8b zrRjUmrPB0`=2B_;u5##~g*ND$$EEzK?-7^ESJy^9eaE*{K7C`iRDJsXZC~?$p`Q8% zZT}K!`VMTVeEJq^seJk#DyI(@3hUFiN(Yum)AvG4<dr56hbMmH( z(cGEl_rUS^LcfWE-RE*l*GOg<5W#ZxodG(fYW>w2bOD<0HFuvd|D>4Q-t z)569N)y-*Xo;howu9r2>;`+_3nazz2yhCBexP(E?Tu58kGPCxgxy|lA0LGlqyl~D5 zbM>~tTPZOveh{Tfd-X;&I$zguL1zM4q96;EF1Z#Ui+X|hY{udLvhWi2bO)jR$J)ub zu>D)`SU==C)A;P4mu!5}zqhQ*oO<3`?}BdNp4B6CigIK-a+82>i@W;=Gnus1XH=KG zy$w7E{s{gHYzNPSKY>4k9pDA}Tq;YALF8zaP0B<=*mEYienxbE@WSonK^* z)#g7HOK_Ac;90z2(=DXv;`@sO9d1Vkd0pJFA zePal$wN(We28ILN;>OkpSl1R#1|z{K;8buL7zIXyF<>mH0^`7Va5|U(CW14-nP3u_ z49)^)gDKz~!1CK&_o#-agLA=oK;!s)Z~^!LmgM?_dph2z(WM4XgzZgRg^cfJeZi;G5uE zU>*22_zw6kSP#Ajz7Ku?9s`eqAA%o&4d4mzWAGEO5j+Y01N;`~N~Xf;u&qyx#oZ51BVR_iLii`Qs(Z z_-{}Ko&$db{{^;#=fR)ApTQ3B0(cSp1-uM8gZ)8!&;h&;900n41HnPyV9*U50uBX- zf$rdNAUlr)J-|`mXmAWjgPx!lI2QBXWlz&J1-oDL>{iQo)yCQw^V24{h@!4z-~ zm?;@BuIrTnIi0W`WtD23!Q@fLc%o=7NjCJWvll1TFy$U_Mv? z8bK4d6f6YIpam=fmx0T{VsHhx5?lqY2G@XV!G}Qxd<0wvJ_?qArQmw-F|Z8W06q>r z0hWUs!6(6|z)j%O;AU_OxE0(6J_G&@+z##lp9P--E5M!L^WY0$CAbTG5qt@(0(XOZ zz?Z?j;6Csba6ecL9sm!5e+O&8L*T36YhW#S7XeU0_(uH!FRxS!FupL z@O|(D@ECX;{1E&IYyeMyAA_HOjo?Y}AK<586L<>z4E!8y2EPQq0KWoTz|-K@;5XnI z@LTYo;CEmvcozH~`~hqOoxpzJz3{)^13NMC74WzJ{ieQW;d>r<&jasy;5`q#=YjV; HU>^8C_fPI@ literal 0 HcmV?d00001 diff --git a/SOLVER/dkxce.Route.Shp2Rt/obj/dkxce.Route.Shp2Rt.csproj.FileList.txt b/SOLVER/dkxce.Route.Shp2Rt/obj/dkxce.Route.Shp2Rt.csproj.FileList.txt new file mode 100644 index 0000000..7551157 --- /dev/null +++ b/SOLVER/dkxce.Route.Shp2Rt/obj/dkxce.Route.Shp2Rt.csproj.FileList.txt @@ -0,0 +1,7 @@ +bin\Debug\dkxce.Route.Shp2Rt.dll +bin\Debug\dkxce.Route.Shp2Rt.pdb +obj\Debug\ResolveAssemblyReference.cache +obj\Debug\dkxce.Route.Shp2Rt.dll +obj\Debug\dkxce.Route.Shp2Rt.pdb +bin\Debug\dkxce.Route.Classes.dll +bin\Debug\dkxce.Route.Classes.pdb diff --git a/SOLVER/dkxce.Route.Shp2Rt/obj/dkxce.Route.Shp2Rt.csproj.FileListAbsolute.txt b/SOLVER/dkxce.Route.Shp2Rt/obj/dkxce.Route.Shp2Rt.csproj.FileListAbsolute.txt new file mode 100644 index 0000000..460867b --- /dev/null +++ b/SOLVER/dkxce.Route.Shp2Rt/obj/dkxce.Route.Shp2Rt.csproj.FileListAbsolute.txt @@ -0,0 +1,38 @@ +D:\Projects\projects.c# III\_GRAPH_SOLUTION\dkxce.Route.Shp2Rt\bin\Debug\dkxce.Route.Shp2Rt.dll +D:\Projects\projects.c# III\_GRAPH_SOLUTION\dkxce.Route.Shp2Rt\bin\Debug\dkxce.Route.Shp2Rt.pdb +D:\Projects\projects.c# III\_GRAPH_SOLUTION\dkxce.Route.Shp2Rt\bin\Debug\dkxce.Route.Classes.dll +D:\Projects\projects.c# III\_GRAPH_SOLUTION\dkxce.Route.Shp2Rt\bin\Debug\dkxce.Route.Classes.pdb +D:\Projects\projects.c# III\_GRAPH_SOLUTION\dkxce.Route.Shp2Rt\obj\Debug\ResolveAssemblyReference.cache +D:\Projects\projects.c# III\_GRAPH_SOLUTION\dkxce.Route.Shp2Rt\obj\Debug\dkxce.Route.Shp2Rt.dll +D:\Projects\projects.c# III\_GRAPH_SOLUTION\dkxce.Route.Shp2Rt\obj\Debug\dkxce.Route.Shp2Rt.pdb +D:\Projects\projects.cs.III\_GRAPH_SOLUTION\dkxce.Route.Shp2Rt\bin\Debug\dkxce.Route.Shp2Rt.dll +D:\Projects\projects.cs.III\_GRAPH_SOLUTION\dkxce.Route.Shp2Rt\bin\Debug\dkxce.Route.Shp2Rt.pdb +D:\Projects\projects.cs.III\_GRAPH_SOLUTION\dkxce.Route.Shp2Rt\bin\Debug\dkxce.Route.Classes.dll +D:\Projects\projects.cs.III\_GRAPH_SOLUTION\dkxce.Route.Shp2Rt\bin\Debug\dkxce.Route.Classes.pdb +D:\Projects\projects.cs.III\_GRAPH_SOLUTION\dkxce.Route.Shp2Rt\obj\Debug\ResolveAssemblyReference.cache +D:\Projects\projects.cs.III\_GRAPH_SOLUTION\dkxce.Route.Shp2Rt\obj\Debug\dkxce.Route.Shp2Rt.dll +D:\Projects\projects.cs.III\_GRAPH_SOLUTION\dkxce.Route.Shp2Rt\obj\Debug\dkxce.Route.Shp2Rt.pdb +C:\PROJECTS\CSharp_Navicom\ADDR_SEARCH\_GRAPH_SOLUTION\dkxce.Route.Shp2Rt\bin\Debug\dkxce.Route.Shp2Rt.dll +C:\PROJECTS\CSharp_Navicom\ADDR_SEARCH\_GRAPH_SOLUTION\dkxce.Route.Shp2Rt\bin\Debug\dkxce.Route.Shp2Rt.pdb +C:\PROJECTS\CSharp_Navicom\ADDR_SEARCH\_GRAPH_SOLUTION\dkxce.Route.Shp2Rt\bin\Debug\dkxce.Route.Classes.dll +C:\PROJECTS\CSharp_Navicom\ADDR_SEARCH\_GRAPH_SOLUTION\dkxce.Route.Shp2Rt\bin\Debug\dkxce.Route.Classes.pdb +C:\PROJECTS\CSharp_Navicom\ADDR_SEARCH\_GRAPH_SOLUTION\dkxce.Route.Shp2Rt\obj\Debug\ResolveAssemblyReference.cache +C:\PROJECTS\CSharp_Navicom\ADDR_SEARCH\_GRAPH_SOLUTION\dkxce.Route.Shp2Rt\obj\Debug\dkxce.Route.Shp2Rt.dll +C:\PROJECTS\CSharp_Navicom\ADDR_SEARCH\_GRAPH_SOLUTION\dkxce.Route.Shp2Rt\obj\Debug\dkxce.Route.Shp2Rt.pdb +M:\NAVICOM_PROJECTS\_ROUTES_GIT_\SOLVER\READY\MapCreator\dkxce.Route.Shp2Rt.dll +M:\NAVICOM_PROJECTS\_ROUTES_GIT_\SOLVER\READY\MapCreator\dkxce.Route.Shp2Rt.pdb +M:\NAVICOM_PROJECTS\_ROUTES_GIT_\SOLVER\dkxce.Route.Shp2Rt\obj\Debug\ResolveAssemblyReference.cache +M:\NAVICOM_PROJECTS\_ROUTES_GIT_\SOLVER\dkxce.Route.Shp2Rt\obj\Debug\dkxce.Route.Shp2Rt.dll +M:\NAVICOM_PROJECTS\_ROUTES_GIT_\SOLVER\dkxce.Route.Shp2Rt\obj\Debug\dkxce.Route.Shp2Rt.pdb +M:\NAVICOM_PROJECTS\_ROUTES_GIT_\READY\MapCreator\dkxce.Route.Shp2Rt.dll +M:\NAVICOM_PROJECTS\_ROUTES_GIT_\READY\MapCreator\dkxce.Route.Shp2Rt.pdb +M:\NAVICOM_PROJECTS\_ROUTES_GIT_\READY\MAIN_DLLs\dkxce.Route.Shp2Rt.dll +M:\NAVICOM_PROJECTS\_ROUTES_GIT_\READY\MAIN_DLLs\dkxce.Route.Shp2Rt.pdb +M:\NAVICOM_PROJECTS\_ROUTES_GIT_\SOLVER\dkxce.Route.Shp2Rt\obj\Release\ResolveAssemblyReference.cache +M:\NAVICOM_PROJECTS\_ROUTES_GIT_\SOLVER\dkxce.Route.Shp2Rt\obj\Release\dkxce.Route.Shp2Rt.dll +M:\NAVICOM_PROJECTS\_ROUTES_GIT_\SOLVER\dkxce.Route.Shp2Rt\obj\Release\dkxce.Route.Shp2Rt.pdb +M:\NAVICOM_PROJECTS\_ROUTES_PSOURCE_\READY\MAIN_DLLs\dkxce.Route.Shp2Rt.dll +M:\NAVICOM_PROJECTS\_ROUTES_PSOURCE_\READY\MAIN_DLLs\dkxce.Route.Shp2Rt.pdb +M:\NAVICOM_PROJECTS\_ROUTES_PSOURCE_\SOLVER\dkxce.Route.Shp2Rt\obj\Debug\ResolveAssemblyReference.cache +M:\NAVICOM_PROJECTS\_ROUTES_PSOURCE_\SOLVER\dkxce.Route.Shp2Rt\obj\Debug\dkxce.Route.Shp2Rt.dll +M:\NAVICOM_PROJECTS\_ROUTES_PSOURCE_\SOLVER\dkxce.Route.Shp2Rt\obj\Debug\dkxce.Route.Shp2Rt.pdb diff --git a/SOLVER/dkxce.Route.WayList/Properties/AssemblyInfo.cs b/SOLVER/dkxce.Route.WayList/Properties/AssemblyInfo.cs new file mode 100644 index 0000000..16fef05 --- /dev/null +++ b/SOLVER/dkxce.Route.WayList/Properties/AssemblyInfo.cs @@ -0,0 +1,35 @@ +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +[assembly: AssemblyTitle("dkxce.Route.WayList")] +[assembly: AssemblyDescription("Модуль ÑÐ¾Ð·Ð´Ð°Ð½Ð¸Ñ Ð¼Ð°Ñ€ÑˆÑ€ÑƒÑ‚Ð½Ð¾Ð³Ð¾ лиÑта по графу")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("Milok Zbrozek ")] +[assembly: AssemblyProduct("dkxce.Route.WayList")] +[assembly: AssemblyCopyright("Copyright © Milok Zbrozek 2021")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// Setting ComVisible to false makes the types in this assembly not visible +// to COM components. If you need to access a type in this assembly from +// COM, set the ComVisible attribute to true on that type. +[assembly: ComVisible(false)] + +// The following GUID is for the ID of the typelib if this project is exposed to COM +[assembly: Guid("2849e9f7-c2d5-4fd9-b81a-9f8d467e38f4")] + +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +// You can specify all the values or you can default the Revision and Build Numbers +// by using the '*' as shown below: +[assembly: AssemblyVersion("21.12.21.3")] +[assembly: AssemblyFileVersion("21.12.21.3")] diff --git a/SOLVER/dkxce.Route.WayList/Route.WayList.cs b/SOLVER/dkxce.Route.WayList/Route.WayList.cs new file mode 100644 index 0000000..9c450d5 --- /dev/null +++ b/SOLVER/dkxce.Route.WayList/Route.WayList.cs @@ -0,0 +1,497 @@ +/* + * C# Class by Milok Zbrozek + * Ìîäóëü ñîçäàíèÿ ìàðøðóòíîãî ëèñòà ïî ãðàôó + * Author: Milok Zbrozek + * Âåðñèÿ: 13305C7 + */ + +using System; +using System.Collections.Generic; +using System.IO; +using System.Text; +using System.Xml; +using System.Xml.Serialization; + +using dkxce.Route.GSolver; +using dkxce.Route.Classes; + +namespace dkxce.Route.WayList +{ + [Serializable] + public class TextDescriptions + { + public string S_FILEHEADER = "*** Ìàðøðóòíûé ëèñò ***"; + public string S_BEGIN = "Íà÷àëî ìàðøðóòà"; + public string S_END = "Êîíåö ìàðøðóòà"; + public string S_ROAD = "Âûåçä íà äîðîãó"; + public string S_ROAD_TO = "Âûåçä íà {0}"; + public string S_ROAD_TM = "Âûåçä íà äîðîãó ÷åðåç {0} ì"; + public string S_ROAD_FM = "Äâèãàéòåñü {0} ì äî ïóíêòà íàçíà÷åíèÿ"; + public string S_FROAD = "Ñúåçä ñ äîðîãè"; + public string S_FROAD_T = "Âûåçä íà äîðîãó ñ ïóíêòîì íàçíà÷åíèÿ"; + public string S_FROAD_TO = "Âûåçä íà äîðîãó ({0}) ñ ïóíêòîì íàçíà÷åíèÿ"; + + public string S_NCROSS = "Ïåðåñå÷åíèå {0} è {1}"; + public string S_NTRANS = "Ïåðåõîä {0} â {1}"; + + public string S_TURN_T_ROUNDABOUT = "Âûåçä íà êðóãîâîå äâèæåíèå"; + public string S_TURN_TO_ROUNDABOUT = "Âûåçä íà êðóãîâîå äâèæåíèå íà {0}"; + + public string S_TURN_F_ROUNDABOUT = "Ñúåçä ñ êðóãîâîãî äâèæåíèÿ"; + public string S_TURN_FROM_ROUNDABOUT = "Ñúåçä ñ êðóãîâîãî äâèæåíèÿ íà {0}"; + + public string S_M_ROUNDABOUT = "Äâèãàéòåñü ïî êðóãó"; + public string S_MOVE_ROUNDABOUT = "Äâèãàéòåñü ïî êðóãó, {0}"; + + public string S_TURN_T = "Ïîâåðíèòå {0}"; + public string S_TURN_TO = "Ïîâåðíèòå {0} íà {1}"; + public string S_UTURN = "Âûïîëíèòå ðàçâîðîò"; + public string S_MOVE_TOWARD = "Ñëåäóéòå äàëåå {0}"; + + public string S_MOVE_KM = "Äâèãàéòåñü {1} êì {0}"; + public string S_MOVEON = "ïî"; + + public string S_W_ROUNDABOUT = "ïî êðóãó"; + public string S_W_LEFT = "íàëåâî"; + public string S_W_RIGHT = "íàïðàâî"; + + public string S_NONAME = "Äîðîã[E] áåç íàçâàíèÿ"; + } + + ///

+ /// Êëàññ ñîçäàíèÿ îïèñàíèÿ ê ìàðøðóòó + /// + public class RouteDescription + { + private RMGraph rs; + private TextDescriptions td; + + public TextDescriptions Templates { get { return td; } set { td = value; } } + + /// + /// Ñîçäàåì îïèñàíèå ê ìàðøðóòó + /// + /// + public RouteDescription(RMGraph GraphSolver) + { + td = new TextDescriptions(); + string wlt = XMLSaved.GetCurrentDir() + @"\WayListTemplates.xml"; + // XMLSaved.Save(wlt,td); + if (File.Exists(wlt)) td = XMLSaved.Load(wlt); + rs = GraphSolver; + } + + /// + /// Ñîçäàíèå îïèñàíèÿ ìàðøðóòà + /// + /// Ìàðøðóò + /// Êëþ÷åâûå òî÷êè ñ îïèñàíèåì + public RDPoint[] GetDescription(RouteResult Route) + { + return GetDescription(Route,null,null); + } + + /// + /// Ñîçäàíèå îïèñàíèÿ ìàðøðóòà + /// + /// Ìàðøðóò + /// Êëþ÷åâûå òî÷êè ñ îïèñàíèåì + public RDPoint[] GetDescription(PointFL[] Points) + { + RouteResult rr = new RouteResult(); + rr.vector = Points; + rr.cost = rs.GetRouteCost(Points[0].node, Points[Points.Length - 1].node); + rr.time = rs.GetRouteTime(Points[0].node, Points[Points.Length - 1].node); + rr.length = rs.GetRouteDistance(Points[0].node, Points[Points.Length - 1].node); + return GetDescription(rr); + } + + public string[] GetRoadName(uint[] lines) + { + // Lines Names + LinesNamesFileReader lnms = new LinesNamesFileReader(rs.FileName.Remove(rs.FileName.LastIndexOf(".")) + ".lines.txt"); + string[] res = new string[lines.Length]; + if (res.Length > 0) + for (int i = 0; i < res.Length; i++) + if ((lines[i] != 0) && (lines[i] != uint.MaxValue)) + try + { + res[i] = lnms[lines[i]]; + } + catch { }; + lnms.Close(); + return res; + } + + /// + /// Ñîçäàíèå îïèñàíèÿ ìàðøðóòà + /// + /// Ìàðøðóò + /// Êëþ÷åâûå òî÷êè ñ îïèñàíèåì + public RDPoint[] GetDescription(RouteResult Route, FindStartStopResult beforeRoute, FindStartStopResult afterRoute) + { + if ((Route.vector == null) || (Route.vector.Length == 0)) return new RDPoint[0]; + + List rdps = new List(); + RDPoint rdp; + + // Lines Names + LinesNamesFileReader lnms = new LinesNamesFileReader(rs.FileName.Remove(rs.FileName.LastIndexOf(".")) + ".lines.txt"); + + float dop_dist = 0; + float dop_time = 0; + + // LAST + string last_line = ""; + double last_dist = 0; + bool last_rnda = false; + + //CURRENT + float curr_angle = 0; + string curr_line = ""; + double curr_dist = 0; + bool curr_rnda = false; + double curr_time = 0; + + if ((beforeRoute != null) && (beforeRoute.distToN > 1)) + { + curr_line = lnms[beforeRoute.line]; + + rdp = new RDPoint(); + rdp.Lat = beforeRoute.normal[0].Lat; + rdp.Lon = beforeRoute.normal[0].Lon; + rdp.dist = 0; + rdp.time = 0; + rdp.name = td.S_BEGIN; + rdp.instructions = + beforeRoute.distToLine == 0 ? new string[] { td.S_BEGIN } : new string[] { String.Format(td.S_ROAD_TM, beforeRoute.distToLine.ToString("0")) }; + rdps.Add(rdp); + + if (beforeRoute.distToLine > 1) + { + rdp = new RDPoint(); + rdp.Lat = beforeRoute.normal[1].Lat; + rdp.Lon = beforeRoute.normal[1].Lon; + rdp.dist = beforeRoute.distToLine; + rdp.time = beforeRoute.distToLine / 700; + rdp.name = curr_line == "" ? td.S_ROAD : String.Format(td.S_ROAD_TO, curr_line); + rdp.instructions = new string[0]; + if ((beforeRoute.normal.Length > 2) && (beforeRoute.distToLine > 2)) + { + curr_angle = RMGraph.GetLinesTurnAngle(beforeRoute.normal[0], beforeRoute.normal[1], beforeRoute.normal[2]); + rdp.instructions = new string[] { String.Format(curr_line == "" ? td.S_TURN_T : td.S_TURN_TO, curr_angle < 0 ? td.S_W_LEFT : td.S_W_RIGHT, curr_line) }; + } + else + rdp.instructions = new string[] { String.Format(td.S_MOVE_KM, (curr_line == "") ? "" : td.S_MOVEON + " " + curr_line, ((beforeRoute.distToN - beforeRoute.distToLine) / 1000).ToString("0.00").Replace(",", ".")) }; + rdps.Add(rdp); + + last_dist = rdp.dist; + }; + + dop_dist = beforeRoute.distToN; + dop_time = beforeRoute.distToN / 700; + last_line = curr_line; + } + else + { + curr_line = lnms[Route.vector[0].line]; + + rdp = new RDPoint(); + rdp.Lat = Route.vector[0].Lat; + rdp.Lon = Route.vector[0].Lon; + rdp.dist = 0; + rdp.time = 0; + rdp.name = td.S_BEGIN; + rdp.instructions = new string[] { td.S_BEGIN }; + rdps.Add(rdp); + + last_line = curr_line; + }; + + for (int i = 0; i < Route.vector.Length; i++) // óãîë ïîâîðîòà îòíîñèòåëüíî òåêóùåé ëèíèè â ñëåäóþùóþ + if (Route.vector[i].node > 0) + { + // CURRENT + curr_angle = ((i > 0) && (i < (Route.vector.Length - 1))) ? RMGraph.GetLinesTurnAngle(Route.vector[i - 1], Route.vector[i], Route.vector[i + 1]) : 0; + if ((i == 0) && (beforeRoute != null)) + { + if (beforeRoute.normal.Length > 1) + curr_angle = RMGraph.GetLinesTurnAngle(beforeRoute.normal[beforeRoute.normal.Length - 2], Route.vector[i], Route.vector[i + 1]); + }; + curr_line = (i==0) ? "" : lnms[Route.vector[i].line]; + if (rs.IsBeginSolveCalled) + { + curr_dist = i > 0 ? dop_dist + (rs.IsCalcReversed ? rs.GetRouteDistance(Route.vector[0].node, Route.vector[Route.vector.Length - 1].node) : 0) + (rs.IsCalcReversed ? -1 : 1) * rs.GetRouteDistance(Route.vector[i].node, Route.vector[i].node) - Route.shrinkStartLength : dop_dist; + curr_time = i > 0 ? dop_time + (rs.IsCalcReversed ? rs.GetRouteTime(Route.vector[0].node, Route.vector[Route.vector.Length - 1].node) : 0) + (rs.IsCalcReversed ? -1 : 1) * rs.GetRouteTime(Route.vector[i].node, Route.vector[i].node) - Route.shrinkStartTime : dop_time; + } + else + { + if (i == 0) + { + curr_dist = dop_dist; + curr_time = dop_time; + } + else + { + uint[] _n; float[] _c; float[] _d; float[] _t; uint[] _l; byte[] _r; + int near = rs.SelectNodeR(Route.vector[i].node, out _n, out _c, out _d, out _t, out _l, out _r); + for (int x = 0; x < near; x++) + if (_l[x] == Route.vector[i-1].line) + { + curr_dist += _d[x]; + curr_time += _t[x]; + break; + }; + }; + }; + + // curr_city = lnms.City(Route.vector[i].line); + curr_rnda = rs.GetLineFlags(Route.vector[i].line).IsRoundAbout; + + + // NEW LINE or BIG ANGLE // + bool isNewLine = last_line != curr_line; + bool isBigAngle = ((Math.Abs(curr_angle) > 45) || (last_rnda != curr_rnda)); + if (isNewLine || isBigAngle) + { + // PREV DRIVE KM + if (rdps.Count > 0) + { + RDPoint prev_rdp = rdps[rdps.Count - 1]; + List sl = new List(prev_rdp.instructions); + sl.Add(String.Format(td.S_MOVE_KM, (last_rnda ? td.S_W_ROUNDABOUT + (last_line == "" ? "" : " (" + last_line + ")") : (last_line == "" ? "" : td.S_MOVEON + " " + last_line)), ((curr_dist - last_dist) / 1000).ToString("0.00").Replace(",", "."))); + prev_rdp.instructions = sl.ToArray(); + rdps[rdps.Count - 1] = prev_rdp; + }; + + // NEW INSTRUCTION PART + rdp = new RDPoint(); + rdp.Lat = Route.vector[i].Lat; + rdp.Lon = Route.vector[i].Lon; + rdp.dist = (float)curr_dist; + rdp.time = (float)curr_time; + rdp.name = ""; + rdp.instructions = new string[0]; + + // CROSSROAD + if (isNewLine) + rdp.name = String.Format(Math.Abs(curr_angle) > 15 ? td.S_NCROSS : td.S_NTRANS, last_line == "" ? td.S_NONAME.Replace("[E]", "è") : last_line, curr_line == "" ? td.S_NONAME.Replace("[E]", Math.Abs(curr_angle) > 15 ? "è" : "ó") : curr_line); + + // TURN INFO + if (curr_rnda && (!last_rnda)) + rdp.instructions = new string[] { String.Format(isNewLine ? td.S_TURN_TO_ROUNDABOUT : td.S_TURN_T_ROUNDABOUT, curr_line) }; + else if (last_rnda && (!curr_rnda)) + rdp.instructions = new string[] { String.Format(isNewLine ? td.S_TURN_FROM_ROUNDABOUT : td.S_TURN_F_ROUNDABOUT, curr_line) }; + else if (curr_rnda && last_rnda) + rdp.instructions = new string[] { String.Format(isNewLine ? td.S_MOVE_ROUNDABOUT : td.S_M_ROUNDABOUT, curr_line) }; + else if (Math.Abs(curr_angle) > 165) + rdp.instructions = new string[] { td.S_UTURN }; + else if (Math.Abs(curr_angle) > 10) + rdp.instructions = new string[] { String.Format(curr_line == "" ? td.S_TURN_T : td.S_TURN_TO, curr_angle < 0 ? td.S_W_LEFT : td.S_W_RIGHT, curr_line) }; + else if (isNewLine) + rdp.instructions = new string[] { String.Format(td.S_MOVE_TOWARD, td.S_MOVEON + " " + (curr_line == "" ? td.S_NONAME.Replace("[E]", "e") : curr_line)) }; + + // Add Info // + rdps.Add(rdp); + + // UPDATE LAST // + last_line = curr_line; + last_dist = curr_dist; + last_rnda = curr_rnda; + }; + }; + + ///////////////////////////////////////////////////// + if ((afterRoute != null) && (afterRoute.distToN > 1)) + { + // PREV DRIVE KM // + if (rdps.Count > 0) + { + double ddd = ((Route.length) - last_dist); + RDPoint prev_rdp = rdps[rdps.Count - 1]; + List sl = new List(prev_rdp.instructions); + sl.Add(String.Format(td.S_MOVE_KM, (last_rnda ? td.S_W_ROUNDABOUT + (last_line == "" ? "" : " (" + last_line + ")") : (last_line == "" ? "" : td.S_MOVEON + " " + last_line)), (ddd / 1000).ToString("0.00").Replace(",", "."))); + prev_rdp.instructions = sl.ToArray(); + rdps[rdps.Count - 1] = prev_rdp; + }; + + curr_angle = afterRoute.normal.Length > 1 ? RMGraph.GetLinesTurnAngle(Route.vector[Route.vector.Length - 2], Route.vector[Route.vector.Length - 1], afterRoute.normal[1]) : 0; + curr_line = lnms[afterRoute.line]; + + rdp = new RDPoint(); bool skipadd = false; + rdp.Lat = Route.vector[Route.vector.Length - 1].Lat; + rdp.Lon = Route.vector[Route.vector.Length - 1].Lon; + rdp.dist = Route.length - afterRoute.distToN; + rdp.time = Route.time - afterRoute.distToN / 700; + rdp.name = ""; + rdp.instructions = new string[0]; + if ((curr_line == "") || (curr_line != last_line)) + rdp.name = curr_line == "" ? td.S_FROAD_T : String.Format(td.S_FROAD_TO, curr_line); + + // CROSSROAD + if (last_line != curr_line) + rdp.name = String.Format(Math.Abs(curr_angle) > 15 ? td.S_NCROSS : td.S_NTRANS, last_line == "" ? td.S_NONAME.Replace("[E]", "è") : last_line, curr_line == "" ? td.S_NONAME.Replace("[E]", Math.Abs(curr_angle) > 15 ? "è" : "ó") : curr_line); + + // TURN INFO + if (Math.Abs(curr_angle) > 20) + rdp.instructions = new string[] + { + String.Format(curr_line == "" ? td.S_TURN_T : td.S_TURN_TO, curr_angle < 0 ? td.S_W_LEFT : td.S_W_RIGHT, curr_line), + String.Format(td.S_MOVE_KM, (curr_line == "") ? "" : td.S_MOVEON + " " + curr_line, ((afterRoute.distToN - afterRoute.distToLine) / 1000).ToString("0.00").Replace(",", ".")) + }; + else if ((Math.Abs(curr_angle) > 165) || (Route.vector[Route.vector.Length - 1].line == afterRoute.line)) + rdp.instructions = new string[] + { + String.Format(td.S_UTURN), + String.Format(td.S_MOVE_KM, (curr_line == "") ? "" : td.S_MOVEON + " " + curr_line, ((afterRoute.distToN - afterRoute.distToLine) / 1000).ToString("0.00").Replace(",", ".")) + }; + else if (curr_line != last_line) + rdp.instructions = new string[] + { + String.Format(td.S_MOVE_TOWARD, td.S_MOVEON + " " + (curr_line == "" ? td.S_NONAME.Replace("[E]","e") : curr_line)), + String.Format(td.S_MOVE_KM, (curr_line == "") ? "" : td.S_MOVEON + " " + curr_line, ((afterRoute.distToN - afterRoute.distToLine) / 1000).ToString("0.00").Replace(",", ".")) + }; + else if(rdps.Count > 0) + { // ïðîäëÿåì ïóòü èç ïðåäûäóùåé òî÷êè äî ñëåäóþùåé, ïðîïóñêàÿ ýòó + RDPoint prev_rdp = rdps[rdps.Count - 1]; + List sl = new List(prev_rdp.instructions); + sl[sl.Count - 1] = String.Format(td.S_MOVE_KM, (last_rnda ? td.S_W_ROUNDABOUT + (last_line == "" ? "" : " (" + last_line + ")") : (last_line == "" ? "" : td.S_MOVEON + " " + last_line)), ((curr_dist - rdps[rdps.Count - 1].dist + afterRoute.distToN - afterRoute.distToLine) / 1000).ToString("0.00").Replace(",", ".")); + prev_rdp.instructions = sl.ToArray(); + rdps[rdps.Count - 1] = prev_rdp; + skipadd = true; + }; + //rdp.instructions = new string[] + //{ + // //String.Format(td.S_MOVE_KM, (curr_line == "") ? "" : td.S_MOVEON + " " + curr_line, ((afterRoute.distToN - afterRoute.distToLine) / 1000).ToString("0.00").Replace(",", ".")) + //}; + + if (!skipadd) + { + rdps.Add(rdp); + } + + if (afterRoute.distToLine > 1) + { + rdp = new RDPoint(); + rdp.Lat = afterRoute.normal[afterRoute.normal.Length - 2].Lat; + rdp.Lon = afterRoute.normal[afterRoute.normal.Length - 2].Lon; + rdp.dist = Route.length - afterRoute.distToLine; + rdp.time = Route.time - afterRoute.distToLine / 700; + rdp.name = td.S_FROAD; + rdp.instructions = new string[0]; + if ((afterRoute.normal.Length > 2) && (afterRoute.distToLine > 2)) + { + curr_angle = RMGraph.GetLinesTurnAngle(afterRoute.normal[afterRoute.normal.Length - 3], afterRoute.normal[afterRoute.normal.Length - 2], afterRoute.normal[afterRoute.normal.Length - 1]); + rdp.instructions = new string[] + { + String.Format(td.S_TURN_T, curr_angle < 0 ? td.S_W_LEFT : td.S_W_RIGHT), + String.Format(td.S_ROAD_FM, afterRoute.distToLine.ToString("0")) + }; + }; + rdps.Add(rdp); + }; + + rdp = new RDPoint(); + rdp.Lat = afterRoute.normal[afterRoute.normal.Length - 1].Lat; + rdp.Lon = afterRoute.normal[afterRoute.normal.Length - 1].Lon; + rdp.dist = Route.length; + rdp.time = Route.time; + rdp.name = td.S_END; + rdp.instructions = new string[0]; + rdps.Add(rdp); + } + else // NO AFTER ROUTE + { + // PREV DRIVE KM + if (rdps.Count > 0) + { + double ddd = ((Route.length) - last_dist); + RDPoint prev_rdp = rdps[rdps.Count - 1]; + List sl = new List(prev_rdp.instructions); + sl.Add(String.Format(td.S_MOVE_KM, (last_rnda ? td.S_W_ROUNDABOUT + (last_line == "" ? "" : " (" + last_line + ")") : (last_line == "" ? "" : td.S_MOVEON+" "+last_line)), (ddd / 1000).ToString("0.00").Replace(",", "."))); + prev_rdp.instructions = sl.ToArray(); + rdps[rdps.Count - 1] = prev_rdp; + }; + + // NEW INSTRUCTION PART + rdp = new RDPoint(); + rdp.Lat = Route.vector[Route.vector.Length - 1].Lat; + rdp.Lon = Route.vector[Route.vector.Length - 1].Lon; + rdp.dist = Route.length; + rdp.time = Route.time; + rdp.name = td.S_END; + rdp.instructions = new string[0]; + rdps.Add(rdp); + }; + + lnms.Close(); + + // // // // // // // + return rdps.ToArray(); + } + + /// + /// Ñîçäàíèå ôàéëà îïèñàíèÿ ìàðøðóòà (Ìàðøðóòíîãî ëèñòà) + /// + /// Ìàðøðóò + /// Ôàéë êóäà ñîõðàíÿòü + public void SaveTextDescription(PointFL[] Points, string FileName) + { + SaveTextDescription(GetDescription(Points), FileName); + } + + /// + /// Ñîçäàíèå ôàéëà îïèñàíèÿ ìàðøðóòà (Ìàðøðóòíîãî ëèñòà) + /// + /// Ìàðøðóò + /// Ôàéë êóäà ñîõðàíÿòü + public void SaveTextDescription(RouteResult Route, string FileName) + { + SaveTextDescription(GetDescription(Route), FileName); + } + + /// + /// Ñîçäàíèå ôàéëà îïèñàíèÿ ìàðøðóòà (Ìàðøðóòíîãî ëèñòà) + /// + /// Ìàðøðóò + /// Ôàéë êóäà ñîõðàíÿòü + public void SaveTextDescription(RouteResult Route, FindStartStopResult beforeRoute, FindStartStopResult afterRoute, string FileName) + { + SaveTextDescription(GetDescription(Route,beforeRoute,afterRoute), FileName); + } + + /// + /// Ñîçäàíèå ôàéëà îïèñàíèÿ ìàðøðóòà (Ìàðøðóòíîãî ëèñòà) + /// + /// Îïèñàíèå ìàðøðóòà + /// Ôàéë êóäà ñîõðàíÿòü + public void SaveTextDescription(RDPoint[] RouteDescription, string FileName) + { + RDPoint[] rdps = RouteDescription; + System.IO.FileStream fs = new FileStream(FileName, FileMode.Create); + System.IO.StreamWriter sw = new StreamWriter(fs, System.Text.Encoding.UTF8); + sw.WriteLine("\t\t" + td.S_FILEHEADER); + sw.WriteLine(); + for (int i = 0; i < rdps.Length; i++) + { + sw.WriteLine(String.Format("[{0}] {1} {2}; {3} ìèí", new object[] { i, rdps[i].Lat.ToString().Replace(",", "."), rdps[i].Lon.ToString().Replace(",", "."), rdps[i].time.ToString("0") })); + + if (rdps[i].name != "") + sw.WriteLine("\t" + rdps[i].name); + + string ins1 = rdps[i].name; + if ((rdps[i].instructions != null) && (rdps[i].instructions.Length > 0)) + ins1 = rdps[i].instructions[0]; + sw.WriteLine(String.Format("\t{0} êì. {1}", (rdps[i].dist/1000).ToString("0.00").Replace(",", "."), ins1)); + + if (rdps[i].instructions != null) + for (int x = 1; x < rdps[i].instructions.Length; x++) + sw.WriteLine("\t" + rdps[i].instructions[x]); + }; + sw.Flush(); + fs.Flush(); + sw.Close(); + fs.Close(); + } + } +} diff --git a/SOLVER/dkxce.Route.WayList/dkxce.Route.WayList.csproj b/SOLVER/dkxce.Route.WayList/dkxce.Route.WayList.csproj new file mode 100644 index 0000000..5b90798 --- /dev/null +++ b/SOLVER/dkxce.Route.WayList/dkxce.Route.WayList.csproj @@ -0,0 +1,50 @@ + + + Debug + AnyCPU + 8.0.50727 + 2.0 + {8BDFB9DC-DB1F-491D-88DF-E6112FCACFDC} + Library + Properties + dkxce.Route.WayList + dkxce.Route.WayList + + + true + full + false + ..\..\READY\MAIN_DLLs\ + DEBUG;TRACE + prompt + 4 + + + pdbonly + true + ..\..\READY\MAIN_DLLs\ + TRACE + prompt + 4 + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/SOLVER/dkxce.Route.WayList/obj/Debug/dkxce.Route.WayList.dll b/SOLVER/dkxce.Route.WayList/obj/Debug/dkxce.Route.WayList.dll new file mode 100644 index 0000000000000000000000000000000000000000..452030f4e800697e2315519ce287bcbc7389ef31 GIT binary patch literal 28672 zcmeHP3vgWJbv}3Z?%jv9Yu{Z2Z8P=Z~K{ z?va9&0UWyX5T0d_JH*(nME9~2W`E8SRfBf-2+^|Hb?;P862XGvCxr5K#S&4fV4N(V zT-XSJI&rvHF`ImA%F0{gz(u!PfiTY=d_A8Iv`$$@)&wK#N@ww9zFYD2d^(7Bd5RUZ z;(>|>DjukKpyGjw2Pz(@c%b5eiU%qlsCeMF$OC)$T#XN(O??!g2euRaqLxSz>U#(N z79VYQ8v86DQ)d8FpVi8!PtY3~^$Th;ieonz9%3{g=u?bpg8mbuK|z}ppg2>5_XbA8 zfM8l0TKx!AyXx|1$QUhuYb{^MtEG4u2H8EMv3oQbc)l3 z8X!uX{A_w84lP-VzxJ^i*dOuxKa#0CXyYcl5Mle@nG0Ttus`0J3toz_z7d#!aM7xo zD7cQ6wgl)==mrY=i#0Lfricf%UWF^n6(E{P0P8i^Gx?P$MxgJ5P!ZnwNT&9J4}MCh zy4t+6wz?_h4?VIz1WKXwsnCXb+|ZZx7m}w>8fH& zkz;k>amwQfiKu z$#8vJa*`~8Cbzxm0H`~G9Ly#ntXWW3+aF{tRj<_dr5i7p?^ic&E4p24>sC$eABR@# zJXv$toy}1Sv({=hQB6%V&bm6w%6KfkAiglJ$K&yY*#TjRMYV~VrVc%>*E~|><*fjZ zU`cj8=@EUQUi0zn0d!HV>o!{5gm!fY5;b~_z6h%*tMLr>II^S{#W~^7$=xO6$;Mrb zROta^gf2#F^-yCs5Tt>PyIQLBpkC#yq;-ipy|y{1*Ok`Qts9X()2e z9hyz9J81T@+{N+5GrT0^cXO#;cTue5U<_VAJUa-7+R3W_h*>&@$d*=w3>m%iA% zfvY`hSjo%tWG=+I=}BFBD9-bwM(+`+%-wBb!X|P;MllQ8ltJr7I(SeJ$rGv zsG98Op5O z)4Zd6A*^k7)s1@9<&%Z8JiDt~`&W^W^dMwaT~^ituPi=~%$9YMWmT;Y>OqNJ*=Ai@ zH9p1^J;?`|+2Yo+xZ*Tf(^X2X?8?WanbPF*?x;98<_6MAH;`n`x!c3CJs>ZwdL*IgRSB$~dK8%| z>RCPQgthhFUtGKxSRW5uVrv}2(RFUVc?(2dt#NjVWHH4POa3<|pC!Ng%oC8q0M^_V zXBFJwWFY6^-7FMISWxVCb?z=C6qxUSGG6DfzD%MkLE!q-GRtQ z)#4CicX;qJ`Oh1GF+HpYWUVT#L(LnJ6unIDz8~4yoxQ~wjS#Z;{l!J^|5A1>rk%%2 zsblMR5&v;zap~+<=8RuO_Na4`!h1bh*rObflhk`YTD1Q+_UNT#xu&aS%{=iayCXY- zy=VTdkI#0BCmq*5h!n0g_9G6FnSV3JEob9Au`Jv0zrTdiztX(?o3S?qm(STM)`NK2 zts=Hx0~o2ggWe$gwe1;XHnv+r$JIS6Aex2vp6EG2!ZY~my2p0Ua9 z4tsO&ManVuVd)~pPVVl~fYYM)s%UPd=W3;xuKC_$PP%q3LpT*a@V_ylS_d94RJxpl; zF6Cxk7dW$j}LHDul5 z>190xAgS`bXDA-JV-3)q1GT=hFdpTqN`2&h#f1uK&~nrDvfIDnr-IIh||LeC(D@~f6ryZ83t zB8a|<@L);X5x7RLsjsLp zG6LNDbAiVLF?vPth?b@pJ*_eQUw~`$w)S{Hqfn6XwZT^)VWYsl;Ete1Hw%7DpegWf zaPr5tpGQ$iE~G1H1IA5C7>(UhYJlG~GT|MKZWnmB!21P0Eb#XQen#M*3;d$M7X^M( z;Hv^(7x*6ng9^)BDzHspr@#?`hXfuGm=k!rzz++2NZ=<0{;|N%11j`AMF;#xrH1w- z*}e}iepZQs^6`~Y3jIK-N9k#&^ro^LrRVJuI9J2gg_x3PM_2mRA*$9FOKpgqmz~lM z-!}N^>?)UY7wlMvw+7tq7T+L+X?wA>kE&>}Sh@vKIZ-SfLxSZoxD(;1$nT6R^lyT{ zDezj%4x8em`+)oD5utFckCF&(x7Lf7I8}#dH+o_IE%dB1O`QV!1l|aE8ncDzX@MDm zw+TEY@D73Z34B=Kqkz9lPXXRTp9hT6UkMBgtfnuhkI>iXW%W@yPp_+=qDAy0^-pOf z{ak$>v-N`dA}=g~uY$5L@O9udf?px{Rf4w*-V=Bga)tx10e&FxI=u$@(}1S~{|tCn zAd27d=iXcCCGfY>*8?vCekbrY{h0nCaFOciN1*?hek}OUfY;Mo0=chxdOHvS|3%eYaIv}=^L(&Jj`YpwL6(*bQe z_)Wl-bf@-p*!VF(ou1S>Kz~l#ulyIijM}f!Ymlrc|E}GFzTVWv08a;wAO@dREJasX zpVgwnYFZFHgW9^_U82MNpfmq!p)8ZydgWQ=o61^cIQVU)75LvNoyzGT#u_jx*1Zb+ ze&AaKb}H<>Edo=B(4Q+QT1r7*idIo8;0A%)XfyCGG68R(djUs;elz_U@NuCZC%->M zd8!7Sp&I}Fh={+WZ_&Tf!^#iwmm-{DZu3nc{(OjE1z$gYE8$7{Ps%FlS)v-`>>AMQ z&jvg=PrDz5ud`Ee^VRmhmR{Ctcg%{*K*nIAW;Y-Wr`PUQ>6Bn^#y&=@b!$l>0; z{+{c4I=g#@QP|b9yKfNBp22Rw;h|3Vad>pdAsikZaIs#-dL1r#9v*cmc7wsL;h~Wc z&<00`I|msV-8(#Zcod@d4t96$8rsVZY}(K~#NPR6!$Sk*50Mgq(Qxz+{8#BZ52ie=9JTHBz?k|6+Q?jR~0)lQp3iPEJ6dJ zMV(M!ax8nQHaMa$$go8W-M!zXl}P%Fm>9Rr()DfPZ*PF>-aov%&AjW=IF7)+^RhmX4d#T70_WS zojWzRMVFa7k~unUrP&*Et3C5;ZslmE;I+wdN_QrGG-u`unejYz8)MT)kEY8^w`tgT zA`8G*vs}rFVkoSlFKvRTH*93nCk4xwlo__iKnyHo#xmJV!DA-GWYXEp>2eiLq_fio zNyIwwdtjiSBWJ=@=fGr^T-vRz9CcmOmSyA$-5HDQeKWyz;lqiiMz zw;jc#;{IeJ^r!QMzTAXya_9&R8$TLCPP)!RNT7j(*#z9*T^>h{3iG zVyuQ~l>6(=rg2hoI=2gUfACpuqH_#u7^~TrGh9Un(ip7HF?*=Gz*V5Wp4{}LVR10R zi{0il5Ln-7S?N=fCS`Dn!^#LeW27e~w0OR_(Z(r`dUE6D1Y9VV?;Y)J=g0*2ek+5) zbPBSVIuv<`=aI2Cv{7$%I)9Al>UG3FNm{11s2%Ec_;#tg)E(*#>J~Lg+thZo6Xm3E zts`Yc1Ne61yG`8*>h`i$EvnM61oR#1Cbf6I+7)rg-K1_-H==e2+9qiu_&f03fPR(w zx%D&DLT5!k(@ZX|9%AC3-fXO&h)}d!u;& z8sO~1O{&uMepy`NUIdcJD@Xu4K@A+r zo4ma?&2PgDaZgFwD)H-RAK*R}ogvq74w3mB0Gi2EFuMM2e+-o{S`*AWpMg5e)DW^cAWY8o{;dU#Hk^x$ZPJ)8lE}VdD9mtKazj`+Qmq`YC=b9>zBWU&KR!q@p-5984+=dQ{g#@@$CLXh32O;i{xx=<)h^ zeK6@$P!rSe)b&^-iLueSA|^F@6qn2pt3qsyfsZ@TZ)7y22Dz)6cv=bJFc=GvFBXfb zr1)YQ6H$lXq^6h}^u>IEAnT%P=*y>t14&i9JOXylK@mMxP9xRb0L8vAOK z!BBW%1O8RJ|9}S|L_ZUT_SMzkVm~GTxnnp*QEK96@8M38)Q}){RtOI^xMA7W;1#xh zdNe*+T^)=1_!|v1gd3{mC)^MSg?v6eD$=4p*z0SERqJP>?Bkez_Td2D%bk5Bj8gpU zCxFF+VKBwdJ{UjyXb3J?=Br+yP^7Ij)!LQ<#F-nvTeP~Zed88m%aP5^<82e0nl~Pq z*wQ@K-kNUSa-@A?<29R&4eduZA|@3+P;XYKt;;|cucyjwB z7f*K_olIx4sd001XR@uOt(9o8LJ99-%sGG)tx@Q*GKfYM8anp}=UzDX%=x>{J$L?r zL_~N-|&OLqZ%jdpy{-NZ#=g&QT{_OdC@xAN(oglt&?hEH$NS=ERwReEynm+XDDBo=iY&|sCxv#GaXY4)0L)Z6o zjgB1R6Yyxy$l*OBLwkq2dJZ2N8S3BHGkjpQPxStO& zo^(s)Pxo(#Z0g}I)9TJ<2hy3GeVbtzav#FA7uQg-!)B|%iU%qlsCb~_fr|>DjxU^dq9!jnZch-oGn*`&o9Jx40GtrcOAY5ZY5f;a>@RzS8=wZeR#in7_f)% z){^@0KkW^o+y~fe|F3)WW%Z{Q_&URWXY0O|ts(qXntWI!pNYJmZWI(qO_K#V8QhN; zkeS0@Rhz=Lnz+>{YSWmYIBa5r_~2=h*F?a0bG2$a&#U^$ApLPR_vdRG{!!_ zT}>0(;w?6AX(rKk4pQ=E`I&vkyaV<24WD~A&G)tT&C>?C zTk3`^R(JyM{N4Vh#HLg5U|Ra-`T_BQNyl+Oy9qj4(Cjqy;_`NIv4^OoOX1rFXyg2*p7mIac08Ia7jK%NZPsJ$yX!v%pJnlb|2GlR72LJq&5B6k zQJcc;8;|-?{FYV$JacJD{4PrJm-cHCeYc2pm>*)-kkcWbn* zQ7Sr6(V|kNl-7zkqP4hN6|2-`u#~zZ=u~7rwJ_h`x#uP~FJW=P>1YoA^L_vGKl^^q zyU#JD#g!GYis@Aud0BZqduEI&7?II0Gdnw_Nt@vX2A5#}Gd=nEq;y;l9}R!M1ud}R z^Zon(V}FDDuC_qyh%r+c0}bxG*#b?U?iJ~;b?jItAjRz8p9mXy{AqCC>K52LZNlKq zM{h~JzQAl6cSpj?$Merz_TJksrCvYS*PGsU`FW|+x1>INqA`0Lk9v6OUFAdmSn{LM zzui6T<;yC6u}s58Zb$Nhqo<`cOMdNw@=yD|n3i=kevOf)NHZh_IRq7TB#ahe^V_`-}+|uHT zS%tGJD=v%{SH-3jRw`1gaCWR>PGxbla7wJAY;LsDrD%AnhT;;g_EMQW|tK)fAzf9C{^*R5XA|?bubw=J>ppEB#>9owO7|{9N`i;Eo7R+ z#HR+ozxmhazA|cKx8#I}?p;3>lNn=%n;e)(J|2XwDIdIE-*uUJ1B=w<;>SML@#EPPlu|>1& zkw{}<5@jDvJjDsZsr+gR`l#OW%dV{A>~@Ux!oQ6hOEq?5%F1UkgZ*))vV?7wOm3BB z5t)u8;X&Acy>Y%~`EYvg;nIK6`Ix&p3d+kF$3=fW0sNL4Vbx z&v-1EU8}$1Y&MSiCF~#cvC6CQ6SkF9%q}e9goU@QkH$~Dy{gn7mx|B$sAVrJid7Ys zm6k_ceB#!%y9^Xx_krQ`ZT!mek|Gyh&x>Ju@tn%a!lLpE%E&cXoY8rrqO z$HqqIjjm}&-GA1$4=cT3sNW8DeITt>r27NH&7wR(Idr!gj#pUjmrv_;E&pQQUw5#z z{7Za)O_*B#j1bkcMZABR?|)ppKkKH(Z_7CU@@Nqj#c7nfhB~aE4inIqhU%a@;Bej- zp$F?qQ1`vW`vCu`bhzrSHr0J`INt2a=-fgk4Bocvx=Rk*W0XBeS5(^S-@TNj5wd~C zRNAVCu0?9aomo1&sHDWkNhItF_AQVx6O8|2Pm$7%xO+=6aD(;P`N>0FiB6co*kPKsVs z>)?X-mpS_dc`mFcPns%e!4b@Jugg>OCvbQrU3&!cd|8VaE?palbF7C+D-V&U#?R*z zZUylbHwdq>&iFS>^YH#__fMVwWycn8ueJX&&ExIW`){y6)}&u|e+=8EvvX=pt9oJo z*gStd8c1cAQ-{YGNUys(E4=p1aQISm)mdL=-GZzp{B{>!WzrT=D|~sZ7hX0_HsO~b zdFUfpR5WIlhxXNQobZ|#tWk$IhHIaxJ|W$K5;BVLk1ATHI;juj^4ZQ*4pIB3*o&vH z-aLs6GJ{Q!hW}g@vG=-)cc3)XXG&u@e@C#oPvj;*X)Hwi=b?z~)-iXD>MD08acBcG z8Y+!3Q2WYQ*aeP8cz1ho|46j=ow4XndJLaCSX)q^ zrLIl1H_CN29fG#3+;g?so*%aew+Vn zn2Y{>I2cyKGoad$wlz!(kG8ZrZK&sXZ<^C7vzd!dnGMs#Bdq$%Ba97?&CEx~W~nxj zj##_SC(365R6d^LmCk<=ycqwRAYr|mAz@wpe@uP*A{qGFd19GnMp~w`Gq=Ys%B9o4 z9SPeh^o?*Y`m2-4vi20hrSPq?+E!y=HCFX>YRQJr0)!U=h4>YI;i%z0bUAkgjYf8=&8O-q3TOry`RBb;GJ+8Tn+K_ehrty zXQ1+Z3Eqaj1>O$-0$0HI;7a&U_;aXBhC5(;xC-`wr0tyw?=t4HTOfIOE8snF9aQ=c z!h6v-z%@{7;4k4T@ILrHydQoB*TN(OKIH}FRITlgt_ z0PcYb_Ye3W`T{232DlJzgxA4`;bQm*TnabARq#=`8a@W^hDzr?_&ECg@DK10@Co=F zd=hSlPr=XN)38yZF|@7M96k#>!RO#m_&gj1Uw~uai*PKY?Y#+5`JD}4MxW*MD)=Y# zIq+5ZAlwQ!JNwh{&*;y<*Wl~Ue;a%qJ>@84-hjuzH(@sXFE|7$ztiD1^pWr_xE=ll zUYf+-1Ahn=ZXw)({uB5&xY+sM1m8wq0^fnRz<1$okTK-l4i$d|`~ZC=+zFqOKYZ5N zpNG59KXCdkxEp;p{22ZNGPk^>qmB7**cdAQF^;W7@@WG(YkGQy+5_9c|ABf&Vk~>3 z;XXJ6?uT=s;#~qwgnGjSxXAh61RJ3*f!rB-tKd;^9ZZ7%-kALrmchpG5||7xh0WmQ zFa<7$$G~;4Iot@3g_|LB%XNuae6N7fL`wO80?6Cxzn$P8R+*o{eIX9{V}I+hMm!SH1*T( z3A>=@I6W73MPClP!&UG^xEl6^YasiHw-%lZe+4t)I;i>ZJI5!W>iazGh5c=(?}Rz% zAHhCQ=R}2T#2VWdJrU-@RM-!8g6wNv7CZ%Rg#+N*kTuNv404w7_QFAMaEdX5;TSj+ zp5-_h4nv;@^WaiA9Nr7_;bu4jz64K)+aTu~Zy!|o5{@xu6nZWk4TnSdp9#mHzYoX5 ze>(rf=Jsr}@KvaAZ@{y$w>Z|<)8RQ0vv9rBAB0n|KjHM};rZBCrTXFThSRV=;Pn55 z#psW~68J|Lg>S;?aD5BT74R`Q18#w(@D+F=d=<`yuS1n@8~i@{Td)$o3uEv-I0ya% z+IBdO{U5y%oCll2i{J@xKFo&~!}H(|;2gLBUI8zGOW>t&Jyd!R!5^Y;gdW@jFQeX5 zTN-mYdJ((=mclFHh45-v39o^R;Uc&OUJEzC>)?}cF?H>c=de4x1CD^J z;3Rk_oCfcLRqz+^GPoLE1@DGe!+YTk@IH7eydV1K!4WKej8~&`U@oHbkp#8Eyfhn!!Y{`jdpSx&;`8G@h675M`YD#}&Gk+{&FQ0^KG5mEak^i& z_MF)K{IZ}gD!bY|m+{b^aU_>QnSE+(`R(ZU%V1acac~bZ0MVG!Sa<~KjdU~Lqwi8_ zQ(p$bVTk%X2g$Q(r}31O>e@ezon2!^F3r9vs%L|Xh;nCq1C% zoBUMIj&XD1K<)Sm>4n=-@q@OjKTZF+r%Uy7k9ym`FN+Y@cN~kW?*krSy@{az4zev7 zo(98v2lXc(^y|L_fo6ZdhH(zkQ{4oV}iAF1ou6o7}3M6zt;9l*1Yy^ z-s;&qEZWolPDqZM|agfh<6lAnTE5kq?nXB4r@`k;%wxguUIYL0sFJ zX4JVWG7@QU2X28xOu@SjLufy_fsXpjN1p6lKZV|PP(1ZR5LQu|n69a370i!SMQ5=W zRe#RRt0*hu%`aXhh-IE0Ess`~7BfO>?4!o%w*WP|uJM&;ILzc(Wwp{o&nzINqO#J9 zi|ktp`o4xV!tbS>USQuWQ(ARwd3*yIi^gQrJ!|gaypKZImWb*ur}3+}pTH{DX1Z$) z+N3@HGn_wbj$MCRL!FXXy1Y)1lZK~Vw=L`k8UJ?OA+9$Don6V(+~^34VFoORo#A}Q zn&&Nq-QZ&QJ*eHE8Eo&Cdcd{lJ>f%;yu8hjQKCF%QZmAD! zOdWEe);Y@Pb%6b056If-@qB03sbn*R^|?2ajpR5P3eR+(&wvw<0Z1+)eWK$eI0zYm zC~gpDAfHb~bpNTedm<+zTDAF33<<9z`aG36U)3=0)jWrEdXKwJa@NP22sxTI)0m|@ zO$wjI2~Hp7^diSn=Re2kFA`YcwI_-@oxPj0Ywwc(FCBRXwR$JVOI&z`k?1rn>SQXO z%OCNlj;A<2=j=aqj0BSty*_s+d!0CxKkOojL&9pE&njbGr%~y<`t5<$uVal?`%{Ep zP8}+K?HFHNi>q#(1gt%yj`zQuM>9&qT5C@ztZnw2gGq2IQifcFtVY%&n~-Obt;h~! zH}X01U2ttoH~T1{X_FB5f@dq!BV^0Y)$5yj0V;^I#>T1rvSkp*x4AfMCM{e(tr@@x z#y>~|VSPUrmJO$a3(HxSuyHRVl4lUlx4U>O7(u)x4AO(e^X)Dk8(UBxy?bZlg$4arFVLzWnUZmclO<_s_}B%g)bcD>5f<$o$w9zxuh(Chq>orsut8Aw96m zHj+Pl)n}db!0Gb@{^UE4cpKkQRKK4eZ`1vep7rG7ZF(o8ryVddWbT4Q( zrh3xUecyp>y2opIfc$hn7u?N-^GjeANwFT0>faRWcc+ahpPa^IK!sH;^)GN=|IgI; z&e{DA&J`=j$}fxxw10ndTQL7~js5@mCrymUkyj9oC)I8LB%eKGGQwBs_I@@AYAh>` z*6wL#6~!}6R;;o(YkFx}G?sNle(k4R)hqt$7*GG8Nxc1rZb|FHn=a+0^A$f z=cJ(j`)MPm^c@-8i8B?$zX4ZJ#aC~1LAoLuAL<$PgvJR+2D>(DN!B-i%@LhB zwVtp%8*KzyKhhBGEyp9R5ta_!jWzuLKWKv^>6T>niX^Xjv`BrqBRl7rofSRC-m&lM z?LFtMOt}=lEPk6Xb5!~C3X@gN&y-^Rbe|C|Dv4G$%>N_VGv7?wnu`OGgU$c?=DxoT p`u`6ItpVMU`qqJ?@ITUPK*Op}BY#P!wY|YLv_L}(d^cO*e*xo$-lqTn literal 0 HcmV?d00001 diff --git a/SOLVER/dkxce.Route.WayList/obj/Release/ResolveAssemblyReference.cache b/SOLVER/dkxce.Route.WayList/obj/Release/ResolveAssemblyReference.cache new file mode 100644 index 0000000000000000000000000000000000000000..fe3f733ecc872dcb09f6c2d54453ea50b74722e0 GIT binary patch literal 9113 zcmeHLNpl-T6jsZ!teH5Loe+{h2+qP%6=!5S7($3iIf|V)Shleo6AFi^vD9)V9&5tP z$iyLl*%RQva$q^I99Rx)Rct2+2QDl}mVy&U4*3u8zScUb>gq1JzcWA zlEZt8yyQ8C)zLm$nzGE?J$!!Lp5evbsm?uxp28i4uC9Dfr?JOq#ACLFYS*&!uE%Gy zp5bxyQVOQU1!~w*Zqm}WW$~OxGjO#dhI`U8rYw&6Dh(uJ5dYb=i8`o5wvit&a-Qup z`Q{|j_UviH;Z7@*rtLf*b?iAa&z%H*$eL$)j4X2F6NXjdZY0vs5NT{&lL&j(U`5x? zkU0-7(|_sSy$3LDRb4|;i9s}yXhjVT@i>X?nl?%QWBq-H?w`!`4G!yvhKAh9--m>DbZFhLT{LGmg*T(FU$F;**+nVE!7?QZMA!*BSUG8E?E9Qo2DGG!Nfr&Q) z?z*g7cMVir3iFytua~j&X2In7W;|nd%9+mcoAF$J+!MC@W2TS!RPOdmyX{4*&pYXW&+Auh!zq|m`#=M z&s{tx+LLH%g=j;&a3xh*|6G_7?d#CA9^x7jjZk;hHnbS7Y+u4~vz}uXryJN-pJ`*f z;O~yWN{IcjfgTyZmc+pdX{62ErFC^_-91|O<@a;3WLZsEi3qkRm=L>aOO%Z?OxXmn znM51b6op|K#Zq5KmH71}G9lDm#l+zvF>%mu1ry&w!;~8!wnE%Uq75ELVQ{jTeLGd+ z+eidv@9&~j%pL?<&9ZN&;mQt(og~^oMU)u0aTyN5u0|bOQ`M^xKDk&G!M<7dv%z4o zU@JP}=t0Bf3EdB~Ejq$qpEYeergw67QxFc=PTDSdj%}^eiP?5>8jqu}J8GEDhKddm zT|INkv`lY4t`Atow3`%)7RR%urU+{gr70RswD{Y@pG8kKE*A^tbjdN0PAVIQ!cC<* zADHaQM(tR>GnbjR|4QfM&p)sNArFv)gjk+v{3h~VqO$K*^hFBS-twF=Ay4 zg<#S&hwQ5Bkwk2Pc>WtHgFF3{e?EnAq&Q1w=3t zP!kYgO~90Z2xlSycT#12NJvwaE@}}z>88r)ihUBITexQrX=OkAD;irM@RJXyfz0`l z5SAFGvLC2|wJBSQm?v!6D|#aO33#V~h=T&|6A%$mz`F!&Cn*fyPnCe-el%2-UTP7B z-%XYO$8hPqq8uQt>^m|BREjMSxab3FAj7{UR5kn?0*i(tTnbwbiJl0Y0`?1t5GvpR zU=n)@B^tv{SQ2uOZQ^>yIAuHZWft)zj@61j#^+3&QZP0_1*?VQ0~mzF9Rt5=EjUN( z!I@Hz>!#C}kfL6Yn%iLLBQ38?G~nYy3*)TJ>LEfIz4q!I5E zwVBa};b#BfaD3KMl@a=(Oq)@vu}>wYuumkQvX5ojd=#J!vQ?cnHB6gh=ki8)R zmAy`=%AeN=Eb<4hBX$1NFn>;wgR7}*rb-zLlzCNR3428XDtlR`%u4~v;FYybnHr|d zL*!uT8qBGZ#sz6!lz75kkbugbmq~L$CQTC87bsD7fMn?T2iFI6Uez$K&X9wp^UplN za{f9?HTH}|CHAxgRQ8n2t0!e%#c;_~Cru5L1`Lsc(E`CTX`Y}Odraa9dsG4{J13Lo zkpO9M6Q!5ri~}lCW$M@1bw1kpPii8eA{0a z7_J_X%WwlNmn5#4f?aXl6xtQn3&F0qW(e(yH^yLByg7z;#mfOol;Pz7U6$TABykuF vYQv#0R2z-}C{czZK&UoE^Po0F^-ygK)PNFY*u$aP;IE*z^M2Q*OTFe_9~`z1 literal 0 HcmV?d00001 diff --git a/SOLVER/dkxce.Route.WayList/obj/Release/dkxce.Route.WayList.dll b/SOLVER/dkxce.Route.WayList/obj/Release/dkxce.Route.WayList.dll new file mode 100644 index 0000000000000000000000000000000000000000..64e0a410920e854a437fdf310ba6aba4bf61fe85 GIT binary patch literal 28672 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 literal 0 HcmV?d00001 diff --git a/SOLVER/dkxce.Route.WayList/obj/Release/dkxce.Route.WayList.pdb b/SOLVER/dkxce.Route.WayList/obj/Release/dkxce.Route.WayList.pdb new file mode 100644 index 0000000000000000000000000000000000000000..cf0d7b27f15d2f653e14168196269283a8916ca0 GIT binary patch literal 22016 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 + /// Make Border (Bounds Polygon) of Cloud of Points + /// + public static class CloudBorder + { + /// + /// Get Bounds for Cloud of Points + /// + /// Cloud of Points + /// Accuracy steps (lower - more points, bigger - less points) + /// Polygon + public static PointF[] GetCloudBorder(PointF[] cloud, double step) + { + return GetCloudBorder(cloud, step, 0); + } + + /// + /// Get Bounds for Cloud of Points + /// + /// Cloud of Points + /// Accuracy steps (lower - more points, bigger - less points) + /// Enlarge border value + /// Polygon + public static PointF[] GetCloudBorder(PointF[] cloud, double step, double enlarge) + { + if (cloud == null) return null; + if (cloud.Length < 3) return null; + + double[] box = new double[4] { double.MaxValue, double.MaxValue, double.MinValue, double.MinValue }; + foreach (PointF p in cloud) + { + if (p.X < box[0]) box[0] = p.X; + if (p.Y < box[1]) box[1] = p.Y; + if (p.X > box[2]) box[2] = p.X; + if (p.Y > box[3]) box[3] = p.Y; + }; + return GetCloudBorder(box, cloud, step, enlarge); + } + + /// + /// Get Bounds for Cloud of Points + /// + /// Bounds box (minX, minY, maxX, maxY) + /// Cloud of Points + /// Accuracy steps (lower - more points, bigger - less points) + /// Polygon + public static PointF[] GetCloudBorder(double[] box, PointF[] cloud, double step) + { + return GetCloudBorder(box, cloud, step, 0); + } + + /// + /// Get Bounds for Cloud of Points + /// + /// Bounds box (minX, minY, maxX, maxY) + /// Cloud of Points + /// Accuracy steps (lower - more points, bigger - less points) + /// Enlarge border value + /// Polygon + public static PointF[] GetCloudBorder(double[] box, PointF[] cloud, double step, double enlarge) + { + if (box == null) return null; + if (cloud == null) return null; + if (cloud.Length < 3) return null; + step = Math.Abs(step); + enlarge = Math.Abs(enlarge); + + // Enlarge Box + if (enlarge > 0) { box[0] -= enlarge; box[1] -= enlarge; box[2] += enlarge; box[3] += enlarge; }; + + // Calculate array width size + int iWidth = 0; + { + double dWidth = (box[2] - box[0]) / step; + dWidth = Math.Truncate(dWidth) + 1; + iWidth = (int)dWidth; + }; + + // width elements + double[] top = new double[iWidth]; double[] btm = new double[iWidth]; + for (int i = 0; i < iWidth; i++) { top[i] = double.MinValue; btm[i] = double.MaxValue; }; + + // Search Min & Max + for (int i = 0; i < cloud.Length; i++) + { + int cell = (int)((double)(cloud[i].X - box[0]) / (double)step); + if (cloud[i].Y > top[cell]) top[cell] = cloud[i].Y; + if (cloud[i].Y < btm[cell]) btm[cell] = cloud[i].Y; + }; + + if (enlarge > 0) + { + // if first element is +/- Inf + int inf = 0; + while (top[0] == double.MinValue) + { + for (int i = inf++; i >= 0; i--) + { + top[i] = top[i + 1]; + btm[i] = btm[i + 1]; + }; + }; + // enlarge first element + top[0] += enlarge; + btm[0] -= enlarge; + }; + + // wedge off first + double sdiv2 = step / 2.0; + if (top[0] == btm[0]) + { + top[0] += sdiv2; + btm[0] -= sdiv2; + }; + + // add first line element + List resultTop = new List(); + resultTop.Add(new PointF((float)(box[0]), (float)top[0])); + resultTop.Add(new PointF((float)(box[0] + step), (float)top[0])); + + // add last line element + List resultBtm = new List(); + resultBtm.Add(new PointF((float)(box[0]), (float)btm[0])); + resultBtm.Add(new PointF((float)(box[0] + step), (float)btm[0])); + + // foreach width element + for (int i = 1; i < iWidth; i++) + { + // prev or enlarge + if (top[i] == double.MinValue) top[i] = top[i - 1]; else if (enlarge > 0) top[i] += enlarge; + if (btm[i] == double.MaxValue) btm[i] = btm[i - 1]; else if (enlarge > 0) btm[i] -= enlarge; + + // wedge off + if ((top[i] <= btm[i - 1])) top[i] = btm[i - 1] + (enlarge > 0 ? enlarge : sdiv2); + if ((btm[i] >= top[i - 1])) btm[i] = top[i - 1] - (enlarge > 0 ? enlarge : sdiv2); + if ((top[i] == btm[i])) { top[i] += (enlarge > 0 ? enlarge : sdiv2); btm[i] -= (enlarge > 0 ? enlarge : sdiv2); }; + + // add lines for max + if (top[i] != top[i - 1]) resultTop.Add(new PointF((float)(box[0] + (double)i * step), (float)top[i])); + resultTop.Add(new PointF((float)(box[0] + (double)(i + 1) * step), (float)top[i])); + + // add lines for min + if (btm[i] != btm[i - 1]) resultBtm.Add(new PointF((float)(box[0] + (double)i * step), (float)btm[i])); + resultBtm.Add(new PointF((float)(box[0] + (double)(i + 1) * step), (float)btm[i])); + }; + + List result = new List(); + result.AddRange(resultTop); + resultBtm.Reverse(); + result.AddRange(resultBtm); + + return result.ToArray(); + } + + public static PointF[] EnlargePolygon(PointF[] poly, float offset) + { + if (offset == 0) return null; + if (poly == null) return null; + if (poly.Length < 3) return null; + PointF[] pll = new PointF[poly.Length + 1]; + for (int i = 0; i < poly.Length; i++) pll[i] = poly[i]; + pll[pll.Length - 1] = poly[0]; // closed line + + // get poly from line buffer + PolyLineBuffer.PolyLineBufferCreator.PolyResult pr = PolyLineBuffer.PolyLineBufferCreator.GetLineBufferPolygon(pll, Math.Abs(offset), true, true, null, offset >= 0 ? 1 : 2); // + + if (offset < 0) // reduce + { + List theSame = new List(); + Dictionary lpc = new Dictionary(); + if ((pr.polygon != null) && (pr.polygon.Length > 0)) + { + for (int i = 0; i < pr.polygon.Length; i++) + { + if (!lpc.ContainsKey(pr.polygon[i])) + lpc.Add(pr.polygon[i], new int[] { i }); + else + { + List ia = new List(lpc[pr.polygon[i]]); + ia.Add(i); + lpc[pr.polygon[i]] = ia.ToArray(); + theSame.Add(ia.ToArray()); + }; + }; + }; + if (theSame.Count > 0) + { + // outer polygon // last polygon always bigger + //List outer = new List(); + //for (int i = 0; i < theSame[theSame.Count - 1][0]; i++) outer.Add(pr.polygon[i]); + //for (int i = theSame[theSame.Count - 1][1]; i < pr.polygon.Length; i++) outer.Add(pr.polygon[i]); + //return outer.ToArray(); + + // inner polygon + List inner = new List(); + for (int i = theSame[0][0]; i < theSame[0][1]; i++) inner.Add(pr.polygon[i]); + return inner.ToArray(); + }; + }; + + return pr.polygon; // enlarge only + } + } +} diff --git a/SOLVER/dkxce.Utils.CloudBorder/CuttingGeometries.dll b/SOLVER/dkxce.Utils.CloudBorder/CuttingGeometries.dll new file mode 100644 index 0000000000000000000000000000000000000000..0909fd1e112243f728c61ff9c8be77a278ad0135 GIT binary patch literal 28672 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 ISE+%22DnXvhX4Qo literal 0 HcmV?d00001 diff --git a/SOLVER/dkxce.Utils.CloudBorder/FormTest1.cs b/SOLVER/dkxce.Utils.CloudBorder/FormTest1.cs new file mode 100644 index 0000000..be06b38 --- /dev/null +++ b/SOLVER/dkxce.Utils.CloudBorder/FormTest1.cs @@ -0,0 +1,92 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.Text; +using System.Windows.Forms; + +namespace WA_TEST_001 +{ + public partial class Form1 : Form + { + private List points = new List(); + private double[] box = new double[4] { double.MaxValue, double.MaxValue, double.MinValue, double.MinValue }; + + public Form1() + { + InitializeComponent(); + } + + private void Form1_MouseClick(object sender, MouseEventArgs e) + { + points.Add(new PointF(e.X, e.Y)); + ReDraw(); + } + + private void button1_Click(object sender, EventArgs e) + { + points.Clear(); + ReDraw(); + } + + private void ReDraw() + { + Graphics g = Graphics.FromHwnd(this.Handle); + g.FillRectangle(new SolidBrush(Color.White), this.ClientRectangle); + box = new double[4] { double.MaxValue, double.MaxValue, double.MinValue, double.MinValue }; + foreach (PointF p in points) + { + if (p.X < box[0]) box[0] = p.X; + if (p.Y < box[1]) box[1] = p.Y; + if (p.X > box[2]) box[2] = p.X; + if (p.Y > box[3]) box[3] = p.Y; + g.DrawEllipse(new Pen(new SolidBrush(Color.Black)), new Rectangle((int)p.X - 2, (int)p.Y - 2, 4, 4)); + }; + PointF[] line = dkxce.Utils.CloudBorder.GetCloudBorder(box, points.ToArray(), (double)numericUpDown1.Value, (double)numericUpDown2.Value); + PointF[] enll = dkxce.Utils.CloudBorder.EnlargePolygon(line, (float)numericUpDown3.Value); + if (line != null) + { + int mdl = line.Length / 2; + Pen pen1 = new Pen(new SolidBrush(Color.Red), 2); + Pen pen2 = new Pen(new SolidBrush(Color.Blue), 2); + for (int i = 1; i < line.Length; i++) + { + Point p1 = new Point((int)line[i - 1].X, (int)line[i - 1].Y); + Point p2 = new Point((int)line[i].X, (int)line[i].Y); + g.DrawLine(i < mdl ? pen1 : pen2, p1, p2); + }; + g.DrawLine(pen2, new Point((int)line[line.Length - 1].X, (int)line[line.Length - 1].Y), new Point((int)line[0].X, (int)line[0].Y)); + }; + if ((enll != null) && (enll.Length != 0)) + { + for (int i = 1; i < enll.Length; i++) + { + Point p1 = new Point((int)enll[i - 1].X, (int)enll[i - 1].Y); + Point p2 = new Point((int)enll[i].X, (int)enll[i].Y); + g.DrawLine(new Pen(new SolidBrush(Color.Green), 2), p1, p2); + }; + g.DrawLine(new Pen(new SolidBrush(Color.Green), 2), new Point((int)enll[enll.Length - 1].X, (int)enll[enll.Length - 1].Y), new Point((int)enll[0].X, (int)enll[0].Y)); + }; + g.Dispose(); + } + + private void numericUpDown1_ValueChanged(object sender, EventArgs e) + { + ReDraw(); + } + + private void numericUpDown2_ValueChanged(object sender, EventArgs e) + { + ReDraw(); + } + + private void numericUpDown3_ValueChanged(object sender, EventArgs e) + { + ReDraw(); + } + } + + +} \ No newline at end of file diff --git a/SOLVER/dkxce.Utils.CloudBorder/PolyCreatorClipper.cs b/SOLVER/dkxce.Utils.CloudBorder/PolyCreatorClipper.cs new file mode 100644 index 0000000..33bc207 --- /dev/null +++ b/SOLVER/dkxce.Utils.CloudBorder/PolyCreatorClipper.cs @@ -0,0 +1,4886 @@ +//use_int32: When enabled 32bit ints are used instead of 64bit ints. This +//improve performance but coordinate values are limited to the range +/- 46340 +//#define use_int32 + +//use_xyz: adds a Z member to IntPoint. Adds a minor cost to performance. +//#define use_xyz + +//use_lines: Enables open path clipping. Adds a very minor cost to performance. +#define use_lines + +using System; +using System.Collections.Generic; +using System.Text; +using System.IO; +using System.Windows.Forms; + +namespace ClipperLib +{ + #if use_int32 + using cInt = Int32; + #else + using cInt = Int64; + #endif + + using Path = List; + using Paths = List>; + + public struct DoublePoint + { + public double X; + public double Y; + + public DoublePoint(double x, double y) + { + this.X = x; this.Y = y; + } + public DoublePoint(DoublePoint dp) + { + this.X = dp.X; this.Y = dp.Y; + } + public DoublePoint(IntPoint ip) + { + this.X = ip.X; this.Y = ip.Y; + } + }; + + + //------------------------------------------------------------------------------ + // PolyTree & PolyNode classes + //------------------------------------------------------------------------------ + + public class PolyTree : PolyNode + { + internal List m_AllPolys = new List(); + + //The GC probably handles this cleanup more efficiently ... + //~PolyTree(){Clear();} + + public void Clear() + { + for (int i = 0; i < m_AllPolys.Count; i++) + m_AllPolys[i] = null; + m_AllPolys.Clear(); + m_Childs.Clear(); + } + + public PolyNode GetFirst() + { + if (m_Childs.Count > 0) + return m_Childs[0]; + else + return null; + } + + public int Total + { + get + { + int result = m_AllPolys.Count; + //with negative offsets, ignore the hidden outer polygon ... + if (result > 0 && m_Childs[0] != m_AllPolys[0]) result--; + return result; + } + } + + } + + public class PolyNode + { + internal PolyNode m_Parent; + internal Path m_polygon = new Path(); + internal int m_Index; + internal JoinType m_jointype; + internal EndType m_endtype; + internal List m_Childs = new List(); + + private bool IsHoleNode() + { + bool result = true; + PolyNode node = m_Parent; + while (node != null) + { + result = !result; + node = node.m_Parent; + } + return result; + } + + public int ChildCount + { + get { return m_Childs.Count; } + } + + public Path Contour + { + get { return m_polygon; } + } + + internal void AddChild(PolyNode Child) + { + int cnt = m_Childs.Count; + m_Childs.Add(Child); + Child.m_Parent = this; + Child.m_Index = cnt; + } + + public PolyNode GetNext() + { + if (m_Childs.Count > 0) + return m_Childs[0]; + else + return GetNextSiblingUp(); + } + + internal PolyNode GetNextSiblingUp() + { + if (m_Parent == null) + return null; + else if (m_Index == m_Parent.m_Childs.Count - 1) + return m_Parent.GetNextSiblingUp(); + else + return m_Parent.m_Childs[m_Index + 1]; + } + + public List Childs + { + get { return m_Childs; } + } + + public PolyNode Parent + { + get { return m_Parent; } + } + + public bool IsHole + { + get { return IsHoleNode(); } + } + + public bool IsOpen; + } + + + //------------------------------------------------------------------------------ + // Int128 struct (enables safe math on signed 64bit integers) + // eg Int128 val1((Int64)9223372036854775807); //ie 2^63 -1 + // Int128 val2((Int64)9223372036854775807); + // Int128 val3 = val1 * val2; + // val3.ToString => "85070591730234615847396907784232501249" (8.5e+37) + //------------------------------------------------------------------------------ + + internal struct Int128 + { + private Int64 hi; + private UInt64 lo; + + public Int128(Int64 _lo) + { + lo = (UInt64)_lo; + if (_lo < 0) hi = -1; + else hi = 0; + } + + public Int128(Int64 _hi, UInt64 _lo) + { + lo = _lo; + hi = _hi; + } + + public Int128(Int128 val) + { + hi = val.hi; + lo = val.lo; + } + + public bool IsNegative() + { + return hi < 0; + } + + public static bool operator ==(Int128 val1, Int128 val2) + { + if ((object)val1 == (object)val2) return true; + else if ((object)val1 == null || (object)val2 == null) return false; + return (val1.hi == val2.hi && val1.lo == val2.lo); + } + + public static bool operator !=(Int128 val1, Int128 val2) + { + return !(val1 == val2); + } + + public override bool Equals(System.Object obj) + { + if (obj == null || !(obj is Int128)) + return false; + Int128 i128 = (Int128)obj; + return (i128.hi == hi && i128.lo == lo); + } + + public override int GetHashCode() + { + return hi.GetHashCode() ^ lo.GetHashCode(); + } + + public static bool operator >(Int128 val1, Int128 val2) + { + if (val1.hi != val2.hi) + return val1.hi > val2.hi; + else + return val1.lo > val2.lo; + } + + public static bool operator <(Int128 val1, Int128 val2) + { + if (val1.hi != val2.hi) + return val1.hi < val2.hi; + else + return val1.lo < val2.lo; + } + + public static Int128 operator +(Int128 lhs, Int128 rhs) + { + lhs.hi += rhs.hi; + lhs.lo += rhs.lo; + if (lhs.lo < rhs.lo) lhs.hi++; + return lhs; + } + + public static Int128 operator -(Int128 lhs, Int128 rhs) + { + return lhs + -rhs; + } + + public static Int128 operator -(Int128 val) + { + if (val.lo == 0) + return new Int128(-val.hi, 0); + else + return new Int128(~val.hi, ~val.lo + 1); + } + + public static explicit operator double(Int128 val) + { + const double shift64 = 18446744073709551616.0; //2^64 + if (val.hi < 0) + { + if (val.lo == 0) + return (double)val.hi * shift64; + else + return -(double)(~val.lo + ~val.hi * shift64); + } + else + return (double)(val.lo + val.hi * shift64); + } + + //nb: Constructing two new Int128 objects every time we want to multiply longs + //is slow. So, although calling the Int128Mul method doesn't look as clean, the + //code runs significantly faster than if we'd used the * operator. + + public static Int128 Int128Mul(Int64 lhs, Int64 rhs) + { + bool negate = (lhs < 0) != (rhs < 0); + if (lhs < 0) lhs = -lhs; + if (rhs < 0) rhs = -rhs; + UInt64 int1Hi = (UInt64)lhs >> 32; + UInt64 int1Lo = (UInt64)lhs & 0xFFFFFFFF; + UInt64 int2Hi = (UInt64)rhs >> 32; + UInt64 int2Lo = (UInt64)rhs & 0xFFFFFFFF; + + //nb: see comments in clipper.pas + UInt64 a = int1Hi * int2Hi; + UInt64 b = int1Lo * int2Lo; + UInt64 c = int1Hi * int2Lo + int1Lo * int2Hi; + + UInt64 lo; + Int64 hi; + hi = (Int64)(a + (c >> 32)); + + unchecked { lo = (c << 32) + b; } + if (lo < b) hi++; + Int128 result = new Int128(hi, lo); + return negate ? -result : result; + } + + }; + + //------------------------------------------------------------------------------ + //------------------------------------------------------------------------------ + + public struct IntPoint + { + public cInt X; + public cInt Y; +#if use_xyz + public cInt Z; + + public IntPoint(cInt x, cInt y, cInt z = 0) + { + this.X = x; this.Y = y; this.Z = z; + } + + public IntPoint(double x, double y, double z = 0) + { + this.X = (cInt)x; this.Y = (cInt)y; this.Z = (cInt)z; + } + + public IntPoint(DoublePoint dp) + { + this.X = (cInt)dp.X; this.Y = (cInt)dp.Y; this.Z = 0; + } + + public IntPoint(IntPoint pt) + { + this.X = pt.X; this.Y = pt.Y; this.Z = pt.Z; + } +#else + public IntPoint(cInt X, cInt Y) + { + this.X = X; this.Y = Y; + } + public IntPoint(double x, double y) + { + this.X = (cInt)x; this.Y = (cInt)y; + } + + public IntPoint(IntPoint pt) + { + this.X = pt.X; this.Y = pt.Y; + } +#endif + + public static bool operator ==(IntPoint a, IntPoint b) + { + return a.X == b.X && a.Y == b.Y; + } + + public static bool operator !=(IntPoint a, IntPoint b) + { + return a.X != b.X || a.Y != b.Y; + } + + public override bool Equals(object obj) + { + if (obj == null) return false; + if (obj is IntPoint) + { + IntPoint a = (IntPoint)obj; + return (X == a.X) && (Y == a.Y); + } + else return false; + } + + public override int GetHashCode() + { + //simply prevents a compiler warning + return base.GetHashCode(); + } + + }// end struct IntPoint + + public struct IntRect + { + public cInt left; + public cInt top; + public cInt right; + public cInt bottom; + + public IntRect(cInt l, cInt t, cInt r, cInt b) + { + this.left = l; this.top = t; + this.right = r; this.bottom = b; + } + public IntRect(IntRect ir) + { + this.left = ir.left; this.top = ir.top; + this.right = ir.right; this.bottom = ir.bottom; + } + } + + public enum ClipType { ctIntersection, ctUnion, ctDifference, ctXor }; + public enum PolyType { ptSubject, ptClip }; + + //By far the most widely used winding rules for polygon filling are + //EvenOdd & NonZero (GDI, GDI+, XLib, OpenGL, Cairo, AGG, Quartz, SVG, Gr32) + //Others rules include Positive, Negative and ABS_GTR_EQ_TWO (only in OpenGL) + //see http://glprogramming.com/red/chapter11.html + public enum PolyFillType { pftEvenOdd, pftNonZero, pftPositive, pftNegative }; + + public enum JoinType { jtSquare, jtRound, jtMiter }; + public enum EndType { etClosedPolygon, etClosedLine, etOpenButt, etOpenSquare, etOpenRound }; + + internal enum EdgeSide {esLeft, esRight}; + internal enum Direction {dRightToLeft, dLeftToRight}; + + internal class TEdge { + internal IntPoint Bot; + internal IntPoint Curr; //current (updated for every new scanbeam) + internal IntPoint Top; + internal IntPoint Delta; + internal double Dx; + internal PolyType PolyTyp; + internal EdgeSide Side; //side only refers to current side of solution poly + internal int WindDelta; //1 or -1 depending on winding direction + internal int WindCnt; + internal int WindCnt2; //winding count of the opposite polytype + internal int OutIdx; + internal TEdge Next; + internal TEdge Prev; + internal TEdge NextInLML; + internal TEdge NextInAEL; + internal TEdge PrevInAEL; + internal TEdge NextInSEL; + internal TEdge PrevInSEL; + }; + + public class IntersectNode + { + internal TEdge Edge1; + internal TEdge Edge2; + internal IntPoint Pt; + }; + + public class MyIntersectNodeSort : IComparer + { + public int Compare(IntersectNode node1, IntersectNode node2) + { + cInt i = node2.Pt.Y - node1.Pt.Y; + if (i > 0) return 1; + else if (i < 0) return -1; + else return 0; + } + } + + internal class LocalMinima + { + internal cInt Y; + internal TEdge LeftBound; + internal TEdge RightBound; + internal LocalMinima Next; + }; + + internal class Scanbeam + { + internal cInt Y; + internal Scanbeam Next; + }; + + internal class Maxima + { + internal cInt X; + internal Maxima Next; + internal Maxima Prev; + }; + + //OutRec: contains a path in the clipping solution. Edges in the AEL will + //carry a pointer to an OutRec when they are part of the clipping solution. + internal class OutRec + { + internal int Idx; + internal bool IsHole; + internal bool IsOpen; + internal OutRec FirstLeft; //see comments in clipper.pas + internal OutPt Pts; + internal OutPt BottomPt; + internal PolyNode PolyNode; + }; + + internal class OutPt + { + internal int Idx; + internal IntPoint Pt; + internal OutPt Next; + internal OutPt Prev; + }; + + internal class Join + { + internal OutPt OutPt1; + internal OutPt OutPt2; + internal IntPoint OffPt; + }; + + public class ClipperBase + { + internal const double horizontal = -3.4E+38; + internal const int Skip = -2; + internal const int Unassigned = -1; + internal const double tolerance = 1.0E-20; + internal static bool near_zero(double val){return (val > -tolerance) && (val < tolerance);} + +#if use_int32 + public const cInt loRange = 0x7FFF; + public const cInt hiRange = 0x7FFF; +#else + public const cInt loRange = 0x3FFFFFFF; + public const cInt hiRange = 0x3FFFFFFFFFFFFFFFL; +#endif + + internal LocalMinima m_MinimaList; + internal LocalMinima m_CurrentLM; + internal List> m_edges = new List>(); + internal Scanbeam m_Scanbeam; + internal List m_PolyOuts; + internal TEdge m_ActiveEdges; + internal bool m_UseFullRange; + internal bool m_HasOpenPaths; + + //------------------------------------------------------------------------------ + + public bool PreserveCollinear; + //------------------------------------------------------------------------------ + + public void Swap(ref cInt val1, ref cInt val2) + { + cInt tmp = val1; + val1 = val2; + val2 = tmp; + } + //------------------------------------------------------------------------------ + + internal static bool IsHorizontal(TEdge e) + { + return e.Delta.Y == 0; + } + //------------------------------------------------------------------------------ + + internal bool PointIsVertex(IntPoint pt, OutPt pp) + { + OutPt pp2 = pp; + do + { + if (pp2.Pt == pt) return true; + pp2 = pp2.Next; + } + while (pp2 != pp); + return false; + } + //------------------------------------------------------------------------------ + + internal bool PointOnLineSegment(IntPoint pt, + IntPoint linePt1, IntPoint linePt2, bool UseFullRange) + { + if (UseFullRange) + return ((pt.X == linePt1.X) && (pt.Y == linePt1.Y)) || + ((pt.X == linePt2.X) && (pt.Y == linePt2.Y)) || + (((pt.X > linePt1.X) == (pt.X < linePt2.X)) && + ((pt.Y > linePt1.Y) == (pt.Y < linePt2.Y)) && + ((Int128.Int128Mul((pt.X - linePt1.X), (linePt2.Y - linePt1.Y)) == + Int128.Int128Mul((linePt2.X - linePt1.X), (pt.Y - linePt1.Y))))); + else + return ((pt.X == linePt1.X) && (pt.Y == linePt1.Y)) || + ((pt.X == linePt2.X) && (pt.Y == linePt2.Y)) || + (((pt.X > linePt1.X) == (pt.X < linePt2.X)) && + ((pt.Y > linePt1.Y) == (pt.Y < linePt2.Y)) && + ((pt.X - linePt1.X) * (linePt2.Y - linePt1.Y) == + (linePt2.X - linePt1.X) * (pt.Y - linePt1.Y))); + } + //------------------------------------------------------------------------------ + + internal bool PointOnPolygon(IntPoint pt, OutPt pp, bool UseFullRange) + { + OutPt pp2 = pp; + while (true) + { + if (PointOnLineSegment(pt, pp2.Pt, pp2.Next.Pt, UseFullRange)) + return true; + pp2 = pp2.Next; + if (pp2 == pp) break; + } + return false; + } + //------------------------------------------------------------------------------ + + internal static bool SlopesEqual(TEdge e1, TEdge e2, bool UseFullRange) + { + if (UseFullRange) + return Int128.Int128Mul(e1.Delta.Y, e2.Delta.X) == + Int128.Int128Mul(e1.Delta.X, e2.Delta.Y); + else return (cInt)(e1.Delta.Y) * (e2.Delta.X) == + (cInt)(e1.Delta.X) * (e2.Delta.Y); + } + //------------------------------------------------------------------------------ + + internal static bool SlopesEqual(IntPoint pt1, IntPoint pt2, + IntPoint pt3, bool UseFullRange) + { + if (UseFullRange) + return Int128.Int128Mul(pt1.Y - pt2.Y, pt2.X - pt3.X) == + Int128.Int128Mul(pt1.X - pt2.X, pt2.Y - pt3.Y); + else return + (cInt)(pt1.Y - pt2.Y) * (pt2.X - pt3.X) - (cInt)(pt1.X - pt2.X) * (pt2.Y - pt3.Y) == 0; + } + //------------------------------------------------------------------------------ + + internal static bool SlopesEqual(IntPoint pt1, IntPoint pt2, + IntPoint pt3, IntPoint pt4, bool UseFullRange) + { + if (UseFullRange) + return Int128.Int128Mul(pt1.Y - pt2.Y, pt3.X - pt4.X) == + Int128.Int128Mul(pt1.X - pt2.X, pt3.Y - pt4.Y); + else return + (cInt)(pt1.Y - pt2.Y) * (pt3.X - pt4.X) - (cInt)(pt1.X - pt2.X) * (pt3.Y - pt4.Y) == 0; + } + //------------------------------------------------------------------------------ + + internal ClipperBase() //constructor (nb: no external instantiation) + { + m_MinimaList = null; + m_CurrentLM = null; + m_UseFullRange = false; + m_HasOpenPaths = false; + } + //------------------------------------------------------------------------------ + + public virtual void Clear() + { + DisposeLocalMinimaList(); + for (int i = 0; i < m_edges.Count; ++i) + { + for (int j = 0; j < m_edges[i].Count; ++j) m_edges[i][j] = null; + m_edges[i].Clear(); + } + m_edges.Clear(); + m_UseFullRange = false; + m_HasOpenPaths = false; + } + //------------------------------------------------------------------------------ + + private void DisposeLocalMinimaList() + { + while( m_MinimaList != null ) + { + LocalMinima tmpLm = m_MinimaList.Next; + m_MinimaList = null; + m_MinimaList = tmpLm; + } + m_CurrentLM = null; + } + //------------------------------------------------------------------------------ + + void RangeTest(IntPoint Pt, ref bool useFullRange) + { + if (useFullRange) + { + if (Pt.X > hiRange || Pt.Y > hiRange || -Pt.X > hiRange || -Pt.Y > hiRange) + throw new ClipperException("Coordinate outside allowed range"); + } + else if (Pt.X > loRange || Pt.Y > loRange || -Pt.X > loRange || -Pt.Y > loRange) + { + useFullRange = true; + RangeTest(Pt, ref useFullRange); + } + } + //------------------------------------------------------------------------------ + + private void InitEdge(TEdge e, TEdge eNext, + TEdge ePrev, IntPoint pt) + { + e.Next = eNext; + e.Prev = ePrev; + e.Curr = pt; + e.OutIdx = Unassigned; + } + //------------------------------------------------------------------------------ + + private void InitEdge2(TEdge e, PolyType polyType) + { + if (e.Curr.Y >= e.Next.Curr.Y) + { + e.Bot = e.Curr; + e.Top = e.Next.Curr; + } + else + { + e.Top = e.Curr; + e.Bot = e.Next.Curr; + } + SetDx(e); + e.PolyTyp = polyType; + } + //------------------------------------------------------------------------------ + + private TEdge FindNextLocMin(TEdge E) + { + TEdge E2; + for (;;) + { + while (E.Bot != E.Prev.Bot || E.Curr == E.Top) E = E.Next; + if (E.Dx != horizontal && E.Prev.Dx != horizontal) break; + while (E.Prev.Dx == horizontal) E = E.Prev; + E2 = E; + while (E.Dx == horizontal) E = E.Next; + if (E.Top.Y == E.Prev.Bot.Y) continue; //ie just an intermediate horz. + if (E2.Prev.Bot.X < E.Bot.X) E = E2; + break; + } + return E; + } + //------------------------------------------------------------------------------ + + private TEdge ProcessBound(TEdge E, bool LeftBoundIsForward) + { + TEdge EStart, Result = E; + TEdge Horz; + + if (Result.OutIdx == Skip) + { + //check if there are edges beyond the skip edge in the bound and if so + //create another LocMin and calling ProcessBound once more ... + E = Result; + if (LeftBoundIsForward) + { + while (E.Top.Y == E.Next.Bot.Y) E = E.Next; + while (E != Result && E.Dx == horizontal) E = E.Prev; + } + else + { + while (E.Top.Y == E.Prev.Bot.Y) E = E.Prev; + while (E != Result && E.Dx == horizontal) E = E.Next; + } + if (E == Result) + { + if (LeftBoundIsForward) Result = E.Next; + else Result = E.Prev; + } + else + { + //there are more edges in the bound beyond result starting with E + if (LeftBoundIsForward) + E = Result.Next; + else + E = Result.Prev; + LocalMinima locMin = new LocalMinima(); + locMin.Next = null; + locMin.Y = E.Bot.Y; + locMin.LeftBound = null; + locMin.RightBound = E; + E.WindDelta = 0; + Result = ProcessBound(E, LeftBoundIsForward); + InsertLocalMinima(locMin); + } + return Result; + } + + if (E.Dx == horizontal) + { + //We need to be careful with open paths because this may not be a + //true local minima (ie E may be following a skip edge). + //Also, consecutive horz. edges may start heading left before going right. + if (LeftBoundIsForward) EStart = E.Prev; + else EStart = E.Next; + if (EStart.Dx == horizontal) //ie an adjoining horizontal skip edge + { + if (EStart.Bot.X != E.Bot.X && EStart.Top.X != E.Bot.X) + ReverseHorizontal(E); + } + else if (EStart.Bot.X != E.Bot.X) + ReverseHorizontal(E); + } + + EStart = E; + if (LeftBoundIsForward) + { + while (Result.Top.Y == Result.Next.Bot.Y && Result.Next.OutIdx != Skip) + Result = Result.Next; + if (Result.Dx == horizontal && Result.Next.OutIdx != Skip) + { + //nb: at the top of a bound, horizontals are added to the bound + //only when the preceding edge attaches to the horizontal's left vertex + //unless a Skip edge is encountered when that becomes the top divide + Horz = Result; + while (Horz.Prev.Dx == horizontal) Horz = Horz.Prev; + if (Horz.Prev.Top.X > Result.Next.Top.X) Result = Horz.Prev; + } + while (E != Result) + { + E.NextInLML = E.Next; + if (E.Dx == horizontal && E != EStart && E.Bot.X != E.Prev.Top.X) + ReverseHorizontal(E); + E = E.Next; + } + if (E.Dx == horizontal && E != EStart && E.Bot.X != E.Prev.Top.X) + ReverseHorizontal(E); + Result = Result.Next; //move to the edge just beyond current bound + } + else + { + while (Result.Top.Y == Result.Prev.Bot.Y && Result.Prev.OutIdx != Skip) + Result = Result.Prev; + if (Result.Dx == horizontal && Result.Prev.OutIdx != Skip) + { + Horz = Result; + while (Horz.Next.Dx == horizontal) Horz = Horz.Next; + if (Horz.Next.Top.X == Result.Prev.Top.X || + Horz.Next.Top.X > Result.Prev.Top.X) Result = Horz.Next; + } + + while (E != Result) + { + E.NextInLML = E.Prev; + if (E.Dx == horizontal && E != EStart && E.Bot.X != E.Next.Top.X) + ReverseHorizontal(E); + E = E.Prev; + } + if (E.Dx == horizontal && E != EStart && E.Bot.X != E.Next.Top.X) + ReverseHorizontal(E); + Result = Result.Prev; //move to the edge just beyond current bound + } + return Result; + } + //------------------------------------------------------------------------------ + + + public bool AddPath(Path pg, PolyType polyType, bool Closed) + { +#if use_lines + if (!Closed && polyType == PolyType.ptClip) + throw new ClipperException("AddPath: Open paths must be subject."); +#else + if (!Closed) + throw new ClipperException("AddPath: Open paths have been disabled."); +#endif + + int highI = (int)pg.Count - 1; + if (Closed) while (highI > 0 && (pg[highI] == pg[0])) --highI; + while (highI > 0 && (pg[highI] == pg[highI - 1])) --highI; + if ((Closed && highI < 2) || (!Closed && highI < 1)) return false; + + //create a new edge array ... + List edges = new List(highI+1); + for (int i = 0; i <= highI; i++) edges.Add(new TEdge()); + + bool IsFlat = true; + + //1. Basic (first) edge initialization ... + edges[1].Curr = pg[1]; + RangeTest(pg[0], ref m_UseFullRange); + RangeTest(pg[highI], ref m_UseFullRange); + InitEdge(edges[0], edges[1], edges[highI], pg[0]); + InitEdge(edges[highI], edges[0], edges[highI - 1], pg[highI]); + for (int i = highI - 1; i >= 1; --i) + { + RangeTest(pg[i], ref m_UseFullRange); + InitEdge(edges[i], edges[i + 1], edges[i - 1], pg[i]); + } + TEdge eStart = edges[0]; + + //2. Remove duplicate vertices, and (when closed) collinear edges ... + TEdge E = eStart, eLoopStop = eStart; + for (;;) + { + //nb: allows matching start and end points when not Closed ... + if (E.Curr == E.Next.Curr && (Closed || E.Next != eStart)) + { + if (E == E.Next) break; + if (E == eStart) eStart = E.Next; + E = RemoveEdge(E); + eLoopStop = E; + continue; + } + if (E.Prev == E.Next) + break; //only two vertices + else if (Closed && + SlopesEqual(E.Prev.Curr, E.Curr, E.Next.Curr, m_UseFullRange) && + (!PreserveCollinear || + !Pt2IsBetweenPt1AndPt3(E.Prev.Curr, E.Curr, E.Next.Curr))) + { + //Collinear edges are allowed for open paths but in closed paths + //the default is to merge adjacent collinear edges into a single edge. + //However, if the PreserveCollinear property is enabled, only overlapping + //collinear edges (ie spikes) will be removed from closed paths. + if (E == eStart) eStart = E.Next; + E = RemoveEdge(E); + E = E.Prev; + eLoopStop = E; + continue; + } + E = E.Next; + if ((E == eLoopStop) || (!Closed && E.Next == eStart)) break; + } + + if ((!Closed && (E == E.Next)) || (Closed && (E.Prev == E.Next))) + return false; + + if (!Closed) + { + m_HasOpenPaths = true; + eStart.Prev.OutIdx = Skip; + } + + //3. Do second stage of edge initialization ... + E = eStart; + do + { + InitEdge2(E, polyType); + E = E.Next; + if (IsFlat && E.Curr.Y != eStart.Curr.Y) IsFlat = false; + } + while (E != eStart); + + //4. Finally, add edge bounds to LocalMinima list ... + + //Totally flat paths must be handled differently when adding them + //to LocalMinima list to avoid endless loops etc ... + if (IsFlat) + { + if (Closed) return false; + E.Prev.OutIdx = Skip; + LocalMinima locMin = new LocalMinima(); + locMin.Next = null; + locMin.Y = E.Bot.Y; + locMin.LeftBound = null; + locMin.RightBound = E; + locMin.RightBound.Side = EdgeSide.esRight; + locMin.RightBound.WindDelta = 0; + for ( ; ; ) + { + if (E.Bot.X != E.Prev.Top.X) ReverseHorizontal(E); + if (E.Next.OutIdx == Skip) break; + E.NextInLML = E.Next; + E = E.Next; + } + InsertLocalMinima(locMin); + m_edges.Add(edges); + return true; + } + + m_edges.Add(edges); + bool leftBoundIsForward; + TEdge EMin = null; + + //workaround to avoid an endless loop in the while loop below when + //open paths have matching start and end points ... + if (E.Prev.Bot == E.Prev.Top) E = E.Next; + + for (;;) + { + E = FindNextLocMin(E); + if (E == EMin) break; + else if (EMin == null) EMin = E; + + //E and E.Prev now share a local minima (left aligned if horizontal). + //Compare their slopes to find which starts which bound ... + LocalMinima locMin = new LocalMinima(); + locMin.Next = null; + locMin.Y = E.Bot.Y; + if (E.Dx < E.Prev.Dx) + { + locMin.LeftBound = E.Prev; + locMin.RightBound = E; + leftBoundIsForward = false; //Q.nextInLML = Q.prev + } else + { + locMin.LeftBound = E; + locMin.RightBound = E.Prev; + leftBoundIsForward = true; //Q.nextInLML = Q.next + } + locMin.LeftBound.Side = EdgeSide.esLeft; + locMin.RightBound.Side = EdgeSide.esRight; + + if (!Closed) locMin.LeftBound.WindDelta = 0; + else if (locMin.LeftBound.Next == locMin.RightBound) + locMin.LeftBound.WindDelta = -1; + else locMin.LeftBound.WindDelta = 1; + locMin.RightBound.WindDelta = -locMin.LeftBound.WindDelta; + + E = ProcessBound(locMin.LeftBound, leftBoundIsForward); + if (E.OutIdx == Skip) E = ProcessBound(E, leftBoundIsForward); + + TEdge E2 = ProcessBound(locMin.RightBound, !leftBoundIsForward); + if (E2.OutIdx == Skip) E2 = ProcessBound(E2, !leftBoundIsForward); + + if (locMin.LeftBound.OutIdx == Skip) + locMin.LeftBound = null; + else if (locMin.RightBound.OutIdx == Skip) + locMin.RightBound = null; + InsertLocalMinima(locMin); + if (!leftBoundIsForward) E = E2; + } + return true; + + } + //------------------------------------------------------------------------------ + + public bool AddPaths(Paths ppg, PolyType polyType, bool closed) + { + bool result = false; + for (int i = 0; i < ppg.Count; ++i) + if (AddPath(ppg[i], polyType, closed)) result = true; + return result; + } + //------------------------------------------------------------------------------ + + internal bool Pt2IsBetweenPt1AndPt3(IntPoint pt1, IntPoint pt2, IntPoint pt3) + { + if ((pt1 == pt3) || (pt1 == pt2) || (pt3 == pt2)) return false; + else if (pt1.X != pt3.X) return (pt2.X > pt1.X) == (pt2.X < pt3.X); + else return (pt2.Y > pt1.Y) == (pt2.Y < pt3.Y); + } + //------------------------------------------------------------------------------ + + TEdge RemoveEdge(TEdge e) + { + //removes e from double_linked_list (but without removing from memory) + e.Prev.Next = e.Next; + e.Next.Prev = e.Prev; + TEdge result = e.Next; + e.Prev = null; //flag as removed (see ClipperBase.Clear) + return result; + } + //------------------------------------------------------------------------------ + + private void SetDx(TEdge e) + { + e.Delta.X = (e.Top.X - e.Bot.X); + e.Delta.Y = (e.Top.Y - e.Bot.Y); + if (e.Delta.Y == 0) e.Dx = horizontal; + else e.Dx = (double)(e.Delta.X) / (e.Delta.Y); + } + //--------------------------------------------------------------------------- + + private void InsertLocalMinima(LocalMinima newLm) + { + if( m_MinimaList == null ) + { + m_MinimaList = newLm; + } + else if( newLm.Y >= m_MinimaList.Y ) + { + newLm.Next = m_MinimaList; + m_MinimaList = newLm; + } else + { + LocalMinima tmpLm = m_MinimaList; + while( tmpLm.Next != null && ( newLm.Y < tmpLm.Next.Y ) ) + tmpLm = tmpLm.Next; + newLm.Next = tmpLm.Next; + tmpLm.Next = newLm; + } + } + //------------------------------------------------------------------------------ + + internal Boolean PopLocalMinima(cInt Y, out LocalMinima current) + { + current = m_CurrentLM; + if (m_CurrentLM != null && m_CurrentLM.Y == Y) + { + m_CurrentLM = m_CurrentLM.Next; + return true; + } + return false; + } + //------------------------------------------------------------------------------ + + private void ReverseHorizontal(TEdge e) + { + //swap horizontal edges' top and bottom x's so they follow the natural + //progression of the bounds - ie so their xbots will align with the + //adjoining lower edge. [Helpful in the ProcessHorizontal() method.] + Swap(ref e.Top.X, ref e.Bot.X); +#if use_xyz + Swap(ref e.Top.Z, ref e.Bot.Z); +#endif + } + //------------------------------------------------------------------------------ + + internal virtual void Reset() + { + m_CurrentLM = m_MinimaList; + if (m_CurrentLM == null) return; //ie nothing to process + + //reset all edges ... + m_Scanbeam = null; + LocalMinima lm = m_MinimaList; + while (lm != null) + { + InsertScanbeam(lm.Y); + TEdge e = lm.LeftBound; + if (e != null) + { + e.Curr = e.Bot; + e.OutIdx = Unassigned; + } + e = lm.RightBound; + if (e != null) + { + e.Curr = e.Bot; + e.OutIdx = Unassigned; + } + lm = lm.Next; + } + m_ActiveEdges = null; + } + //------------------------------------------------------------------------------ + + public static IntRect GetBounds(Paths paths) + { + int i = 0, cnt = paths.Count; + while (i < cnt && paths[i].Count == 0) i++; + if (i == cnt) return new IntRect(0,0,0,0); + IntRect result = new IntRect(); + result.left = paths[i][0].X; + result.right = result.left; + result.top = paths[i][0].Y; + result.bottom = result.top; + for (; i < cnt; i++) + for (int j = 0; j < paths[i].Count; j++) + { + if (paths[i][j].X < result.left) result.left = paths[i][j].X; + else if (paths[i][j].X > result.right) result.right = paths[i][j].X; + if (paths[i][j].Y < result.top) result.top = paths[i][j].Y; + else if (paths[i][j].Y > result.bottom) result.bottom = paths[i][j].Y; + } + return result; + } + //------------------------------------------------------------------------------ + + internal void InsertScanbeam(cInt Y) + { + //single-linked list: sorted descending, ignoring dups. + if (m_Scanbeam == null) + { + m_Scanbeam = new Scanbeam(); + m_Scanbeam.Next = null; + m_Scanbeam.Y = Y; + } + else if (Y > m_Scanbeam.Y) + { + Scanbeam newSb = new Scanbeam(); + newSb.Y = Y; + newSb.Next = m_Scanbeam; + m_Scanbeam = newSb; + } + else + { + Scanbeam sb2 = m_Scanbeam; + while (sb2.Next != null && (Y <= sb2.Next.Y)) sb2 = sb2.Next; + if (Y == sb2.Y) return; //ie ignores duplicates + Scanbeam newSb = new Scanbeam(); + newSb.Y = Y; + newSb.Next = sb2.Next; + sb2.Next = newSb; + } + } + //------------------------------------------------------------------------------ + + internal Boolean PopScanbeam(out cInt Y) + { + if (m_Scanbeam == null) + { + Y = 0; + return false; + } + Y = m_Scanbeam.Y; + m_Scanbeam = m_Scanbeam.Next; + return true; + } + //------------------------------------------------------------------------------ + + internal Boolean LocalMinimaPending() + { + return (m_CurrentLM != null); + } + //------------------------------------------------------------------------------ + + internal OutRec CreateOutRec() + { + OutRec result = new OutRec(); + result.Idx = Unassigned; + result.IsHole = false; + result.IsOpen = false; + result.FirstLeft = null; + result.Pts = null; + result.BottomPt = null; + result.PolyNode = null; + m_PolyOuts.Add(result); + result.Idx = m_PolyOuts.Count - 1; + return result; + } + //------------------------------------------------------------------------------ + + internal void DisposeOutRec(int index) + { + OutRec outRec = m_PolyOuts[index]; + outRec.Pts = null; + outRec = null; + m_PolyOuts[index] = null; + } + //------------------------------------------------------------------------------ + + internal void UpdateEdgeIntoAEL(ref TEdge e) + { + if (e.NextInLML == null) + throw new ClipperException("UpdateEdgeIntoAEL: invalid call"); + TEdge AelPrev = e.PrevInAEL; + TEdge AelNext = e.NextInAEL; + e.NextInLML.OutIdx = e.OutIdx; + if (AelPrev != null) + AelPrev.NextInAEL = e.NextInLML; + else m_ActiveEdges = e.NextInLML; + if (AelNext != null) + AelNext.PrevInAEL = e.NextInLML; + e.NextInLML.Side = e.Side; + e.NextInLML.WindDelta = e.WindDelta; + e.NextInLML.WindCnt = e.WindCnt; + e.NextInLML.WindCnt2 = e.WindCnt2; + e = e.NextInLML; + e.Curr = e.Bot; + e.PrevInAEL = AelPrev; + e.NextInAEL = AelNext; + if (!IsHorizontal(e)) InsertScanbeam(e.Top.Y); + } + //------------------------------------------------------------------------------ + + internal void SwapPositionsInAEL(TEdge edge1, TEdge edge2) + { + //check that one or other edge hasn't already been removed from AEL ... + if (edge1.NextInAEL == edge1.PrevInAEL || + edge2.NextInAEL == edge2.PrevInAEL) return; + + if (edge1.NextInAEL == edge2) + { + TEdge next = edge2.NextInAEL; + if (next != null) + next.PrevInAEL = edge1; + TEdge prev = edge1.PrevInAEL; + if (prev != null) + prev.NextInAEL = edge2; + edge2.PrevInAEL = prev; + edge2.NextInAEL = edge1; + edge1.PrevInAEL = edge2; + edge1.NextInAEL = next; + } + else if (edge2.NextInAEL == edge1) + { + TEdge next = edge1.NextInAEL; + if (next != null) + next.PrevInAEL = edge2; + TEdge prev = edge2.PrevInAEL; + if (prev != null) + prev.NextInAEL = edge1; + edge1.PrevInAEL = prev; + edge1.NextInAEL = edge2; + edge2.PrevInAEL = edge1; + edge2.NextInAEL = next; + } + else + { + TEdge next = edge1.NextInAEL; + TEdge prev = edge1.PrevInAEL; + edge1.NextInAEL = edge2.NextInAEL; + if (edge1.NextInAEL != null) + edge1.NextInAEL.PrevInAEL = edge1; + edge1.PrevInAEL = edge2.PrevInAEL; + if (edge1.PrevInAEL != null) + edge1.PrevInAEL.NextInAEL = edge1; + edge2.NextInAEL = next; + if (edge2.NextInAEL != null) + edge2.NextInAEL.PrevInAEL = edge2; + edge2.PrevInAEL = prev; + if (edge2.PrevInAEL != null) + edge2.PrevInAEL.NextInAEL = edge2; + } + + if (edge1.PrevInAEL == null) + m_ActiveEdges = edge1; + else if (edge2.PrevInAEL == null) + m_ActiveEdges = edge2; + } + //------------------------------------------------------------------------------ + + internal void DeleteFromAEL(TEdge e) + { + TEdge AelPrev = e.PrevInAEL; + TEdge AelNext = e.NextInAEL; + if (AelPrev == null && AelNext == null && (e != m_ActiveEdges)) + return; //already deleted + if (AelPrev != null) + AelPrev.NextInAEL = AelNext; + else m_ActiveEdges = AelNext; + if (AelNext != null) + AelNext.PrevInAEL = AelPrev; + e.NextInAEL = null; + e.PrevInAEL = null; + } + //------------------------------------------------------------------------------ + + } //end ClipperBase + + public class Clipper : ClipperBase + { + //InitOptions that can be passed to the constructor ... + public const int ioReverseSolution = 1; + public const int ioStrictlySimple = 2; + public const int ioPreserveCollinear = 4; + + private ClipType m_ClipType; + private Maxima m_Maxima; + private TEdge m_SortedEdges; + private List m_IntersectList; + IComparer m_IntersectNodeComparer; + private bool m_ExecuteLocked; + private PolyFillType m_ClipFillType; + private PolyFillType m_SubjFillType; + private List m_Joins; + private List m_GhostJoins; + private bool m_UsingPolyTree; +#if use_xyz + public delegate void ZFillCallback(IntPoint bot1, IntPoint top1, + IntPoint bot2, IntPoint top2, ref IntPoint pt); + public ZFillCallback ZFillFunction { get; set; } +#endif + public Clipper(int InitOptions): base() //constructor + { + m_Scanbeam = null; + m_Maxima = null; + m_ActiveEdges = null; + m_SortedEdges = null; + m_IntersectList = new List(); + m_IntersectNodeComparer = new MyIntersectNodeSort(); + m_ExecuteLocked = false; + m_UsingPolyTree = false; + m_PolyOuts = new List(); + m_Joins = new List(); + m_GhostJoins = new List(); + ReverseSolution = (ioReverseSolution & InitOptions) != 0; + StrictlySimple = (ioStrictlySimple & InitOptions) != 0; + PreserveCollinear = (ioPreserveCollinear & InitOptions) != 0; +#if use_xyz + ZFillFunction = null; +#endif + } + //------------------------------------------------------------------------------ + + private void InsertMaxima(cInt X) + { + //double-linked list: sorted ascending, ignoring dups. + Maxima newMax = new Maxima(); + newMax.X = X; + if (m_Maxima == null) + { + m_Maxima = newMax; + m_Maxima.Next = null; + m_Maxima.Prev = null; + } + else if (X < m_Maxima.X) + { + newMax.Next = m_Maxima; + newMax.Prev = null; + m_Maxima = newMax; + } + else + { + Maxima m = m_Maxima; + while (m.Next != null && (X >= m.Next.X)) m = m.Next; + if (X == m.X) return; //ie ignores duplicates (& CG to clean up newMax) + //insert newMax between m and m.Next ... + newMax.Next = m.Next; + newMax.Prev = m; + if (m.Next != null) m.Next.Prev = newMax; + m.Next = newMax; + } + } + //------------------------------------------------------------------------------ + + public bool ReverseSolution; + //------------------------------------------------------------------------------ + + public bool StrictlySimple; + //------------------------------------------------------------------------------ + + public bool Execute(ClipType clipType, Paths solution) + { + return Execute(clipType, solution, PolyFillType.pftEvenOdd); + } + public bool Execute(ClipType clipType, Paths solution, + PolyFillType FillType) + { + return Execute(clipType, solution, FillType, FillType); + } + //------------------------------------------------------------------------------ + + public bool Execute(ClipType clipType, PolyTree polytree ) + { + return Execute(clipType, polytree, PolyFillType.pftEvenOdd); + } + public bool Execute(ClipType clipType, PolyTree polytree, + PolyFillType FillType) + { + return Execute(clipType, polytree, FillType, FillType); + } + //------------------------------------------------------------------------------ + + public bool Execute(ClipType clipType, Paths solution, + PolyFillType subjFillType, PolyFillType clipFillType) + { + if (m_ExecuteLocked) return false; + if (m_HasOpenPaths) throw + new ClipperException("Error: PolyTree struct is needed for open path clipping."); + + m_ExecuteLocked = true; + solution.Clear(); + m_SubjFillType = subjFillType; + m_ClipFillType = clipFillType; + m_ClipType = clipType; + m_UsingPolyTree = false; + bool succeeded; + try + { + succeeded = ExecuteInternal(); + //build the return polygons ... + if (succeeded) BuildResult(solution); + } + finally + { + DisposeAllPolyPts(); + m_ExecuteLocked = false; + } + return succeeded; + } + //------------------------------------------------------------------------------ + + public bool Execute(ClipType clipType, PolyTree polytree, + PolyFillType subjFillType, PolyFillType clipFillType) + { + if (m_ExecuteLocked) return false; + m_ExecuteLocked = true; + m_SubjFillType = subjFillType; + m_ClipFillType = clipFillType; + m_ClipType = clipType; + m_UsingPolyTree = true; + bool succeeded; + try + { + succeeded = ExecuteInternal(); + //build the return polygons ... + if (succeeded) BuildResult2(polytree); + } + finally + { + DisposeAllPolyPts(); + m_ExecuteLocked = false; + } + return succeeded; + } + //------------------------------------------------------------------------------ + + internal void FixHoleLinkage(OutRec outRec) + { + //skip if an outermost polygon or + //already already points to the correct FirstLeft ... + if (outRec.FirstLeft == null || + (outRec.IsHole != outRec.FirstLeft.IsHole && + outRec.FirstLeft.Pts != null)) return; + + OutRec orfl = outRec.FirstLeft; + while (orfl != null && ((orfl.IsHole == outRec.IsHole) || orfl.Pts == null)) + orfl = orfl.FirstLeft; + outRec.FirstLeft = orfl; + } + //------------------------------------------------------------------------------ + + private bool ExecuteInternal() + { + try + { + Reset(); + m_SortedEdges = null; + m_Maxima = null; + + cInt botY, topY; + if (!PopScanbeam(out botY)) return false; + InsertLocalMinimaIntoAEL(botY); + while (PopScanbeam(out topY) || LocalMinimaPending()) + { + ProcessHorizontals(); + m_GhostJoins.Clear(); + if (!ProcessIntersections(topY)) return false; + ProcessEdgesAtTopOfScanbeam(topY); + botY = topY; + InsertLocalMinimaIntoAEL(botY); + } + + //fix orientations ... + foreach (OutRec outRec in m_PolyOuts) + { + if (outRec.Pts == null || outRec.IsOpen) continue; + if ((outRec.IsHole ^ ReverseSolution) == (Area(outRec) > 0)) + ReversePolyPtLinks(outRec.Pts); + } + + JoinCommonEdges(); + + foreach (OutRec outRec in m_PolyOuts) + { + if (outRec.Pts == null) + continue; + else if (outRec.IsOpen) + FixupOutPolyline(outRec); + else + FixupOutPolygon(outRec); + } + + if (StrictlySimple) DoSimplePolygons(); + return true; + } + //catch { return false; } + finally + { + m_Joins.Clear(); + m_GhostJoins.Clear(); + } + } + //------------------------------------------------------------------------------ + + private void DisposeAllPolyPts(){ + for (int i = 0; i < m_PolyOuts.Count; ++i) DisposeOutRec(i); + m_PolyOuts.Clear(); + } + //------------------------------------------------------------------------------ + + private void AddJoin(OutPt Op1, OutPt Op2, IntPoint OffPt) + { + Join j = new Join(); + j.OutPt1 = Op1; + j.OutPt2 = Op2; + j.OffPt = OffPt; + m_Joins.Add(j); + } + //------------------------------------------------------------------------------ + + private void AddGhostJoin(OutPt Op, IntPoint OffPt) + { + Join j = new Join(); + j.OutPt1 = Op; + j.OffPt = OffPt; + m_GhostJoins.Add(j); + } + //------------------------------------------------------------------------------ + +#if use_xyz + internal void SetZ(ref IntPoint pt, TEdge e1, TEdge e2) + { + if (pt.Z != 0 || ZFillFunction == null) return; + else if (pt == e1.Bot) pt.Z = e1.Bot.Z; + else if (pt == e1.Top) pt.Z = e1.Top.Z; + else if (pt == e2.Bot) pt.Z = e2.Bot.Z; + else if (pt == e2.Top) pt.Z = e2.Top.Z; + else ZFillFunction(e1.Bot, e1.Top, e2.Bot, e2.Top, ref pt); + } + //------------------------------------------------------------------------------ +#endif + + private void InsertLocalMinimaIntoAEL(cInt botY) + { + LocalMinima lm; + while (PopLocalMinima(botY, out lm)) + { + TEdge lb = lm.LeftBound; + TEdge rb = lm.RightBound; + + OutPt Op1 = null; + if (lb == null) + { + InsertEdgeIntoAEL(rb, null); + SetWindingCount(rb); + if (IsContributing(rb)) + Op1 = AddOutPt(rb, rb.Bot); + } + else if (rb == null) + { + InsertEdgeIntoAEL(lb, null); + SetWindingCount(lb); + if (IsContributing(lb)) + Op1 = AddOutPt(lb, lb.Bot); + InsertScanbeam(lb.Top.Y); + } + else + { + InsertEdgeIntoAEL(lb, null); + InsertEdgeIntoAEL(rb, lb); + SetWindingCount(lb); + rb.WindCnt = lb.WindCnt; + rb.WindCnt2 = lb.WindCnt2; + if (IsContributing(lb)) + Op1 = AddLocalMinPoly(lb, rb, lb.Bot); + InsertScanbeam(lb.Top.Y); + } + + if (rb != null) + { + if (IsHorizontal(rb)) + { + if (rb.NextInLML != null) + InsertScanbeam(rb.NextInLML.Top.Y); + AddEdgeToSEL(rb); + } + else + InsertScanbeam(rb.Top.Y); + } + + if (lb == null || rb == null) continue; + + //if output polygons share an Edge with a horizontal rb, they'll need joining later ... + if (Op1 != null && IsHorizontal(rb) && + m_GhostJoins.Count > 0 && rb.WindDelta != 0) + { + for (int i = 0; i < m_GhostJoins.Count; i++) + { + //if the horizontal Rb and a 'ghost' horizontal overlap, then convert + //the 'ghost' join to a real join ready for later ... + Join j = m_GhostJoins[i]; + if (HorzSegmentsOverlap(j.OutPt1.Pt.X, j.OffPt.X, rb.Bot.X, rb.Top.X)) + AddJoin(j.OutPt1, Op1, j.OffPt); + } + } + + if (lb.OutIdx >= 0 && lb.PrevInAEL != null && + lb.PrevInAEL.Curr.X == lb.Bot.X && + lb.PrevInAEL.OutIdx >= 0 && + SlopesEqual(lb.PrevInAEL.Curr, lb.PrevInAEL.Top, lb.Curr, lb.Top, m_UseFullRange) && + lb.WindDelta != 0 && lb.PrevInAEL.WindDelta != 0) + { + OutPt Op2 = AddOutPt(lb.PrevInAEL, lb.Bot); + AddJoin(Op1, Op2, lb.Top); + } + + if( lb.NextInAEL != rb ) + { + + if (rb.OutIdx >= 0 && rb.PrevInAEL.OutIdx >= 0 && + SlopesEqual(rb.PrevInAEL.Curr, rb.PrevInAEL.Top, rb.Curr, rb.Top, m_UseFullRange) && + rb.WindDelta != 0 && rb.PrevInAEL.WindDelta != 0) + { + OutPt Op2 = AddOutPt(rb.PrevInAEL, rb.Bot); + AddJoin(Op1, Op2, rb.Top); + } + + TEdge e = lb.NextInAEL; + if (e != null) + while (e != rb) + { + //nb: For calculating winding counts etc, IntersectEdges() assumes + //that param1 will be to the right of param2 ABOVE the intersection ... + IntersectEdges(rb, e, lb.Curr); //order important here + e = e.NextInAEL; + } + } + } + } + //------------------------------------------------------------------------------ + + private void InsertEdgeIntoAEL(TEdge edge, TEdge startEdge) + { + if (m_ActiveEdges == null) + { + edge.PrevInAEL = null; + edge.NextInAEL = null; + m_ActiveEdges = edge; + } + else if (startEdge == null && E2InsertsBeforeE1(m_ActiveEdges, edge)) + { + edge.PrevInAEL = null; + edge.NextInAEL = m_ActiveEdges; + m_ActiveEdges.PrevInAEL = edge; + m_ActiveEdges = edge; + } + else + { + if (startEdge == null) startEdge = m_ActiveEdges; + while (startEdge.NextInAEL != null && + !E2InsertsBeforeE1(startEdge.NextInAEL, edge)) + startEdge = startEdge.NextInAEL; + edge.NextInAEL = startEdge.NextInAEL; + if (startEdge.NextInAEL != null) startEdge.NextInAEL.PrevInAEL = edge; + edge.PrevInAEL = startEdge; + startEdge.NextInAEL = edge; + } + } + //---------------------------------------------------------------------- + + private bool E2InsertsBeforeE1(TEdge e1, TEdge e2) + { + if (e2.Curr.X == e1.Curr.X) + { + if (e2.Top.Y > e1.Top.Y) + return e2.Top.X < TopX(e1, e2.Top.Y); + else return e1.Top.X > TopX(e2, e1.Top.Y); + } + else return e2.Curr.X < e1.Curr.X; + } + //------------------------------------------------------------------------------ + + private bool IsEvenOddFillType(TEdge edge) + { + if (edge.PolyTyp == PolyType.ptSubject) + return m_SubjFillType == PolyFillType.pftEvenOdd; + else + return m_ClipFillType == PolyFillType.pftEvenOdd; + } + //------------------------------------------------------------------------------ + + private bool IsEvenOddAltFillType(TEdge edge) + { + if (edge.PolyTyp == PolyType.ptSubject) + return m_ClipFillType == PolyFillType.pftEvenOdd; + else + return m_SubjFillType == PolyFillType.pftEvenOdd; + } + //------------------------------------------------------------------------------ + + private bool IsContributing(TEdge edge) + { + PolyFillType pft, pft2; + if (edge.PolyTyp == PolyType.ptSubject) + { + pft = m_SubjFillType; + pft2 = m_ClipFillType; + } + else + { + pft = m_ClipFillType; + pft2 = m_SubjFillType; + } + + switch (pft) + { + case PolyFillType.pftEvenOdd: + //return false if a subj line has been flagged as inside a subj polygon + if (edge.WindDelta == 0 && edge.WindCnt != 1) return false; + break; + case PolyFillType.pftNonZero: + if (Math.Abs(edge.WindCnt) != 1) return false; + break; + case PolyFillType.pftPositive: + if (edge.WindCnt != 1) return false; + break; + default: //PolyFillType.pftNegative + if (edge.WindCnt != -1) return false; + break; + } + + switch (m_ClipType) + { + case ClipType.ctIntersection: + switch (pft2) + { + case PolyFillType.pftEvenOdd: + case PolyFillType.pftNonZero: + return (edge.WindCnt2 != 0); + case PolyFillType.pftPositive: + return (edge.WindCnt2 > 0); + default: + return (edge.WindCnt2 < 0); + } + case ClipType.ctUnion: + switch (pft2) + { + case PolyFillType.pftEvenOdd: + case PolyFillType.pftNonZero: + return (edge.WindCnt2 == 0); + case PolyFillType.pftPositive: + return (edge.WindCnt2 <= 0); + default: + return (edge.WindCnt2 >= 0); + } + case ClipType.ctDifference: + if (edge.PolyTyp == PolyType.ptSubject) + switch (pft2) + { + case PolyFillType.pftEvenOdd: + case PolyFillType.pftNonZero: + return (edge.WindCnt2 == 0); + case PolyFillType.pftPositive: + return (edge.WindCnt2 <= 0); + default: + return (edge.WindCnt2 >= 0); + } + else + switch (pft2) + { + case PolyFillType.pftEvenOdd: + case PolyFillType.pftNonZero: + return (edge.WindCnt2 != 0); + case PolyFillType.pftPositive: + return (edge.WindCnt2 > 0); + default: + return (edge.WindCnt2 < 0); + } + case ClipType.ctXor: + if (edge.WindDelta == 0) //XOr always contributing unless open + switch (pft2) + { + case PolyFillType.pftEvenOdd: + case PolyFillType.pftNonZero: + return (edge.WindCnt2 == 0); + case PolyFillType.pftPositive: + return (edge.WindCnt2 <= 0); + default: + return (edge.WindCnt2 >= 0); + } + else + return true; + } + return true; + } + //------------------------------------------------------------------------------ + + private void SetWindingCount(TEdge edge) + { + TEdge e = edge.PrevInAEL; + //find the edge of the same polytype that immediately preceeds 'edge' in AEL + while (e != null && ((e.PolyTyp != edge.PolyTyp) || (e.WindDelta == 0))) e = e.PrevInAEL; + if (e == null) + { + PolyFillType pft; + pft = (edge.PolyTyp == PolyType.ptSubject ? m_SubjFillType : m_ClipFillType); + if (edge.WindDelta == 0) edge.WindCnt = (pft == PolyFillType.pftNegative ? -1 : 1); + else edge.WindCnt = edge.WindDelta; + edge.WindCnt2 = 0; + e = m_ActiveEdges; //ie get ready to calc WindCnt2 + } + else if (edge.WindDelta == 0 && m_ClipType != ClipType.ctUnion) + { + edge.WindCnt = 1; + edge.WindCnt2 = e.WindCnt2; + e = e.NextInAEL; //ie get ready to calc WindCnt2 + } + else if (IsEvenOddFillType(edge)) + { + //EvenOdd filling ... + if (edge.WindDelta == 0) + { + //are we inside a subj polygon ... + bool Inside = true; + TEdge e2 = e.PrevInAEL; + while (e2 != null) + { + if (e2.PolyTyp == e.PolyTyp && e2.WindDelta != 0) + Inside = !Inside; + e2 = e2.PrevInAEL; + } + edge.WindCnt = (Inside ? 0 : 1); + } + else + { + edge.WindCnt = edge.WindDelta; + } + edge.WindCnt2 = e.WindCnt2; + e = e.NextInAEL; //ie get ready to calc WindCnt2 + } + else + { + //nonZero, Positive or Negative filling ... + if (e.WindCnt * e.WindDelta < 0) + { + //prev edge is 'decreasing' WindCount (WC) toward zero + //so we're outside the previous polygon ... + if (Math.Abs(e.WindCnt) > 1) + { + //outside prev poly but still inside another. + //when reversing direction of prev poly use the same WC + if (e.WindDelta * edge.WindDelta < 0) edge.WindCnt = e.WindCnt; + //otherwise continue to 'decrease' WC ... + else edge.WindCnt = e.WindCnt + edge.WindDelta; + } + else + //now outside all polys of same polytype so set own WC ... + edge.WindCnt = (edge.WindDelta == 0 ? 1 : edge.WindDelta); + } + else + { + //prev edge is 'increasing' WindCount (WC) away from zero + //so we're inside the previous polygon ... + if (edge.WindDelta == 0) + edge.WindCnt = (e.WindCnt < 0 ? e.WindCnt - 1 : e.WindCnt + 1); + //if wind direction is reversing prev then use same WC + else if (e.WindDelta * edge.WindDelta < 0) + edge.WindCnt = e.WindCnt; + //otherwise add to WC ... + else edge.WindCnt = e.WindCnt + edge.WindDelta; + } + edge.WindCnt2 = e.WindCnt2; + e = e.NextInAEL; //ie get ready to calc WindCnt2 + } + + //update WindCnt2 ... + if (IsEvenOddAltFillType(edge)) + { + //EvenOdd filling ... + while (e != edge) + { + if (e.WindDelta != 0) + edge.WindCnt2 = (edge.WindCnt2 == 0 ? 1 : 0); + e = e.NextInAEL; + } + } + else + { + //nonZero, Positive or Negative filling ... + while (e != edge) + { + edge.WindCnt2 += e.WindDelta; + e = e.NextInAEL; + } + } + } + //------------------------------------------------------------------------------ + + private void AddEdgeToSEL(TEdge edge) + { + //SEL pointers in PEdge are use to build transient lists of horizontal edges. + //However, since we don't need to worry about processing order, all additions + //are made to the front of the list ... + if (m_SortedEdges == null) + { + m_SortedEdges = edge; + edge.PrevInSEL = null; + edge.NextInSEL = null; + } + else + { + edge.NextInSEL = m_SortedEdges; + edge.PrevInSEL = null; + m_SortedEdges.PrevInSEL = edge; + m_SortedEdges = edge; + } + } + //------------------------------------------------------------------------------ + + internal Boolean PopEdgeFromSEL(out TEdge e) + { + //Pop edge from front of SEL (ie SEL is a FILO list) + e = m_SortedEdges; + if (e == null) return false; + TEdge oldE = e; + m_SortedEdges = e.NextInSEL; + if (m_SortedEdges != null) m_SortedEdges.PrevInSEL = null; + oldE.NextInSEL = null; + oldE.PrevInSEL = null; + return true; + } + //------------------------------------------------------------------------------ + + private void CopyAELToSEL() + { + TEdge e = m_ActiveEdges; + m_SortedEdges = e; + while (e != null) + { + e.PrevInSEL = e.PrevInAEL; + e.NextInSEL = e.NextInAEL; + e = e.NextInAEL; + } + } + //------------------------------------------------------------------------------ + + private void SwapPositionsInSEL(TEdge edge1, TEdge edge2) + { + if (edge1.NextInSEL == null && edge1.PrevInSEL == null) + return; + if (edge2.NextInSEL == null && edge2.PrevInSEL == null) + return; + + if (edge1.NextInSEL == edge2) + { + TEdge next = edge2.NextInSEL; + if (next != null) + next.PrevInSEL = edge1; + TEdge prev = edge1.PrevInSEL; + if (prev != null) + prev.NextInSEL = edge2; + edge2.PrevInSEL = prev; + edge2.NextInSEL = edge1; + edge1.PrevInSEL = edge2; + edge1.NextInSEL = next; + } + else if (edge2.NextInSEL == edge1) + { + TEdge next = edge1.NextInSEL; + if (next != null) + next.PrevInSEL = edge2; + TEdge prev = edge2.PrevInSEL; + if (prev != null) + prev.NextInSEL = edge1; + edge1.PrevInSEL = prev; + edge1.NextInSEL = edge2; + edge2.PrevInSEL = edge1; + edge2.NextInSEL = next; + } + else + { + TEdge next = edge1.NextInSEL; + TEdge prev = edge1.PrevInSEL; + edge1.NextInSEL = edge2.NextInSEL; + if (edge1.NextInSEL != null) + edge1.NextInSEL.PrevInSEL = edge1; + edge1.PrevInSEL = edge2.PrevInSEL; + if (edge1.PrevInSEL != null) + edge1.PrevInSEL.NextInSEL = edge1; + edge2.NextInSEL = next; + if (edge2.NextInSEL != null) + edge2.NextInSEL.PrevInSEL = edge2; + edge2.PrevInSEL = prev; + if (edge2.PrevInSEL != null) + edge2.PrevInSEL.NextInSEL = edge2; + } + + if (edge1.PrevInSEL == null) + m_SortedEdges = edge1; + else if (edge2.PrevInSEL == null) + m_SortedEdges = edge2; + } + //------------------------------------------------------------------------------ + + + private void AddLocalMaxPoly(TEdge e1, TEdge e2, IntPoint pt) + { + AddOutPt(e1, pt); + if (e2.WindDelta == 0) AddOutPt(e2, pt); + if (e1.OutIdx == e2.OutIdx) + { + e1.OutIdx = Unassigned; + e2.OutIdx = Unassigned; + } + else if (e1.OutIdx < e2.OutIdx) + AppendPolygon(e1, e2); + else + AppendPolygon(e2, e1); + } + //------------------------------------------------------------------------------ + + private OutPt AddLocalMinPoly(TEdge e1, TEdge e2, IntPoint pt) + { + OutPt result; + TEdge e, prevE; + if (IsHorizontal(e2) || (e1.Dx > e2.Dx)) + { + result = AddOutPt(e1, pt); + e2.OutIdx = e1.OutIdx; + e1.Side = EdgeSide.esLeft; + e2.Side = EdgeSide.esRight; + e = e1; + if (e.PrevInAEL == e2) + prevE = e2.PrevInAEL; + else + prevE = e.PrevInAEL; + } + else + { + result = AddOutPt(e2, pt); + e1.OutIdx = e2.OutIdx; + e1.Side = EdgeSide.esRight; + e2.Side = EdgeSide.esLeft; + e = e2; + if (e.PrevInAEL == e1) + prevE = e1.PrevInAEL; + else + prevE = e.PrevInAEL; + } + + if (prevE != null && prevE.OutIdx >= 0 && prevE.Top.Y < pt.Y && e.Top.Y < pt.Y) + { + cInt xPrev = TopX(prevE, pt.Y); + cInt xE = TopX(e, pt.Y); + if ((xPrev == xE) && (e.WindDelta != 0) && (prevE.WindDelta != 0) && + SlopesEqual(new IntPoint(xPrev, pt.Y), prevE.Top, new IntPoint(xE, pt.Y), e.Top, m_UseFullRange)) + { + OutPt outPt = AddOutPt(prevE, pt); + AddJoin(result, outPt, e.Top); + } + } + return result; + } + //------------------------------------------------------------------------------ + + private OutPt AddOutPt(TEdge e, IntPoint pt) + { + if (e.OutIdx < 0) + { + OutRec outRec = CreateOutRec(); + outRec.IsOpen = (e.WindDelta == 0); + OutPt newOp = new OutPt(); + outRec.Pts = newOp; + newOp.Idx = outRec.Idx; + newOp.Pt = pt; + newOp.Next = newOp; + newOp.Prev = newOp; + if (!outRec.IsOpen) + SetHoleState(e, outRec); + e.OutIdx = outRec.Idx; //nb: do this after SetZ ! + return newOp; + } + else + { + OutRec outRec = m_PolyOuts[e.OutIdx]; + //OutRec.Pts is the 'Left-most' point & OutRec.Pts.Prev is the 'Right-most' + OutPt op = outRec.Pts; + bool ToFront = (e.Side == EdgeSide.esLeft); + if (ToFront && pt == op.Pt) return op; + else if (!ToFront && pt == op.Prev.Pt) return op.Prev; + + OutPt newOp = new OutPt(); + newOp.Idx = outRec.Idx; + newOp.Pt = pt; + newOp.Next = op; + newOp.Prev = op.Prev; + newOp.Prev.Next = newOp; + op.Prev = newOp; + if (ToFront) outRec.Pts = newOp; + return newOp; + } + } + //------------------------------------------------------------------------------ + + private OutPt GetLastOutPt(TEdge e) + { + OutRec outRec = m_PolyOuts[e.OutIdx]; + if (e.Side == EdgeSide.esLeft) + return outRec.Pts; + else + return outRec.Pts.Prev; + } + //------------------------------------------------------------------------------ + + internal void SwapPoints(ref IntPoint pt1, ref IntPoint pt2) + { + IntPoint tmp = new IntPoint(pt1); + pt1 = pt2; + pt2 = tmp; + } + //------------------------------------------------------------------------------ + + private bool HorzSegmentsOverlap(cInt seg1a, cInt seg1b, cInt seg2a, cInt seg2b) + { + if (seg1a > seg1b) Swap(ref seg1a, ref seg1b); + if (seg2a > seg2b) Swap(ref seg2a, ref seg2b); + return (seg1a < seg2b) && (seg2a < seg1b); + } + //------------------------------------------------------------------------------ + + private void SetHoleState(TEdge e, OutRec outRec) + { + TEdge e2 = e.PrevInAEL; + TEdge eTmp = null; + while (e2 != null) + { + if (e2.OutIdx >= 0 && e2.WindDelta != 0) + { + if (eTmp == null) + eTmp = e2; + else if (eTmp.OutIdx == e2.OutIdx) + eTmp = null; //paired + } + e2 = e2.PrevInAEL; + } + + if (eTmp == null) + { + outRec.FirstLeft = null; + outRec.IsHole = false; + } + else + { + outRec.FirstLeft = m_PolyOuts[eTmp.OutIdx]; + outRec.IsHole = !outRec.FirstLeft.IsHole; + } + } + //------------------------------------------------------------------------------ + + private double GetDx(IntPoint pt1, IntPoint pt2) + { + if (pt1.Y == pt2.Y) return horizontal; + else return (double)(pt2.X - pt1.X) / (pt2.Y - pt1.Y); + } + //--------------------------------------------------------------------------- + + private bool FirstIsBottomPt(OutPt btmPt1, OutPt btmPt2) + { + OutPt p = btmPt1.Prev; + while ((p.Pt == btmPt1.Pt) && (p != btmPt1)) p = p.Prev; + double dx1p = Math.Abs(GetDx(btmPt1.Pt, p.Pt)); + p = btmPt1.Next; + while ((p.Pt == btmPt1.Pt) && (p != btmPt1)) p = p.Next; + double dx1n = Math.Abs(GetDx(btmPt1.Pt, p.Pt)); + + p = btmPt2.Prev; + while ((p.Pt == btmPt2.Pt) && (p != btmPt2)) p = p.Prev; + double dx2p = Math.Abs(GetDx(btmPt2.Pt, p.Pt)); + p = btmPt2.Next; + while ((p.Pt == btmPt2.Pt) && (p != btmPt2)) p = p.Next; + double dx2n = Math.Abs(GetDx(btmPt2.Pt, p.Pt)); + + if (Math.Max(dx1p, dx1n) == Math.Max(dx2p, dx2n) && + Math.Min(dx1p, dx1n) == Math.Min(dx2p, dx2n)) + return Area(btmPt1) > 0; //if otherwise identical use orientation + else + return (dx1p >= dx2p && dx1p >= dx2n) || (dx1n >= dx2p && dx1n >= dx2n); + } + //------------------------------------------------------------------------------ + + private OutPt GetBottomPt(OutPt pp) + { + OutPt dups = null; + OutPt p = pp.Next; + while (p != pp) + { + if (p.Pt.Y > pp.Pt.Y) + { + pp = p; + dups = null; + } + else if (p.Pt.Y == pp.Pt.Y && p.Pt.X <= pp.Pt.X) + { + if (p.Pt.X < pp.Pt.X) + { + dups = null; + pp = p; + } else + { + if (p.Next != pp && p.Prev != pp) dups = p; + } + } + p = p.Next; + } + if (dups != null) + { + //there appears to be at least 2 vertices at bottomPt so ... + while (dups != p) + { + if (!FirstIsBottomPt(p, dups)) pp = dups; + dups = dups.Next; + while (dups.Pt != pp.Pt) dups = dups.Next; + } + } + return pp; + } + //------------------------------------------------------------------------------ + + private OutRec GetLowermostRec(OutRec outRec1, OutRec outRec2) + { + //work out which polygon fragment has the correct hole state ... + if (outRec1.BottomPt == null) + outRec1.BottomPt = GetBottomPt(outRec1.Pts); + if (outRec2.BottomPt == null) + outRec2.BottomPt = GetBottomPt(outRec2.Pts); + OutPt bPt1 = outRec1.BottomPt; + OutPt bPt2 = outRec2.BottomPt; + if (bPt1.Pt.Y > bPt2.Pt.Y) return outRec1; + else if (bPt1.Pt.Y < bPt2.Pt.Y) return outRec2; + else if (bPt1.Pt.X < bPt2.Pt.X) return outRec1; + else if (bPt1.Pt.X > bPt2.Pt.X) return outRec2; + else if (bPt1.Next == bPt1) return outRec2; + else if (bPt2.Next == bPt2) return outRec1; + else if (FirstIsBottomPt(bPt1, bPt2)) return outRec1; + else return outRec2; + } + //------------------------------------------------------------------------------ + + bool OutRec1RightOfOutRec2(OutRec outRec1, OutRec outRec2) + { + do + { + outRec1 = outRec1.FirstLeft; + if (outRec1 == outRec2) return true; + } while (outRec1 != null); + return false; + } + //------------------------------------------------------------------------------ + + private OutRec GetOutRec(int idx) + { + OutRec outrec = m_PolyOuts[idx]; + while (outrec != m_PolyOuts[outrec.Idx]) + outrec = m_PolyOuts[outrec.Idx]; + return outrec; + } + //------------------------------------------------------------------------------ + + private void AppendPolygon(TEdge e1, TEdge e2) + { + OutRec outRec1 = m_PolyOuts[e1.OutIdx]; + OutRec outRec2 = m_PolyOuts[e2.OutIdx]; + + OutRec holeStateRec; + if (OutRec1RightOfOutRec2(outRec1, outRec2)) + holeStateRec = outRec2; + else if (OutRec1RightOfOutRec2(outRec2, outRec1)) + holeStateRec = outRec1; + else + holeStateRec = GetLowermostRec(outRec1, outRec2); + + //get the start and ends of both output polygons and + //join E2 poly onto E1 poly and delete pointers to E2 ... + OutPt p1_lft = outRec1.Pts; + OutPt p1_rt = p1_lft.Prev; + OutPt p2_lft = outRec2.Pts; + OutPt p2_rt = p2_lft.Prev; + + //join e2 poly onto e1 poly and delete pointers to e2 ... + if( e1.Side == EdgeSide.esLeft ) + { + if (e2.Side == EdgeSide.esLeft) + { + //z y x a b c + ReversePolyPtLinks(p2_lft); + p2_lft.Next = p1_lft; + p1_lft.Prev = p2_lft; + p1_rt.Next = p2_rt; + p2_rt.Prev = p1_rt; + outRec1.Pts = p2_rt; + } else + { + //x y z a b c + p2_rt.Next = p1_lft; + p1_lft.Prev = p2_rt; + p2_lft.Prev = p1_rt; + p1_rt.Next = p2_lft; + outRec1.Pts = p2_lft; + } + } else + { + if (e2.Side == EdgeSide.esRight) + { + //a b c z y x + ReversePolyPtLinks( p2_lft ); + p1_rt.Next = p2_rt; + p2_rt.Prev = p1_rt; + p2_lft.Next = p1_lft; + p1_lft.Prev = p2_lft; + } else + { + //a b c x y z + p1_rt.Next = p2_lft; + p2_lft.Prev = p1_rt; + p1_lft.Prev = p2_rt; + p2_rt.Next = p1_lft; + } + } + + outRec1.BottomPt = null; + if (holeStateRec == outRec2) + { + if (outRec2.FirstLeft != outRec1) + outRec1.FirstLeft = outRec2.FirstLeft; + outRec1.IsHole = outRec2.IsHole; + } + outRec2.Pts = null; + outRec2.BottomPt = null; + + outRec2.FirstLeft = outRec1; + + int OKIdx = e1.OutIdx; + int ObsoleteIdx = e2.OutIdx; + + e1.OutIdx = Unassigned; //nb: safe because we only get here via AddLocalMaxPoly + e2.OutIdx = Unassigned; + + TEdge e = m_ActiveEdges; + while( e != null ) + { + if( e.OutIdx == ObsoleteIdx ) + { + e.OutIdx = OKIdx; + e.Side = e1.Side; + break; + } + e = e.NextInAEL; + } + outRec2.Idx = outRec1.Idx; + } + //------------------------------------------------------------------------------ + + private void ReversePolyPtLinks(OutPt pp) + { + if (pp == null) return; + OutPt pp1; + OutPt pp2; + pp1 = pp; + do + { + pp2 = pp1.Next; + pp1.Next = pp1.Prev; + pp1.Prev = pp2; + pp1 = pp2; + } while (pp1 != pp); + } + //------------------------------------------------------------------------------ + + private static void SwapSides(TEdge edge1, TEdge edge2) + { + EdgeSide side = edge1.Side; + edge1.Side = edge2.Side; + edge2.Side = side; + } + //------------------------------------------------------------------------------ + + private static void SwapPolyIndexes(TEdge edge1, TEdge edge2) + { + int outIdx = edge1.OutIdx; + edge1.OutIdx = edge2.OutIdx; + edge2.OutIdx = outIdx; + } + //------------------------------------------------------------------------------ + + private void IntersectEdges(TEdge e1, TEdge e2, IntPoint pt) + { + //e1 will be to the left of e2 BELOW the intersection. Therefore e1 is before + //e2 in AEL except when e1 is being inserted at the intersection point ... + + bool e1Contributing = (e1.OutIdx >= 0); + bool e2Contributing = (e2.OutIdx >= 0); + +#if use_xyz + SetZ(ref pt, e1, e2); +#endif + +#if use_lines + //if either edge is on an OPEN path ... + if (e1.WindDelta == 0 || e2.WindDelta == 0) + { + //ignore subject-subject open path intersections UNLESS they + //are both open paths, AND they are both 'contributing maximas' ... + if (e1.WindDelta == 0 && e2.WindDelta == 0) return; + //if intersecting a subj line with a subj poly ... + else if (e1.PolyTyp == e2.PolyTyp && + e1.WindDelta != e2.WindDelta && m_ClipType == ClipType.ctUnion) + { + if (e1.WindDelta == 0) + { + if (e2Contributing) + { + AddOutPt(e1, pt); + if (e1Contributing) e1.OutIdx = Unassigned; + } + } + else + { + if (e1Contributing) + { + AddOutPt(e2, pt); + if (e2Contributing) e2.OutIdx = Unassigned; + } + } + } + else if (e1.PolyTyp != e2.PolyTyp) + { + if ((e1.WindDelta == 0) && Math.Abs(e2.WindCnt) == 1 && + (m_ClipType != ClipType.ctUnion || e2.WindCnt2 == 0)) + { + AddOutPt(e1, pt); + if (e1Contributing) e1.OutIdx = Unassigned; + } + else if ((e2.WindDelta == 0) && (Math.Abs(e1.WindCnt) == 1) && + (m_ClipType != ClipType.ctUnion || e1.WindCnt2 == 0)) + { + AddOutPt(e2, pt); + if (e2Contributing) e2.OutIdx = Unassigned; + } + } + return; + } +#endif + + //update winding counts... + //assumes that e1 will be to the Right of e2 ABOVE the intersection + if (e1.PolyTyp == e2.PolyTyp) + { + if (IsEvenOddFillType(e1)) + { + int oldE1WindCnt = e1.WindCnt; + e1.WindCnt = e2.WindCnt; + e2.WindCnt = oldE1WindCnt; + } + else + { + if (e1.WindCnt + e2.WindDelta == 0) e1.WindCnt = -e1.WindCnt; + else e1.WindCnt += e2.WindDelta; + if (e2.WindCnt - e1.WindDelta == 0) e2.WindCnt = -e2.WindCnt; + else e2.WindCnt -= e1.WindDelta; + } + } + else + { + if (!IsEvenOddFillType(e2)) e1.WindCnt2 += e2.WindDelta; + else e1.WindCnt2 = (e1.WindCnt2 == 0) ? 1 : 0; + if (!IsEvenOddFillType(e1)) e2.WindCnt2 -= e1.WindDelta; + else e2.WindCnt2 = (e2.WindCnt2 == 0) ? 1 : 0; + } + + PolyFillType e1FillType, e2FillType, e1FillType2, e2FillType2; + if (e1.PolyTyp == PolyType.ptSubject) + { + e1FillType = m_SubjFillType; + e1FillType2 = m_ClipFillType; + } + else + { + e1FillType = m_ClipFillType; + e1FillType2 = m_SubjFillType; + } + if (e2.PolyTyp == PolyType.ptSubject) + { + e2FillType = m_SubjFillType; + e2FillType2 = m_ClipFillType; + } + else + { + e2FillType = m_ClipFillType; + e2FillType2 = m_SubjFillType; + } + + int e1Wc, e2Wc; + switch (e1FillType) + { + case PolyFillType.pftPositive: e1Wc = e1.WindCnt; break; + case PolyFillType.pftNegative: e1Wc = -e1.WindCnt; break; + default: e1Wc = Math.Abs(e1.WindCnt); break; + } + switch (e2FillType) + { + case PolyFillType.pftPositive: e2Wc = e2.WindCnt; break; + case PolyFillType.pftNegative: e2Wc = -e2.WindCnt; break; + default: e2Wc = Math.Abs(e2.WindCnt); break; + } + + if (e1Contributing && e2Contributing) + { + if ((e1Wc != 0 && e1Wc != 1) || (e2Wc != 0 && e2Wc != 1) || + (e1.PolyTyp != e2.PolyTyp && m_ClipType != ClipType.ctXor)) + { + AddLocalMaxPoly(e1, e2, pt); + } + else + { + AddOutPt(e1, pt); + AddOutPt(e2, pt); + SwapSides(e1, e2); + SwapPolyIndexes(e1, e2); + } + } + else if (e1Contributing) + { + if (e2Wc == 0 || e2Wc == 1) + { + AddOutPt(e1, pt); + SwapSides(e1, e2); + SwapPolyIndexes(e1, e2); + } + + } + else if (e2Contributing) + { + if (e1Wc == 0 || e1Wc == 1) + { + AddOutPt(e2, pt); + SwapSides(e1, e2); + SwapPolyIndexes(e1, e2); + } + } + else if ( (e1Wc == 0 || e1Wc == 1) && (e2Wc == 0 || e2Wc == 1)) + { + //neither edge is currently contributing ... + cInt e1Wc2, e2Wc2; + switch (e1FillType2) + { + case PolyFillType.pftPositive: e1Wc2 = e1.WindCnt2; break; + case PolyFillType.pftNegative: e1Wc2 = -e1.WindCnt2; break; + default: e1Wc2 = Math.Abs(e1.WindCnt2); break; + } + switch (e2FillType2) + { + case PolyFillType.pftPositive: e2Wc2 = e2.WindCnt2; break; + case PolyFillType.pftNegative: e2Wc2 = -e2.WindCnt2; break; + default: e2Wc2 = Math.Abs(e2.WindCnt2); break; + } + + if (e1.PolyTyp != e2.PolyTyp) + { + AddLocalMinPoly(e1, e2, pt); + } + else if (e1Wc == 1 && e2Wc == 1) + switch (m_ClipType) + { + case ClipType.ctIntersection: + if (e1Wc2 > 0 && e2Wc2 > 0) + AddLocalMinPoly(e1, e2, pt); + break; + case ClipType.ctUnion: + if (e1Wc2 <= 0 && e2Wc2 <= 0) + AddLocalMinPoly(e1, e2, pt); + break; + case ClipType.ctDifference: + if (((e1.PolyTyp == PolyType.ptClip) && (e1Wc2 > 0) && (e2Wc2 > 0)) || + ((e1.PolyTyp == PolyType.ptSubject) && (e1Wc2 <= 0) && (e2Wc2 <= 0))) + AddLocalMinPoly(e1, e2, pt); + break; + case ClipType.ctXor: + AddLocalMinPoly(e1, e2, pt); + break; + } + else + SwapSides(e1, e2); + } + } + //------------------------------------------------------------------------------ + + private void DeleteFromSEL(TEdge e) + { + TEdge SelPrev = e.PrevInSEL; + TEdge SelNext = e.NextInSEL; + if (SelPrev == null && SelNext == null && (e != m_SortedEdges)) + return; //already deleted + if (SelPrev != null) + SelPrev.NextInSEL = SelNext; + else m_SortedEdges = SelNext; + if (SelNext != null) + SelNext.PrevInSEL = SelPrev; + e.NextInSEL = null; + e.PrevInSEL = null; + } + //------------------------------------------------------------------------------ + + private void ProcessHorizontals() + { + TEdge horzEdge; //m_SortedEdges; + while (PopEdgeFromSEL(out horzEdge)) + ProcessHorizontal(horzEdge); + } + //------------------------------------------------------------------------------ + + void GetHorzDirection(TEdge HorzEdge, out Direction Dir, out cInt Left, out cInt Right) + { + if (HorzEdge.Bot.X < HorzEdge.Top.X) + { + Left = HorzEdge.Bot.X; + Right = HorzEdge.Top.X; + Dir = Direction.dLeftToRight; + } else + { + Left = HorzEdge.Top.X; + Right = HorzEdge.Bot.X; + Dir = Direction.dRightToLeft; + } + } + //------------------------------------------------------------------------ + + private void ProcessHorizontal(TEdge horzEdge) + { + Direction dir; + cInt horzLeft, horzRight; + bool IsOpen = horzEdge.WindDelta == 0; + + GetHorzDirection(horzEdge, out dir, out horzLeft, out horzRight); + + TEdge eLastHorz = horzEdge, eMaxPair = null; + while (eLastHorz.NextInLML != null && IsHorizontal(eLastHorz.NextInLML)) + eLastHorz = eLastHorz.NextInLML; + if (eLastHorz.NextInLML == null) + eMaxPair = GetMaximaPair(eLastHorz); + + Maxima currMax = m_Maxima; + if (currMax != null) + { + //get the first maxima in range (X) ... + if (dir == Direction.dLeftToRight) + { + while (currMax != null && currMax.X <= horzEdge.Bot.X) + currMax = currMax.Next; + if (currMax != null && currMax.X >= eLastHorz.Top.X) + currMax = null; + } + else + { + while (currMax.Next != null && currMax.Next.X < horzEdge.Bot.X) + currMax = currMax.Next; + if (currMax.X <= eLastHorz.Top.X) currMax = null; + } + } + + OutPt op1 = null; + for (;;) //loop through consec. horizontal edges + { + bool IsLastHorz = (horzEdge == eLastHorz); + TEdge e = GetNextInAEL(horzEdge, dir); + while(e != null) + { + + //this code block inserts extra coords into horizontal edges (in output + //polygons) whereever maxima touch these horizontal edges. This helps + //'simplifying' polygons (ie if the Simplify property is set). + if (currMax != null) + { + if (dir == Direction.dLeftToRight) + { + while (currMax != null && currMax.X < e.Curr.X) + { + if (horzEdge.OutIdx >= 0 && !IsOpen) + AddOutPt(horzEdge, new IntPoint(currMax.X, horzEdge.Bot.Y)); + currMax = currMax.Next; + } + } + else + { + while (currMax != null && currMax.X > e.Curr.X) + { + if (horzEdge.OutIdx >= 0 && !IsOpen) + AddOutPt(horzEdge, new IntPoint(currMax.X, horzEdge.Bot.Y)); + currMax = currMax.Prev; + } + } + }; + + if ((dir == Direction.dLeftToRight && e.Curr.X > horzRight) || + (dir == Direction.dRightToLeft && e.Curr.X < horzLeft)) break; + + //Also break if we've got to the end of an intermediate horizontal edge ... + //nb: Smaller Dx's are to the right of larger Dx's ABOVE the horizontal. + if (e.Curr.X == horzEdge.Top.X && horzEdge.NextInLML != null && + e.Dx < horzEdge.NextInLML.Dx) break; + + if (horzEdge.OutIdx >= 0 && !IsOpen) //note: may be done multiple times + { +#if use_xyz + if (dir == Direction.dLeftToRight) SetZ(ref e.Curr, horzEdge, e); + else SetZ(ref e.Curr, e, horzEdge); +#endif + + op1 = AddOutPt(horzEdge, e.Curr); + TEdge eNextHorz = m_SortedEdges; + while (eNextHorz != null) + { + if (eNextHorz.OutIdx >= 0 && + HorzSegmentsOverlap(horzEdge.Bot.X, + horzEdge.Top.X, eNextHorz.Bot.X, eNextHorz.Top.X)) + { + OutPt op2 = GetLastOutPt(eNextHorz); + AddJoin(op2, op1, eNextHorz.Top); + } + eNextHorz = eNextHorz.NextInSEL; + } + AddGhostJoin(op1, horzEdge.Bot); + } + + //OK, so far we're still in range of the horizontal Edge but make sure + //we're at the last of consec. horizontals when matching with eMaxPair + if(e == eMaxPair && IsLastHorz) + { + if (horzEdge.OutIdx >= 0) + AddLocalMaxPoly(horzEdge, eMaxPair, horzEdge.Top); + DeleteFromAEL(horzEdge); + DeleteFromAEL(eMaxPair); + return; + } + + if(dir == Direction.dLeftToRight) + { + IntPoint Pt = new IntPoint(e.Curr.X, horzEdge.Curr.Y); + IntersectEdges(horzEdge, e, Pt); + } + else + { + IntPoint Pt = new IntPoint(e.Curr.X, horzEdge.Curr.Y); + IntersectEdges(e, horzEdge, Pt); + } + TEdge eNext = GetNextInAEL(e, dir); + SwapPositionsInAEL(horzEdge, e); + e = eNext; + } //end while(e != null) + + //Break out of loop if HorzEdge.NextInLML is not also horizontal ... + if (horzEdge.NextInLML == null || !IsHorizontal(horzEdge.NextInLML)) break; + + UpdateEdgeIntoAEL(ref horzEdge); + if (horzEdge.OutIdx >= 0) AddOutPt(horzEdge, horzEdge.Bot); + GetHorzDirection(horzEdge, out dir, out horzLeft, out horzRight); + + } //end for (;;) + + if (horzEdge.OutIdx >= 0 && op1 == null) + { + op1 = GetLastOutPt(horzEdge); + TEdge eNextHorz = m_SortedEdges; + while (eNextHorz != null) + { + if (eNextHorz.OutIdx >= 0 && + HorzSegmentsOverlap(horzEdge.Bot.X, + horzEdge.Top.X, eNextHorz.Bot.X, eNextHorz.Top.X)) + { + OutPt op2 = GetLastOutPt(eNextHorz); + AddJoin(op2, op1, eNextHorz.Top); + } + eNextHorz = eNextHorz.NextInSEL; + } + AddGhostJoin(op1, horzEdge.Top); + } + + if (horzEdge.NextInLML != null) + { + if(horzEdge.OutIdx >= 0) + { + op1 = AddOutPt( horzEdge, horzEdge.Top); + + UpdateEdgeIntoAEL(ref horzEdge); + if (horzEdge.WindDelta == 0) return; + //nb: HorzEdge is no longer horizontal here + TEdge ePrev = horzEdge.PrevInAEL; + TEdge eNext = horzEdge.NextInAEL; + if (ePrev != null && ePrev.Curr.X == horzEdge.Bot.X && + ePrev.Curr.Y == horzEdge.Bot.Y && ePrev.WindDelta != 0 && + (ePrev.OutIdx >= 0 && ePrev.Curr.Y > ePrev.Top.Y && + SlopesEqual(horzEdge, ePrev, m_UseFullRange))) + { + OutPt op2 = AddOutPt(ePrev, horzEdge.Bot); + AddJoin(op1, op2, horzEdge.Top); + } + else if (eNext != null && eNext.Curr.X == horzEdge.Bot.X && + eNext.Curr.Y == horzEdge.Bot.Y && eNext.WindDelta != 0 && + eNext.OutIdx >= 0 && eNext.Curr.Y > eNext.Top.Y && + SlopesEqual(horzEdge, eNext, m_UseFullRange)) + { + OutPt op2 = AddOutPt(eNext, horzEdge.Bot); + AddJoin(op1, op2, horzEdge.Top); + } + } + else + UpdateEdgeIntoAEL(ref horzEdge); + } + else + { + if (horzEdge.OutIdx >= 0) AddOutPt(horzEdge, horzEdge.Top); + DeleteFromAEL(horzEdge); + } + } + //------------------------------------------------------------------------------ + + private TEdge GetNextInAEL(TEdge e, Direction Direction) + { + return Direction == Direction.dLeftToRight ? e.NextInAEL: e.PrevInAEL; + } + //------------------------------------------------------------------------------ + + private bool IsMinima(TEdge e) + { + return e != null && (e.Prev.NextInLML != e) && (e.Next.NextInLML != e); + } + //------------------------------------------------------------------------------ + + private bool IsMaxima(TEdge e, double Y) + { + return (e != null && e.Top.Y == Y && e.NextInLML == null); + } + //------------------------------------------------------------------------------ + + private bool IsIntermediate(TEdge e, double Y) + { + return (e.Top.Y == Y && e.NextInLML != null); + } + //------------------------------------------------------------------------------ + + internal TEdge GetMaximaPair(TEdge e) + { + if ((e.Next.Top == e.Top) && e.Next.NextInLML == null) + return e.Next; + else if ((e.Prev.Top == e.Top) && e.Prev.NextInLML == null) + return e.Prev; + else + return null; + } + //------------------------------------------------------------------------------ + + internal TEdge GetMaximaPairEx(TEdge e) + { + //as above but returns null if MaxPair isn't in AEL (unless it's horizontal) + TEdge result = GetMaximaPair(e); + if (result == null || result.OutIdx == Skip || + ((result.NextInAEL == result.PrevInAEL) && !IsHorizontal(result))) return null; + return result; + } + //------------------------------------------------------------------------------ + + private bool ProcessIntersections(cInt topY) + { + if( m_ActiveEdges == null ) return true; + try { + BuildIntersectList(topY); + if ( m_IntersectList.Count == 0) return true; + if (m_IntersectList.Count == 1 || FixupIntersectionOrder()) + ProcessIntersectList(); + else + return false; + } + catch { + m_SortedEdges = null; + m_IntersectList.Clear(); + throw new ClipperException("ProcessIntersections error"); + } + m_SortedEdges = null; + return true; + } + //------------------------------------------------------------------------------ + + private void BuildIntersectList(cInt topY) + { + if ( m_ActiveEdges == null ) return; + + //prepare for sorting ... + TEdge e = m_ActiveEdges; + m_SortedEdges = e; + while( e != null ) + { + e.PrevInSEL = e.PrevInAEL; + e.NextInSEL = e.NextInAEL; + e.Curr.X = TopX( e, topY ); + e = e.NextInAEL; + } + + //bubblesort ... + bool isModified = true; + while( isModified && m_SortedEdges != null ) + { + isModified = false; + e = m_SortedEdges; + while( e.NextInSEL != null ) + { + TEdge eNext = e.NextInSEL; + IntPoint pt; + if (e.Curr.X > eNext.Curr.X) + { + IntersectPoint(e, eNext, out pt); + if (pt.Y < topY) + pt = new IntPoint(TopX(e, topY), topY); + IntersectNode newNode = new IntersectNode(); + newNode.Edge1 = e; + newNode.Edge2 = eNext; + newNode.Pt = pt; + m_IntersectList.Add(newNode); + + SwapPositionsInSEL(e, eNext); + isModified = true; + } + else + e = eNext; + } + if( e.PrevInSEL != null ) e.PrevInSEL.NextInSEL = null; + else break; + } + m_SortedEdges = null; + } + //------------------------------------------------------------------------------ + + private bool EdgesAdjacent(IntersectNode inode) + { + return (inode.Edge1.NextInSEL == inode.Edge2) || + (inode.Edge1.PrevInSEL == inode.Edge2); + } + //------------------------------------------------------------------------------ + + private static int IntersectNodeSort(IntersectNode node1, IntersectNode node2) + { + //the following typecast is safe because the differences in Pt.Y will + //be limited to the height of the scanbeam. + return (int)(node2.Pt.Y - node1.Pt.Y); + } + //------------------------------------------------------------------------------ + + private bool FixupIntersectionOrder() + { + //pre-condition: intersections are sorted bottom-most first. + //Now it's crucial that intersections are made only between adjacent edges, + //so to ensure this the order of intersections may need adjusting ... + m_IntersectList.Sort(m_IntersectNodeComparer); + + CopyAELToSEL(); + int cnt = m_IntersectList.Count; + for (int i = 0; i < cnt; i++) + { + if (!EdgesAdjacent(m_IntersectList[i])) + { + int j = i + 1; + while (j < cnt && !EdgesAdjacent(m_IntersectList[j])) j++; + if (j == cnt) return false; + + IntersectNode tmp = m_IntersectList[i]; + m_IntersectList[i] = m_IntersectList[j]; + m_IntersectList[j] = tmp; + + } + SwapPositionsInSEL(m_IntersectList[i].Edge1, m_IntersectList[i].Edge2); + } + return true; + } + //------------------------------------------------------------------------------ + + private void ProcessIntersectList() + { + for (int i = 0; i < m_IntersectList.Count; i++) + { + IntersectNode iNode = m_IntersectList[i]; + { + IntersectEdges(iNode.Edge1, iNode.Edge2, iNode.Pt); + SwapPositionsInAEL(iNode.Edge1, iNode.Edge2); + } + } + m_IntersectList.Clear(); + } + //------------------------------------------------------------------------------ + + internal static cInt Round(double value) + { + return value < 0 ? (cInt)(value - 0.5) : (cInt)(value + 0.5); + } + //------------------------------------------------------------------------------ + + private static cInt TopX(TEdge edge, cInt currentY) + { + if (currentY == edge.Top.Y) + return edge.Top.X; + return edge.Bot.X + Round(edge.Dx *(currentY - edge.Bot.Y)); + } + //------------------------------------------------------------------------------ + + private void IntersectPoint(TEdge edge1, TEdge edge2, out IntPoint ip) + { + ip = new IntPoint(); + double b1, b2; + //nb: with very large coordinate values, it's possible for SlopesEqual() to + //return false but for the edge.Dx value be equal due to double precision rounding. + if (edge1.Dx == edge2.Dx) + { + ip.Y = edge1.Curr.Y; + ip.X = TopX(edge1, ip.Y); + return; + } + + if (edge1.Delta.X == 0) + { + ip.X = edge1.Bot.X; + if (IsHorizontal(edge2)) + { + ip.Y = edge2.Bot.Y; + } + else + { + b2 = edge2.Bot.Y - (edge2.Bot.X / edge2.Dx); + ip.Y = Round(ip.X / edge2.Dx + b2); + } + } + else if (edge2.Delta.X == 0) + { + ip.X = edge2.Bot.X; + if (IsHorizontal(edge1)) + { + ip.Y = edge1.Bot.Y; + } + else + { + b1 = edge1.Bot.Y - (edge1.Bot.X / edge1.Dx); + ip.Y = Round(ip.X / edge1.Dx + b1); + } + } + else + { + b1 = edge1.Bot.X - edge1.Bot.Y * edge1.Dx; + b2 = edge2.Bot.X - edge2.Bot.Y * edge2.Dx; + double q = (b2 - b1) / (edge1.Dx - edge2.Dx); + ip.Y = Round(q); + if (Math.Abs(edge1.Dx) < Math.Abs(edge2.Dx)) + ip.X = Round(edge1.Dx * q + b1); + else + ip.X = Round(edge2.Dx * q + b2); + } + + if (ip.Y < edge1.Top.Y || ip.Y < edge2.Top.Y) + { + if (edge1.Top.Y > edge2.Top.Y) + ip.Y = edge1.Top.Y; + else + ip.Y = edge2.Top.Y; + if (Math.Abs(edge1.Dx) < Math.Abs(edge2.Dx)) + ip.X = TopX(edge1, ip.Y); + else + ip.X = TopX(edge2, ip.Y); + } + //finally, don't allow 'ip' to be BELOW curr.Y (ie bottom of scanbeam) ... + if (ip.Y > edge1.Curr.Y) + { + ip.Y = edge1.Curr.Y; + //better to use the more vertical edge to derive X ... + if (Math.Abs(edge1.Dx) > Math.Abs(edge2.Dx)) + ip.X = TopX(edge2, ip.Y); + else + ip.X = TopX(edge1, ip.Y); + } + } + //------------------------------------------------------------------------------ + + private void ProcessEdgesAtTopOfScanbeam(cInt topY) + { + TEdge e = m_ActiveEdges; + while(e != null) + { + //1. process maxima, treating them as if they're 'bent' horizontal edges, + // but exclude maxima with horizontal edges. nb: e can't be a horizontal. + bool IsMaximaEdge = IsMaxima(e, topY); + + if(IsMaximaEdge) + { + TEdge eMaxPair = GetMaximaPairEx(e); + IsMaximaEdge = (eMaxPair == null || !IsHorizontal(eMaxPair)); + } + + if(IsMaximaEdge) + { + if (StrictlySimple) InsertMaxima(e.Top.X); + TEdge ePrev = e.PrevInAEL; + DoMaxima(e); + if( ePrev == null) e = m_ActiveEdges; + else e = ePrev.NextInAEL; + } + else + { + //2. promote horizontal edges, otherwise update Curr.X and Curr.Y ... + if (IsIntermediate(e, topY) && IsHorizontal(e.NextInLML)) + { + UpdateEdgeIntoAEL(ref e); + if (e.OutIdx >= 0) + AddOutPt(e, e.Bot); + AddEdgeToSEL(e); + } + else + { + e.Curr.X = TopX( e, topY ); + e.Curr.Y = topY; +#if use_xyz + if (e.Top.Y == topY) e.Curr.Z = e.Top.Z; + else if (e.Bot.Y == topY) e.Curr.Z = e.Bot.Z; + else e.Curr.Z = 0; +#endif + } + //When StrictlySimple and 'e' is being touched by another edge, then + //make sure both edges have a vertex here ... + if (StrictlySimple) + { + TEdge ePrev = e.PrevInAEL; + if ((e.OutIdx >= 0) && (e.WindDelta != 0) && ePrev != null && + (ePrev.OutIdx >= 0) && (ePrev.Curr.X == e.Curr.X) && + (ePrev.WindDelta != 0)) + { + IntPoint ip = new IntPoint(e.Curr); +#if use_xyz + SetZ(ref ip, ePrev, e); +#endif + OutPt op = AddOutPt(ePrev, ip); + OutPt op2 = AddOutPt(e, ip); + AddJoin(op, op2, ip); //StrictlySimple (type-3) join + } + } + + e = e.NextInAEL; + } + } + + //3. Process horizontals at the Top of the scanbeam ... + ProcessHorizontals(); + m_Maxima = null; + + //4. Promote intermediate vertices ... + e = m_ActiveEdges; + while (e != null) + { + if(IsIntermediate(e, topY)) + { + OutPt op = null; + if( e.OutIdx >= 0 ) + op = AddOutPt(e, e.Top); + UpdateEdgeIntoAEL(ref e); + + //if output polygons share an edge, they'll need joining later ... + TEdge ePrev = e.PrevInAEL; + TEdge eNext = e.NextInAEL; + if (ePrev != null && ePrev.Curr.X == e.Bot.X && + ePrev.Curr.Y == e.Bot.Y && op != null && + ePrev.OutIdx >= 0 && ePrev.Curr.Y > ePrev.Top.Y && + SlopesEqual(e.Curr, e.Top, ePrev.Curr, ePrev.Top, m_UseFullRange) && + (e.WindDelta != 0) && (ePrev.WindDelta != 0)) + { + OutPt op2 = AddOutPt(ePrev, e.Bot); + AddJoin(op, op2, e.Top); + } + else if (eNext != null && eNext.Curr.X == e.Bot.X && + eNext.Curr.Y == e.Bot.Y && op != null && + eNext.OutIdx >= 0 && eNext.Curr.Y > eNext.Top.Y && + SlopesEqual(e.Curr, e.Top, eNext.Curr, eNext.Top, m_UseFullRange) && + (e.WindDelta != 0) && (eNext.WindDelta != 0)) + { + OutPt op2 = AddOutPt(eNext, e.Bot); + AddJoin(op, op2, e.Top); + } + } + e = e.NextInAEL; + } + } + //------------------------------------------------------------------------------ + + private void DoMaxima(TEdge e) + { + TEdge eMaxPair = GetMaximaPairEx(e); + if (eMaxPair == null) + { + if (e.OutIdx >= 0) + AddOutPt(e, e.Top); + DeleteFromAEL(e); + return; + } + + TEdge eNext = e.NextInAEL; + while(eNext != null && eNext != eMaxPair) + { + IntersectEdges(e, eNext, e.Top); + SwapPositionsInAEL(e, eNext); + eNext = e.NextInAEL; + } + + if(e.OutIdx == Unassigned && eMaxPair.OutIdx == Unassigned) + { + DeleteFromAEL(e); + DeleteFromAEL(eMaxPair); + } + else if( e.OutIdx >= 0 && eMaxPair.OutIdx >= 0 ) + { + if (e.OutIdx >= 0) AddLocalMaxPoly(e, eMaxPair, e.Top); + DeleteFromAEL(e); + DeleteFromAEL(eMaxPair); + } +#if use_lines + else if (e.WindDelta == 0) + { + if (e.OutIdx >= 0) + { + AddOutPt(e, e.Top); + e.OutIdx = Unassigned; + } + DeleteFromAEL(e); + + if (eMaxPair.OutIdx >= 0) + { + AddOutPt(eMaxPair, e.Top); + eMaxPair.OutIdx = Unassigned; + } + DeleteFromAEL(eMaxPair); + } +#endif + else throw new ClipperException("DoMaxima error"); + } + //------------------------------------------------------------------------------ + + public static void ReversePaths(Paths polys) + { + foreach (List poly in polys) { poly.Reverse(); } + } + //------------------------------------------------------------------------------ + + public static bool Orientation(Path poly) + { + return Area(poly) >= 0; + } + //------------------------------------------------------------------------------ + + private int PointCount(OutPt pts) + { + if (pts == null) return 0; + int result = 0; + OutPt p = pts; + do + { + result++; + p = p.Next; + } + while (p != pts); + return result; + } + //------------------------------------------------------------------------------ + + private void BuildResult(Paths polyg) + { + polyg.Clear(); + polyg.Capacity = m_PolyOuts.Count; + for (int i = 0; i < m_PolyOuts.Count; i++) + { + OutRec outRec = m_PolyOuts[i]; + if (outRec.Pts == null) continue; + OutPt p = outRec.Pts.Prev; + int cnt = PointCount(p); + if (cnt < 2) continue; + Path pg = new Path(cnt); + for (int j = 0; j < cnt; j++) + { + pg.Add(p.Pt); + p = p.Prev; + } + polyg.Add(pg); + } + } + //------------------------------------------------------------------------------ + + private void BuildResult2(PolyTree polytree) + { + polytree.Clear(); + + //add each output polygon/contour to polytree ... + polytree.m_AllPolys.Capacity = m_PolyOuts.Count; + for (int i = 0; i < m_PolyOuts.Count; i++) + { + OutRec outRec = m_PolyOuts[i]; + int cnt = PointCount(outRec.Pts); + if ((outRec.IsOpen && cnt < 2) || + (!outRec.IsOpen && cnt < 3)) continue; + FixHoleLinkage(outRec); + PolyNode pn = new PolyNode(); + polytree.m_AllPolys.Add(pn); + outRec.PolyNode = pn; + pn.m_polygon.Capacity = cnt; + OutPt op = outRec.Pts.Prev; + for (int j = 0; j < cnt; j++) + { + pn.m_polygon.Add(op.Pt); + op = op.Prev; + } + } + + //fixup PolyNode links etc ... + polytree.m_Childs.Capacity = m_PolyOuts.Count; + for (int i = 0; i < m_PolyOuts.Count; i++) + { + OutRec outRec = m_PolyOuts[i]; + if (outRec.PolyNode == null) continue; + else if (outRec.IsOpen) + { + outRec.PolyNode.IsOpen = true; + polytree.AddChild(outRec.PolyNode); + } + else if (outRec.FirstLeft != null && + outRec.FirstLeft.PolyNode != null) + outRec.FirstLeft.PolyNode.AddChild(outRec.PolyNode); + else + polytree.AddChild(outRec.PolyNode); + } + } + //------------------------------------------------------------------------------ + + private void FixupOutPolyline(OutRec outrec) + { + OutPt pp = outrec.Pts; + OutPt lastPP = pp.Prev; + while (pp != lastPP) + { + pp = pp.Next; + if (pp.Pt == pp.Prev.Pt) + { + if (pp == lastPP) lastPP = pp.Prev; + OutPt tmpPP = pp.Prev; + tmpPP.Next = pp.Next; + pp.Next.Prev = tmpPP; + pp = tmpPP; + } + } + if (pp == pp.Prev) outrec.Pts = null; + } + //------------------------------------------------------------------------------ + + private void FixupOutPolygon(OutRec outRec) + { + //FixupOutPolygon() - removes duplicate points and simplifies consecutive + //parallel edges by removing the middle vertex. + OutPt lastOK = null; + outRec.BottomPt = null; + OutPt pp = outRec.Pts; + bool preserveCol = PreserveCollinear || StrictlySimple; + for (;;) + { + if (pp.Prev == pp || pp.Prev == pp.Next) + { + outRec.Pts = null; + return; + } + //test for duplicate points and collinear edges ... + if ((pp.Pt == pp.Next.Pt) || (pp.Pt == pp.Prev.Pt) || + (SlopesEqual(pp.Prev.Pt, pp.Pt, pp.Next.Pt, m_UseFullRange) && + (!preserveCol || !Pt2IsBetweenPt1AndPt3(pp.Prev.Pt, pp.Pt, pp.Next.Pt)))) + { + lastOK = null; + pp.Prev.Next = pp.Next; + pp.Next.Prev = pp.Prev; + pp = pp.Prev; + } + else if (pp == lastOK) break; + else + { + if (lastOK == null) lastOK = pp; + pp = pp.Next; + } + } + outRec.Pts = pp; + } + //------------------------------------------------------------------------------ + + OutPt DupOutPt(OutPt outPt, bool InsertAfter) + { + OutPt result = new OutPt(); + result.Pt = outPt.Pt; + result.Idx = outPt.Idx; + if (InsertAfter) + { + result.Next = outPt.Next; + result.Prev = outPt; + outPt.Next.Prev = result; + outPt.Next = result; + } + else + { + result.Prev = outPt.Prev; + result.Next = outPt; + outPt.Prev.Next = result; + outPt.Prev = result; + } + return result; + } + //------------------------------------------------------------------------------ + + bool GetOverlap(cInt a1, cInt a2, cInt b1, cInt b2, out cInt Left, out cInt Right) + { + if (a1 < a2) + { + if (b1 < b2) {Left = Math.Max(a1,b1); Right = Math.Min(a2,b2);} + else {Left = Math.Max(a1,b2); Right = Math.Min(a2,b1);} + } + else + { + if (b1 < b2) {Left = Math.Max(a2,b1); Right = Math.Min(a1,b2);} + else { Left = Math.Max(a2, b2); Right = Math.Min(a1, b1); } + } + return Left < Right; + } + //------------------------------------------------------------------------------ + + bool JoinHorz(OutPt op1, OutPt op1b, OutPt op2, OutPt op2b, + IntPoint Pt, bool DiscardLeft) + { + Direction Dir1 = (op1.Pt.X > op1b.Pt.X ? + Direction.dRightToLeft : Direction.dLeftToRight); + Direction Dir2 = (op2.Pt.X > op2b.Pt.X ? + Direction.dRightToLeft : Direction.dLeftToRight); + if (Dir1 == Dir2) return false; + + //When DiscardLeft, we want Op1b to be on the Left of Op1, otherwise we + //want Op1b to be on the Right. (And likewise with Op2 and Op2b.) + //So, to facilitate this while inserting Op1b and Op2b ... + //when DiscardLeft, make sure we're AT or RIGHT of Pt before adding Op1b, + //otherwise make sure we're AT or LEFT of Pt. (Likewise with Op2b.) + if (Dir1 == Direction.dLeftToRight) + { + while (op1.Next.Pt.X <= Pt.X && + op1.Next.Pt.X >= op1.Pt.X && op1.Next.Pt.Y == Pt.Y) + op1 = op1.Next; + if (DiscardLeft && (op1.Pt.X != Pt.X)) op1 = op1.Next; + op1b = DupOutPt(op1, !DiscardLeft); + if (op1b.Pt != Pt) + { + op1 = op1b; + op1.Pt = Pt; + op1b = DupOutPt(op1, !DiscardLeft); + } + } + else + { + while (op1.Next.Pt.X >= Pt.X && + op1.Next.Pt.X <= op1.Pt.X && op1.Next.Pt.Y == Pt.Y) + op1 = op1.Next; + if (!DiscardLeft && (op1.Pt.X != Pt.X)) op1 = op1.Next; + op1b = DupOutPt(op1, DiscardLeft); + if (op1b.Pt != Pt) + { + op1 = op1b; + op1.Pt = Pt; + op1b = DupOutPt(op1, DiscardLeft); + } + } + + if (Dir2 == Direction.dLeftToRight) + { + while (op2.Next.Pt.X <= Pt.X && + op2.Next.Pt.X >= op2.Pt.X && op2.Next.Pt.Y == Pt.Y) + op2 = op2.Next; + if (DiscardLeft && (op2.Pt.X != Pt.X)) op2 = op2.Next; + op2b = DupOutPt(op2, !DiscardLeft); + if (op2b.Pt != Pt) + { + op2 = op2b; + op2.Pt = Pt; + op2b = DupOutPt(op2, !DiscardLeft); + }; + } else + { + while (op2.Next.Pt.X >= Pt.X && + op2.Next.Pt.X <= op2.Pt.X && op2.Next.Pt.Y == Pt.Y) + op2 = op2.Next; + if (!DiscardLeft && (op2.Pt.X != Pt.X)) op2 = op2.Next; + op2b = DupOutPt(op2, DiscardLeft); + if (op2b.Pt != Pt) + { + op2 = op2b; + op2.Pt = Pt; + op2b = DupOutPt(op2, DiscardLeft); + }; + }; + + if ((Dir1 == Direction.dLeftToRight) == DiscardLeft) + { + op1.Prev = op2; + op2.Next = op1; + op1b.Next = op2b; + op2b.Prev = op1b; + } + else + { + op1.Next = op2; + op2.Prev = op1; + op1b.Prev = op2b; + op2b.Next = op1b; + } + return true; + } + //------------------------------------------------------------------------------ + + private bool JoinPoints(Join j, OutRec outRec1, OutRec outRec2) + { + OutPt op1 = j.OutPt1, op1b; + OutPt op2 = j.OutPt2, op2b; + + //There are 3 kinds of joins for output polygons ... + //1. Horizontal joins where Join.OutPt1 & Join.OutPt2 are vertices anywhere + //along (horizontal) collinear edges (& Join.OffPt is on the same horizontal). + //2. Non-horizontal joins where Join.OutPt1 & Join.OutPt2 are at the same + //location at the Bottom of the overlapping segment (& Join.OffPt is above). + //3. StrictlySimple joins where edges touch but are not collinear and where + //Join.OutPt1, Join.OutPt2 & Join.OffPt all share the same point. + bool isHorizontal = (j.OutPt1.Pt.Y == j.OffPt.Y); + + if (isHorizontal && (j.OffPt == j.OutPt1.Pt) && (j.OffPt == j.OutPt2.Pt)) + { + //Strictly Simple join ... + if (outRec1 != outRec2) return false; + op1b = j.OutPt1.Next; + while (op1b != op1 && (op1b.Pt == j.OffPt)) + op1b = op1b.Next; + bool reverse1 = (op1b.Pt.Y > j.OffPt.Y); + op2b = j.OutPt2.Next; + while (op2b != op2 && (op2b.Pt == j.OffPt)) + op2b = op2b.Next; + bool reverse2 = (op2b.Pt.Y > j.OffPt.Y); + if (reverse1 == reverse2) return false; + if (reverse1) + { + op1b = DupOutPt(op1, false); + op2b = DupOutPt(op2, true); + op1.Prev = op2; + op2.Next = op1; + op1b.Next = op2b; + op2b.Prev = op1b; + j.OutPt1 = op1; + j.OutPt2 = op1b; + return true; + } else + { + op1b = DupOutPt(op1, true); + op2b = DupOutPt(op2, false); + op1.Next = op2; + op2.Prev = op1; + op1b.Prev = op2b; + op2b.Next = op1b; + j.OutPt1 = op1; + j.OutPt2 = op1b; + return true; + } + } + else if (isHorizontal) + { + //treat horizontal joins differently to non-horizontal joins since with + //them we're not yet sure where the overlapping is. OutPt1.Pt & OutPt2.Pt + //may be anywhere along the horizontal edge. + op1b = op1; + while (op1.Prev.Pt.Y == op1.Pt.Y && op1.Prev != op1b && op1.Prev != op2) + op1 = op1.Prev; + while (op1b.Next.Pt.Y == op1b.Pt.Y && op1b.Next != op1 && op1b.Next != op2) + op1b = op1b.Next; + if (op1b.Next == op1 || op1b.Next == op2) return false; //a flat 'polygon' + + op2b = op2; + while (op2.Prev.Pt.Y == op2.Pt.Y && op2.Prev != op2b && op2.Prev != op1b) + op2 = op2.Prev; + while (op2b.Next.Pt.Y == op2b.Pt.Y && op2b.Next != op2 && op2b.Next != op1) + op2b = op2b.Next; + if (op2b.Next == op2 || op2b.Next == op1) return false; //a flat 'polygon' + + cInt Left, Right; + //Op1 -. Op1b & Op2 -. Op2b are the extremites of the horizontal edges + if (!GetOverlap(op1.Pt.X, op1b.Pt.X, op2.Pt.X, op2b.Pt.X, out Left, out Right)) + return false; + + //DiscardLeftSide: when overlapping edges are joined, a spike will created + //which needs to be cleaned up. However, we don't want Op1 or Op2 caught up + //on the discard Side as either may still be needed for other joins ... + IntPoint Pt; + bool DiscardLeftSide; + if (op1.Pt.X >= Left && op1.Pt.X <= Right) + { + Pt = op1.Pt; DiscardLeftSide = (op1.Pt.X > op1b.Pt.X); + } + else if (op2.Pt.X >= Left&& op2.Pt.X <= Right) + { + Pt = op2.Pt; DiscardLeftSide = (op2.Pt.X > op2b.Pt.X); + } + else if (op1b.Pt.X >= Left && op1b.Pt.X <= Right) + { + Pt = op1b.Pt; DiscardLeftSide = op1b.Pt.X > op1.Pt.X; + } + else + { + Pt = op2b.Pt; DiscardLeftSide = (op2b.Pt.X > op2.Pt.X); + } + j.OutPt1 = op1; + j.OutPt2 = op2; + return JoinHorz(op1, op1b, op2, op2b, Pt, DiscardLeftSide); + } else + { + //nb: For non-horizontal joins ... + // 1. Jr.OutPt1.Pt.Y == Jr.OutPt2.Pt.Y + // 2. Jr.OutPt1.Pt > Jr.OffPt.Y + + //make sure the polygons are correctly oriented ... + op1b = op1.Next; + while ((op1b.Pt == op1.Pt) && (op1b != op1)) op1b = op1b.Next; + bool Reverse1 = ((op1b.Pt.Y > op1.Pt.Y) || + !SlopesEqual(op1.Pt, op1b.Pt, j.OffPt, m_UseFullRange)); + if (Reverse1) + { + op1b = op1.Prev; + while ((op1b.Pt == op1.Pt) && (op1b != op1)) op1b = op1b.Prev; + if ((op1b.Pt.Y > op1.Pt.Y) || + !SlopesEqual(op1.Pt, op1b.Pt, j.OffPt, m_UseFullRange)) return false; + }; + op2b = op2.Next; + while ((op2b.Pt == op2.Pt) && (op2b != op2)) op2b = op2b.Next; + bool Reverse2 = ((op2b.Pt.Y > op2.Pt.Y) || + !SlopesEqual(op2.Pt, op2b.Pt, j.OffPt, m_UseFullRange)); + if (Reverse2) + { + op2b = op2.Prev; + while ((op2b.Pt == op2.Pt) && (op2b != op2)) op2b = op2b.Prev; + if ((op2b.Pt.Y > op2.Pt.Y) || + !SlopesEqual(op2.Pt, op2b.Pt, j.OffPt, m_UseFullRange)) return false; + } + + if ((op1b == op1) || (op2b == op2) || (op1b == op2b) || + ((outRec1 == outRec2) && (Reverse1 == Reverse2))) return false; + + if (Reverse1) + { + op1b = DupOutPt(op1, false); + op2b = DupOutPt(op2, true); + op1.Prev = op2; + op2.Next = op1; + op1b.Next = op2b; + op2b.Prev = op1b; + j.OutPt1 = op1; + j.OutPt2 = op1b; + return true; + } else + { + op1b = DupOutPt(op1, true); + op2b = DupOutPt(op2, false); + op1.Next = op2; + op2.Prev = op1; + op1b.Prev = op2b; + op2b.Next = op1b; + j.OutPt1 = op1; + j.OutPt2 = op1b; + return true; + } + } + } + //---------------------------------------------------------------------- + + public static int PointInPolygon(IntPoint pt, Path path) + { + //returns 0 if false, +1 if true, -1 if pt ON polygon boundary + //See "The Point in Polygon Problem for Arbitrary Polygons" by Hormann & Agathos + //http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.88.5498&rep=rep1&type=pdf + int result = 0, cnt = path.Count; + if (cnt < 3) return 0; + IntPoint ip = path[0]; + for (int i = 1; i <= cnt; ++i) + { + IntPoint ipNext = (i == cnt ? path[0] : path[i]); + if (ipNext.Y == pt.Y) + { + if ((ipNext.X == pt.X) || (ip.Y == pt.Y && + ((ipNext.X > pt.X) == (ip.X < pt.X)))) return -1; + } + if ((ip.Y < pt.Y) != (ipNext.Y < pt.Y)) + { + if (ip.X >= pt.X) + { + if (ipNext.X > pt.X) result = 1 - result; + else + { + double d = (double)(ip.X - pt.X) * (ipNext.Y - pt.Y) - + (double)(ipNext.X - pt.X) * (ip.Y - pt.Y); + if (d == 0) return -1; + else if ((d > 0) == (ipNext.Y > ip.Y)) result = 1 - result; + } + } + else + { + if (ipNext.X > pt.X) + { + double d = (double)(ip.X - pt.X) * (ipNext.Y - pt.Y) - + (double)(ipNext.X - pt.X) * (ip.Y - pt.Y); + if (d == 0) return -1; + else if ((d > 0) == (ipNext.Y > ip.Y)) result = 1 - result; + } + } + } + ip = ipNext; + } + return result; + } + //------------------------------------------------------------------------------ + + //See "The Point in Polygon Problem for Arbitrary Polygons" by Hormann & Agathos + //http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.88.5498&rep=rep1&type=pdf + private static int PointInPolygon(IntPoint pt, OutPt op) + { + //returns 0 if false, +1 if true, -1 if pt ON polygon boundary + int result = 0; + OutPt startOp = op; + cInt ptx = pt.X, pty = pt.Y; + cInt poly0x = op.Pt.X, poly0y = op.Pt.Y; + do + { + op = op.Next; + cInt poly1x = op.Pt.X, poly1y = op.Pt.Y; + + if (poly1y == pty) + { + if ((poly1x == ptx) || (poly0y == pty && + ((poly1x > ptx) == (poly0x < ptx)))) return -1; + } + if ((poly0y < pty) != (poly1y < pty)) + { + if (poly0x >= ptx) + { + if (poly1x > ptx) result = 1 - result; + else + { + double d = (double)(poly0x - ptx) * (poly1y - pty) - + (double)(poly1x - ptx) * (poly0y - pty); + if (d == 0) return -1; + if ((d > 0) == (poly1y > poly0y)) result = 1 - result; + } + } + else + { + if (poly1x > ptx) + { + double d = (double)(poly0x - ptx) * (poly1y - pty) - + (double)(poly1x - ptx) * (poly0y - pty); + if (d == 0) return -1; + if ((d > 0) == (poly1y > poly0y)) result = 1 - result; + } + } + } + poly0x = poly1x; poly0y = poly1y; + } while (startOp != op); + return result; + } + //------------------------------------------------------------------------------ + + private static bool Poly2ContainsPoly1(OutPt outPt1, OutPt outPt2) + { + OutPt op = outPt1; + do + { + //nb: PointInPolygon returns 0 if false, +1 if true, -1 if pt on polygon + int res = PointInPolygon(op.Pt, outPt2); + if (res >= 0) return res > 0; + op = op.Next; + } + while (op != outPt1); + return true; + } + //---------------------------------------------------------------------- + + private void FixupFirstLefts1(OutRec OldOutRec, OutRec NewOutRec) + { + foreach (OutRec outRec in m_PolyOuts) + { + OutRec firstLeft = ParseFirstLeft(outRec.FirstLeft); + if (outRec.Pts != null && firstLeft == OldOutRec) + { + if (Poly2ContainsPoly1(outRec.Pts, NewOutRec.Pts)) + outRec.FirstLeft = NewOutRec; + } + } + } + //---------------------------------------------------------------------- + + private void FixupFirstLefts2(OutRec innerOutRec, OutRec outerOutRec) + { + //A polygon has split into two such that one is now the inner of the other. + //It's possible that these polygons now wrap around other polygons, so check + //every polygon that's also contained by OuterOutRec's FirstLeft container + //(including nil) to see if they've become inner to the new inner polygon ... + OutRec orfl = outerOutRec.FirstLeft; + foreach (OutRec outRec in m_PolyOuts) + { + if (outRec.Pts == null || outRec == outerOutRec || outRec == innerOutRec) + continue; + OutRec firstLeft = ParseFirstLeft(outRec.FirstLeft); + if (firstLeft != orfl && firstLeft != innerOutRec && firstLeft != outerOutRec) + continue; + if (Poly2ContainsPoly1(outRec.Pts, innerOutRec.Pts)) + outRec.FirstLeft = innerOutRec; + else if (Poly2ContainsPoly1(outRec.Pts, outerOutRec.Pts)) + outRec.FirstLeft = outerOutRec; + else if (outRec.FirstLeft == innerOutRec || outRec.FirstLeft == outerOutRec) + outRec.FirstLeft = orfl; + } + } + //---------------------------------------------------------------------- + + private void FixupFirstLefts3(OutRec OldOutRec, OutRec NewOutRec) + { + //same as FixupFirstLefts1 but doesn't call Poly2ContainsPoly1() + foreach (OutRec outRec in m_PolyOuts) + { + OutRec firstLeft = ParseFirstLeft(outRec.FirstLeft); + if (outRec.Pts != null && firstLeft == OldOutRec) + outRec.FirstLeft = NewOutRec; + } + } + //---------------------------------------------------------------------- + + private static OutRec ParseFirstLeft(OutRec FirstLeft) + { + while (FirstLeft != null && FirstLeft.Pts == null) + FirstLeft = FirstLeft.FirstLeft; + return FirstLeft; + } + //------------------------------------------------------------------------------ + + private void JoinCommonEdges() + { + for (int i = 0; i < m_Joins.Count; i++) + { + Join join = m_Joins[i]; + + OutRec outRec1 = GetOutRec(join.OutPt1.Idx); + OutRec outRec2 = GetOutRec(join.OutPt2.Idx); + + if (outRec1.Pts == null || outRec2.Pts == null) continue; + if (outRec1.IsOpen || outRec2.IsOpen) continue; + + //get the polygon fragment with the correct hole state (FirstLeft) + //before calling JoinPoints() ... + OutRec holeStateRec; + if (outRec1 == outRec2) holeStateRec = outRec1; + else if (OutRec1RightOfOutRec2(outRec1, outRec2)) holeStateRec = outRec2; + else if (OutRec1RightOfOutRec2(outRec2, outRec1)) holeStateRec = outRec1; + else holeStateRec = GetLowermostRec(outRec1, outRec2); + + if (!JoinPoints(join, outRec1, outRec2)) continue; + + if (outRec1 == outRec2) + { + //instead of joining two polygons, we've just created a new one by + //splitting one polygon into two. + outRec1.Pts = join.OutPt1; + outRec1.BottomPt = null; + outRec2 = CreateOutRec(); + outRec2.Pts = join.OutPt2; + + //update all OutRec2.Pts Idx's ... + UpdateOutPtIdxs(outRec2); + + if (Poly2ContainsPoly1(outRec2.Pts, outRec1.Pts)) + { + //outRec1 contains outRec2 ... + outRec2.IsHole = !outRec1.IsHole; + outRec2.FirstLeft = outRec1; + + if (m_UsingPolyTree) FixupFirstLefts2(outRec2, outRec1); + + if ((outRec2.IsHole ^ ReverseSolution) == (Area(outRec2) > 0)) + ReversePolyPtLinks(outRec2.Pts); + + } + else if (Poly2ContainsPoly1(outRec1.Pts, outRec2.Pts)) + { + //outRec2 contains outRec1 ... + outRec2.IsHole = outRec1.IsHole; + outRec1.IsHole = !outRec2.IsHole; + outRec2.FirstLeft = outRec1.FirstLeft; + outRec1.FirstLeft = outRec2; + + if (m_UsingPolyTree) FixupFirstLefts2(outRec1, outRec2); + + if ((outRec1.IsHole ^ ReverseSolution) == (Area(outRec1) > 0)) + ReversePolyPtLinks(outRec1.Pts); + } + else + { + //the 2 polygons are completely separate ... + outRec2.IsHole = outRec1.IsHole; + outRec2.FirstLeft = outRec1.FirstLeft; + + //fixup FirstLeft pointers that may need reassigning to OutRec2 + if (m_UsingPolyTree) FixupFirstLefts1(outRec1, outRec2); + } + + } else + { + //joined 2 polygons together ... + + outRec2.Pts = null; + outRec2.BottomPt = null; + outRec2.Idx = outRec1.Idx; + + outRec1.IsHole = holeStateRec.IsHole; + if (holeStateRec == outRec2) + outRec1.FirstLeft = outRec2.FirstLeft; + outRec2.FirstLeft = outRec1; + + //fixup FirstLeft pointers that may need reassigning to OutRec1 + if (m_UsingPolyTree) FixupFirstLefts3(outRec2, outRec1); + } + } + } + //------------------------------------------------------------------------------ + + private void UpdateOutPtIdxs(OutRec outrec) + { + OutPt op = outrec.Pts; + do + { + op.Idx = outrec.Idx; + op = op.Prev; + } + while(op != outrec.Pts); + } + //------------------------------------------------------------------------------ + + private void DoSimplePolygons() + { + int i = 0; + while (i < m_PolyOuts.Count) + { + OutRec outrec = m_PolyOuts[i++]; + OutPt op = outrec.Pts; + if (op == null || outrec.IsOpen) continue; + do //for each Pt in Polygon until duplicate found do ... + { + OutPt op2 = op.Next; + while (op2 != outrec.Pts) + { + if ((op.Pt == op2.Pt) && op2.Next != op && op2.Prev != op) + { + //split the polygon into two ... + OutPt op3 = op.Prev; + OutPt op4 = op2.Prev; + op.Prev = op4; + op4.Next = op; + op2.Prev = op3; + op3.Next = op2; + + outrec.Pts = op; + OutRec outrec2 = CreateOutRec(); + outrec2.Pts = op2; + UpdateOutPtIdxs(outrec2); + if (Poly2ContainsPoly1(outrec2.Pts, outrec.Pts)) + { + //OutRec2 is contained by OutRec1 ... + outrec2.IsHole = !outrec.IsHole; + outrec2.FirstLeft = outrec; + if (m_UsingPolyTree) FixupFirstLefts2(outrec2, outrec); + } + else + if (Poly2ContainsPoly1(outrec.Pts, outrec2.Pts)) + { + //OutRec1 is contained by OutRec2 ... + outrec2.IsHole = outrec.IsHole; + outrec.IsHole = !outrec2.IsHole; + outrec2.FirstLeft = outrec.FirstLeft; + outrec.FirstLeft = outrec2; + if (m_UsingPolyTree) FixupFirstLefts2(outrec, outrec2); + } + else + { + //the 2 polygons are separate ... + outrec2.IsHole = outrec.IsHole; + outrec2.FirstLeft = outrec.FirstLeft; + if (m_UsingPolyTree) FixupFirstLefts1(outrec, outrec2); + } + op2 = op; //ie get ready for the next iteration + } + op2 = op2.Next; + } + op = op.Next; + } + while (op != outrec.Pts); + } + } + //------------------------------------------------------------------------------ + + public static double Area(Path poly) + { + int cnt = (int)poly.Count; + if (cnt < 3) return 0; + double a = 0; + for (int i = 0, j = cnt - 1; i < cnt; ++i) + { + a += ((double)poly[j].X + poly[i].X) * ((double)poly[j].Y - poly[i].Y); + j = i; + } + return -a * 0.5; + } + //------------------------------------------------------------------------------ + + internal double Area(OutRec outRec) + { + return Area(outRec.Pts); + } + //------------------------------------------------------------------------------ + + internal double Area(OutPt op) + { + OutPt opFirst = op; + if (op == null) return 0; + double a = 0; + do { + a = a + (double)(op.Prev.Pt.X + op.Pt.X) * (double)(op.Prev.Pt.Y - op.Pt.Y); + op = op.Next; + } while (op != opFirst); + return a * 0.5; + } + + //------------------------------------------------------------------------------ + // SimplifyPolygon functions ... + // Convert self-intersecting polygons into simple polygons + //------------------------------------------------------------------------------ + + public static Paths SimplifyPolygon(Path poly) + { + return SimplifyPolygon(poly, PolyFillType.pftEvenOdd); + } + public static Paths SimplifyPolygon(Path poly, + PolyFillType fillType) + { + Paths result = new Paths(); + Clipper c = new Clipper(0); + c.StrictlySimple = true; + c.AddPath(poly, PolyType.ptSubject, true); + c.Execute(ClipType.ctUnion, result, fillType, fillType); + return result; + } + //------------------------------------------------------------------------------ + public static Paths SimplifyPolygons(Paths polys) + { + return SimplifyPolygons(polys, PolyFillType.pftEvenOdd); + } + public static Paths SimplifyPolygons(Paths polys, + PolyFillType fillType) + { + Paths result = new Paths(); + Clipper c = new Clipper(0); + c.StrictlySimple = true; + c.AddPaths(polys, PolyType.ptSubject, true); + c.Execute(ClipType.ctUnion, result, fillType, fillType); + return result; + } + //------------------------------------------------------------------------------ + + private static double DistanceSqrd(IntPoint pt1, IntPoint pt2) + { + double dx = ((double)pt1.X - pt2.X); + double dy = ((double)pt1.Y - pt2.Y); + return (dx*dx + dy*dy); + } + //------------------------------------------------------------------------------ + + private static double DistanceFromLineSqrd(IntPoint pt, IntPoint ln1, IntPoint ln2) + { + //The equation of a line in general form (Ax + By + C = 0) + //given 2 points (x¹,y¹) & (x²,y²) is ... + //(y¹ - y²)x + (x² - x¹)y + (y² - y¹)x¹ - (x² - x¹)y¹ = 0 + //A = (y¹ - y²); B = (x² - x¹); C = (y² - y¹)x¹ - (x² - x¹)y¹ + //perpendicular distance of point (x³,y³) = (Ax³ + By³ + C)/Sqrt(A² + B²) + //see http://en.wikipedia.org/wiki/Perpendicular_distance + double A = ln1.Y - ln2.Y; + double B = ln2.X - ln1.X; + double C = A * ln1.X + B * ln1.Y; + C = A * pt.X + B * pt.Y - C; + return (C * C) / (A * A + B * B); + } + //--------------------------------------------------------------------------- + + private static bool SlopesNearCollinear(IntPoint pt1, + IntPoint pt2, IntPoint pt3, double distSqrd) + { + //this function is more accurate when the point that's GEOMETRICALLY + //between the other 2 points is the one that's tested for distance. + //nb: with 'spikes', either pt1 or pt3 is geometrically between the other pts + if (Math.Abs(pt1.X - pt2.X) > Math.Abs(pt1.Y - pt2.Y)) + { + if ((pt1.X > pt2.X) == (pt1.X < pt3.X)) + return DistanceFromLineSqrd(pt1, pt2, pt3) < distSqrd; + else if ((pt2.X > pt1.X) == (pt2.X < pt3.X)) + return DistanceFromLineSqrd(pt2, pt1, pt3) < distSqrd; + else + return DistanceFromLineSqrd(pt3, pt1, pt2) < distSqrd; + } + else + { + if ((pt1.Y > pt2.Y) == (pt1.Y < pt3.Y)) + return DistanceFromLineSqrd(pt1, pt2, pt3) < distSqrd; + else if ((pt2.Y > pt1.Y) == (pt2.Y < pt3.Y)) + return DistanceFromLineSqrd(pt2, pt1, pt3) < distSqrd; + else + return DistanceFromLineSqrd(pt3, pt1, pt2) < distSqrd; + } + } + //------------------------------------------------------------------------------ + + private static bool PointsAreClose(IntPoint pt1, IntPoint pt2, double distSqrd) + { + double dx = (double)pt1.X - pt2.X; + double dy = (double)pt1.Y - pt2.Y; + return ((dx * dx) + (dy * dy) <= distSqrd); + } + //------------------------------------------------------------------------------ + + private static OutPt ExcludeOp(OutPt op) + { + OutPt result = op.Prev; + result.Next = op.Next; + op.Next.Prev = result; + result.Idx = 0; + return result; + } + //------------------------------------------------------------------------------ + public static Path CleanPolygon(Path path) + { + return CleanPolygon(path,1.415); + } + public static Path CleanPolygon(Path path, double distance) + { + //distance = proximity in units/pixels below which vertices will be stripped. + //Default ~= sqrt(2) so when adjacent vertices or semi-adjacent vertices have + //both x & y coords within 1 unit, then the second vertex will be stripped. + + int cnt = path.Count; + + if (cnt == 0) return new Path(); + + OutPt [] outPts = new OutPt[cnt]; + for (int i = 0; i < cnt; ++i) outPts[i] = new OutPt(); + + for (int i = 0; i < cnt; ++i) + { + outPts[i].Pt = path[i]; + outPts[i].Next = outPts[(i + 1) % cnt]; + outPts[i].Next.Prev = outPts[i]; + outPts[i].Idx = 0; + } + + double distSqrd = distance * distance; + OutPt op = outPts[0]; + while (op.Idx == 0 && op.Next != op.Prev) + { + if (PointsAreClose(op.Pt, op.Prev.Pt, distSqrd)) + { + op = ExcludeOp(op); + cnt--; + } + else if (PointsAreClose(op.Prev.Pt, op.Next.Pt, distSqrd)) + { + ExcludeOp(op.Next); + op = ExcludeOp(op); + cnt -= 2; + } + else if (SlopesNearCollinear(op.Prev.Pt, op.Pt, op.Next.Pt, distSqrd)) + { + op = ExcludeOp(op); + cnt--; + } + else + { + op.Idx = 1; + op = op.Next; + } + } + + if (cnt < 3) cnt = 0; + Path result = new Path(cnt); + for (int i = 0; i < cnt; ++i) + { + result.Add(op.Pt); + op = op.Next; + } + outPts = null; + return result; + } + //------------------------------------------------------------------------------ + public static Paths CleanPolygons(Paths polys) + { + return CleanPolygons(polys, 1.415); + } + public static Paths CleanPolygons(Paths polys, + double distance) + { + Paths result = new Paths(polys.Count); + for (int i = 0; i < polys.Count; i++) + result.Add(CleanPolygon(polys[i], distance)); + return result; + } + //------------------------------------------------------------------------------ + + internal static Paths Minkowski(Path pattern, Path path, bool IsSum, bool IsClosed) + { + int delta = (IsClosed ? 1 : 0); + int polyCnt = pattern.Count; + int pathCnt = path.Count; + Paths result = new Paths(pathCnt); + if (IsSum) + for (int i = 0; i < pathCnt; i++) + { + Path p = new Path(polyCnt); + foreach (IntPoint ip in pattern) + p.Add(new IntPoint(path[i].X + ip.X, path[i].Y + ip.Y)); + result.Add(p); + } + else + for (int i = 0; i < pathCnt; i++) + { + Path p = new Path(polyCnt); + foreach (IntPoint ip in pattern) + p.Add(new IntPoint(path[i].X - ip.X, path[i].Y - ip.Y)); + result.Add(p); + } + + Paths quads = new Paths((pathCnt + delta) * (polyCnt + 1)); + for (int i = 0; i < pathCnt - 1 + delta; i++) + for (int j = 0; j < polyCnt; j++) + { + Path quad = new Path(4); + quad.Add(result[i % pathCnt][j % polyCnt]); + quad.Add(result[(i + 1) % pathCnt][j % polyCnt]); + quad.Add(result[(i + 1) % pathCnt][(j + 1) % polyCnt]); + quad.Add(result[i % pathCnt][(j + 1) % polyCnt]); + if (!Orientation(quad)) quad.Reverse(); + quads.Add(quad); + } + return quads; + } + //------------------------------------------------------------------------------ + + public static Paths MinkowskiSum(Path pattern, Path path, bool pathIsClosed) + { + Paths paths = Minkowski(pattern, path, true, pathIsClosed); + Clipper c = new Clipper(0); + c.AddPaths(paths, PolyType.ptSubject, true); + c.Execute(ClipType.ctUnion, paths, PolyFillType.pftNonZero, PolyFillType.pftNonZero); + return paths; + } + //------------------------------------------------------------------------------ + + private static Path TranslatePath(Path path, IntPoint delta) + { + Path outPath = new Path(path.Count); + for (int i = 0; i < path.Count; i++) + outPath.Add(new IntPoint(path[i].X + delta.X, path[i].Y + delta.Y)); + return outPath; + } + //------------------------------------------------------------------------------ + + public static Paths MinkowskiSum(Path pattern, Paths paths, bool pathIsClosed) + { + Paths solution = new Paths(); + Clipper c = new Clipper(0); + for (int i = 0; i < paths.Count; ++i) + { + Paths tmp = Minkowski(pattern, paths[i], true, pathIsClosed); + c.AddPaths(tmp, PolyType.ptSubject, true); + if (pathIsClosed) + { + Path path = TranslatePath(paths[i], pattern[0]); + c.AddPath(path, PolyType.ptClip, true); + } + } + c.Execute(ClipType.ctUnion, solution, + PolyFillType.pftNonZero, PolyFillType.pftNonZero); + return solution; + } + //------------------------------------------------------------------------------ + + public static Paths MinkowskiDiff(Path poly1, Path poly2) + { + Paths paths = Minkowski(poly1, poly2, false, true); + Clipper c = new Clipper(0); + c.AddPaths(paths, PolyType.ptSubject, true); + c.Execute(ClipType.ctUnion, paths, PolyFillType.pftNonZero, PolyFillType.pftNonZero); + return paths; + } + //------------------------------------------------------------------------------ + + internal enum NodeType { ntAny, ntOpen, ntClosed }; + + public static Paths PolyTreeToPaths(PolyTree polytree) + { + + Paths result = new Paths(); + result.Capacity = polytree.Total; + AddPolyNodeToPaths(polytree, NodeType.ntAny, result); + return result; + } + //------------------------------------------------------------------------------ + + internal static void AddPolyNodeToPaths(PolyNode polynode, NodeType nt, Paths paths) + { + bool match = true; + switch (nt) + { + case NodeType.ntOpen: return; + case NodeType.ntClosed: match = !polynode.IsOpen; break; + default: break; + } + + if (polynode.m_polygon.Count > 0 && match) + paths.Add(polynode.m_polygon); + foreach (PolyNode pn in polynode.Childs) + AddPolyNodeToPaths(pn, nt, paths); + } + //------------------------------------------------------------------------------ + + public static Paths OpenPathsFromPolyTree(PolyTree polytree) + { + Paths result = new Paths(); + result.Capacity = polytree.ChildCount; + for (int i = 0; i < polytree.ChildCount; i++) + if (polytree.Childs[i].IsOpen) + result.Add(polytree.Childs[i].m_polygon); + return result; + } + //------------------------------------------------------------------------------ + + public static Paths ClosedPathsFromPolyTree(PolyTree polytree) + { + Paths result = new Paths(); + result.Capacity = polytree.Total; + AddPolyNodeToPaths(polytree, NodeType.ntClosed, result); + return result; + } + //------------------------------------------------------------------------------ + + } //end Clipper + + public class ClipperOffset + { + private Paths m_destPolys; + private Path m_srcPoly; + private Path m_destPoly; + private List m_normals = new List(); + private double m_delta, m_sinA, m_sin, m_cos; + private double m_miterLim, m_StepsPerRad; + + private IntPoint m_lowest; + private PolyNode m_polyNodes = new PolyNode(); + + public double ArcTolerance; + public double MiterLimit; + + private const double two_pi = Math.PI * 2; + private const double def_arc_tolerance = 0.25; + + public ClipperOffset() + { + MiterLimit =2.0; + ArcTolerance = def_arc_tolerance; + m_lowest.X = -1; + } + public ClipperOffset( + double miterLimit, double arcTolerance) + { + MiterLimit = miterLimit; + ArcTolerance = arcTolerance; + m_lowest.X = -1; + } + //------------------------------------------------------------------------------ + + public void Clear() + { + m_polyNodes.Childs.Clear(); + m_lowest.X = -1; + } + //------------------------------------------------------------------------------ + + internal static cInt Round(double value) + { + return value < 0 ? (cInt)(value - 0.5) : (cInt)(value + 0.5); + } + //------------------------------------------------------------------------------ + + public void AddPath(Path path, JoinType joinType, EndType endType) + { + int highI = path.Count - 1; + if (highI < 0) return; + PolyNode newNode = new PolyNode(); + newNode.m_jointype = joinType; + newNode.m_endtype = endType; + + //strip duplicate points from path and also get index to the lowest point ... + if (endType == EndType.etClosedLine || endType == EndType.etClosedPolygon) + while (highI > 0 && path[0] == path[highI]) highI--; + newNode.m_polygon.Capacity = highI + 1; + newNode.m_polygon.Add(path[0]); + int j = 0, k = 0; + for (int i = 1; i <= highI; i++) + if (newNode.m_polygon[j] != path[i]) + { + j++; + newNode.m_polygon.Add(path[i]); + if (path[i].Y > newNode.m_polygon[k].Y || + (path[i].Y == newNode.m_polygon[k].Y && + path[i].X < newNode.m_polygon[k].X)) k = j; + } + if (endType == EndType.etClosedPolygon && j < 2) return; + + m_polyNodes.AddChild(newNode); + + //if this path's lowest pt is lower than all the others then update m_lowest + if (endType != EndType.etClosedPolygon) return; + if (m_lowest.X < 0) + m_lowest = new IntPoint(m_polyNodes.ChildCount - 1, k); + else + { + IntPoint ip = m_polyNodes.Childs[(int)m_lowest.X].m_polygon[(int)m_lowest.Y]; + if (newNode.m_polygon[k].Y > ip.Y || + (newNode.m_polygon[k].Y == ip.Y && + newNode.m_polygon[k].X < ip.X)) + m_lowest = new IntPoint(m_polyNodes.ChildCount - 1, k); + } + } + //------------------------------------------------------------------------------ + + public void AddPaths(Paths paths, JoinType joinType, EndType endType) + { + foreach (Path p in paths) + AddPath(p, joinType, endType); + } + //------------------------------------------------------------------------------ + + private void FixOrientations() + { + //fixup orientations of all closed paths if the orientation of the + //closed path with the lowermost vertex is wrong ... + if (m_lowest.X >= 0 && + !Clipper.Orientation(m_polyNodes.Childs[(int)m_lowest.X].m_polygon)) + { + for (int i = 0; i < m_polyNodes.ChildCount; i++) + { + PolyNode node = m_polyNodes.Childs[i]; + if (node.m_endtype == EndType.etClosedPolygon || + (node.m_endtype == EndType.etClosedLine && + Clipper.Orientation(node.m_polygon))) + node.m_polygon.Reverse(); + } + } + else + { + for (int i = 0; i < m_polyNodes.ChildCount; i++) + { + PolyNode node = m_polyNodes.Childs[i]; + if (node.m_endtype == EndType.etClosedLine && + !Clipper.Orientation(node.m_polygon)) + node.m_polygon.Reverse(); + } + } + } + //------------------------------------------------------------------------------ + + internal static DoublePoint GetUnitNormal(IntPoint pt1, IntPoint pt2) + { + double dx = (pt2.X - pt1.X); + double dy = (pt2.Y - pt1.Y); + if ((dx == 0) && (dy == 0)) return new DoublePoint(); + + double f = 1 * 1.0 / Math.Sqrt(dx * dx + dy * dy); + dx *= f; + dy *= f; + + return new DoublePoint(dy, -dx); + } + //------------------------------------------------------------------------------ + + private void DoOffset(double delta) + { + m_destPolys = new Paths(); + m_delta = delta; + + //if Zero offset, just copy any CLOSED polygons to m_p and return ... + if (ClipperBase.near_zero(delta)) + { + m_destPolys.Capacity = m_polyNodes.ChildCount; + for (int i = 0; i < m_polyNodes.ChildCount; i++) + { + PolyNode node = m_polyNodes.Childs[i]; + if (node.m_endtype == EndType.etClosedPolygon) + m_destPolys.Add(node.m_polygon); + } + return; + } + + //see offset_triginometry3.svg in the documentation folder ... + if (MiterLimit > 2) m_miterLim = 2 / (MiterLimit * MiterLimit); + else m_miterLim = 0.5; + + double y; + if (ArcTolerance <= 0.0) + y = def_arc_tolerance; + else if (ArcTolerance > Math.Abs(delta) * def_arc_tolerance) + y = Math.Abs(delta) * def_arc_tolerance; + else + y = ArcTolerance; + //see offset_triginometry2.svg in the documentation folder ... + double steps = Math.PI / Math.Acos(1 - y / Math.Abs(delta)); + m_sin = Math.Sin(two_pi / steps); + m_cos = Math.Cos(two_pi / steps); + m_StepsPerRad = steps / two_pi; + if (delta < 0.0) m_sin = -m_sin; + + m_destPolys.Capacity = m_polyNodes.ChildCount * 2; + for (int i = 0; i < m_polyNodes.ChildCount; i++) + { + PolyNode node = m_polyNodes.Childs[i]; + m_srcPoly = node.m_polygon; + + int len = m_srcPoly.Count; + + if (len == 0 || (delta <= 0 && (len < 3 || + node.m_endtype != EndType.etClosedPolygon))) + continue; + + m_destPoly = new Path(); + + if (len == 1) + { + if (node.m_jointype == JoinType.jtRound) + { + double X = 1.0, Y = 0.0; + for (int j = 1; j <= steps; j++) + { + m_destPoly.Add(new IntPoint( + Round(m_srcPoly[0].X + X * delta), + Round(m_srcPoly[0].Y + Y * delta))); + double X2 = X; + X = X * m_cos - m_sin * Y; + Y = X2 * m_sin + Y * m_cos; + } + } + else + { + double X = -1.0, Y = -1.0; + for (int j = 0; j < 4; ++j) + { + m_destPoly.Add(new IntPoint( + Round(m_srcPoly[0].X + X * delta), + Round(m_srcPoly[0].Y + Y * delta))); + if (X < 0) X = 1; + else if (Y < 0) Y = 1; + else X = -1; + } + } + m_destPolys.Add(m_destPoly); + continue; + } + + //build m_normals ... + m_normals.Clear(); + m_normals.Capacity = len; + for (int j = 0; j < len - 1; j++) + m_normals.Add(GetUnitNormal(m_srcPoly[j], m_srcPoly[j + 1])); + if (node.m_endtype == EndType.etClosedLine || + node.m_endtype == EndType.etClosedPolygon) + m_normals.Add(GetUnitNormal(m_srcPoly[len - 1], m_srcPoly[0])); + else + m_normals.Add(new DoublePoint(m_normals[len - 2])); + + if (node.m_endtype == EndType.etClosedPolygon) + { + int k = len - 1; + for (int j = 0; j < len; j++) + OffsetPoint(j, ref k, node.m_jointype); + m_destPolys.Add(m_destPoly); + } + else if (node.m_endtype == EndType.etClosedLine) + { + int k = len - 1; + for (int j = 0; j < len; j++) + OffsetPoint(j, ref k, node.m_jointype); + m_destPolys.Add(m_destPoly); + m_destPoly = new Path(); + //re-build m_normals ... + DoublePoint n = m_normals[len - 1]; + for (int j = len - 1; j > 0; j--) + m_normals[j] = new DoublePoint(-m_normals[j - 1].X, -m_normals[j - 1].Y); + m_normals[0] = new DoublePoint(-n.X, -n.Y); + k = 0; + for (int j = len - 1; j >= 0; j--) + OffsetPoint(j, ref k, node.m_jointype); + m_destPolys.Add(m_destPoly); + } + else + { + int k = 0; + for (int j = 1; j < len - 1; ++j) + OffsetPoint(j, ref k, node.m_jointype); + + IntPoint pt1; + if (node.m_endtype == EndType.etOpenButt) + { + int j = len - 1; + pt1 = new IntPoint((cInt)Round(m_srcPoly[j].X + m_normals[j].X * + delta), (cInt)Round(m_srcPoly[j].Y + m_normals[j].Y * delta)); + m_destPoly.Add(pt1); + pt1 = new IntPoint((cInt)Round(m_srcPoly[j].X - m_normals[j].X * + delta), (cInt)Round(m_srcPoly[j].Y - m_normals[j].Y * delta)); + m_destPoly.Add(pt1); + } + else + { + int j = len - 1; + k = len - 2; + m_sinA = 0; + m_normals[j] = new DoublePoint(-m_normals[j].X, -m_normals[j].Y); + if (node.m_endtype == EndType.etOpenSquare) + DoSquare(j, k); + else + DoRound(j, k); + } + + //re-build m_normals ... + for (int j = len - 1; j > 0; j--) + m_normals[j] = new DoublePoint(-m_normals[j - 1].X, -m_normals[j - 1].Y); + + m_normals[0] = new DoublePoint(-m_normals[1].X, -m_normals[1].Y); + + k = len - 1; + for (int j = k - 1; j > 0; --j) + OffsetPoint(j, ref k, node.m_jointype); + + if (node.m_endtype == EndType.etOpenButt) + { + pt1 = new IntPoint((cInt)Round(m_srcPoly[0].X - m_normals[0].X * delta), + (cInt)Round(m_srcPoly[0].Y - m_normals[0].Y * delta)); + m_destPoly.Add(pt1); + pt1 = new IntPoint((cInt)Round(m_srcPoly[0].X + m_normals[0].X * delta), + (cInt)Round(m_srcPoly[0].Y + m_normals[0].Y * delta)); + m_destPoly.Add(pt1); + } + else + { + k = 1; + m_sinA = 0; + if (node.m_endtype == EndType.etOpenSquare) + DoSquare(0, 1); + else + DoRound(0, 1); + } + m_destPolys.Add(m_destPoly); + } + } + } + //------------------------------------------------------------------------------ + + public void Execute(ref Paths solution, double delta) + { + solution.Clear(); + FixOrientations(); + DoOffset(delta); + //now clean up 'corners' ... + Clipper clpr = new Clipper(0); + clpr.AddPaths(m_destPolys, PolyType.ptSubject, true); + if (delta > 0) + { + clpr.Execute(ClipType.ctUnion, solution, + PolyFillType.pftPositive, PolyFillType.pftPositive); + } + else + { + IntRect r = Clipper.GetBounds(m_destPolys); + Path outer = new Path(4); + + outer.Add(new IntPoint(r.left - 10, r.bottom + 10)); + outer.Add(new IntPoint(r.right + 10, r.bottom + 10)); + outer.Add(new IntPoint(r.right + 10, r.top - 10)); + outer.Add(new IntPoint(r.left - 10, r.top - 10)); + + clpr.AddPath(outer, PolyType.ptSubject, true); + clpr.ReverseSolution = true; + clpr.Execute(ClipType.ctUnion, solution, PolyFillType.pftNegative, PolyFillType.pftNegative); + if (solution.Count > 0) solution.RemoveAt(0); + } + } + //------------------------------------------------------------------------------ + + public void Execute(ref PolyTree solution, double delta) + { + solution.Clear(); + FixOrientations(); + DoOffset(delta); + + //now clean up 'corners' ... + Clipper clpr = new Clipper(0); + clpr.AddPaths(m_destPolys, PolyType.ptSubject, true); + if (delta > 0) + { + clpr.Execute(ClipType.ctUnion, solution, + PolyFillType.pftPositive, PolyFillType.pftPositive); + } + else + { + IntRect r = Clipper.GetBounds(m_destPolys); + Path outer = new Path(4); + + outer.Add(new IntPoint(r.left - 10, r.bottom + 10)); + outer.Add(new IntPoint(r.right + 10, r.bottom + 10)); + outer.Add(new IntPoint(r.right + 10, r.top - 10)); + outer.Add(new IntPoint(r.left - 10, r.top - 10)); + + clpr.AddPath(outer, PolyType.ptSubject, true); + clpr.ReverseSolution = true; + clpr.Execute(ClipType.ctUnion, solution, PolyFillType.pftNegative, PolyFillType.pftNegative); + //remove the outer PolyNode rectangle ... + if (solution.ChildCount == 1 && solution.Childs[0].ChildCount > 0) + { + PolyNode outerNode = solution.Childs[0]; + solution.Childs.Capacity = outerNode.ChildCount; + solution.Childs[0] = outerNode.Childs[0]; + solution.Childs[0].m_Parent = solution; + for (int i = 1; i < outerNode.ChildCount; i++) + solution.AddChild(outerNode.Childs[i]); + } + else + solution.Clear(); + } + } + //------------------------------------------------------------------------------ + + void OffsetPoint(int j, ref int k, JoinType jointype) + { + //cross product ... + m_sinA = (m_normals[k].X * m_normals[j].Y - m_normals[j].X * m_normals[k].Y); + + if (Math.Abs(m_sinA * m_delta) < 1.0) + { + //dot product ... + double cosA = (m_normals[k].X * m_normals[j].X + m_normals[j].Y * m_normals[k].Y); + if (cosA > 0) // angle ==> 0 degrees + { + m_destPoly.Add(new IntPoint(Round(m_srcPoly[j].X + m_normals[k].X * m_delta), + Round(m_srcPoly[j].Y + m_normals[k].Y * m_delta))); + return; + } + //else angle ==> 180 degrees + } + else if (m_sinA > 1.0) m_sinA = 1.0; + else if (m_sinA < -1.0) m_sinA = -1.0; + + if (m_sinA * m_delta < 0) + { + m_destPoly.Add(new IntPoint(Round(m_srcPoly[j].X + m_normals[k].X * m_delta), + Round(m_srcPoly[j].Y + m_normals[k].Y * m_delta))); + m_destPoly.Add(m_srcPoly[j]); + m_destPoly.Add(new IntPoint(Round(m_srcPoly[j].X + m_normals[j].X * m_delta), + Round(m_srcPoly[j].Y + m_normals[j].Y * m_delta))); + } + else + switch (jointype) + { + case JoinType.jtMiter: + { + double r = 1 + (m_normals[j].X * m_normals[k].X + + m_normals[j].Y * m_normals[k].Y); + if (r >= m_miterLim) DoMiter(j, k, r); else DoSquare(j, k); + break; + } + case JoinType.jtSquare: DoSquare(j, k); break; + case JoinType.jtRound: DoRound(j, k); break; + } + k = j; + } + //------------------------------------------------------------------------------ + + internal void DoSquare(int j, int k) + { + double dx = Math.Tan(Math.Atan2(m_sinA, + m_normals[k].X * m_normals[j].X + m_normals[k].Y * m_normals[j].Y) / 4); + m_destPoly.Add(new IntPoint( + Round(m_srcPoly[j].X + m_delta * (m_normals[k].X - m_normals[k].Y * dx)), + Round(m_srcPoly[j].Y + m_delta * (m_normals[k].Y + m_normals[k].X * dx)))); + m_destPoly.Add(new IntPoint( + Round(m_srcPoly[j].X + m_delta * (m_normals[j].X + m_normals[j].Y * dx)), + Round(m_srcPoly[j].Y + m_delta * (m_normals[j].Y - m_normals[j].X * dx)))); + } + //------------------------------------------------------------------------------ + + internal void DoMiter(int j, int k, double r) + { + double q = m_delta / r; + m_destPoly.Add(new IntPoint(Round(m_srcPoly[j].X + (m_normals[k].X + m_normals[j].X) * q), + Round(m_srcPoly[j].Y + (m_normals[k].Y + m_normals[j].Y) * q))); + } + //------------------------------------------------------------------------------ + + internal void DoRound(int j, int k) + { + double a = Math.Atan2(m_sinA, + m_normals[k].X * m_normals[j].X + m_normals[k].Y * m_normals[j].Y); + int steps = Math.Max((int)Round(m_StepsPerRad * Math.Abs(a)),1); + + double X = m_normals[k].X, Y = m_normals[k].Y, X2; + for (int i = 0; i < steps; ++i) + { + m_destPoly.Add(new IntPoint( + Round(m_srcPoly[j].X + X * m_delta), + Round(m_srcPoly[j].Y + Y * m_delta))); + X2 = X; + X = X * m_cos - m_sin * Y; + Y = X2 * m_sin + Y * m_cos; + } + m_destPoly.Add(new IntPoint( + Round(m_srcPoly[j].X + m_normals[j].X * m_delta), + Round(m_srcPoly[j].Y + m_normals[j].Y * m_delta))); + } + //------------------------------------------------------------------------------ + } + + class ClipperException : Exception + { + public ClipperException(string description) : base(description){} + } + //------------------------------------------------------------------------------ + +} //end ClipperLib namespace diff --git a/SOLVER/dkxce.Utils.CloudBorder/PolyLineBuffer.cs b/SOLVER/dkxce.Utils.CloudBorder/PolyLineBuffer.cs new file mode 100644 index 0000000..12600f1 --- /dev/null +++ b/SOLVER/dkxce.Utils.CloudBorder/PolyLineBuffer.cs @@ -0,0 +1,1248 @@ +//#define gpc +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.Drawing.Drawing2D; + +#if gpc +using GpcWrapper; +#endif + + +namespace PolyLineBuffer +{ + using ClipperLib; + + public class PolyLineBufferCreator + { + public class PolyResult + { + public PointF[] polygon; + public List segments; + + public PolyResult() + { + this.polygon = new PointF[0]; + this.segments = new List(); + } + + public PolyResult(PointF[] polygon, List segments) + { + this.polygon = polygon; + this.segments = segments; + } + + public bool PointIn(PointF point) + { + if (segments.Count == 0) return false; + for (int i = 0; i < segments.Count; i++) + if (PointInPolygon(point, segments[i])) + return true; + return false; + } + + private static bool PointInPolygon(PointF point, PointF[] polygon) + { + if (polygon == null) return false; + if (polygon.Length < 2) return false; + + int i, j, nvert = polygon.Length; + bool c = false; + + for (i = 0, j = nvert - 1; i < nvert; j = i++) + { + if (((polygon[i].Y >= point.Y) != (polygon[j].Y >= point.Y)) && + (point.X <= (polygon[j].X - polygon[i].X) * (point.Y - polygon[i].Y) / (polygon[j].Y - polygon[i].Y) + polygon[i].X) + ) + c = !c; + } + + return c; + } + } + + /// + /// Calc distance in custom units + /// + /// Point A + /// Point B + /// distance in custom units + public delegate float DistanceFunction(PointF a, PointF b); + + /// + /// return (float)Math.Sqrt(Math.Pow(b.X - a.X, 2) + Math.Pow(b.Y - a.Y, 2)); + /// + /// + /// + /// + public static float SampleDistFunc(PointF a, PointF b) + { + return (float)Math.Sqrt(Math.Pow(b.X - a.X, 2) + Math.Pow(b.Y - a.Y, 2)); + } + + /// + /// return distance in meters between 2 points + /// + /// Point A + /// Point B + /// distance in meters + public static float GeographicDistFunc(PointF a, PointF b) + { + return GetGeoLengthInMetersC(a.Y, a.X, b.Y, b.X, false); + } + + /// + /// Return total length of polyline in meters + /// + /// + /// in meters + public static uint GetDistInMeters(PointF[] polyline, bool polygon) + { + if (polyline == null) return 0; + if (polyline.Length < 2) return 0; + uint res = 0; + for (int i = 1; i < polyline.Length; i++) + res += GetGeoLengthInMetersC(polyline[i - 1].Y, polyline[i - 1].X, polyline[i].Y, polyline[i].X, false); + if(polygon) + res += GetGeoLengthInMetersC(polyline[polyline.Length - 1].Y, polyline[polyline.Length - 1].X, polyline[0].Y, polyline[0].X, false); + return res; + } + + private static double GetDeterminant(double x1, double y1, double x2, double y2) + { + return x1 * y2 - x2 * y1; + } + + /// + /// Calculate Square of Geographic Polygon By Simplify Method + /// (faster) + /// + /// + /// + public static double GetSquareInMetersA(PointF[] poly) + { + if (poly == null) return 0; + if (poly.Length < 3) return 0; + PointF st = new PointF(float.MaxValue, float.MaxValue); + for (int i = 0; i < poly.Length; i++) + { + if (poly[i].X < st.X) st.X = poly[i].X; + if (poly[i].Y < st.Y) st.Y = poly[i].Y; + }; + PointF[] polygon = new PointF[poly.Length]; + for (int i = 0; i < polygon.Length; i++) + polygon[i] = new PointF(GetGeoLengthInMetersC(st.Y, st.X, st.Y, poly[i].X, false), GetGeoLengthInMetersC(st.Y, st.X, poly[i].Y, st.X, false)); + + double area = GetDeterminant(polygon[polygon.Length - 1].X, polygon[polygon.Length - 1].Y, polygon[0].X, polygon[0].Y); + for (int i = 1; i < polygon.Length; i++) + area += GetDeterminant(polygon[i - 1].X, polygon[i - 1].Y, polygon[i].X, polygon[i].Y); + + return Math.Abs(area / 2.0 / 1000000.0); + } + + /// + /// Calculate Square of Geographic Polygon By Triangulation Method + /// (better but slower) + /// + /// + /// + public static double GetSquareInMetersT(PointF[] polygon) + { + if (polygon == null) return 0; + if (polygon.Length < 3) return 0; + double square = 0; + + // To Trinagles // + int nVertices = polygon.Length; + GeometryUtility.CPoint2D[] vertices = new GeometryUtility.CPoint2D[nVertices]; + for (int i = 0; i < nVertices; i++) + vertices[i] = new GeometryUtility.CPoint2D(polygon[i].X, polygon[i].Y); + PolygonCuttingEar.CPolygonShape cutPolygon = new PolygonCuttingEar.CPolygonShape(vertices); + cutPolygon.CutEar(); + for (int i = 0; i < cutPolygon.NumberOfPolygons; i++) + { + int nPoints = cutPolygon.Polygons(i).Length; + PointF[] triangle = new PointF[nPoints]; + for (int j = 0; j < nPoints; j++) + { + triangle[j].X = (float)cutPolygon.Polygons(i)[j].X; + triangle[j].Y = (float)cutPolygon.Polygons(i)[j].Y; + }; + + double a = GeographicDistFunc(triangle[0], triangle[1]); + double b = GeographicDistFunc(triangle[1], triangle[2]); + double c = GeographicDistFunc(triangle[2], triangle[0]); + double p = (a + b + c) / 2.0; + double s = Math.Sqrt(p * (p - a) * (p - b) * (p - c)); // formula Gerona + square += s; + }; + + return square / 1000000.0; + } + + /// + /// Calculate Square of Geographic Polygon + /// + /// + /// + public static double GetSquareInMeters(PointF[] poly) + { + return GetSquareInMetersA(poly); + } + + /// + /// Geographic Get Distance Between 2 points + /// + /// A Lat + /// A Lon + /// B Lat + /// B Lon + /// radians or degrees + /// length in meters + public static uint GetGeoLengthInMetersC(double StartLat, double StartLong, double EndLat, double EndLong, bool radians) + { + double D2R = Math.PI / 180; + if (radians) D2R = 1; + double dDistance = Double.MinValue; + double dLat1InRad = StartLat * D2R; + double dLong1InRad = StartLong * D2R; + double dLat2InRad = EndLat * D2R; + double dLong2InRad = EndLong * D2R; + + double dLongitude = dLong2InRad - dLong1InRad; + double dLatitude = dLat2InRad - dLat1InRad; + + // Intermediate result a. + double a = Math.Pow(Math.Sin(dLatitude / 2.0), 2.0) + + Math.Cos(dLat1InRad) * Math.Cos(dLat2InRad) * + Math.Pow(Math.Sin(dLongitude / 2.0), 2.0); + + // Intermediate result c (great circle distance in Radians). + double c = 2.0 * Math.Atan2(Math.Sqrt(a), Math.Sqrt(1.0 - a)); + + const double kEarthRadiusKms = 6378137.0000; + dDistance = kEarthRadiusKms * c; + + return (uint)Math.Round(dDistance); + } + + /// + /// Get Buffer Polygon for polyline + /// + /// polyline + /// Buffer radius size in custom units (meters) + /// include right side + /// include left side + /// distance between point function + /// polygon + public static PolyResult GetLineBufferPolygon(PointF[] line, float distance, bool right, bool left, DistanceFunction DistanceFunc) + { + return GetLineBufferPolygon(line, distance, right, left, DistanceFunc, 0); + } + + /// + /// Get Buffer Polygon for polyline + /// + /// polyline + /// Buffer radius size in custom units (meters) + /// include right side + /// include left side + /// polygon + public static PolyResult GetLineBufferPolygon(PointF[] line, float distance, bool right, bool left) + { + return GetLineBufferPolygon(line, distance, right, left, GeographicDistFunc, 0); + } + + /// + /// Get Buffer Polygon for polyline + /// + /// polyline + /// Buffer radius size in custom units (meters) + /// include right side + /// include left side + /// calc method + /// polygon + public static PolyResult GetLineBufferPolygon(PointF[] line, float distance, bool right, bool left, int method) + { + return GetLineBufferPolygon(line, distance, right, left, GeographicDistFunc, method); + } + + /// + /// Get Buffer Polygon for polyline + /// + /// polyline + /// Buffer radius size in custom units (meters) + /// include right side + /// include left side + /// distance between point function + /// calc method (0 - merge, 1 - Union NH, 2 - Union WH, 3 - BBox Union NH, 4 - BBox Union WH, 5 - BRound Bezier) + /// polygon + public static PolyResult GetLineBufferPolygon(PointF[] line, float distance, bool right, bool left, DistanceFunction DistanceFunc, int method) + { + float step = 1; + + // Empty + if (line == null) return new PolyResult(); + if (line.Length == 0) return new PolyResult(); + if ((!left) && (!right)) return new PolyResult(); + + // Point + if (line.Length == 1) + { + PointF s = line[0]; + float d = DistanceFunc == null ? SampleDistFunc(s, new PointF(s.X + step, s.Y)) : DistanceFunc(s, new PointF(s.X + step, s.Y)); + float r = distance / d * step; + PointF[] res = GetEllipse(s, r, 0, 360); + List segments = new List(); + segments.Add(res); + return new PolyResult(res, segments); + }; + + // 0 - Merge Method + if((line.Length == 2) || (method == 0) || ((line.Length > 2000) && (method > 0) && (method < 5))) + { + List poliSegments = new List(); + + List p = new List(); + List v = new List(); + v.AddRange(line); + #if gpc + p.AddRange(glbp(v.ToArray(), distance, poliSegments, DistanceFunc)); + #else + if (right) + { + p.AddRange(glbp(v.ToArray(), distance, poliSegments, DistanceFunc)); + if (!left) + { + v.Reverse(); + p.AddRange(v); + }; + }; + if (left) + { + if (!right) p.AddRange(v); + v.Reverse(); + if (right) p.RemoveAt(p.Count - 1); + p.AddRange(glbp(v.ToArray(), distance, poliSegments, DistanceFunc)); + if (right) p.RemoveAt(p.Count - 1); + }; + #endif + return new PolyResult(p.ToArray(), poliSegments); + }; + + // BRound Bezier Method + if (method == 5) + { + List sr = new List(); + PointF s = line[0]; + PointF e = line[1]; + float prevA = 0; + // first + { + float angle = (float)((Math.Atan((e.Y - s.Y) / (e.X - s.X)) * 180 / Math.PI)); + float d = DistanceFunc == null ? SampleDistFunc(s, new PointF(s.X + step, s.Y)) : DistanceFunc(s, new PointF(s.X + step, s.Y)); + float r = distance / d * step; + PointF[] el = GetEllipse(s, r, s.X > e.X ? angle - 90 : angle + 90, s.X > e.X ? angle + 90 : angle - 90); + Array.Reverse(el); + if (left && right) + sr.AddRange(el); + else if (left) + { + sr.Add(s); + for (int i = el.Length / 2; i < el.Length; i++) sr.Add(el[i]); + } + else if (right) + { + for (int i = 0; i <= el.Length / 2; i++) sr.Add(el[i]); + sr.Add(s); + }; + prevA = angle; + }; + + for (int cpi = 2; cpi < line.Length; cpi++) + { + PointF npL = new PointF(sr[sr.Count - 1].X + e.X - s.X, sr[sr.Count - 1].Y + e.Y - s.Y); + PointF npR = new PointF(sr[0].X + e.X - s.X, sr[0].Y + e.Y - s.Y); + if (left) sr.Add(npL); + if (right) sr.Insert(0, npR); + + s = line[cpi - 1]; + e = line[cpi]; + float angle = (float)((Math.Atan((e.Y - s.Y) / (e.X - s.X)) * 180 / Math.PI)); + float dA = angle - prevA; + float d = DistanceFunc == null ? SampleDistFunc(s, new PointF(s.X + step, s.Y)) : DistanceFunc(s, new PointF(s.X + step, s.Y)); + float r = distance / d * step; + PointF[] el = GetEllipse(s, r, s.X > e.X ? angle - 90 : angle + 90, s.X > e.X ? angle + 90 : angle - 90); + Array.Reverse(el); + if (left && right) + { + sr.Insert(0, el[0]); + sr.Add(el[el.Length - 1]); + } + else if (left) + { + sr.Insert(0, s); + sr.Add(el[el.Length - 1]); + } + else if (right) + { + sr.Insert(0, el[0]); + sr.Add(s); + }; + prevA = angle; + }; + + // last + { + PointF npL = new PointF(sr[sr.Count - 1].X + e.X - s.X, sr[sr.Count - 1].Y + e.Y - s.Y); + PointF npR = new PointF(sr[0].X + e.X - s.X, sr[0].Y + e.Y - s.Y); + if (left) sr.Add(npL); + if (right) sr.Insert(0, npR); + + if (left) + { + List interLeft = new List(); + for (int dp = sr.Count - (line.Length - 2) * 2; dp < sr.Count; dp += 2) + { + PointF ix = LineIntersection(sr[dp - 2], sr[dp - 1], sr[dp], sr[dp + 1]); + if ((IsInsideLine(sr[dp - 2], sr[dp - 1], ix))) + interLeft.Add(ix); + else + { + float dixa = DistanceFunc == null ? SampleDistFunc(sr[dp - 1], ix) : DistanceFunc(sr[dp - 1], ix); + float dixb = DistanceFunc == null ? SampleDistFunc(ix, sr[dp]) : DistanceFunc(ix, sr[dp]); + if ((dixa > (1.2 * distance)) || (dixb > (1.2 * distance))) + { + PointF ixA = new PointF(sr[dp - 1].X + (float)1.5 * distance * (ix.X - sr[dp - 1].X) / dixa, sr[dp - 1].Y + (float)1.5 * distance * (ix.Y - sr[dp - 1].Y) / dixa); + PointF ixB = new PointF(sr[dp].X + (float)1.5 * distance * (ix.X - sr[dp].X) / dixb, sr[dp].Y + (float)1.5 * distance * (ix.Y - sr[dp].Y) / dixb); + interLeft.AddRange(Bezier(new PointF[] { sr[dp - 1], ixA, ixB, sr[dp] }, 7)); + } + else + interLeft.AddRange(Bezier(new PointF[] { sr[dp - 1], ix, sr[dp] }, 7)); + }; + }; + for (int dp = 0; dp < (line.Length - 1) * 2; dp++) sr.RemoveAt(sr.Count - 1); + sr.AddRange(interLeft); + }; + if (right) + { + List interRight = new List(); + for (int dp = 2; dp < (line.Length - 1) * 2; dp += 2) + { + PointF ix = LineIntersection(sr[dp - 2], sr[dp - 1], sr[dp], sr[dp + 1]); + if ((IsInsideLine(sr[dp - 2], sr[dp - 1], ix))) + interRight.Add(ix); + else + { + float dixa = DistanceFunc == null ? SampleDistFunc(sr[dp - 1], ix) : DistanceFunc(sr[dp - 1], ix); + float dixb = DistanceFunc == null ? SampleDistFunc(ix, sr[dp]) : DistanceFunc(ix, sr[dp]); + if ((dixa > (1.2 * distance)) || (dixb > (1.2 * distance))) + { + PointF ixA = new PointF(sr[dp - 1].X + (float)1.5 * distance * (ix.X - sr[dp - 1].X) / dixa, sr[dp - 1].Y + (float)1.5 * distance * (ix.Y - sr[dp - 1].Y) / dixa); + PointF ixB = new PointF(sr[dp].X + (float)1.5 * distance * (ix.X - sr[dp].X) / dixb, sr[dp].Y + (float)1.5 * distance * (ix.Y - sr[dp].Y) / dixb); + interRight.AddRange(Bezier(new PointF[] { sr[dp - 1], ixA, ixB, sr[dp] }, 7)); + } + else + interRight.AddRange(Bezier(new PointF[] { sr[dp - 1], ix, sr[dp] }, 7)); + }; + }; + for (int dp = 0; dp < (line.Length - 1) * 2; dp++) sr.RemoveAt(0); + interRight.Reverse(); + for (int dp = 0; dp < interRight.Count; dp++) + sr.Insert(0, interRight[dp]); + }; + + float angle = (float)((Math.Atan((e.Y - s.Y) / (e.X - s.X)) * 180 / Math.PI)); + float d = DistanceFunc == null ? SampleDistFunc(e, new PointF(e.X + step, e.Y)) : DistanceFunc(e, new PointF(e.X + step, e.Y)); + float r = distance / d * step; + PointF[] el = GetEllipse(e, r, s.X < e.X ? angle - 90 : angle + 90, s.X < e.X ? angle + 90 : angle - 90); + Array.Reverse(el); + if (left && right) + sr.AddRange(el); + else if (left) + { + for (int i = 0; i <= el.Length / 2; i++) sr.Add(el[i]); + sr.Add(e); + } + else if (right) + { + sr.Add(e); + for (int i = el.Length / 2; i < el.Length; i++) sr.Add(el[i]); + }; + }; + + return new PolyResult(sr.ToArray(), null); + }; + + // RUnion+BUnion NH/WH + if (line.Length > 2) // || method == 1 || method == 2 || method == 3 || method == 4 + { + List> base_poly = new List>(); + bool overdot = true; + for (int cpi = 1; cpi < line.Length; cpi++) + { + List p = new List(); + + List poliSegments = new List(); + if((method == 1) || (method == 2)) // BRound // method 1,2 + { + List v = new List(); + v.Add(line[cpi - 1]); + v.Add(line[cpi]); + #if gpc + p.AddRange(glbp(v.ToArray(), distance, poliSegments, DistanceFunc)); + #else + if (right) + { + try + { + p.AddRange(glbp(v.ToArray(), distance, poliSegments, DistanceFunc)); + } + catch { }; + if (!left) + { + v.Reverse(); + p.AddRange(v); + }; + }; + if (left) + { + if (!right) p.AddRange(v); + v.Reverse(); + if (right && (p.Count > 0)) p.RemoveAt(p.Count - 1); + try + { + p.AddRange(glbp(v.ToArray(), distance, poliSegments, DistanceFunc)); + } + catch { }; + if (right && (p.Count > 0)) p.RemoveAt(p.Count - 1); + }; + #endif + } + else // BUnion // method = 3 || method = 4 + { + PointF s = line[cpi - 1]; + PointF e = line[cpi]; + float dix = DistanceFunc == null ? SampleDistFunc(s, e) : DistanceFunc(s, e); + float angle = (float)((Math.Atan((e.Y - s.Y) / (e.X - s.X)) * 180 / Math.PI)); + float d = DistanceFunc == null ? SampleDistFunc(s, new PointF(s.X + step, s.Y)) : DistanceFunc(s, new PointF(s.X + step, s.Y)); + float r = distance / d * step; + if (left && right) + { + PointF ap1 = GetAngledPoint(s, r, s.X > e.X ? angle - 90 : angle + 90); + PointF ap2 = GetAngledPoint(e, r, s.X > e.X ? angle - 90 : angle + 90); + PointF ad1 = new PointF(ap1.X - distance * (ap2.X - ap1.X) / dix, ap1.Y - distance * (ap2.Y - ap1.Y) / dix); + PointF ad2 = new PointF(ap2.X + distance * (ap2.X - ap1.X) / dix, ap2.Y + distance * (ap2.Y - ap1.Y) / dix); + p.Add(ad1); + p.Add(ad2); + ap1 = GetAngledPoint(s, r, s.X > e.X ? angle + 90 : angle - 90); + ap2 = GetAngledPoint(e, r, s.X > e.X ? angle + 90 : angle - 90); + ad1 = new PointF(ap1.X - distance * (ap2.X - ap1.X) / dix, ap1.Y - distance * (ap2.Y - ap1.Y) / dix); + ad2 = new PointF(ap2.X + distance * (ap2.X - ap1.X) / dix, ap2.Y + distance * (ap2.Y - ap1.Y) / dix); + p.Insert(0, ad1); + p.Insert(0, ad2); + } + else if (left) + { + if (overdot) + p.Add(new PointF(s.X - distance * (e.X - s.X) / dix, s.Y - distance * (e.Y - s.Y) / dix)); + else + p.Add(s); + PointF ap1 = GetAngledPoint(s, r, s.X > e.X ? angle - 90 : angle + 90); + PointF ap2 = GetAngledPoint(e, r, s.X > e.X ? angle - 90 : angle + 90); + PointF ad1 = new PointF(ap1.X - distance * (ap2.X - ap1.X) / dix, ap1.Y - distance * (ap2.Y - ap1.Y) / dix); + PointF ad2 = new PointF(ap2.X + distance * (ap2.X - ap1.X) / dix, ap2.Y + distance * (ap2.Y - ap1.Y) / dix); + if (overdot) + p.Add(ad1); + else + p.Add(LineIntersection(line[cpi - 2], s, ap1, ap2)); + overdot = true; + if (cpi < (line.Length - 1)) + { + double na = AngleFrom3PointsInDegrees3(s, e, line[cpi + 1]); + overdot = ((na >= 0) && (na <= 180)) || (na <= -180); + }; + if (overdot) + p.Add(ad2); + else + p.Add(LineIntersection(ap1, ap2, e, line[cpi + 1])); + if (overdot) + p.Add(new PointF(e.X + distance * (e.X - s.X) / dix, e.Y + distance * (e.Y - s.Y) / dix)); + else + p.Add(e); + } + else if (right) + { + if (overdot) + p.Insert(0, new PointF(s.X - distance * (e.X - s.X) / dix, s.Y - distance * (e.Y - s.Y) / dix)); + else + p.Insert(0, s); + PointF ap1 = GetAngledPoint(s, r, s.X > e.X ? angle + 90 : angle - 90); + PointF ap2 = GetAngledPoint(e, r, s.X > e.X ? angle + 90 : angle - 90); + PointF ad1 = new PointF(ap1.X - distance * (ap2.X - ap1.X) / dix, ap1.Y - distance * (ap2.Y - ap1.Y) / dix); + PointF ad2 = new PointF(ap2.X + distance * (ap2.X - ap1.X) / dix, ap2.Y + distance * (ap2.Y - ap1.Y) / dix); + if (overdot) + p.Insert(0, ap1); + else + p.Insert(0, LineIntersection(line[cpi - 2], s, ap1, ap2)); + overdot = true; + if (cpi < (line.Length - 1)) + { + double na = AngleFrom3PointsInDegrees3(s, e, line[cpi + 1]); + overdot = !(((na >= 0) && (na <= 180)) || (na <= -180)); + }; + if (overdot) + p.Insert(0, ad2); + else + p.Insert(0, LineIntersection(ap1, ap2, e, line[cpi + 1])); + if (overdot) + p.Insert(0, new PointF(e.X + distance * (e.X - s.X) / dix, e.Y + distance * (e.Y - s.Y) / dix)); + else + p.Insert(0, e); + }; + }; + + List cpoly = new List(); + foreach (PointF ptf in p) + cpoly.Add(new ClipperLib.IntPoint(ptf.X * 10000000, ptf.Y * 10000000)); + cpoly.Add(new ClipperLib.IntPoint(p[0].X * 10000000, p[0].Y * 10000000)); + List> curr_poly = new List>(); + curr_poly.Add(cpoly); + + if (cpi == 1) + base_poly = curr_poly; + else + { + ClipperLib.Clipper clipper = new ClipperLib.Clipper(0); + clipper.AddPaths(base_poly, ClipperLib.PolyType.ptSubject, true); + clipper.AddPaths(curr_poly, ClipperLib.PolyType.ptClip, true); + + ClipperLib.PolyTree ptree = new ClipperLib.PolyTree(); + if (clipper.Execute(ClipperLib.ClipType.ctUnion, ptree, ClipperLib.PolyFillType.pftEvenOdd)) + { + base_poly.Clear(); + int tol = ptree.m_AllPolys.Count > 0 ? 1 : 0; + if ((method == 2) || ((method == 4))) tol = ptree.m_AllPolys.Count; + for (int ci = 0; ci < tol; ci++) + base_poly.Add(ptree.m_AllPolys[ci].Contour); + }; + }; + }; + List ppf = new List(); + if(base_poly.Count > 0) + foreach (ClipperLib.IntPoint ipp in base_poly[0]) + ppf.Add(new PointF((float)(ipp.X / 10000000.0), (float)(ipp.Y / 10000000.0))); + if (base_poly.Count > 1) + { + List inb = new List(); + for (int ip = 1; ip < base_poly.Count; ip++) + { + PointF[] inner = new PointF[base_poly[ip].Count]; + for (int ia = 0; ia < inner.Length; ia++) + inner[ia] = new PointF((float)(base_poly[ip][ia].X / 10000000.0), (float)(base_poly[ip][ia].Y / 10000000.0)); + int indA, indB; + FindNearestDots(ppf, inner, out indA, out indB); + inb.Add(new InBoundInsert(inner, indA, indB)); + }; + inb.Sort(new InBoundInsertComparer()); + for (int ip = inb.Count - 1; ip >= 0; ip--) + InsertHole(ppf, inb[ip].poly, inb[ip].outboundIndex, inb[ip].inboundIndex); + }; + return new PolyResult(ppf.ToArray(), null); + }; + + return new PolyResult(); + } + + private static void FindNearestDots(List polyA, PointF[] polyB, out int indA, out int indB) + { + indA = -1; indB = -1; + double minDist = double.MaxValue; + double d = 0; + for(int a = 0; a < polyA.Count; a++) + for (int b = 0; b < polyB.Length; b++) + if ((d = Math.Sqrt(Math.Pow(polyB[b].X - polyA[a].X, 2) + Math.Pow(polyB[b].Y - polyA[a].Y, 2))) < minDist) + { + minDist = d; + indA = a; + indB = b; + }; + } + + private static void InsertHole(List outbound, PointF[] inbound, int indA, int indB) + { + int ins = indA; + PointF shortway = outbound[ins++]; + for (int i = indB; i < inbound.Length; i++) + outbound.Insert(ins++, inbound[i]); + for (int i = 0; i <= indB; i++) + outbound.Insert(ins++, inbound[i]); + outbound.Insert(ins++, shortway); + } + + public static PointF LineIntersection(PointF A, PointF B, PointF C, PointF D) + { + // Line AB represented as a1x + b1y = c1 + double a1 = B.Y - A.Y; + double b1 = A.X - B.X; + double c1 = a1 * (A.X) + b1 * (A.Y); + + // Line CD represented as a2x + b2y = c2 + double a2 = D.Y - C.Y; + double b2 = C.X - D.X; + double c2 = a2 * (C.X) + b2 * (C.Y); + + double determinant = a1 * b2 - a2 * b1; + + if (determinant == 0) + { + // The lines are parallel. This is simplified + // by returning a pair of FLT_MAX + return new PointF((float)double.MaxValue, (float)double.MaxValue); + } + else + { + double x = (b2 * c1 - b1 * c2) / determinant; + double y = (a1 * c2 - a2 * c1) / determinant; + return new PointF((float)x, (float)y); + } + } + + private static bool IsInsideLine(PointF[] line, double x, double y) + { + return (x >= line[0].X && x <= line[1].X + || x >= line[1].X && x <= line[0].X) + && (y >= line[0].Y && y <= line[1].Y + || y >= line[1].Y && y <= line[0].Y); + } + + private static bool IsInsideLine(PointF[] line, PointF point) + { + return IsInsideLine(line, point.X, point.Y); + } + + private static bool IsInsideLine(PointF lineA , PointF lineB, PointF point) + { + return IsInsideLine(new PointF[] { lineA, lineB }, point.X, point.Y); + } + + /// + /// Get Buffer Polygon for polyline + /// + /// polyline + /// Buffer radius size in custom units (meters) + /// distance between point function + /// polygon + public static PolyResult GetLineBufferPolygon(PointF[] line, float distance, DistanceFunction DistanceFunc) + { + return GetLineBufferPolygon(line, distance, true, true, DistanceFunc, 0); + } + + /// + /// Get Buffer Polygon for polyline + /// + /// polyline + /// Buffer radius size in custom units (meters) + /// polygon + public static PolyResult GetLineBufferPolygon(PointF[] line, float distance) + { + return GetLineBufferPolygon(line, distance, true, true, GeographicDistFunc, 0); + } + + /// + /// Get Buffer Polygon for polyline + /// + /// polyline + /// Buffer radius size in custom units (meters) + /// calc method + /// polygon + public static PolyResult GetLineBufferPolygon(PointF[] line, float distance, int method) + { + return GetLineBufferPolygon(line, distance, true, true, GeographicDistFunc, method); + } + + /// + /// Interpolate polyline/polygon to less points + /// + /// points + /// max angle + /// distance function + /// interpolated polyline + public static PointF[] Interpolate(PointF[] poly, float interpolateLevel, DistanceFunction distFunc) + { + return Interpolate(poly, interpolateLevel, distFunc, 0); + } + + /// + /// Interpolate polyline/polygon to less points + /// + /// points + /// max angle + /// distance function + /// method used (0 - multi pass normal, 1 - multi pass triangle, 2 - sinlge pass normal, 3 - single pass triangle) + /// interpolated polyline + public static PointF[] Interpolate(PointF[] poly, float interpolateLevel, DistanceFunction distFunc, int method) + { + int was; + do + { + was = poly.Length; + List pts = new List(); + pts.Add(poly[0]); + for (int i = 1; i < (poly.Length - 1); i++) + { + if (distFunc != null) + { + float dA = distFunc(poly[i - 1], poly[i]); + float dB = distFunc(poly[i - 1], poly[i + 1]); + if ((dA == dB) || (dB == 2 * dA)) continue; // single line + if ((method == 1) || (method == 3)) + { + double cos = Math.Abs(180 - Math.Abs(AngleFrom3PointsInDegrees3(poly[i + 1], poly[i - 1], poly[i]))); + if (cos < 1) continue; + if ((dB > dA) && (dB / dA < 2) && (cos < interpolateLevel)) continue; + }; + }; + + double c = AngleFrom3PointsInDegrees3(poly[i - 1], poly[i], poly[i + 1]); + if (Math.Abs(c) < interpolateLevel) continue; + else pts.Add(poly[i]); + }; + pts.Add(poly[poly.Length - 1]); + poly = pts.ToArray(); + if ((method == 2) || (method == 3)) was = 0; + } + while (poly.Length < was); + return poly; + } + + private static PointF Lin1(PointF p1, PointF p2, double t) + { + PointF q = new PointF(); + q.X = Convert.ToSingle(p2.X * t + p1.X * (1 - t)); + q.Y = Convert.ToSingle(p2.Y * t + p1.Y * (1 - t)); + return q; + } + + // ìåòîä äå Êàñòåëüæî (ñ ðåêóðñèåé) + // p — ìàññèâ èñõîäíûõ òî÷åê, t — ïàðàìåòð (distance), n — íîìåð óðîâíÿ (0, 1, 2, 3), m — íîìåð òî÷êè íà ýòîì óðîâíå + private static PointF CastR(PointF[] p, double t, int n, int m) + { + if (n == 0) + return p[m]; + else + return Lin1(CastR(p, t, n - 1, m), CastR(p, t, n - 1, m + 1), t); + } + + public static PointF[] Bezier(PointF[] dots, int steps) + { + if (dots == null) return null; + if (dots.Length < 3) return dots; + if (dots.Length > 4) + { + PointF[] dtmp = new PointF[4]; + dtmp[0] = dots[0]; + dtmp[1] = dots[1 * dots.Length / 3]; + dtmp[2] = dots[2 * dots.Length / 3]; + dtmp[3] = dots[dots.Length - 1]; + dots = dtmp; + }; + + PointF[] res = new PointF[steps]; + double d = 1.0 / (res.Length - 1); + for (int i = 0; i < res.Length; i++) + res[i] = (CastR(dots, d * i, dots.Length == 3 ? 2 : 3, 0)); + return res; + } + + private static double AngleFrom3PointsInDegrees1(double x1, double y1, double x2, double y2, double x3, double y3) + { + double a = x2 - x1; + double b = y2 - y1; + double c = x3 - x2; + double d = y3 - y2; + + double atanA = Math.Atan2(a, b); + double atanB = Math.Atan2(c, d); + + return (atanA - atanB) * (-180 / Math.PI); + } + + private static double AngleFrom3PointsInDegrees3(PointF prev, PointF curr, PointF next) + { + double angle1 = Math.Atan2(prev.Y - curr.Y, prev.X - curr.X); + double angle2 = Math.Atan2(curr.Y - next.Y, curr.X - next.X); + return (angle1 - angle2) * 180.0 / Math.PI; + } + + private static PointF[] glbp(PointF[] line, float distance, List poliSegments, DistanceFunction DistanceFunc) + { + float step = 1; + List p = new List(); + +#if gpc + for (int n = 1; n < line.Length; n++) + { + List polse = new List(); + PointF s = line[n - 1]; + PointF e = line[n]; + + float angle = (float)((Math.Atan((e.Y - s.Y) / (e.X - s.X)) * 180 / Math.PI)); + if (e.X < s.X) angle = 180 + angle; + if (angle < 0) angle += 360; + + float c = (float)(e.Y - Math.Tan(angle * Math.PI / 180) * e.X); + float d = DistFunc(s, new PointF(s.X + step, s.Y)); + float r = distance / d * step; + float cCR = (float)(c - r / Math.Cos(angle * Math.PI / 180)); + + PointF[] els = GetEllipse(s, r, angle - 270, angle - 90); + PointF[] ele = GetEllipse(e, r, angle - 90, angle + 90); + List segments = new List(); + segments.AddRange(els); + segments.AddRange(ele); + poliSegments.Add(segments.ToArray()); + p = segments; + }; + if (poliSegments.Count != 0) + { + Polygon was = null; + for (int i = 0; i < poliSegments.Count; i++) + { + GraphicsPath gp = new GraphicsPath(); + gp.AddPolygon(poliSegments[i]); + Polygon cur = new Polygon(gp); + if (i > 0) cur = cur.Clip(GpcOperation.Union, was); + was = cur; + }; + if ((was != null) && (was.Contour != null) && (was.Contour.Length > 0)) + { + p.Clear(); + for (int i = 0; i < was.Contour[0].Vertex.Length; i++) + p.Add(new PointF((float)was.Contour[0].Vertex[i].X, (float)was.Contour[0].Vertex[i].Y)); + }; + }; + +#else + + float pAn = 0; + float pCR = 0; + + for (int n = 1; n < line.Length; n++) + { + // y = f(x) + // y = tan(angle) * x + c; + + PointF befpP = n < 2 ? new PointF(0, 0) : line[n - 2]; + PointF prevP = line[n - 1]; + PointF currP = line[n]; + float angle = (float)((Math.Atan((currP.Y - prevP.Y) / (currP.X - prevP.X)) * 180 / Math.PI)); + if (currP.X < prevP.X) angle = 180 + angle; + if (angle < 0) angle += 360; + + if(Math.Abs(Math.Tan(angle * Math.PI / 180)) > 750) angle -= (float)0.05; + + + float c = (float)(currP.Y - Math.Tan(angle * Math.PI / 180) * currP.X); + float d = DistanceFunc == null ? SampleDistFunc(prevP, new PointF(prevP.X + step, prevP.Y)) : DistanceFunc(prevP, new PointF(prevP.X + step, prevP.Y)); + float r = distance / d * step; + float cCR = (float)(c - r / Math.Cos(angle * Math.PI / 180)); + + //if (poliSegments != null) + //{ + // PointF[] els = GetEllipse(s, r, angle - 270, angle - 90); + // PointF[] ele = GetEllipse(e, r, angle - 90, angle + 90); + // List segments = new List(); + // segments.AddRange(els); + // segments.AddRange(ele); + // poliSegments.Add(segments.ToArray()); + //}; + + // first point + if (n == 1) + { + PointF[] el = GetEllipse(prevP, r, angle - 180, angle - 90); + p.AddRange(el); + List tmps = new List(); + tmps.AddRange(el); tmps.Add(prevP); + if (poliSegments != null) poliSegments.Add(tmps.ToArray()); + }; + + // lines + { + // yr = f(x) + // yr = tan(angle) * x + c - r; + + if (n == 1) + { + pAn = angle; + pCR = c - r; + }; + + if ((angle == pAn) && (n != 1)) // no turn + { + float xr = (float)(prevP.X + Math.Cos((angle - 90) * Math.PI / 180) * r); + float yr = (float)(prevP.Y + Math.Sin((angle - 90) * Math.PI / 180) * r); + p.Add(new PointF(xr, yr)); + List tmps = new List(); + tmps.Add(poliSegments[poliSegments.Count - 1][poliSegments[poliSegments.Count - 1].Length - 1]); + tmps.Add(poliSegments[poliSegments.Count - 1][poliSegments[poliSegments.Count - 1].Length - 2]); + tmps.Add(new PointF(xr, yr)); + tmps.Add(currP); + if (poliSegments != null) poliSegments.Add(tmps.ToArray()); + }; + + // turn to left/right + if (n > 1) + { + float dA = (pAn - angle); + if (dA < -180) dA += 360; + if (dA > 180) dA = dA - 360; + + if ((dA > 0) && (dA < 180)) // turn left + { + // tan(angle)*x+(c-r) = tan(pAn)*x+pCR + // x = (pCR-(c-r))/tan(angle)-tan(pAn) + + float xu = (float)((pCR - cCR) / (Math.Tan(angle * Math.PI / 180) - Math.Tan(pAn * Math.PI / 180))); + float yu = (float)(Math.Tan(pAn * Math.PI / 180) * xu + pCR); + + bool add = true; + if (befpP.X != 0) + { + float dsum = DistanceFunc == null ? SampleDistFunc(currP, befpP) : DistanceFunc(currP, befpP); + if (dsum < (distance * 2)) + add = false; + else + { + float dprv = DistanceFunc == null ? SampleDistFunc(prevP, currP) : DistanceFunc(prevP, currP); + float dcur = DistanceFunc == null ? SampleDistFunc(prevP, befpP) : DistanceFunc(prevP, befpP); + float dadd = DistanceFunc == null ? SampleDistFunc(prevP, new PointF(xu, yu)) : DistanceFunc(prevP, new PointF(xu, yu)); + if ((dadd > dcur) && (dadd > dprv)) + add = false; + }; + }; + + + if (add) + { + float da = pAn - dA / 2 - 90; + p.Add(new PointF(xu, yu)); + + if (poliSegments != null) + { + List tmps = new List(); + tmps.Add(poliSegments[poliSegments.Count - 1][poliSegments[poliSegments.Count - 1].Length - 1]); + tmps.Add(poliSegments[poliSegments.Count - 1][poliSegments[poliSegments.Count - 1].Length - 2]); + tmps.Add(new PointF(xu, yu)); + tmps.Add(prevP); + poliSegments.Add(tmps.ToArray()); + }; + }; + } + else // turn right + { + PointF[] el = GetEllipse(prevP, r, pAn - 90, angle - 90); + p.AddRange(el); + + if (poliSegments != null) + { + List tmps = new List(); + tmps.Add(poliSegments[poliSegments.Count - 1][poliSegments[poliSegments.Count - 1].Length - 1]); + tmps.Add(poliSegments[poliSegments.Count - 1][poliSegments[poliSegments.Count - 1].Length - 2]); + tmps.AddRange(el); + tmps.Add(prevP); + poliSegments.Add(tmps.ToArray()); + }; + }; + }; + pAn = angle; + pCR = cCR; + }; + + // last point + if (n == (line.Length - 1)) + { + PointF[] el = GetEllipse(currP, r, angle - 90, angle); + p.AddRange(el); + if (poliSegments != null) + { + List tmps = new List(); + tmps.Add(poliSegments[poliSegments.Count - 1][poliSegments[poliSegments.Count - 1].Length - 1]); + tmps.Add(poliSegments[poliSegments.Count - 1][poliSegments[poliSegments.Count - 1].Length - 2]); + if((el != null) && (el.Length > 0)) + tmps.Add(el[0]); + tmps.Add(currP); + poliSegments.Add(tmps.ToArray()); + }; + { + List tmps = new List(); + tmps.Add(currP); tmps.AddRange(el); + if (poliSegments != null) poliSegments.Add(tmps.ToArray()); + }; + }; + }; +#endif + if ((p[0].X == p[p.Count - 1].X) && (p[0].Y == p[p.Count - 1].Y)) p.RemoveAt(p.Count - 1); + for (int i = p.Count - 2, j = p.Count - 1; i >= 0; i--, j--) + if ((p[i].X == p[j].X) && (p[i].Y == p[j].Y)) p.RemoveAt(j); + + // optimize + //for (int pn = p.Count - 1; pn >= 0; pn--) + //{ + // float maxd = float.MaxValue; + // for (int n = 1; n < line.Length; n++) + // { + // PointF prevP = line[n - 1]; + // PointF currP = line[n]; + + // PointF pol; + // int side; + // float curd = DistanceFromPointToLine(p[pn], prevP, currP, DistanceFunc, out pol, out side); + // if (curd < maxd) maxd = curd; + // }; + // if (maxd < (distance * 0.75)) p.RemoveAt(pn); + //}; + + return p.ToArray(); + } + + /// + /// Create Circle Zone for point + /// + /// Point + /// Radius + /// Angle From + /// Angle To + /// polygon + public static PointF[] GetEllipse(PointF center, float radius, float angle_from, float angle_to) + { + List p = new List(); + if (angle_to < angle_from) angle_to += 360; + for (float an = angle_from; an <= angle_to; an += 90 / 5) + { + float x = (float)(center.X + Math.Cos(an * Math.PI / 180) * radius); + float y = (float)(center.Y + Math.Sin(an * Math.PI / 180) * radius); + p.Add(new PointF(x, y)); + }; + return p.ToArray(); + } + + public static PointF GetAngledPoint(PointF center, float radius, float angle) + { + float x = (float)(center.X + Math.Cos(angle * Math.PI / 180) * radius); + float y = (float)(center.Y + Math.Sin(angle * Math.PI / 180) * radius); + return new PointF(x, y); + } + + /// + /// Distance from specified point to line + /// + /// Specified point + /// Line Start + /// Line End + /// Get Distance Function + /// Nearest point on line + /// side of + /// distance + public static float DistanceFromPointToLine(PointF pt, PointF lineStart, PointF lineEnd, DistanceFunction DistanceFunc, out PointF pointOnLine, out int side) + { + float dx = lineEnd.X - lineStart.X; + float dy = lineEnd.Y - lineStart.Y; + + if ((dx == 0) && (dy == 0)) + { + // line is a point + // ëèíèÿ ìîæåò áûòü ñ íóëåâîé äëèíîé ïîñëå àíàëèçà TRA + pointOnLine = lineStart; + side = 0; + //dx = pt.X - lineStart.X; + //dy = pt.Y - lineStart.Y; + //return Math.Sqrt(dx * dx + dy * dy); + float dist = DistanceFunc == null ? SampleDistFunc(pt, pointOnLine) : DistanceFunc(pt, pointOnLine); + return dist; + }; + + side = Math.Sign((lineEnd.X - lineStart.X) * (pt.Y - lineStart.Y) - (lineEnd.Y - lineStart.Y) * (pt.X - lineStart.X)); + + // Calculate the t that minimizes the distance. + float t = ((pt.X - lineStart.X) * dx + (pt.Y - lineStart.Y) * dy) / (dx * dx + dy * dy); + + // See if this represents one of the segment's + // end points or a point in the middle. + if (t < 0) + { + pointOnLine = new PointF(lineStart.X, lineStart.Y); + dx = pt.X - lineStart.X; + dy = pt.Y - lineStart.Y; + } + else if (t > 1) + { + pointOnLine = new PointF(lineEnd.X, lineEnd.Y); + dx = pt.X - lineEnd.X; + dy = pt.Y - lineEnd.Y; + } + else + { + pointOnLine = new PointF(lineStart.X + t * dx, lineStart.Y + t * dy); + dx = pt.X - pointOnLine.X; + dy = pt.Y - pointOnLine.Y; + }; + + float d = DistanceFunc == null ? SampleDistFunc(pt, pointOnLine) : DistanceFunc(pt, pointOnLine); + return d; + } + + /// + /// Get Distance by Route + /// + /// Point + /// Route + /// Dist Func + /// Distance from Start of the Route to Point + /// Distance from Point to Route + public static float DistanceFromPointToRoute(PointF pt, PointF[] route, DistanceFunction DistanceFunc, out float distance_from_start) + { + float route_dist = 0; + float min_dist = float.MaxValue; + distance_from_start = float.MaxValue; + for (int i = 1; i < route.Length; i++) + { + PointF pointOnLine = PointF.Empty; int side = 0; + float dist2line = DistanceFromPointToLine(pt, route[i - 1], route[i], DistanceFunc, out pointOnLine, out side); + if (dist2line < min_dist) + { + min_dist = dist2line; + float dist2turn = DistanceFunc == null ? SampleDistFunc(route[i - 1], pointOnLine) : DistanceFunc(route[i - 1], pointOnLine); + distance_from_start = route_dist + dist2turn + dist2line; + }; + route_dist += (DistanceFunc == null ? SampleDistFunc(route[i - 1], route[i]) : DistanceFunc(route[i - 1], route[i])); + }; + return min_dist; + } + + public struct InBoundInsert + { + public PointF[] poly; + public int outboundIndex; + public int inboundIndex; + + public InBoundInsert(PointF[] poly, int outboundIndex, int inboundIndex) + { + this.poly = poly; + this.outboundIndex = outboundIndex; + this.inboundIndex = inboundIndex; + } + } + + public class InBoundInsertComparer : IComparer + { + public int Compare(InBoundInsert a, InBoundInsert b) + { + return a.outboundIndex.CompareTo(b.outboundIndex); + } + } + } +} diff --git a/SOLVER/nmsRoutesDirectCall/Properties/AssemblyInfo.cs b/SOLVER/nmsRoutesDirectCall/Properties/AssemblyInfo.cs new file mode 100644 index 0000000..06414c0 --- /dev/null +++ b/SOLVER/nmsRoutesDirectCall/Properties/AssemblyInfo.cs @@ -0,0 +1,35 @@ +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +[assembly: AssemblyTitle("nmsRoutesDirectCall")] +[assembly: AssemblyDescription("Библиотека прÑмого доÑтупа к ÑервиÑу поиÑка маршрутов")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("Milok Zbrozek ")] +[assembly: AssemblyProduct("Navicom MapServices Routes Direct Call")] +[assembly: AssemblyCopyright("Copyright © Milok Zbrozek 2021")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// Setting ComVisible to false makes the types in this assembly not visible +// to COM components. If you need to access a type in this assembly from +// COM, set the ComVisible attribute to true on that type. +[assembly: ComVisible(true)] + +// The following GUID is for the ID of the typelib if this project is exposed to COM +[assembly: Guid("c21dbc0e-548f-4b85-82e0-3533681b8f60")] + +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +// You can specify all the values or you can default the Revision and Build Numbers +// by using the '*' as shown below: +[assembly: AssemblyVersion("21.12.21.3")] +[assembly: AssemblyFileVersion("21.12.21.3")] diff --git a/SOLVER/nmsRoutesDirectCall/nmsRouteClient.cs b/SOLVER/nmsRoutesDirectCall/nmsRouteClient.cs new file mode 100644 index 0000000..847eed8 --- /dev/null +++ b/SOLVER/nmsRoutesDirectCall/nmsRouteClient.cs @@ -0,0 +1,658 @@ +// +// Class For 3rd party Companies +// returns XML as through HTTP +// required licenseKey version +// mode: TCP +// + +using System; +using System.Collections.Generic; +using System.Drawing; +using System.Text; +using System.Xml; +using System.Xml.Serialization; +using System.Runtime.Serialization.Formatters; +using System.Runtime.Serialization.Formatters.Binary; +using System.Runtime.InteropServices; + +namespace nmsRoutesDirectCall +{ + // + // HowTo Create + // http://krez0n.org.ua/archives/248 + // + // RegAsm.exe nmsRoutesWebTest.dll /codebase /tlb: xxx.tlb + // RegAsm.exe nmsRoutesWebTest.dll /tlb: xxx.tlb + // RegAsm.exe nmsRoutesWebTest.dll /unregister + // + + [ComVisible(true)] + [Guid("96C7DD1C-16A2-4bc5-92D5-CC5595ABEB97")] + [ClassInterface(ClassInterfaceType.AutoDual)] + public class nmsRouteClient + { + private string ip = "127.0.0.1"; + private int port = 7755; + + public nmsRouteClient() {} + public nmsRouteClient(string IPAddress) { this.ip = IPAddress; } + public nmsRouteClient(string IPAddress, int Port) { this.ip = IPAddress; this.port = Port; } + public void SetServerIPAddress(string IPAddress) { this.ip = IPAddress; } + public string GetServerIPAddress() { return this.ip; } + public void SetServerPort(int Port) { this.port = Port; } + public int GetServerPort() { return this.port; } + + /// + /// Ôëàãè: + /// 0x01 - ïîëó÷àòü ïîëèëèíèþ + /// 0x02 - ïîëó÷àòü îïèñàíèå + /// 0x04 - èñïîëüçîâàòü òåêóùèé òðàôèê + /// 0x08 - èñïîëüçîâàòü èñòîðè÷åñêèé òðàôèê + /// 0x10 - îïòèìèçèðîâàòü ïðîìåæóòî÷íûå òî÷êè ìàðøðóòà (ðåîðãàíèçàöèÿ) + /// 0x20 - îïòèìèçèðîâàòü ïî ðàññòîÿíèþ + /// 0x40 - äîïóñêàòü âûåçä íà äîðîãó è ñúåçä ÷åðåç âñòðå÷íóþ ïîëîñó + /// + /// + /// + /// + /// + /// + /// + /// Ôëàãè: + /// 0x01 - ïîëó÷àòü ïîëèëèíèþ + /// 0x02 - ïîëó÷àòü îïèñàíèå + /// 0x04 - èñïîëüçîâàòü òåêóùèé òðàôèê + /// 0x08 - èñïîëüçîâàòü èñòîðè÷åñêèé òðàôèê + /// 0x10 - îïòèìèçèðîâàòü ïðîìåæóòî÷íûå òî÷êè ìàðøðóòà (ðåîðãàíèçàöèÿ) + /// 0x20 - îïòèìèçèðîâàòü ïî ðàññòîÿíèþ + /// 0x40 - äîïóñêàòü âûåçä íà äîðîãó è ñúåçä ÷åðåç âñòðå÷íóþ ïîëîñó + /// + /// + public string GetRouteXML(string licenseKey, string[] stopNames, double[] latt, double[] lonn, DateTime startTime, long flags) + { + string res = ""; + + System.Net.Sockets.TcpClient cl = new System.Net.Sockets.TcpClient(); + cl.Connect(ip, port); + cl.ReceiveTimeout = 5 * 60 * 1000 + 10000; // 5 min as in server + 10s delay // 5 minutes // 2.5 mins per start // 2.5 mins per end + + byte[] buff = System.Text.Encoding.GetEncoding(1251).GetBytes("dkxce.Route.TCPSolver"); + cl.GetStream().Write(buff, 0, buff.Length); + cl.GetStream().WriteByte(3); + + buff = GetMethod3RequestData(licenseKey, stopNames, latt, lonn, startTime, flags, null); + cl.GetStream().Write(buff, 0, buff.Length); + + int read = 0; + buff = new byte[21]; + while ((read = cl.GetStream().Read(buff, 0, buff.Length)) == 0) ; + if ((read == 21) && (System.Text.Encoding.GetEncoding(1251).GetString(buff) == "dkxce.Route.TCPSolver") && (cl.GetStream().ReadByte() == 3)) + { + System.IO.StreamReader sr = new System.IO.StreamReader(cl.GetStream(), System.Text.Encoding.GetEncoding(1251)); + res = sr.ReadToEnd(); + }; + cl.GetStream().Close(); + cl.Close(); + return res; + } + + /// + /// Ôëàãè: + /// 0x01 - ïîëó÷àòü ïîëèëèíèþ + /// 0x02 - ïîëó÷àòü îïèñàíèå + /// 0x04 - èñïîëüçîâàòü òåêóùèé òðàôèê + /// 0x08 - èñïîëüçîâàòü èñòîðè÷åñêèé òðàôèê + /// 0x10 - îïòèìèçèðîâàòü ïðîìåæóòî÷íûå òî÷êè ìàðøðóòà (ðåîðãàíèçàöèÿ) + /// 0x20 - îïòèìèçèðîâàòü ïî ðàññòîÿíèþ + /// 0x40 - äîïóñêàòü âûåçä íà äîðîãó è ñúåçä ÷åðåç âñòðå÷íóþ ïîëîñó + /// + /// + /// + /// + /// + /// + /// + /// Ôëàãè: + /// 0x01 - ïîëó÷àòü ïîëèëèíèþ + /// 0x02 - ïîëó÷àòü îïèñàíèå + /// 0x04 - èñïîëüçîâàòü òåêóùèé òðàôèê + /// 0x08 - èñïîëüçîâàòü èñòîðè÷åñêèé òðàôèê + /// 0x10 - îïòèìèçèðîâàòü ïðîìåæóòî÷íûå òî÷êè ìàðøðóòà (ðåîðãàíèçàöèÿ) + /// 0x20 - îïòèìèçèðîâàòü ïî ðàññòîÿíèþ + /// 0x40 - äîïóñêàòü âûåçä íà äîðîãó è ñúåçä ÷åðåç âñòðå÷íóþ ïîëîñó + /// + /// + [ComVisible(false)] + public string GetRouteXML(string licenseKey, string[] stopNames, double[] latt, double[] lonn, DateTime startTime, long flags, + System.Drawing.PointF[] roadsExcept, double roadsExceptRaduisInMeters, byte[] RoadsOnly) // ID 7 + { + string res = ""; + + System.Net.Sockets.TcpClient cl = new System.Net.Sockets.TcpClient(); + cl.Connect(ip, port); + cl.ReceiveTimeout = 5 * 60 * 1000 + 10000; // 5 min as in server + 10s delay // 5 minutes // 2.5 mins per start // 2.5 mins per end + + byte[] buff = System.Text.Encoding.GetEncoding(1251).GetBytes("dkxce.Route.TCPSolver"); + cl.GetStream().Write(buff, 0, buff.Length); + cl.GetStream().WriteByte(7); + + buff = GetMethod3RequestData(licenseKey, stopNames, latt, lonn, startTime, flags, null); + cl.GetStream().Write(buff, 0, buff.Length); + + // RoadsOnly + byte[] wb = new byte[16]; + if ((RoadsOnly != null) && (RoadsOnly.Length == 16)) + cl.GetStream().Write(RoadsOnly, 0, RoadsOnly.Length); + else + cl.GetStream().Write(wb, 0, wb.Length); + // roadsExceptRaduisInMeters + wb = BitConverter.GetBytes(roadsExceptRaduisInMeters); + cl.GetStream().Write(wb, 0, wb.Length); + // pointsNo + wb = BitConverter.GetBytes((ushort)(roadsExcept == null ? 0 : roadsExcept.Length)); + cl.GetStream().Write(wb, 0, wb.Length); + // points + if ((roadsExcept != null) && (roadsExcept.Length > 0)) + { + byte[] btw = new byte[2 * 8 * roadsExcept.Length]; + for (int i = 0; i < roadsExcept.Length; i++) + { + wb = BitConverter.GetBytes((double)roadsExcept[i].Y); + Array.Copy(wb, 0, btw, i * 2 * 8, 8); + wb = BitConverter.GetBytes((double)roadsExcept[i].X); + Array.Copy(wb, 0, btw, i * 2 * 8 + 8, 8); + }; + cl.GetStream().Write(btw, 0, btw.Length); + }; + // End RoadsOnly + + int read = 0; + buff = new byte[21]; + while ((read = cl.GetStream().Read(buff, 0, buff.Length)) == 0) ; + if ((read == 21) && (System.Text.Encoding.GetEncoding(1251).GetString(buff) == "dkxce.Route.TCPSolver")) + { + byte RM = (byte)cl.GetStream().ReadByte(); + if ((RM == 3) || (RM == 7)) + { + System.IO.StreamReader sr = new System.IO.StreamReader(cl.GetStream(), System.Text.Encoding.GetEncoding(1251)); + res = sr.ReadToEnd(); + }; + }; + cl.GetStream().Close(); + cl.Close(); + return res; + } + + /// + /// Ôëàãè: + /// 0x01 - ïîëó÷àòü ïîëèëèíèþ + /// 0x02 - ïîëó÷àòü îïèñàíèå + /// 0x04 - èñïîëüçîâàòü òåêóùèé òðàôèê + /// 0x08 - èñïîëüçîâàòü èñòîðè÷åñêèé òðàôèê + /// 0x10 - îïòèìèçèðîâàòü ïðîìåæóòî÷íûå òî÷êè ìàðøðóòà (ðåîðãàíèçàöèÿ) + /// 0x20 - îïòèìèçèðîâàòü ïî ðàññòîÿíèþ + /// 0x40 - äîïóñêàòü âûåçä íà äîðîãó è ñúåçä ÷åðåç âñòðå÷íóþ ïîëîñó + /// + /// + /// + /// + /// + /// + /// + /// Ôëàãè: + /// 0x01 - ïîëó÷àòü ïîëèëèíèþ + /// 0x02 - ïîëó÷àòü îïèñàíèå + /// 0x04 - èñïîëüçîâàòü òåêóùèé òðàôèê + /// 0x08 - èñïîëüçîâàòü èñòîðè÷åñêèé òðàôèê + /// 0x10 - îïòèìèçèðîâàòü ïðîìåæóòî÷íûå òî÷êè ìàðøðóòà (ðåîðãàíèçàöèÿ) + /// 0x20 - îïòèìèçèðîâàòü ïî ðàññòîÿíèþ + /// 0x40 - äîïóñêàòü âûåçä íà äîðîãó è ñúåçä ÷åðåç âñòðå÷íóþ ïîëîñó + /// + /// + public string GetRouteXML(string licenseKey, string[] stopNames, double[] latt, double[] lonn, DateTime startTime, long flags, + double[] roadsExceptLatt, double[] roadsExceptLonn, double roadsExceptRaduisInMeters, byte[] RoadsOnly) + { + System.Drawing.PointF[] roadsExcept = new System.Drawing.PointF[roadsExceptLatt.Length]; + for (int i = 0; i < roadsExcept.Length; i++) + roadsExcept[i] = new System.Drawing.PointF((float)roadsExceptLonn[i], (float)roadsExceptLatt[i]); + return GetRouteXML(licenseKey, stopNames, latt, lonn, startTime, flags, roadsExcept, roadsExceptRaduisInMeters, RoadsOnly); + } + + /// + /// Ôëàãè: + /// 0x01 - ïîëó÷àòü ïîëèëèíèþ + /// 0x02 - ïîëó÷àòü îïèñàíèå + /// 0x04 - èñïîëüçîâàòü òåêóùèé òðàôèê + /// 0x08 - èñïîëüçîâàòü èñòîðè÷åñêèé òðàôèê + /// 0x10 - îïòèìèçèðîâàòü ïðîìåæóòî÷íûå òî÷êè ìàðøðóòà (ðåîðãàíèçàöèÿ) + /// 0x20 - îïòèìèçèðîâàòü ïî ðàññòîÿíèþ + /// 0x40 - äîïóñêàòü âûåçä íà äîðîãó è ñúåçä ÷åðåç âñòðå÷íóþ ïîëîñó + /// + /// + /// + /// + /// + /// Ôëàãè: + /// 0x01 - ïîëó÷àòü ïîëèëèíèþ + /// 0x02 - ïîëó÷àòü îïèñàíèå + /// 0x04 - èñïîëüçîâàòü òåêóùèé òðàôèê + /// 0x08 - èñïîëüçîâàòü èñòîðè÷åñêèé òðàôèê + /// 0x10 - îïòèìèçèðîâàòü ïðîìåæóòî÷íûå òî÷êè ìàðøðóòà (ðåîðãàíèçàöèÿ) + /// 0x20 - îïòèìèçèðîâàòü ïî ðàññòîÿíèþ + /// 0x40 - äîïóñêàòü âûåçä íà äîðîãó è ñúåçä ÷åðåç âñòðå÷íóþ ïîëîñó + /// + /// + [ComVisible(false)] + public string GetRouteXML(string licenseKey, nmsRouteClientStopList stopList, DateTime startTime, long flags) + { + if (stopList == null) throw new Exception("You must set stopList first"); + return GetRouteXML(licenseKey, stopList.GetStopNames(), stopList.GetLatt(), stopList.GetLonn(), startTime, flags); + } + + /// + /// Ôëàãè: + /// 0x01 - ïîëó÷àòü ïîëèëèíèþ + /// 0x02 - ïîëó÷àòü îïèñàíèå + /// 0x04 - èñïîëüçîâàòü òåêóùèé òðàôèê + /// 0x08 - èñïîëüçîâàòü èñòîðè÷åñêèé òðàôèê + /// 0x10 - îïòèìèçèðîâàòü ïðîìåæóòî÷íûå òî÷êè ìàðøðóòà (ðåîðãàíèçàöèÿ) + /// 0x20 - îïòèìèçèðîâàòü ïî ðàññòîÿíèþ + /// 0x40 - äîïóñêàòü âûåçä íà äîðîãó è ñúåçä ÷åðåç âñòðå÷íóþ ïîëîñó + /// + /// + /// + /// + /// + /// Ôëàãè: + /// 0x01 - ïîëó÷àòü ïîëèëèíèþ + /// 0x02 - ïîëó÷àòü îïèñàíèå + /// 0x04 - èñïîëüçîâàòü òåêóùèé òðàôèê + /// 0x08 - èñïîëüçîâàòü èñòîðè÷åñêèé òðàôèê + /// 0x20 - îïòèìèçèðîâàòü ïî ðàññòîÿíèþ + /// 0x40 - äîïóñêàòü âûåçä íà äîðîãó è ñúåçä ÷åðåç âñòðå÷íóþ ïîëîñó + /// 0x10 - îïòèìèçèðîâàòü ïðîìåæóòî÷íûå òî÷êè ìàðøðóòà (ðåîðãàíèçàöèÿ) + /// + /// + [ComVisible(false)] + public string GetRouteXML(string licenseKey, nmsRouteClientStopList stopList, DateTime startTime, long flags, + System.Drawing.PointF[] roadsExcept, double roadsExceptRaduisInMeters, byte[] RoadsOnly) // ID 7 + { + if (stopList == null) throw new Exception("You must set stopList first"); + return GetRouteXML(licenseKey, stopList.GetStopNames(), stopList.GetLatt(), stopList.GetLonn(), startTime, flags, roadsExcept, roadsExceptRaduisInMeters, RoadsOnly); + } + + /// + /// Ôëàãè: + /// 0x01 - ïîëó÷àòü ïîëèëèíèþ + /// 0x02 - ïîëó÷àòü îïèñàíèå + /// 0x04 - èñïîëüçîâàòü òåêóùèé òðàôèê + /// 0x08 - èñïîëüçîâàòü èñòîðè÷åñêèé òðàôèê + /// 0x10 - îïòèìèçèðîâàòü ïðîìåæóòî÷íûå òî÷êè ìàðøðóòà (ðåîðãàíèçàöèÿ) + /// 0x20 - îïòèìèçèðîâàòü ïî ðàññòîÿíèþ + /// 0x40 - äîïóñêàòü âûåçä íà äîðîãó è ñúåçä ÷åðåç âñòðå÷íóþ ïîëîñó + /// + /// + /// + /// + /// + /// Ôëàãè: + /// 0x01 - ïîëó÷àòü ïîëèëèíèþ + /// 0x02 - ïîëó÷àòü îïèñàíèå + /// 0x04 - èñïîëüçîâàòü òåêóùèé òðàôèê + /// 0x08 - èñïîëüçîâàòü èñòîðè÷åñêèé òðàôèê + /// 0x10 - îïòèìèçèðîâàòü ïðîìåæóòî÷íûå òî÷êè ìàðøðóòà (ðåîðãàíèçàöèÿ) + /// 0x20 - îïòèìèçèðîâàòü ïî ðàññòîÿíèþ + /// 0x40 - äîïóñêàòü âûåçä íà äîðîãó è ñúåçä ÷åðåç âñòðå÷íóþ ïîëîñó + /// + /// + /// + /// + /// + /// + [ComVisible(false)] + public string GetRouteXML(string licenseKey, nmsRouteClientStopList stopList, DateTime startTime, long flags, + double[] roadsExceptLatt, double[] roadsExceptLonn, double roadsExceptRaduisInMeters, byte[] RoadsOnly) // ID 7 + { + if (stopList == null) throw new Exception("You must set stopList first"); + return GetRouteXML(licenseKey, stopList.GetStopNames(), stopList.GetLatt(), stopList.GetLonn(), startTime, flags, roadsExceptLatt, roadsExceptLonn, roadsExceptRaduisInMeters, RoadsOnly); + } + + /// + /// Create Route Result Object from XML Data + /// + /// xml data from GetRouteXML + /// Route Result + public Route XMLToObject(string xml) + { + if (String.IsNullOrEmpty(xml)) return null; + System.Xml.Serialization.XmlSerializer xs = new System.Xml.Serialization.XmlSerializer(typeof(Route)); + System.IO.MemoryStream ms = new System.IO.MemoryStream(); + byte[] bb = System.Text.Encoding.UTF8.GetBytes(xml); + ms.Write(bb, 0, bb.Length); + ms.Flush(); + ms.Position = 0; + System.IO.StreamReader reader = new System.IO.StreamReader(ms); + Route c = (Route)xs.Deserialize(reader); + reader.Close(); + return c; + } + + + public string GetNearRoadXML(string licenseKey, double[] lat, double[] lon, bool getNames) + { + string res = ""; + + System.Net.Sockets.TcpClient cl = new System.Net.Sockets.TcpClient(); + cl.Connect(ip, port); + cl.ReceiveTimeout = 5 * 60 * 1000 + 10000; // 5 min as in server + 10s delay // 5 minutes // 2.5 mins per start // 2.5 mins per end + + byte[] buff = System.Text.Encoding.GetEncoding(1251).GetBytes("dkxce.Route.TCPSolver"); + cl.GetStream().Write(buff, 0, buff.Length); + cl.GetStream().WriteByte(5); + + buff = GetMethod5RequestData(licenseKey, lat, lon, getNames); + cl.GetStream().Write(buff, 0, buff.Length); + + int read = 0; + buff = new byte[21]; + while ((read = cl.GetStream().Read(buff, 0, buff.Length)) == 0) ; + if ((read == 21) && (System.Text.Encoding.GetEncoding(1251).GetString(buff) == "dkxce.Route.TCPSolver") && (cl.GetStream().ReadByte() == 5)) + { + System.IO.StreamReader sr = new System.IO.StreamReader(cl.GetStream(), System.Text.Encoding.GetEncoding(1251)); + res = sr.ReadToEnd(); + System.Reflection.Assembly.LoadFrom(""); + }; + cl.GetStream().Close(); + cl.Close(); + return res; + } + + private byte[] GetMethod3RequestData(string licenseKey, string[] stopNames, double[] latt, double[] lonn, DateTime startTime, long flags, int[] regions) + { + if ((stopNames == null) || (latt == null) || (lonn == null)) return null; + if ((stopNames.Length != latt.Length) || (stopNames.Length != lonn.Length)) return null; + if ((stopNames.Length < 2) || ((stopNames.Length > 100))) return null; + + List ba = new List(); + ba.Add((byte)licenseKey.Length); + ba.AddRange(System.Text.Encoding.GetEncoding(1251).GetBytes(licenseKey)); + ba.Add((byte)stopNames.Length); + for (int i = 0; i < stopNames.Length; i++) + { + ba.Add((byte)stopNames[i].Length); + ba.AddRange(System.Text.Encoding.GetEncoding(1251).GetBytes(stopNames[i])); + ba.AddRange(BitConverter.GetBytes(latt[i])); + ba.AddRange(BitConverter.GetBytes(lonn[i])); + }; + ba.AddRange(BitConverter.GetBytes(startTime.ToOADate())); + ba.AddRange(BitConverter.GetBytes(flags)); + if (regions == null) + ba.Add(0); + else + { + ba.Add((byte)regions.Length); + for (int i = 0; i < regions.Length; i++) + ba.Add((byte)regions[i]); + }; + return ba.ToArray(); + } + + private byte[] GetMethod5RequestData(string licenseKey, double[] lat, double[] lon, bool getNames) + { + List ba = new List(); + ba.Add((byte)licenseKey.Length); + ba.AddRange(System.Text.Encoding.GetEncoding(1251).GetBytes(licenseKey)); + ba.Add((byte)(getNames ? 1 : 0)); + ba.AddRange(BitConverter.GetBytes((UInt16)lat.Length)); + for (int i = 0; i < lat.Length; i++) + { + ba.AddRange(BitConverter.GetBytes((double)lat[i])); + ba.AddRange(BitConverter.GetBytes((double)lon[i])); + }; + return ba.ToArray(); + } + } + + [ComVisible(true)] + [Guid("96C7DD1C-7F47-405b-9FC0-6E4CEF088E0E")] + [ClassInterface(ClassInterfaceType.AutoDual)] + public class nmsRouteClientStopList + { + private List nam = new List(); + private List lat = new List(); + private List lon = new List(); + + public nmsRouteClientStopList() { } + + public int Count { get { return nam.Count; } } + + public void AddStop(string nam, double lat, double lon) + { + if (nam.Length > 200) throw new Exception("Stop name must be less 200 symbols length"); + this.nam.Add(nam); + this.lat.Add(lat); + this.lon.Add(lon); + } + + public string[] GetStopNames() { return nam.ToArray(); } + public double[] GetLatt() { return lat.ToArray(); } + public double[] GetLonn() { return lon.ToArray(); } + } + + [ComVisible(true)] + [Guid("96C7DD1C-B2F6-42bc-98C5-A0D6867CCECE")] + [ClassInterface(ClassInterfaceType.AutoDual)] + public class nmsRouteClientRoadsOnly + { + private List arr = new List(new byte[16]); + + public nmsRouteClientRoadsOnly() { } + + public void SetByte(byte No, byte value) + { + arr[No] = value; + } + + public byte[] GetArray() { return arr.ToArray(); } + } + + [ComVisible(true)] + [Serializable] + [Guid("96C7DD1C-8043-489d-8C27-3E5DC5FFEF77")] + [ClassInterface(ClassInterfaceType.AutoDual)] + public class Stop + { + /// + /// Èìÿ + /// + [XmlText] + public string name = ""; + /// + /// Øèðîòà + /// + [XmlAttribute()] + public double lat = 0; + /// + /// Äîëãîòà + /// + [XmlAttribute()] + public double lon = 0; + + public Stop() { } + + public Stop(string name, double lat, double lon) + { + this.name = name; + this.lat = lat; + this.lon = lon; + } + } + + [ComVisible(true)] + [Serializable] + [Guid("96C7DD1C-9845-4ead-B202-729A0D23931E")] + [ClassInterface(ClassInterfaceType.AutoDual)] + public class XYPoint + { + /// + /// Äîëãîòà + /// + [XmlAttribute()] + public double x = 0; + /// + /// Øèðîòà + /// + [XmlAttribute()] + public double y = 0; + + public XYPoint(double x, double y) + { + this.x = x; + this.y = y; + } + + public XYPoint() { } + } + + [ComVisible(true)] + [Serializable] + [Guid("96C7DD1C-9845-4ead-B202-711A0D23031D")] + [ClassInterface(ClassInterfaceType.AutoDual)] + public class RoutePoint + { + public RoutePoint() { } + + public RoutePoint(int no, double x, double y, double segmentLength, double segmentTime, double totalLength, DateTime totalTime) + { + this.no = no; + this.x = x; + this.y = y; + this.sLen = segmentLength; + this.sTime = segmentTime; + this.tLen = totalLength; + this.tTime = totalTime; + } + + /// + /// Íóìðàöèÿ ñ 1 + /// + [XmlAttribute()] + public int no = 0; + + /// + /// Èíñòðóêöèÿ1 + /// + public string iToDo = ""; + /// + /// Èíñòðóêöèÿ2 + /// + public string iToGo = ""; + /// + /// Èíñòðóêöèÿ1 + /// + public string iStreet = ""; + + /// + /// Äîëãîòà + /// + [XmlAttribute()] + public double x = 0; + /// + /// Øèðîòà + /// + [XmlAttribute()] + public double y = 0; + + /// + /// Âðåìÿ òåêóùåãî ñåãìåíòà â ìèí + /// + [XmlAttribute()] + public double sTime = 0; + + /// + /// Äëèíà òåêóùåãî ñåãìåíòà â êì + /// + [XmlAttribute()] + public double sLen = 0; + + /// + /// Âðåìÿ ïðèáûòèÿ â íà÷àëî ñåãìåíòà + /// + [XmlAttribute()] + public DateTime tTime = DateTime.Now; + + /// + /// Äëèíà îò íà÷àëà ìàðøðóòà äî ñåãìåíòà + /// + [XmlAttribute()] + public double tLen = 0; + } + + [ComVisible(true)] + [Serializable] + [Guid("96C7DD1C-BD78-4b5b-88F8-851214C3ADBE")] + [ClassInterface(ClassInterfaceType.AutoDual)] + public class Route + { + public Route() { } + + /// + /// Äëèíà ìàðøðóòà â êì + /// + public double driveLength = 0; + /// + /// ðàññòîÿíèå ìåæäó ïðîìåæóòî÷íûìè òî÷êàìè ìàðøðóòà + /// + [XmlArrayItem("dls")] + public double[] driveLengthSegments = new double[0]; + /// + /// Âðåìÿ â ïóòè â ìèí + /// + public double driveTime = 0; + /// + /// âðåìÿ ìåæäó ïðîìåæóòî÷íûìè òî÷êàìè ìàðøðóòà + /// + [XmlArrayItem("dts")] + public double[] driveTimeSegments = new double[0]; + /// + /// Âðåìÿ âûåçäà + /// + public DateTime startTime = DateTime.Now; + /// + /// Âðåìÿ ïðèáûòèÿ + /// + public DateTime finishTime = DateTime.Now; + /// + /// Ìàðøðóòíûå òî÷êè + /// + [XmlArrayItem("stop")] + public Stop[] stops = new Stop[0]; + /// + /// ïîëèëèíèÿ ìàðøðóòà + /// + [XmlArrayItem("p")] + public XYPoint[] polyline = new XYPoint[0]; + /// + /// èíäåêñ, óêàçûâàþùèé íà ýëåìåíò ìàññèâà polyline äëÿ êàæäîãî + /// ó÷àñòêà ìåæäó ïðîìåæóòî÷íûìè òî÷êàìè ìàðøðóòà + /// + [XmlArrayItem("ps")] + public int[] polylineSegments = new int[0]; + /// + /// èíñòðóêöèè + /// + [XmlArrayItem("i")] + public RoutePoint[] instructions = new RoutePoint[0]; + /// + /// èíäåêñ, óêàçûâàþùèé íà ýëåìåíò ìàññèâà instructions äëÿ êàæäîãî + /// ó÷àñòêà ìåæäó ïðîìåæóòî÷íûìè òî÷êàìè ìàðøðóòà + /// + [XmlArrayItem("is")] + public int[] instructionsSegments = new int[0]; + + /// + /// Îøèáêà, åñëè åñòü + /// + public string LastError = String.Empty; + } +} diff --git a/SOLVER/nmsRoutesDirectCall/nmsRoutesDirectCall.csproj b/SOLVER/nmsRoutesDirectCall/nmsRoutesDirectCall.csproj new file mode 100644 index 0000000..2d8d5a4 --- /dev/null +++ b/SOLVER/nmsRoutesDirectCall/nmsRoutesDirectCall.csproj @@ -0,0 +1,49 @@ + + + Debug + AnyCPU + 8.0.50727 + 2.0 + {B1328D46-FE16-49DF-87B1-01A14C8D0C3C} + Library + Properties + nmsRoutesDirectCall + nmsRoutesDirectCall + + + true + full + false + ..\..\READY\MAIN_DLLs\ + DEBUG;TRACE + prompt + 4 + true + + + pdbonly + true + ..\..\READY\MAIN_DLLs\ + TRACE + prompt + 4 + + + + + + + + + + + + + + \ No newline at end of file diff --git a/SOLVER/nmsRoutesDirectCall/obj/Debug/nmsRoutesDirectCall.dll b/SOLVER/nmsRoutesDirectCall/obj/Debug/nmsRoutesDirectCall.dll new file mode 100644 index 0000000000000000000000000000000000000000..899edc88ecb97454fe8aa370c64cd282412d7a03 GIT binary patch literal 24576 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 literal 0 HcmV?d00001 diff --git a/SOLVER/nmsRoutesDirectCall/obj/Debug/nmsRoutesDirectCall.pdb b/SOLVER/nmsRoutesDirectCall/obj/Debug/nmsRoutesDirectCall.pdb new file mode 100644 index 0000000000000000000000000000000000000000..01c294f620cbe740fc5eb6f3aebc2115b7c06ccf GIT binary patch literal 28160 zcmeI43wV^(na95gF%WJg2#CmKfP zU98wut5sKPaqYIYQfn=?bRU)FoS~0O={P^hN<@2J`i%UxS^&VEaJiz6c|G{(~ z`$iNH1XC@X`1>A^z&)?OiTktuoN&jX1csV1z3(_|`H3b=0)4(y8Yz<<8{h~S7`*vr zF4&`kKPTLKS^}@FSvF^1&*utuED!cp-zAF%MZb>Erw*vq*$?WnvbkFc|$ zVrU{%0_8)!p_8CKP+zDY)E{~uq_PU2fzZj&AZRc&1Udy83Y`iKgHD5nLnEM(&?qPh z6+)w-)1e}040Hx`CNvHj3(=HdJTw972_4VwX!ZZDrw3oYXXI^{-@5VCyZ2pC{*@jG zHJc9fB2M<@gbuv(nwQD`YhDQ3fB99@bbRM)f1(CQO9JngF~)hczU1Fc7}-ti1z*5; zZ$dd1fU=)sF`&{5*;VZe{kRX?{ZhhZ``^iN@9nKWQ#Hp51A`D2a3+fZCVN zeth+xeh|^Pe=APg2h<`EisV*6lDEqK>N89JP|LI8be^EN7<9tDJ0$SN@80;G`sM*u zXYtHcOUf@=SW&%r_0pQ^^Q$UWEMK*{ruxDaRm)c|U0!`*O-0q}Rm-avT~t-Gs%3q9 zP3y*Zti7_SE!GgPsBdmggjF;*#aiOU4edd&e&(u{`YW0mTGy}M(AN4PQns&J-DWbb z-q7Ba|%5N~Z$ z`rO=qoAc{^kF5Ou!aZa1bH4u2?m9&;4l095U@nPsBRfZGNx@@Y4m*KKj>pqVi1YhK zJ+r6F`-tbUJQhE1bKFc3N5W@=sj%HoiiaHg#=ILnpZT$Pd0SikX2ORAJqn%$XOTyO z@M%T{Q6m@HVNko4iseP6MI|`Wsa@Tx<3O|5^|JUqc^5!dt`W13#cTFNv-E)bW+dp) zKKNUp_Pj#vdxiPI9M)6g*vF1%4R&^*@|4fYFp`k1tfJ~E_aylwl79uY*WPE!>COIo z1ZDM3lwsQ*@eMYX)tB*qdnZY^1A;PrAbD}r<1yk_&n`Z_1rsxy;5lrsqI3r4|ypk&`4oD9AXoCyv9tHAL1-{CqgO1O6f zsX12GZv0Em%2!KdRFODk?Hv>qT)2F5dpx$DGnvG5aYbu$GZTMPYfF3a{8&q@t*L=C zo@9JwTm6+yEtjT*t%z+hYSKTHu6BKMO1b!pms47ObJK_GRXlYl4yCWz*b;AAA4^SB zJg>EFeSJJ0Yh!g1V3(5hI9&ST^O{=f+ctB))H%<>7D{a0Ky_H`#M+H*nA9CRNgW12 znnN*7&Zby(dq&#LioBx#Kq4s%) z{^V`MV|ZZmCAe7I!lmVnjcu{^_HNqM)H%lUi)XMItZVYF^8B#<>HMVAPgBpi&UW~; z-gZ#WqiQ>*IoZ7E>Kc{}11|3dU)O|embSJrBDy!%` zSYDFJe(JY^e9Gg~d6^)tVi;D5-%Vu;@n1vXDqnmEPRY~WW^F|G*B;eZs_!Vzti!x6jr z+?8vr?A6cV@UZO164^+*wv*<^v@Icl!Co`MRA|9L3Ax-QHotP@A77g2R4ZkYx1m;TEe2}9L4 zlV0?qLI)w`@#&-&h(_mYS@lAFl@_1S3*{#|6pvoC);G3SZEA>Zh#Ps%h35fC=Xm2> z{ruQWmTUXT_e1yWXXY_;z{#de6?2YdXkKd$LcUY`Wja zscULK_8-=O#Lc!~{$eBYKG#J%4$_7#?wxMOCcQwy%{71RAJ+JJFLlw5-L#>S ze9Gg~z0>X3BLj`o8sEGAv||iPY{ne(+=|xfH99?0yllx9+OUm$%Hz|i9b}Pt%BolB zRC;_uuQYau4#iVGt7Jc>lI3!)=fX9{!{KYzB1`Qh!@zu9iBx zM9q_ZPq)B5j}C$k%%9F%I&_9I2Gl(e;Yf!%AIoRulurqT?AUcqrLyawD5SE_1m$EC zJKTrCbP0z5G*u&nn^Ps5}#sF4wW+e^_lAli7W(DW6;;IQ6IJb=@&hPA=Izqdx)A%WI&toY=dL^U_4cd~Hnvx_Rog-ca zsot0uQq|Q>yBm~?7SH?oHC;kgS%xSO)jDm|n z$-Wva2bY31;4*MExE$O7qB|X1!Hd9;f$s-z1b_RxH#%+tYw_Rj{JX%F_p^>7ID+%S8fY{$9cqNipm9*lJr4s5 zDP4E2XraN|9rnincR*(l*B>f^h8pr`!%yb;JzpfTXPiOq#|W3};6GIgwt|u+a_EpO zuLYyv$3e;R6JR;G4U{ae2PI47Wn{S>q>SM2LE?fP;9a0(c`tY~{@u?1D2R@9d>gzK zd@}MMwXujheT{SBfvZHj|3^ZV*>aYaH5MZ1@Fc`3A_iK58eyvyz?Ky z_27M=8hk&v6;%FDIJ_BDeQyOnOZYDE0q{ZaLGbh7KY_bJrF#^72>*XL|M$SpQL}ndT;8(z9AhPSw+22>e zi^0dh?(35Dq#WsL;-2SF`c?r=f$AJqm^kTF0ddS1F6}^0y3dDZI-E`XKt}B>G<3R4 zGm|o;i<$IRR!(}Xa?gRJS*nZ5y%svlJZIBobjs~hBWBO4ys{zas&U^(7Kl3d0oVup zAt+sztltOz2tPK>3=9s^?J>eYwOe3`A-4=O!zeLFA2V*@oApC2w7d7!pH96B8fd< zm=89_@ZoMa^-uDVUwlplHBSsP@p@ko=JVwgK6Z~43FeYsF3jf~@~b_(cT3?TzxbRB z&IV_j_;fzsPVjk}GKc5M}r%{!`q$nk&R@S$rfPYan=^tIjjInl5Ons-plPjB8h#B#&Ry< za_!WIY6WrdWKeP#;`~};ZX|q?3)h&JUt{44aH$KIj>s<^*#y>so52?F!yt2E@DWgU zXbbpBP<(cRAH{zwcooRp5nK&^1Ef+N{|++Obo>Oo29*4j{}&El235{M@MDC(30@2K zqd^}Bhk%M_{07(IFLeIX!EN}9!0W*h@CH!xpVChOZ^S>>g;zRcT$p&qL9m^8>FiA) zx)}T&X!~^`wO~vc8&qqaSDH1+Jo7xCRa8ILe*IWO_A_ZFBy6Sa)5+M(RnWPH6gD}S z#>go(`R$m}ny1kC3(U=MuMfqEIcG3DWOoY_c2{$Y_6PRe_kMEQeN-f|A1fdX+io0l zy3vbIf*NnPfU+Gs!3iL9z0reDfs63}1Gof~{G=DR;a>*c4%UNrfR}@x2HQZTzrx{1 zLFMZJ?014yL4S3fgOr6a-p&>rZA&?^w{nFFmm=0aLe#G&obE@&_G0(1x((1ZO3R0*wu zwm>_f$Dn7SLr?*I^KR(t9mtxd1?qG4wfbCrtv**@tIsv&)#vJK^?A6j)tBmP^?5z0 zK389>&(+sTuf7(B`&zo7zE+91_&%n=G zo4u&Lr!fT#xF?a%D6%vj)H+0S_fYdJo?4&T`bW&YS7kd1TA&A9I#1p87(=*FJnh{N z&*M~Pxzkt;jOcWqMr)S7bXXKBgBC$Y>QqE}|H~$LH;TU5coh1^^YH!ugl7Oo;qlkE z#pAA&J7(&O-H@$sM0-r*v@Y7^o=@YRjP#)p*$)KAfarKI4jc;>6R)-3WKc8I4Ddp5 z4%i5?huW&O-UZ-Qpzhmz+~IW&^Xb2Q*2I>IK;O6aJSrcF=hNzZ)5{|{Z;YDrie3x= zD~Cwn^>H;#PVTPMB=8-1FG|KH!f)?WcYUjst&= z-7j%i>d>Aak3t_sL-+=9D0fwdnX!5;X>6S%2|G^{68q0=e17Tp><7i?C9n+q6*vd{ zZ%}sU0GP^u26fQfGZNBXak%jxB5f}S(_x(Eh&^=bv(N$Pb*P;%z2A74L{Zja1^6d8 zc@y2K|LuyA2pl#tZx;+q`A0DS`}>@-adN7IcPGQ+InU!#?sHbOa&yntc^!$Khm_u@ z8R_0rx~33wbnfN)I)2{OaRDWJH;6j!_jTlw+VXho2E|FPeM!$g&**_q>eq8)DSQ9>dNTcn>v_a?oV_ex%TUiD z)bm`Yf2!vqu4Ae#lBM<#Pr8ovX?z_Sx5uQ8ce3}83(J!8r@STMI<~fG`)=y^I`vye z9;Nqbj#VAKO|xS#;&yXX4&EzNA>3!N6|!j$fXFuZ99RfG2#$3)&S5_1t4SK0xJ52L z+SAxE7D>oLqLIGJJw$mL8bYn1h4$^*WKMmj8oRiOa61N)c9CI|xTpLDSH>4XY>V0F zYHuZf6vRfE_4k*+nfSj9&Ica>t^FH~PiLBq*uYT^Yt_-2d5QfV*M405Jy2_~!2C=Ca z3(bXUp$*VB=pJYf^gN`yles9zaHv~0hI0Mf+$cu4yDXT$g{a!&D3__nTeAP1*XBA~ zuw_LOJk<8Rh7)I(tRv;Wgtay6j-UbmS>UDkwU=wgUk+{nweRMvVQVe88C2b`24$45 z1-F1VfZM1K%cuA9d5@dV$|0YTmXB6jnhlmgC6HeQ zoYrZLs{WdS+!sJUr9bo84O*Q|-7jjKJ#TDFay*B}*^5p$v?kHG{e>w@bAN>?&+FHl zu8h8~Bl>oCSpLLUbuOy=&pKmNz6W_0jzgb>-({g7- zpSbvoVXE+zF5O>Uy05wL&pQ89WTJF~UAmWD_!ACqb{KOw!(l&%FFC$nbEtia%JX!u zd*0~k^+(5lqYGc?`2VNlkIgiBKkCx`#)WTo{4RHX)`=$F2$%m}7e3X6>w*rC!Syb@ z(C2sYRWAMs7r)rWf7gYd(z){i=ny2s z*cUP`t%($$qCfJ7o!5`FY>6a?i_exXQ9$R1Bh??TTAfSI5Hc_rW0t+DXAgJ4J0utv z3M-kW&mBw4wDz@W*O|1*4>f&y8}8E2NTz?*q-UY;KDhMhZMaKcuf1lnF5H?jADjBL zs$V3qY4vf2PrH*2OHXUVT-r&=w9=*Yv^LD8oveFVwhpV%n@EuO_$K*b67}$PvT0o2 zDapK=M029vkQK zaIop~=zAH}aR7D7;{&+9+fA}LG-!7{gPG=bRUT5_EkJ0PU zhe1A%jdOVz`#z7p4at_r#<@Iy%d;k#N8cx8<74Aoo`z%|eG8B+ zkBxJA8k2c+?>-WwUdZ<{uyHO=OutKJ$F%O58$RI+=pj9_@h;!mq#eFLRFZ$urs@$9m<>vTu znOnj(F(gv0Ey?0 zD?arW+NUp)+N)cdHwWeA)2k{$4T5sGn9hhb2h z!p{r`x@X1dEW0>M+(yD##&mMZr@IE)gQq*i-2i3FcMEaZ^4(3`C>4zA zo#OP3@3Qm={EE~4WtNPcoZ@uncy^~4n@{(I=Vpo1-Cmt7q&tDaPppapPTFIJ=(pexx8voZfpZ$P%Y_64~4wy+glL3OCy(fawq?(|7PdY{-T{B8U#rJ7nlbk+Y7>fc!Z|7{5W zT~N!N#ifyk$G=stG2RgU(B6gLKe+faJ3n~ItA7}G$JK;QT-4NZ*}|5!t--_=bCtvl z_jTrL{&(^CH}5INQ2#TaGa=1CXF=m2&F$LP=pEYe?gk?Oz02|A|Le|zhVB0*=FaV0 zmfnk<*u(RFP`?9R3m#-5kSy!4$aY$?zXdJ3qIHA}wdAZd??i}W8#9M^7IbrKqDZkXujQ#f`yPK1kHs-P*@kF z1707zF8GOqsN>3M*A(vm>J0s_-=*r#?|*CKs`Aw5;r^B`gx3x4M4$WqP9Og??YMUK NROPr9!ExRA{{w9~tSJBh literal 0 HcmV?d00001 diff --git a/SOLVER/nmsRoutesDirectCall/obj/Release/nmsRoutesDirectCall.dll b/SOLVER/nmsRoutesDirectCall/obj/Release/nmsRoutesDirectCall.dll new file mode 100644 index 0000000000000000000000000000000000000000..ea603b426f9cac6b54975dbca90b895d5e437fe2 GIT binary patch literal 20480 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 literal 0 HcmV?d00001 diff --git a/SOLVER/nmsRoutesDirectCall/obj/Release/nmsRoutesDirectCall.pdb b/SOLVER/nmsRoutesDirectCall/obj/Release/nmsRoutesDirectCall.pdb new file mode 100644 index 0000000000000000000000000000000000000000..83e673277fba0776948d2028eca353bafb62b0bd GIT binary patch literal 22016 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 Le}yZN^~|du>UNx4 literal 0 HcmV?d00001 diff --git a/SOLVER/nmsRoutesWebTest/Properties/AssemblyInfo.cs b/SOLVER/nmsRoutesWebTest/Properties/AssemblyInfo.cs new file mode 100644 index 0000000..89f6f55 --- /dev/null +++ b/SOLVER/nmsRoutesWebTest/Properties/AssemblyInfo.cs @@ -0,0 +1,33 @@ +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +[assembly: AssemblyTitle("nmsRoutesWebTest")] +[assembly: AssemblyDescription("Приложение Ð´Ð»Ñ Ð¿Ð¾Ñ‚Ð¾ÐºÐ¾Ð²Ð¾Ð³Ð¾ теÑÑ‚Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ ÑервиÑа поиÑка маршрутов")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("Milok Zbrozek ")] +[assembly: AssemblyProduct("nmsRoutesWebTest")] +[assembly: AssemblyCopyright("Copyright © Milok Zbrozek 2021")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// Setting ComVisible to false makes the types in this assembly not visible +// to COM components. If you need to access a type in this assembly from +// COM, set the ComVisible attribute to true on that type. +[assembly: ComVisible(false)] + +// The following GUID is for the ID of the typelib if this project is exposed to COM +[assembly: Guid("279df45a-dd25-4b61-93bf-1b0b0a2c3ba9")] + +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +[assembly: AssemblyVersion("21.12.21.3")] +[assembly: AssemblyFileVersion("21.12.21.3")] diff --git a/SOLVER/nmsRoutesWebTest/TestProgram.cs b/SOLVER/nmsRoutesWebTest/TestProgram.cs new file mode 100644 index 0000000..3997659 --- /dev/null +++ b/SOLVER/nmsRoutesWebTest/TestProgram.cs @@ -0,0 +1,414 @@ +using System; +using System.Collections.Generic; +using System.IO; +using System.Web; +using System.Net; +using System.Text; +using System.Xml; + +namespace nmsRoutesWebTest +{ + class TestProgram + { + // 0:HTTP(through nmsServices much slower) or + // 1:TCP(faster) + // 2:Remoting + // 3:TCPXML + static byte http_0_tcp_1_remoting_2 = 1; + + static int threadCount = 5; + + // IF TCP + static string ip = "127.0.0.1"; //"192.168.0.18" "127.0.0.1" + static int port = 7755; + + // IF HTTP + // "http://maps.navicom.ru:82/nms/sroute.ashx?k={k}&f=xml&x={x}&y={y}&i=0"; + // "http://maps.navicom.ru/nms/sroute.ashx?k={k}&f=xml&x={x}&y={y}&i=0"; + // "http://192.168.0.18/nms/sroute.ashx?k={k}&f=xml&x={x}&y={y}&i=0"; + // "http://localhost/nms/sroute.ashx?k={k}&f=xml&x={x}&y={y}&i=0"; + static string url = "http://127.0.0.1:8080/nms/sroute.ashx?k={k}&f=xml&x={x}&y={y}&i=0"; + static string key = "TEST"; + + //static double[] lat = new double[] { 56.352, 55.6053 }; // MOSCOW + //static double[] lon = new double[] { 37.530, 37.620 }; + static double[] lat = new double[] { 52.927, 52.488 }; // LIPETSK + static double[] lon = new double[] { 38.93, 39.90 }; + + static bool run = true; + static bool loop = true; + static int thrRun = 0; + + static Random rnd = new Random(); + static System.Threading.Mutex mtx = new System.Threading.Mutex(); + + // nmsRoutesWebTest.exe + static void Main(string[] args) + { + //// GetNearRoad + + ////HTTP + // n - names + //string pu = "http://localhost:8080/nms/snearroad.ashx?k=TEST&n=0&x=39.566334145326486,39.609832763671875,37.39,49.49,37.15,37.38&y=52.61555643344044,52.61555643344044,55.45,57.82,55.47,55.45"; + //HttpWebRequest wr = (HttpWebRequest)HttpWebRequest.Create(pu); + //wr.Timeout = 120 * 1000; + //HttpWebResponse res = (HttpWebResponse)wr.GetResponse(); + //Stream rs = res.GetResponseStream(); + //StreamReader sr = new StreamReader(rs); + //string xml = sr.ReadToEnd(); + //sr.Close(); + //rs.Close(); + //res.Close(); + + //// REMOTING + ////dkxce.Route.ISolver.IRoute ic = dkxce.Route.ISolver.IRouteClient.Connect(ip, port); + ////dkxce.Route.ISolver.RNearRoad[] ir = ic.GetNearRoad(new double[] { 52.61555643344044, 52.61555643344044, 55.45, 57.82, 55.47, 55.45 }, new double[] { 39.566334145326486, 39.609832763671875, 37.39, 49.49, 37.15, 37.38 }, false); + + ////TCP + //dkxce.Route.ISolver.RouteClient rc = new dkxce.Route.ISolver.RouteClient("127.0.0.1", 7755, "NONE"); + //dkxce.Route.ISolver.RNearRoad[] nr = rc.GetNearRoad(new double[] { 52.61555643344044, 52.61555643344044, 55.45, 57.82, 55.47, 55.45 }, new double[] { 39.566334145326486, 39.609832763671875, 37.39, 49.49, 37.15, 37.38 }, false); + //string txt = rc.GetNearRoadXML(new double[] { 52.61555643344044, 52.61555643344044, 55.45, 57.82, 55.47, 55.45 }, new double[] { 39.566334145326486, 39.609832763671875, 37.39, 49.49, 37.15, 37.38 }, false); + + //nmsRoutesDirectCall.nmsRouteClient drc = new nmsRoutesDirectCall.nmsRouteClient(ip, port); + //string drctxt = drc.GetNearRoadXML(key, new double[] { 52.61555643344044, 52.61555643344044, 55.45, 57.82, 55.47, 55.45 }, new double[] { 39.566334145326486, 39.609832763671875, 37.39, 49.49, 37.15, 37.38 }, false); + + //return; + + + //byte[] ba = GetReqStruct("1a2b3c4d", new string[] { "Ëàçåð", "Áîðå", "Õåð", "Îáðåçàë" }, new double[] { 55.45, 55.46, 55.47, 55.48 }, new double[] { 37.39, 37.310, 37.311, 37.312 }, DateTime.Parse("11.11.2011"), 0x01, new int[] { 10, 11, 24 }); + //dkxce.Route.ISolver.RAsk aks = ParseReqStruct(ba); + //return; + + if (args != null) + { + if (args.Length > 0) + key = args[0]; + if (args.Length > 1) + { + if (args[1] == "http") http_0_tcp_1_remoting_2 = 0; + if (args[1] == "tcp") http_0_tcp_1_remoting_2 = 1; + if (args[1] == "remoting") http_0_tcp_1_remoting_2 = 2; + if (args[1] == "tcpxml") http_0_tcp_1_remoting_2 = 3; + }; + if (args.Length > 2) + { + ip = args[2]; + url = args[2]; + }; + if (args.Length > 3) + threadCount = Convert.ToInt32(args[3]); + if (args.Length > 4) + { + if (args[4] == "msk") + { + lat = new double[] { 56.352, 55.6053 }; // MOSCOW + lon = new double[] { 37.530, 37.620 }; + }; + if (args[4] == "lip") + { + lat = new double[] { 52.927, 52.488 }; // LIPETSK + lon = new double[] { 38.93, 39.90 }; + }; + }; + }; + + Console.WriteLine("nmsRoutesWebTest"); + Console.WriteLine("Usage: nmsRoutesWebTest.exe [licenseKey] [http/tcp/tcpxml/remoting] [server:127.0.0.1/http...] [threads:5] [lip/msk]"); + System.Threading.Thread.Sleep(2000); + Console.WriteLine("Key: " + key); + Console.Write("Start with " + threadCount.ToString() + " "); + if (http_0_tcp_1_remoting_2 == 0) Console.Write("HTTP"); + if (http_0_tcp_1_remoting_2 == 1) Console.Write("TCP"); + if (http_0_tcp_1_remoting_2 == 2) Console.Write("Remoting"); + if (http_0_tcp_1_remoting_2 == 3) Console.Write("TCPXML"); + Console.WriteLine(" threads"); + if (http_0_tcp_1_remoting_2 == 0) + Console.WriteLine("Location: " + url); + else + Console.WriteLine("Location: tcp://" + ip + ":" + port.ToString() + "/" + (http_0_tcp_1_remoting_2 == 1 ? "TCP" : "Remoting")); + Console.WriteLine(); + Console.WriteLine("Press ENTER to pause"); + + + // Remove the 2 connection limit in WebClient + System.Net.ServicePointManager.DefaultConnectionLimit = threadCount + 2; + + for (int i = 0; i < threadCount; i++) + { + System.Threading.Thread thr; + if (http_0_tcp_1_remoting_2 == 0) + thr = new System.Threading.Thread(LoopHTTP); + else + thr = new System.Threading.Thread(LoopTCP); + thr.Start(i); + }; + + while (loop) + { + Console.ReadLine(); + run = false; + Console.Write("Do you really want to exit? Yes/No: "); + string ex = Console.ReadLine(); + if (ex.ToLower() == "yes") + loop = false; + else + Console.WriteLine("continue..."); + run = true; + }; + Console.WriteLine("wait, stopping..."); + while(thrRun > 0) + System.Threading.Thread.Sleep(200); + Console.WriteLine("Press Enter to Exit"); + Console.ReadLine(); + } + + // TCP Thread + public static void LoopTCP(object threadID) + { + System.Threading.Thread.CurrentThread.Priority = System.Threading.ThreadPriority.Highest; + thrRun++; + Console.WriteLine("TCP Thread " + threadID.ToString() + " started"); + while (loop) + { + DateTime beg = DateTime.Now; + try + { + dkxce.Route.ISolver.RStop[] rs = new dkxce.Route.ISolver.RStop[2]; + rs[0] = new dkxce.Route.ISolver.RStop("START", GetYY(), GetXX()); + rs[1] = new dkxce.Route.ISolver.RStop("FINISH", GetYY(), GetXX()); + dkxce.Route.ISolver.RResult rr = new dkxce.Route.ISolver.RResult(rs); + dkxce.Route.ISolver.RNearRoad[] nr = new dkxce.Route.ISolver.RNearRoad[0]; + + if (http_0_tcp_1_remoting_2 == 1) // tcp + { + dkxce.Route.ISolver.RouteClient rc = new dkxce.Route.ISolver.RouteClient(ip, port, key); + rr = rc.GetRoute(rs, beg, 0x01, null); + // string xml = rc.GetRouteXML(rs, beg, 0x01, null); + // xml += ""; + } + if (http_0_tcp_1_remoting_2 == 2) // remoting + { + dkxce.Route.ISolver.IRoute rc = dkxce.Route.ISolver.IRouteClient.Connect(ip, port); + rr = rc.GetRoute(rs, beg, 0x01, null); + }; + if (http_0_tcp_1_remoting_2 == 3) // tcpxml + { + nmsRoutesDirectCall.nmsRouteClient rc = new nmsRoutesDirectCall.nmsRouteClient(ip, port); + string xml = rc.GetRouteXML(key, new string[] { "START", "FINISH" }, new double[] { GetYY(), GetYY() }, new double[] { GetXX(), GetXX() }, beg, 0x01); + rr = new dkxce.Route.ISolver.RResult(rs); + XmlDocument xd = new XmlDocument(); + xd.LoadXml(xml); + XmlNode xn = xd.SelectSingleNode("Route/driveLength"); + try { rr.driveLength = Convert.ToDouble(xn.InnerText); } catch { }; + try { rr.driveLength = Convert.ToDouble(xn.InnerText.Replace(".",",")); } catch { }; + rr.LastError = xd.SelectSingleNode("Route/LastError").InnerText; + }; + + + TimeSpan ts = DateTime.Now.Subtract(beg); + + while (!run) + System.Threading.Thread.Sleep(1); + if (http_0_tcp_1_remoting_2 == 1) Console.Write("TCP"); + if (http_0_tcp_1_remoting_2 == 2) Console.Write("Rem"); + if (http_0_tcp_1_remoting_2 == 3) Console.Write("TCPXML"); + if (http_0_tcp_1_remoting_2 == 11) Console.Write("TCP R"); + if (http_0_tcp_1_remoting_2 == 12) Console.Write("Rem R"); + if (http_0_tcp_1_remoting_2 == 13) Console.Write("TCPXML R"); + if(http_0_tcp_1_remoting_2 < 10) + Console.WriteLine(" Thread " + threadID.ToString() + " (" + ts.TotalSeconds.ToString() + "s) Length: " + rr.driveLength.ToString() + "m" + " " + (rr.driveLength == 0 ? rr.LastError : "")); + else + Console.WriteLine(" Thread " + threadID.ToString() + " (" + ts.TotalSeconds.ToString() + "s) " + nr[0].lat.ToString()+" " + nr[0].lon.ToString()); + + if (rr.LastError != String.Empty) + { + mtx.WaitOne(); + FileStream fs = new FileStream(GetCurrentDir() + @"\calcerr.txt", FileMode.OpenOrCreate); + fs.Position = fs.Length; + byte[] txt = System.Text.Encoding.GetEncoding(1251).GetBytes(DateTime.Now.ToString("yyyyMMdd HHmmss fff")+" "+rr.LastError + "\r\n"); + fs.Write(txt, 0, txt.Length); + fs.Close(); + mtx.ReleaseMutex(); + }; + } + catch (Exception ex) + { + TimeSpan ts = DateTime.Now.Subtract(beg); + Console.Write(DateTime.Now.ToString("yyyyMMdd HHmmss fff")+" "); + while (!run) + System.Threading.Thread.Sleep(1); + if (http_0_tcp_1_remoting_2 == 1) Console.Write("TCP"); + if (http_0_tcp_1_remoting_2 == 2) Console.Write("Rem"); + if (http_0_tcp_1_remoting_2 == 3) Console.Write("TCPXML"); + Console.WriteLine(" Thread " + threadID.ToString() + " (" + ts.TotalSeconds.ToString() + "s) ERROR: " + ex.ToString()); + mtx.WaitOne(); + FileStream fs = new FileStream(GetCurrentDir() + @"\errlog.txt", FileMode.OpenOrCreate); + fs.Position = fs.Length; + byte[] txt = System.Text.Encoding.GetEncoding(1251).GetBytes(ex.ToString() + "\r\n"); + fs.Write(txt, 0, txt.Length); + fs.Close(); + mtx.ReleaseMutex(); + }; + + System.Threading.Thread.Sleep(1); + }; + Console.WriteLine("TCP Thread " + threadID.ToString() + " stopped"); + thrRun--; + } + + // HTTP Thread + public static void LoopHTTP(object threadID) + { + System.Threading.Thread.CurrentThread.Priority = System.Threading.ThreadPriority.Highest; + thrRun++; + Console.WriteLine("HTTP Thread "+threadID.ToString()+" started"); + while (loop) + { + string query = url.Replace("{k}", key).Replace("{x}", GetX()).Replace("{y}", GetY()); + DateTime beg = DateTime.Now; + try + { + HttpWebRequest wr = (HttpWebRequest)HttpWebRequest.Create(query); + wr.Timeout = 120 * 1000; + HttpWebResponse res = (HttpWebResponse)wr.GetResponse(); + Stream rs = res.GetResponseStream(); + StreamReader sr = new StreamReader(rs); + string xml = sr.ReadToEnd(); + sr.Close(); + rs.Close(); + res.Close(); + TimeSpan ts = DateTime.Now.Subtract(beg); + XmlDocument xd = new XmlDocument(); + try + { + xd.LoadXml(xml); + string innerText = ""; + if (xml.IndexOf("Route") > 0) + innerText = xd.SelectSingleNode("Route/driveLength").InnerText; + else if (xml.IndexOf("ArrayOfNearRoad") > 0) + innerText = xd.SelectSingleNode("ArrayOfNearRoad/NearRoad/distance").InnerText; + else if (xml.IndexOf("SearchRecs") > 0) + innerText = xd.SelectSingleNode("SearchRecs/total").InnerText; + while (!run) + System.Threading.Thread.Sleep(1); + if (innerText != "") + Console.WriteLine("HTTP Thread " + threadID.ToString() + " " + res.StatusCode.ToString() + " (" + ts.TotalSeconds.ToString() + "s) Length: " + innerText + "m"); + else + Console.WriteLine("HTTP Thread " + threadID.ToString() + " " + res.StatusCode.ToString() + " (" + ts.TotalSeconds.ToString() + "s): " + (xml.IndexOf("\r\n") > 0 ? xml.Substring(0, xml.IndexOf("\r\n")) : xml.Length.ToString())); + } + catch + { + while (!run) + System.Threading.Thread.Sleep(1); + Console.WriteLine("HTTP Thread " + threadID.ToString() + " " + res.StatusCode.ToString() + " (" + ts.TotalSeconds.ToString() + "s) Parse XML Error : " + (xml.IndexOf("\r\n") > 0 ? xml.Substring(0, xml.IndexOf("\r\n")) : xml.Length.ToString())); + }; + } + catch (Exception ex) + { + TimeSpan ts = DateTime.Now.Subtract(beg); + Console.Write(DateTime.Now.ToString("yyyyMMdd HHmmss fff") + " "); + while (!run) + System.Threading.Thread.Sleep(1); + Console.WriteLine("HTTP Thread " + threadID.ToString() + " (" + ts.TotalSeconds.ToString() + "s) ERROR: " + ex.ToString()); + mtx.WaitOne(); + FileStream fs = new FileStream(GetCurrentDir()+@"\errlog.txt",FileMode.OpenOrCreate); + fs.Position = fs.Length; + byte[] txt = System.Text.Encoding.GetEncoding(1251).GetBytes(query.Replace("maps.navicom.ru:82","localhost") + "\r\n"); + fs.Write(txt, 0, txt.Length); + fs.Close(); + mtx.ReleaseMutex(); + }; + + System.Threading.Thread.Sleep(1); + }; + Console.WriteLine("HTTP Thread " + threadID.ToString() + " stopped"); + thrRun--; + } + + static string GetX() + { + return GetXX().ToString("0.00000").Replace(",", ".") + "," + GetXX().ToString("0.00000").Replace(",", "."); + } + static string GetY() + { + return GetYY().ToString("0.00000").Replace(",", ".") + "," + GetYY().ToString("0.00000").Replace(",", "."); + } + + static double GetXX() + { + double d = (lon[0] + (50000 - (double)rnd.Next(10000, 99999)) / 1000000.0); + return d; + } + static double GetYY() + { + double d = (lat[0] + (50000 - (double)rnd.Next(10000, 99999)) / 1000000.0); + return d; + } + + public static string GetCurrentDir() + { + string fname = System.Reflection.Assembly.GetExecutingAssembly().GetName().CodeBase.ToString(); + fname = fname.Replace("file:///", ""); + fname = fname.Replace("/", @"\"); + fname = fname.Substring(0, fname.LastIndexOf(@"\") + 1); + return fname; + } + + private static byte[] GetReqStruct(string licenseKey, string[] stopNames, double[] latt, double[] lonn, DateTime startTime, long flags, int[] regions) + { + if ((stopNames == null) || (latt == null) || (lonn == null)) return null; + if ((stopNames.Length != latt.Length) || (stopNames.Length != lonn.Length)) return null; + if ((stopNames.Length < 2) || ((stopNames.Length > 100))) return null; + + List ba = new List(); + ba.Add((byte)licenseKey.Length); + ba.AddRange(System.Text.Encoding.GetEncoding(1251).GetBytes(licenseKey)); + ba.Add((byte)stopNames.Length); + for (int i = 0; i < stopNames.Length; i++) + { + ba.Add((byte)stopNames[i].Length); + ba.AddRange(System.Text.Encoding.GetEncoding(1251).GetBytes(stopNames[i])); + ba.AddRange(BitConverter.GetBytes(latt[i])); + ba.AddRange(BitConverter.GetBytes(lonn[i])); + }; + ba.AddRange(BitConverter.GetBytes(startTime.ToOADate())); + ba.AddRange(BitConverter.GetBytes(flags)); + if (regions.Length == 0) + ba.Add(0); + else + { + ba.Add((byte)regions.Length); + for(int i=0;i + + Debug + AnyCPU + 8.0.50727 + 2.0 + {4D4CA899-99B6-48BE-B2F9-CB6D7B183C9D} + Exe + Properties + nmsRoutesWebTest + nmsRoutesWebTest + testC.ico + + + true + full + false + ..\..\READY\TEST\ + DEBUG;TRACE + prompt + 4 + + + pdbonly + true + ..\..\READY\TEST\ + TRACE + prompt + 4 + + + + False + ..\..\READY\MAIN_DLLs\dkxce.Route.Classes.dll + + + False + ..\..\READY\MAIN_DLLs\dkxce.Route.ISolver.dll + + + False + ..\..\READY\MAIN_DLLs\nmsRoutesDirectCall.dll + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/SOLVER/nmsRoutesWebTest/nmsRoutesWebTest.csproj.user b/SOLVER/nmsRoutesWebTest/nmsRoutesWebTest.csproj.user new file mode 100644 index 0000000..c8ee30b --- /dev/null +++ b/SOLVER/nmsRoutesWebTest/nmsRoutesWebTest.csproj.user @@ -0,0 +1,5 @@ + + + nmsRoutesWebTest.exe 87A930E02E584DEAB087239008C5D943 "http://192.168.0.18/nms/snearroad.ashx?k={k}&f=xml&x={x}&y={y}&n=0" 8 msk + + \ No newline at end of file diff --git a/SOLVER/nmsRoutesWebTest/obj/Debug/ResolveAssemblyReference.cache b/SOLVER/nmsRoutesWebTest/obj/Debug/ResolveAssemblyReference.cache new file mode 100644 index 0000000000000000000000000000000000000000..6fab608ad3247528d7ff3d4fd623c3f0d7919fbb GIT binary patch literal 10808 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 literal 0 HcmV?d00001 diff --git a/SOLVER/nmsRoutesWebTest/obj/Release/nmsRoutesWebTest.pdb b/SOLVER/nmsRoutesWebTest/obj/Release/nmsRoutesWebTest.pdb new file mode 100644 index 0000000000000000000000000000000000000000..b7707dc9c065477221bbcda52961e1829784a99d GIT binary patch literal 22016 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 lHxh~G@3cOClD0-8Z-j>%c%~Q+cpJvEhGE3V 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 literal 0 HcmV?d00001

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 J0TY-Xfp@F7f^q-= literal 0 HcmV?d00001 diff --git a/SOLVER/dkxce.Route.GSolver/obj/Debug/dkxce.Route.GSolver.pdb b/SOLVER/dkxce.Route.GSolver/obj/Debug/dkxce.Route.GSolver.pdb new file mode 100644 index 0000000000000000000000000000000000000000..fc1ab5e8958b4a1cbcfa8a35dce5be56cbb433cd GIT binary patch literal 108032 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 literal 0 HcmV?d00001 diff --git a/SOLVER/dkxce.Route.GSolver/obj/Release/dkxce.Route.GSolver.dll b/SOLVER/dkxce.Route.GSolver/obj/Release/dkxce.Route.GSolver.dll new file mode 100644 index 0000000000000000000000000000000000000000..1dab21cff7b2eb15ad749f6e5b6d1b9d098d60f8 GIT binary patch literal 61440 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")] +[assembly: AssemblyProduct("dkxce.Route.ISolver")] +[assembly: AssemblyCopyright("Copyright © Milok Zbrozek 2021")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// Setting ComVisible to false makes the types in this assembly not visible +// to COM components. If you need to access a type in this assembly from +// COM, set the ComVisible attribute to true on that type. +[assembly: ComVisible(false)] +[assembly: Guid("787a17b8-d7e1-4f70-aeb5-1f08f3bbfe8a")] + +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +// You can specify all the values or you can default the Revision and Build Numbers +// by using the '*' as shown below: +[assembly: AssemblyVersion("21.12.21.3")] +[assembly: AssemblyFileVersion("21.12.21.3")] diff --git a/SOLVER/dkxce.Route.ISolver/Route.ISolver.cs b/SOLVER/dkxce.Route.ISolver/Route.ISolver.cs new file mode 100644 index 0000000..2f2011d --- /dev/null +++ b/SOLVER/dkxce.Route.ISolver/Route.ISolver.cs @@ -0,0 +1,760 @@ +/* + * C# Class by Milok Zbrozek + * Author: Milok Zbrozek + */ + + +using System; +using System.Collections.Generic; +using System.Text; +using System.Xml; +using System.Xml.Serialization; +using System.Runtime.Serialization.Formatters; +using System.Runtime.Serialization.Formatters.Binary; +using System.Runtime.InteropServices; + +using dkxce.Route.Classes; +using dkxce.Route.WayList; + +namespace dkxce.Route.ISolver +{ + ///

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 z zjpDCG(TsaF0oA z7u`H#03XFJF5XEKaF3wl-oYwR%^|wadUwdjC z8{-_kq3Y}KTe!dJrW+ewkOpmZ&X`?P;m+?hjq(3cZ77~f`xj*HYy4Nng=epwP1ZAA z+gkNbd+4^DQ0*dfIO6k1499k0f#*3e^L?FNsyQEQ_S|F7w*N%0q0;C1-O779JyY+e z#Q#pacFUNr_E?i!|B;8+yF5P?zut6e-yPL8?YX4dSL;l$czMpN)YvCea;Lp`=mkAy z`;s+Yy7cD7X$70q*B)=%=b?XbaOCT3dub2epRDw0(Y5Qf^AUFh&*}C(ZM|>&=$xau z-CFlozxq|15A=bTzifEU4ep&Wp|4C14o>8Y^*iC+r&Ie=-;u1JPDkTwx;{=X_xsuR z=(X*P>D0D0scYb{Lwu7B;d7iDDn}0hA8ZU*Be?t9{YJv}nt%C=U$*mY&WR=uGOlSu z15(#7$G3jGPxdy*RrPWFzI%V(yw^~lK5@u79=s+noo;c{KI`9Q#(;gs^K;khemRGP z4=^t@eTLXCqay-TZ4FTLvA5ofPUCPbu>GSS zTljy@x~$jQ%scI~?s-W3=i(2D-)3#*Kb`XmEdDh9ocOjE{P?T`jc>TGGl|wqhb}y{ z%>iVn;>JIHI=6ea?#m$%Ty7Qr3wZBnd)xP=n`R%-*#-7y@ra#1v-xz3n@UrVCCVsL!!ZP4qZxr6AL4OpU z--5m`npl7CpbHMe6YEv53lHP^-{LP13NPseC)U5?aB8{SCH@NG4F-dy%fC)cjEC<% z_C4WS`|%TQ?XGuoZW~_V*7&)B&-{v<=e&d$^}-4E8`!|NWcl}0e}x95x+_#L)mfo} zbA)>Z&K(QS8w?mQH1gE#2ut>qc?Fz<%Nb|bB5{Xmoj;W z&-v@mA13Jf%ftpt`r&008+0ukeqT0mZ!~A_1nL;KY+}w}Nhs%h)UyjOdxT-UJna4a ziD83pO?+V`&F6$av z;lX%#{@l^0_G8Id`1*M(eqZs1$`!w@DwH{J;yx4ixzBy_yvM}G=^B49ao_t6LqAVw z{fP}X>_X8$y~o5>TMa|I{NcpJJ(EuQdrj;Tn>Bx!bi>e@`L;pQ4MT_DYa%hW+Nujh z>-UekbQ@0WlJ)H$cj-2qc+VeAO#DfgZo`SgllPx?=@NRt#KfOXY`?u+Hk{Zv_89(r z;z>^$hTik+iHUnpyy!*4(BTJ6q($@RcQNm^-o#%_+zGej4^sNX#D?45iL|pxW+5;O lfmsO5LSPmGvk;htz$^r2AutPpSqRKRU={+i5SSJa`2UM*XnOzv literal 0 HcmV?d00001 diff --git a/SOLVER/RoutesKeyGen/obj/Debug/RoutesKeyGen.pdb b/SOLVER/RoutesKeyGen/obj/Debug/RoutesKeyGen.pdb new file mode 100644 index 0000000000000000000000000000000000000000..21138696256bba87ed48591afcb5d2840d9282f4 GIT binary patch literal 26112 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 b&zUv+R6mxCdA@n}vfr0Ip>o-8D|-6>tbHKi literal 0 HcmV?d00001 diff --git a/SOLVER/SSKeySys/Program.cs b/SOLVER/SSKeySys/Program.cs new file mode 100644 index 0000000..2b61461 --- /dev/null +++ b/SOLVER/SSKeySys/Program.cs @@ -0,0 +1,125 @@ +using System; +using System.IO; +using System.Collections.Generic; +using System.Text; +using System.Xml; +using System.Management; + + +namespace SSKeySys +{ + class Program + { + static void Main(string[] args) + { + string preQ = ""; + + string[] infos = new string[] { "Win32_OperatingSystem", "Win32_ComputerSystem", "Win32_Processor", /*"Win32_LogicalMemoryConfiguration",*/ "Win32_PhysicalMemory", "Win32_DiskPartition" }; + foreach (string info in infos) + { + ManagementObjectSearcher searcher = new ManagementObjectSearcher("select * from " + info); + try + { + foreach (ManagementObject share in searcher.Get()) + { + try + { + string q = String.Format("{0}: {1}", share["Name"].ToString(), share["Name"].ToString()); + Console.WriteLine(q); + preQ += q + "\r\n"; + } + catch + { + string q =String.Format("{0}: {1}", share.ToString(), share.ToString()); + Console.WriteLine(q); + preQ += q + "\r\n"; + }; + + if (share.Properties.Count <= 0) + continue; + + foreach (PropertyData PC in share.Properties) + if (PC.Value != null && PC.Value.ToString() != "") + { + // indexof size // + string k = PC.Name.ToString(); + string v = PC.Value.ToString(); + if ((k.ToLower().IndexOf("size") >= 0) || (k.ToLower().IndexOf("capacity") >= 0) || (k.ToLower().IndexOf("totalphysicalmemory") >= 0)) + { + double big = 0; + if (double.TryParse(v, out big)) + { + v = ToFileSize(big); + }; + }; + string q = String.Format("\t{0}: {1}", k, v); + Console.WriteLine(q); + preQ += q + "\r\n"; + }; + } + } + catch { }; + preQ += "\r\n"; + }; + + /* SSKEYSYS.exe */ + string cwrl = ""; + cwrl += ("APPVIID:\r\n"); + cwrl += ("\t" + (SYSID._IsVirtual ? "V" : "P") + System.Environment.ProcessorCount.ToString() + "\r\n"); + cwrl += ("SYSTID:\r\n"); + cwrl += ("\t" + SYSID.GetSystemID(true, true, false, true, false) + "\r\n"); + cwrl += ("DISKCID:\r\n"); + try + { + cwrl += ("\t" + SYSID._CurrentDiskID + "\r\n"); + } + catch { }; + Console.Write(cwrl); + System.IO.FileStream fs = new FileStream(AppDomain.CurrentDomain.BaseDirectory + @"SSKeySys.log", FileMode.Create, FileAccess.Write); + System.IO.StreamWriter sw = new StreamWriter(fs); + sw.Write(preQ); + sw.Write(cwrl); + sw.Close(); + fs.Close(); + System.Threading.Thread.Sleep(60000); + + } + + public static string ToFileSize(double value) + { + string[] suffixes = { "bytes", "KB", "MB", "GB", "TB", "PB", "EB", "ZB", "YB" }; + for (int i = 0; i < suffixes.Length; i++) + { + if (value <= (Math.Pow(1024, i + 1))) + { + return ThreeNonZeroDigits(value / + Math.Pow(1024, i)) + + " " + suffixes[i]; + } + } + + return ThreeNonZeroDigits(value / + Math.Pow(1024, suffixes.Length - 1)) + + " " + suffixes[suffixes.Length - 1]; + } + + private static string ThreeNonZeroDigits(double value) + { + if (value >= 100) + { + // No digits after the decimal. + return value.ToString("0.0", System.Globalization.CultureInfo.InvariantCulture); + } + else if (value >= 10) + { + // One digit after the decimal. + return value.ToString("0.0", System.Globalization.CultureInfo.InvariantCulture); + } + else + { + // Two digits after the decimal. + return value.ToString("0.00", System.Globalization.CultureInfo.InvariantCulture); + } + } + } +} diff --git a/SOLVER/SSKeySys/Properties/AssemblyInfo.cs b/SOLVER/SSKeySys/Properties/AssemblyInfo.cs new file mode 100644 index 0000000..95fe5b5 --- /dev/null +++ b/SOLVER/SSKeySys/Properties/AssemblyInfo.cs @@ -0,0 +1,33 @@ +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +[assembly: AssemblyTitle("SSKeySys")] +[assembly: AssemblyDescription("Получение данных о ÑиÑтеме")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("Milok Zbrozek ")] +[assembly: AssemblyProduct("SSKeySys")] +[assembly: AssemblyCopyright("Copyright © Milok Zbrozek 2021")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// Setting ComVisible to false makes the types in this assembly not visible +// to COM components. If you need to access a type in this assembly from +// COM, set the ComVisible attribute to true on that type. +[assembly: ComVisible(false)] + +// The following GUID is for the ID of the typelib if this project is exposed to COM +[assembly: Guid("a42fedba-fc37-4315-b817-ded6d7a49fe1")] + +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +[assembly: AssemblyVersion("21.12.21.2")] +[assembly: AssemblyFileVersion("21.12.21.2")] diff --git a/SOLVER/SSKeySys/SSKeySys.csproj b/SOLVER/SSKeySys/SSKeySys.csproj new file mode 100644 index 0000000..a83d0ee --- /dev/null +++ b/SOLVER/SSKeySys/SSKeySys.csproj @@ -0,0 +1,53 @@ + + + Debug + AnyCPU + 8.0.50727 + 2.0 + {271AC25C-80D4-4F12-98B8-D19B81DFA251} + Exe + Properties + SSKeySys + SSKeySys + protA.ico + + + true + full + false + ..\..\READY\TOOLS\ + TRACE;DEBUG + prompt + 4 + + + true + ..\..\READY\TOOLS\ + TRACE;DEBUG + full + AnyCPU + prompt + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/SOLVER/SSKeySys/SYSID.cs b/SOLVER/SSKeySys/SYSID.cs new file mode 100644 index 0000000..4b9803b --- /dev/null +++ b/SOLVER/SSKeySys/SYSID.cs @@ -0,0 +1,327 @@ +using System; +using System.Collections.Generic; +using System.Text; +using System.IO; + +using System.Management; +using System.Security.Cryptography; +using System.Security; + +namespace System +{ + internal static class SYSID + { + private static byte[] _salt = Encoding.ASCII.GetBytes("a25052017pxko7"); + + public static string _BIOSID + { + get + { + ManagementObjectSearcher mos = new ManagementObjectSearcher("SELECT * FROM Win32_BIOS"); + ManagementObjectCollection moc = mos.Get(); + string motherBoard = ""; + foreach (ManagementObject mo in moc) + motherBoard = (string)mo["SerialNumber"]; + return motherBoard; + } + } + + public static string _MotherBoardID + { + get + { + ManagementObjectSearcher mos = new ManagementObjectSearcher("SELECT * FROM Win32_BaseBoard"); + ManagementObjectCollection moc = mos.Get(); + string motherBoard = ""; + foreach (ManagementObject mo in moc) + motherBoard = (string)mo["SerialNumber"]; + return motherBoard; + } + } + + public static string _ProcessorID + { + get + { + ManagementObjectSearcher mos = new ManagementObjectSearcher("SELECT * FROM Win32_processor"); + ManagementObjectCollection moc = mos.Get(); + string motherBoard = ""; + foreach (ManagementObject mo in moc) + motherBoard = (string)mo["ProcessorID"]; + return motherBoard; + } + } + + public static string _DiskCID + { + get + { + ManagementObject dsk = new ManagementObject("win32_logicaldisk.deviceid=\"C:\""); + dsk.Get(); + return dsk["VolumeSerialNumber"].ToString(); + } + } + + public static string _CurrentDiskID + { + get + { + ManagementObject dsk = new ManagementObject("win32_logicaldisk.deviceid=\"" + AppDomain.CurrentDomain.BaseDirectory.Substring(0, 1) + ":\""); + dsk.Get(); + return dsk["VolumeSerialNumber"].ToString(); + } + } + + public static bool _IsVirtual + { + get + { + { + ManagementObjectSearcher mos = new ManagementObjectSearcher("SELECT * FROM Win32_processor"); + ManagementObjectCollection moc = mos.Get(); + string val = ""; + foreach (ManagementObject mo in moc) + val = (string)mo["Manufacturer"]; + if (val.Contains("VBoxVBoxVBox")) return true; + if (val.Contains("VMwareVMware")) return true; + if (val.Contains("prl hyperv")) return true; + }; + { + ManagementObjectSearcher mos = new ManagementObjectSearcher("SELECT * FROM Win32_BaseBoard"); + ManagementObjectCollection moc = mos.Get(); + string val = ""; + foreach (ManagementObject mo in moc) + val = (string)mo["Manufacturer"]; + if (val.Contains("Microsoft Corporation")) return true; + }; + { + ManagementObjectSearcher mos = new ManagementObjectSearcher("SELECT * FROM Win32_DiskDrive"); + ManagementObjectCollection moc = mos.Get(); + string val = ""; + foreach (ManagementObject mo in moc) + val = (string)mo["PNPDeviceID"]; + if (val.Contains("VBOX_HARDDISK")) return true; + if (val.Contains("VEN_VMWARE")) return true; + }; + return false; + } + } + + public static string GetSysID() { return SYSID.GetSystemID(true, true, false, true, false); } + + public static string GetSystemID(bool BIOS, bool MotherBoard, bool CPU, bool DiskC, bool CurrDisk) + { + string code = ""; + try + { + if (BIOS) code += "/" + _BIOSID; + } + catch { }; + try + { + if (MotherBoard) code += "/" + _MotherBoardID; + } + catch { }; + try + { + if (CPU) code += "/" + _ProcessorID; + } + catch { }; + try + { + if (DiskC) code += "/" + _DiskCID; + } + catch { }; + try + { + if (CurrDisk) code += "/" + _CurrentDiskID; + } + catch { }; + + int codeType = (BIOS ? 1 : 0) + (MotherBoard ? 2 : 0) + (CPU ? 4 : 0) + (DiskC ? 8 : 0) + (CurrDisk ? 0x10 : 0); + + //return codeType.ToString("X2") + "-" + + + return GetHash(code); + } + + private static string GetHash(string s) + { + MD5 sec = new MD5CryptoServiceProvider(); + ASCIIEncoding enc = new ASCIIEncoding(); + byte[] bt = enc.GetBytes(s); + return GetHexString(sec.ComputeHash(bt)); + } + + private static string GetHexString(byte[] bt) + { + string s = string.Empty; + for (int i = 0; i < bt.Length; i++) + { + byte b = bt[i]; + int n, n1, n2; + n = (int)b; + n1 = n & 15; + n2 = (n >> 4) & 15; + if (n2 > 9) + s += ((char)(n2 - 10 + (int)'A')).ToString(); + else + s += n2.ToString(); + if (n1 > 9) + s += ((char)(n1 - 10 + (int)'A')).ToString(); + else + s += n1.ToString(); + if ((i + 1) != bt.Length && (i + 1) % 2 == 0) s += "-"; + } + return s; + } + + public static string Encrypt(string plainText, string sharedSecret) + { + if (string.IsNullOrEmpty(plainText)) + throw new ArgumentNullException("plainText"); + if (string.IsNullOrEmpty(sharedSecret)) + throw new ArgumentNullException("sharedSecret"); + + string outStr = null; // Encrypted string to return + RijndaelManaged aesAlg = null; // RijndaelManaged object used to encrypt the data. + + try + { + // generate the key from the shared secret and the salt + Rfc2898DeriveBytes key = new Rfc2898DeriveBytes(sharedSecret, _salt); + + // Create a RijndaelManaged object + aesAlg = new RijndaelManaged(); + aesAlg.Key = key.GetBytes(aesAlg.KeySize / 8); + + // Create a decrytor to perform the stream transform. + ICryptoTransform encryptor = aesAlg.CreateEncryptor(aesAlg.Key, aesAlg.IV); + + // Create the streams used for encryption. + using (MemoryStream msEncrypt = new MemoryStream()) + { + // prepend the IV + msEncrypt.Write(BitConverter.GetBytes(aesAlg.IV.Length), 0, sizeof(int)); + msEncrypt.Write(aesAlg.IV, 0, aesAlg.IV.Length); + using (CryptoStream csEncrypt = new CryptoStream(msEncrypt, encryptor, CryptoStreamMode.Write)) + { + using (StreamWriter swEncrypt = new StreamWriter(csEncrypt)) + { + //Write all data to the stream. + swEncrypt.Write(plainText); + } + } + outStr = Convert.ToBase64String(msEncrypt.ToArray()); + } + } + finally + { + // Clear the RijndaelManaged object. + if (aesAlg != null) + aesAlg.Clear(); + } + + // Return the encrypted bytes from the memory stream. + return outStr; + } + + public static string Decrypt(string cipherText, string sharedSecret) + { + if (string.IsNullOrEmpty(cipherText)) + throw new ArgumentNullException("cipherText"); + if (string.IsNullOrEmpty(sharedSecret)) + throw new ArgumentNullException("sharedSecret"); + + // Declare the RijndaelManaged object + // used to decrypt the data. + RijndaelManaged aesAlg = null; + + // Declare the string used to hold + // the decrypted text. + string plaintext = null; + + try + { + // generate the key from the shared secret and the salt + Rfc2898DeriveBytes key = new Rfc2898DeriveBytes(sharedSecret, _salt); + + // Create the streams used for decryption. + byte[] bytes = Convert.FromBase64String(cipherText); + using (MemoryStream msDecrypt = new MemoryStream(bytes)) + { + // Create a RijndaelManaged object + // with the specified key and IV. + aesAlg = new RijndaelManaged(); + aesAlg.Key = key.GetBytes(aesAlg.KeySize / 8); + // Get the initialization vector from the encrypted stream + aesAlg.IV = ReadByteArray(msDecrypt); + // Create a decrytor to perform the stream transform. + ICryptoTransform decryptor = aesAlg.CreateDecryptor(aesAlg.Key, aesAlg.IV); + using (CryptoStream csDecrypt = new CryptoStream(msDecrypt, decryptor, CryptoStreamMode.Read)) + { + using (StreamReader srDecrypt = new StreamReader(csDecrypt)) + + // Read the decrypted bytes from the decrypting stream + // and place them in a string. + plaintext = srDecrypt.ReadToEnd(); + } + } + } + catch + { + plaintext = "DECRYPT_ERROR"; + } + finally + { + // Clear the RijndaelManaged object. + if (aesAlg != null) + aesAlg.Clear(); + } + + return plaintext; + } + + private static byte[] ReadByteArray(System.IO.Stream s) + { + byte[] rawLength = new byte[sizeof(int)]; + if (s.Read(rawLength, 0, rawLength.Length) != rawLength.Length) + { + throw new SystemException("Stream did not contain properly formatted byte array"); + } + + byte[] buffer = new byte[BitConverter.ToInt32(rawLength, 0)]; + if (s.Read(buffer, 0, buffer.Length) != buffer.Length) + { + throw new SystemException("Did not read byte array properly"); + } + + return buffer; + } + + //public static void SaveFileDate(string filename, string cryptData) + //{ + // cryptData += '\0'; + // byte[] toSave = System.Text.Encoding.ASCII.GetBytes(cryptData); + // FileStream fs = new FileStream(filename, FileMode.Create, FileAccess.Write); + // fs.Write(filedata, 0, filedata.Length); + // fs.Position = 0x0200; + // fs.Write(toSave, 0, toSave.Length); + // fs.Close(); + //} + + //public static string LoadFileDate(string filename) + //{ + // FileStream fs = new FileStream(filename, FileMode.Open, FileAccess.Read); + // byte[] rb = new byte[1024]; + // int rt = 0; + // int rc = 0; + // fs.Position = 0x0200; + // while ((rc = fs.ReadByte()) > 0) rb[rt++] = (byte)rc; + // fs.Close(); + // return System.Text.Encoding.ASCII.GetString(rb, 0, rt); + //} + + //internal static byte[] filedata = new byte[] { 77, 90, 144, 0, 3, 0, 0, 0, 4, 0, 0, 0, 255, 255, 0, 0, 184, 0, 0, 0, 0, 0, 0, 0, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 0, 0, 0, 14, 31, 186, 14, 0, 180, 9, 205, 33, 184, 1, 76, 205, 33, 84, 104, 105, 115, 32, 112, 114, 111, 103, 114, 97, 109, 32, 99, 97, 110, 110, 111, 116, 32, 98, 101, 32, 114, 117, 110, 32, 105, 110, 32, 68, 79, 83, 32, 109, 111, 100, 101, 46, 13, 13, 10, 36, 0, 0, 0, 0, 0, 0, 0, 80, 69, 0, 0, 76, 1, 3, 0, 124, 13, 39, 89, 0, 0, 0, 0, 0, 0, 0, 0, 224, 0, 2, 33, 11, 1, 8, 0, 0, 16, 0, 0, 0, 32, 0, 0, 0, 0, 0, 0, 110, 35, 0, 0, 0, 32, 0, 0, 0, 64, 0, 0, 0, 0, 64, 0, 0, 32, 0, 0, 0, 16, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 128, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 3, 0, 64, 133, 0, 0, 16, 0, 0, 16, 0, 0, 0, 0, 16, 0, 0, 16, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 20, 35, 0, 0, 87, 0, 0, 0, 0, 64, 0, 0, 160, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 96, 0, 0, 12, 0, 0, 0, 148, 34, 0, 0, 28, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 32, 0, 0, 72, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 46, 116, 101, 120, 116, 0, 0, 0, 116, 3, 0, 0, 0, 32, 0, 0, 0, 16, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 0, 0, 96, 46, 114, 115, 114, 99, 0, 0, 0, 160, 2, 0, 0, 0, 64, 0, 0, 0, 16, 0, 0, 0, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 0, 0, 64, 46, 114, 101, 108, 111, 99, 0, 0, 12, 0, 0, 0, 0, 96, 0, 0, 0, 16, 0, 0, 0, 48, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 0, 0, 66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 80, 35, 0, 0, 0, 0, 0, 0, 72, 0, 0, 0, 2, 0, 5, 0, 80, 32, 0, 0, 68, 2, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66, 83, 74, 66, 1, 0, 1, 0, 0, 0, 0, 0, 12, 0, 0, 0, 118, 50, 46, 48, 46, 53, 48, 55, 50, 55, 0, 0, 0, 0, 5, 0, 108, 0, 0, 0, 180, 0, 0, 0, 35, 126, 0, 0, 32, 1, 0, 0, 192, 0, 0, 0, 35, 83, 116, 114, 105, 110, 103, 115, 0, 0, 0, 0, 224, 1, 0, 0, 8, 0, 0, 0, 35, 85, 83, 0, 232, 1, 0, 0, 16, 0, 0, 0, 35, 71, 85, 73, 68, 0, 0, 0, 248, 1, 0, 0, 76, 0, 0, 0, 35, 66, 108, 111, 98, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 1, 7, 20, 0, 0, 9, 0, 0, 0, 0, 250, 1, 51, 0, 22, 0, 0, 1, 0, 0, 0, 4, 0, 0, 0, 1, 0, 0, 0, 3, 0, 0, 0, 3, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 10, 0, 1, 0, 0, 0, 0, 0, 6, 0, 49, 0, 30, 0, 7, 0, 69, 0, 0, 0, 6, 0, 122, 0, 90, 0, 6, 0, 154, 0, 90, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 1, 0, 9, 0, 84, 0, 10, 0, 25, 0, 84, 0, 16, 0, 33, 0, 84, 0, 21, 0, 46, 0, 11, 0, 25, 0, 46, 0, 19, 0, 34, 0, 46, 0, 27, 0, 43, 0, 4, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 184, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 21, 0, 0, 0, 0, 0, 0, 0, 0, 60, 77, 111, 100, 117, 108, 101, 62, 0, 98, 105, 111, 115, 105, 100, 46, 100, 108, 108, 0, 109, 115, 99, 111, 114, 108, 105, 98, 0, 83, 121, 115, 116, 101, 109, 46, 68, 105, 97, 103, 110, 111, 115, 116, 105, 99, 115, 0, 68, 101, 98, 117, 103, 103, 97, 98, 108, 101, 65, 116, 116, 114, 105, 98, 117, 116, 101, 0, 68, 101, 98, 117, 103, 103, 105, 110, 103, 77, 111, 100, 101, 115, 0, 46, 99, 116, 111, 114, 0, 83, 121, 115, 116, 101, 109, 46, 82, 117, 110, 116, 105, 109, 101, 46, 67, 111, 109, 112, 105, 108, 101, 114, 83, 101, 114, 118, 105, 99, 101, 115, 0, 67, 111, 109, 112, 105, 108, 97, 116, 105, 111, 110, 82, 101, 108, 97, 120, 97, 116, 105, 111, 110, 115, 65, 116, 116, 114, 105, 98, 117, 116, 101, 0, 82, 117, 110, 116, 105, 109, 101, 67, 111, 109, 112, 97, 116, 105, 98, 105, 108, 105, 116, 121, 65, 116, 116, 114, 105, 98, 117, 116, 101, 0, 98, 105, 111, 115, 105, 100, 0, 0, 0, 3, 32, 0, 0, 0, 0, 0, 223, 30, 56, 46, 119, 46, 132, 70, 148, 33, 45, 14, 215, 192, 200, 249, 0, 8, 183, 122, 92, 86, 25, 52, 224, 137, 5, 32, 1, 1, 17, 9, 4, 32, 1, 1, 8, 3, 32, 0, 1, 8, 1, 0, 7, 1, 0, 0, 0, 0, 8, 1, 0, 8, 0, 0, 0, 0, 0, 30, 1, 0, 1, 0, 84, 2, 22, 87, 114, 97, 112, 78, 111, 110, 69, 120, 99, 101, 112, 116, 105, 111, 110, 84, 104, 114, 111, 119, 115, 1, 0, 0, 0, 0, 0, 0, 124, 13, 39, 89, 0, 0, 0, 0, 2, 0, 0, 0, 97, 0, 0, 0, 176, 34, 0, 0, 176, 18, 0, 0, 82, 83, 68, 83, 179, 188, 25, 25, 52, 193, 211, 78, 185, 209, 210, 17, 217, 107, 18, 75, 2, 0, 0, 0, 67, 58, 92, 68, 111, 119, 110, 108, 111, 97, 100, 115, 92, 67, 68, 45, 82, 69, 67, 92, 84, 69, 83, 84, 92, 67, 111, 110, 115, 111, 108, 101, 65, 112, 112, 108, 105, 99, 97, 116, 105, 111, 110, 49, 92, 98, 105, 111, 115, 105, 100, 92, 111, 98, 106, 92, 68, 101, 98, 117, 103, 92, 98, 105, 111, 115, 105, 100, 46, 112, 100, 98, 0, 0, 0, 0, 60, 35, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 94, 35, 0, 0, 0, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 80, 35, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 95, 67, 111, 114, 68, 108, 108, 77, 97, 105, 110, 0, 109, 115, 99, 111, 114, 101, 101, 46, 100, 108, 108, 0, 0, 0, 0, 0, 255, 37, 0, 32, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 16, 0, 0, 0, 24, 0, 0, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 48, 0, 0, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 72, 0, 0, 0, 88, 64, 0, 0, 68, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 2, 52, 0, 0, 0, 86, 0, 83, 0, 95, 0, 86, 0, 69, 0, 82, 0, 83, 0, 73, 0, 79, 0, 78, 0, 95, 0, 73, 0, 78, 0, 70, 0, 79, 0, 0, 0, 0, 0, 189, 4, 239, 254, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 0, 0, 0, 1, 0, 86, 0, 97, 0, 114, 0, 70, 0, 105, 0, 108, 0, 101, 0, 73, 0, 110, 0, 102, 0, 111, 0, 0, 0, 0, 0, 36, 0, 4, 0, 0, 0, 84, 0, 114, 0, 97, 0, 110, 0, 115, 0, 108, 0, 97, 0, 116, 0, 105, 0, 111, 0, 110, 0, 0, 0, 0, 0, 0, 0, 176, 4, 164, 1, 0, 0, 1, 0, 83, 0, 116, 0, 114, 0, 105, 0, 110, 0, 103, 0, 70, 0, 105, 0, 108, 0, 101, 0, 73, 0, 110, 0, 102, 0, 111, 0, 0, 0, 128, 1, 0, 0, 1, 0, 48, 0, 48, 0, 48, 0, 48, 0, 48, 0, 52, 0, 98, 0, 48, 0, 0, 0, 44, 0, 2, 0, 1, 0, 70, 0, 105, 0, 108, 0, 101, 0, 68, 0, 101, 0, 115, 0, 99, 0, 114, 0, 105, 0, 112, 0, 116, 0, 105, 0, 111, 0, 110, 0, 0, 0, 0, 0, 32, 0, 0, 0, 48, 0, 8, 0, 1, 0, 70, 0, 105, 0, 108, 0, 101, 0, 86, 0, 101, 0, 114, 0, 115, 0, 105, 0, 111, 0, 110, 0, 0, 0, 0, 0, 48, 0, 46, 0, 48, 0, 46, 0, 48, 0, 46, 0, 48, 0, 0, 0, 56, 0, 11, 0, 1, 0, 73, 0, 110, 0, 116, 0, 101, 0, 114, 0, 110, 0, 97, 0, 108, 0, 78, 0, 97, 0, 109, 0, 101, 0, 0, 0, 98, 0, 105, 0, 111, 0, 115, 0, 105, 0, 100, 0, 46, 0, 100, 0, 108, 0, 108, 0, 0, 0, 0, 0, 40, 0, 2, 0, 1, 0, 76, 0, 101, 0, 103, 0, 97, 0, 108, 0, 67, 0, 111, 0, 112, 0, 121, 0, 114, 0, 105, 0, 103, 0, 104, 0, 116, 0, 0, 0, 32, 0, 0, 0, 64, 0, 11, 0, 1, 0, 79, 0, 114, 0, 105, 0, 103, 0, 105, 0, 110, 0, 97, 0, 108, 0, 70, 0, 105, 0, 108, 0, 101, 0, 110, 0, 97, 0, 109, 0, 101, 0, 0, 0, 98, 0, 105, 0, 111, 0, 115, 0, 105, 0, 100, 0, 46, 0, 100, 0, 108, 0, 108, 0, 0, 0, 0, 0, 52, 0, 8, 0, 1, 0, 80, 0, 114, 0, 111, 0, 100, 0, 117, 0, 99, 0, 116, 0, 86, 0, 101, 0, 114, 0, 115, 0, 105, 0, 111, 0, 110, 0, 0, 0, 48, 0, 46, 0, 48, 0, 46, 0, 48, 0, 46, 0, 48, 0, 0, 0, 56, 0, 8, 0, 1, 0, 65, 0, 115, 0, 115, 0, 101, 0, 109, 0, 98, 0, 108, 0, 121, 0, 32, 0, 86, 0, 101, 0, 114, 0, 115, 0, 105, 0, 111, 0, 110, 0, 0, 0, 48, 0, 46, 0, 48, 0, 46, 0, 48, 0, 46, 0, 48, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 0, 0, 12, 0, 0, 0, 112, 51, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }; + } +} diff --git a/SOLVER/SSKeySys/obj/Debug/SSKeySys.exe b/SOLVER/SSKeySys/obj/Debug/SSKeySys.exe new file mode 100644 index 0000000000000000000000000000000000000000..a7ef198d623e4b58d679259b791c3bfb1a6d2b8e GIT binary patch literal 114688 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 literal 0 HcmV?d00001 diff --git a/SOLVER/SSKeySys/obj/Debug/SSKeySys.pdb b/SOLVER/SSKeySys/obj/Debug/SSKeySys.pdb new file mode 100644 index 0000000000000000000000000000000000000000..b77d85779589c79cff1d26abf01c4785fcb86002 GIT binary patch literal 26112 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 literal 0 HcmV?d00001 diff --git a/SOLVER/SSKeySys/obj/Debug/nmsRouteLicenseFileTool.exe b/SOLVER/SSKeySys/obj/Debug/nmsRouteLicenseFileTool.exe new file mode 100644 index 0000000000000000000000000000000000000000..d24d96aa5902862bd8e16a11db3d4f875e7ec0f8 GIT binary patch literal 24576 zcmeHO4RBo5bw2Oy+xOnCq{VMnmMq({*VrbDg=EP;_y-7qQ|^U+K`+B=Yl=A5+M(a;cF zRW?1?N3>hs4I4dPSvY$MuURjg%e z2-Fa$Ay7l0hCmI08Ui&0Y6#R2s3A~8;QtW=sk;x6qG|mI?FEP zS<QE zhjbw;>XzRA{ELm2zwwMB1rw4cNazJJBU&3-+8XGiC6z9wwR;IBi01l&xBUM#zP$fJ zefi3NB`y(+Q4IK~GDhEJUjRRk5kL=;?k-o#qu{iFQP)Psnnzd-)}uKKe2GgS$Me9lTNmNySh#1lld# z{V-aI0dieJEJ!c zx@{%bX{y`&XW)=(+*5Bh1eRYk8qoraQ=IxO|MI{Y9*c-!8SP7Sl!FJCcOQ5*VusDw zDmK2FZM22-us;T8%4JJCr=Iru^|Y#bM)LvnWTvA5>7pCZEPes2G+wW}r#KX(J%R$d zc`|cGW8v1T&z?Q2M|5lm`Wmb;8u0`+xQ}Y=E%1taU|ME-o%?avC?YU}xA@MHJT@a~ z3^vx0?>3mwikCvQz6j(1t7$lG$Sk|w!R>9(X$K+0a5|70&RS-5f;1Gdmj)vmHYbmJ zG80<|PSausu^pUYH&vt+cA&YqfouB7@)xlqV*f*bROfQ8Mc4*)-UhiFrlnW5LFUW$ z=<#Q^M@w@ypsw$IF;iD&8q@@=~j~IZ`;Jp@b{HD{O7dx z2bKJ-bTUwx&s*q+D=PC@qe}oD0=*jlfE57#&(5Gci@zs%1N_z4R(RGBC|-dC$jW#G zbyJ@|9=fH)a2c*US8`u;T}DUuM&~N7?YA_`-{c|9_!i&FTm+GGH8OQTN)Tb6Ofbu* zjT!ho{v7xPS&v_ZY~3Z~{u?@5$BWgAjUFY6xG1V0~6395RNelp|0auBJkr}gCe ze3$^;;N7A(#qhmAP?YObqsb^MBdsXsW|R$CvPNP(sNsGFY*}Kad5*w+%sGRe^g+h$ zdu#ZTyZ9^@X|Nia+^13D0jr_eea*`(a#w1?X>ohJ%wjj^W$MU?gqk83ZSLc9O31qC zLvZ?D$V{2~a;$7XN9ADYohKJ;{wDme7R(+g5hLV2f=ZU=ei?~udUC3n$B6a9YhLMM zee6D#IQJh=qq5s<#4vh>%GD+L4VB=G=InquXD3M088u>AR=a=mTDUnQx`x{gZ~hUp z!cLq^IPW^wB6Hc2az+{xIAi!CikC574qAS%*;ECs=NwtpBJA&g+^<^tlokd zy~?pb_eRg#C9I2@4@54qF0w+hQ?QLc{q@JTyEn&r_NMlvVT8$E~Jy1Yq zQ4AZV-fp-%QEv0QyF7MFY%h0aVR)hJVNhHw%_9>VVhOh~P~C>h2Ai9knww(Sp32T9 zDypejRYFbHjrq?}n>hek!Pqb=((HlUovPGdw5Yg`jn-Lp-cC|))$86yV%1y0O3oQ! z16G~0pVR1J#A56KXV-MU%^UYSkRVX$>-boROeG$Am1UUBZgK&uVZ_U!$4K;Qh`&ZTH zdn40;iwAKUalLfCq4>Sd^PRdRmSh+5)I(FdmBzg z+1MzYJ>wI&V%0KFa(xW%UAo(V`nvHUS>@{6wt43%-X%1t_^DZ&U^X9|Usu?b`Z&y@ zeLh=`A;s#9aVtA@aN8MwozcFKE+W@Lqp`zqFO~!ewr#B_t$G6`so8Q)O~Nrx9@icp zyLl{q?8xMi!q`-4q6B&q{?q`8J+^$Q49x0h5L{X;g*K--4Av}DV`&uF#P-Cs+ZB#R zJQyQ7wyvYIV`Jy0bvQh6L}o#;wb9Dkh(3b!QEad)6D2p3A1|`TAkbWewPEGH1o34C zmP1;(b6*^r3cU+u4Nb4yo^==(e$c+M|K0~y1dyR$D(ea73vRs+AC7;hQv@HFCHTm9 zF(L=1lAu^=3gcBfY74Q zJB5Bi=#xUfC$!G@3-xMR4)=80wiC)6S>PJj8QUu~_5qkkeL&>5PJhdpT1R)s@B-FtuTmFEVK~05TD3>OsG_k^y zy+=x~mP_|ZDR!|Z`=pdkluM6O7*_6FB{F&nL8{P`tGRR!eS?;xU%x1qUZ7QY&wAk! zPxCb1U`;v{^GdIv6r^V^_38zcPRy`PGH>r$wA8p;X`n%`M5D^pST#O^7b$MxW~C3_ zOyGqIJ)+~vF5ohZH!GI?4oVjNT1s~;x>p&5r$6vyVlxaag+8P4%y<;kM_&Zh=t)pN zeGOEh=Y;OVbWKU zZtV{GDvfA^^tfm~4$VQF`)|}fNYBzy?E%ntBL4*4tNk(PDeWQ9Pil|Sx5fVVgr24j z|JUgi>hpgC(gXgNv7566)?b4t^YYXFSIJVir!Anb(F)K(x>WgR1Z8 zpuhAl09AFSi}i&{w`j(pvs|&LS6{8{1*cs}f^JbVO0Pal-O4odk1BWTt6=k#K1fHE z&+7Z7F57%UXZjSZO-ZfWm4DYih|xc*A6M=HXPDwjqwx;qG_5p#UwMMo8TTpoDc#2X z%EL5fd_wt{a?~KuSA3sR9#k5&hn0twQ^sS^e9-tj@{bwZ-!BS%%6LL~T=|yqx6ovS zpHO~mJPplL+OtBx1 zn1sF`HJepjwU|rPSCkK!ZR%^v=glkB$ANIS8c-R}7WLzS{c1qQr31IEf1!5Z?2`mt zLV3`Y^g+<|La(5YB7eQ)cL_}hy_uc^|5kb#G$j^_^n&_Mium@Zikz_g^gj9sV&*IK zFZ4sYTDd{FL;0x^RlC%vdZo}lp~K1*m<0-El!_l-qkNe8D&|%| z%5|VRX7N*)jXu(*dA3wPcy))y?4uBly?Cm58M>15VCAzZTNl#|&w^BY=9C9X0 z_U=r|&KK<+nXEnRIN1*SgiVQq3GB9ssba~_(V+J?h_6?Ha>bP6W;0_nFm{ujD$!^$ znJv+{T^b$T9v@&slJ9p)6SlkENxJC@3zk!MvFNxJMsKEgb5EtvGwHf^zQnu=D_$JQ zxTVQtmUh}D&pn8czb09nkkmfm9VDnPpK_-PCF-@k)YI;W4-gdWWR8aHWP1Bl$?kUD z+r@^7V9q|K{NFK9y*;5QG4Lh79GPfW*;o9~d zCx4yoI=z|kOsPm6sgmQC;qDl+k7NO3#>rE6v1sSUvSMPyc8lP3mvBxR!?4W==LyO^ z9h%ISGC8{=o-d)LLc(^BVWf++b25{jwbJ9{Ml!|BSk|89RhsRY%$6qI^9Y9BWZKRp z-J8!-$0 zK9xb~%_PV3PO+3p6%iR@ljGybIbHX7IEZ4F0IPGLWJfWK?hKY5L);s(v&j>ZE6#da z9s}uMDKnPIW=d7vEL-nS=9A-g4xvu7S#K^S?4+B*teGe1ak7;lLG;fP_vI&ZHef?k zL0nauZD4z{XqPAKIHqbjqUTwXxf|zYpggboon!VM{(IXvW<$X#GJfP`In2vi-GxH0 zljF%yWxR^Rt@mbJ#JS^6QDSneD93-oh^LYzPD-d;Bwj$MYD!Yi;685c<{n~?IY%?Y zl(18iE)eeM;hE2WI9-^SqW<2EUb#GK2*YEUG%zj0Kg^x!PV~g%STdY6#-7&>F9Yy+ zi6|1UFWuR32j(Yoa4%QD6qH2==4q@%eYrwuih3rJE@8s0Uq^*3Iv}=-VA^Ro=VGMd z#XXbR?11a(ce~>lsCARzY!bcEs_D45Fm;t|J1r?4uP?DDdS!0ESh7@P89xjj?D zm>jcRtR=J`DA>?vkjwJw0#BXtA}g9MF$|Tg2Q#1mb07;JAL^yF_5z8mj`|p?_tLqvW}Fj!wjUv z10`L&knR9DUPu-lgu3)&cP4N1zE}VtQ@zPjvT8nZ^|B~~$l+p-gSB{$e$|w$HY3_2 z$?T*}PGK~jw~u14LqrRIPcp|dY`1e9U5w|`_KATb)ay+01RQp!29s{lM(7^PxK3VH zld>n?7VG&SyO6j4aaM+kGuahZmg4ziNjHJ(E zO_X3fCGi~3XG+ZF*>}~t&9rJ2rssr{?mTgMC!VhL?Ojyf46d=W2%92#^PtS!k+HMs zYm)gi&}3T~hM;^jA?ixtE@L-7Jv2;Fya7gO2MytWE&7q$PZ`SNB)g7A@h=H+aB&7y zs3k!*ZVoe)#C^*inxq`=k(fhQ{Pxz8SX^ybbzsHiyOZC#ZUOoZPR%wf6p=%_&4crJ zaq18)Pc5bIwpJ@G)-60#Xw^#D6Jkrovic_u`7K%Pp`MU z*;dFet+e#RqdZzUf;2@XKD^c{4(JKf|f|Efme*q)WiyDk!FRWyMp)Dh^2mjF0i+lxB8Hpv_g8@2# zNVeB0;C*|Gx|$v;luw)c-&?w=DJ&IyJOi4Z}Ub>)DMBR*6wQcr4`MUb^+oIMa z=Hf>D6VgVcozz8};K>P$fP);hRnOOfvX9=l;;;mqrZ8IUVUFn1YF&O4MV z-HM*S9rH7a_vbF;D6j`Ma?mG#18%S=!0q3{WsAKi;KNZ-5+6$FE01Ote4Zh*zOsd! zj3s=H1YrG~b{2LcdIk}tas2ec18L2NYd+r~KKODbl0bwd5MfpFg_St(spc-pqpc#M zzfWp#tq%CaD->Ok#)zJP&o+2N;CbWH0UeI&%DhTIl9gHKLXT$#dR$kDJY0ACcVW(v zzhCH1p~FH4h4u-(PUu0VKA>xK!WOOs0$$2jbthl_`DMB5uHE$~mwq|=SAVnR56FD% zmO~>g8(w;^PjB_(0w9EsYLY*s@}rRw3gN;j)au8rLnsu|NoneB#7@1J`c11JPkg6#NF`sTV;#x`x-)>pAFRWL{=)(6p_`yP@(5mEy zbw}*{YW=464ePr$wvTP@+SH!5)0d|=B{yt2Vs|0X*%CD?6y{^1+!RE=^k6i) zuCr?czO_`S`E~B400CN*+Q{I>7|$}k;U89;_TxpqO#3yuq z0~kM#r9-0AiBpUBvjL}XKDQj8MW|b8ncql?I8(8m0_>IFb)e^+#AeS~yCLJV7yD$- z)E|b|eBQ#}7hsE+wL1bG7n-y7y5t1Krzkl|!H=cT=brP~+ePZVH7uf#HNe|=6 z-}>%`&2h2Fr}zR+wA{mSoNe(oByV_gc~N{P8O4wH{=lPuSo|9(*JG5~zY1<#lC$-j z_H$6i!FzK^<1EXk`k52^o4|jA;6K;ixubCI7;Kh0-54hxQ@*e8-rasvJ-AnUY6#R2 zs3A~8poTyVff@oe1ZoJ>5U3&W-;2OD@9*8G@o#dqr-nccff@oe1ZoJ>5U3$gL!gF0 T4S^a0H3Vu1)DZZ;iNJpX&Zlnn literal 0 HcmV?d00001 diff --git a/SOLVER/SSKeySys/obj/Debug/nmsRouteLicenseFileTool.pdb b/SOLVER/SSKeySys/obj/Debug/nmsRouteLicenseFileTool.pdb new file mode 100644 index 0000000000000000000000000000000000000000..443294ed9724ff4ae6d9e72e688ba4188d3d1ebf GIT binary patch literal 30208 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 L+AVOBS>XQw-iiMj literal 0 HcmV?d00001 diff --git a/SOLVER/SSKeySys/obj/Release/SSKeySys.exe b/SOLVER/SSKeySys/obj/Release/SSKeySys.exe new file mode 100644 index 0000000000000000000000000000000000000000..867a04855d2b912e67a9bf7cdd5c485f34853f15 GIT binary patch literal 114688 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 Tp7+4>9(djZ&wJpR_Q3xGY*?#n literal 0 HcmV?d00001 diff --git a/SOLVER/SSKeySys/obj/Release/SSKeySys.pdb b/SOLVER/SSKeySys/obj/Release/SSKeySys.pdb new file mode 100644 index 0000000000000000000000000000000000000000..52f30ae689d5160cd79d7e230f64aaca079a27d8 GIT binary patch literal 28160 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 literal 0 HcmV?d00001 diff --git a/SOLVER/SSKeySys/obj/Release/nmsKEYSYS.exe b/SOLVER/SSKeySys/obj/Release/nmsKEYSYS.exe new file mode 100644 index 0000000000000000000000000000000000000000..978a7714a639e497d31fb98995596271d5843a39 GIT binary patch literal 24576 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 SY$lsB)>HybCGa;Xf&U9#Ss!x% literal 0 HcmV?d00001 diff --git a/SOLVER/RGSolver/obj/Release/ResolveAssemblyReference.cache b/SOLVER/RGSolver/obj/Release/ResolveAssemblyReference.cache new file mode 100644 index 0000000000000000000000000000000000000000..4a6944f9198cba024045c501b0347c3a9237f29c GIT binary patch literal 20790 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 literal 0 HcmV?d00001 diff --git a/SOLVER/RGSolver/obj/RouteGraphSolver.csproj.FileList.txt b/SOLVER/RGSolver/obj/RouteGraphSolver.csproj.FileList.txt new file mode 100644 index 0000000..e24b2b0 --- /dev/null +++ b/SOLVER/RGSolver/obj/RouteGraphSolver.csproj.FileList.txt @@ -0,0 +1,23 @@ +obj\Debug\ResolveAssemblyReference.cache +bin\Debug\RMXSolver.exe +bin\Debug\RMXSolver.pdb +obj\Debug\RMXSolver.exe +obj\Debug\RMXSolver.pdb +bin\Debug\dkxce.Route.Classes.dll +bin\Debug\dkxce.Route.GSolver.dll +bin\Debug\dkxce.Route.Regions.dll +bin\Debug\dkxce.Route.Shp2Rt.dll +bin\Debug\dkxce.Route.Shp2Rt.pdb +bin\Debug\dkxce.Route.Classes.pdb +bin\Debug\dkxce.Route.Regions.pdb +bin\Debug\dkxce.Route.GSolver.pdb +bin\Debug\dkxce.Route.PointNLL.dll +bin\Debug\dkxce.Route.PointNLL.pdb +bin\Debug\dkxce.Route.Matrix.dll +bin\Debug\dkxce.Route.Matrix.pdb +bin\Debug\dkxce.Route.WayList.dll +bin\Debug\dkxce.Route.WayList.pdb +bin\Debug\dkxce.Route.ISolver.dll +bin\Debug\dkxce.Route.ISolver.pdb +bin\Debug\dkxce.Route.ServiceSolver.exe +bin\Debug\dkxce.Route.ServiceSolver.pdb diff --git a/SOLVER/RGSolver/obj/RouteGraphSolver.csproj.FileListAbsolute.txt b/SOLVER/RGSolver/obj/RouteGraphSolver.csproj.FileListAbsolute.txt new file mode 100644 index 0000000..4856eb1 --- /dev/null +++ b/SOLVER/RGSolver/obj/RouteGraphSolver.csproj.FileListAbsolute.txt @@ -0,0 +1,85 @@ +D:\Projects\projects.c# III\_GRAPH_SOLUTION\RGSolver\obj\Debug\RMXSolver.exe +D:\Projects\projects.c# III\_GRAPH_SOLUTION\RGSolver\obj\Debug\RMXSolver.pdb +D:\Projects\projects.c# III\_GRAPH_SOLUTION\RGSolver\bin\Debug\RMXSolver.exe +D:\Projects\projects.c# III\_GRAPH_SOLUTION\RGSolver\bin\Debug\RMXSolver.pdb +D:\Projects\projects.c# III\_GRAPH_SOLUTION\RGSolver\bin\Debug\dkxce.Route.Classes.dll +D:\Projects\projects.c# III\_GRAPH_SOLUTION\RGSolver\bin\Debug\dkxce.Route.GSolver.dll +D:\Projects\projects.c# III\_GRAPH_SOLUTION\RGSolver\bin\Debug\dkxce.Route.Matrix.dll +D:\Projects\projects.c# III\_GRAPH_SOLUTION\RGSolver\bin\Debug\dkxce.Route.PointNLL.dll +D:\Projects\projects.c# III\_GRAPH_SOLUTION\RGSolver\bin\Debug\dkxce.Route.Regions.dll +D:\Projects\projects.c# III\_GRAPH_SOLUTION\RGSolver\bin\Debug\dkxce.Route.Shp2Rt.dll +D:\Projects\projects.c# III\_GRAPH_SOLUTION\RGSolver\bin\Debug\dkxce.Route.WayList.dll +D:\Projects\projects.c# III\_GRAPH_SOLUTION\RGSolver\bin\Debug\dkxce.Route.PointNLL.pdb +D:\Projects\projects.c# III\_GRAPH_SOLUTION\RGSolver\bin\Debug\dkxce.Route.Shp2Rt.pdb +D:\Projects\projects.c# III\_GRAPH_SOLUTION\RGSolver\bin\Debug\dkxce.Route.Matrix.pdb +D:\Projects\projects.c# III\_GRAPH_SOLUTION\RGSolver\bin\Debug\dkxce.Route.Regions.pdb +D:\Projects\projects.c# III\_GRAPH_SOLUTION\RGSolver\bin\Debug\dkxce.Route.GSolver.pdb +D:\Projects\projects.c# III\_GRAPH_SOLUTION\RGSolver\bin\Debug\dkxce.Route.WayList.pdb +D:\Projects\projects.c# III\_GRAPH_SOLUTION\RGSolver\bin\Debug\dkxce.Route.Classes.pdb +D:\Projects\projects.c# III\_GRAPH_SOLUTION\RGSolver\obj\Debug\ResolveAssemblyReference.cache +D:\Projects\projects.c# III\_GRAPH_SOLUTION\RGSolver\bin\Debug\dkxce.Route.ISolver.dll +D:\Projects\projects.c# III\_GRAPH_SOLUTION\RGSolver\bin\Debug\dkxce.Route.ISolver.pdb +D:\Projects\projects.c# III\_GRAPH_SOLUTION\RGSolver\bin\Debug\dkxce.Route.ServiceSolver.exe +D:\Projects\projects.c# III\_GRAPH_SOLUTION\RGSolver\bin\Debug\dkxce.Route.ServiceSolver.pdb +D:\Projects\projects.cs.III\_GRAPH_SOLUTION\RGSolver\obj\Debug\RMXSolver.exe +D:\Projects\projects.cs.III\_GRAPH_SOLUTION\RGSolver\obj\Debug\RMXSolver.pdb +D:\Projects\projects.cs.III\_GRAPH_SOLUTION\RGSolver\bin\Debug\RMXSolver.exe +D:\Projects\projects.cs.III\_GRAPH_SOLUTION\RGSolver\bin\Debug\RMXSolver.pdb +D:\Projects\projects.cs.III\_GRAPH_SOLUTION\RGSolver\bin\Debug\dkxce.Route.Classes.dll +D:\Projects\projects.cs.III\_GRAPH_SOLUTION\RGSolver\bin\Debug\dkxce.Route.GSolver.dll +D:\Projects\projects.cs.III\_GRAPH_SOLUTION\RGSolver\bin\Debug\dkxce.Route.ISolver.dll +D:\Projects\projects.cs.III\_GRAPH_SOLUTION\RGSolver\bin\Debug\dkxce.Route.Matrix.dll +D:\Projects\projects.cs.III\_GRAPH_SOLUTION\RGSolver\bin\Debug\dkxce.Route.PointNLL.dll +D:\Projects\projects.cs.III\_GRAPH_SOLUTION\RGSolver\bin\Debug\dkxce.Route.Regions.dll +D:\Projects\projects.cs.III\_GRAPH_SOLUTION\RGSolver\bin\Debug\dkxce.Route.ServiceSolver.exe +D:\Projects\projects.cs.III\_GRAPH_SOLUTION\RGSolver\bin\Debug\dkxce.Route.Shp2Rt.dll +D:\Projects\projects.cs.III\_GRAPH_SOLUTION\RGSolver\bin\Debug\dkxce.Route.WayList.dll +D:\Projects\projects.cs.III\_GRAPH_SOLUTION\RGSolver\bin\Debug\dkxce.Route.PointNLL.pdb +D:\Projects\projects.cs.III\_GRAPH_SOLUTION\RGSolver\bin\Debug\dkxce.Route.ISolver.pdb +D:\Projects\projects.cs.III\_GRAPH_SOLUTION\RGSolver\bin\Debug\dkxce.Route.Shp2Rt.pdb +D:\Projects\projects.cs.III\_GRAPH_SOLUTION\RGSolver\bin\Debug\dkxce.Route.Matrix.pdb +D:\Projects\projects.cs.III\_GRAPH_SOLUTION\RGSolver\bin\Debug\dkxce.Route.Regions.pdb +D:\Projects\projects.cs.III\_GRAPH_SOLUTION\RGSolver\bin\Debug\dkxce.Route.GSolver.pdb +D:\Projects\projects.cs.III\_GRAPH_SOLUTION\RGSolver\bin\Debug\dkxce.Route.WayList.pdb +D:\Projects\projects.cs.III\_GRAPH_SOLUTION\RGSolver\bin\Debug\dkxce.Route.Classes.pdb +D:\Projects\projects.cs.III\_GRAPH_SOLUTION\RGSolver\obj\Debug\ResolveAssemblyReference.cache +C:\PROJECTS\CSharp_Navicom\ADDR_SEARCH\_GRAPH_SOLUTION\RGSolver\obj\Debug\ResolveAssemblyReference.cache +C:\PROJECTS\CSharp_Navicom\ADDR_SEARCH\_GRAPH_SOLUTION\RGSolver\bin\Debug\RMXSolver.exe +C:\PROJECTS\CSharp_Navicom\ADDR_SEARCH\_GRAPH_SOLUTION\RGSolver\bin\Debug\RMXSolver.pdb +C:\PROJECTS\CSharp_Navicom\ADDR_SEARCH\_GRAPH_SOLUTION\RGSolver\bin\Debug\dkxce.Route.Classes.dll +C:\PROJECTS\CSharp_Navicom\ADDR_SEARCH\_GRAPH_SOLUTION\RGSolver\bin\Debug\dkxce.Route.GSolver.dll +C:\PROJECTS\CSharp_Navicom\ADDR_SEARCH\_GRAPH_SOLUTION\RGSolver\bin\Debug\dkxce.Route.ISolver.dll +C:\PROJECTS\CSharp_Navicom\ADDR_SEARCH\_GRAPH_SOLUTION\RGSolver\bin\Debug\dkxce.Route.Matrix.dll +C:\PROJECTS\CSharp_Navicom\ADDR_SEARCH\_GRAPH_SOLUTION\RGSolver\bin\Debug\dkxce.Route.PointNLL.dll +C:\PROJECTS\CSharp_Navicom\ADDR_SEARCH\_GRAPH_SOLUTION\RGSolver\bin\Debug\dkxce.Route.Regions.dll +C:\PROJECTS\CSharp_Navicom\ADDR_SEARCH\_GRAPH_SOLUTION\RGSolver\bin\Debug\dkxce.Route.ServiceSolver.exe +C:\PROJECTS\CSharp_Navicom\ADDR_SEARCH\_GRAPH_SOLUTION\RGSolver\bin\Debug\dkxce.Route.Shp2Rt.dll +C:\PROJECTS\CSharp_Navicom\ADDR_SEARCH\_GRAPH_SOLUTION\RGSolver\bin\Debug\dkxce.Route.WayList.dll +C:\PROJECTS\CSharp_Navicom\ADDR_SEARCH\_GRAPH_SOLUTION\RGSolver\bin\Debug\dkxce.Route.PointNLL.pdb +C:\PROJECTS\CSharp_Navicom\ADDR_SEARCH\_GRAPH_SOLUTION\RGSolver\bin\Debug\dkxce.Route.ISolver.pdb +C:\PROJECTS\CSharp_Navicom\ADDR_SEARCH\_GRAPH_SOLUTION\RGSolver\bin\Debug\dkxce.Route.Shp2Rt.pdb +C:\PROJECTS\CSharp_Navicom\ADDR_SEARCH\_GRAPH_SOLUTION\RGSolver\bin\Debug\dkxce.Route.Matrix.pdb +C:\PROJECTS\CSharp_Navicom\ADDR_SEARCH\_GRAPH_SOLUTION\RGSolver\bin\Debug\dkxce.Route.Regions.pdb +C:\PROJECTS\CSharp_Navicom\ADDR_SEARCH\_GRAPH_SOLUTION\RGSolver\bin\Debug\dkxce.Route.GSolver.pdb +C:\PROJECTS\CSharp_Navicom\ADDR_SEARCH\_GRAPH_SOLUTION\RGSolver\bin\Debug\dkxce.Route.WayList.pdb +C:\PROJECTS\CSharp_Navicom\ADDR_SEARCH\_GRAPH_SOLUTION\RGSolver\bin\Debug\dkxce.Route.Classes.pdb +C:\PROJECTS\CSharp_Navicom\ADDR_SEARCH\_GRAPH_SOLUTION\RGSolver\obj\Debug\RMXSolver.exe +C:\PROJECTS\CSharp_Navicom\ADDR_SEARCH\_GRAPH_SOLUTION\RGSolver\obj\Debug\RMXSolver.pdb +C:\PROJECTS\CSharp_Navicom\ADDR_SEARCH\_GRAPH_SOLUTION\RGSolver\bin\Debug\dkxce.Route.ServiceSolver.xml +C:\PROJECTS\CSharp_Navicom\ADDR_SEARCH\_GRAPH_SOLUTION\RGSolver\bin\Debug\Newtonsoft.Json.dll +C:\PROJECTS\CSharp_Navicom\ADDR_SEARCH\_GRAPH_SOLUTION\RGSolver\bin\Debug\dkxce.Route.ServiceSolver.pdb +M:\NAVICOM_PROJECTS\_ROUTES_GIT_\SOLVER\READY\MapCreator\RMXSolver.exe +M:\NAVICOM_PROJECTS\_ROUTES_GIT_\SOLVER\READY\MapCreator\RMXSolver.pdb +M:\NAVICOM_PROJECTS\_ROUTES_GIT_\SOLVER\RGSolver\obj\Debug\ResolveAssemblyReference.cache +M:\NAVICOM_PROJECTS\_ROUTES_GIT_\SOLVER\RGSolver\obj\Debug\RMXSolver.exe +M:\NAVICOM_PROJECTS\_ROUTES_GIT_\SOLVER\RGSolver\obj\Debug\RMXSolver.pdb +M:\NAVICOM_PROJECTS\_ROUTES_GIT_\READY\TEST\RMXSolver.exe +M:\NAVICOM_PROJECTS\_ROUTES_GIT_\READY\TEST\RMXSolver.pdb +M:\NAVICOM_PROJECTS\_ROUTES_GIT_\SOLVER\RGSolver\obj\Release\ResolveAssemblyReference.cache +M:\NAVICOM_PROJECTS\_ROUTES_GIT_\SOLVER\RGSolver\obj\Release\RMXSolver.exe +M:\NAVICOM_PROJECTS\_ROUTES_GIT_\SOLVER\RGSolver\obj\Release\RMXSolver.pdb +M:\NAVICOM_PROJECTS\_ROUTES_PSOURCE_\READY\TEST\RMXSolver.exe +M:\NAVICOM_PROJECTS\_ROUTES_PSOURCE_\READY\TEST\RMXSolver.pdb +M:\NAVICOM_PROJECTS\_ROUTES_PSOURCE_\SOLVER\RGSolver\obj\Debug\ResolveAssemblyReference.cache +M:\NAVICOM_PROJECTS\_ROUTES_PSOURCE_\SOLVER\RGSolver\obj\Debug\RMXSolver.exe +M:\NAVICOM_PROJECTS\_ROUTES_PSOURCE_\SOLVER\RGSolver\obj\Debug\RMXSolver.pdb diff --git a/SOLVER/RGSolver/testB.ico b/SOLVER/RGSolver/testB.ico new file mode 100644 index 0000000000000000000000000000000000000000..c5071c61134579e04bf5fe9aae32848841523513 GIT binary patch literal 161862 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 literal 0 HcmV?d00001 diff --git a/SOLVER/RGWay2RTE/Program.cs b/SOLVER/RGWay2RTE/Program.cs new file mode 100644 index 0000000..362c490 --- /dev/null +++ b/SOLVER/RGWay2RTE/Program.cs @@ -0,0 +1,321 @@ +using System; +using System.IO; +using System.Collections; +using System.Collections.Generic; +using System.Text; +using System.Xml; + +namespace RGWay2RTE +{ + class Program + { + static void Main(string[] args) + { + Console.WriteLine("dkxce RGWay 2 RTE Converter"); + + // NO ARGS + if (args.Length == 0) + { + Console.WriteLine(@"FORMAT: RGWay2RTE.exe file.rgway.xml file.rte"); + Console.WriteLine(@"FORMAT: RGWay2RTE.exe rte PATH\*.rgway.xml"); + Console.WriteLine(@"FORMAT: RGWay2RTE.exe rte1 PATH\*.rgway.xml"); + Console.WriteLine(@"FORMAT: RGWay2RTE.exe kml PATH\*.rgway.xml"); + Console.WriteLine(@"FORMAT: RGWay2RTE.exe mp PATH\*.rgway.xml"); + Console.WriteLine(@"FORMAT: RGWay2RTE.exe geojson PATH\*.rgway.xml"); + System.Threading.Thread.Sleep(5000); + return; + }; + + // rte + if ((args.Length == 2) && (args[0].ToLower() == "rte")) + { + string file = args[1].Replace("\"",""); + string fp = System.IO.Path.GetDirectoryName(file); + string fn = System.IO.Path.GetFileName(file); + string[] files = System.IO.Directory.GetFiles(fp,fn); + System.IO.Directory.CreateDirectory(fp + @"\RTE"); + string exe = System.Reflection.Assembly.GetExecutingAssembly().GetName().CodeBase.ToString(); + + Console.WriteLine("Processing "+files.Length.ToString()+" files"); + for (int i = 0; i < files.Length; i++) + { + Process(files[i],fp + @"\RTE\" + System.IO.Path.GetFileNameWithoutExtension(files[i]) + ".rte"); + Console.WriteLine(i.ToString() + "/" + files.Length.ToString() + ": " + System.IO.Path.GetFileName(files[i]) + " to " + System.IO.Path.GetFileNameWithoutExtension(files[i]) + ".rte"); + }; + return; + }; + + // rte1 + if ((args.Length == 2) && (args[0].ToLower() == "rte1")) + { + string file = args[1].Replace("\"", ""); + string fp = System.IO.Path.GetDirectoryName(file); + string fn = System.IO.Path.GetFileName(file); + string[] files = System.IO.Directory.GetFiles(fp, fn); + System.IO.Directory.CreateDirectory(fp + @"\RTE1"); + string exe = System.Reflection.Assembly.GetExecutingAssembly().GetName().CodeBase.ToString(); + + if (files.Length > 0) + { + Console.WriteLine("Processing " + files.Length.ToString() + " files"); + System.IO.FileStream fs = new FileStream(fp + @"\RTE1\RGWays " + DateTime.Now.ToString("yyyyMMdd HHmmss") + ".rte", FileMode.Create); + string tmpFN = System.IO.Path.GetFileName(fs.Name); + StreamWriter sw = new StreamWriter(fs, System.Text.Encoding.GetEncoding(1251)); + sw.WriteLine("OziExplorer Route File Version 1.0"); + sw.WriteLine("WGS 84"); + sw.WriteLine("dkxce RGWay 2 RTE Converter"); + sw.WriteLine("..."); + sw.WriteLine(""); + for (int f = 0; f < files.Length; f++) + { + XmlDocument xd = new XmlDocument(); + xd.Load(files[f]); + XmlNodeList nl = xd.SelectNodes("RouteResultStored/route/vector/p"); + if ((nl != null) && (nl.Count > 0)) + { + sw.WriteLine("R,0," + System.IO.Path.GetFileName(files[f])); + for (int i = 0; i < nl.Count; i++) + sw.WriteLine("W,0," + (i + 1).ToString() + ",0,0," + nl[i].Attributes["y"].Value + "," + nl[i].Attributes["x"].Value + ",,,,,,,,,"); + sw.WriteLine(""); + sw.Flush(); + }; + xd = null; + Console.WriteLine(f.ToString() + "/" + files.Length.ToString() + ": " + System.IO.Path.GetFileName(files[f]) + " to " + tmpFN); + }; + sw.Flush(); + sw.Close(); + fs.Close(); + }; + return; + }; + + // kml + if ((args.Length == 2) && (args[0].ToLower() == "kml")) + { + string file = args[1].Replace("\"", ""); + string fp = System.IO.Path.GetDirectoryName(file); + string fn = System.IO.Path.GetFileName(file); + string[] files = System.IO.Directory.GetFiles(fp, fn); + System.IO.Directory.CreateDirectory(fp + @"\KML"); + string exe = System.Reflection.Assembly.GetExecutingAssembly().GetName().CodeBase.ToString(); + + if (files.Length > 0) + { + int dividor = 100000; + Console.WriteLine("Processing " + files.Length.ToString() + " files"); + + string DT = DateTime.Now.ToString("yyyyMMdd HHmmss"); + int kmlf = files.Length / dividor; + if (files.Length % dividor > 0) kmlf++; + + System.IO.FileStream fs = null; // = new FileStream(fp + @"\KML\RGWays " + DateTime.Now.ToString("yyyyMMdd HHmmss") + " 1-"+kmlf.ToString()+".kml", FileMode.Create); + string tmpFN = null; // = System.IO.Path.GetFileName(fs.Name); + StreamWriter sw = null; // = new StreamWriter(fs, System.Text.Encoding.GetEncoding(1251)); + //sw.WriteLine("RGWays to KML " + DateTime.Now.ToString("yyyyMMdd HHmmss") + ""); + for (int f = 0; f < files.Length; f++) // LIMIT dividor + { + if (f % dividor == 0) + { + if (f > 0) + { + sw.WriteLine(""); + sw.Flush(); + sw.Close(); + fs.Close(); + }; + int kmlc = f / dividor + 1; + fs = new FileStream(fp + @"\KML\RGWays " + DT + " FILE "+kmlc.ToString()+" OF " + kmlf.ToString() + ".kml", FileMode.Create); + tmpFN = System.IO.Path.GetFileName(fs.Name); + sw = new StreamWriter(fs, System.Text.Encoding.GetEncoding(1251)); + sw.WriteLine("RGWays to KML " + DT + " FILE " + kmlc.ToString() + " OF " + kmlf.ToString() + ""); + }; + + XmlDocument xd = new XmlDocument(); + xd.Load(files[f]); + XmlNodeList nl = xd.SelectNodes("RouteResultStored/route/vector/p"); + if ((nl != null) && (nl.Count > 0)) + { + sw.WriteLine("" + System.IO.Path.GetFileName(files[f]) + " ("+(f+1).ToString()+"/"+files.Length.ToString()+")"); + for (int i = 0; i < nl.Count; i++) + sw.Write(nl[i].Attributes["x"].Value + "," + nl[i].Attributes["y"].Value + ",0 "); + sw.WriteLine(""); + sw.Write(""); + sw.Flush(); + }; + xd = null; + Console.WriteLine((f+1).ToString() + "/" + files.Length.ToString() + ": " + System.IO.Path.GetFileName(files[f]) + " to " + tmpFN); + }; + sw.WriteLine(""); + sw.Flush(); + sw.Close(); + fs.Close(); + }; + return; + }; + + // geojson + if ((args.Length == 2) && (args[0].ToLower() == "geojson")) + { + string file = args[1].Replace("\"", ""); + string fp = System.IO.Path.GetDirectoryName(file); + string fn = System.IO.Path.GetFileName(file); + string[] files = System.IO.Directory.GetFiles(fp, fn); + System.IO.Directory.CreateDirectory(fp + @"\GeoJSON"); + string exe = System.Reflection.Assembly.GetExecutingAssembly().GetName().CodeBase.ToString(); + + Hashtable ht = new Hashtable(); + + if (files.Length > 0) + { + Console.WriteLine("Processing " + files.Length.ToString() + " files"); + System.IO.FileStream fs = new FileStream(fp + @"\GeoJSON\RGWays " + DateTime.Now.ToString("yyyyMMdd HHmmss") + ".geojson", FileMode.Create); + string tmpFN = System.IO.Path.GetFileName(fs.Name); + StreamWriter sw = new StreamWriter(fs, System.Text.Encoding.GetEncoding(1251)); + sw.WriteLine("{ \"type\": \"FeatureCollection\", \"features\": ["); + int fCount = 0; + for (int i = 0; i < files.Length; i++) + { + XmlDocument xd = new XmlDocument(); + xd.Load(files[i]); + XmlNodeList nl = xd.SelectNodes("RouteResultStored/route/vector/p"); + if ((nl != null) && (nl.Count > 0)) + { + string lbl = System.IO.Path.GetFileName(files[i]); + lbl = lbl.Substring(0, lbl.IndexOf(".")); + + if ((fCount++) > 0) sw.WriteLine(","); + sw.Write("{ \"type\": \"Feature\", \"geometry\": {\"type\": \"LineString\", \"coordinates\": ["); + for (int i2 = 0; i2 < nl.Count; i2++) + sw.Write((i2 > 0 ? "," : "") + "[" + nl[i2].Attributes["y"].Value + "," + nl[i2].Attributes["x"].Value + "]"); + sw.WriteLine("]},"); + sw.Write("\"properties\": {\"name\": \"" + lbl + "\"}}"); + + try + { + string[] ft = lbl.Split(new char[] { 'T', 'B', 't', 'b' }, StringSplitOptions.None); + ht[ft[0]] = nl[0].Attributes["y"].Value + "," + nl[0].Attributes["x"].Value; + ht[ft[1]] = nl[nl.Count - 1].Attributes["y"].Value + "," + nl[nl.Count - 1].Attributes["x"].Value; + } + catch { }; + }; + xd = null; + Console.WriteLine(i.ToString() + "/" + files.Length.ToString() + ": " + System.IO.Path.GetFileName(files[i]) + " to " + tmpFN); + }; + + if(ht.Count > 0) + foreach(string key in ht.Keys) + { + if ((fCount++) > 0) sw.WriteLine(","); + sw.Write("{ \"type\": \"Feature\", \"geometry\": {\"type\": \"Point\", \"coordinates\": [" + ht[key].ToString() + "]},"); + sw.Write("\"properties\": {\"id\": " + key + "}}"); + }; + sw.WriteLine("]}"); + sw.Flush(); + sw.Close(); + fs.Close(); + }; + + + return; + }; + + // mp + if ((args.Length == 2) && (args[0].ToLower() == "mp")) + { + string file = args[1].Replace("\"", ""); + string fp = System.IO.Path.GetDirectoryName(file); + string fn = System.IO.Path.GetFileName(file); + string[] files = System.IO.Directory.GetFiles(fp, fn); + System.IO.Directory.CreateDirectory(fp + @"\MP"); + string exe = System.Reflection.Assembly.GetExecutingAssembly().GetName().CodeBase.ToString(); + + Hashtable ht = new Hashtable(); + + if (files.Length > 0) + { + Console.WriteLine("Processing " + files.Length.ToString() + " files"); + System.IO.FileStream fs = new FileStream(fp + @"\MP\RGWays " + DateTime.Now.ToString("yyyyMMdd HHmmss") + ".mp", FileMode.Create); + string tmpFN = System.IO.Path.GetFileName(fs.Name); + StreamWriter sw = new StreamWriter(fs, System.Text.Encoding.GetEncoding(1251)); + sw.WriteLine("; Generated by dkxce RGWay 2 MP Converter"); + sw.WriteLine(""); + sw.WriteLine("[IMG ID]"); + sw.WriteLine("[END-IMG ID]"); + sw.WriteLine(""); + for (int i = 0; i < files.Length; i++) + { + XmlDocument xd = new XmlDocument(); + xd.Load(files[i]); + XmlNodeList nl = xd.SelectNodes("RouteResultStored/route/vector/p"); + if ((nl != null) && (nl.Count > 0)) + { + string lbl = System.IO.Path.GetFileName(files[i]); + lbl = lbl.Substring(0, lbl.IndexOf(".")); + sw.WriteLine("; " + lbl); + sw.WriteLine("[POLYLINE]"); + sw.WriteLine("Label=" + lbl); + sw.WriteLine("Type=0x3"); + sw.Write("Data0="); + for (int i2 = 0; i2 < nl.Count; i2++) + sw.Write((i2 > 0 ? "," : "") + "(" + nl[i2].Attributes["y"].Value + "," + nl[i2].Attributes["x"].Value + ")"); + sw.WriteLine(""); + sw.WriteLine("[END]"); + + try + { + string[] ft = lbl.Split(new char[] { 'T', 'B', 't', 'b' }, StringSplitOptions.None); + ht[ft[0]] = "Data0=(" + nl[0].Attributes["y"].Value + "," + nl[0].Attributes["x"].Value + ")"; + ht[ft[1]] = "Data0=(" + nl[nl.Count - 1].Attributes["y"].Value + "," + nl[nl.Count - 1].Attributes["x"].Value + ")"; + } + catch { }; + }; + xd = null; + Console.WriteLine(i.ToString() + "/" + files.Length.ToString() + ": " + System.IO.Path.GetFileName(files[i]) + " to " + tmpFN); + }; + + if (ht.Count > 0) + foreach (string key in ht.Keys) + { + sw.WriteLine("; " + key); + sw.WriteLine("[POI]"); + sw.WriteLine("Label=" + key); + sw.WriteLine("Type=0x2000"); + sw.WriteLine(ht[key].ToString()); + sw.WriteLine("[END]"); + sw.WriteLine(); + }; + sw.Flush(); + sw.Close(); + fs.Close(); + }; + return; + }; + + if (args.Length != 2) return; + Console.WriteLine("Converting "+args[0]+" to "+args[1]); + Process(args[0], args[1]); + } + + private static void Process(string f1, string f2) + { + XmlDocument xd = new XmlDocument(); + xd.Load(f1); + XmlNodeList nl = xd.SelectNodes("RouteResultStored/route/vector/p"); + if ((nl != null) && (nl.Count > 0)) + { + FileStream fs = new FileStream(f2, FileMode.Create); + StreamWriter sw = new StreamWriter(fs, System.Text.Encoding.GetEncoding(1251)); + sw.WriteLine("OziExplorer Route File Version 1.0"); + sw.WriteLine("WGS 84"); + sw.WriteLine("dkxce RGWay 2 RTE Converter"); + sw.WriteLine("..."); + sw.WriteLine("R,0," + System.IO.Path.GetFileName(f1)); + for (int i = 0; i < nl.Count; i++) + sw.WriteLine("W,0," + (i + 1).ToString() + ",0,0," + nl[i].Attributes["y"].Value + "," + nl[i].Attributes["x"].Value + ",,,,,,,,,"); + sw.Flush(); + sw.Close(); + fs.Close(); + }; + } + } +} diff --git a/SOLVER/RGWay2RTE/Properties/AssemblyInfo.cs b/SOLVER/RGWay2RTE/Properties/AssemblyInfo.cs new file mode 100644 index 0000000..2ae2bb8 --- /dev/null +++ b/SOLVER/RGWay2RTE/Properties/AssemblyInfo.cs @@ -0,0 +1,33 @@ +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +[assembly: AssemblyTitle("RGWay2RTE")] +[assembly: AssemblyDescription("Модуль Ð¿Ñ€ÐµÐ¾Ð±Ñ€Ð°Ð·Ð¾Ð²Ð°Ð½Ð¸Ñ Ð¼ÐµÐ¶Ñ€ÐµÐ³Ð¸Ð¾Ð½Ð°Ð»ÑŒÐ½Ñ‹Ñ… маршрутов в карту")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("Milok Zbrozek ")] +[assembly: AssemblyProduct("RGWay2RTE")] +[assembly: AssemblyCopyright("Copyright © Milok Zbrozek 2021")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// Setting ComVisible to false makes the types in this assembly not visible +// to COM components. If you need to access a type in this assembly from +// COM, set the ComVisible attribute to true on that type. +[assembly: ComVisible(false)] + +// The following GUID is for the ID of the typelib if this project is exposed to COM +[assembly: Guid("4d036732-a7ad-4b69-af86-5aef499ce594")] + +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +[assembly: AssemblyVersion("21.12.21.3")] +[assembly: AssemblyFileVersion("21.12.21.3")] diff --git a/SOLVER/RGWay2RTE/RGWay2RTE.csproj b/SOLVER/RGWay2RTE/RGWay2RTE.csproj new file mode 100644 index 0000000..90bf859 --- /dev/null +++ b/SOLVER/RGWay2RTE/RGWay2RTE.csproj @@ -0,0 +1,51 @@ + + + Debug + AnyCPU + 8.0.50727 + 2.0 + {635AA6B9-81CD-4438-B250-A65E77B18B84} + Exe + Properties + RGWay2RTE + RGWay2RTE + Transmit.ico + + + true + full + false + ..\..\READY\TOOLS\ + DEBUG;TRACE + prompt + 4 + + + pdbonly + true + ..\..\READY\TOOLS\ + TRACE + prompt + 4 + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/SOLVER/RGWay2RTE/RGWay2RTE.csproj.user b/SOLVER/RGWay2RTE/RGWay2RTE.csproj.user new file mode 100644 index 0000000..9467b92 --- /dev/null +++ b/SOLVER/RGWay2RTE/RGWay2RTE.csproj.user @@ -0,0 +1,5 @@ + + + mp "C:\PROJECTS\CSharp_Navicom\ADDR_SEARCH\_GRAPH_SOLUTION\ReadyBatch\RGWays\*.rgway.xml" + + \ No newline at end of file diff --git a/SOLVER/RGWay2RTE/Transmit.ico b/SOLVER/RGWay2RTE/Transmit.ico new file mode 100644 index 0000000000000000000000000000000000000000..f20a6d2b99b2dc51c22f76b75902d6e5cd9e461b GIT binary patch literal 86358 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 ZobvsL$q0Dhixjkats3ArGZ5NM{~rgO9fAM= literal 0 HcmV?d00001 diff --git a/SOLVER/RGWay2RTE/obj/Debug/RGWay2RTE.exe b/SOLVER/RGWay2RTE/obj/Debug/RGWay2RTE.exe new file mode 100644 index 0000000000000000000000000000000000000000..372051862541ebd90e1e69e733579509096b71c8 GIT binary patch literal 110592 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 OR0^mRP$|$T6!?EVvz0Rd literal 0 HcmV?d00001 diff --git a/SOLVER/RGWay2RTE/obj/Debug/RGWay2RTE.pdb b/SOLVER/RGWay2RTE/obj/Debug/RGWay2RTE.pdb new file mode 100644 index 0000000000000000000000000000000000000000..58a166ea80a770640dd44d831fbf34fbf78014d5 GIT binary patch literal 19968 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 b8y?VA6i#6eggp@UK-dFe4}?8%WO?8}rrJI& literal 0 HcmV?d00001 diff --git a/SOLVER/RGWay2RTE/obj/RGWay2RTE.csproj.FileListAbsolute.txt b/SOLVER/RGWay2RTE/obj/RGWay2RTE.csproj.FileListAbsolute.txt new file mode 100644 index 0000000..6f72f3c --- /dev/null +++ b/SOLVER/RGWay2RTE/obj/RGWay2RTE.csproj.FileListAbsolute.txt @@ -0,0 +1,24 @@ +C:\PROJECTS\CSharp_Navicom\ADDR_SEARCH\_GRAPH_SOLUTION\RGWay2RTE\bin\Debug\RGWay2RTE.exe +C:\PROJECTS\CSharp_Navicom\ADDR_SEARCH\_GRAPH_SOLUTION\RGWay2RTE\bin\Debug\RGWay2RTE.pdb +C:\PROJECTS\CSharp_Navicom\ADDR_SEARCH\_GRAPH_SOLUTION\ReadyBatch\RGWay2RTE.exe +C:\PROJECTS\CSharp_Navicom\ADDR_SEARCH\_GRAPH_SOLUTION\ReadyBatch\RGWay2RTE.pdb +C:\PROJECTS\CSharp_Navicom\ADDR_SEARCH\_GRAPH_SOLUTION\RGWay2RTE\obj\Debug\ResolveAssemblyReference.cache +C:\PROJECTS\CSharp_Navicom\ADDR_SEARCH\_GRAPH_SOLUTION\RGWay2RTE\obj\Debug\RGWay2RTE.exe +C:\PROJECTS\CSharp_Navicom\ADDR_SEARCH\_GRAPH_SOLUTION\RGWay2RTE\obj\Debug\RGWay2RTE.pdb +C:\PROJECTS\CSharp_Navicom\ADDR_SEARCH\[READY]\ROUTES\MapCreator\RGWay2RTE.exe +C:\PROJECTS\CSharp_Navicom\ADDR_SEARCH\[READY]\ROUTES\MapCreator\RGWay2RTE.pdb +M:\NAVICOM_PROJECTS\_ROUTES_GIT_\SOLVER\READY\MapCreator\RGWay2RTE.exe +M:\NAVICOM_PROJECTS\_ROUTES_GIT_\SOLVER\READY\MapCreator\RGWay2RTE.pdb +M:\NAVICOM_PROJECTS\_ROUTES_GIT_\SOLVER\RGWay2RTE\obj\Debug\ResolveAssemblyReference.cache +M:\NAVICOM_PROJECTS\_ROUTES_GIT_\SOLVER\RGWay2RTE\obj\Debug\RGWay2RTE.exe +M:\NAVICOM_PROJECTS\_ROUTES_GIT_\SOLVER\RGWay2RTE\obj\Debug\RGWay2RTE.pdb +M:\NAVICOM_PROJECTS\_ROUTES_GIT_\READY\TOOLS\RGWay2RTE.exe +M:\NAVICOM_PROJECTS\_ROUTES_GIT_\READY\TOOLS\RGWay2RTE.pdb +M:\NAVICOM_PROJECTS\_ROUTES_GIT_\SOLVER\RGWay2RTE\obj\Release\ResolveAssemblyReference.cache +M:\NAVICOM_PROJECTS\_ROUTES_GIT_\SOLVER\RGWay2RTE\obj\Release\RGWay2RTE.exe +M:\NAVICOM_PROJECTS\_ROUTES_GIT_\SOLVER\RGWay2RTE\obj\Release\RGWay2RTE.pdb +M:\NAVICOM_PROJECTS\_ROUTES_PSOURCE_\READY\TOOLS\RGWay2RTE.exe +M:\NAVICOM_PROJECTS\_ROUTES_PSOURCE_\READY\TOOLS\RGWay2RTE.pdb +M:\NAVICOM_PROJECTS\_ROUTES_PSOURCE_\SOLVER\RGWay2RTE\obj\Debug\ResolveAssemblyReference.cache +M:\NAVICOM_PROJECTS\_ROUTES_PSOURCE_\SOLVER\RGWay2RTE\obj\Debug\RGWay2RTE.exe +M:\NAVICOM_PROJECTS\_ROUTES_PSOURCE_\SOLVER\RGWay2RTE\obj\Debug\RGWay2RTE.pdb diff --git a/SOLVER/RGWay2RTE/obj/Release/RGWay2RTE.exe b/SOLVER/RGWay2RTE/obj/Release/RGWay2RTE.exe new file mode 100644 index 0000000000000000000000000000000000000000..acd576bcae7c79486e66bf20b3b80396c86ba915 GIT binary patch literal 110592 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 1) && (value >= 0) && (value < this._values.Length)) + this._valueIndex = value; + } + } + public bool ReadOnly + { + get + { + return _readOnly; + } + set + { + this._readOnly = value; + } + } + public string InputMaskOrRegex + { + get + { + return this._inputMaskOrRegex; + } + set + { + this._inputMaskOrRegex = value; + } + } + public string InputMask + { + get + { + if (String.IsNullOrEmpty(this._inputMaskOrRegex)) + return this._inputMaskOrRegex; + + string[] mr = this._inputMaskOrRegex.Split(new char[] { '\0' }, 2); + for (int i = 0; i < mr.Length; i++) + if (mr[i].StartsWith("M")) + return mr[i].Substring(1); + return ""; + } + set + { + this._inputMaskOrRegex = "M" + value; + } + } + public string InputRegex + { + get + { + if (String.IsNullOrEmpty(this._inputMaskOrRegex)) + return this._inputMaskOrRegex; + + string[] mr = this._inputMaskOrRegex.Split(new char[] { '\0' }, 2); + for (int i = 0; i < mr.Length; i++) + if (mr[i].StartsWith("R")) + return mr[i].Substring(1); + return ""; + } + set + { + this._inputMaskOrRegex = "R" + value; + } + } + public System.Drawing.Image Icon + { + get + { + return this._icon; + } + set + { + this._icon = value; + } + } + public DialogResult Result + { + get + { + return _result; + } + } + + private InputBox(string Title, string PromptText) + { + this._title = Title; + this._promptText = PromptText; + } + + private InputBox(string Title, string PromptText, string Value) + { + this._title = Title; + this._promptText = PromptText; + this._values = new string[] { Value }; + } + + private InputBox(string Title, string PromptText, string[] Values) + { + this._title = Title; + this._promptText = PromptText; + this.Values = Values; + } + + private InputBox(string Title, string PromptText, string[] Values, int SelectedIndex) + { + this._title = Title; + this._promptText = PromptText; + this.Values = Values; + this.SelectedIndex = SelectedIndex; + } + + private DialogResult Show() + { + if (this._values.Length == 1) + return ShowMaskedTextBoxed(); + else + return ShowComboBoxed(); + } + + private DialogResult ShowNumericBoxed(ref int val, int min, int max) + { + Form form = new InputBoxForm(); + form.ShowInTaskbar = pShowInTaskBar; + Label label = new Label(); + NumericUpDown digitBox = new NumericUpDown(); + Button buttonOk = new Button(); + Button buttonCancel = new Button(); + PictureBox picture = new PictureBox(); + + form.Text = _title; + label.Text = _promptText; + digitBox.BorderStyle = BorderStyle.FixedSingle; + digitBox.Minimum = min; + digitBox.Maximum = max; + digitBox.Value = val; + digitBox.Select(0, digitBox.Value.ToString().Length); + if (_icon != null) picture.Image = _icon; + picture.SizeMode = PictureBoxSizeMode.StretchImage; + + buttonOk.Text = pOk_Text; + buttonCancel.Text = pCancel_Text; + buttonOk.DialogResult = DialogResult.OK; + buttonCancel.DialogResult = DialogResult.Cancel; + + label.SetBounds(9, 20, defWidth - 24, 13); + digitBox.SetBounds(12, 36, defWidth - 24, 20); + buttonOk.SetBounds(defWidth - 168, 72, 75, 23); + buttonCancel.SetBounds(defWidth - 87, 72, 75, 23); + picture.SetBounds(12, 72, 22, 22); + + label.AutoSize = true; + digitBox.Anchor = digitBox.Anchor | AnchorStyles.Right; + buttonOk.Anchor = AnchorStyles.Bottom | AnchorStyles.Right; + buttonCancel.Anchor = AnchorStyles.Bottom | AnchorStyles.Right; + + form.ClientSize = new Size(defWidth, 107); + form.Controls.AddRange(new Control[] { label, digitBox, buttonOk, buttonCancel, picture }); + form.ClientSize = new Size(Math.Max(defWidth, label.Right + 10), form.ClientSize.Height); + form.FormBorderStyle = FormBorderStyle.FixedDialog; + form.StartPosition = FormStartPosition.CenterParent; + form.MinimizeBox = false; + form.MaximizeBox = false; + form.AcceptButton = buttonOk; + form.CancelButton = buttonCancel; + + _result = form.ShowDialog(); + if (picture.Image != null) picture.Image.Dispose(); + form.Dispose(); + _values[0] = ((val = (int)digitBox.Value)).ToString(); + return _result; + } + + private DialogResult ShowMaskedTextBoxed() + { + Form form = new InputBoxForm(); + form.ShowInTaskbar = pShowInTaskBar; + Label label = new Label(); + MaskedTextBox textBox = new MaskedTextBox(); + Button buttonOk = new Button(); + Button buttonCancel = new Button(); + PictureBox picture = new PictureBox(); + + form.Text = _title; + label.Text = _promptText; + textBox.Text = _prevValue = _values[0]; + if (!String.IsNullOrEmpty(this.InputMask)) + textBox.Mask = this.InputMask; + textBox.SelectionStart = 0; + textBox.SelectionLength = textBox.Text.Length; + textBox.BorderStyle = BorderStyle.FixedSingle; + Color bc = textBox.BackColor; + if (_readOnly) textBox.ReadOnly = true; + textBox.BackColor = bc; + textBox.TextChanged += new EventHandler(MaskOrComboTextChanged); + if (_icon != null) picture.Image = _icon; + picture.SizeMode = PictureBoxSizeMode.StretchImage; + + buttonOk.Text = pOk_Text; + buttonCancel.Text = pCancel_Text; + buttonOk.DialogResult = DialogResult.OK; + buttonCancel.DialogResult = DialogResult.Cancel; + + label.SetBounds(9, 20, defWidth - 24, 13); + textBox.SetBounds(12, 36, defWidth - 24, 20); + buttonOk.SetBounds(defWidth - 168, 72, 75, 23); + buttonCancel.SetBounds(defWidth - 87, 72, 75, 23); + picture.SetBounds(12, 72, 22, 22); + + label.AutoSize = true; + textBox.Anchor = textBox.Anchor | AnchorStyles.Right; + buttonOk.Anchor = AnchorStyles.Bottom | AnchorStyles.Right; + buttonCancel.Anchor = AnchorStyles.Bottom | AnchorStyles.Right; + + form.ClientSize = new Size(defWidth, 107); + form.Controls.AddRange(new Control[] { label, textBox, buttonOk, buttonCancel, picture }); + form.ClientSize = new Size(Math.Max(defWidth, label.Right + 10), form.ClientSize.Height); + form.FormBorderStyle = FormBorderStyle.FixedDialog; + form.StartPosition = FormStartPosition.CenterParent; + form.MinimizeBox = false; + form.MaximizeBox = false; + form.AcceptButton = buttonOk; + form.CancelButton = buttonCancel; + + _result = form.ShowDialog(); + if (picture.Image != null) picture.Image.Dispose(); + form.Dispose(); + _values[0] = textBox.Text; + return _result; + } + + private DialogResult ShowMultiline() + { + Form form = new InputBoxForm(); + form.ShowInTaskbar = pShowInTaskBar; + Label label = new Label(); + TextBox textBox = new TextBox(); + Button buttonOk = new Button(); + Button buttonCancel = new Button(); + PictureBox picture = new PictureBox(); + + form.Text = _title; + label.Text = _promptText; + textBox.Text = _prevValue = _values[0]; + textBox.SelectionStart = 0; + textBox.SelectionLength = textBox.Text.Length; + textBox.BorderStyle = BorderStyle.FixedSingle; + textBox.Multiline = true; + textBox.ScrollBars = ScrollBars.Both; + Color bc = textBox.BackColor; + if (_readOnly) textBox.ReadOnly = true; + textBox.BackColor = bc; + textBox.TextChanged += new EventHandler(MaskOrComboTextChanged); + if (_icon != null) picture.Image = _icon; + picture.SizeMode = PictureBoxSizeMode.StretchImage; + + buttonOk.Text = pOk_Text; + buttonCancel.Text = pCancel_Text; + buttonOk.DialogResult = DialogResult.OK; + buttonCancel.DialogResult = DialogResult.Cancel; + + label.SetBounds(9, 20, defWidth - 24, 13); + textBox.SetBounds(12, 36, defWidth - 24, 200); + buttonOk.SetBounds(defWidth - 168, 252, 75, 23); + buttonCancel.SetBounds(defWidth - 87, 252, 75, 23); + picture.SetBounds(12, 252, 22, 22); + + label.AutoSize = true; + textBox.Anchor = textBox.Anchor | AnchorStyles.Right; + buttonOk.Anchor = AnchorStyles.Bottom | AnchorStyles.Right; + buttonCancel.Anchor = AnchorStyles.Bottom | AnchorStyles.Right; + + form.ClientSize = new Size(defWidth, 287); + form.Controls.AddRange(new Control[] { label, textBox, buttonOk, buttonCancel, picture }); + form.ClientSize = new Size(Math.Max(defWidth, label.Right + 10), form.ClientSize.Height); + form.FormBorderStyle = FormBorderStyle.FixedDialog; + form.StartPosition = FormStartPosition.CenterParent; + form.MinimizeBox = false; + form.MaximizeBox = false; + form.AcceptButton = buttonOk; + form.CancelButton = buttonCancel; + + _result = form.ShowDialog(); + if (picture.Image != null) picture.Image.Dispose(); + form.Dispose(); + _values[0] = textBox.Text; + return _result; + } + + private DialogResult ShowRegex(string testerText, bool allow_new) + { + Form form = new InputBoxForm(); + form.ShowInTaskbar = pShowInTaskBar; + Label label = new Label(); + Label labed = new Label(); + TextBox textBox = new TextBox(); + ComboBox comboBox = new ComboBox(); + TextBox testBox = new TextBox(); + Button buttonOk = new Button(); + Button buttonCancel = new Button(); + PictureBox picture = new PictureBox(); + + if (this._values.Length == 1) + { + textBox.Text = _prevValue = _values[0]; + textBox.SelectionStart = 0; + textBox.SelectionLength = textBox.Text.Length; + textBox.BorderStyle = BorderStyle.FixedSingle; + textBox.TextChanged += new EventHandler(testBox_TextChanged); + _additData[0] = textBox; + textBox.SetBounds(12, 36, defWidth - 24, 20); + textBox.Anchor = textBox.Anchor | AnchorStyles.Right; + } + else + { + comboBox.FlatStyle = FlatStyle.Flat; + comboBox.DropDownHeight = 200; + if (this._readOnly) + comboBox.DropDownStyle = ComboBoxStyle.DropDownList; + else + comboBox.DropDownStyle = ComboBoxStyle.DropDown; + foreach(string str in this._values) + comboBox.Items.Add(str); + comboBox.SelectedIndex = this._valueIndex; + this._prevValue = comboBox.Text; + comboBox.TextChanged += new EventHandler(testBox_TextChanged); + _additData[0] = comboBox; + comboBox.SetBounds(12, 36, defWidth - 24, 20); + comboBox.Anchor = textBox.Anchor | AnchorStyles.Right; + } + + form.Text = _title; + label.Text = _promptText; + labed.Text = testerText; + testBox.Text = ""; + testBox.BorderStyle = BorderStyle.FixedSingle; + testBox.TextChanged += new EventHandler(testBox_TextChanged); + if (_icon != null) picture.Image = _icon; + picture.SizeMode = PictureBoxSizeMode.StretchImage; + + buttonOk.Text = pOk_Text; + buttonCancel.Text = pCancel_Text; + buttonOk.DialogResult = DialogResult.OK; + buttonCancel.DialogResult = DialogResult.Cancel; + + label.SetBounds(9, 20, defWidth - 24, 13); + labed.SetBounds(9, 60, defWidth - 24, 13); + testBox.SetBounds(12, 76, defWidth - 24, 20); + buttonOk.SetBounds(defWidth - 168, 112, 75, 23); + buttonCancel.SetBounds(defWidth - 87, 112, 75, 23); + picture.SetBounds(12, 112, 22, 22); + + label.AutoSize = true; + labed.AutoSize = true; + buttonOk.Anchor = AnchorStyles.Bottom | AnchorStyles.Right; + buttonCancel.Anchor = AnchorStyles.Bottom | AnchorStyles.Right; + + form.ClientSize = new Size(defWidth, 147); + form.Controls.AddRange(new Control[] { label, this._values.Length == 1 ? (Control)textBox : (Control)comboBox, labed, testBox, buttonOk, buttonCancel, picture }); + form.ClientSize = new Size(Math.Max(defWidth, label.Right + 10), form.ClientSize.Height); + form.FormBorderStyle = FormBorderStyle.FixedDialog; + form.StartPosition = FormStartPosition.CenterParent; + form.MinimizeBox = false; + form.MaximizeBox = false; + form.AcceptButton = buttonOk; + form.CancelButton = buttonCancel; + + _additData[1] = testBox; + + _result = form.ShowDialog(); + if (picture.Image != null) picture.Image.Dispose(); + form.Dispose(); + if (this._values.Length == 1) + _values[0] = textBox.Text; + else + { + if (comboBox.SelectedIndex == -1) + { + List tmp = new List(this._values); + tmp.Add(comboBox.Text); + this._values = tmp.ToArray(); + this._valueIndex = this._values.Length - 1; + } + else + this._valueIndex = comboBox.SelectedIndex; + }; + return _result; + } + + private void testBox_TextChanged(object sender, EventArgs e) + { + if ((sender is TextBox) || (sender is ComboBox)) + { + Control ctrlBox = (Control)_additData[0]; + TextBox testBox = (TextBox)_additData[1]; + + try + { + Regex rx = new Regex(ctrlBox.Text.Trim()); + testBox.BackColor = rx.IsMatch(testBox.Text.Trim()) ? Color.LightGreen : Color.LightPink; + } + catch + { + testBox.BackColor = Color.LightPink; + }; + }; + } + + private DialogResult ShowComboBoxed() + { + Form form = new InputBoxForm(); + form.ShowInTaskbar = pShowInTaskBar; + Label label = new Label(); + ComboBox comboBox = new ComboBox(); + Button buttonOk = new Button(); + Button buttonCancel = new Button(); + PictureBox picture = new PictureBox(); + + form.Text = _title; + label.Text = _promptText; + comboBox.FlatStyle = FlatStyle.Flat; + comboBox.DropDownHeight = 200; + if (this._readOnly) + comboBox.DropDownStyle = ComboBoxStyle.DropDownList; + else + comboBox.DropDownStyle = ComboBoxStyle.DropDown; + foreach(string str in this._values) + comboBox.Items.Add(str); + comboBox.SelectedIndex = this._valueIndex; + this._prevValue = comboBox.Text; + comboBox.TextChanged += new EventHandler(MaskOrComboTextChanged); + if (_icon != null) picture.Image = _icon; + picture.SizeMode = PictureBoxSizeMode.StretchImage; + + buttonOk.Text = pOk_Text; + buttonCancel.Text = pCancel_Text; + buttonOk.DialogResult = DialogResult.OK; + buttonCancel.DialogResult = DialogResult.Cancel; + + label.SetBounds(9, 20, defWidth - 24, 13); + comboBox.SetBounds(12, 36, defWidth - 24, 20); + buttonOk.SetBounds(defWidth - 168, 72, 75, 23); + buttonCancel.SetBounds(defWidth - 87, 72, 75, 23); + picture.SetBounds(12, 72, 22, 22); + + label.AutoSize = true; + comboBox.Anchor = comboBox.Anchor | AnchorStyles.Right; + buttonOk.Anchor = AnchorStyles.Bottom | AnchorStyles.Right; + buttonCancel.Anchor = AnchorStyles.Bottom | AnchorStyles.Right; + + form.ClientSize = new Size(defWidth, 107); + form.Controls.AddRange(new Control[] { label, comboBox, buttonOk, buttonCancel, picture }); + form.ClientSize = new Size(Math.Max(defWidth, label.Right + 10), form.ClientSize.Height); + form.FormBorderStyle = FormBorderStyle.FixedDialog; + form.StartPosition = FormStartPosition.CenterParent; + form.MinimizeBox = false; + form.MaximizeBox = false; + form.AcceptButton = buttonOk; + form.CancelButton = buttonCancel; + + _result = form.ShowDialog(); + if (picture.Image != null) picture.Image.Dispose(); + form.Dispose(); + if (comboBox.SelectedIndex == -1) + { + List tmp = new List(this._values); + tmp.Add(comboBox.Text); + this._values = tmp.ToArray(); + this._valueIndex = this._values.Length -1; + } + else + this._valueIndex = comboBox.SelectedIndex; + return _result; + } + + private DialogResult ShowSelectDir() + { + Form form = new InputBoxForm(); + form.ShowInTaskbar = pShowInTaskBar; + Label label = new Label(); + MaskedTextBox textBox = new MaskedTextBox(); + Button buttonOk = new Button(); + Button buttonCancel = new Button(); + Button buttonAddit = new Button(); + PictureBox picture = new PictureBox(); + + form.Text = _title; + label.Text = _promptText; + textBox.Text = _values[0]; + textBox.SelectionStart = 0; + textBox.SelectionLength = textBox.Text.Length; + textBox.BorderStyle = BorderStyle.FixedSingle; + Color bc = textBox.BackColor; + if (_readOnly) textBox.ReadOnly = true; + textBox.BackColor = bc; + if (_icon != null) picture.Image = _icon; + picture.SizeMode = PictureBoxSizeMode.StretchImage; + buttonAddit.Click += new EventHandler(buttonAdditD_Click); + _additData[0] = textBox; + + buttonOk.Text = pOk_Text; + buttonCancel.Text = pCancel_Text; + buttonAddit.Text = ".."; + buttonOk.DialogResult = DialogResult.OK; + buttonCancel.DialogResult = DialogResult.Cancel; + + label.SetBounds(9, 20, defWidth - 24, 13); + textBox.SetBounds(12, 36, defWidth - 52, 20); + buttonOk.SetBounds(defWidth - 168, 72, 75, 23); + buttonCancel.SetBounds(defWidth - 87, 72, 75, 23); + buttonAddit.SetBounds(defWidth - 36, 36, 24, 20); + picture.SetBounds(12, 72, 22, 22); + + label.AutoSize = true; + textBox.Anchor = textBox.Anchor | AnchorStyles.Right; + buttonOk.Anchor = AnchorStyles.Bottom | AnchorStyles.Right; + buttonCancel.Anchor = AnchorStyles.Bottom | AnchorStyles.Right; + buttonAddit.Anchor = AnchorStyles.Bottom | AnchorStyles.Right; + + form.ClientSize = new Size(defWidth, 107); + form.Controls.AddRange(new Control[] { label, textBox, buttonAddit, buttonOk, buttonCancel, picture }); + form.ClientSize = new Size(Math.Max(defWidth, label.Right + 10), form.ClientSize.Height); + form.FormBorderStyle = FormBorderStyle.FixedDialog; + form.StartPosition = FormStartPosition.CenterParent; + form.MinimizeBox = false; + form.MaximizeBox = false; + form.AcceptButton = buttonOk; + form.CancelButton = buttonCancel; + + _result = form.ShowDialog(); + if (picture.Image != null) picture.Image.Dispose(); + form.Dispose(); + _values[0] = textBox.Text; + return _result; + } + + private DialogResult ShowSelectFile(string filter) + { + Form form = new InputBoxForm(); + form.ShowInTaskbar = pShowInTaskBar; + Label label = new Label(); + MaskedTextBox textBox = new MaskedTextBox(); + Button buttonOk = new Button(); + Button buttonCancel = new Button(); + Button buttonAddit = new Button(); + PictureBox picture = new PictureBox(); + + form.Text = _title; + label.Text = _promptText; + textBox.Text = _values[0]; + textBox.SelectionStart = 0; + textBox.SelectionLength = textBox.Text.Length; + textBox.BorderStyle = BorderStyle.FixedSingle; + Color bc = textBox.BackColor; + if (_readOnly) textBox.ReadOnly = true; + textBox.BackColor = bc; + if (_icon != null) picture.Image = _icon; + picture.SizeMode = PictureBoxSizeMode.StretchImage; + buttonAddit.Click += new EventHandler(buttonAdditF_Click); + _additData[0] = textBox; + if (String.IsNullOrEmpty(filter)) + _additData[1] = "All Types|*.*"; + else + _additData[1] = filter; + _additData[2] = _title; + + buttonOk.Text = pOk_Text; + buttonCancel.Text = pCancel_Text; + buttonAddit.Text = ".."; + buttonOk.DialogResult = DialogResult.OK; + buttonCancel.DialogResult = DialogResult.Cancel; + + label.SetBounds(9, 20, defWidth - 24, 13); + textBox.SetBounds(12, 36, defWidth - 52, 20); + buttonOk.SetBounds(defWidth - 168, 72, 75, 23); + buttonCancel.SetBounds(defWidth - 87, 72, 75, 23); + buttonAddit.SetBounds(defWidth - 36, 36, 24, 20); + picture.SetBounds(12, 72, 22, 22); + + label.AutoSize = true; + textBox.Anchor = textBox.Anchor | AnchorStyles.Right; + buttonOk.Anchor = AnchorStyles.Bottom | AnchorStyles.Right; + buttonCancel.Anchor = AnchorStyles.Bottom | AnchorStyles.Right; + buttonAddit.Anchor = AnchorStyles.Bottom | AnchorStyles.Right; + + form.ClientSize = new Size(defWidth, 107); + form.Controls.AddRange(new Control[] { label, textBox, buttonAddit, buttonOk, buttonCancel, picture }); + form.ClientSize = new Size(Math.Max(defWidth, label.Right + 10), form.ClientSize.Height); + form.FormBorderStyle = FormBorderStyle.FixedDialog; + form.StartPosition = FormStartPosition.CenterParent; + form.MinimizeBox = false; + form.MaximizeBox = false; + form.AcceptButton = buttonOk; + form.CancelButton = buttonCancel; + + _result = form.ShowDialog(); + if (picture.Image != null) picture.Image.Dispose(); + form.Dispose(); + _values[0] = textBox.Text; + return _result; + } + + private DialogResult ShowSelectColor(ref Color color) + { + Form form = new InputBoxForm(); + form.ShowInTaskbar = pShowInTaskBar; + Label label = new Label(); + MaskedTextBox textBox = new MaskedTextBox(); + Button buttonOk = new Button(); + Button buttonCancel = new Button(); + Button buttonAddit = new Button(); + PictureBox picture = new PictureBox(); + + form.Text = _title; + label.Text = _promptText; + textBox.Text = HexConverter(color); + textBox.SelectionStart = 0; + textBox.SelectionLength = textBox.Text.Length; + textBox.BorderStyle = BorderStyle.FixedSingle; + textBox.Mask = @"\#AAAAAA"; + this.InputRegex = @"^(#[\dA-Fa-f]{0,6})$"; + textBox.TextChanged += new EventHandler(colorBox_TextChanged); + if (_icon != null) picture.Image = _icon; + picture.SizeMode = PictureBoxSizeMode.StretchImage; + buttonAddit.Text = ".."; + buttonAddit.FlatStyle = FlatStyle.Flat; + buttonAddit.BackColor = color; + buttonAddit.Click += new EventHandler(buttonAdditC_Click); + _additData[0] = textBox; + _additData[1] = buttonAddit; + + buttonOk.Text = pOk_Text; + buttonCancel.Text = pCancel_Text; + buttonAddit.Text = ".."; + buttonOk.DialogResult = DialogResult.OK; + buttonCancel.DialogResult = DialogResult.Cancel; + + label.SetBounds(9, 20, defWidth - 24, 13); + textBox.SetBounds(12, 36, defWidth - 52, 20); + buttonOk.SetBounds(defWidth - 168, 72, 75, 23); + buttonCancel.SetBounds(defWidth - 87, 72, 75, 23); + buttonAddit.SetBounds(defWidth - 36, 36, 24, 20); + picture.SetBounds(12, 72, 22, 22); + + label.AutoSize = true; + textBox.Anchor = textBox.Anchor | AnchorStyles.Right; + buttonOk.Anchor = AnchorStyles.Bottom | AnchorStyles.Right; + buttonCancel.Anchor = AnchorStyles.Bottom | AnchorStyles.Right; + buttonAddit.Anchor = AnchorStyles.Bottom | AnchorStyles.Right; + + form.ClientSize = new Size(defWidth, 107); + form.Controls.AddRange(new Control[] { label, textBox, buttonAddit, buttonOk, buttonCancel, picture }); + form.ClientSize = new Size(Math.Max(defWidth, label.Right + 10), form.ClientSize.Height); + form.FormBorderStyle = FormBorderStyle.FixedDialog; + form.StartPosition = FormStartPosition.CenterParent; + form.MinimizeBox = false; + form.MaximizeBox = false; + form.AcceptButton = buttonOk; + form.CancelButton = buttonCancel; + + _result = form.ShowDialog(); + if (picture.Image != null) picture.Image.Dispose(); + form.Dispose(); + color = RGBConverter(textBox.Text); + return _result; + } + + private void colorBox_TextChanged(object sender, EventArgs e) + { + ((Button)_additData[1]).BackColor = RGBConverter((string)((MaskedTextBox)_additData[0]).Text); + } + + private void buttonAdditC_Click(object sender, EventArgs e) + { + System.Windows.Forms.ColorDialog cd = new System.Windows.Forms.ColorDialog(); + cd.FullOpen = true; + cd.Color = RGBConverter((string)((MaskedTextBox)_additData[0]).Text); + if (cd.ShowDialog() == DialogResult.OK) + { + ((MaskedTextBox)_additData[0]).Text = HexConverter(cd.Color); + ((Button)_additData[1]).BackColor = cd.Color; + }; + cd.Dispose(); + } + + private void buttonAdditF_Click(object sender, EventArgs e) + { + OpenFileDialog ofd = new OpenFileDialog(); + ofd.FileName = ((MaskedTextBox)_additData[0]).Text; + ofd.Title = (string)_additData[2]; + ofd.Filter = (string)_additData[1]; + ofd.FileName = (string)((MaskedTextBox)_additData[0]).Text; + try + { + if (ofd.ShowDialog() == DialogResult.OK) + ((MaskedTextBox)_additData[0]).Text = ofd.FileName; + } + catch + { + ofd.FileName = ""; + if (ofd.ShowDialog() == DialogResult.OK) + ((MaskedTextBox)_additData[0]).Text = ofd.FileName; + }; + ofd.Dispose(); + } + + private void buttonAdditD_Click(object sender, EventArgs e) + { + FolderBrowserDialog fbd = new FolderBrowserDialog(); + fbd.SelectedPath = (string)((MaskedTextBox)_additData[0]).Text; + if (fbd.ShowDialog() == DialogResult.OK) + ((MaskedTextBox)_additData[0]).Text = fbd.SelectedPath; + fbd.Dispose(); + } + + private void MaskOrComboTextChanged(object sender, EventArgs e) + { + if (String.IsNullOrEmpty(InputRegex)) return; + + if (sender is MaskedTextBox) + { + MaskedTextBox tb = (MaskedTextBox)sender; + int index = tb.SelectionStart > 0 ? tb.SelectionStart - 1 : 0; + if (String.IsNullOrEmpty(tb.Text)) return; + if (Regex.IsMatch(tb.Text, InputRegex)) + { + _prevValue = tb.Text; + return; + } + else + { + tb.Text = _prevValue; + tb.SelectionStart = index; + }; + }; + if (sender is ComboBox) + { + ComboBox cb = (ComboBox)sender; + int index = cb.SelectionStart > 0 ? cb.SelectionStart - 1 : 0; + if (String.IsNullOrEmpty(cb.Text)) return; + if (Regex.IsMatch(cb.Text, InputRegex)) + { + _prevValue = cb.Text; + return; + } + else + { + cb.Text = _prevValue; + cb.SelectionStart = index; + }; + }; + } + + ///