From 3e48c33ae76a7f110de0b940384c24043fbc5f09 Mon Sep 17 00:00:00 2001 From: Sun Serega Date: Mon, 14 Aug 2023 00:32:18 +0300 Subject: [PATCH] fix index --- .gitignore | 27 +- .../DLL/Errors.dll | Bin 8192 -> 0 bytes .../DLL/Localization.dll | Bin 98304 -> 0 bytes .../DLL/ParserTools.dll | Bin 204800 -> 0 bytes .../DLL/SyntaxTree.dll | Bin 221184 -> 0 bytes .../GPLex_GPPG/Doc/gplex.pdf | 12228 ------------- .../GPLex_GPPG/Doc/gppg.pdf | 6156 ------- .../GPLex_GPPG/Gplex.exe | Bin 240640 -> 0 bytes .../GPLex_GPPG/Gppg.exe | Bin 152064 -> 0 bytes .../GPLex_GPPG/QUT.ShiftReduceParser.dll | Bin 14848 -> 0 bytes .../GPLex_GPPG/ShiftReduceParser.dll | Bin 24576 -> 0 bytes .../GPLex_GPPG/gplexx.frame | 623 - .../GPLex_GPPG/guesser.frame | 77 - .../PascalABC.NET/Highlighting/Oberon00.xshd | 112 - .../PascalABC.NET/Lib/Oberon00System.pcu | Bin 2191 -> 0 bytes .../LibSource/Oberon00System.pas | 58 - .../LibSource/Oberon00System.pcu | Bin 2191 -> 0 bytes .../Install/PascalABC.NET/Oberon00Parser.dll | Bin 86016 -> 0 bytes .../Oberon00ParserTools.cs | 134 - .../ObrProba.csproj | 91 - .../ObrProba.sln | 44 - .../ObrProba.suo | Bin 61440 -> 0 bytes .../Oberon10Independent (by Juliet)/Parser.cs | 59 - .../Properties/AssemblyInfo.cs | 36 - .../ShiftReduceParserCode.cs | 950 - .../generateParserScanner.bat | 3 - .../generate_all.bat | 9 - .../oberon00.cs | 1702 -- .../oberon00.lex | 190 - .../oberon00.lst | 906 - .../oberon00.y | 892 - .../oberon00yacc.cs | 1353 -- ReleaseGenerators/.gitignore | 10 - .../_SVN/Pas/!MainFeatures/01_First/Amp.pas | 9 - .../Pas/!MainFeatures/01_First/AssignExt.pas | 18 - .../Pas/!MainFeatures/01_First/AutoVars.pas | 10 - .../Pas/!MainFeatures/01_First/BlockVar.pas | 11 - .../Pas/!MainFeatures/01_First/Foreach.pas | 26 - .../Pas/!MainFeatures/01_First/RandomDiap.pas | 5 - .../!MainFeatures/01_First/RealExtNums.pas | 5 - .../01_First/SimpleNewFeatures.pas | 27 - .../!MainFeatures/01_First/StandardTypes.pas | 33 - .../Pas/!MainFeatures/01_First/WriteAll.pas | 12 - .../!MainFeatures/01_First/WriteFormat.pas | 11 - .../Pas/!MainFeatures/02_Types/CharFunc.pas | 19 - .../Pas/!MainFeatures/02_Types/Dynarray.pas | 40 - .../_SVN/Pas/!MainFeatures/02_Types/Enum.pas | 25 - .../!MainFeatures/02_Types/InitRecords.pas | 15 - .../!MainFeatures/02_Types/PointerToRef.pas | 10 - .../02_Types/PointersVsRef/Pointers.pas | 43 - .../02_Types/PointersVsRef/References.pas | 35 - .../_SVN/Pas/!MainFeatures/02_Types/Sets.pas | 15 - .../!MainFeatures/02_Types/StringInteger.pas | 16 - .../!MainFeatures/02_Types/StringMethods.pas | 18 - .../!MainFeatures/02_Types/StringTypes.pas | 17 - .../02_Types/StructTypeEquiv.pas | 23 - .../!MainFeatures/02_Types/UntypedFile.pas | 19 - .../_SVN/Pas/!MainFeatures/02_Types/a.dat | Bin 18 -> 0 bytes .../03_Subroutines/FuncParams.pas | 12 - .../!MainFeatures/03_Subroutines/Overload.pas | 21 - .../!MainFeatures/03_Subroutines/ProcVars.pas | 39 - .../!MainFeatures/03_Subroutines/SwapT.pas | 23 - .../!MainFeatures/04_Units/CallC#/CallCS.pas | 9 - .../04_Units/CallC#/ClassLibrary1.dll | Bin 16384 -> 0 bytes .../!MainFeatures/04_Units/DllTest/MyDll.dll | Bin 16384 -> 0 bytes .../!MainFeatures/04_Units/DllTest/MyDll.pas | 16 - .../!MainFeatures/04_Units/DllTest/main.pas | 10 - .../04_Units/NativeDll/CallNative.pas | 6 - .../04_Units/NativeDll/NativeDll.dll | Bin 14336 -> 0 bytes .../04_Units/NativeDll/NativeDll.dpr | 13 - .../04_Units/SimpleUnit/MainProgram.pas | 7 - .../04_Units/SimpleUnit/MyUnit.pas | 14 - .../04_Units/SimpleUnit/MyUnit.pcu | Bin 795 -> 0 bytes .../!MainFeatures/04_Units/SystemUnitTest.pas | 12 - .../_SVN/Pas/!MainFeatures/05_Graph/ABC.pas | 41 - .../!MainFeatures/05_Graph/GraphABCTest.pas | 19 - .../!MainFeatures/05_Graph/MouseEvents.pas | 19 - .../06_Classes/AllFromObject.pas | 14 - .../Pas/!MainFeatures/06_Classes/Boxing.pas | 22 - .../06_Classes/ClassConstructor.pas | 36 - .../06_Classes/GarbageCollection.pas | 13 - .../Pas/!MainFeatures/06_Classes/Interf.pas | 42 - .../06_Classes/OperatorOverloading.pas | 54 - .../06_Classes/PersonInternal.pas | 30 - .../Pas/!MainFeatures/06_Classes/Records.pas | 26 - .../Pas/!MainFeatures/06_Classes/Stack.pas | 56 - .../Pas/!MainFeatures/06_Classes/Where.pas | 21 - .../!MainFeatures/06_Classes/WriteRecord.pas | 26 - .../Pas/!MainFeatures/07_NetLibs/DateTime.pas | 31 - .../07_NetLibs/FormWebBrowser.pas | 17 - .../!MainFeatures/07_NetLibs/LinkedList.pas | 27 - .../!MainFeatures/07_NetLibs/Reflection.pas | 11 - .../07_NetLibs/WinFormWithButton.pas | 29 - .../_SVN/Pas/!Tutorial/01_First/Assign1.pas | 12 - .../_SVN/Pas/!Tutorial/01_First/Assign2.pas | 12 - .../_SVN/Pas/!Tutorial/01_First/AssignExt.pas | 18 - .../_SVN/Pas/!Tutorial/01_First/Boolean1.pas | 16 - .../Pas/!Tutorial/01_First/Calculations1.pas | 10 - .../Pas/!Tutorial/01_First/Calculations2.pas | 13 - .../Pas/!Tutorial/01_First/Calculations3.pas | 12 - .../_SVN/Pas/!Tutorial/01_First/DivMod1.pas | 10 - .../_SVN/Pas/!Tutorial/01_First/DivMod2.pas | 13 - .../Pas/!Tutorial/01_First/HelloWorld.pas | 5 - .../_SVN/Pas/!Tutorial/01_First/Random1.pas | 13 - .../_SVN/Pas/!Tutorial/01_First/Random2.pas | 10 - .../Pas/!Tutorial/01_First/ReadString.pas | 8 - .../_SVN/Pas/!Tutorial/01_First/Shl.pas | 8 - .../_SVN/Pas/!Tutorial/01_First/StandFun.pas | 14 - .../Pas/!Tutorial/01_First/StandardTypes.pas | 33 - .../Pas/!Tutorial/01_First/StringPlus.pas | 8 - .../Pas/!Tutorial/01_First/WriteFormat.pas | 11 - .../!Tutorial/02_Errors/CompilerError1.pas | 8 - .../!Tutorial/02_Errors/CompilerError2.pas | 5 - .../!Tutorial/02_Errors/CompilerError3.pas | 8 - .../!Tutorial/02_Errors/CompilerError4.pas | 6 - .../Pas/!Tutorial/02_Errors/RuntimeError1.pas | 7 - .../Pas/!Tutorial/02_Errors/RuntimeError2.pas | 6 - .../Pas/!Tutorial/02_Errors/RuntimeError3.pas | 6 - .../Pas/!Tutorial/02_Errors/RuntimeError4.pas | 4 - .../Pas/!Tutorial/03_Robot_Drawman/DMa1.pas | 14 - .../Pas/!Tutorial/03_Robot_Drawman/RBa1.pas | 16 - .../_SVN/Pas/!Tutorial/04_Graphics/Gr1.pas | 8 - .../_SVN/Pas/!Tutorial/04_Graphics/Gr2.pas | 8 - .../_SVN/Pas/!Tutorial/04_Graphics/Gr3.pas | 14 - .../_SVN/Pas/!Tutorial/04_Graphics/Gr4.pas | 22 - .../_SVN/Pas/!Tutorial/04_Graphics/Gr5.pas | 20 - .../_SVN/Pas/!Tutorial/04_Graphics/Gr6.pas | 19 - .../_SVN/Pas/!Tutorial/04_Graphics/Gr7.pas | 24 - .../_SVN/Pas/!Tutorial/04_Graphics/Gr8.pas | 18 - .../Pas/!Tutorial/04_Graphics/GrAnim1.pas | 14 - .../Pas/!Tutorial/04_Graphics/GrAnim2.pas | 18 - .../Pas/!Tutorial/04_Graphics/GrCoord1.pas | 19 - .../Pas/!Tutorial/04_Graphics/GrCoord2.pas | 15 - .../Pas/!Tutorial/04_Graphics/GrCoord3.pas | 17 - .../Pas/!Tutorial/04_Graphics/GrFont1.pas | 23 - .../Pas/!Tutorial/04_Graphics/GrFont2.pas | 16 - .../_SVN/Pas/!Tutorial/04_Graphics/GrPoly.pas | 18 - .../Pas/!Tutorial/04_Graphics/GraphWindow.bmp | Bin 211619 -> 0 bytes .../Pas/!Tutorial/04a_ABCObjects/ABC1.pas | 40 - .../Pas/!Tutorial/05_IfCaseBoolean/Case1.pas | 15 - .../Pas/!Tutorial/05_IfCaseBoolean/Case2.pas | 12 - .../Pas/!Tutorial/05_IfCaseBoolean/Case3.pas | 12 - .../Pas/!Tutorial/05_IfCaseBoolean/Case4.pas | 14 - .../Pas/!Tutorial/05_IfCaseBoolean/If1.pas | 10 - .../Pas/!Tutorial/05_IfCaseBoolean/If2.pas | 9 - .../Pas/!Tutorial/05_IfCaseBoolean/If3.pas | 14 - .../Pas/!Tutorial/05_IfCaseBoolean/If4.pas | 18 - .../Pas/!Tutorial/05_IfCaseBoolean/If5.pas | 19 - .../Pas/!Tutorial/06_ForWhileRepeat/For1.pas | 22 - .../Pas/!Tutorial/06_ForWhileRepeat/For1a.pas | 38 - .../Pas/!Tutorial/06_ForWhileRepeat/For2.pas | 15 - .../Pas/!Tutorial/06_ForWhileRepeat/For3.pas | 11 - .../Pas/!Tutorial/06_ForWhileRepeat/For4.pas | 9 - .../Pas/!Tutorial/06_ForWhileRepeat/For5.pas | 13 - .../Pas/!Tutorial/06_ForWhileRepeat/For6.pas | 15 - .../Pas/!Tutorial/06_ForWhileRepeat/For7.pas | 17 - .../Pas/!Tutorial/06_ForWhileRepeat/For8.pas | 17 - .../Pas/!Tutorial/06_ForWhileRepeat/For9.pas | 26 - .../!Tutorial/06_ForWhileRepeat/ForFor1.pas | 12 - .../!Tutorial/06_ForWhileRepeat/ForFor2.pas | 20 - .../!Tutorial/06_ForWhileRepeat/ForGra1.pas | 16 - .../Pas/!Tutorial/06_ForWhileRepeat/algo1.pas | 21 - .../Pas/!Tutorial/06_ForWhileRepeat/algo2.pas | 21 - .../!Tutorial/06_ForWhileRepeat/repeat1.pas | 12 - .../!Tutorial/06_ForWhileRepeat/repeat2.pas | 13 - .../!Tutorial/06_ForWhileRepeat/while1.pas | 12 - .../!Tutorial/06_ForWhileRepeat/while2.pas | 12 - .../!Tutorial/06_ForWhileRepeat/while3.pas | 18 - .../Pas/!Tutorial/07_CharString/Char1.pas | 13 - .../Pas/!Tutorial/07_CharString/Char2.pas | 13 - .../Pas/!Tutorial/07_CharString/Char3.pas | 9 - .../Pas/!Tutorial/07_CharString/CharTable.pas | 8 - .../Pas/!Tutorial/07_CharString/String1.pas | 12 - .../Pas/!Tutorial/07_CharString/String2.pas | 14 - .../Pas/!Tutorial/07_CharString/String3.pas | 12 - .../Pas/!Tutorial/07_CharString/String4.pas | 12 - .../Pas/!Tutorial/07_CharString/String5.pas | 18 - .../Pas/!Tutorial/07_CharString/String6.pas | 18 - .../07_CharString/StringInteger1.pas | 16 - .../07_CharString/StringInteger2.pas | 18 - .../07_CharString/StringInteger3.pas | 16 - .../!Tutorial/07_CharString/StringReal1.pas | 16 - .../Pas/!Tutorial/07_CharString/UpLowCase.pas | 22 - .../_SVN/Pas/!Tutorial/08_ProcFunc/Fun1.pas | 22 - .../_SVN/Pas/!Tutorial/08_ProcFunc/Fun2.pas | 17 - .../_SVN/Pas/!Tutorial/08_ProcFunc/Proc1.pas | 17 - .../_SVN/Pas/!Tutorial/08_ProcFunc/Proc2.pas | 22 - .../_SVN/Pas/!Tutorial/08_ProcFunc/Proc3.pas | 26 - .../_SVN/Pas/!Tutorial/09_Arrays/DynArr1.pas | 14 - .../_SVN/Pas/!Tutorial/09_Arrays/DynArr2.pas | 17 - .../_SVN/Pas/!Tutorial/09_Arrays/DynArr3.pas | 17 - .../_SVN/Pas/!Tutorial/09_Arrays/DynArr4.pas | 23 - .../Pas/!Tutorial/09_Arrays/DynArrErr1.pas | 6 - .../Pas/!Tutorial/09_Arrays/DynArrErr2.pas | 7 - .../Pas/!Tutorial/09_Arrays/SortByChoice.pas | 42 - .../Pas/!Tutorial/09_Arrays/StaticArr1.pas | 12 - .../Pas/!Tutorial/09_Arrays/StaticArr2.pas | 24 - .../Pas/!Tutorial/09_Arrays/StaticArr3.pas | 41 - .../09_Units/UnitInitFin/MainInitFinDemo.pas | 7 - .../!Tutorial/09_Units/UnitInitFin/MyUnit.pas | 7 - .../09_Units/UnitNames/MainSameNames.pas | 7 - .../Pas/!Tutorial/09_Units/UnitNames/MyA.pas | 10 - .../Pas/!Tutorial/09_Units/UnitNames/MyB.pas | 10 - .../Pas/!Tutorial/09_Units/UnitNames/MyB.pcu | Bin 401 -> 0 bytes .../09_Units/UnitStructure/MainProgram.pas | 13 - .../09_Units/UnitStructure/MyUnit.pas | 35 - .../09_Units/UnitStructure/MyUnit.pcu | Bin 3682 -> 0 bytes .../_SVN/Pas/!Tutorial/10_Matrices/Matr1.pas | 40 - .../_SVN/Pas/!Tutorial/10_Matrices/Matr2.pas | 37 - .../_SVN/Pas/!Tutorial/11_Enums/Enum1.pas | 25 - .../_SVN/Pas/!Tutorial/11_Enums/Enum2.pas | 22 - .../_SVN/Pas/!Tutorial/12_Files/File1.pas | 35 - .../_SVN/Pas/!Tutorial/12_Files/File2.pas | 23 - .../_SVN/Pas/!Tutorial/12_Files/Text1.pas | 15 - .../_SVN/Pas/!Tutorial/12_Files/Text2.pas | 13 - .../_SVN/Pas/!Tutorial/12_Files/Text3.pas | 19 - .../_SVN/Pas/!Tutorial/12_Files/Untyped1.pas | 52 - .../_SVN/Pas/!Tutorial/12_Files/str.dat | 0 .../Pas/!Tutorial/13_Pointers/Pointer1.pas | 16 - .../Pas/!Tutorial/13_Pointers/Pointer2.pas | 22 - .../Pas/!Tutorial/13_Pointers/Pointer3.pas | 11 - .../Pas/!Tutorial/13_Pointers/Pointer4.pas | 43 - .../!Tutorial/13_Pointers/ProcPointer1.pas | 21 - .../!Tutorial/13_Pointers/ProcPointer2.pas | 27 - .../Pas/!Tutorial/13_Pointers/Reference.pas | 34 - .../_SVN/Pas/!Tutorial/14_Records/Rec1.pas | 35 - .../_SVN/Pas/!Tutorial/14_Records/Rec2.pas | 26 - .../Pas/!Tutorial/15_Classes/Inheritance1.pas | 66 - .../!Tutorial/15_Classes/PersonExternal.pas | 30 - .../!Tutorial/15_Classes/PersonInternal.pas | 30 - .../Pas/!Tutorial/15_Classes/Properties.pas | 35 - .../_SVN/Pas/!Tutorial/16_Exceptions/Try1.pas | 14 - .../_SVN/Pas/!Tutorial/16_Exceptions/Try2.pas | 15 - .../_SVN/Pas/!Tutorial/16_Exceptions/Try3.pas | 15 - .../_SVN/Pas/!Tutorial/16_Exceptions/Try4.pas | 11 - .../Pas/!Tutorial/17_Interfaces/Interf1.pas | 61 - .../Pas/!Tutorial/17_Interfaces/Interf2.pas | 48 - .../_SVN/Pas/!Tutorial/18_Dll/Main.pas | 12 - .../_SVN/Pas/!Tutorial/18_Dll/MyLib.dll | Bin 6656 -> 0 bytes .../_SVN/Pas/!Tutorial/18_Dll/MyLib.pas | 26 - .../_SVN/Pas/Algorithms/Eratosphen.pas | 26 - .../Samples/_SVN/Pas/Algorithms/MazeGen.pas | 106 - .../Pas/Algorithms/Recursion/ESquares.pas | 27 - .../_SVN/Pas/Algorithms/Recursion/Hanoi.pas | 121 - .../Pas/Algorithms/Recursion/Knapsack.pas | 57 - .../Pas/Algorithms/Recursion/TreeDraw.pas | 27 - .../Pas/Algorithms/Simple/SimpleNumbers.pas | 21 - .../Pas/Algorithms/SortArrays/ArrayLib.pas | 33 - .../Pas/Algorithms/SortArrays/QuickSort.pas | 55 - .../Algorithms/SortArrays/SortByChoice.pas | 37 - .../_SVN/Pas/Applications/Games/15.pas | 179 - .../Applications/Games/Animals/Animals.pas | 96 - .../Games/Animals/animals_data.txt | 147 - .../_SVN/Pas/Applications/Games/Battle.pas | 318 - .../Games/BookWorm/BookWormABCNET.pas | 226 - .../Pas/Applications/Games/BookWorm/words.txt | 14842 ---------------- .../Pas/Applications/Games/DeleteByMouse.pas | 56 - .../_SVN/Pas/Applications/Games/KillThem.pas | 238 - .../_SVN/Pas/Applications/Games/Life.pas | 318 - .../_SVN/Pas/Applications/Games/Matches.pas | 45 - .../_SVN/Pas/Applications/Games/NewLife.pas | 347 - .../GraphApplications/Paporotnik/Main.pas | 22 - .../Paporotnik/Paporotnik.pas | 51 - .../Paporotnik/PaporotnikData.pas | 41 - .../_SVN/Pas/CheckedTasks/DrawMan/DMpp17.pas | 27 - .../DrawMan/DrawManMakeTask/DMMy1.pas | 5 - .../DrawManMakeTask/DrawManAddTasks.pas | 24 - .../Pas/CheckedTasks/DrawMan/random_DM.pas | 16 - .../_SVN/Pas/CheckedTasks/PT4/Dynamic2.pas | 18 - .../_SVN/Pas/CheckedTasks/PT4/File48.pas | 24 - .../CheckedTasks/PT4/PT4TaskMaker/PT4Demo.pas | 312 - .../CheckedTasks/PT4/PT4TaskMaker/PT4Demo.pcu | Bin 25123 -> 0 bytes .../PT4/PT4TaskMaker/PT4DemoTest.pas | 7 - .../PT4/PT4TaskMaker/PT4Tasks.html | 53 - .../CheckedTasks/PT4/PT4TaskMaker/results.abc | 1 - .../_SVN/Pas/CheckedTasks/PT4/String9.pas | 15 - .../_SVN/Pas/CheckedTasks/Robot/RBcc17.pas | 23 - .../Robot/RobotMakeTask/RBMy1.pas | 5 - .../Robot/RobotMakeTask/RobotAddTasks.pas | 18 - .../Pas/CheckedTasks/Robot/random_Robot.pas | 17 - .../_SVN/Pas/LanguageFeatures/Boxing.pas | 22 - .../Pas/LanguageFeatures/ClassConstructor.pas | 36 - .../Pas/LanguageFeatures/DllTest/MyDll.dll | Bin 16384 -> 0 bytes .../Pas/LanguageFeatures/DllTest/MyDll.pas | 16 - .../Pas/LanguageFeatures/DllTest/main.pas | 10 - .../Pas/LanguageFeatures/ForeachExamples.pas | 44 - .../Pas/LanguageFeatures/ForeachForSet.pas | 5 - .../LanguageFeatures/ForeachIEnumerable.pas | 51 - .../LanguageFeatures/FracOperatorOverload.pas | 36 - .../Generics/GenericClasses/Stack.pas | 56 - .../Generics/GenericProcFun/FindT.pas | 21 - .../Generics/GenericProcFun/SwapT.pas | 17 - .../Pas/LanguageFeatures/IndexProperties.pas | 76 - .../Pas/LanguageFeatures/ParamsConcat.pas | 13 - .../Pas/LanguageFeatures/ParamsWriteln.pas | 17 - .../_SVN/Pas/LanguageFeatures/ProcParam.pas | 27 - .../_SVN/Pas/LanguageFeatures/ProcVars.pas | 36 - .../_SVN/Pas/LanguageFeatures/Students.pas | 39 - .../Pas/LanguageFeatures/TemplatePair.pas | 39 - .../_SVN/Pas/LanguageFeatures/WriteRecord.pas | 26 - .../System.Array/SystemArray1.pas | 37 - .../System.DateTime/DateTime1.pas | 32 - .../System.DateTime/DateTime2.pas | 34 - .../System.DateTime/DateTimeInterval.pas | 16 - .../System.String/StringConvert.pas | 25 - .../System.String/StringMethods1.pas | 30 - .../System.String/StringMethods2.pas | 37 - .../System.String/StringSplit.pas | 26 - .../System.Timers.Timer/SystemTimer.pas | 31 - .../System.Windows.Forms/FormWebBrowser.pas | 17 - .../System.Windows.Forms/MouseDraw.pas | 52 - .../System.Windows.Forms/TextEditor/Open.png | Bin 575 -> 0 bytes .../System.Windows.Forms/TextEditor/Save.png | Bin 535 -> 0 bytes .../TextEditor/TextEditor.pas | 91 - .../System.Windows.Forms/TextEditor/Thumbs.db | Bin 4096 -> 0 bytes .../WinFormWithButton.pas | 29 - .../CalculationsGlobalLocal/BlockVars.pas | 15 - .../CalculationsGlobalLocal/GlobalVars.pas | 17 - .../_SVN/Pas/Other/SpeedTests/Milli.pas | 13 - .../Pas/Other/UnmanagedGraphics/GraphTest.dll | Bin 369152 -> 0 bytes .../_SVN/Pas/Other/UnmanagedGraphics/Mand.pas | 50 - .../Other/UnmanagedGraphics/MessageBox.pas | 6 - .../Sprites/SpriteFrames/multi1.bmp | Bin 30054 -> 0 bytes .../Sprites/SpriteFrames/multi2.bmp | Bin 30054 -> 0 bytes .../Sprites/SpriteFrames/multi3.bmp | Bin 30054 -> 0 bytes .../Sprites/SpriteFrames/multi4.bmp | Bin 30054 -> 0 bytes .../Sprites/SpriteFrames/multi5.bmp | Bin 30054 -> 0 bytes .../ABCObjects/Sprites/gr_SpriteCreation.pas | 29 - .../ABCObjects/Sprites/gr_SpriteUsing.pas | 27 - .../StandardUnits/ABCObjects/Sprites/spr.png | Bin 3689 -> 0 bytes .../ABCObjects/Sprites/spr.spinf | 7 - .../Pas/StandardUnits/ABCObjects/demo.bmp | Bin 11754 -> 0 bytes .../StandardUnits/ABCObjects/gr_All_Brown.pas | 43 - .../ABCObjects/gr_Clone_Recur.pas | 31 - .../ABCObjects/gr_DragPicture.pas | 40 - .../StandardUnits/ABCObjects/gr_Intersect.pas | 28 - .../ABCObjects/gr_Move_Param.pas | 70 - .../ABCObjects/gr_MovingObjects.pas | 51 - .../ABCObjects/gr_PictureScale.pas | 38 - .../ABCObjects/gr_RealNumber.pas | 21 - .../ABCObjects/gr_StandardColors.pas | 144 - .../ABCObjects/gr_Star_Rotate.pas | 18 - .../Pas/StandardUnits/ABCObjects/gr_Text.pas | 17 - .../_SVN/Pas/StandardUnits/CRT/Bill.pas | 145 - .../_SVN/Pas/StandardUnits/CRT/CPaint.pas | 70 - .../_SVN/Pas/StandardUnits/CRT/CRTColors.pas | 20 - .../StandardUnits/CRT/SimpleTextEditor.pas | 17 - .../StandardUnits/GraphABC/AnalogClock.pas | 14 - .../_SVN/Pas/StandardUnits/GraphABC/Flame.pas | 66 - .../GraphABC/Fractals/Dragon.pas | 70 - .../GraphABC/Fractals/Mandelbrot.pas | 42 - .../GraphABC/Fractals/Paporotnik/Main.pas | 22 - .../Fractals/Paporotnik/Paporotnik.pas | 51 - .../Fractals/Paporotnik/PaporotnikData.pas | 41 - .../GraphABC/Fractals/Paporotnik1.pas | 42 - .../Pas/StandardUnits/GraphABC/Mosaic.pas | 51 - .../Pas/StandardUnits/GraphABC/SetPixel.pas | 7 - .../_SVN/Pas/StandardUnits/GraphABC/Star.pas | 17 - .../Pas/StandardUnits/GraphABC/graph3d.pas | 64 - .../Pas/StandardUnits/GraphABC/graphic.pas | 82 - .../_SVN/Pas/StandardUnits/GraphABC/rain.pas | 27 - .../_SVN/Pas/StandardUnits/Timers/Timer1.pas | 21 - .../_SVN/Pas/StandardUnits/Timers/Timer2.pas | 59 - TestSuite/.gitignore | 27 - TestSuite/CompilationSamples/Controls.pas | 1503 ++ TestSuite/CompilationSamples/LightPT.pas | 3083 ++++ TestSuite/CompilationSamples/NUnitABC.pas | 71 + TestSuite/CompilationSamples/PT4Databases.pas | 509 + TestSuite/CompilationSamples/Speech.pas | 32 + TestSuite/CompilationSamples/Tasks.pas | 15 + TestSuite/CompilationSamples/Tasks1Arr.pas | 258 + TestSuite/CompilationSamples/Tasks1Begin.pas | 235 + .../CompilationSamples/Tasks1BoolIfCase.pas | 435 + TestSuite/CompilationSamples/Tasks1Loops.pas | 865 + TestSuite/CompilationSamples/TasksArr.pas | 754 + TestSuite/CompilationSamples/TasksMatr.pas | 105 + TestSuite/CompilationSamples/TasksStr.pas | 356 + TestSuite/CompilationSamples/Turtle.pas | 52 + TestSuite/CompilationSamples/TurtleWPF.pas | 272 + .../CompilationSamples/TwoPanelsWindow.pas | 109 + TestSuite/CompilationSamples/XLSX.pas | 290 + .../CompilationSamples/xPT4MakerNetX.pas | 1692 ++ .../CompilationSamples/xPT4TaskMakerNET.pas | 1233 ++ .../CompilationSamples/Мозаика.pas | 477 + .../CompilationSamples/МозаикаABC.pas | 478 + .../bin/Debug/NodesGenerator.pdb | Bin 142848 -> 0 bytes .../Scintilla/ScintillaNET.pdb | Bin 1181184 -> 0 bytes .../Scintilla/Sources/bin/Debug/SCide.pdb | Bin 91648 -> 0 bytes .../Sources/bin/Debug/ScintillaNET.pdb | Bin 1383936 -> 0 bytes W/Debug_Folder/ConsoleApp1.exe | Bin 4096 -> 0 bytes W/Debug_Folder/ConsoleApp1.exe.config | 14 - W/Debug_Folder/ConsoleApp1.pdb | Bin 19968 -> 0 bytes W/Debug_Folder/CpuMathNative.dll | Bin 42152 -> 0 bytes W/Debug_Folder/LdaNative.dll | Bin 165032 -> 0 bytes W/Debug_Folder/Microsoft.ML.Core.dll | Bin 416936 -> 0 bytes W/Debug_Folder/Microsoft.ML.Core.xml | 6902 ------- W/Debug_Folder/Microsoft.ML.CpuMath.dll | Bin 63144 -> 0 bytes W/Debug_Folder/Microsoft.ML.CpuMath.xml | 686 - W/Debug_Folder/Microsoft.ML.Data.dll | Bin 1563816 -> 0 bytes W/Debug_Folder/Microsoft.ML.Data.xml | 14072 --------------- W/Debug_Folder/Microsoft.ML.DataView.dll | Bin 48296 -> 0 bytes W/Debug_Folder/Microsoft.ML.DataView.xml | 1156 -- .../Microsoft.ML.KMeansClustering.dll | Bin 56488 -> 0 bytes .../Microsoft.ML.KMeansClustering.xml | 383 - W/Debug_Folder/Microsoft.ML.PCA.dll | Bin 53416 -> 0 bytes W/Debug_Folder/Microsoft.ML.PCA.xml | 330 - .../Microsoft.ML.StandardTrainers.dll | Bin 326312 -> 0 bytes .../Microsoft.ML.StandardTrainers.xml | 4565 ----- W/Debug_Folder/Microsoft.ML.Transforms.dll | Bin 772776 -> 0 bytes W/Debug_Folder/Microsoft.ML.Transforms.xml | 7777 -------- W/Debug_Folder/Microsoft.ML.dll | Bin 15016 -> 0 bytes W/Debug_Folder/Microsoft.ML.xml | 8 - W/Debug_Folder/Newtonsoft.Json.dll | Bin 701992 -> 0 bytes W/Debug_Folder/Newtonsoft.Json.xml | 11305 ------------ W/Debug_Folder/System.Buffers.dll | Bin 27992 -> 0 bytes W/Debug_Folder/System.Buffers.xml | 39 - W/Debug_Folder/System.CodeDom.dll | Bin 33936 -> 0 bytes .../System.Collections.Immutable.dll | Bin 302216 -> 0 bytes .../System.Collections.Immutable.xml | 4908 ----- W/Debug_Folder/System.Memory.dll | Bin 148760 -> 0 bytes W/Debug_Folder/System.Memory.xml | 355 - W/Debug_Folder/System.Numerics.Vectors.dll | Bin 115936 -> 0 bytes W/Debug_Folder/System.Numerics.Vectors.xml | 2597 --- ...System.Runtime.CompilerServices.Unsafe.dll | Bin 16768 -> 0 bytes ...System.Runtime.CompilerServices.Unsafe.xml | 200 - W/Debug_Folder/System.Threading.Channels.dll | Bin 45952 -> 0 bytes W/Debug_Folder/System.Threading.Channels.xml | 217 - .../System.Threading.Tasks.Extensions.dll | Bin 25984 -> 0 bytes .../System.Threading.Tasks.Extensions.xml | 166 - W/Debug_Folder/a.pas | 38 - W/Debug_Folder/a1.pas | 11 - W/Debug_Folder/iris-full.txt | 152 - bin/GitIgnoreTester.pas | 2 +- bin/ICSharpCode.Core.xml | 1544 ++ bin/Lib/ABCObjects.xml | 567 + bin/Lib/CRT.xml | 97 + bin/Lib/GraphABC.xml | 915 + bin/Lib/PABCSystem.xml | 4322 +++++ 438 files changed, 20275 insertions(+), 105954 deletions(-) delete mode 100644 Grammars/Oberon10Independent (by Juliet)/DLL/Errors.dll delete mode 100644 Grammars/Oberon10Independent (by Juliet)/DLL/Localization.dll delete mode 100644 Grammars/Oberon10Independent (by Juliet)/DLL/ParserTools.dll delete mode 100644 Grammars/Oberon10Independent (by Juliet)/DLL/SyntaxTree.dll delete mode 100644 Grammars/Oberon10Independent (by Juliet)/GPLex_GPPG/Doc/gplex.pdf delete mode 100644 Grammars/Oberon10Independent (by Juliet)/GPLex_GPPG/Doc/gppg.pdf delete mode 100644 Grammars/Oberon10Independent (by Juliet)/GPLex_GPPG/Gplex.exe delete mode 100644 Grammars/Oberon10Independent (by Juliet)/GPLex_GPPG/Gppg.exe delete mode 100644 Grammars/Oberon10Independent (by Juliet)/GPLex_GPPG/QUT.ShiftReduceParser.dll delete mode 100644 Grammars/Oberon10Independent (by Juliet)/GPLex_GPPG/ShiftReduceParser.dll delete mode 100644 Grammars/Oberon10Independent (by Juliet)/GPLex_GPPG/gplexx.frame delete mode 100644 Grammars/Oberon10Independent (by Juliet)/GPLex_GPPG/guesser.frame delete mode 100644 Grammars/Oberon10Independent (by Juliet)/Install/PascalABC.NET/Highlighting/Oberon00.xshd delete mode 100644 Grammars/Oberon10Independent (by Juliet)/Install/PascalABC.NET/Lib/Oberon00System.pcu delete mode 100644 Grammars/Oberon10Independent (by Juliet)/Install/PascalABC.NET/LibSource/Oberon00System.pas delete mode 100644 Grammars/Oberon10Independent (by Juliet)/Install/PascalABC.NET/LibSource/Oberon00System.pcu delete mode 100644 Grammars/Oberon10Independent (by Juliet)/Install/PascalABC.NET/Oberon00Parser.dll delete mode 100644 Grammars/Oberon10Independent (by Juliet)/Oberon00ParserTools.cs delete mode 100644 Grammars/Oberon10Independent (by Juliet)/ObrProba.csproj delete mode 100644 Grammars/Oberon10Independent (by Juliet)/ObrProba.sln delete mode 100644 Grammars/Oberon10Independent (by Juliet)/ObrProba.suo delete mode 100644 Grammars/Oberon10Independent (by Juliet)/Parser.cs delete mode 100644 Grammars/Oberon10Independent (by Juliet)/Properties/AssemblyInfo.cs delete mode 100644 Grammars/Oberon10Independent (by Juliet)/ShiftReduceParserCode.cs delete mode 100644 Grammars/Oberon10Independent (by Juliet)/generateParserScanner.bat delete mode 100644 Grammars/Oberon10Independent (by Juliet)/generate_all.bat delete mode 100644 Grammars/Oberon10Independent (by Juliet)/oberon00.cs delete mode 100644 Grammars/Oberon10Independent (by Juliet)/oberon00.lex delete mode 100644 Grammars/Oberon10Independent (by Juliet)/oberon00.lst delete mode 100644 Grammars/Oberon10Independent (by Juliet)/oberon00.y delete mode 100644 Grammars/Oberon10Independent (by Juliet)/oberon00yacc.cs delete mode 100644 ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/01_First/Amp.pas delete mode 100644 ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/01_First/AssignExt.pas delete mode 100644 ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/01_First/AutoVars.pas delete mode 100644 ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/01_First/BlockVar.pas delete mode 100644 ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/01_First/Foreach.pas delete mode 100644 ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/01_First/RandomDiap.pas delete mode 100644 ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/01_First/RealExtNums.pas delete mode 100644 ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/01_First/SimpleNewFeatures.pas delete mode 100644 ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/01_First/StandardTypes.pas delete mode 100644 ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/01_First/WriteAll.pas delete mode 100644 ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/01_First/WriteFormat.pas delete mode 100644 ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/02_Types/CharFunc.pas delete mode 100644 ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/02_Types/Dynarray.pas delete mode 100644 ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/02_Types/Enum.pas delete mode 100644 ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/02_Types/InitRecords.pas delete mode 100644 ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/02_Types/PointerToRef.pas delete mode 100644 ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/02_Types/PointersVsRef/Pointers.pas delete mode 100644 ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/02_Types/PointersVsRef/References.pas delete mode 100644 ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/02_Types/Sets.pas delete mode 100644 ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/02_Types/StringInteger.pas delete mode 100644 ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/02_Types/StringMethods.pas delete mode 100644 ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/02_Types/StringTypes.pas delete mode 100644 ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/02_Types/StructTypeEquiv.pas delete mode 100644 ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/02_Types/UntypedFile.pas delete mode 100644 ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/02_Types/a.dat delete mode 100644 ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/03_Subroutines/FuncParams.pas delete mode 100644 ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/03_Subroutines/Overload.pas delete mode 100644 ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/03_Subroutines/ProcVars.pas delete mode 100644 ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/03_Subroutines/SwapT.pas delete mode 100644 ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/04_Units/CallC#/CallCS.pas delete mode 100644 ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/04_Units/CallC#/ClassLibrary1.dll delete mode 100644 ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/04_Units/DllTest/MyDll.dll delete mode 100644 ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/04_Units/DllTest/MyDll.pas delete mode 100644 ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/04_Units/DllTest/main.pas delete mode 100644 ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/04_Units/NativeDll/CallNative.pas delete mode 100644 ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/04_Units/NativeDll/NativeDll.dll delete mode 100644 ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/04_Units/NativeDll/NativeDll.dpr delete mode 100644 ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/04_Units/SimpleUnit/MainProgram.pas delete mode 100644 ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/04_Units/SimpleUnit/MyUnit.pas delete mode 100644 ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/04_Units/SimpleUnit/MyUnit.pcu delete mode 100644 ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/04_Units/SystemUnitTest.pas delete mode 100644 ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/05_Graph/ABC.pas delete mode 100644 ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/05_Graph/GraphABCTest.pas delete mode 100644 ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/05_Graph/MouseEvents.pas delete mode 100644 ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/06_Classes/AllFromObject.pas delete mode 100644 ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/06_Classes/Boxing.pas delete mode 100644 ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/06_Classes/ClassConstructor.pas delete mode 100644 ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/06_Classes/GarbageCollection.pas delete mode 100644 ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/06_Classes/Interf.pas delete mode 100644 ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/06_Classes/OperatorOverloading.pas delete mode 100644 ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/06_Classes/PersonInternal.pas delete mode 100644 ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/06_Classes/Records.pas delete mode 100644 ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/06_Classes/Stack.pas delete mode 100644 ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/06_Classes/Where.pas delete mode 100644 ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/06_Classes/WriteRecord.pas delete mode 100644 ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/07_NetLibs/DateTime.pas delete mode 100644 ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/07_NetLibs/FormWebBrowser.pas delete mode 100644 ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/07_NetLibs/LinkedList.pas delete mode 100644 ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/07_NetLibs/Reflection.pas delete mode 100644 ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/07_NetLibs/WinFormWithButton.pas delete mode 100644 ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/01_First/Assign1.pas delete mode 100644 ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/01_First/Assign2.pas delete mode 100644 ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/01_First/AssignExt.pas delete mode 100644 ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/01_First/Boolean1.pas delete mode 100644 ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/01_First/Calculations1.pas delete mode 100644 ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/01_First/Calculations2.pas delete mode 100644 ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/01_First/Calculations3.pas delete mode 100644 ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/01_First/DivMod1.pas delete mode 100644 ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/01_First/DivMod2.pas delete mode 100644 ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/01_First/HelloWorld.pas delete mode 100644 ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/01_First/Random1.pas delete mode 100644 ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/01_First/Random2.pas delete mode 100644 ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/01_First/ReadString.pas delete mode 100644 ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/01_First/Shl.pas delete mode 100644 ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/01_First/StandFun.pas delete mode 100644 ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/01_First/StandardTypes.pas delete mode 100644 ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/01_First/StringPlus.pas delete mode 100644 ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/01_First/WriteFormat.pas delete mode 100644 ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/02_Errors/CompilerError1.pas delete mode 100644 ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/02_Errors/CompilerError2.pas delete mode 100644 ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/02_Errors/CompilerError3.pas delete mode 100644 ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/02_Errors/CompilerError4.pas delete mode 100644 ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/02_Errors/RuntimeError1.pas delete mode 100644 ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/02_Errors/RuntimeError2.pas delete mode 100644 ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/02_Errors/RuntimeError3.pas delete mode 100644 ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/02_Errors/RuntimeError4.pas delete mode 100644 ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/03_Robot_Drawman/DMa1.pas delete mode 100644 ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/03_Robot_Drawman/RBa1.pas delete mode 100644 ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/04_Graphics/Gr1.pas delete mode 100644 ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/04_Graphics/Gr2.pas delete mode 100644 ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/04_Graphics/Gr3.pas delete mode 100644 ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/04_Graphics/Gr4.pas delete mode 100644 ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/04_Graphics/Gr5.pas delete mode 100644 ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/04_Graphics/Gr6.pas delete mode 100644 ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/04_Graphics/Gr7.pas delete mode 100644 ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/04_Graphics/Gr8.pas delete mode 100644 ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/04_Graphics/GrAnim1.pas delete mode 100644 ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/04_Graphics/GrAnim2.pas delete mode 100644 ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/04_Graphics/GrCoord1.pas delete mode 100644 ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/04_Graphics/GrCoord2.pas delete mode 100644 ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/04_Graphics/GrCoord3.pas delete mode 100644 ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/04_Graphics/GrFont1.pas delete mode 100644 ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/04_Graphics/GrFont2.pas delete mode 100644 ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/04_Graphics/GrPoly.pas delete mode 100644 ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/04_Graphics/GraphWindow.bmp delete mode 100644 ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/04a_ABCObjects/ABC1.pas delete mode 100644 ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/05_IfCaseBoolean/Case1.pas delete mode 100644 ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/05_IfCaseBoolean/Case2.pas delete mode 100644 ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/05_IfCaseBoolean/Case3.pas delete mode 100644 ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/05_IfCaseBoolean/Case4.pas delete mode 100644 ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/05_IfCaseBoolean/If1.pas delete mode 100644 ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/05_IfCaseBoolean/If2.pas delete mode 100644 ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/05_IfCaseBoolean/If3.pas delete mode 100644 ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/05_IfCaseBoolean/If4.pas delete mode 100644 ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/05_IfCaseBoolean/If5.pas delete mode 100644 ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/06_ForWhileRepeat/For1.pas delete mode 100644 ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/06_ForWhileRepeat/For1a.pas delete mode 100644 ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/06_ForWhileRepeat/For2.pas delete mode 100644 ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/06_ForWhileRepeat/For3.pas delete mode 100644 ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/06_ForWhileRepeat/For4.pas delete mode 100644 ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/06_ForWhileRepeat/For5.pas delete mode 100644 ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/06_ForWhileRepeat/For6.pas delete mode 100644 ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/06_ForWhileRepeat/For7.pas delete mode 100644 ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/06_ForWhileRepeat/For8.pas delete mode 100644 ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/06_ForWhileRepeat/For9.pas delete mode 100644 ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/06_ForWhileRepeat/ForFor1.pas delete mode 100644 ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/06_ForWhileRepeat/ForFor2.pas delete mode 100644 ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/06_ForWhileRepeat/ForGra1.pas delete mode 100644 ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/06_ForWhileRepeat/algo1.pas delete mode 100644 ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/06_ForWhileRepeat/algo2.pas delete mode 100644 ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/06_ForWhileRepeat/repeat1.pas delete mode 100644 ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/06_ForWhileRepeat/repeat2.pas delete mode 100644 ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/06_ForWhileRepeat/while1.pas delete mode 100644 ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/06_ForWhileRepeat/while2.pas delete mode 100644 ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/06_ForWhileRepeat/while3.pas delete mode 100644 ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/07_CharString/Char1.pas delete mode 100644 ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/07_CharString/Char2.pas delete mode 100644 ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/07_CharString/Char3.pas delete mode 100644 ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/07_CharString/CharTable.pas delete mode 100644 ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/07_CharString/String1.pas delete mode 100644 ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/07_CharString/String2.pas delete mode 100644 ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/07_CharString/String3.pas delete mode 100644 ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/07_CharString/String4.pas delete mode 100644 ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/07_CharString/String5.pas delete mode 100644 ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/07_CharString/String6.pas delete mode 100644 ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/07_CharString/StringInteger1.pas delete mode 100644 ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/07_CharString/StringInteger2.pas delete mode 100644 ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/07_CharString/StringInteger3.pas delete mode 100644 ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/07_CharString/StringReal1.pas delete mode 100644 ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/07_CharString/UpLowCase.pas delete mode 100644 ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/08_ProcFunc/Fun1.pas delete mode 100644 ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/08_ProcFunc/Fun2.pas delete mode 100644 ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/08_ProcFunc/Proc1.pas delete mode 100644 ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/08_ProcFunc/Proc2.pas delete mode 100644 ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/08_ProcFunc/Proc3.pas delete mode 100644 ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/09_Arrays/DynArr1.pas delete mode 100644 ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/09_Arrays/DynArr2.pas delete mode 100644 ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/09_Arrays/DynArr3.pas delete mode 100644 ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/09_Arrays/DynArr4.pas delete mode 100644 ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/09_Arrays/DynArrErr1.pas delete mode 100644 ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/09_Arrays/DynArrErr2.pas delete mode 100644 ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/09_Arrays/SortByChoice.pas delete mode 100644 ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/09_Arrays/StaticArr1.pas delete mode 100644 ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/09_Arrays/StaticArr2.pas delete mode 100644 ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/09_Arrays/StaticArr3.pas delete mode 100644 ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/09_Units/UnitInitFin/MainInitFinDemo.pas delete mode 100644 ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/09_Units/UnitInitFin/MyUnit.pas delete mode 100644 ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/09_Units/UnitNames/MainSameNames.pas delete mode 100644 ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/09_Units/UnitNames/MyA.pas delete mode 100644 ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/09_Units/UnitNames/MyB.pas delete mode 100644 ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/09_Units/UnitNames/MyB.pcu delete mode 100644 ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/09_Units/UnitStructure/MainProgram.pas delete mode 100644 ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/09_Units/UnitStructure/MyUnit.pas delete mode 100644 ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/09_Units/UnitStructure/MyUnit.pcu delete mode 100644 ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/10_Matrices/Matr1.pas delete mode 100644 ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/10_Matrices/Matr2.pas delete mode 100644 ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/11_Enums/Enum1.pas delete mode 100644 ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/11_Enums/Enum2.pas delete mode 100644 ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/12_Files/File1.pas delete mode 100644 ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/12_Files/File2.pas delete mode 100644 ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/12_Files/Text1.pas delete mode 100644 ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/12_Files/Text2.pas delete mode 100644 ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/12_Files/Text3.pas delete mode 100644 ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/12_Files/Untyped1.pas delete mode 100644 ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/12_Files/str.dat delete mode 100644 ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/13_Pointers/Pointer1.pas delete mode 100644 ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/13_Pointers/Pointer2.pas delete mode 100644 ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/13_Pointers/Pointer3.pas delete mode 100644 ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/13_Pointers/Pointer4.pas delete mode 100644 ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/13_Pointers/ProcPointer1.pas delete mode 100644 ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/13_Pointers/ProcPointer2.pas delete mode 100644 ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/13_Pointers/Reference.pas delete mode 100644 ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/14_Records/Rec1.pas delete mode 100644 ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/14_Records/Rec2.pas delete mode 100644 ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/15_Classes/Inheritance1.pas delete mode 100644 ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/15_Classes/PersonExternal.pas delete mode 100644 ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/15_Classes/PersonInternal.pas delete mode 100644 ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/15_Classes/Properties.pas delete mode 100644 ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/16_Exceptions/Try1.pas delete mode 100644 ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/16_Exceptions/Try2.pas delete mode 100644 ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/16_Exceptions/Try3.pas delete mode 100644 ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/16_Exceptions/Try4.pas delete mode 100644 ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/17_Interfaces/Interf1.pas delete mode 100644 ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/17_Interfaces/Interf2.pas delete mode 100644 ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/18_Dll/Main.pas delete mode 100644 ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/18_Dll/MyLib.dll delete mode 100644 ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/18_Dll/MyLib.pas delete mode 100644 ReleaseGenerators/Samples/_SVN/Pas/Algorithms/Eratosphen.pas delete mode 100644 ReleaseGenerators/Samples/_SVN/Pas/Algorithms/MazeGen.pas delete mode 100644 ReleaseGenerators/Samples/_SVN/Pas/Algorithms/Recursion/ESquares.pas delete mode 100644 ReleaseGenerators/Samples/_SVN/Pas/Algorithms/Recursion/Hanoi.pas delete mode 100644 ReleaseGenerators/Samples/_SVN/Pas/Algorithms/Recursion/Knapsack.pas delete mode 100644 ReleaseGenerators/Samples/_SVN/Pas/Algorithms/Recursion/TreeDraw.pas delete mode 100644 ReleaseGenerators/Samples/_SVN/Pas/Algorithms/Simple/SimpleNumbers.pas delete mode 100644 ReleaseGenerators/Samples/_SVN/Pas/Algorithms/SortArrays/ArrayLib.pas delete mode 100644 ReleaseGenerators/Samples/_SVN/Pas/Algorithms/SortArrays/QuickSort.pas delete mode 100644 ReleaseGenerators/Samples/_SVN/Pas/Algorithms/SortArrays/SortByChoice.pas delete mode 100644 ReleaseGenerators/Samples/_SVN/Pas/Applications/Games/15.pas delete mode 100644 ReleaseGenerators/Samples/_SVN/Pas/Applications/Games/Animals/Animals.pas delete mode 100644 ReleaseGenerators/Samples/_SVN/Pas/Applications/Games/Animals/animals_data.txt delete mode 100644 ReleaseGenerators/Samples/_SVN/Pas/Applications/Games/Battle.pas delete mode 100644 ReleaseGenerators/Samples/_SVN/Pas/Applications/Games/BookWorm/BookWormABCNET.pas delete mode 100644 ReleaseGenerators/Samples/_SVN/Pas/Applications/Games/BookWorm/words.txt delete mode 100644 ReleaseGenerators/Samples/_SVN/Pas/Applications/Games/DeleteByMouse.pas delete mode 100644 ReleaseGenerators/Samples/_SVN/Pas/Applications/Games/KillThem.pas delete mode 100644 ReleaseGenerators/Samples/_SVN/Pas/Applications/Games/Life.pas delete mode 100644 ReleaseGenerators/Samples/_SVN/Pas/Applications/Games/Matches.pas delete mode 100644 ReleaseGenerators/Samples/_SVN/Pas/Applications/Games/NewLife.pas delete mode 100644 ReleaseGenerators/Samples/_SVN/Pas/Applications/GraphApplications/Paporotnik/Main.pas delete mode 100644 ReleaseGenerators/Samples/_SVN/Pas/Applications/GraphApplications/Paporotnik/Paporotnik.pas delete mode 100644 ReleaseGenerators/Samples/_SVN/Pas/Applications/GraphApplications/Paporotnik/PaporotnikData.pas delete mode 100644 ReleaseGenerators/Samples/_SVN/Pas/CheckedTasks/DrawMan/DMpp17.pas delete mode 100644 ReleaseGenerators/Samples/_SVN/Pas/CheckedTasks/DrawMan/DrawManMakeTask/DMMy1.pas delete mode 100644 ReleaseGenerators/Samples/_SVN/Pas/CheckedTasks/DrawMan/DrawManMakeTask/DrawManAddTasks.pas delete mode 100644 ReleaseGenerators/Samples/_SVN/Pas/CheckedTasks/DrawMan/random_DM.pas delete mode 100644 ReleaseGenerators/Samples/_SVN/Pas/CheckedTasks/PT4/Dynamic2.pas delete mode 100644 ReleaseGenerators/Samples/_SVN/Pas/CheckedTasks/PT4/File48.pas delete mode 100644 ReleaseGenerators/Samples/_SVN/Pas/CheckedTasks/PT4/PT4TaskMaker/PT4Demo.pas delete mode 100644 ReleaseGenerators/Samples/_SVN/Pas/CheckedTasks/PT4/PT4TaskMaker/PT4Demo.pcu delete mode 100644 ReleaseGenerators/Samples/_SVN/Pas/CheckedTasks/PT4/PT4TaskMaker/PT4DemoTest.pas delete mode 100644 ReleaseGenerators/Samples/_SVN/Pas/CheckedTasks/PT4/PT4TaskMaker/PT4Tasks.html delete mode 100644 ReleaseGenerators/Samples/_SVN/Pas/CheckedTasks/PT4/PT4TaskMaker/results.abc delete mode 100644 ReleaseGenerators/Samples/_SVN/Pas/CheckedTasks/PT4/String9.pas delete mode 100644 ReleaseGenerators/Samples/_SVN/Pas/CheckedTasks/Robot/RBcc17.pas delete mode 100644 ReleaseGenerators/Samples/_SVN/Pas/CheckedTasks/Robot/RobotMakeTask/RBMy1.pas delete mode 100644 ReleaseGenerators/Samples/_SVN/Pas/CheckedTasks/Robot/RobotMakeTask/RobotAddTasks.pas delete mode 100644 ReleaseGenerators/Samples/_SVN/Pas/CheckedTasks/Robot/random_Robot.pas delete mode 100644 ReleaseGenerators/Samples/_SVN/Pas/LanguageFeatures/Boxing.pas delete mode 100644 ReleaseGenerators/Samples/_SVN/Pas/LanguageFeatures/ClassConstructor.pas delete mode 100644 ReleaseGenerators/Samples/_SVN/Pas/LanguageFeatures/DllTest/MyDll.dll delete mode 100644 ReleaseGenerators/Samples/_SVN/Pas/LanguageFeatures/DllTest/MyDll.pas delete mode 100644 ReleaseGenerators/Samples/_SVN/Pas/LanguageFeatures/DllTest/main.pas delete mode 100644 ReleaseGenerators/Samples/_SVN/Pas/LanguageFeatures/ForeachExamples.pas delete mode 100644 ReleaseGenerators/Samples/_SVN/Pas/LanguageFeatures/ForeachForSet.pas delete mode 100644 ReleaseGenerators/Samples/_SVN/Pas/LanguageFeatures/ForeachIEnumerable.pas delete mode 100644 ReleaseGenerators/Samples/_SVN/Pas/LanguageFeatures/FracOperatorOverload.pas delete mode 100644 ReleaseGenerators/Samples/_SVN/Pas/LanguageFeatures/Generics/GenericClasses/Stack.pas delete mode 100644 ReleaseGenerators/Samples/_SVN/Pas/LanguageFeatures/Generics/GenericProcFun/FindT.pas delete mode 100644 ReleaseGenerators/Samples/_SVN/Pas/LanguageFeatures/Generics/GenericProcFun/SwapT.pas delete mode 100644 ReleaseGenerators/Samples/_SVN/Pas/LanguageFeatures/IndexProperties.pas delete mode 100644 ReleaseGenerators/Samples/_SVN/Pas/LanguageFeatures/ParamsConcat.pas delete mode 100644 ReleaseGenerators/Samples/_SVN/Pas/LanguageFeatures/ParamsWriteln.pas delete mode 100644 ReleaseGenerators/Samples/_SVN/Pas/LanguageFeatures/ProcParam.pas delete mode 100644 ReleaseGenerators/Samples/_SVN/Pas/LanguageFeatures/ProcVars.pas delete mode 100644 ReleaseGenerators/Samples/_SVN/Pas/LanguageFeatures/Students.pas delete mode 100644 ReleaseGenerators/Samples/_SVN/Pas/LanguageFeatures/TemplatePair.pas delete mode 100644 ReleaseGenerators/Samples/_SVN/Pas/LanguageFeatures/WriteRecord.pas delete mode 100644 ReleaseGenerators/Samples/_SVN/Pas/NETLibraries/System.Array/SystemArray1.pas delete mode 100644 ReleaseGenerators/Samples/_SVN/Pas/NETLibraries/System.DateTime/DateTime1.pas delete mode 100644 ReleaseGenerators/Samples/_SVN/Pas/NETLibraries/System.DateTime/DateTime2.pas delete mode 100644 ReleaseGenerators/Samples/_SVN/Pas/NETLibraries/System.DateTime/DateTimeInterval.pas delete mode 100644 ReleaseGenerators/Samples/_SVN/Pas/NETLibraries/System.String/StringConvert.pas delete mode 100644 ReleaseGenerators/Samples/_SVN/Pas/NETLibraries/System.String/StringMethods1.pas delete mode 100644 ReleaseGenerators/Samples/_SVN/Pas/NETLibraries/System.String/StringMethods2.pas delete mode 100644 ReleaseGenerators/Samples/_SVN/Pas/NETLibraries/System.String/StringSplit.pas delete mode 100644 ReleaseGenerators/Samples/_SVN/Pas/NETLibraries/System.Timers.Timer/SystemTimer.pas delete mode 100644 ReleaseGenerators/Samples/_SVN/Pas/NETLibraries/System.Windows.Forms/FormWebBrowser.pas delete mode 100644 ReleaseGenerators/Samples/_SVN/Pas/NETLibraries/System.Windows.Forms/MouseDraw.pas delete mode 100644 ReleaseGenerators/Samples/_SVN/Pas/NETLibraries/System.Windows.Forms/TextEditor/Open.png delete mode 100644 ReleaseGenerators/Samples/_SVN/Pas/NETLibraries/System.Windows.Forms/TextEditor/Save.png delete mode 100644 ReleaseGenerators/Samples/_SVN/Pas/NETLibraries/System.Windows.Forms/TextEditor/TextEditor.pas delete mode 100644 ReleaseGenerators/Samples/_SVN/Pas/NETLibraries/System.Windows.Forms/TextEditor/Thumbs.db delete mode 100644 ReleaseGenerators/Samples/_SVN/Pas/NETLibraries/System.Windows.Forms/WinFormWithButton.pas delete mode 100644 ReleaseGenerators/Samples/_SVN/Pas/Other/SpeedTests/CalculationsGlobalLocal/BlockVars.pas delete mode 100644 ReleaseGenerators/Samples/_SVN/Pas/Other/SpeedTests/CalculationsGlobalLocal/GlobalVars.pas delete mode 100644 ReleaseGenerators/Samples/_SVN/Pas/Other/SpeedTests/Milli.pas delete mode 100644 ReleaseGenerators/Samples/_SVN/Pas/Other/UnmanagedGraphics/GraphTest.dll delete mode 100644 ReleaseGenerators/Samples/_SVN/Pas/Other/UnmanagedGraphics/Mand.pas delete mode 100644 ReleaseGenerators/Samples/_SVN/Pas/Other/UnmanagedGraphics/MessageBox.pas delete mode 100644 ReleaseGenerators/Samples/_SVN/Pas/StandardUnits/ABCObjects/Sprites/SpriteFrames/multi1.bmp delete mode 100644 ReleaseGenerators/Samples/_SVN/Pas/StandardUnits/ABCObjects/Sprites/SpriteFrames/multi2.bmp delete mode 100644 ReleaseGenerators/Samples/_SVN/Pas/StandardUnits/ABCObjects/Sprites/SpriteFrames/multi3.bmp delete mode 100644 ReleaseGenerators/Samples/_SVN/Pas/StandardUnits/ABCObjects/Sprites/SpriteFrames/multi4.bmp delete mode 100644 ReleaseGenerators/Samples/_SVN/Pas/StandardUnits/ABCObjects/Sprites/SpriteFrames/multi5.bmp delete mode 100644 ReleaseGenerators/Samples/_SVN/Pas/StandardUnits/ABCObjects/Sprites/gr_SpriteCreation.pas delete mode 100644 ReleaseGenerators/Samples/_SVN/Pas/StandardUnits/ABCObjects/Sprites/gr_SpriteUsing.pas delete mode 100644 ReleaseGenerators/Samples/_SVN/Pas/StandardUnits/ABCObjects/Sprites/spr.png delete mode 100644 ReleaseGenerators/Samples/_SVN/Pas/StandardUnits/ABCObjects/Sprites/spr.spinf delete mode 100644 ReleaseGenerators/Samples/_SVN/Pas/StandardUnits/ABCObjects/demo.bmp delete mode 100644 ReleaseGenerators/Samples/_SVN/Pas/StandardUnits/ABCObjects/gr_All_Brown.pas delete mode 100644 ReleaseGenerators/Samples/_SVN/Pas/StandardUnits/ABCObjects/gr_Clone_Recur.pas delete mode 100644 ReleaseGenerators/Samples/_SVN/Pas/StandardUnits/ABCObjects/gr_DragPicture.pas delete mode 100644 ReleaseGenerators/Samples/_SVN/Pas/StandardUnits/ABCObjects/gr_Intersect.pas delete mode 100644 ReleaseGenerators/Samples/_SVN/Pas/StandardUnits/ABCObjects/gr_Move_Param.pas delete mode 100644 ReleaseGenerators/Samples/_SVN/Pas/StandardUnits/ABCObjects/gr_MovingObjects.pas delete mode 100644 ReleaseGenerators/Samples/_SVN/Pas/StandardUnits/ABCObjects/gr_PictureScale.pas delete mode 100644 ReleaseGenerators/Samples/_SVN/Pas/StandardUnits/ABCObjects/gr_RealNumber.pas delete mode 100644 ReleaseGenerators/Samples/_SVN/Pas/StandardUnits/ABCObjects/gr_StandardColors.pas delete mode 100644 ReleaseGenerators/Samples/_SVN/Pas/StandardUnits/ABCObjects/gr_Star_Rotate.pas delete mode 100644 ReleaseGenerators/Samples/_SVN/Pas/StandardUnits/ABCObjects/gr_Text.pas delete mode 100644 ReleaseGenerators/Samples/_SVN/Pas/StandardUnits/CRT/Bill.pas delete mode 100644 ReleaseGenerators/Samples/_SVN/Pas/StandardUnits/CRT/CPaint.pas delete mode 100644 ReleaseGenerators/Samples/_SVN/Pas/StandardUnits/CRT/CRTColors.pas delete mode 100644 ReleaseGenerators/Samples/_SVN/Pas/StandardUnits/CRT/SimpleTextEditor.pas delete mode 100644 ReleaseGenerators/Samples/_SVN/Pas/StandardUnits/GraphABC/AnalogClock.pas delete mode 100644 ReleaseGenerators/Samples/_SVN/Pas/StandardUnits/GraphABC/Flame.pas delete mode 100644 ReleaseGenerators/Samples/_SVN/Pas/StandardUnits/GraphABC/Fractals/Dragon.pas delete mode 100644 ReleaseGenerators/Samples/_SVN/Pas/StandardUnits/GraphABC/Fractals/Mandelbrot.pas delete mode 100644 ReleaseGenerators/Samples/_SVN/Pas/StandardUnits/GraphABC/Fractals/Paporotnik/Main.pas delete mode 100644 ReleaseGenerators/Samples/_SVN/Pas/StandardUnits/GraphABC/Fractals/Paporotnik/Paporotnik.pas delete mode 100644 ReleaseGenerators/Samples/_SVN/Pas/StandardUnits/GraphABC/Fractals/Paporotnik/PaporotnikData.pas delete mode 100644 ReleaseGenerators/Samples/_SVN/Pas/StandardUnits/GraphABC/Fractals/Paporotnik1.pas delete mode 100644 ReleaseGenerators/Samples/_SVN/Pas/StandardUnits/GraphABC/Mosaic.pas delete mode 100644 ReleaseGenerators/Samples/_SVN/Pas/StandardUnits/GraphABC/SetPixel.pas delete mode 100644 ReleaseGenerators/Samples/_SVN/Pas/StandardUnits/GraphABC/Star.pas delete mode 100644 ReleaseGenerators/Samples/_SVN/Pas/StandardUnits/GraphABC/graph3d.pas delete mode 100644 ReleaseGenerators/Samples/_SVN/Pas/StandardUnits/GraphABC/graphic.pas delete mode 100644 ReleaseGenerators/Samples/_SVN/Pas/StandardUnits/GraphABC/rain.pas delete mode 100644 ReleaseGenerators/Samples/_SVN/Pas/StandardUnits/Timers/Timer1.pas delete mode 100644 ReleaseGenerators/Samples/_SVN/Pas/StandardUnits/Timers/Timer2.pas create mode 100644 TestSuite/CompilationSamples/Controls.pas create mode 100644 TestSuite/CompilationSamples/LightPT.pas create mode 100644 TestSuite/CompilationSamples/NUnitABC.pas create mode 100644 TestSuite/CompilationSamples/PT4Databases.pas create mode 100644 TestSuite/CompilationSamples/Speech.pas create mode 100644 TestSuite/CompilationSamples/Tasks.pas create mode 100644 TestSuite/CompilationSamples/Tasks1Arr.pas create mode 100644 TestSuite/CompilationSamples/Tasks1Begin.pas create mode 100644 TestSuite/CompilationSamples/Tasks1BoolIfCase.pas create mode 100644 TestSuite/CompilationSamples/Tasks1Loops.pas create mode 100644 TestSuite/CompilationSamples/TasksArr.pas create mode 100644 TestSuite/CompilationSamples/TasksMatr.pas create mode 100644 TestSuite/CompilationSamples/TasksStr.pas create mode 100644 TestSuite/CompilationSamples/Turtle.pas create mode 100644 TestSuite/CompilationSamples/TurtleWPF.pas create mode 100644 TestSuite/CompilationSamples/TwoPanelsWindow.pas create mode 100644 TestSuite/CompilationSamples/XLSX.pas create mode 100644 TestSuite/CompilationSamples/xPT4MakerNetX.pas create mode 100644 TestSuite/CompilationSamples/xPT4TaskMakerNET.pas create mode 100644 TestSuite/CompilationSamples/Мозаика.pas create mode 100644 TestSuite/CompilationSamples/МозаикаABC.pas delete mode 100644 Utils/NodesGeneratorNew/NodesGenerator_old/bin/Debug/NodesGenerator.pdb delete mode 100644 Utils/NodesGeneratorNew/Scintilla/ScintillaNET.pdb delete mode 100644 Utils/NodesGeneratorNew/Scintilla/Sources/bin/Debug/SCide.pdb delete mode 100644 Utils/NodesGeneratorNew/Scintilla/Sources/bin/Debug/ScintillaNET.pdb delete mode 100644 W/Debug_Folder/ConsoleApp1.exe delete mode 100644 W/Debug_Folder/ConsoleApp1.exe.config delete mode 100644 W/Debug_Folder/ConsoleApp1.pdb delete mode 100644 W/Debug_Folder/CpuMathNative.dll delete mode 100644 W/Debug_Folder/LdaNative.dll delete mode 100644 W/Debug_Folder/Microsoft.ML.Core.dll delete mode 100644 W/Debug_Folder/Microsoft.ML.Core.xml delete mode 100644 W/Debug_Folder/Microsoft.ML.CpuMath.dll delete mode 100644 W/Debug_Folder/Microsoft.ML.CpuMath.xml delete mode 100644 W/Debug_Folder/Microsoft.ML.Data.dll delete mode 100644 W/Debug_Folder/Microsoft.ML.Data.xml delete mode 100644 W/Debug_Folder/Microsoft.ML.DataView.dll delete mode 100644 W/Debug_Folder/Microsoft.ML.DataView.xml delete mode 100644 W/Debug_Folder/Microsoft.ML.KMeansClustering.dll delete mode 100644 W/Debug_Folder/Microsoft.ML.KMeansClustering.xml delete mode 100644 W/Debug_Folder/Microsoft.ML.PCA.dll delete mode 100644 W/Debug_Folder/Microsoft.ML.PCA.xml delete mode 100644 W/Debug_Folder/Microsoft.ML.StandardTrainers.dll delete mode 100644 W/Debug_Folder/Microsoft.ML.StandardTrainers.xml delete mode 100644 W/Debug_Folder/Microsoft.ML.Transforms.dll delete mode 100644 W/Debug_Folder/Microsoft.ML.Transforms.xml delete mode 100644 W/Debug_Folder/Microsoft.ML.dll delete mode 100644 W/Debug_Folder/Microsoft.ML.xml delete mode 100644 W/Debug_Folder/Newtonsoft.Json.dll delete mode 100644 W/Debug_Folder/Newtonsoft.Json.xml delete mode 100644 W/Debug_Folder/System.Buffers.dll delete mode 100644 W/Debug_Folder/System.Buffers.xml delete mode 100644 W/Debug_Folder/System.CodeDom.dll delete mode 100644 W/Debug_Folder/System.Collections.Immutable.dll delete mode 100644 W/Debug_Folder/System.Collections.Immutable.xml delete mode 100644 W/Debug_Folder/System.Memory.dll delete mode 100644 W/Debug_Folder/System.Memory.xml delete mode 100644 W/Debug_Folder/System.Numerics.Vectors.dll delete mode 100644 W/Debug_Folder/System.Numerics.Vectors.xml delete mode 100644 W/Debug_Folder/System.Runtime.CompilerServices.Unsafe.dll delete mode 100644 W/Debug_Folder/System.Runtime.CompilerServices.Unsafe.xml delete mode 100644 W/Debug_Folder/System.Threading.Channels.dll delete mode 100644 W/Debug_Folder/System.Threading.Channels.xml delete mode 100644 W/Debug_Folder/System.Threading.Tasks.Extensions.dll delete mode 100644 W/Debug_Folder/System.Threading.Tasks.Extensions.xml delete mode 100644 W/Debug_Folder/a.pas delete mode 100644 W/Debug_Folder/a1.pas delete mode 100644 W/Debug_Folder/iris-full.txt create mode 100644 bin/ICSharpCode.Core.xml create mode 100644 bin/Lib/ABCObjects.xml create mode 100644 bin/Lib/CRT.xml create mode 100644 bin/Lib/GraphABC.xml create mode 100644 bin/Lib/PABCSystem.xml diff --git a/.gitignore b/.gitignore index 6a063e066..d2e15ba16 100644 --- a/.gitignore +++ b/.gitignore @@ -4,19 +4,6 @@ # general ignore *.pcu *.pdb -*.csproj.user -#TODO Что то старое. Там, кроме всего прочего, зачем то копия древней версии инсталята паскаля -# - удалить -!Grammars/Oberon10Independent (by Juliet)/**/*.pcu -#TODO Тут тоже копия древних примеров, но зачем то ещё примеры на BrainFuck и PL/0 -# - удалить паскалевские примеры -!ReleaseGenerators/Samples/_SVN/**/*.pcu -#TODO NodesGenerator ещё используется? -# - удалить pdb -!Utils/NodesGeneratorNew/**/*.pdb -#TODO Это папка с тем тестом ML. Стоит её хотя бы в отдельную ветку. А по хорошему отдельным репозиторием... -# - убрать целиком -!W/**/*.pdb # vs internal files **/.vs/* @@ -35,7 +22,10 @@ !/Utils/Old/NodesGeneratorOld0/bin/* !/YMC/bin/* -# + + +# local user files +*.csproj.user /bin/CompilerController.ini @@ -80,8 +70,6 @@ **/PascalABCNET.exe.config **/PascalABCNETLinux.exe **/PascalABCNETLinux.exe.config -#TODO -!Grammars/Oberon10Independent (by Juliet)/**/*.dll @@ -108,7 +96,7 @@ /bin/WeifenLuo.WinFormsUI.Docking.ThemeVS2005.dll /bin/WeifenLuo.WinFormsUI.Docking.ThemeVS2005Linux.dll #TODO копируется только при сборке pabcnetc.sln - это норм? -# - Этот проект, получается, подключён только к консольным компиляторам +# - в самом проекте написано что его надо удалить... /bin/YieldConversionSyntax.dll # Debug-only intellisense problems @@ -129,11 +117,6 @@ -#TODO Часть в индексе, часть нет -# - все добавить в индекс -/bin/**/*.xml -!/bin/Lib/en/*.xml - #TODO Метаданные .dll, наверное их забывает удалить после тестирования их генерации? /bin/mscorlib.txt /bin/System.Data.dll.txt diff --git a/Grammars/Oberon10Independent (by Juliet)/DLL/Errors.dll b/Grammars/Oberon10Independent (by Juliet)/DLL/Errors.dll deleted file mode 100644 index db0c63267ccbb2e39b0027b1b20df76efdc8d3b1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8192 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 S1!@+kS)gWtngzaQ3;Yjw613+4 diff --git a/Grammars/Oberon10Independent (by Juliet)/DLL/ParserTools.dll b/Grammars/Oberon10Independent (by Juliet)/DLL/ParserTools.dll deleted file mode 100644 index a5453bb7c5c396aece5014b6165ac8667b02cfa9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 204800 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

Fz#Xen(;TrP>`Og#+c36obdw2K8zz7 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 diff --git a/Grammars/Oberon10Independent (by Juliet)/DLL/SyntaxTree.dll b/Grammars/Oberon10Independent (by Juliet)/DLL/SyntaxTree.dll deleted file mode 100644 index 070d4ca13f57959bc9b0c1722d950b15dfd5a32f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 221184 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

}LejcQ5b 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 -endobj -8 0 obj -(I Introduction to GPLEX) -endobj -9 0 obj -<< /S /GoTo /D (section.1) >> -endobj -12 0 obj -(Overview) -endobj -13 0 obj -<< /S /GoTo /D (subsection.1.1) >> -endobj -16 0 obj -(Typical Usage) -endobj -17 0 obj -<< /S /GoTo /D (subsection.1.2) >> -endobj -20 0 obj -(The Interfaces) -endobj -21 0 obj -<< /S /GoTo /D (subsubsection.1.2.1) >> -endobj -24 0 obj -(The IColorScan Interface) -endobj -25 0 obj -<< /S /GoTo /D (section.2) >> -endobj -28 0 obj -(Running the Program) -endobj -29 0 obj -<< /S /GoTo /D (subsection.2.1) >> -endobj -32 0 obj -(Gplex Options) -endobj -33 0 obj -<< /S /GoTo /D (section.3) >> -endobj -36 0 obj -(The Generated Scanner) -endobj -37 0 obj -<< /S /GoTo /D (subsection.3.1) >> -endobj -40 0 obj -(Byte-Mode and Unicode-Mode) -endobj -41 0 obj -<< /S /GoTo /D (subsection.3.2) >> -endobj -44 0 obj -(The Scanner File) -endobj -45 0 obj -<< /S /GoTo /D (subsection.3.3) >> -endobj -48 0 obj -(Choosing the Input Buffer Class) -endobj -49 0 obj -<< /S /GoTo /D (subsection.3.4) >> -endobj -52 0 obj -(How Buffering Works) -endobj -53 0 obj -<< /S /GoTo /D (subsection.3.5) >> -endobj -56 0 obj -(Multiple Input Sources) -endobj -57 0 obj -<< /S /GoTo /D (subsection.3.6) >> -endobj -60 0 obj -(Class Hierarchy) -endobj -61 0 obj -<< /S /GoTo /D (subsection.3.7) >> -endobj -64 0 obj -(Unicode Scanners) -endobj -65 0 obj -<< /S /GoTo /D (subsection.3.8) >> -endobj -68 0 obj -(Case-Insensitive Scanners) -endobj -69 0 obj -<< /S /GoTo /D (subsubsection.3.8.1) >> -endobj -72 0 obj -(Limitations) -endobj -73 0 obj -<< /S /GoTo /D (subsection.3.9) >> -endobj -76 0 obj -(Using GPLEX Scanners with Other Parsers) -endobj -77 0 obj -<< /S /GoTo /D (section.4) >> -endobj -80 0 obj -(Advanced Topics) -endobj -81 0 obj -<< /S /GoTo /D (subsection.4.1) >> -endobj -84 0 obj -(Location Information) -endobj -85 0 obj -<< /S /GoTo /D (subsection.4.2) >> -endobj -88 0 obj -(Applications with Multiple Scanners) -endobj -89 0 obj -<< /S /GoTo /D (subsection.4.3) >> -endobj -92 0 obj -(Stacking Start Conditions) -endobj -93 0 obj -<< /S /GoTo /D (subsection.4.4) >> -endobj -96 0 obj -(Setting yylval and yylloc) -endobj -97 0 obj -<< /S /GoTo /D (subsubsection.4.4.1) >> -endobj -100 0 obj -(The TValue Type Parameter) -endobj -101 0 obj -<< /S /GoTo /D (subsubsection.4.4.2) >> -endobj -104 0 obj -(The TSpan Type Parameter) -endobj -105 0 obj -<< /S /GoTo /D (subsection.4.5) >> -endobj -108 0 obj -(Backtracking Information) -endobj -109 0 obj -<< /S /GoTo /D (subsection.4.6) >> -endobj -112 0 obj -(Choosing Compression Options) -endobj -113 0 obj -<< /S /GoTo /D (section.5) >> -endobj -116 0 obj -(Errors and Warnings) -endobj -117 0 obj -<< /S /GoTo /D (subsection.5.1) >> -endobj -120 0 obj -(Errors) -endobj -121 0 obj -<< /S /GoTo /D (subsection.5.2) >> -endobj -124 0 obj -(Warnings) -endobj -125 0 obj -<< /S /GoTo /D (section.6) >> -endobj -128 0 obj -(Examples) -endobj -129 0 obj -<< /S /GoTo /D (subsection.6.1) >> -endobj -132 0 obj -(Word Counting) -endobj -133 0 obj -<< /S /GoTo /D (subsection.6.2) >> -endobj -136 0 obj -(ASCII Strings in Binary Files) -endobj -137 0 obj -<< /S /GoTo /D (subsection.6.3) >> -endobj -140 0 obj -(Keyword Matching) -endobj -141 0 obj -<< /S /GoTo /D (subsection.6.4) >> -endobj -144 0 obj -(The Code Page Guesser) -endobj -145 0 obj -<< /S /GoTo /D (subsection.6.5) >> -endobj -148 0 obj -(Include File Example) -endobj -149 0 obj -<< /S /GoTo /D (section.7) >> -endobj -152 0 obj -(Notes) -endobj -153 0 obj -<< /S /GoTo /D (subsection.7.1) >> -endobj -156 0 obj -(Moving From v1.0 to v1.1.0) -endobj -157 0 obj -<< /S /GoTo /D (subsubsection.7.1.1) >> -endobj -160 0 obj -(Performance Issues) -endobj -161 0 obj -<< /S /GoTo /D (subsubsection.7.1.2) >> -endobj -164 0 obj -(Removing Unicode Encoding Limitations) -endobj -165 0 obj -<< /S /GoTo /D (subsubsection.7.1.3) >> -endobj -168 0 obj -(Avoiding Name-Clashes with Multiple Scanners) -endobj -169 0 obj -<< /S /GoTo /D (subsubsection.7.1.4) >> -endobj -172 0 obj -(Compliance with FxCop) -endobj -173 0 obj -<< /S /GoTo /D (subsection.7.2) >> -endobj -176 0 obj -(Implementation Notes) -endobj -177 0 obj -<< /S /GoTo /D (subsection.7.3) >> -endobj -180 0 obj -(Limitations for Version 1.1.0) -endobj -181 0 obj -<< /S /GoTo /D (subsection.7.4) >> -endobj -184 0 obj -(Installing GPLEX) -endobj -185 0 obj -<< /S /GoTo /D (subsection.7.5) >> -endobj -188 0 obj -(Copyright) -endobj -189 0 obj -<< /S /GoTo /D (subsection.7.6) >> -endobj -192 0 obj -(Bug Reports) -endobj -193 0 obj -<< /S /GoTo /D (part.2) >> -endobj -196 0 obj -(II The Input Language) -endobj -197 0 obj -<< /S /GoTo /D (section.8) >> -endobj -200 0 obj -(The Input File) -endobj -201 0 obj -<< /S /GoTo /D (subsection.8.1) >> -endobj -204 0 obj -(Lexical Considerations) -endobj -205 0 obj -<< /S /GoTo /D (subsubsection.8.1.1) >> -endobj -208 0 obj -(Character Denotations) -endobj -209 0 obj -<< /S /GoTo /D (subsubsection.8.1.2) >> -endobj -212 0 obj -(Names and Numbers) -endobj -213 0 obj -<< /S /GoTo /D (subsection.8.2) >> -endobj -216 0 obj -(Overall Syntax) -endobj -217 0 obj -<< /S /GoTo /D (subsection.8.3) >> -endobj -220 0 obj -(The Definitions Section) -endobj -221 0 obj -<< /S /GoTo /D (subsubsection.8.3.1) >> -endobj -224 0 obj -(Using and Namespace Declarations) -endobj -225 0 obj -<< /S /GoTo /D (subsubsection.8.3.2) >> -endobj -228 0 obj -(Visibility and Naming Declarations) -endobj -229 0 obj -<< /S /GoTo /D (subsubsection.8.3.3) >> -endobj -232 0 obj -(Start Condition Declarations) -endobj -233 0 obj -<< /S /GoTo /D (subsubsection.8.3.4) >> -endobj -236 0 obj -(Lexical Category Definitions) -endobj -237 0 obj -<< /S /GoTo /D (subsubsection.8.3.5) >> -endobj -240 0 obj -(Character Class Membership Predicates) -endobj -241 0 obj -<< /S /GoTo /D (subsubsection.8.3.6) >> -endobj -244 0 obj -(User Character Predicate Declaration) -endobj -245 0 obj -<< /S /GoTo /D (subsubsection.8.3.7) >> -endobj -248 0 obj -(User Code in the Definitions Section) -endobj -249 0 obj -<< /S /GoTo /D (subsubsection.8.3.8) >> -endobj -252 0 obj -(Comments in the Definitions Section) -endobj -253 0 obj -<< /S /GoTo /D (subsubsection.8.3.9) >> -endobj -256 0 obj -(Option Declarations) -endobj -257 0 obj -<< /S /GoTo /D (subsection.8.4) >> -endobj -260 0 obj -(The Rules Section) -endobj -261 0 obj -<< /S /GoTo /D (subsubsection.8.4.1) >> -endobj -264 0 obj -(Overview of Pattern Matching) -endobj -265 0 obj -<< /S /GoTo /D (subsubsection.8.4.2) >> -endobj -268 0 obj -(Overall Syntax of Rules Section) -endobj -269 0 obj -<< /S /GoTo /D (subsubsection.8.4.3) >> -endobj -272 0 obj -(Rule Syntax) -endobj -273 0 obj -<< /S /GoTo /D (subsubsection.8.4.4) >> -endobj -276 0 obj -(Rule Group Scopes) -endobj -277 0 obj -<< /S /GoTo /D (subsubsection.8.4.5) >> -endobj -280 0 obj -(Comments in the Rules Section) -endobj -281 0 obj -<< /S /GoTo /D (subsection.8.5) >> -endobj -284 0 obj -(The User Code Section) -endobj -285 0 obj -<< /S /GoTo /D (section.9) >> -endobj -288 0 obj -(Regular Expressions) -endobj -289 0 obj -<< /S /GoTo /D (subsection.9.1) >> -endobj -292 0 obj -(Concatenation, Alternation and Repetition) -endobj -293 0 obj -<< /S /GoTo /D (subsubsection.9.1.1) >> -endobj -296 0 obj -(Definitions) -endobj -297 0 obj -<< /S /GoTo /D (subsubsection.9.1.2) >> -endobj -300 0 obj -(Operator Precedence) -endobj -301 0 obj -<< /S /GoTo /D (subsubsection.9.1.3) >> -endobj -304 0 obj -(Repetition Markers) -endobj -305 0 obj -<< /S /GoTo /D (subsection.9.2) >> -endobj -308 0 obj -(Regular Expression Atoms) -endobj -309 0 obj -<< /S /GoTo /D (subsubsection.9.2.1) >> -endobj -312 0 obj -(Character Denotations) -endobj -313 0 obj -<< /S /GoTo /D (subsubsection.9.2.2) >> -endobj -316 0 obj -(Lexical Categories -- Named Expressions) -endobj -317 0 obj -<< /S /GoTo /D (subsubsection.9.2.3) >> -endobj -320 0 obj -(Literal Strings) -endobj -321 0 obj -<< /S /GoTo /D (subsubsection.9.2.4) >> -endobj -324 0 obj -(Character Classes) -endobj -325 0 obj -<< /S /GoTo /D (subsubsection.9.2.5) >> -endobj -328 0 obj -(Character Class Predicates) -endobj -329 0 obj -<< /S /GoTo /D (subsubsection.9.2.6) >> -endobj -332 0 obj -(The Dot Metacharacter) -endobj -333 0 obj -<< /S /GoTo /D (subsubsection.9.2.7) >> -endobj -336 0 obj -(Context Markers) -endobj -337 0 obj -<< /S /GoTo /D (subsubsection.9.2.8) >> -endobj -340 0 obj -(End-Of-File Marker) -endobj -341 0 obj -<< /S /GoTo /D (section.10) >> -endobj -344 0 obj -(Special Symbols in Semantic Actions) -endobj -345 0 obj -<< /S /GoTo /D (subsection.10.1) >> -endobj -348 0 obj -(Properties of the Matching Text) -endobj -349 0 obj -<< /S /GoTo /D (subsubsection.10.1.1) >> -endobj -352 0 obj -(The yytext Property) -endobj -353 0 obj -<< /S /GoTo /D (subsubsection.10.1.2) >> -endobj -356 0 obj -(The yyleng Property) -endobj -357 0 obj -<< /S /GoTo /D (subsubsection.10.1.3) >> -endobj -360 0 obj -(The yypos Property) -endobj -361 0 obj -<< /S /GoTo /D (subsubsection.10.1.4) >> -endobj -364 0 obj -(The yyline Property) -endobj -365 0 obj -<< /S /GoTo /D (subsubsection.10.1.5) >> -endobj -368 0 obj -(The yycol Property) -endobj -369 0 obj -<< /S /GoTo /D (subsection.10.2) >> -endobj -372 0 obj -(Looking at the Input Buffer) -endobj -373 0 obj -<< /S /GoTo /D (subsubsection.10.2.1) >> -endobj -376 0 obj -(Current and Lookahead Character) -endobj -377 0 obj -<< /S /GoTo /D (subsubsection.10.2.2) >> -endobj -380 0 obj -(The yyless Method) -endobj -381 0 obj -<< /S /GoTo /D (subsubsection.10.2.3) >> -endobj -384 0 obj -(The yymore Method) -endobj -385 0 obj -<< /S /GoTo /D (subsection.10.3) >> -endobj -388 0 obj -(Changing the Start Condition) -endobj -389 0 obj -<< /S /GoTo /D (subsubsection.10.3.1) >> -endobj -392 0 obj -(The BEGIN Method) -endobj -393 0 obj -<< /S /GoTo /D (subsubsection.10.3.2) >> -endobj -396 0 obj -(The YY\137START Property) -endobj -397 0 obj -<< /S /GoTo /D (subsection.10.4) >> -endobj -400 0 obj -(Stacking Start Conditions) -endobj -401 0 obj -<< /S /GoTo /D (subsection.10.5) >> -endobj -404 0 obj -(Miscellaneous Methods) -endobj -405 0 obj -<< /S /GoTo /D (subsubsection.10.5.1) >> -endobj -408 0 obj -(The ECHO Method) -endobj -409 0 obj -<< /S /GoTo /D (part.3) >> -endobj -412 0 obj -(III Using Unicode) -endobj -413 0 obj -<< /S /GoTo /D (section.11) >> -endobj -416 0 obj -(Overview) -endobj -417 0 obj -<< /S /GoTo /D (subsection.11.1) >> -endobj -420 0 obj -(Gplex Options for Unicode Scanners) -endobj -421 0 obj -<< /S /GoTo /D (subsection.11.2) >> -endobj -424 0 obj -(Unicode Options for Byte-Mode Scanners) -endobj -425 0 obj -<< /S /GoTo /D (section.12) >> -endobj -428 0 obj -(Specifying Scanners) -endobj -429 0 obj -<< /S /GoTo /D (subsection.12.1) >> -endobj -432 0 obj -(Byte Mode Scanners) -endobj -433 0 obj -<< /S /GoTo /D (subsection.12.2) >> -endobj -436 0 obj -(Character Class Predicates in Byte-Mode Scanners) -endobj -437 0 obj -<< /S /GoTo /D (subsection.12.3) >> -endobj -440 0 obj -(Unicode Mode Scanners) -endobj -441 0 obj -<< /S /GoTo /D (subsection.12.4) >> -endobj -444 0 obj -(Overriding the Codepage Fallback at Application Runtime) -endobj -445 0 obj -<< /S /GoTo /D (subsection.12.5) >> -endobj -448 0 obj -(Adaptively Setting the Codepage) -endobj -449 0 obj -<< /S /GoTo /D (section.13) >> -endobj -452 0 obj -(Input Buffers) -endobj -453 0 obj -<< /S /GoTo /D (subsection.13.1) >> -endobj -456 0 obj -(String Input Buffers) -endobj -457 0 obj -<< /S /GoTo /D (subsection.13.2) >> -endobj -460 0 obj -(File Input Buffers) -endobj -461 0 obj -<< /S /GoTo /D (part.4) >> -endobj -464 0 obj -(IV Appendices) -endobj -465 0 obj -<< /S /GoTo /D (section.14) >> -endobj -468 0 obj -(Appendix A: Tables) -endobj -469 0 obj -<< /S /GoTo /D (subsection.14.1) >> -endobj -472 0 obj -(Keyword Commands) -endobj -473 0 obj -<< /S /GoTo /D (subsection.14.2) >> -endobj -476 0 obj -(Semantic Action Symbols) -endobj -477 0 obj -<< /S /GoTo /D (section.15) >> -endobj -480 0 obj -(Appendix B: GPLEX Options) -endobj -481 0 obj -<< /S /GoTo /D (subsection.15.1) >> -endobj -484 0 obj -(Informative Options) -endobj -485 0 obj -<< /S /GoTo /D (subsection.15.2) >> -endobj -488 0 obj -(Boolean Options) -endobj -489 0 obj -<< /S /GoTo /D (section.16) >> -endobj -492 0 obj -(Appendix C: Breaking Changes) -endobj -493 0 obj -<< /S /GoTo /D [494 0 R /Fit ] >> -endobj -496 0 obj << -/Length 1349 -/Filter /FlateDecode ->> -stream -xڥWY6~У D Ozld@.(Ai[,:q}g8-Ebqf8G"'"! F,m9.xBf)3&J@r - -yfp?/(Ia.F~WL_FMQ׮Eߴ˯$L3S4KS(˅pG 5˲ DȯK!D I`)"8eE(O(t+l1Ћc6QC3D~@S~Y(cF+&sra_ڵxD 25k.߸C?0%X|ʣ-.8S?@s&@qTŧŇPgSO: ڧgN&țu+ 3AydoshHR-7sgK*cFkuM\in~Zc!SsHAccEuu3oʺYǨ -fEKp1 DAܟ*<6# / Swp4!qc]tnKP_sYݮ/Y }s,-eSߙ  7zFCG [rVRNGz8!MhX+] u;lP/:5\rKܧo91*/,X"GKC?hkFn_Ц9Za/e#kb &8u;Ǖ^7s5[wrlm%e}z"t(n\m u˺LMxlǦDц}ft5]So5uwh?5(]%/E`'e⁋uἏ6H. $.웙 C=}xn̥rG@ w* z ՉhQ)8WMBZlmho;L -&%oJ6Bw,_(ɶOO%ˬq] 7wϺCi{,tTGLV޺B }׵TYQܦrE]iXBP2q*wٱk5|"ѧ^0aǝ.r$D*t>x(9yOLK͡ =>PTL+uKtftX)A2ai -c9ȣx|CʪmA@.u9z soI_{X `zˏ΁I\"ŞΕ -@[)~؂Cb}@Lp.tMS0g?\`/ Ϟ@0'9gZG5Ws$Lo#"3ULP7bendstream -endobj -494 0 obj << -/Type /Page -/Contents 496 0 R -/Resources 495 0 R -/MediaBox [0 0 595.276 841.89] -/Parent 503 0 R ->> endobj -497 0 obj << -/D [494 0 R /XYZ 125.858 740.998 null] ->> endobj -498 0 obj << -/D [494 0 R /XYZ 125.858 716.092 null] ->> endobj -495 0 obj << -/Font << /F32 500 0 R /F34 502 0 R >> -/ProcSet [ /PDF /Text ] ->> endobj -506 0 obj << -/Length 2276 -/Filter /FlateDecode ->> -stream -x[s۶)H=%cqR'Z̜GmN%RCQN ]Ik. 0x?x Gd9ZMwv&3o3.~D#-d~0F֔*$ޚyPdB#.4xQ3Dع\ LpUMݕuʚc9dFͿ7puݵSn誦ϳ^?~tLAí1KYڿK\b_ь 2(Ǩϧ*ϞբXx(3&E3n :tb/C\)!2">Dbd+R ԰ V0qcI-IlM{(CS+[+eɣr6@p $3&(ҭ1üӶMa~h2L^0n?a/kT䥜w:\(%ަdm(ٗ;%\!.JB~,-nh|a>`Ei_Z#]9iEٍ_'B Dzhlz 9sSIxm>|Lfϔ皹0(0r*N.\` jcx4)^o~Jxve:\3QK:(w0( *VIP\P8GTdcԏmI@mmR|>C#<  9iX;7eWg?nm7/Ӈo%^$ M ĸmuGEnD܂|*+h0f&WR,őŕ gw>˭0Q:2"T@d@r!29_R.GbI _bb-P{:ܩUقIU)0( 3.Mur& `2S(`ü]} -TIt^iFi{\ ȅI9Z/:۵b;v5iE=VP.-Q.}PjݖM:b MEhF$H.ٓ;Rvw-U;<pTyn3QeT䡿4 -2g}&#xLQ3X1܆|Ĥ|*ao=ȢuA47rtIFiYr)=3h(N7Y˲VWd*EHpw2}mwS3= -FTϣQ: -M% Qȅ&1Ò1s%1eZFܢ~QE<>4z Fi‘Oa@.1a7_{?#)cBR hf9`\`ssg.QЁ>g4;QEs o4JËɒGܠ\yxXSĹO@߳^׋c -l<٤H.2J]ɒ/(+HP%sgul2G7MЧ~hl}|89-U[i;v 9SDPO,l~-~3^g6m_0q0Fi>>\>#)Twr*W{YUm3P3*owݰG#07$ :J=M)Ū'YGB_|hqt> endobj -514 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [124.862 670.54 265.461 680.991] -/Subtype /Link -/A << /S /GoTo /D (part.1) >> ->> endobj -515 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [124.862 648.659 182.545 657.7] -/Subtype /Link -/A << /S /GoTo /D (section.1) >> ->> endobj -516 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [139.806 634.732 221.738 645.675] -/Subtype /Link -/A << /S /GoTo /D (subsection.1.1) >> ->> endobj -517 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [139.806 624.819 221.867 633.72] -/Subtype /Link -/A << /S /GoTo /D (subsection.1.2) >> ->> endobj -518 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [162.72 612.839 297.743 621.765] -/Subtype /Link -/A << /S /GoTo /D (subsubsection.1.2.1) >> ->> endobj -519 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [124.862 589.033 235.158 599.917] -/Subtype /Link -/A << /S /GoTo /D (section.2) >> ->> endobj -520 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [139.806 576.948 222.954 587.892] -/Subtype /Link -/A << /S /GoTo /D (subsection.2.1) >> ->> endobj -521 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [124.862 557.003 243.077 566.044] -/Subtype /Link -/A << /S /GoTo /D (section.3) >> ->> endobj -522 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [139.806 543.075 289.772 554.019] -/Subtype /Link -/A << /S /GoTo /D (subsection.3.1) >> ->> endobj -523 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [139.806 533.138 232.776 542.064] -/Subtype /Link -/A << /S /GoTo /D (subsection.3.2) >> ->> endobj -524 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [139.806 519.165 293.418 530.109] -/Subtype /Link -/A << /S /GoTo /D (subsection.3.3) >> ->> endobj -525 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [139.806 507.21 253.061 518.154] -/Subtype /Link -/A << /S /GoTo /D (subsection.3.4) >> ->> endobj -526 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [139.806 495.255 256.587 506.198] -/Subtype /Link -/A << /S /GoTo /D (subsection.3.5) >> ->> endobj -527 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [139.806 483.3 228.572 494.243] -/Subtype /Link -/A << /S /GoTo /D (subsection.3.6) >> ->> endobj -528 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [139.806 473.362 236.921 482.288] -/Subtype /Link -/A << /S /GoTo /D (subsection.3.7) >> ->> endobj -529 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [139.806 461.407 268.621 470.333] -/Subtype /Link -/A << /S /GoTo /D (subsection.3.8) >> ->> endobj -530 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [162.72 449.452 242.54 458.378] -/Subtype /Link -/A << /S /GoTo /D (subsubsection.3.8.1) >> ->> endobj -531 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [139.806 435.479 337.383 446.423] -/Subtype /Link -/A << /S /GoTo /D (subsection.3.9) >> ->> endobj -532 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [124.862 413.691 214.126 424.575] -/Subtype /Link -/A << /S /GoTo /D (section.4) >> ->> endobj -533 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [139.806 403.623 250.211 412.55] -/Subtype /Link -/A << /S /GoTo /D (subsection.4.1) >> ->> endobj -534 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [139.806 389.651 311.102 400.595] -/Subtype /Link -/A << /S /GoTo /D (subsection.4.2) >> ->> endobj -535 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [139.806 377.696 267.117 388.639] -/Subtype /Link -/A << /S /GoTo /D (subsection.4.3) >> ->> endobj -536 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [139.806 365.74 262.395 376.709] -/Subtype /Link -/A << /S /GoTo /D (subsection.4.4) >> ->> endobj -537 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [162.72 353.785 307.147 364.754] -/Subtype /Link -/A << /S /GoTo /D (subsubsection.4.4.1) >> ->> endobj -538 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [162.72 341.83 304.936 352.774] -/Subtype /Link -/A << /S /GoTo /D (subsubsection.4.4.2) >> ->> endobj -539 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [139.806 329.875 267.914 340.819] -/Subtype /Link -/A << /S /GoTo /D (subsection.4.5) >> ->> endobj -540 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [139.806 317.92 292.024 328.864] -/Subtype /Link -/A << /S /GoTo /D (subsection.4.6) >> ->> endobj -541 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [124.862 296.131 232.707 307.016] -/Subtype /Link -/A << /S /GoTo /D (section.5) >> ->> endobj -542 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [139.806 286.064 189.609 294.991] -/Subtype /Link -/A << /S /GoTo /D (subsection.5.1) >> ->> endobj -543 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [139.806 272.092 202.65 283.035] -/Subtype /Link -/A << /S /GoTo /D (subsection.5.2) >> ->> endobj -544 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [124.862 250.303 183.312 261.187] -/Subtype /Link -/A << /S /GoTo /D (section.6) >> ->> endobj -545 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [139.806 238.219 226.182 249.162] -/Subtype /Link -/A << /S /GoTo /D (subsection.6.1) >> ->> endobj -546 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [139.806 226.263 282.011 237.207] -/Subtype /Link -/A << /S /GoTo /D (subsection.6.2) >> ->> endobj -547 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [139.806 214.308 241.962 225.252] -/Subtype /Link -/A << /S /GoTo /D (subsection.6.3) >> ->> endobj -548 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [139.806 202.353 260.014 213.297] -/Subtype /Link -/A << /S /GoTo /D (subsection.6.4) >> ->> endobj -549 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [139.806 190.398 250.49 201.342] -/Subtype /Link -/A << /S /GoTo /D (subsection.6.5) >> ->> endobj -550 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [124.862 170.453 165.589 179.494] -/Subtype /Link -/A << /S /GoTo /D (section.7) >> ->> endobj -551 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [139.806 156.525 277.758 167.469] -/Subtype /Link -/A << /S /GoTo /D (subsection.7.1) >> ->> endobj -552 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [162.72 146.587 274.33 155.514] -/Subtype /Link -/A << /S /GoTo /D (subsubsection.7.1.1) >> ->> endobj -553 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [162.72 132.615 363.316 143.558] -/Subtype /Link -/A << /S /GoTo /D (subsubsection.7.1.2) >> ->> endobj -554 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [162.72 120.659 389.358 131.603] -/Subtype /Link -/A << /S /GoTo /D (subsubsection.7.1.3) >> ->> endobj -507 0 obj << -/D [505 0 R /XYZ 125.858 740.998 null] ->> endobj -513 0 obj << -/D [505 0 R /XYZ 125.858 695.552 null] ->> endobj -504 0 obj << -/Font << /F42 510 0 R /F32 500 0 R /F43 512 0 R /F34 502 0 R >> -/ProcSet [ /PDF /Text ] ->> endobj -557 0 obj << -/Length 2267 -/Filter /FlateDecode ->> -stream -xMo9:JYd,0#7V_3οv7Y%Ė!T}bf#XeGFRVohzifA?ݼ#G/G6?7Ȣ.LtEQڡ7cn*aZPMw!ȉOf]6zVO\_M{nVfW.ݾlˈB LO:DȡM !fzx.eE191OR>Nfd=C}Un٬6mxhZL.r&,'f / cl\L,L53,$KAe`ar `}Z.x|,q0?2͘SJPBr8T@ -"P利(<@T'WyXܭ]r,$'dn!p099UI;K?Qj0]+ '19f"19G[b&?XRnu=^-H^?-eF*Y7DGiXfE *{;azR끬frOAe3319oR LLN47fٴ_! d|ռ}`eeiJ~D./$G_jBs=o oG˕' ĴPYPGO*q`rr"upf0^2)`09Cb5jG5ҷv]= %sYn<-<@,rD,W(er 2~d*XY ƧxD˦g0+MnwBN8Tfl&,9`!$2M!"sF`~e>6m.]^tgձPqT)*NQ9@*t PITAWBs)26&H9CHُ$B%zX}Lbn(,$7I(r &L"ʦʉCaM,FG q2)L& -!DA4ObzGV9ƨ3b8TfP9`+͈6|4Vw ܞ$'dn!p9!;\ 7%endstream -endobj -556 0 obj << -/Type /Page -/Contents 557 0 R -/Resources 555 0 R -/MediaBox [0 0 595.276 841.89] -/Parent 503 0 R -/Annots [ 559 0 R 560 0 R 561 0 R 562 0 R 563 0 R 564 0 R 565 0 R 566 0 R 567 0 R 568 0 R 569 0 R 570 0 R 571 0 R 572 0 R 573 0 R 574 0 R 575 0 R 576 0 R 577 0 R 578 0 R 579 0 R 580 0 R 581 0 R 582 0 R 583 0 R 584 0 R 585 0 R 586 0 R 587 0 R 588 0 R 589 0 R 590 0 R 591 0 R 592 0 R 593 0 R 594 0 R 595 0 R 596 0 R 597 0 R 598 0 R 599 0 R 600 0 R 601 0 R ] ->> endobj -559 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [162.72 702.976 294.554 713.92] -/Subtype /Link -/A << /S /GoTo /D (subsubsection.7.1.4) >> ->> endobj -560 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [139.806 691.021 253.538 701.964] -/Subtype /Link -/A << /S /GoTo /D (subsection.7.2) >> ->> endobj -561 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [139.806 681.083 280.108 690.009] -/Subtype /Link -/A << /S /GoTo /D (subsection.7.3) >> ->> endobj -562 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [139.806 667.11 236.273 678.054] -/Subtype /Link -/A << /S /GoTo /D (subsection.7.4) >> ->> endobj -563 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [139.806 655.155 205.021 666.099] -/Subtype /Link -/A << /S /GoTo /D (subsection.7.5) >> ->> endobj -564 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [139.806 643.2 214.804 654.144] -/Subtype /Link -/A << /S /GoTo /D (subsection.7.6) >> ->> endobj -565 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [124.862 608.553 253.076 621.215] -/Subtype /Link -/A << /S /GoTo /D (part.2) >> ->> endobj -566 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [124.862 587.041 203.247 597.925] -/Subtype /Link -/A << /S /GoTo /D (section.8) >> ->> endobj -567 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [139.806 576.973 256.706 585.9] -/Subtype /Link -/A << /S /GoTo /D (subsection.8.1) >> ->> endobj -568 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [162.72 565.018 285.957 573.944] -/Subtype /Link -/A << /S /GoTo /D (subsubsection.8.1.1) >> ->> endobj -569 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [162.72 553.063 280.149 561.989] -/Subtype /Link -/A << /S /GoTo /D (subsubsection.8.1.2) >> ->> endobj -570 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [139.806 539.09 224.607 550.034] -/Subtype /Link -/A << /S /GoTo /D (subsection.8.2) >> ->> endobj -571 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [139.806 529.153 259.356 538.079] -/Subtype /Link -/A << /S /GoTo /D (subsection.8.3) >> ->> endobj -572 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [162.72 515.18 338.519 526.124] -/Subtype /Link -/A << /S /GoTo /D (subsubsection.8.3.1) >> ->> endobj -573 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [162.72 503.225 337.951 514.169] -/Subtype /Link -/A << /S /GoTo /D (subsubsection.8.3.2) >> ->> endobj -574 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [162.72 493.287 310.604 502.213] -/Subtype /Link -/A << /S /GoTo /D (subsubsection.8.3.3) >> ->> endobj -575 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [162.72 479.315 311.959 490.258] -/Subtype /Link -/A << /S /GoTo /D (subsubsection.8.3.4) >> ->> endobj -576 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [162.72 467.359 355.684 478.303] -/Subtype /Link -/A << /S /GoTo /D (subsubsection.8.3.5) >> ->> endobj -577 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [162.72 457.422 345.144 466.348] -/Subtype /Link -/A << /S /GoTo /D (subsubsection.8.3.6) >> ->> endobj -578 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [162.72 445.466 342.982 454.393] -/Subtype /Link -/A << /S /GoTo /D (subsubsection.8.3.7) >> ->> endobj -579 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [162.72 433.511 343.829 442.438] -/Subtype /Link -/A << /S /GoTo /D (subsubsection.8.3.8) >> ->> endobj -580 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [162.72 419.539 277.11 430.482] -/Subtype /Link -/A << /S /GoTo /D (subsubsection.8.3.9) >> ->> endobj -581 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [139.806 409.521 237.768 418.527] -/Subtype /Link -/A << /S /GoTo /D (subsection.8.4) >> ->> endobj -582 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [162.72 395.628 317.508 406.572] -/Subtype /Link -/A << /S /GoTo /D (subsubsection.8.4.1) >> ->> endobj -583 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [162.72 383.673 324.841 394.617] -/Subtype /Link -/A << /S /GoTo /D (subsubsection.8.4.2) >> ->> endobj -584 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [162.72 371.718 245.579 382.662] -/Subtype /Link -/A << /S /GoTo /D (subsubsection.8.4.3) >> ->> endobj -585 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [162.72 359.763 274.072 370.707] -/Subtype /Link -/A << /S /GoTo /D (subsubsection.8.4.4) >> ->> endobj -586 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [162.72 349.825 322.24 358.751] -/Subtype /Link -/A << /S /GoTo /D (subsubsection.8.4.5) >> ->> endobj -587 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [139.806 337.87 257.404 346.796] -/Subtype /Link -/A << /S /GoTo /D (subsection.8.5) >> ->> endobj -588 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [124.862 314.064 229.349 324.948] -/Subtype /Link -/A << /S /GoTo /D (section.9) >> ->> endobj -589 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [139.806 301.98 333.507 312.923] -/Subtype /Link -/A << /S /GoTo /D (subsection.9.1) >> ->> endobj -590 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [162.72 291.962 240.876 300.968] -/Subtype /Link -/A << /S /GoTo /D (subsubsection.9.1.1) >> ->> endobj -591 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [162.72 278.069 279.85 289.013] -/Subtype /Link -/A << /S /GoTo /D (subsubsection.9.1.2) >> ->> endobj -592 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [162.72 266.114 273.693 277.058] -/Subtype /Link -/A << /S /GoTo /D (subsubsection.9.1.3) >> ->> endobj -593 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [139.806 254.159 271.929 265.103] -/Subtype /Link -/A << /S /GoTo /D (subsection.9.2) >> ->> endobj -594 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [162.72 244.141 285.957 253.147] -/Subtype /Link -/A << /S /GoTo /D (subsubsection.9.2.1) >> ->> endobj -595 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [162.72 230.249 360.646 241.192] -/Subtype /Link -/A << /S /GoTo /D (subsubsection.9.2.2) >> ->> endobj -596 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [162.72 218.293 253.877 229.237] -/Subtype /Link -/A << /S /GoTo /D (subsubsection.9.2.3) >> ->> endobj -597 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [162.72 208.276 267.695 217.282] -/Subtype /Link -/A << /S /GoTo /D (subsubsection.9.2.4) >> ->> endobj -598 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [162.72 196.321 302.833 205.327] -/Subtype /Link -/A << /S /GoTo /D (subsubsection.9.2.5) >> ->> endobj -599 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [162.72 184.366 288.985 193.372] -/Subtype /Link -/A << /S /GoTo /D (subsubsection.9.2.6) >> ->> endobj -600 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [162.72 172.41 263.581 181.416] -/Subtype /Link -/A << /S /GoTo /D (subsubsection.9.2.7) >> ->> endobj -601 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [162.72 160.455 277 169.461] -/Subtype /Link -/A << /S /GoTo /D (subsubsection.9.2.8) >> ->> endobj -558 0 obj << -/D [556 0 R /XYZ 125.858 740.998 null] ->> endobj -555 0 obj << -/Font << /F42 510 0 R /F32 500 0 R /F34 502 0 R /F43 512 0 R >> -/ProcSet [ /PDF /Text ] ->> endobj -604 0 obj << -/Length 2082 -/Filter /FlateDecode ->> -stream -xݚ]o+|i_%Fvn۸(zuĨ-8NY,N ],^rpH -GGIbiQkh(F Lf]/y'h~o٧yk ߚyP,(os(>ШB^,Z,d$\?7bYպq[.ݲ*XÎQA3JNPm6vPs}nl5.Մ__Cض-}pU葲P-9ib֏ * &$YBr!E@WQC+q200ۍrR;dE\Y9$v GwwY43K03D.0c ->g&;fOj*y~U9t.mW4Ji&p!r!SAPO9ɘ+vbqigL'#L1'{Odɔ_B^.;ƌ5@̡`vhONh1>Ӷ oR~Β}ڸɠ6]u]mۄ!N/PeNJُ++OׂC.l`I%* 'E4ʳHy&XeDz߿r'8qq|u9YG *̷0p6a ! |H>]O[. ]{=F}Q'FY*wT ~P.)RpȘ3iV4Ju&`!r$ؙ_剄d;MMgXL>lVE -7~~w5N95wv4;;ξЀg#rْL½ݚʠ=뼾zovއKO=.\qT(*TrUOnIw}}}zU -J)nwۀvw_S{N5QZfXLZN FB^+l -U -'9CzGAt)F<ĵ&GȞriXnj[_6o_7WV{ֿvkٸ?K O=r!|WKUl z]>]cFP]766}3# 91E,S׾aL' zrC;+$)|+s|:>ASBaMVP:60L-%I@$pS7u %.?moՍQv`y.~Q9?09 -ѿh)}*jUU=lVhཀӋFyz;z\דJ drYa턚qU3c{T?3>5*@sR 6HJendstream -endobj -603 0 obj << -/Type /Page -/Contents 604 0 R -/Resources 602 0 R -/MediaBox [0 0 595.276 841.89] -/Parent 503 0 R -/Annots [ 606 0 R 607 0 R 608 0 R 609 0 R 610 0 R 611 0 R 612 0 R 613 0 R 614 0 R 615 0 R 616 0 R 617 0 R 618 0 R 619 0 R 620 0 R 621 0 R 622 0 R 623 0 R 624 0 R 625 0 R 626 0 R 627 0 R 628 0 R 629 0 R 630 0 R 631 0 R 632 0 R 633 0 R 634 0 R 635 0 R 636 0 R 637 0 R 638 0 R 639 0 R 640 0 R 643 0 R 644 0 R 645 0 R ] ->> endobj -606 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [124.862 703.105 297.891 713.989] -/Subtype /Link -/A << /S /GoTo /D (section.10) >> ->> endobj -607 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [139.806 691.021 291.147 701.964] -/Subtype /Link -/A << /S /GoTo /D (subsection.10.1) >> ->> endobj -608 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [162.72 679.065 276.134 690.009] -/Subtype /Link -/A << /S /GoTo /D (subsubsection.10.1.1) >> ->> endobj -609 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [162.72 667.11 278.495 678.054] -/Subtype /Link -/A << /S /GoTo /D (subsubsection.10.1.2) >> ->> endobj -610 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [162.72 655.155 275.178 666.099] -/Subtype /Link -/A << /S /GoTo /D (subsubsection.10.1.3) >> ->> endobj -611 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [162.72 643.2 276.283 654.144] -/Subtype /Link -/A << /S /GoTo /D (subsubsection.10.1.4) >> ->> endobj -612 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [162.72 631.245 273.514 642.189] -/Subtype /Link -/A << /S /GoTo /D (subsubsection.10.1.5) >> ->> endobj -613 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [139.806 619.29 274.589 630.233] -/Subtype /Link -/A << /S /GoTo /D (subsection.10.2) >> ->> endobj -614 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [162.72 609.272 331.874 618.278] -/Subtype /Link -/A << /S /GoTo /D (subsubsection.10.2.1) >> ->> endobj -615 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [162.72 595.379 272.966 606.323] -/Subtype /Link -/A << /S /GoTo /D (subsubsection.10.2.2) >> ->> endobj -616 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [162.72 583.424 278.495 594.368] -/Subtype /Link -/A << /S /GoTo /D (subsubsection.10.2.3) >> ->> endobj -617 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [139.806 571.469 281.782 582.413] -/Subtype /Link -/A << /S /GoTo /D (subsection.10.3) >> ->> endobj -618 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [162.72 561.491 277.987 570.458] -/Subtype /Link -/A << /S /GoTo /D (subsubsection.10.3.1) >> ->> endobj -619 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [162.72 547.559 294.545 558.502] -/Subtype /Link -/A << /S /GoTo /D (subsubsection.10.3.2) >> ->> endobj -620 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [139.806 535.603 267.117 546.547] -/Subtype /Link -/A << /S /GoTo /D (subsection.10.4) >> ->> endobj -621 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [139.806 525.666 259.625 534.592] -/Subtype /Link -/A << /S /GoTo /D (subsection.10.5) >> ->> endobj -622 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [162.72 513.671 275.178 522.637] -/Subtype /Link -/A << /S /GoTo /D (subsubsection.10.5.1) >> ->> endobj -623 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [124.862 477.046 226.822 489.708] -/Subtype /Link -/A << /S /GoTo /D (part.3) >> ->> endobj -624 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [124.862 457.377 182.545 466.418] -/Subtype /Link -/A << /S /GoTo /D (section.11) >> ->> endobj -625 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [139.806 443.449 311.76 454.393] -/Subtype /Link -/A << /S /GoTo /D (subsection.11.1) >> ->> endobj -626 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [139.806 431.494 332.94 442.438] -/Subtype /Link -/A << /S /GoTo /D (subsection.11.2) >> ->> endobj -627 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [124.862 409.706 227.317 420.59] -/Subtype /Link -/A << /S /GoTo /D (section.12) >> ->> endobj -628 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [139.806 397.621 247.72 408.565] -/Subtype /Link -/A << /S /GoTo /D (subsection.12.1) >> ->> endobj -629 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [139.806 385.666 367.519 396.609] -/Subtype /Link -/A << /S /GoTo /D (subsection.12.2) >> ->> endobj -630 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [139.806 375.728 262.654 384.654] -/Subtype /Link -/A << /S /GoTo /D (subsection.12.3) >> ->> endobj -631 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [139.806 361.755 397.955 372.699] -/Subtype /Link -/A << /S /GoTo /D (subsection.12.4) >> ->> endobj -632 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [139.806 349.8 296.308 360.744] -/Subtype /Link -/A << /S /GoTo /D (subsection.12.5) >> ->> endobj -633 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [124.862 328.012 199.641 338.896] -/Subtype /Link -/A << /S /GoTo /D (section.13) >> ->> endobj -634 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [139.806 315.927 244.712 326.871] -/Subtype /Link -/A << /S /GoTo /D (subsection.13.1) >> ->> endobj -635 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [139.806 303.972 235.855 314.916] -/Subtype /Link -/A << /S /GoTo /D (subsection.13.2) >> ->> endobj -636 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [124.862 269.325 210.91 281.987] -/Subtype /Link -/A << /S /GoTo /D (part.4) >> ->> endobj -637 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [124.862 247.813 225.882 258.697] -/Subtype /Link -/A << /S /GoTo /D (section.14) >> ->> endobj -638 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [139.806 235.728 249.165 246.672] -/Subtype /Link -/A << /S /GoTo /D (subsection.14.1) >> ->> endobj -639 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [139.806 223.773 268.771 234.717] -/Subtype /Link -/A << /S /GoTo /D (subsection.14.2) >> ->> endobj -640 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [124.862 201.985 267.207 212.869] -/Subtype /Link -/A << /S /GoTo /D (section.15) >> ->> endobj -643 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [139.806 189.9 245.389 200.844] -/Subtype /Link -/A << /S /GoTo /D (subsection.15.1) >> ->> endobj -644 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [139.806 177.945 231.96 188.888] -/Subtype /Link -/A << /S /GoTo /D (subsection.15.2) >> ->> endobj -645 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [124.862 156.156 276.711 167.04] -/Subtype /Link -/A << /S /GoTo /D (section.16) >> ->> endobj -605 0 obj << -/D [603 0 R /XYZ 125.858 740.998 null] ->> endobj -602 0 obj << -/Font << /F42 510 0 R /F32 500 0 R /F43 512 0 R /F34 502 0 R /F47 642 0 R >> -/ProcSet [ /PDF /Text ] ->> endobj -648 0 obj << -/Length 2435 -/Filter /FlateDecode ->> -stream -x]sWh7҅/vvwjC6'2RT6/ BptJ:;#!''\hf*cei&lro?~CbQw7\)1)YD??.fs+zuso-͕.az{}r$bRNbR匋_fe~ʹ_=Yd.y?͹ɲbfӦ?۪~}W0~W l6Ҿ6fL.y=iE2(Sj&<"D>Ã?u\uUc|}(/ZN" H5F!0m!ۺ&醦lZ YEUt>ۻB#aҨE)$fmlI5`K![UaI*`>M_LOd7b>[^Uۭj Ai(Me -P5"mGQ"̺USyikQ?3P9iI;Q gt7{OvNzbQ1g'' Y-%h 9D+ˌrK#aBn6Ŵn*;K{fԹ3 LǠ4d)%L 9d㒇3vlva ܛ;kn;#B &(Ơ4Γ((9DA!,c Qv2OWպoZݽ9 ͥ1AiLo&J1rNLSbmͰlqiݏO&_@HQPE S(H9@A!" 9bYm}Lp}}F@b@(9B!rJ#5f@n R| ,mYAiVyɕ1)9d:"tvvwu0f2;.~6]\rCxUy1} U:.HѾoj US}iP4\ -B()aJi/ˮ?_ׁ~70$VVWseE{|Ơ48H9D!'3\vL?)G7b7]_oMcFW"Hk!L1-5(!{ wbUNkV -&^9QqȘ./[,5xDs`#L-!lU)6x.;e6SV GK @:)4$4$EPZB:&cАx<mC~WvD AcUjJ$41(*O$,Jir+7,K^B>Xj2\ŔoQxq_R;TFy&H9DD!"S@Abq9B O0.+q8QvӰaӯ7M?<+7R ܢ)AiʱiʔR&䐲RИ˗iw0+Wtwu3+SBh*cPJlSrIL!BHa_Mӏ.V]٭,fe'OIcοiǠ2C 9]WX,@1n` -J;պ.aPM75gR0ݼmO ];5Li -eF9QFBČ$4QOߺR0p UZV opwIa.6x JXS8J &`Y欔&*Lv;u4L]]G~~، 3vٺ-&k!) U>%~ RQr(V/[@9/A`i:^ -s<1G)9L!BL^ -ePu;蔗v@"/A+i:cPNdJ!NYVHH+?O>k 㧏Ђ -H媇J\uȄdƠ4*7!䐌* MyD> s_yZJ1mÉaBslZWS`A41( 6rZ%drC6湄{bk}7lfՁ.h@ Ai:]: C:^} JQ$WKNȡ\:@|j|wAhcPEdNN -(9dA!3K  Ai CEFJ!BS2K@:G)@.5u3Tίm,IvYx~FJHQPltH9K!z0~> endobj -651 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [139.806 680.709 296.178 691.653] -/Subtype /Link -/A << /S /GoTo /D (figure.1) >> ->> endobj -652 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [139.806 670.772 266.53 679.698] -/Subtype /Link -/A << /S /GoTo /D (figure.2) >> ->> endobj -653 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [139.806 658.777 276.921 667.743] -/Subtype /Link -/A << /S /GoTo /D (figure.3) >> ->> endobj -654 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [139.806 644.844 331.475 655.788] -/Subtype /Link -/A << /S /GoTo /D (figure.4) >> ->> endobj -655 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [139.806 634.866 285.857 643.832] -/Subtype /Link -/A << /S /GoTo /D (figure.5) >> ->> endobj -656 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [139.806 620.933 298.27 631.877] -/Subtype /Link -/A << /S /GoTo /D (figure.6) >> ->> endobj -657 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [139.806 610.996 329.353 619.922] -/Subtype /Link -/A << /S /GoTo /D (figure.7) >> ->> endobj -658 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [139.806 597.023 303.211 607.967] -/Subtype /Link -/A << /S /GoTo /D (figure.8) >> ->> endobj -659 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [139.806 585.068 334.036 596.012] -/Subtype /Link -/A << /S /GoTo /D (figure.9) >> ->> endobj -660 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [139.806 573.113 322.968 584.057] -/Subtype /Link -/A << /S /GoTo /D (figure.10) >> ->> endobj -661 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [139.806 561.158 284.103 572.101] -/Subtype /Link -/A << /S /GoTo /D (figure.11) >> ->> endobj -662 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [139.806 549.202 336.277 560.171] -/Subtype /Link -/A << /S /GoTo /D (figure.12) >> ->> endobj -663 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [139.806 537.247 282.29 548.191] -/Subtype /Link -/A << /S /GoTo /D (figure.13) >> ->> endobj -664 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [139.806 525.292 320.069 536.236] -/Subtype /Link -/A << /S /GoTo /D (figure.14) >> ->> endobj -665 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [139.806 513.337 370.15 524.281] -/Subtype /Link -/A << /S /GoTo /D (figure.15) >> ->> endobj -666 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [139.806 501.382 299.745 512.326] -/Subtype /Link -/A << /S /GoTo /D (figure.16) >> ->> endobj -667 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [139.806 489.427 297.972 500.37] -/Subtype /Link -/A << /S /GoTo /D (figure.17) >> ->> endobj -668 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [139.806 477.471 279.272 488.415] -/Subtype /Link -/A << /S /GoTo /D (figure.18) >> ->> endobj -669 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [139.806 465.516 297.384 476.46] -/Subtype /Link -/A << /S /GoTo /D (figure.19) >> ->> endobj -670 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [139.806 453.561 255.192 464.53] -/Subtype /Link -/A << /S /GoTo /D (figure.20) >> ->> endobj -671 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [139.806 443.623 309.876 452.55] -/Subtype /Link -/A << /S /GoTo /D (figure.21) >> ->> endobj -672 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [139.806 429.651 375.31 440.595] -/Subtype /Link -/A << /S /GoTo /D (figure.22) >> ->> endobj -673 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [139.806 417.696 324.461 428.639] -/Subtype /Link -/A << /S /GoTo /D (figure.23) >> ->> endobj -674 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [139.806 405.74 427.863 416.684] -/Subtype /Link -/A << /S /GoTo /D (figure.24) >> ->> endobj -675 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [139.806 393.885 331.335 404.754] -/Subtype /Link -/A << /S /GoTo /D (figure.25) >> ->> endobj -676 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [139.806 383.808 264.327 392.774] -/Subtype /Link -/A << /S /GoTo /D (figure.26) >> ->> endobj -677 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [139.806 369.875 308.064 380.819] -/Subtype /Link -/A << /S /GoTo /D (figure.27) >> ->> endobj -678 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [139.806 357.92 336.308 368.864] -/Subtype /Link -/A << /S /GoTo /D (figure.28) >> ->> endobj -679 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [139.806 345.965 305.752 356.933] -/Subtype /Link -/A << /S /GoTo /D (figure.29) >> ->> endobj -680 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [139.806 334.009 317.567 344.953] -/Subtype /Link -/A << /S /GoTo /D (figure.30) >> ->> endobj -681 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [139.806 322.054 375.31 332.998] -/Subtype /Link -/A << /S /GoTo /D (figure.31) >> ->> endobj -682 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [139.806 310.099 334.036 321.043] -/Subtype /Link -/A << /S /GoTo /D (figure.32) >> ->> endobj -683 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [139.806 298.144 322.968 309.088] -/Subtype /Link -/A << /S /GoTo /D (figure.33) >> ->> endobj -684 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [139.806 286.189 295.431 297.157] -/Subtype /Link -/A << /S /GoTo /D (figure.34) >> ->> endobj -685 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [139.806 274.333 290.23 285.202] -/Subtype /Link -/A << /S /GoTo /D (figure.35) >> ->> endobj -686 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [139.806 262.278 298.27 273.222] -/Subtype /Link -/A << /S /GoTo /D (figure.36) >> ->> endobj -687 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [139.806 250.323 282.29 261.267] -/Subtype /Link -/A << /S /GoTo /D (figure.37) >> ->> endobj -649 0 obj << -/D [647 0 R /XYZ 125.858 740.998 null] ->> endobj -650 0 obj << -/D [647 0 R /XYZ 125.858 692.898 null] ->> endobj -646 0 obj << -/Font << /F42 510 0 R /F32 500 0 R /F43 512 0 R /F34 502 0 R >> -/ProcSet [ /PDF /Text ] ->> endobj -727 0 obj << -/Length 3046 -/Filter /FlateDecode ->> -stream -xڝZ~E83|H1 isM6@^?вl%Uo;akgp?W=HEI$E|8Їwœlҟ}Ȭyx<>D6q:zMM놆~?|4&@(aRiNI)7?}AE)'Z8WB[=˞esAC_/E=a6ǦhL(9Ur@ڈg ũIohJ,-|pݡQdm>5%Xĩ0Y̌F.BYFoؑ&JdjY͂_t.35]\YktDRBXvU7 XmH:mkڎ:wh;hdm\BH'0V1"\$l4\:mZbR F[PoyC V}uA(6;ț/AdN*r?WV]PpOЦVyU͕RV s^ Ib4Mkfa&nr0ݙO;6uOI~U@(Q& 윉ő$W-x{ܠ"@]ѭ7tJ}G\4S\n0 DȾon}s{>}i[Ќ 7AZhq(Z-2b@O_D^sHDQ(0 (ǵc'b5 ZLa/OcJ% +;T!}qFH?9o ZJȉ --%lf@uPubL0(#Ďq# y&]Cc'];m鸰C5ә>P ae`:mӯEلC4K [g}Sqf!qFmыTspїg^ -CV^V%+Cs<4I I 6=O&kbadi9Qr͏>]݉G~Cy)hh5X^M:Q3 (cF|o8/Boe}ϒkM]CIH28!*\ !zG& grpWL 7D4^+@J$P4 :o񞎽\0ٌ{F^Lj&q9vM)Cƒ~vh sMPV@x,<)RI7XXx9/eG@4~'Ra,a:e̟ D0n)$Ny6>}}$-&BT)X3)z2w|*JߢfXTNrMDVڶ*C^{2uNTq0#꜂g$zr>5&SwB$VtՐ:Ar>~6l՞V lxDz*|N[B -i3Eс۬'e. X*=Āu@j񘰍]O8P۬}g ˩L_/%Ed5\Yya֫*.S"qeف -`ͫaPYڬ +AG=]|X5( ۷.gX~}1bx;-L(S&^\D"ͳSY6&]ũI%h|oe?~๻;Tl&$(X4 d-޻[tz+.C0¬ф x~Uendstream -endobj -726 0 obj << -/Type /Page -/Contents 727 0 R -/Resources 725 0 R -/MediaBox [0 0 595.276 841.89] -/Parent 503 0 R -/Annots [ 731 0 R 732 0 R 733 0 R ] ->> endobj -731 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [453.629 289.676 468.075 300.619] -/Subtype /Link -/A << /S /GoTo /D (subsection.3.2) >> ->> endobj -732 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [143.253 243.897 151.88 252.799] -/Subtype /Link -/A << /S /GoTo /D (part.2) >> ->> endobj -733 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [354.052 158.792 361.025 169.735] -/Subtype /Link -/A << /S /GoTo /D (figure.3) >> ->> endobj -728 0 obj << -/D [726 0 R /XYZ 125.858 740.998 null] ->> endobj -6 0 obj << -/D [726 0 R /XYZ 125.858 716.092 null] ->> endobj -10 0 obj << -/D [726 0 R /XYZ 125.858 667.391 null] ->> endobj -14 0 obj << -/D [726 0 R /XYZ 125.858 230.323 null] ->> endobj -725 0 obj << -/Font << /F32 500 0 R /F43 512 0 R /F34 502 0 R /F56 730 0 R >> -/ProcSet [ /PDF /Text ] ->> endobj -736 0 obj << -/Length 3129 -/Filter /FlateDecode ->> -stream -x[_OG8$R"}h&EAkӶYr%6߽3P?s7 p8,p8?U* KteYڞ>." r}WˤXgw?za}?}N{1h-DʔqLwX"3fXR2,♑xԍ&+)WL}: -V7'ݞC%,J9*Fq5zo{ST?!ξr;+,I(D,'*Ҟ@ۼ+a+SiF[f}c z84 \ s =eIgMu9=|l umg)ƣhm^UhA|ɫYÿֈʂK[T[w8̉yt_|֝}pi bSv'O4YT8/TG xD/;984H?#ߣO:mS0fM~/v ;%R@ g\B%Ji1`Ȑ])a""^piJq&F2"`!(!QԈ}3Xvx^QWzp Ɍ nJ(xp?YtS|#J=4QˮXdDvPg Npnx\!P@bmPU#[ze+[MӱJdJ^7(08Vc{ -ʼTljcRCUX9hf$lb,QY2 F]hKǺHWkFc/\>QM{̱2#Q:+{[Pb(ɞ ?TX?CU,NKѠ*_jsc-W0?PpO/p}z!jN/t7^ :,~-sH%m{O3w/Rx/ 0iĤT9D4Off3< =0 ~0*1a`K3Dq8opz'sـeʾBۖřC4Off73@;> 4|0tWK"zz`32=`9a4!-1Q$A3ka03:,l20q7yfdwM.I9<GGUx̡0a!8 i3kf| -)SٯGL_ T  ׏Ba~7tKDiDaDE')<P(qwt_#Ϸ-ޤ6[[zT - IƄ0^l0HeQJ'[jxEFiR M7e-e¾}wzo2Ypz#ST;n(my}pLs}@ 2v; F,4 U( {% /9/L^ᙻB;0yƼ#ª3tͷEYt&sS#ˏuQl|db5Dc"x_4mjtG]Y $mP|,t 's$FG[-crvʏ~Va ea0m^mHnm^3.8?:3\a~Zz]j*{k*:q 5g4=w}kqPh7vQM/Ű\ Yg26?nRT9я•ڷWN՝ @-8}i@?%E4`|L?6\\2L9SAܼ\^oXVLxzл72lįgWL3KtqϺ!sN&-7U~v@#6&ޅ| |ICмN7n,ggf2OJhvendstream -endobj -735 0 obj << -/Type /Page -/Contents 736 0 R -/Resources 734 0 R -/MediaBox [0 0 595.276 841.89] -/Parent 741 0 R -/Annots [ 738 0 R 739 0 R 740 0 R ] ->> endobj -738 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [412.62 679.065 419.593 690.009] -/Subtype /Link -/A << /S /GoTo /D (figure.1) >> ->> endobj -739 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [153.365 440.745 160.339 451.689] -/Subtype /Link -/A << /S /GoTo /D (figure.2) >> ->> endobj -740 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [408.067 212.814 422.513 223.758] -/Subtype /Link -/A << /S /GoTo /D (subsection.3.3) >> ->> endobj -737 0 obj << -/D [735 0 R /XYZ 125.858 740.998 null] ->> endobj -688 0 obj << -/D [735 0 R /XYZ 251.652 665.083 null] ->> endobj -689 0 obj << -/D [735 0 R /XYZ 266.476 426.763 null] ->> endobj -18 0 obj << -/D [735 0 R /XYZ 125.858 294.258 null] ->> endobj -734 0 obj << -/Font << /F42 510 0 R /F32 500 0 R /F34 502 0 R /F56 730 0 R /F43 512 0 R >> -/ProcSet [ /PDF /Text ] ->> endobj -744 0 obj << -/Length 3526 -/Filter /FlateDecode ->> -stream -x]6}N.bFp@H-.m=>ȶU\IN8)K,}HFp>81mf9ŋz}=*z@{Je6B#\8,u򻥁7/dk) K% {yQtbg 0#"h83Xq¸۫☕2ѳJ$jy0N&zX86EYEv67iu?k'jSUqGof%CF bV)j&f-y!Ϗ@Hb9\sv৬nzu 4/l"_ -}hF4Akz(m^{>H{wۼm#MȖ+ oS)62PHw[*+uCOmkPgcoڢ%Wɋ^ŋHIJn~t`nXbz $|`̣„"0$ - u #͢\ ?{£b)/T -ŤtU )Z´ˁA#^8ZDR@k -C P<#U*zM*d?:#O;vqpUUz|UAa%aoU\3޼o d릭M{mրSF& ͤ:B%h#LY` -No SpƜ&~.e*2vѣo %XG,r -gހ5Oݏ?Nj-}u3 ^cƭ],M\޽4f8 Cۛ+bXFzP -$KӅdx׉ο,*h%(.r=mʬi@hR=4עLb",i wVqT^x_-F x`fq_/zCVgıwQ -<]h ?QvOi[HGY[9]( >^DoqJ `9,>i.O?K5$7y1Al fBaDRDIŌJ{eO>m"}lq+) `1ӖDodK\{Eݞ!61FFNtjC1 2$7D1$qO\iʒ= d*BiyR|[Pb.&NQ997⾈ ܦՂ1O'ٹmZŔ50Z/ S<~Ɛz*vV= 2n߄zR%Q7Rѹ^-FRh- <\$I=$)!](e9vUH惨[ɦ, -ci0 1^f4EɄ,%"Ioh";8) >]20B+zM]hNF=J]] \^.;2Mxo"@Rpmѭ`ֳ0(RPݳ)9hԑ[nѤHuqsYauZ;_K5z[y,3j!D^ջ]OGRW]gH/"yb}ӧɘ igoL{s~?YG{,,'u\!3Ԍ b:sX\,@S#Ctmy7U W]ک-p d-Bs!UWUeq2w,)pM *Y&o,]Ův9ض,{P*=,~!>lh"sɆڕԠ ]9^G<7.6{ӮJ?)N`axg%c_174N(L"]U3r-*j*BhŞa1KGk7[z)#qWrv -; -ڼg[RRCP7-=8S3B?$p yϤ- :`U aR&y~6B90;`΂ڶR:!\(dKYk:T -x]UU맼=R &cn`]#T ->m螨FN.ґ6q3h -ЫC_/T`O)p 8~!3B*B2[؝&nK Y88\Ah`}[q?v4U :EPE`>Wv}K y/^ !ӷV6T皺.hz@r4VΩIsJ[w0T eh?eIN-#gG f_5=Y8%I7^t*n.zZę@u1wMezY &Avmej6Q!j۰b/=χs 0Tu7$nC&IBO&!5H0^]%|? X%u+O`h>@cT[?rzpa|8VH?iuEK| q-$Ve8I#\#1u1`sI@ӥs4z-!s=, ,sO"҄d'w жKu{/~;0]gztm -ԝm[0;\u^&CXl5!5vwϬ`wW>&:JREæipmP7?8v8uQcTgJ+\h$l֑ŗ=:H+xd;hnz7@\pP kw;``r4E  ŏE!ٲqˉSwvJ܄i*OAV+vKBvr<bendstream -endobj -743 0 obj << -/Type /Page -/Contents 744 0 R -/Resources 742 0 R -/MediaBox [0 0 595.276 841.89] -/Parent 741 0 R -/Annots [ 746 0 R 748 0 R 752 0 R 753 0 R 754 0 R ] ->> endobj -746 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [300.551 669.128 314.997 678.054] -/Subtype /Link -/A << /S /GoTo /D (subsection.3.6) >> ->> endobj -748 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [316.919 609.95 323.893 620.893] -/Subtype /Link -/A << /S /GoTo /D (figure.3) >> ->> endobj -752 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [278.687 371.061 285.661 382.029] -/Subtype /Link -/A << /S /GoTo /D (figure.5) >> ->> endobj -753 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [342.612 287.375 354.567 298.318] -/Subtype /Link -/A << /S /GoTo /D (figure.21) >> ->> endobj -754 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [275.653 275.419 290.099 286.363] -/Subtype /Link -/A << /S /GoTo /D (subsection.4.1) >> ->> endobj -745 0 obj << -/D [743 0 R /XYZ 125.858 740.998 null] ->> endobj -747 0 obj << -/D [743 0 R /XYZ 125.858 636.874 null] ->> endobj -690 0 obj << -/D [743 0 R /XYZ 261.28 594.189 null] ->> endobj -742 0 obj << -/Font << /F42 510 0 R /F32 500 0 R /F43 512 0 R /F34 502 0 R /F56 730 0 R /F53 751 0 R >> -/ProcSet [ /PDF /Text ] ->> endobj -758 0 obj << -/Length 2668 -/Filter /FlateDecode ->> -stream -xڍYK%0%B^Y(mi+9D9`Y1 Xť*q׽bYmRymC9`lѻLJaAbQ?n(O ?cǿfT:ږljadүcR1%lO]mFS_IN}d8lE`7q𵫫ǣ`N_4cU{ʱjw^ۦ]'i;!<-ϖ=%e0E`Iv,x,b?4?L`.㔣gRT#` .jfo)8 +aTOՏ?QfanMݖnSK"B<ӿM9ҭ2˜.azdz+LXB,= Dh%G -O02" -^ֱ°36¢(jJfbeUɘۭlmzs] X0 C6Pz!tkwu8L -,C/0[Ûި -Q#8|"*4=썿H^;K3 -cW0~f)('Lcu|L%LofGsW'd܌I2x#Dr$Y# grzӌ -X!\33Tb=A0q-6V'*a ajWfξ Iax/%+){k.7A#+}y)cJǎw|D!bItQܸdFRMRCQu$Fᕴ22dp3Ñ;IC5|il%! H X)2Ep>M ݤ[%( k|#Rhqr s Ez=!E~ IC^"~\&Y-2@1 -ZDQµfL޽D -,'PDZl~ _g"2ݑR|$6j~~|]tc/߂5*M -Eh.tȦ\ {LXYHC5Q4 ӄZnʊx f2yeyd/l{;I.k;GDi#j!JrBeXp7e&a?: ul'`>Uzd0ɾ*)Qϓj`b[ ^r#\9FTj ADžP^ЋIBMYrkwxXLK L+t< '6-ws7o⢒9,EnŧUϽ.;OGZj ^\}*ܚ |s]Ht8Hw*.4r-髯{Ӹy5g4Dj2G&ʦ&vPO /w_8Ϧ9SB0p}Dl"_q:|d[XAKJU3`vh &v" =8?K<WL.`jw' VϹsSYD)h&w ylfZP Q|&Z-E -+WoG(3rW:ҋ -BOтfVD=a#((e29Ke\r* > endobj -755 0 obj << -/Type /XObject -/Subtype /Form -/FormType 1 -/PTEX.FileName (PDFs/ScannerHierarchy.pdf) -/PTEX.PageNumber 1 -/PTEX.InfoDict 763 0 R -/Matrix [1.00000000 0.00000000 0.00000000 1.00000000 0.00000000 0.00000000] -/BBox [141.22600000 212.01100000 578.97400000 589.92200000] -/Resources << -/ColorSpace << -/CS0 764 0 R ->>/Font << /TT0 765 0 R/TT1 766 0 R/TT2 767 0 R/TT3 768 0 R/TT4 769 0 R>> -/ProcSet [ /PDF /Text ] -/ExtGState << -/GS0 770 0 R ->>>> -/Length 989 -/Filter /FlateDecode ->> -stream -HVnF}ẈD_@-BP+(䁡hK,EMZ[EQ ̙3gßOs &fs7J82-"lvR+T2aAy m* ' 0<\ WV2* hWEDU0'TJtb_3(T]KԦƣbM ̹M"Er& 'y0B rߑ>XtN#GSt%vY Ki%g -ȧիGkخMW^ngNpsfv+Ӷdv25rohLȗ@:DidatHíI rUP+Q3VDUiZ}>FqY('QY%⸧9Ncj}jAOH/1i,Zsѓf *i$ϖ \W;Ȥ%wI0=[|)B:ɖG!f"^ wX!q*@\ ҏl#QX. Jo6hߨR1L<ު"CCoTPyQaVl[Fyҳ(y?.AenGeo&$tA#JOw;Q߶D i_0 Y:n/p[j.+}Rr-nKшq -}muX>}Ho&<|TdbG\onOSY+E׭}7Y:u]Jjt#)q͍򡻽iq1_R %T7Tl~~ɋqv wKF ByKCr\?b~+[OmܹlkjKrh<қ\2HeP"fŒtz'弛gI:\,op}S1eΝ %$/ ӄU7s-om=Ѱ?M }endstream -endobj -763 0 obj -<< -/CreationDate (D:20090215190130+10'00') -/Author (john) -/Creator (Acrobat PDFMaker 8.1 for Visio) -/Producer (Acrobat Distiller 8.1.0 \(Windows\)) -/ModDate (D:20090215190241+10'00') -/Company (Queensland University of Technology) -/Title () ->> -endobj -764 0 obj -[/ICCBased 771 0 R] -endobj -765 0 obj -<< -/Subtype /TrueType -/FontDescriptor 772 0 R -/LastChar 117 -/Widths [ 278 0 0 0 0 0 0 0 0 0 0 0 278 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 584 0 584 0 0 722 722 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 667 611 0 667 0 0 0 0 0 0 0 0 0 0 556 611 556 0 556 0 0 0 0 0 0 278 0 611 0 611 0 389 556 333 611] -/BaseFont /Arial-BoldItalicMT -/FirstChar 32 -/Encoding /WinAnsiEncoding -/Type /Font ->> -endobj -766 0 obj -<< -/Subtype /TrueType -/FontDescriptor 773 0 R -/LastChar 116 -/Widths [ 278 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 667 0 722 0 0 0 778 0 0 0 0 0 0 0 0 0 0 0 667 0 0 0 0 0 0 0 0 0 0 0 0 0 556 556 500 556 556 0 0 0 222 0 0 222 0 556 0 0 0 333 500 278] -/BaseFont /ArialMT -/FirstChar 32 -/Encoding /WinAnsiEncoding -/Type /Font ->> -endobj -767 0 obj -<< -/Subtype /TrueType -/FontDescriptor 774 0 R -/LastChar 120 -/Widths [ 278 0 0 0 0 0 0 0 0 0 0 0 278 0 0 0 0 0 0 0 0 0 0 0 0 0 333 0 584 0 584 0 0 722 722 0 0 0 0 0 0 0 0 0 611 0 0 0 0 0 0 667 0 0 0 0 0 0 0 0 0 0 0 0 0 556 611 556 0 556 0 0 0 278 0 0 0 0 611 611 0 0 389 556 333 0 0 0 556] -/BaseFont /Arial-BoldMT -/FirstChar 32 -/Encoding /WinAnsiEncoding -/Type /Font ->> -endobj -768 0 obj -<< -/Subtype /TrueType -/FontDescriptor 775 0 R -/LastChar 121 -/Widths [ 250 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 667 667 0 0 667 0 722 0 0 0 0 611 889 0 0 611 0 667 556 0 0 0 0 667 0 0 0 0 0 0 0 0 500 500 444 500 444 333 0 556 278 0 0 0 0 556 0 0 0 389 389 278 556 0 0 500 444] -/BaseFont /TimesNewRomanPS-BoldItalicMT -/FirstChar 46 -/Encoding /WinAnsiEncoding -/Type /Font ->> -endobj -769 0 obj -<< -/Subtype /TrueType -/FontDescriptor 776 0 R -/LastChar 121 -/Widths [ 250 0 0 0 0 0 0 0 0 0 0 0 0 0 0 278 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 500 556 0 556 444 333 500 556 278 0 556 278 0 556 500 556 0 444 0 333 0 500 722 500 500] -/BaseFont /TimesNewRomanPS-BoldMT -/FirstChar 32 -/Encoding /WinAnsiEncoding -/Type /Font ->> -endobj -770 0 obj -<< -/OPM 1 -/OP false -/op false -/Type /ExtGState -/SA false -/SM 0.02 ->> -endobj -771 0 obj -<< -/Length 2598 -/Filter /FlateDecode -/N 3 -/Alternate /DeviceRGB ->> -stream -hޜwTTϽwz0z.0. Qf Ml@DEHb!(`HPb0dFJ|yyǽgs{.$O./ 'z8WGбx0Y驾A@$/7z HeOOҬT_lN:K"N3"$F/JPrb[䥟}Qd[Sl1x{#bG\NoX3I[ql2$ 8xtrp/8 pCfq.Knjm͠{r28?.)ɩL^6g,qm"[Z[Z~Q7%" -3R`̊j[~: w!$E}kyhyRm333: }=#vʉe -tqX)I)B>== <8Xȉ9yP:8p΍Lg kk Ѐ$t!0V87`ɀ2A. -@JPA#h'@8 .: ``a!2D!UH 2 dA>P ECqB**Z:]B=h~L2  5pN:|ó@ QC !H,G6 H9R ]H/r Aw( Q(OTJCm@*QGQ-(j MF+ 6h/*t:].G7Зw7 Xa<1:L1s3bXyeb~19 vGĩp+5qy^ oó|= ?'Htv`Ba3BDxHxE$Չ"XAP44077&9$An0;T2421t.54ld+s;# V]=iY9FgM֚k&=%Ō:nc1gcbcfX.}lGv{c)LŖN퉛w/p+/<j$.$%&㒣OdxTԂԑ4i3|o~C:&S@L u[Uo3C3OfIgwdO|;W-wsz 17jl8c͉̈́3+{%lKWr[ $ -llGmnacOkE&EEY׾2⫅;K,KhtiN=e²{^-_V^Oo§s]?TWީrjVQ=w}`嚢zԶiו8>k׍ - E  [ly邟~_Y53rW򯎼^{7so}x>|쇊z>yz -endstream -endobj -772 0 obj -<< -/StemV 135.84 -/FontName /Arial-BoldItalicMT -/FontStretch /Normal -/FontWeight 700 -/Flags 96 -/Descent -211 -/FontBBox [ -560 -376 1157 1000] -/Ascent 905 -/FontFamily (Arial) -/CapHeight 718 -/XHeight 515 -/Type /FontDescriptor -/ItalicAngle -15 ->> -endobj -773 0 obj -<< -/StemV 88 -/FontName /ArialMT -/FontStretch /Normal -/FontWeight 400 -/Flags 32 -/Descent -211 -/FontBBox [ -665 -325 2000 1006] -/Ascent 905 -/FontFamily (Arial) -/CapHeight 718 -/XHeight 515 -/Type /FontDescriptor -/ItalicAngle 0 ->> -endobj -774 0 obj -<< -/StemV 138 -/FontName /Arial-BoldMT -/FontStretch /Normal -/FontWeight 700 -/Flags 32 -/Descent -211 -/FontBBox [ -628 -376 2000 1010] -/Ascent 905 -/FontFamily (Arial) -/CapHeight 718 -/XHeight 515 -/Type /FontDescriptor -/ItalicAngle 0 ->> -endobj -775 0 obj -<< -/StemV 116.867 -/FontName /TimesNewRomanPS-BoldItalicMT -/FontStretch /Normal -/FontWeight 700 -/Flags 98 -/Descent -216 -/FontBBox [ -547 -307 1206 1032] -/Ascent 891 -/FontFamily (Times New Roman) -/CapHeight 656 -/XHeight -531 -/Type /FontDescriptor -/ItalicAngle -15 ->> -endobj -776 0 obj -<< -/StemV 136 -/FontName /TimesNewRomanPS-BoldMT -/FontStretch /Normal -/FontWeight 700 -/Flags 34 -/Descent -216 -/FontBBox [ -558 -307 2000 1026] -/Ascent 891 -/FontFamily (Times New Roman) -/CapHeight 656 -/XHeight -546 -/Type /FontDescriptor -/ItalicAngle 0 ->> -endobj -760 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [318.625 619.29 325.599 630.258] -/Subtype /Link -/A << /S /GoTo /D (figure.4) >> ->> endobj -761 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [142.854 315.172 157.3 325.727] -/Subtype /Link -/A << /S /GoTo /D (subsection.3.5) >> ->> endobj -762 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [240.497 290.873 247.471 301.841] -/Subtype /Link -/A << /S /GoTo /D (figure.5) >> ->> endobj -759 0 obj << -/D [757 0 R /XYZ 125.858 740.998 null] ->> endobj -691 0 obj << -/D [757 0 R /XYZ 234.003 603.529 null] ->> endobj -756 0 obj << -/Font << /F42 510 0 R /F32 500 0 R /F34 502 0 R /F56 730 0 R >> -/XObject << /Im1 755 0 R >> -/ProcSet [ /PDF /Text ] ->> endobj -779 0 obj << -/Length 3334 -/Filter /FlateDecode ->> -stream -xko>Jio߻L!^il(|%V#QDsZsQ_`.bLzg1no՘U̷Eu ɉVMy\Yt.d)#L8fdmq.{'B|(ąF$.a%3$3<)lIӃ o+e:>|I&.wz4*FSf%$$/+sFtPF2k'3Wċ銵bPHZJc(HLf4/1ٴԥpb.\G*X6b -^V£Gr,M]gE$&t[T15}^.@3g&{SĻr2Av_@36ݝ+0JM] zG2Ȣ=q,C!bU ôlܟx7m12~|9|qDddZv7] B.脟Ħ~#xq5}(:\LQ5,g9$gڑqq ˻bWEn*F0{&tQ h#x@֛}[x,Y;Sut,w<++/o~`_sֺ@i3vb4Voካt/MX!>x6CR:IH' HOӐVa$:\'7Xo&ҝ4 BPAD`$O﹙?_qes9E^m |D2FgdѨݷ}H7l16 o=˚ -죚@!WkK ; `ypSl6i[W_-n_`W!ya.*Rz7 &IeZEyυ!x/.=jYrg  ^\@\@Uu@ʩmqdL$/N]k`ҧ),bϪKa8,nz18Z}X#p|qYӦjpdlҘޑ m紒^A.@pG$cd︕LVI"+٤$+Cq+h%$l<HwQ MԄK֢7|?wijdkd/*rQ?2-h{S<(S<|VFD]Hy%mτ6c -w? `S@L-c V5Xl܉G(0v%$bA(:ګmY <ँXlE|qZ}[+.*IO{'þ8Pيo {,VM/k\XPZLT"-<06]W,OOUm[} Xa$YcG_yӟ)n UqvW79xzIE\4ePw1bm巻SgJ0XtO1 ,)ڇƒ}_lʣT!ֱQj46 )l% -"G1 RZzZv4ʎ1o3HA=@Ӱӡꌢ\g'@\P‹e!v|_kg<.{.Yo>̴r I2o} =0η)y\xbQE8q=- 0*wPzZmQjMK#\/Q3l*u t0f]n:K5`?\NĿ[Xώ-%R 96/aPijendstream -endobj -778 0 obj << -/Type /Page -/Contents 779 0 R -/Resources 777 0 R -/MediaBox [0 0 595.276 841.89] -/Parent 741 0 R -/Annots [ 781 0 R 782 0 R 783 0 R 785 0 R ] ->> endobj -781 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [366.007 482.02 372.98 492.988] -/Subtype /Link -/A << /S /GoTo /D (figure.8) >> ->> endobj -782 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [205.242 446.154 212.216 457.098] -/Subtype /Link -/A << /S /GoTo /D (figure.1) >> ->> endobj -783 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [416.755 434.199 423.729 445.143] -/Subtype /Link -/A << /S /GoTo /D (figure.6) >> ->> endobj -785 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [233.01 173.019 239.983 183.962] -/Subtype /Link -/A << /S /GoTo /D (figure.7) >> ->> endobj -780 0 obj << -/D [778 0 R /XYZ 125.858 740.998 null] ->> endobj -692 0 obj << -/D [778 0 R /XYZ 256.813 711.29 null] ->> endobj -693 0 obj << -/D [778 0 R /XYZ 250.606 418.438 null] ->> endobj -784 0 obj << -/D [778 0 R /XYZ 125.858 211.853 null] ->> endobj -777 0 obj << -/Font << /F42 510 0 R /F32 500 0 R /F34 502 0 R /F56 730 0 R /F53 751 0 R /F43 512 0 R /F47 642 0 R >> -/ProcSet [ /PDF /Text ] ->> endobj -788 0 obj << -/Length 4250 -/Filter /FlateDecode ->> -stream -xko~~9֚6qv i$;J"rG*$ϊZwf|b">y̞iS$IezEBIO׻^><^^Kūx/k9=EWWB"p1Z, "ZH;=WE'`/}3Udb)ڢ*{6 jreo^ft"O\Xg*%P:ILaAC)/L,O19ܗ' N5twhV)=u}*/=D[t)/gQ66F+5IQ)~##aPE9F8 T|a rD=>ns ~kBj>bkz(sS\3" *#Mk2) 7RC73ֆ9Eb{51Rp_ f\Ɲ<=s{|dovsMmo2PQ]8 MMMŌo91qoh 8,]iz`* 4mC!߅ -6aUScA-营#h)ʧhD}ћ 4:RqitbdU~WwY=P1 SpO~Cu==S٣g^pu}D:DmDEHc&>(p\"H=Ha#f$,T.?ӏhd BO~Wzq-8Ԃ$mhdhd#^蠣 LQH<)F&NL)9Wiq_s_1olXvrm+mU<.ӧr)?I7IB("HKkwx#ôqOoDbDp,Qc"%`"*P'#beK 4`TIejl!Lo_ޢ-Ghf(#b(BO͛~/}; X`SM$a`Q:BE3OS"Y|X`|0@`}Qx@uHJ`RQfyPŹn\]^Wo4XMs6Fxpzg&<&Nn=sqR()J Q9L{M)9j)3Fs c@7uU dScea.wDQbxt}9 Cc6R$5֙̐$nj`ġw r+j*w~xOlYqʽi2Aݺ No{$auP:Þ-.58FpB.)Iy 8^[9 u꼱p9^?9݌Qi!_6 q@lI@ E3.G>8](yWew|Y|[x}$#YghJl_a+Ј{EW;\Gw}%I NxTXᢒy{/عO|d?odCrn{}]Mb.0U* -R9[- ՠ=Wր+W&o3w|.=昇[paQS/ -Qܫ|Հn\6ԴFpb{͜ 2&jBv6kCu[HnU(0&*!iLbR 0]Sl a\>]r]8p6EUn{hss>/|-CPPlP(e(b_;9_ vtfBxXqP೾?*%Rd`3hFA/J `om@L@]osMwci)!T%Ʋ]`ڸV*\v 'BF/s'3J>N*a(]Z^Sq pbUJTg}(QAl )`1pȢl`fA8xX-QD -׊AkX<#'#qW. PH,Lzt2Q!Ӟ\4tS4}YAo5O;F"W#fJ GBU{yj'aB0%7.it%tj*gcW<o4V{Yv)*.=Pv3?k)㶠p`mKF,9H>E2@X3nCAT} c%Az[0,=1âɧt ́sP -,u]~UhjeIm<vPk<=_J6-\Bm/kW6kg - -{JT]g[ܷXYv1w5SU_j-ۓ~[ݱW!@* Uի-ơ3# $'ޓWcwg|r!tV$/7BRF G:X$ ܶ7#`?It.Z7sbcXx{R2akLiPyu8YC8b<{p@fCw>Q.L u' .sB$Oɨ %6ec!5nC¢B%Bz')$ŭ^`W:"s> !!SzQXb"&29pRռS@dF.Ҧ>&{x$ea|l]f7 jaqDJl>Ġ%lRј$w -5)LīD+8@ͷ-%(^~e@^9Xtt]_F΁WóΆM& C CPN6Z2uV ʎ.5K~u} -3rƔ&w[uƓ0ߚ2t7x'&pu v!ikg]GhТOoa4a0"L>߬2d-|}}]uV?(Z/lO` 3<</jK0FMX'/X^{`i_.VaQ)LhIN9"L,O$ުn6?iT!Ȁtf=̿M)qJmꧨ;oB5> endobj -793 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [329.563 454.224 335.54 466.645] -/Subtype /Link -/A << /S /GoTo /D (Hfootnote.1) >> ->> endobj -794 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [204.064 382.782 210.042 394.914] -/Subtype /Link -/A << /S /GoTo /D (Hfootnote.2) >> ->> endobj -795 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [406.492 382.782 428.41 394.914] -/Subtype /Link -/A << /S /GoTo /D (subsubsection.8.3.3) >> ->> endobj -796 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [463.592 313.277 470.565 324.246] -/Subtype /Link -/A << /S /GoTo /D (figure.8) >> ->> endobj -789 0 obj << -/D [787 0 R /XYZ 125.858 740.998 null] ->> endobj -694 0 obj << -/D [787 0 R /XYZ 235.064 711.29 null] ->> endobj -22 0 obj << -/D [787 0 R /XYZ 125.858 369.208 null] ->> endobj -695 0 obj << -/D [787 0 R /XYZ 248.135 285.561 null] ->> endobj -797 0 obj << -/D [787 0 R /XYZ 140.204 181.571 null] ->> endobj -798 0 obj << -/D [787 0 R /XYZ 140.204 152.913 null] ->> endobj -786 0 obj << -/Font << /F42 510 0 R /F32 500 0 R /F56 730 0 R /F53 751 0 R /F34 502 0 R /F11 792 0 R /F43 512 0 R >> -/ProcSet [ /PDF /Text ] ->> endobj -801 0 obj << -/Length 2555 -/Filter /FlateDecode ->> -stream -xڍYK۸W-T!>ފ8nLUZ I)!_n4vA_cһһqWweu]5W>:Έ~xzu.cwu\is׈mi$/,f$z[l?7?n~{;>;sY La)CWocYQyQwOs;_=):slF)̉Gi4nx5w'ijzI^uu ~Ǵ'oYFozZR ˣ4rmo?s@$S2|KN&N:-ڈSxDkh,oJ'nDlI=j -4rÒY1ugi1J3` GHkFeaY+*BQ6зxOEF}ڤI$QdV AKC+~G!D׺ ݧ uoRsVV;3ڨވ+Qee\WN qǣAZ4v -DOi=tEOm4#ٵzk{7hTF+]k7ȑ,.HL5Rq_lP䉗\Xy4ldpVQ7i%2VFQ( w*}_7?Ljǩu `}_yVe ;V9`!YG,1xs4섑mH֎"{a8ZP,\E' M/0݊s+l!|Z"jnAJcwvy4[s{: ٥@ɭ?zAZ)3G:<pѹҺ?,;8L@e)\@i$<+-K (emt5m(NRYQ"l -v7tr)#*y[CGu{q=O$/ŪLya`#c5y )ϡ -"B -*OUi,_F^a^V5kˠ&v{J*_:ً -VYJ̠9*K)^l5,~ű{"S$;jN A3ŀ$_\uԧl8&*ܶ -NIEBg!>P Tq:.ޓ~*~ -խ֖~ƓF.05/" 'FwJ-)x u;1" Cԩ2+Fa!d#w Wf3&+D(F `|Ƞi#Ŏ&6ï3i~hEʸE-9Y`;0kNj>ZP=9Ti}eQdz8|QgDf&j鮶A\6D[X'-"SfJ ?~w t1 A*ЉG> R;OS8O.\ )';%f ϠWcەm?Ldv%hH_6 qےՙ3 LSTkB;NCK/NmBCGW@(E4SzSBJ5%dkRyh,feiӠF#zC]{j\~H!&[>8_! o EЖ9׍U(1U}5G|)Cܔ)=(KKhpր kjqѕ6%e80ղ+n@~^OMtxY`; owRGhF}k -(GJ悮1XαY:X;j4-KuW $*^ }G"'={UESX4iǭF<jȤdیUo۪Rh`KIS~q,،`Tms;u&&>(;Kft[>II,t I;4 ~dg9Pj!,;VoR?/0{ke_(:n83dj3,mP`nvhSEfn"wbC1Vw3f)`%|endstream -endobj -800 0 obj << -/Type /Page -/Contents 801 0 R -/Resources 799 0 R -/MediaBox [0 0 595.276 841.89] -/Parent 741 0 R -/Annots [ 804 0 R 806 0 R ] ->> endobj -804 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [301.956 356.426 316.401 367.394] -/Subtype /Link -/A << /S /GoTo /D (subsection.3.7) >> ->> endobj -806 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [406.582 275.355 421.028 286.298] -/Subtype /Link -/A << /S /GoTo /D (subsection.3.8) >> ->> endobj -802 0 obj << -/D [800 0 R /XYZ 125.858 740.998 null] ->> endobj -26 0 obj << -/D [800 0 R /XYZ 125.858 592.64 null] ->> endobj -30 0 obj << -/D [800 0 R /XYZ 125.858 497.073 null] ->> endobj -803 0 obj << -/D [800 0 R /XYZ 125.858 407.215 null] ->> endobj -805 0 obj << -/D [800 0 R /XYZ 125.858 326.144 null] ->> endobj -807 0 obj << -/D [800 0 R /XYZ 125.858 245.073 null] ->> endobj -808 0 obj << -/D [800 0 R /XYZ 125.858 175.958 null] ->> endobj -799 0 obj << -/Font << /F42 510 0 R /F32 500 0 R /F34 502 0 R /F43 512 0 R /F56 730 0 R >> -/ProcSet [ /PDF /Text ] ->> endobj -811 0 obj << -/Length 1968 -/Filter /FlateDecode ->> -stream -xXM6WQeJԧ/A68^`'A2>Q>2WZR&FbX,>>;Q n08I#yvS_GtlgF6 -or?O~~o/l&Rǻw70VXv?KF9 g&W$$1vg]Ů?s;q,C?um:n !ICj{ʪٙM{_ٱmX[(M{E=Ի?9[v2 IRAqlC?gd8 }ۑG֕ug=ԥa(~螹w'Y~s,N'Z2C}&rdub4WDQYQ PdyXe4n`isIxTe3Wc%6xguG`"1HOa!/ &P^h~0iyhO@[,sq*k<(hHˉ6F4KΚ zQ{5OABW6Sj -qfǂcLȄEa-i6jX12_H{L[N ̄w[lVf -Ӏ3jt>"b]5Q -k򮵇RPlpإKVΐ/xjn=1 uũk/k }%sMU4F:tuBhZ-$Pba| _ܛ3 䂳PԉX*hF~wB[[BA\Yʃ -'6[Y'SWXN7t??yguRt99i,MdіRyA5_]P% :{ȠF1EPP*} 58v :UryAB>&:s3`Iˍk߶TNN LQ͊Œ~ Yc,/w̽S9{]{~%SQޮh.cګKe>wޮs}GSpٞ -[ uvS =#O peľJ=dy:I=gngmЂڱM6\9@aⴳI2^\R)O&}&撒Y I͓=1!RL! .r2WWB|쥊ӷ1 VyjqTWaAN1B߉dOro~4 Ֆk9W~WF*fy,endstream -endobj -810 0 obj << -/Type /Page -/Contents 811 0 R -/Resources 809 0 R -/MediaBox [0 0 595.276 841.89] -/Parent 821 0 R -/Annots [ 818 0 R ] ->> endobj -818 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [254.414 285.666 268.86 296.635] -/Subtype /Link -/A << /S /GoTo /D (subsection.6.4) >> ->> endobj -812 0 obj << -/D [810 0 R /XYZ 125.858 740.998 null] ->> endobj -813 0 obj << -/D [810 0 R /XYZ 125.858 634.986 null] ->> endobj -814 0 obj << -/D [810 0 R /XYZ 125.858 577.825 null] ->> endobj -815 0 obj << -/D [810 0 R /XYZ 125.858 484.799 null] ->> endobj -816 0 obj << -/D [810 0 R /XYZ 125.858 415.683 null] ->> endobj -817 0 obj << -/D [810 0 R /XYZ 125.858 346.568 null] ->> endobj -819 0 obj << -/D [810 0 R /XYZ 125.858 253.542 null] ->> endobj -820 0 obj << -/D [810 0 R /XYZ 125.858 184.396 null] ->> endobj -809 0 obj << -/Font << /F42 510 0 R /F32 500 0 R /F43 512 0 R /F47 642 0 R /F34 502 0 R >> -/ProcSet [ /PDF /Text ] ->> endobj -824 0 obj << -/Length 1748 -/Filter /FlateDecode ->> -stream -xڕXYo6~G-`ђHu8iA>+@Wu4v}g8CYU- X9Sns787$7Yule3k$" f?a:c}fk{c~@͗w~3RJ (\).>&0A9]-T'EHdp(zZei/>}e>ݺy7ڮLbkKױy$A8S2JDOHCL|bg޺\ƾh.7I:*^"8ID3ٖ'|Wnl/臢~<5@GR07JEtÝ@R[/A3/t<3P]t o䴫A:*~$oFuG=Pdd[̂x_ޝé?ZԃJn=mvV|,T7?7Um؂f_?c ȃO+a )# Y;mL[Š곴UGBsAސ>i/W{톱{lw)f8d`pЦͪڜSvi6hzǂ 3CWlP}sW|>4h -N\.]@l©d-ҖNy3`*#4ND" ƺȚ\g_8&$֎87P45{ R{hpgV=Y*{a狐" -Z՘Ր%GkQpƽ>aZki1}]0021 W 6^fFL;8`?bvVqB X.9\ -J±ejYf Y-r.꨻LNRuJJt31Z_ix0x11 T<#2\ ΂+ D7gU"p^L]>qA,!wUH!'蕶EʄDGF6/EO`Sp{sB}k*[K4S+)N -# al&;Hmd-ʋ?p-tuɋcsx2WUU bQx譯m[Ƙ .CpHB-l%NR)=}LfFrޞ1 Q':HA5L -%'tXҚl۲RX Ptk\N^.ڒDiLx(2C>On^h+'>׭ 1 jTg4sʤ^96Wm=}Jș%R7n1zk1FN7Ҝp"^}'LoxC-=5Vi]d,ty7VzZr%HσiI+C3M3 a 4Ehgk>5G o?q\UE]Tſ c>?9/:Bz&][AjU=I%U\ʑx=zu>9+\߿[ o*?6q@ $,@2S%wi)(3 8b"{~2vje|Cle7\Lq uRendstream -endobj -823 0 obj << -/Type /Page -/Contents 824 0 R -/Resources 822 0 R -/MediaBox [0 0 595.276 841.89] -/Parent 821 0 R -/Annots [ 829 0 R ] ->> endobj -829 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [456.12 558.02 470.565 568.988] -/Subtype /Link -/A << /S /GoTo /D (subsection.4.6) >> ->> endobj -825 0 obj << -/D [823 0 R /XYZ 125.858 740.998 null] ->> endobj -826 0 obj << -/D [823 0 R /XYZ 125.858 697.377 null] ->> endobj -827 0 obj << -/D [823 0 R /XYZ 125.858 652.171 null] ->> endobj -828 0 obj << -/D [823 0 R /XYZ 125.858 595.011 null] ->> endobj -830 0 obj << -/D [823 0 R /XYZ 125.858 513.94 null] ->> endobj -831 0 obj << -/D [823 0 R /XYZ 125.858 456.779 null] ->> endobj -832 0 obj << -/D [823 0 R /XYZ 125.858 401.462 null] ->> endobj -833 0 obj << -/D [823 0 R /XYZ 125.858 320.391 null] ->> endobj -834 0 obj << -/D [823 0 R /XYZ 125.858 251.275 null] ->> endobj -835 0 obj << -/D [823 0 R /XYZ 125.858 194.115 null] ->> endobj -822 0 obj << -/Font << /F42 510 0 R /F32 500 0 R /F43 512 0 R /F56 730 0 R /F34 502 0 R >> -/ProcSet [ /PDF /Text ] ->> endobj -838 0 obj << -/Length 2088 -/Filter /FlateDecode ->> -stream -xڍXK8W4&$nL3s%FG뷊UeKnbX݅8 ,ۦaP]پ -0U"gBovߥ]"߼xGazl㇏7~_ol>n]22I`72xv7KEdxYbOV"ªϛ8ԠkmތCN:ǍW& -=96a(/ǭ&<ط^ݱt.)pV8kZbS8Rv@'mVLU @MW[‘E$p1~EY*Ypfk,H6'2<{$9l;b2S( V՚WMw8tHb^D." -*=j,L(mD~x$ 6p#Ƴ~D8 oq0E X'rW6 h/bXz:"Эd3CUYpqqX~upWtAmQQ%pxCuAEVZ(?Jk2yi9"ZY3ɬ>tדM@8g-xjab{pۨSg3"'IqP 2sS?6)ƨlX[O?+T݄ ,%KqutxOB).SP=NY%>s/)ҠLp mX̵Pvxu%#>|FEfO܁}WqZZIS};^֍8ntWR꽪Bc|!cb:2{~%XnC1m2+p8#1[۹#bx;{ȱ^;;( I8D Q%< -$@ozD0^pEӫ oGL8wM?PdV^>q -y.UW]]µI ^8D|$qS i5Z#r - VdVIr1{ɯmbdu?}. 2eRذ'܁2@f?ŐmRh FE_Z*Y_GN꘬ -(r n_>"`Y`m䴂Qh#0DRmrpĥc퇵8Nѳen4mdOq\7ЎW3tl+ă\B[CP氵24s{^?_"[;,oSnρdp1?$oPendstream -endobj -837 0 obj << -/Type /Page -/Contents 838 0 R -/Resources 836 0 R -/MediaBox [0 0 595.276 841.89] -/Parent 821 0 R -/Annots [ 846 0 R 848 0 R 850 0 R ] ->> endobj -846 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [396.321 362.628 410.767 373.571] -/Subtype /Link -/A << /S /GoTo /D (subsection.4.3) >> ->> endobj -848 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [362.299 257.646 376.744 268.59] -/Subtype /Link -/A << /S /GoTo /D (subsection.4.5) >> ->> endobj -850 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [416.884 188.531 431.33 199.474] -/Subtype /Link -/A << /S /GoTo /D (subsection.3.7) >> ->> endobj -839 0 obj << -/D [837 0 R /XYZ 125.858 740.998 null] ->> endobj -840 0 obj << -/D [837 0 R /XYZ 125.858 699.22 null] ->> endobj -841 0 obj << -/D [837 0 R /XYZ 125.858 604.321 null] ->> endobj -842 0 obj << -/D [837 0 R /XYZ 125.858 549.033 null] ->> endobj -843 0 obj << -/D [837 0 R /XYZ 125.858 490.03 null] ->> endobj -844 0 obj << -/D [837 0 R /XYZ 125.858 444.824 null] ->> endobj -845 0 obj << -/D [837 0 R /XYZ 125.858 389.507 null] ->> endobj -847 0 obj << -/D [837 0 R /XYZ 125.858 330.503 null] ->> endobj -849 0 obj << -/D [837 0 R /XYZ 125.858 227.365 null] ->> endobj -851 0 obj << -/D [837 0 R /XYZ 125.858 146.294 null] ->> endobj -836 0 obj << -/Font << /F42 510 0 R /F32 500 0 R /F43 512 0 R /F34 502 0 R /F56 730 0 R >> -/ProcSet [ /PDF /Text ] ->> endobj -856 0 obj << -/Length 1621 -/Filter /FlateDecode ->> -stream -xڍWKo8W؋ "%Mnm=(%Gv;!pI8:]%1g֦銯Õ,1^]re5j=mDjhz#5>~v-Ok}YN*X[P W^X}U3^-h Һ箿jj2C~,ţhhŹk]ŝ]U6okGy8mVQVUנNiNϨI_ |-t?w][T%[o-gǦ򫲬ڬͽ<=zY1H+y95*Xin16 YV9ELȉ^XՠxwmMSyGbK5+`8uu -Ǟ5M+c- 32oeZI6d6<:d>NyX_@ үhbGo.Յi>/ .*6^-Z#i 7?e^>A^һ6U탓K/^w֭7RR)5^y!$b= -ݫ:; !?ÓE9#jޣɧEbb{>J'Q\$Q.[ UY䴖\dM0'v#P':` OwCW紵Е-]=_\,ji\O%:YV1d)aLg -<;9f9 "+}w3WCL!k#fKX@KY=8KCN2FKeIWWVHK^1Gey&R~Qρ4b G@9BxH@קt%児ܦ)]k ʵX5Jh5L>Đ%:ƒVh_^4/+-oށ$]ϱr-{*vh6'\sThJ {ܡơ@8p8(T@ -Ki`B6Ԥze&6cDB0oR9 9t?\Qb'00 ؚ<Îv ˡ]x\ndb&u$r4D=eAS~i~Fa6w4Hk nR,b8 AV!8ob NNj͍F g1wH -:i@q-: 4sk&Dr)PpHs :]Q… j] r z> endobj -852 0 obj << -/Type /XObject -/Subtype /Form -/FormType 1 -/PTEX.FileName (PDFs/FSAn0.pdf) -/PTEX.PageNumber 1 -/PTEX.InfoDict 862 0 R -/Matrix [1.00000000 0.00000000 0.00000000 1.00000000 0.00000000 0.00000000] -/BBox [248.28600000 563.63900000 500.85200000 674.93900000] -/Resources << -/ColorSpace << -/CS0 863 0 R ->>/Font << /TT0 864 0 R/TT1 865 0 R>> -/ProcSet [ /PDF /Text ] -/ExtGState << -/GS0 866 0 R ->>>> -/Length 582 -/Filter /FlateDecode ->> -stream -HUMo@ﯘ~zQ8iA3qҤ$8J2z߼y3n89ɯʷ vqE&n{_q!8vx2 WJ*c m(Y7|3cX0y^Q\J6l?#wY]׌;^AdgBx F`yQU~]"'D͵rB:;K@q_@46_y CA?@U}ޞz-KYsBydSV"@in%EcG}ywFwwF#Vtޗic̪1+y]SqPY&,Rt. o}FP`59Nz̒|6H%TVOÃEdҟ˝c7x!.A02M4GIN&VK:F> -endobj -863 0 obj -[/ICCBased 867 0 R] -endobj -864 0 obj -<< -/Subtype /TrueType -/FontDescriptor 868 0 R -/LastChar 120 -/Widths [ 278 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 611 0 0 0 0 0 0 0 722 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 556 0 500 0 556 0 0 0 222 0 0 0 0 556 556 0 0 0 500 278 556 0 0 500] -/BaseFont /ArialMT -/FirstChar 32 -/Encoding /WinAnsiEncoding -/Type /Font ->> -endobj -865 0 obj -<< -/Subtype /TrueType -/FontDescriptor 869 0 R -/LastChar 121 -/Widths [ 278 0 0 0 0 0 0 0 0 0 0 0 0 333 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 722 0 0 0 0 0 0 0 0 0 0 722 0 0 0 0 667 0 722 0 0 0 0 0 0 0 0 0 0 0 556 556 500 556 556 0 0 0 0 0 0 222 0 556 556 0 0 333 0 278 556 500 0 500 500] -/BaseFont /Arial-ItalicMT -/FirstChar 32 -/Encoding /WinAnsiEncoding -/Type /Font ->> -endobj -866 0 obj -<< -/OPM 1 -/OP false -/op false -/Type /ExtGState -/SA false -/SM 0.02 ->> -endobj -867 0 obj -<< -/Length 2598 -/Filter /FlateDecode -/N 3 -/Alternate /DeviceRGB ->> -stream -hޜwTTϽwz0z.0. Qf Ml@DEHb!(`HPb0dFJ|yyǽgs{.$O./ 'z8WGбx0Y驾A@$/7z HeOOҬT_lN:K"N3"$F/JPrb[䥟}Qd[Sl1x{#bG\NoX3I[ql2$ 8xtrp/8 pCfq.Knjm͠{r28?.)ɩL^6g,qm"[Z[Z~Q7%" -3R`̊j[~: w!$E}kyhyRm333: }=#vʉe -tqX)I)B>== <8Xȉ9yP:8p΍Lg kk Ѐ$t!0V87`ɀ2A. -@JPA#h'@8 .: ``a!2D!UH 2 dA>P ECqB**Z:]B=h~L2  5pN:|ó@ QC !H,G6 H9R ]H/r Aw( Q(OTJCm@*QGQ-(j MF+ 6h/*t:].G7Зw7 Xa<1:L1s3bXyeb~19 vGĩp+5qy^ oó|= ?'Htv`Ba3BDxHxE$Չ"XAP44077&9$An0;T2421t.54ld+s;# V]=iY9FgM֚k&=%Ō:nc1gcbcfX.}lGv{c)LŖN퉛w/p+/<j$.$%&㒣OdxTԂԑ4i3|o~C:&S@L u[Uo3C3OfIgwdO|;W-wsz 17jl8c͉̈́3+{%lKWr[ $ -llGmnacOkE&EEY׾2⫅;K,KhtiN=e²{^-_V^Oo§s]?TWީrjVQ=w}`嚢zԶiו8>k׍ - E  [ly邟~_Y53rW򯎼^{7so}x>|쇊z>yz -endstream -endobj -868 0 obj -<< -/StemV 88 -/FontName /ArialMT -/FontStretch /Normal -/FontWeight 400 -/Flags 32 -/Descent -211 -/FontBBox [ -665 -325 2000 1006] -/Ascent 905 -/FontFamily (Arial) -/CapHeight 718 -/XHeight 515 -/Type /FontDescriptor -/ItalicAngle 0 ->> -endobj -869 0 obj -<< -/StemV 85.863 -/FontName /Arial-ItalicMT -/FontStretch /Normal -/FontWeight 400 -/Flags 96 -/Descent -211 -/FontBBox [ -517 -325 1082 998] -/Ascent 905 -/FontFamily (Arial) -/CapHeight 718 -/XHeight 515 -/Type /FontDescriptor -/ItalicAngle -15 ->> -endobj -853 0 obj << -/Type /XObject -/Subtype /Form -/FormType 1 -/PTEX.FileName (PDFs/FSAn1.pdf) -/PTEX.PageNumber 1 -/PTEX.InfoDict 870 0 R -/Matrix [1.00000000 0.00000000 0.00000000 1.00000000 0.00000000 0.00000000] -/BBox [118.34400000 571.37300000 492.69700000 666.40800000] -/Resources << -/ColorSpace << -/CS0 871 0 R ->>/Font << /TT0 872 0 R/TT1 873 0 R>> -/ProcSet [ /PDF /Text ] -/ExtGState << -/GS0 874 0 R ->>>> -/Length 718 -/Filter /FlateDecode ->> -stream -HWMo1ﯘ#TZ(lҪ5boUl B B ֞yXvK88埏AqNg$(5!J ?H:yWBRP˄v3 -`&Oz @ lTk\&W+Uɻy'D*<Tֿ`BjAiLOCWu G( cuM 2RlQwnMujeIr`wٞmN .^BF^oIYn}[Fy{ tzU['ʸ8qR! W(-,SOa4@A=^۬3AJe-_Cx) 3) -.$\Y(W;g޴zLMa(s$_[M;58~U1Ӏ|q@1Lکn]U]HмS0:/VW."4gc@7Wڤ~PQ3u!pIOjaeA )q<.tf="b fd-i*Y56ªH1I+[0q-ql_\mhՑZ[S -DIK9)LQP(TH2v(asԓ"-ޗendstream -endobj -870 0 obj -<< -/CreationDate (D:20080804134311+10'00') -/Author (john) -/Creator (Acrobat PDFMaker 8.1 for Visio) -/Producer (Acrobat Distiller 8.1.0 \(Windows\)) -/ModDate (D:20080804134339+10'00') -/Company (Queensland University of Technology) -/Title () ->> -endobj -871 0 obj -[/ICCBased 875 0 R] -endobj -872 0 obj -<< -/Subtype /TrueType -/FontDescriptor 876 0 R -/LastChar 120 -/Widths [ 278 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 722 722 0 611 0 0 0 0 0 0 0 722 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 556 0 500 556 556 0 556 556 222 0 0 0 0 556 556 0 0 333 500 278 556 0 0 500] -/BaseFont /ArialMT -/FirstChar 32 -/Encoding /WinAnsiEncoding -/Type /Font ->> -endobj -873 0 obj -<< -/Subtype /TrueType -/FontDescriptor 877 0 R -/LastChar 121 -/Widths [ 278 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 722 0 667 0 0 0 0 0 0 0 0 722 0 0 0 0 667 0 0 0 0 0 0 0 0 0 0 0 0 0 556 556 500 556 556 0 0 0 222 0 0 0 833 556 556 556 0 333 500 278 556 0 0 500 500] -/BaseFont /Arial-ItalicMT -/FirstChar 32 -/Encoding /WinAnsiEncoding -/Type /Font ->> -endobj -874 0 obj -<< -/OPM 1 -/OP false -/op false -/Type /ExtGState -/SA false -/SM 0.02 ->> -endobj -875 0 obj -<< -/Length 2598 -/Filter /FlateDecode -/N 3 -/Alternate /DeviceRGB ->> -stream -hޜwTTϽwz0z.0. Qf Ml@DEHb!(`HPb0dFJ|yyǽgs{.$O./ 'z8WGбx0Y驾A@$/7z HeOOҬT_lN:K"N3"$F/JPrb[䥟}Qd[Sl1x{#bG\NoX3I[ql2$ 8xtrp/8 pCfq.Knjm͠{r28?.)ɩL^6g,qm"[Z[Z~Q7%" -3R`̊j[~: w!$E}kyhyRm333: }=#vʉe -tqX)I)B>== <8Xȉ9yP:8p΍Lg kk Ѐ$t!0V87`ɀ2A. -@JPA#h'@8 .: ``a!2D!UH 2 dA>P ECqB**Z:]B=h~L2  5pN:|ó@ QC !H,G6 H9R ]H/r Aw( Q(OTJCm@*QGQ-(j MF+ 6h/*t:].G7Зw7 Xa<1:L1s3bXyeb~19 vGĩp+5qy^ oó|= ?'Htv`Ba3BDxHxE$Չ"XAP44077&9$An0;T2421t.54ld+s;# V]=iY9FgM֚k&=%Ō:nc1gcbcfX.}lGv{c)LŖN퉛w/p+/<j$.$%&㒣OdxTԂԑ4i3|o~C:&S@L u[Uo3C3OfIgwdO|;W-wsz 17jl8c͉̈́3+{%lKWr[ $ -llGmnacOkE&EEY׾2⫅;K,KhtiN=e²{^-_V^Oo§s]?TWީrjVQ=w}`嚢zԶiו8>k׍ - E  [ly邟~_Y53rW򯎼^{7so}x>|쇊z>yz -endstream -endobj -876 0 obj -<< -/StemV 88 -/FontName /ArialMT -/FontStretch /Normal -/FontWeight 400 -/Flags 32 -/Descent -211 -/FontBBox [ -665 -325 2000 1006] -/Ascent 905 -/FontFamily (Arial) -/CapHeight 718 -/XHeight 515 -/Type /FontDescriptor -/ItalicAngle 0 ->> -endobj -877 0 obj -<< -/StemV 85.863 -/FontName /Arial-ItalicMT -/FontStretch /Normal -/FontWeight 400 -/Flags 96 -/Descent -211 -/FontBBox [ -517 -325 1082 998] -/Ascent 905 -/FontFamily (Arial) -/CapHeight 718 -/XHeight 515 -/Type /FontDescriptor -/ItalicAngle -15 ->> -endobj -860 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [398.364 526.662 405.338 537.606] -/Subtype /Link -/A << /S /GoTo /D (figure.9) >> ->> endobj -861 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [444.685 298.16 456.64 309.104] -/Subtype /Link -/A << /S /GoTo /D (figure.10) >> ->> endobj -857 0 obj << -/D [855 0 R /XYZ 125.858 740.998 null] ->> endobj -858 0 obj << -/D [855 0 R /XYZ 125.858 699.22 null] ->> endobj -859 0 obj << -/D [855 0 R /XYZ 125.858 630.104 null] ->> endobj -34 0 obj << -/D [855 0 R /XYZ 125.858 600.485 null] ->> endobj -38 0 obj << -/D [855 0 R /XYZ 125.858 574.133 null] ->> endobj -696 0 obj << -/D [855 0 R /XYZ 232.723 510.901 null] ->> endobj -697 0 obj << -/D [855 0 R /XYZ 240.748 270.444 null] ->> endobj -854 0 obj << -/Font << /F42 510 0 R /F32 500 0 R /F43 512 0 R /F34 502 0 R >> -/XObject << /Im2 852 0 R /Im3 853 0 R >> -/ProcSet [ /PDF /Text ] ->> endobj -880 0 obj << -/Length 2830 -/Filter /FlateDecode ->> -stream -xے۶}B3}:+ONj̓=}Dbt=HP&qg~Å(c+1ʬZo^}<&l"ooo^|eM~vc"F)Mnf&߿y5c,}77޽Y^R!iys۱&SKTj0cŊ1bOS¸ux=pk(1fH4>69CöqO9s?9<|Ϗ&{rS~hM!;ϕ~A.5#ΉV^&"-󯷧L Ǽ'фtV L|rI(Z"M]vvT_=k_L%9fOչzqLZPe:`ٙ r|:VG2ɶ̀4֊كI*%wyYQih?t̷2N9@P˗xnL"=G0R-@ΓƊ PcC5Eu1Tqh6 9_|*Ӷ.xrl'aLr_{5Io:7(s;l(vn3&{ !~F?V֜&_-1a8T!$# C)7UUCNl{m݋VpE[yܹ񠟋c{ = 0Ѝ[ֲr:?MЬWD0:M˓aa&w[a!È & dfb:HĀvʍ]` VCw64a!#KJ-CQkCSw!]yR,䩩\0a{7DcbBe#HRcqs ޤҢa. >.P.T`l$lX -RɎ3@Qd8 -0({'o\|??y4Z y:\%48q?c!M 5!1)pC|1t֮7CːxϞ.%HRvSLn䡇:" &,XW&Nq 84V -eC LƉ -02K76P*vLhB͐ǧZmeA7HShVTGKI+x#[`yC@QnD ty;D1!Ha 8o&fKyL[B -!X[ӥx - E%W=K1+a#@9A___ X`5Z)0jȏm$ZŰT$c(4xEj:dP3S(2@q<ߕfa<+ёp|ꦀ<0Xl+MUDy8d PÙXQF.Kbim`abMY Y)|@5#/srA$H-nm]:8YBIA\q.5xu ]rjoP$Ψqk1. -bdo=Tk|V1=PpdڔоIzYfXFNTI(^aqN4E#vFeU*pVh^֗JNun LaC3jD(0~oQxEz A84l.yh0.!aS8Wfb$uP -^ut}eƾfe)p15PPZJMvW6M).4(nټ)yXmEWcHa-iKVP<؈MD TEF7̒YOwwKÛMr7*c`|jo YB U[t`)c2D/v*D1cjآs/Fly%~yp S!]6c2śP/#HV@`(GiGYB=Dz] %m*ED{j+^< -/z)N?rxi+d&Tuծ|ؼ؇%#e0N -N{P.n]N6AZ4|/#Mt׵MȅYVyyȏlz`^wOw^XW(;0.}'nqwP5UJf0wiy[= a:)ɮz. )+v4nK-䫔-;Zd4e,h(Fא#sг2iz0kEI@ צ]˅qt_3>8݉%]=۵U > endobj -882 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [386.543 588.655 398.499 599.598] -/Subtype /Link -/A << /S /GoTo /D (figure.11) >> ->> endobj -881 0 obj << -/D [879 0 R /XYZ 125.858 740.998 null] ->> endobj -42 0 obj << -/D [879 0 R /XYZ 125.858 716.092 null] ->> endobj -698 0 obj << -/D [879 0 R /XYZ 260.18 572.894 null] ->> endobj -878 0 obj << -/Font << /F42 510 0 R /F32 500 0 R /F43 512 0 R /F34 502 0 R /F56 730 0 R /F53 751 0 R >> -/ProcSet [ /PDF /Text ] ->> endobj -885 0 obj << -/Length 3503 -/Filter /FlateDecode ->> -stream -x[_۶OP &$NgbNi־>%y$F"黋(xt:@p],v "|bJq4MMW_pKr4+˷X,rq t60J07Xr΃7x͒~R8JA 'Hq-)S:^F07 C͸H*P, ѠHJ#D.,͈?uBkͩ-2;,W2謮=nmN_{۱ԪvWc#&MVWD&SiIylbX}X̀1s"]Q֠D348K2#|} lcV iTt6VD7jCZTOK\"[r;\|KPk#vؓɏY2lӰQXZ0ڛ5A :YLpm}nlz)`՜M] -N~ -X6=H-HبFN?NuYyq768绀~ Džq\ҹ5ၞEՑf‹ӄE2.+TQƮ0,8ǹÄ&}Z>'gEQ߇ieNb{CF h_9cG@l<]K]nokqqYC_;a ]N`Y@YnPܦ *BX[U>7B , G}PE[zk40m;*xt͊Õp2? ͕RvNM -+) C=nQ!abN03ʮAUR2 - ⫋ mFfr' -(uM';[JV8]EQ".`ShW:R'o/S⯱ utSiA42f ˨ئiV$SJؗyrU ss[L^e!&gsՇ*6C0pREO=P]F*p'͠N"EpJTR o9 > -BZ4F~nB?3^w_)yN! Ds t {ܮf = T%5z ?[xB쁲(c;(d>Xψ=ajrGT+7D$ OQ|I+##t>XO 0=OGuQ3L*:ώW1Fci3~SPWvQQ &&PnZ%(l{G)< ^KPAq6eC 7ED4 oCs_@38ODώ3Bw (_C9=OCp/CL3 KKBJ9HT'Fx2XGC'x+dWN #k8eZӅ7d4^ZO{vWN^~=<0thD&d~FR4\1:>jB3) %)ƞP+B!2׹U0$ hw\QSLOM,Kzcuҋs}'EӉRH[Q;!xBi͍&];lzIC5А\f{FۂS17Ew^9^.Zixn*uwE[ʼn֔x/w  /e5ˏEkβ!dMʿMD49@_ س}endstream -endobj -884 0 obj << -/Type /Page -/Contents 885 0 R -/Resources 883 0 R -/MediaBox [0 0 595.276 841.89] -/Parent 821 0 R -/Annots [ 887 0 R ] ->> endobj -887 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [395.893 360.884 407.848 371.852] -/Subtype /Link -/A << /S /GoTo /D (figure.12) >> ->> endobj -886 0 obj << -/D [884 0 R /XYZ 125.858 740.998 null] ->> endobj -46 0 obj << -/D [884 0 R /XYZ 125.858 430.373 null] ->> endobj -699 0 obj << -/D [884 0 R /XYZ 234.093 345.098 null] ->> endobj -883 0 obj << -/Font << /F42 510 0 R /F32 500 0 R /F56 730 0 R /F34 502 0 R /F43 512 0 R >> -/ProcSet [ /PDF /Text ] ->> endobj -891 0 obj << -/Length 3472 -/Filter /FlateDecode ->> -stream -xڥZY~ׯ[*\8ʃeJX}݇w+_ߛޤƘ )өG{DQ()3(P:%vN|7ǕJyR TV"hUb, /(siYY]6չʋ_P`6]>|l1mʶr."Z u$ܼQ^KO:Jd-w#%L5kU<` &{%bG(;Z&H$X@& .8kGv,5i8X#8tN4QrÄny$)rˋǧMo,m9pCuT25_)r]#6&,&3+TsGpKeH/R:+1c].M;xyiشuGM9/T=s C Exwnymf}k_,}FSiS#wHA\HMo.%߁9]jX3?ȏ@}mfŁ~l6xE&k'T^@59DoG#֏*P &u]^js7IIY8ͪJAHNBp*UM ݤbI&6gMYQ.H$5H6IJ1a8!P?We3nD$~9C6 t2HHd~BhR (Dф-XƵ7`|-8H,Ǹ儉G %Dc'9@1)ʚԟ^KCz&7<jγ@n !e -HQtBB?~8ܠ!%m bn /ZLr ؙ1͇I~*}m_/ev8"Ġ, DO@KK$@@$L:UGpN\ψT_VuvM]~Okd" -L@y}u\ -_2ȇ ba./0̏ "ɟ<ohs[v3y (bJFrX>+3gu- p 1OMA.?0ƥ5h#p+(ejX$tNu͛ 7jk_)#[Ćj7(Xmou6bԍjnCϧLuEN!8TZ -rV#;te*cIu0ʁ<?1yu4lB Iyޝ4_ WA`oT;IƏs4Ba g}DU7}d\dB)bCXjsP@\|$ΧDb/dҩNGA6uFMPO]dU3 /sQDmUKn, -y %pP[aA8VӄyU7T-Am>HZ'/[S)Cjj:> >YE|dG/R\C B<,nD n;xZx  !ŵ>]8AucЧsy_2M*mѴylt tgG -qґTHqC:Qnn:Ci/mS»>uzqs|"7g`g6043 -]̯G/c -znY -]7-?wVEnѿ LbkKy#^_a#šh  ys2}#w}.Q#M3HW0@(ltxBrԓpjdet]Sllz&3~ 9 -ȸೋuAX" вEMG2 G`mV>hex )-o:qą @Hsma`l{_+endstream -endobj -890 0 obj << -/Type /Page -/Contents 891 0 R -/Resources 889 0 R -/MediaBox [0 0 595.276 841.89] -/Parent 898 0 R -/Annots [ 894 0 R 895 0 R 896 0 R 897 0 R ] ->> endobj -888 0 obj << -/Type /XObject -/Subtype /Form -/FormType 1 -/PTEX.FileName (PDFs/FSAn3.pdf) -/PTEX.PageNumber 1 -/PTEX.InfoDict 899 0 R -/Matrix [1.00000000 0.00000000 0.00000000 1.00000000 0.00000000 0.00000000] -/BBox [121.15700000 501.19500000 595.27600000 567.16800000] -/Resources << -/ColorSpace << -/CS0 900 0 R ->>/Font << /TT0 901 0 R/TT1 902 0 R>> -/ProcSet [ /PDF /Text ] -/ExtGState << -/GS0 903 0 R ->>>> -/Length 931 -/Filter /FlateDecode ->> -stream -HWn0+x -AqRnE,/!%G-Ȅ#7 QoY..w/׈˫! -n@ FS_ -(&Jjj bj15JfsF(]ሠtfa%H-9Bt >6`aƐ00YrhGu_x$zC3: -Np 3էu޸>Xw}Pk V:g0<朋AqVA5ȋe0SƬĠN*gtL? zϰсy09|=A{(VBl"vŒ{^7H -9HVp8T88F&e0r~&Am2gFFB!b -L`u2L'Xa:p(ቐ,|Xvry$/nAc0p"pg vqyWx9{J- ę:`ظkSSݹ‡pSJ @"BiABIr0LV  -Sm -! -)f|v.y B}w"kCmaC0V*)Ce };ڎ:>?V ͛&op AcH&6,lRKxXNM9/ 3NNYu%1l+(F]`GObc`@EGhtƑ h s=kj$ |䞒W @ox(EQ,[XU$D.нw&҆L둓\`"!A -_|]O'q޵%q(m%ݿ;۪rZ|t-|`&̅KSa> -endobj -900 0 obj -[/ICCBased 904 0 R] -endobj -901 0 obj -<< -/Subtype /TrueType -/FontDescriptor 905 0 R -/LastChar 116 -/Widths [ 278 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 722 722 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 556 0 500 556 556 0 556 556 222 0 0 0 0 556 556 0 0 333 0 278] -/BaseFont /ArialMT -/FirstChar 32 -/Encoding /WinAnsiEncoding -/Type /Font ->> -endobj -902 0 obj -<< -/Subtype /TrueType -/FontDescriptor 906 0 R -/LastChar 121 -/Widths [ 278 0 0 0 0 0 0 0 0 0 0 0 0 333 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 667 722 0 667 0 0 0 0 0 0 0 0 0 0 0 0 0 667 0 0 0 0 0 0 0 0 0 0 0 0 0 556 556 500 556 556 278 556 556 222 0 0 222 833 556 556 556 0 333 500 278 556 0 0 0 500] -/BaseFont /Arial-ItalicMT -/FirstChar 32 -/Encoding /WinAnsiEncoding -/Type /Font ->> -endobj -903 0 obj -<< -/OPM 1 -/OP false -/op false -/Type /ExtGState -/SA false -/SM 0.02 ->> -endobj -904 0 obj -<< -/Length 2598 -/Filter /FlateDecode -/N 3 -/Alternate /DeviceRGB ->> -stream -hޜwTTϽwz0z.0. Qf Ml@DEHb!(`HPb0dFJ|yyǽgs{.$O./ 'z8WGбx0Y驾A@$/7z HeOOҬT_lN:K"N3"$F/JPrb[䥟}Qd[Sl1x{#bG\NoX3I[ql2$ 8xtrp/8 pCfq.Knjm͠{r28?.)ɩL^6g,qm"[Z[Z~Q7%" -3R`̊j[~: w!$E}kyhyRm333: }=#vʉe -tqX)I)B>== <8Xȉ9yP:8p΍Lg kk Ѐ$t!0V87`ɀ2A. -@JPA#h'@8 .: ``a!2D!UH 2 dA>P ECqB**Z:]B=h~L2  5pN:|ó@ QC !H,G6 H9R ]H/r Aw( Q(OTJCm@*QGQ-(j MF+ 6h/*t:].G7Зw7 Xa<1:L1s3bXyeb~19 vGĩp+5qy^ oó|= ?'Htv`Ba3BDxHxE$Չ"XAP44077&9$An0;T2421t.54ld+s;# V]=iY9FgM֚k&=%Ō:nc1gcbcfX.}lGv{c)LŖN퉛w/p+/<j$.$%&㒣OdxTԂԑ4i3|o~C:&S@L u[Uo3C3OfIgwdO|;W-wsz 17jl8c͉̈́3+{%lKWr[ $ -llGmnacOkE&EEY׾2⫅;K,KhtiN=e²{^-_V^Oo§s]?TWީrjVQ=w}`嚢zԶiו8>k׍ - E  [ly邟~_Y53rW򯎼^{7so}x>|쇊z>yz -endstream -endobj -905 0 obj -<< -/StemV 88 -/FontName /ArialMT -/FontStretch /Normal -/FontWeight 400 -/Flags 32 -/Descent -211 -/FontBBox [ -665 -325 2000 1006] -/Ascent 905 -/FontFamily (Arial) -/CapHeight 718 -/XHeight 515 -/Type /FontDescriptor -/ItalicAngle 0 ->> -endobj -906 0 obj -<< -/StemV 85.863 -/FontName /Arial-ItalicMT -/FontStretch /Normal -/FontWeight 400 -/Flags 96 -/Descent -211 -/FontBBox [ -517 -325 1082 998] -/Ascent 905 -/FontFamily (Arial) -/CapHeight 718 -/XHeight 515 -/Type /FontDescriptor -/ItalicAngle -15 ->> -endobj -894 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [273.683 645.815 285.639 656.759] -/Subtype /Link -/A << /S /GoTo /D (figure.10) >> ->> endobj -895 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [456.12 645.815 468.075 656.759] -/Subtype /Link -/A << /S /GoTo /D (figure.13) >> ->> endobj -896 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [151.841 297.462 158.815 308.406] -/Subtype /Link -/A << /S /GoTo /D (figure.6) >> ->> endobj -897 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [194.328 249.641 201.302 260.585] -/Subtype /Link -/A << /S /GoTo /D (figure.6) >> ->> endobj -892 0 obj << -/D [890 0 R /XYZ 125.858 740.998 null] ->> endobj -893 0 obj << -/D [890 0 R /XYZ 125.858 658.896 null] ->> endobj -700 0 obj << -/D [890 0 R /XYZ 261.086 606.144 null] ->> endobj -889 0 obj << -/Font << /F42 510 0 R /F32 500 0 R /F34 502 0 R /F43 512 0 R /F56 730 0 R >> -/XObject << /Im4 888 0 R >> -/ProcSet [ /PDF /Text ] ->> endobj -909 0 obj << -/Length 3732 -/Filter /FlateDecode ->> -stream -xڭkܶ]+DJhQNAjk!PĽS6zĹpZv9Mb#dQѡ%INw w0뇻oCIDC6ۇ2߽yëb[ovba/#Ax:L D'}{0ċTr{>XW%VnQZ5턿OMc|v/tO4*sҴ={Ң*:7]0j'-AfBxIY|$cݜҮHap9&Ie_zw8|iDcOq$Ҫ2p =- 23NFp_R!Hp.늁jxCЭN }k䊐mM;c-hY BDV8bqqD"zB~̰'=9>#% vAJ-l44պy~9Ö֬r&R_qlXK{AՏh::RiA_8ckX~Ǵ =~RZDh znD!h;fG.e= D4loޏJ>Gy݁"ucBs3DH+G4;/( @v8r0K8nwhLkј0!# 3k&OS՟mx -IphՒ\P\\IwF(KJ}{ s YճCЕ@@uBQ -gΣ.(܁+QJ{rǢ2c(J!*L-ն=D]M=QX9ETyHeb6 UFbH'[ ߻&ͨl38D}k/NL@V5$^zv{Ӊ˳S<]S,P{IM`Kj`&҆mvQG{e0p(ŪAi)$-<\EHKpRb+xY7nPb={!+> ŸʞR./H/źjALq':= j.`HSi+d4HS1jL K[fӎ `/u5yp{RA%{Ѯ N}g[:lIV!'Nns nt*rHD\l hLij0r0[$(9L6 휛7K#w>CE [k^͵kmGi#R}s`cC&Oz$gC/ -@俯h:3J')>MV |T -w)] -2c 1hb[l OhMX P\`ў z+ӷqdBsVkXb?ׅ-p'3۵Wdzq,JTvd* w2*H!P~҃Z i,LŖM5MFd{c)W -rM^N}¶[MV Gj$)}&2r2scP`xd;jC$wdEdm\Fi)uF1QĜ`Ѯ#Jm€;6ud9<[soKwخ#d~=0KoդE,]x>^QE%J{n uW VK&=ahq|h.Qnp{64s9h18,L}!P@}((ޏeU#Pk%׮K֮KC[  Z<=5r0,_Ryi`_ *s\#Pk0mzf 'g~KjB X)%56鷪;@yNk)󙳈p!'Z.6~N=vLfP9j5:Ho6$1)#9زy s$UBH2˹F .޺!|0D{ q+HgW]m(,-.糭⡶M>iwyCROm1Ci ޝNZU(ו[2t0ʵxI09m*KQr-|~*'VWM3YJG+A5G)'qškbRE(Q4(mA{?IPEܱTH]t ,>&O_-6 ~اq持܋=]M)YjyӞnGvȯǪ|a/0ѹ.1ܒҙn\/}-Nug5Dk#Ȅj*iFڬendstream -endobj -908 0 obj << -/Type /Page -/Contents 909 0 R -/Resources 907 0 R -/MediaBox [0 0 595.276 841.89] -/Parent 898 0 R -/Annots [ 912 0 R 913 0 R ] ->> endobj -912 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [423.657 417.297 429.634 429.818] -/Subtype /Link -/A << /S /GoTo /D (Hfootnote.3) >> ->> endobj -913 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [142.854 395.404 157.3 404.331] -/Subtype /Link -/A << /S /GoTo /D (subsection.3.1) >> ->> endobj -910 0 obj << -/D [908 0 R /XYZ 125.858 740.998 null] ->> endobj -911 0 obj << -/D [908 0 R /XYZ 125.858 658.896 null] ->> endobj -50 0 obj << -/D [908 0 R /XYZ 125.858 452.963 null] ->> endobj -914 0 obj << -/D [908 0 R /XYZ 140.204 172.898 null] ->> endobj -907 0 obj << -/Font << /F42 510 0 R /F32 500 0 R /F43 512 0 R /F34 502 0 R /F56 730 0 R >> -/ProcSet [ /PDF /Text ] ->> endobj -919 0 obj << -/Length 2384 -/Filter /FlateDecode ->> -stream -xڭYݏ۸߿oјI]vAKR\ؒ3R-ApL7 -U,,eeY,6tw7ܳ*by}.Z.ֻ\4Mo+Ood}hy'^6R<+A Np丹]edJ?>\K/gO5tǽI@hN磽.L]?sJ:15~CO.J{Zw}UwPZ1DLk6mi7x6MU]_{ZmvD5ơPWfvrV*D~T')=-++ِX+X+~o^O_'_ 'I}}zOU<ed$`"~iɴ'gp'ƱY -<8K2D0:ھT/&)rDy)̵+ ]\feXpˊL\B]niN~gۓDEۅD?gKRTYZ{Y,;(I.*e򡪭i"MV?R;5'횖_ d ޛd~V-2:d;Ñ?3v ϭVϪwȕD2xrՑkȁH }\$jS{[P)89\Bqok -qAㅌod(3wC՛WUUEn-ѣۑChdņw~hg!;"?LOT,[gs10KTf8W$B ?DT\)IXhgCːѣp%4x!2cc [{j6 -mwշ@R:3]7ࠖ1* -F֗$54Ϲ-֘m5xp?Bhg܁@ǁ'Nd\:qAԙNsJ. Ik.Vܚ%'l8a> endobj -915 0 obj << -/Type /XObject -/Subtype /Form -/FormType 1 -/PTEX.FileName (PDFs/EncodingExampleFig.pdf) -/PTEX.PageNumber 1 -/PTEX.InfoDict 925 0 R -/Matrix [1.00000000 0.00000000 0.00000000 1.00000000 0.00000000 0.00000000] -/BBox [18.66150000 529.52300000 396.29000000 625.90700000] -/Resources << -/XObject << -/Im0 926 0 R ->>/ColorSpace << -/CS0 927 0 R -/CS1 928 0 R ->>/Font << /TT0 929 0 R/TT1 930 0 R/C2_0 931 0 R/C2_1 932 0 R>> -/ProcSet [ /PDF /Text /ImageC /ImageI ] -/ExtGState << -/GS0 933 0 R ->>>> -/Length 594 -/Filter /FlateDecode ->> -stream -HUMo@W9x;1#RDH(PHi)д"˻{ov -=Q~TBI{b]3pX2&unVϛ*X}=pʻ>xS= # .'5YaJ^20V`d12VajACC -X:nX]2!"#C4L$ MIkpݺ?Ι;5Aa wP>Uπ}a>/,{ : @v 3I}HÁ̴cn:15W</W_"{@#f(TLG xߝlq&'ꄣFmru;6K8ehϩz<3MK_SBS6ū X^]nnG~N~@F+x/IO/"c=<`ԎFFW!'%OjnJxod;7 endstream -endobj -925 0 obj -<< -/CreationDate (D:20080801135037+10'00') -/Author (john) -/Creator (Acrobat PDFMaker 8.1 for Visio) -/Producer (Acrobat Distiller 8.1.0 \(Windows\)) -/ModDate (D:20080801135243+10'00') -/Company (Queensland University of Technology) -/Title () ->> -endobj -926 0 obj -<< -/Subtype /Image -/Length 502 -/Filter /FlateDecode -/BitsPerComponent 8 -/ColorSpace 928 0 R -/Width 26 -/Height 36 -/Type /XObject ->> -stream -hb`YXa6vfNrl^Q1q ^I)GZWFVW^QUb`PVUqx44A ^]Q^=G׀143൴qmxlUx@G'.n^ /ԡ~0`g(oXxDdTtLl/)Wy KNMMKg9rYpN6o^ιy0v>otA! B%y@TjkAd]=o#D7%R8ۂ"fwhvdo7Cx'N< L;3xgΜff7,X³EK!%KyeO]VׄEYǻH -mب -7nlݪnw{ jO7% {y1Ԓ y1d> -endobj -930 0 obj -<< -/Subtype /TrueType -/FontDescriptor 937 0 R -/LastChar 223 -/Widths [ 278 0 0 0 0 0 0 0 333 333 0 0 0 0 0 0 556 556 556 556 0 0 556 0 556 556 0 0 0 584 0 0 0 667 667 722 722 0 611 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 278 0 0 0 0 556 0 0 0 556 278 0 0 222 0 0 0 0 0 0 556 0 333 0 278 556 0 0 500 500 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 333 333 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 611] -/BaseFont /ArialMT -/FirstChar 32 -/Encoding /WinAnsiEncoding -/Type /Font ->> -endobj -931 0 obj -<< -/Subtype /Type0 -/DescendantFonts [ 938 0 R] -/BaseFont /OLILLK#2BTimesNewRomanPSMT -/ToUnicode 939 0 R -/Encoding /Identity-H -/Type /Font ->> -endobj -932 0 obj -<< -/Subtype /Type0 -/DescendantFonts [ 940 0 R] -/BaseFont /OLILOL#2BArialMT -/ToUnicode 941 0 R -/Encoding /Identity-H -/Type /Font ->> -endobj -933 0 obj -<< -/OPM 1 -/OP false -/op false -/Type /ExtGState -/SA false -/SM 0.02 ->> -endobj -934 0 obj -<< -/Length 2598 -/Filter /FlateDecode -/N 3 -/Alternate /DeviceRGB ->> -stream -hޜwTTϽwz0z.0. Qf Ml@DEHb!(`HPb0dFJ|yyǽgs{.$O./ 'z8WGбx0Y驾A@$/7z HeOOҬT_lN:K"N3"$F/JPrb[䥟}Qd[Sl1x{#bG\NoX3I[ql2$ 8xtrp/8 pCfq.Knjm͠{r28?.)ɩL^6g,qm"[Z[Z~Q7%" -3R`̊j[~: w!$E}kyhyRm333: }=#vʉe -tqX)I)B>== <8Xȉ9yP:8p΍Lg kk Ѐ$t!0V87`ɀ2A. -@JPA#h'@8 .: ``a!2D!UH 2 dA>P ECqB**Z:]B=h~L2  5pN:|ó@ QC !H,G6 H9R ]H/r Aw( Q(OTJCm@*QGQ-(j MF+ 6h/*t:].G7Зw7 Xa<1:L1s3bXyeb~19 vGĩp+5qy^ oó|= ?'Htv`Ba3BDxHxE$Չ"XAP44077&9$An0;T2421t.54ld+s;# V]=iY9FgM֚k&=%Ō:nc1gcbcfX.}lGv{c)LŖN퉛w/p+/<j$.$%&㒣OdxTԂԑ4i3|o~C:&S@L u[Uo3C3OfIgwdO|;W-wsz 17jl8c͉̈́3+{%lKWr[ $ -llGmnacOkE&EEY׾2⫅;K,KhtiN=e²{^-_V^Oo§s]?TWީrjVQ=w}`嚢zԶiו8>k׍ - E  [ly邟~_Y53rW򯎼^{7so}x>|쇊z>yz -endstream -endobj -935 0 obj -<< -/Length 633 -/Filter /FlateDecode ->> -stream -hjˌ~}~אxxx222դ545ءHGH:9:Ђ===DCDMMMefe{{{878kjkݸnmn<;<֐QPQ$$$HHH212fefxyxFFF"""ƿBABsss-,- ,,,>=>JIJZZZTTTEEE444srs#"#ppp qpqDDDJJJlll434...;:;fff|{|󕔕767壣***ddd)))&&&'''GFG;;;XWX~~~zzź]\]EDE!!!UUUTSTSSSljlQQQ>>>wwwyyy y:: -endstream -endobj -936 0 obj -<< -/StemV 82 -/FontName /TimesNewRomanPSMT -/FontStretch /Normal -/FontWeight 400 -/Flags 34 -/Descent -216 -/FontBBox [ -568 -307 2000 1007] -/Ascent 891 -/FontFamily (Times New Roman) -/CapHeight 656 -/XHeight -546 -/Type /FontDescriptor -/ItalicAngle 0 ->> -endobj -937 0 obj -<< -/StemV 88 -/FontName /ArialMT -/FontStretch /Normal -/FontWeight 400 -/Flags 32 -/Descent -211 -/FontBBox [ -665 -325 2000 1006] -/Ascent 905 -/FontFamily (Arial) -/CapHeight 718 -/XHeight 515 -/Type /FontDescriptor -/ItalicAngle 0 ->> -endobj -938 0 obj -<< -/Subtype /CIDFontType2 -/FontDescriptor 942 0 R -/BaseFont /OLILLK#2BTimesNewRomanPSMT -/W [ 652 [ 505]] -/CIDToGIDMap /Identity -/CIDSystemInfo << -/Supplement 0 -/Ordering (Identity) -/Registry (Adobe) ->> -/DW 1000 -/Type /Font ->> -endobj -939 0 obj -<< -/Length 216 -/Filter /FlateDecode ->> -stream -hTPn0 {!@oXHʼnL&Glv׎lN`dFd -arֳ #ߖsG#< Cy.N ol-MT_WpF -P@ӀQU75#L#T/wmgpJ#+zͣ >o~nFOtCb><I,|RK!~ k" -endstream -endobj -940 0 obj -<< -/Subtype /CIDFontType2 -/FontDescriptor 943 0 R -/BaseFont /OLILOL#2BArialMT -/W [ 652 [ 690]] -/CIDToGIDMap /Identity -/CIDSystemInfo << -/Supplement 0 -/Ordering (Identity) -/Registry (Adobe) ->> -/DW 1000 -/Type /Font ->> -endobj -941 0 obj -<< -/Length 217 -/Filter /FlateDecode ->> -stream -hTP1n0 - 2q2t0EvW$PS-}$qс$x᎔M֒ ? w-cuغ> -endobj -943 0 obj -<< -/StemV 88 -/FontName /OLILOL#2BArialMT -/FontStretch /Normal -/FontFile2 945 0 R -/FontWeight 400 -/Flags 4 -/Descent -211 -/FontBBox [ -665 -325 2000 1006] -/Ascent 905 -/FontFamily (Arial) -/CapHeight 718 -/XHeight 515 -/Type /FontDescriptor -/ItalicAngle 0 ->> -endobj -944 0 obj -<< -/Length 8834 -/Filter /FlateDecode -/Length1 23492 ->> -stream -h{{|$,YI6 $$"ِ  IpK KQ (h*-JEdJZҪԪBwfwC}Os̜9sĕV8+5Q)8Os*H~F"Ed%+P,j" _bkqZZU^y~G-#ӈ/(',]Y }^D*CVTSȐDcQڙ1_}cUʪ7">h"*]SU{f̎_%GHt"^}tMy9]ӹЈy&i5jCy^ڞFXؓbiJ~0bw3SPg9ڗE$@;i%Y66BQ6Hu%E S_=ͧ5!T@oGԇ2fB)lEO, =o3ۨ/ 1t?f_ F"hh3Aa}HqTF[&s9t 7鯇 ֗iQZ1m>jD DWt*GdÅlN0a' +Hɴnt`al$ -DP]x{Cl8V_Jِm=迅V3b֞eF1Cg, :AċzmV_#8;ކ߿fCo\s'4jh-]KbVy4ig;A4B{ނYQ+ޓe/f`ct6-a؝WW$F9-Esi)fxw/=G/lKN| ~-6myml"+l"@ >!-cu]X?.z -p"[RYOior}}U+fv dF#~#þZkh=HMtM0#?0`s5z_n{{=Þc/wؗxQ<|o»'bbޝ Fz:IaK!IEߟ n?h9:Ko }~O)[?chB4$cֲD646lsb.n> 4O|&%o-_b-?)"[rZ#ϊW9kZіhc+׺Sӗ;g-1,-,w[X>ZEEW͍y u~R-Xºl6V,d}9_͊lv;59ܢ?h8+^zƟF74VN;+dhy$ª߅J/jJ~C{<̆WpNG-_3>@Z3'ٟX+1W<̦-/8̎8Ri#{"~OY|a%c!vO; -cOnNt۟;qHF K4k=%tafJwzsľ? 'VRYv˾Ep!zo/b/`еj!l3a݂ta9 -Y_"h߉(.Oo=%j;jԸ}E,|q6:/&a\V㌚36Lsi 2b]khݬ9zv<#ۂ}{͢#8i$5ia2'7-)zV'$F#ڧf3_:E3̇M' -Og v3av'kՙf=jU#҇KIN8d w+>pӿ_t>Q==BClV (9ϕ_fxyAIRdUFy'F+RQԌK5=\Eth2I)FulތouޏU~oWy;qq`E/5]ڔWBs\9U)lr޾fw*oKǦqqrzzh - 3JeȓTeR-%e.$Kz{m:;D-e}q_^0U0c^TmA%%|L,c~dBo?ݝʫ.9%"sl -~!Wvf򽐿| :зJȣPRAc.Lv/TQVLQT嘃cKҾۧ mmxTjn >~jn3](ʓF1Z%ƚ4e ۼn$˝JχC0b-n4C,$@o_I? _:` @sOld~6r$!S伳9!du~@_ȷFYd>@= =# -}h@{'$0!un7Ș)CƆēY9u1f -HGM Z/rr-ȶelɘ R}*)cuɪoelu2%5DFd}ʆ<Ҡ=r}5*S &7dS7h6/ TkSgto"nmd̥\twKXOeh {=L ~iW6LRβgOh1'LS;Aw?Z#H$vm9k&sFC6zu6NՖ8RE̦-*qI(!툣1XR4r ؃T m2SjMf~Jl:Hͽ Es9e'SbS#9~?QIs]iGG?bQGi^p]7 #؇1̼՜o֜/1',7~ffsǙ^?xJ?Gi@9~究gTte\r bsK+-V[֥#FfHfS^4 nW{PhR5YiKC=*y~{$1W}Yν+Ó#jnM neMSR@ǭ}A{`'_ML+[eH(V}M 1?Q.41Wq3ΨDp>]YyN<\u2 $0 YN +3Mu?}{W{R6Fs/9h}> k1{@@n?eq dt?(ޤ◘'~g8ST"^F>Z)\ JgCVzGƃK܄:o>FWZ~gyG8tK9QZr(UĹ@A\u]^ekg;O!UiNd}НF^0{}I63F0m$dЧ2 ؄m?3Ϡ^ -:Cu9~g1KqsKei]m ,e]KQb0QKY>wdϕQ2 -vj,P6|Xd'ͷ@簓8(gpw? - 2+k^[hag#Ze 4^d}=|^ibp7˖B,`kYk(þ -H]UߎPk,:#:JU'8/]yyϾLi@#%1?eE⚸6V'`</FU;8|sSͅĹw4"HB [vM#twh׽%p O}zfvq`/:vnGy5oQo<n -| !5yw返~w 7#8WoP净N|7%KRޣ]VޟIF pyʻ#7PRyoeNr÷8±~RBm\`1%?i:GQ"xoW8{Fgjz A `D׳Jg?}ߖ|W~p]r/ 7p]^m躎;[gj'`3+xE Dww]O8 hVZ~{SD;Wg~ t^~Q?Lfx%// -4LQߐCR? 7( &'|}bm߄ ̨1LДS١mmq -NWZ K?mS3rn'<͖A黎Cx*U|^hyk xB HNu8R!=Ո #}s#MjmFT(ut A@Y]AwzS,P^t t:Bni@nr;(R&6ftЕ~ -w]s9oppA>ޯ"Cg=tCg=&_, u :]Hۀہݲ$a-boA%ÓX W{~.BBe p[U-!=$BkyvOQA?8 -JrMTRtZi#OOg#oZ岈#"pvRHL($:fe!!B#I 5Ql)RE( jcGx&ZƎ;vDv;Wޭ[TO)/؟bi}02|eCCqll{b8*ȔUU쉊#8qqdXv0;U:Emɭ6$rv '{K]J)zWfy{(7&?%͠K;fs[ĞLt uuqf=Mn*MICpE\ʔ٣de dkuuuuu5jXcQj,6mdj5O{t,:M;L=8֎7RY7 -'xG'Z͙1I^[J%/ʨ*Ybcnt[KKY -/ga3yuׄh6+:+b|$e4Y0Hl7]fDC|5=k%)-9ĮfJ>.Cy-(SBRYRy~gdyV)-񷕀.V$P)AJ5ă΍  ARJ[4vC=Z]~sJɭqRcuunNҿ=YK[ǥe*̻ehE\VWU,*[5+.#rWn3U4Wxr}|Κy43;=ԗ5"4;oF ||"]Q[ZGuI  -2KgI0$j45\ j ^TSMb/^ϱ]4470iw5FSjPUCՈٿMY_ՠR?A4g Zq80qs#qzpuByKCg~agSGփ>+|]al=Q Q+/ -endstream -endobj -945 0 obj -<< -/Length 7561 -/Filter /FlateDecode -/Length1 21604 ->> -stream -h{y|TEv7YH$зi$:i%! $ChOyr"Ӡ@qEQm2 -oUItD>oNU:ܦ!FD'N*HKx; -ǁeK_^Bĺή|9Ιxa?OeEiMI -S&Qd侕 |Y_._]VJ]rʂkkFD KTd]ޟDc5*jRdĔvҐY ,>H?lxM]O%*i3gCXf#m\ZFڋ'@YvƼ♼WJr'5 OZnn}\T󟛿1͛h -a%gmzi,uƣ37+bg9[vքV^bﲏ+vn/K~ K[GIV(R (yTyGS&9]ۨmvj'3ox?V35mdC18FR<0q_X.gL6]îH61J9'H!>>~6^+D!zH>줲RU[`'?ʏ"gR2#RNx_ZH>]Ig$3|+T&E"r~Ap2PMV^ו]Noa;W&# -֊ɭC+װQ]cJ B!KgTLR{_Z/VΡ[i0[F*i mm1y>W]Yqn8ȮR6Nh1S-Ax?LTh+1WuZ2C -JIn˔t  i{cT&Bș(&*"h.4bGV4G̰/4tt9(sjImnX9o ~Lcz//F;'x0Z{W2uqDaYt^~)ipԠo~¨ҜOpFgרԞ.*fը#: HMIKzuW^ q=c{t53sdDxX'ݦ -gSI%7.UȞR(J[)J 1mm Dm-X2>F8lbs<>8%]nsc+stƘ%%9!<,ۓ]B a`=<5 h&#wD'G$2<9FOOPsKˍSssn_j< dQ҄e3-۰f7tސr~]IJ#=3 '蒌vs׿{ADkZ+su!ׯэmS[EcJǠuļվbFU\) I0/3|| r\SvIsЋ_"sm5Ɩ+%Ԑd"l)|-!)Kq >-Hbo xi?8(4+i>"/ H\c GR_{#Oޔzn}5ym`<3f+x"s3ZPaɠ.JaY2.X(`$PrVFn^Dq NkP 68"x*,vae&/`&7la ,aљ2]}>4`gyt~?Y_[ -xc:ƪak4xڂxX[X.5E^>+\hR(!/sUrY9B:Fe9C:yN|]X:z o`l'}HsSjZl6K% *]R 0ދjS|-PzW}vL,싀QT MJ!v(:jD=tyQ{f[Pߣ(wiC lM߃2趀C~ NxWlC=XDy.Wkw mL+h=Kkٳ*FC=r}!?lQ?Hy7z4 7,U> [>}AZm Za2U@<0bHk_t%d? &,d`Dy^)_0]oۈ~cq_Si+Ώd5 -QXy݌8^%bVb\D1V}(Bb}UƢVҽ6 {6[ BRr$w< y~1F=Ǚ6?ֈ=%=`0OPy?WKOhg6?ю&A l (HfU,`/"KZKCՃX ie=ݬ7_c~t=J%'hUxmOŞoŔ ԆwB*gy>`n -ƫ]K|>OvqZ.>#e{*u -?n_b{>oO[b>Bӭu]kc|O3M~[S6wk[b:OҠC6XٽrT_'#B;y(fA'RK0iSY=0C Xq.3Q,΢JyQv0uEMKTANF;lRZ w,HG 4H}61mr t QH+a#.x){X򸋈c:m1/Va mik.vPHrq򼾓~{Z9$yVٍ\}P1U9jp]#֏D>,wRL*Zz $ڽ~bތ.k&}3lˈ;X/v/u=➂irEg:8T [X9' eK G܊3tS)]D=.k[[a[ :!]Rt wK?F yMWGZZΤZ -1(݊8_^ =Lں NdNPQ, -0nW`N _[ ~zQNبw("M 1H_le"]v=4}c!'i0g ?+7HPmFO<.-&P^k~HZ(}>|6O!+l+} uS.7ʵxG1(0o>O.u6пwp(&Cԙ0NSY B?PSF{ˊ?ZT{,%,,wHKsʾ-hl嗘Gq6EaO -w{&5qL0#{~:B{؋i=#naf;+},h\\g8[:Cؽ{?[nw/ Q\ ڭ n>z:nYowxwnZg^(st(C~| -\neyȿTHb q+~1JF@ 4mq\uzhw(BAPGAPȅ4 n64 -pFx{ Hgt)WIq4_N9f#f. d%)A4,2`fw;pAShC*{&o=0*'yPa]3øOS4`?sWww IݜH3px( f[i2|H t Qup_O'4q%ZLx/7~ѓ]2W8{B:0(jN e0"p^`2/5?֘ΏgN3yޠ3]|B'4 bOhم𸐦$`&p`xrW4*ysycHF -$MxD$ݺHn\N$Iׯ'K$|8$M N$I -! -{k*gFoUݍc6{w3̟;3JW32'0o2clϼMmX?1-'1"e~ q`Ir%ٓ)FGG7Fԍvc@z 0䅑'hܳ}FWgP CC*BMQHӀ `&8 ؤ;NՖH,' #~no/g39N-EfzPޝ8Xo"M$uoQ/L^Ԙ+3Vul8%DaT+!2JAXTcRk?,Ju}QcW]ǡٽJͮhO -04ݗ0ai]!a*AfT3r'MwC}9 \ZԹוpkTj(5.$p_l[VX44*)b$t{mw{#p8l0Oz #UN.RgNWUyY,8XFytOMnh,fDQ^a1,9/`7y})Tůc]V}>$#6#ztcr~ ) 6|/cc^AH˗gY>;}.x2}///J;C|.Iv;z6Qv}]N(;uv*v }ss6=t6=6a(m鰴9/l$!& i &i-&7˖v&!hy2dy6?S?+V%-K*c ,]o(YK*UV)hiTeaȞ!GzrhFnaq oENH\Oioɗ m-m]6*,*L5vdcE[CE[CE[cce[$c|rq|3tCĻ}Yݝ5et.ߏ N -O,#Y" kJdu{btne9ɢŵ)6wnNɵꃼ\[S[Gg/32L/nۡ-]2Ft`P9B(-B7J:u ?--V?y{:)FB~\PCkY2 !ݦ O!-8k,,"hQN{ӕ%]=(6TX$ -ݣ""yXsyQɋ)2R2_4EDH`yEF Bt"ͲqQ8 -| yXx?󆇇ۊCK&Qrgi"eοy?yy2Ώ1h utqqx@ٷMi)_4)wܱaH/:Ёt@:t@:Ёt@:Ё0Mf -NOAbֿ%`OZByū'Y UoYJԢv&x-^W)Aj6ixYzauTzvEus59u1J M>~! >|`*zz9uz~EmŢ%&0iBr梹'$NpQiyłEUzuF_T1gnm]Ţr}BE:=I/O={^\_[f0`$Mn51r"CSc4c)϶lH2);vW'o*v0&1v%1fF.ҾM_9NrD@$># -endstream -endobj -916 0 obj << -/Type /XObject -/Subtype /Form -/FormType 1 -/PTEX.FileName (PDFs/EncodingExampleFig2.pdf) -/PTEX.PageNumber 1 -/PTEX.InfoDict 946 0 R -/Matrix [1.00000000 0.00000000 0.00000000 1.00000000 0.00000000 0.00000000] -/BBox [18.66570000 529.52300000 396.29000000 625.90700000] -/Resources << -/XObject << -/Im0 947 0 R ->>/ColorSpace << -/CS0 948 0 R -/CS1 949 0 R ->>/Font << /TT0 950 0 R/TT1 951 0 R/C2_0 952 0 R/C2_1 953 0 R>> -/ProcSet [ /PDF /Text /ImageC /ImageI ] -/ExtGState << -/GS0 954 0 R ->>>> -/Length 598 -/Filter /FlateDecode ->> -stream -HUMo1ﯘaHa z@B BЦgM(bw͎/*2]wj)aH0_U'a4 RFo+}y]Yk0h޸jY.M 0T5 ` 7Gc8 JVB(Y2] -@eJb8J.kt0>H/shqDoƆ䵰/kǀ(+;8VE?RG*D m$cZdK<<˼{B^H>CEj &a2}ڪB^UǙHh&6QFۜΟgȱ{>#Fg@9.q -z0;g D}VMm}ȍ-֔%+}bf֔~*[ʭ4T6-G'5b> X٨s5uȵ)ҩǓ2ZtPwendstream -endobj -946 0 obj -<< -/CreationDate (D:20080801143117+10'00') -/Author (john) -/Creator (Acrobat PDFMaker 8.1 for Visio) -/Producer (Acrobat Distiller 8.1.0 \(Windows\)) -/ModDate (D:20080801143211+10'00') -/Company (Queensland University of Technology) -/Title () ->> -endobj -947 0 obj -<< -/Subtype /Image -/Length 502 -/Filter /FlateDecode -/BitsPerComponent 8 -/ColorSpace 949 0 R -/Width 26 -/Height 36 -/Type /XObject ->> -stream -hb`YXa6vfNrl^Q1q ^I)GZWFVW^QUb`PVUqx44A ^]Q^=G׀143൴qmxlUx@G'.n^ /ԡ~0`g(oXxDdTtLl/)Wy KNMMKg9rYpN6o^ιy0v>otA! B%y@TjkAd]=o#D7%R8ۂ"fwhvdo7Cx'N< L;3xgΜff7,X³EK!%KyeO]VׄEYǻH -mب -7nlݪnw{ jO7% {y1Ԓ y1d> -endobj -951 0 obj -<< -/Subtype /TrueType -/FontDescriptor 958 0 R -/LastChar 223 -/Widths [ 278 0 0 0 0 0 0 0 333 333 0 0 0 0 0 0 556 556 0 556 0 0 556 0 556 0 0 0 0 584 0 0 0 667 0 722 722 667 611 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 278 0 0 0 0 556 0 0 0 556 278 0 0 222 0 0 0 0 0 0 556 0 333 0 278 556 0 0 500 500 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 333 333 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 611] -/BaseFont /ArialMT -/FirstChar 32 -/Encoding /WinAnsiEncoding -/Type /Font ->> -endobj -952 0 obj -<< -/Subtype /Type0 -/DescendantFonts [ 959 0 R] -/BaseFont /BGEDOI#2BTimesNewRomanPSMT -/ToUnicode 960 0 R -/Encoding /Identity-H -/Type /Font ->> -endobj -953 0 obj -<< -/Subtype /Type0 -/DescendantFonts [ 961 0 R] -/BaseFont /BGEEBJ#2BArialMT -/ToUnicode 962 0 R -/Encoding /Identity-H -/Type /Font ->> -endobj -954 0 obj -<< -/OPM 1 -/OP false -/op false -/Type /ExtGState -/SA false -/SM 0.02 ->> -endobj -955 0 obj -<< -/Length 2598 -/Filter /FlateDecode -/N 3 -/Alternate /DeviceRGB ->> -stream -hޜwTTϽwz0z.0. Qf Ml@DEHb!(`HPb0dFJ|yyǽgs{.$O./ 'z8WGбx0Y驾A@$/7z HeOOҬT_lN:K"N3"$F/JPrb[䥟}Qd[Sl1x{#bG\NoX3I[ql2$ 8xtrp/8 pCfq.Knjm͠{r28?.)ɩL^6g,qm"[Z[Z~Q7%" -3R`̊j[~: w!$E}kyhyRm333: }=#vʉe -tqX)I)B>== <8Xȉ9yP:8p΍Lg kk Ѐ$t!0V87`ɀ2A. -@JPA#h'@8 .: ``a!2D!UH 2 dA>P ECqB**Z:]B=h~L2  5pN:|ó@ QC !H,G6 H9R ]H/r Aw( Q(OTJCm@*QGQ-(j MF+ 6h/*t:].G7Зw7 Xa<1:L1s3bXyeb~19 vGĩp+5qy^ oó|= ?'Htv`Ba3BDxHxE$Չ"XAP44077&9$An0;T2421t.54ld+s;# V]=iY9FgM֚k&=%Ō:nc1gcbcfX.}lGv{c)LŖN퉛w/p+/<j$.$%&㒣OdxTԂԑ4i3|o~C:&S@L u[Uo3C3OfIgwdO|;W-wsz 17jl8c͉̈́3+{%lKWr[ $ -llGmnacOkE&EEY׾2⫅;K,KhtiN=e²{^-_V^Oo§s]?TWީrjVQ=w}`嚢zԶiו8>k׍ - E  [ly邟~_Y53rW򯎼^{7so}x>|쇊z>yz -endstream -endobj -956 0 obj -<< -/Length 633 -/Filter /FlateDecode ->> -stream -hjˌ~}~אxxx222դ545ءHGH:9:Ђ===DCDMMMefe{{{878kjkݸnmn<;<֐QPQ$$$HHH212fefxyxFFF"""ƿBABsss-,- ,,,>=>JIJZZZTTTEEE444srs#"#ppp qpqDDDJJJlll434...;:;fff|{|󕔕767壣***ddd)))&&&'''GFG;;;XWX~~~zzź]\]EDE!!!UUUTSTSSSljlQQQ>>>wwwyyy y:: -endstream -endobj -957 0 obj -<< -/StemV 82 -/FontName /TimesNewRomanPSMT -/FontStretch /Normal -/FontWeight 400 -/Flags 34 -/Descent -216 -/FontBBox [ -568 -307 2000 1007] -/Ascent 891 -/FontFamily (Times New Roman) -/CapHeight 656 -/XHeight -546 -/Type /FontDescriptor -/ItalicAngle 0 ->> -endobj -958 0 obj -<< -/StemV 88 -/FontName /ArialMT -/FontStretch /Normal -/FontWeight 400 -/Flags 32 -/Descent -211 -/FontBBox [ -665 -325 2000 1006] -/Ascent 905 -/FontFamily (Arial) -/CapHeight 718 -/XHeight 515 -/Type /FontDescriptor -/ItalicAngle 0 ->> -endobj -959 0 obj -<< -/Subtype /CIDFontType2 -/FontDescriptor 963 0 R -/BaseFont /BGEDOI#2BTimesNewRomanPSMT -/W [ 652 [ 505]] -/CIDToGIDMap /Identity -/CIDSystemInfo << -/Supplement 0 -/Ordering (Identity) -/Registry (Adobe) ->> -/DW 1000 -/Type /Font ->> -endobj -960 0 obj -<< -/Length 216 -/Filter /FlateDecode ->> -stream -hTPn0 {!@oXHʼnL&Glv׎lN`dFd -arֳ #ߖsG#< Cy.N ol-MT_WpF -P@ӀQU75#L#T/wmgpJ#+zͣ >o~nFOtCb><I,|RK!~ k" -endstream -endobj -961 0 obj -<< -/Subtype /CIDFontType2 -/FontDescriptor 964 0 R -/BaseFont /BGEEBJ#2BArialMT -/W [ 652 [ 690]] -/CIDToGIDMap /Identity -/CIDSystemInfo << -/Supplement 0 -/Ordering (Identity) -/Registry (Adobe) ->> -/DW 1000 -/Type /Font ->> -endobj -962 0 obj -<< -/Length 217 -/Filter /FlateDecode ->> -stream -hTP1n0 - 2q2t0EvW$PS-}$qс$x᎔M֒ ? w-cuغ> -endobj -964 0 obj -<< -/StemV 88 -/FontName /BGEEBJ#2BArialMT -/FontStretch /Normal -/FontFile2 966 0 R -/FontWeight 400 -/Flags 4 -/Descent -211 -/FontBBox [ -665 -325 2000 1006] -/Ascent 905 -/FontFamily (Arial) -/CapHeight 718 -/XHeight 515 -/Type /FontDescriptor -/ItalicAngle 0 ->> -endobj -965 0 obj -<< -/Length 8833 -/Filter /FlateDecode -/Length1 23492 ->> -stream -h{{|$,YI6 $$"\H IH[IX4Xb@AKUmQ*"؀V}? -VVV}_3B~<|̜sf̙3'Ĉ(6٩Oy[G("-]bQeҕ_K4Ӳꊪ?Dm?fD|A@9a٪{+[Y[YA!öGɫ*~XggGP%o܁|=Xw%QILf;H'GJ=G0s5 7zl2^E[+:Vwd?/Y`PJ+h,g iû6L ^n=>JI 3@,6נUwS{}!_wóx./Kf; ~/J$6%ii㝬o`fl]l?_v;xϜknJFXybp/އSƙf.DC2f-MbSNg3;[exFc~;1W1fGd_؇S Cy*Hs$^g]k|fAS"REk]xY|q-YK2Rmv\{I{UZw2}%reeNAsVغغմ[=qO8ףXѢŃ,Dԗ`fQ#VE-ˏxNj%L?i}Y ne"[ԾIg+4_3bdi} X7;PE^÷Rv5O[p񲶋.vݎ]%xۏ<L5T~F8k#4 v61^T&mdCx_V9 / 5L4NX;PiM)~Yr_շ"4h!cmnt:BiN`ndUcƖS* n5.BycXY4LmZ>vr[VB,?POoU8sF)ͧdXm`g^tLƹ聅/0NXd켷1Qp&>G5en2">s->L2>WOҮGd[oOױY4}=MfY6$?8EߡU16YӨ,u8NLABi;תcH])dM2sqcnjbTȴ)I Npb/*2#WXhj5% - r65yr,*(`\5ʕqKizNM02)3%wcy.͟Yy2OW*oG>.eyނu˚\KXh+:4%ZBÐ CUOd*od(@W^w+OZ*od/˭t-+T(WuzF-$i+`7ZRsu}`cT'"DQ Ъh5|6N(ۀh=t<%YnGTD>WGkq$Lb!zU*KH؈'s_ l##+vO~*}  G CU0'[rdA' RہǁNvA0NƌM26T#Tyod^Q@2>Jn`8tz(mkA-cKLB>9NS]KOV}5(c M/1$v#c U6(DSP"it!F4O<_|1XgZh?wfvJ\ʵ{W7z$[!1Kѓ<^;t}_G0ߕvk$* ~4t, 0|nKbwV6r n>j5_=4Vk,ZwnTmM@=/߲'1苟M}к8sߌ%Ez *׀=H՚0T*'{\v% -:E~W\>/ߝvC>|50pC>}-̛b|r#f+jtnJeg~un* -gnyjpHu~GjoKWu(`*8ǿ0"hH`]J>bdi6+ž;.V*IXè EyT:ړ:'hOLFsܗ[";0T\o yOjzQ\cuH{F'<Çr 2 -(s]#,Fs'ABHw|l3|*|uJŋǃ X_kT% tPڸrP GJ<Ոv,5.(=L+2g^վDqn9P7eky=vWNi%mvU=hon?o:tz<.pOh-Ll0BMG>I࠿Lw6@[-x] AYWȾ. -=]]!׮нl{&JXo/-mB fRDC%xl(`Wq^jQ@|4|_H>"0) t6hvvw`(g㽳,w\Xʷg_ -8uGoѸ{Ε9{sQ8ΝAeI;Ab9sDN@uqq_ _62= -P'έ(-ʓmC[@!pk<}"#o4>tw}sr4-q Şoƹ"~BwiS{?vR6Y@;A.@ywW}{J=<738]/"Φp쩟c|Pg<{\OG1cA?i{eδuęn6~",OrFw=9߸\|o{K{3 Du}!-CAFh™J~m]g;G!1>2fln_Q1- r=n\3S*0ZUߞ=曟k/i ppÏP.jO&P7,1Jx?LC i_%yӗȌϴOI?*ޤO.tUu؈v0;5#'"/#^oM=ϋJU{grġPk>]#Q;,QxAH@*P$9b;~8ThT"L>QwI}A*KЁ?>%(TBz1o:ukY!@z`#{0v"ۉ!ebXzjM]p׵8k[H^ _ ] ]KD::)bt6@gt6+iR`~%ߋ8?A#Kj1V$9dK[3ig.)GU#Sy8e&:8)L_f6H/sy_.|?u>dHc_qfe),#@Φ~гKAL/z Կ)&bUo7K^^K^^dw/&|+A>l)%p[In.-q2Z^ :_9ߗ,kX5d b՝R%jb1V7 W)^Qu=Z<~_ˁ,ܷ\̦;_:,sOncǜ/w>m6&qv'{c΃K\J)zwfλ('?!͠U\˒':ewĞLt uwuf=Mi&MICsGC\ʔ9cdedkuuuuu5jXcQj,6mdj3xt,:M;L=8֎7R9QH%9ޱImVsw\RVn)C˷1*)EJXc$ݰ2VmņG^ݕMeEgELQw<&]x>ѱ gz-ˌ[V$xyy$e5|M,guQ<eJ"Z)^Q?%>ޯ4">O+*j|0%`x7޵^UcH56H*PIvKn(* boNU?nVa0 mIW>9CVQU)\Zʯʽ[-n\l-Uo~u:|q2I+oU<J)pPe~IiK:WwU䕵>Д[xQ_7utƚdc -/!.d_BT_rXaqirri+ z(+稛DŽbhc+,˕R-EXR[|8 nB\ "}\9D5y$64F+^mBoc73)+cr:Onq4x&lܞ;`Xv|Q|m|S-R1OOE#5S}6,64ˇA=.1)4;*qeP$F~?6!) UrDHɏɓ=%M'ZNZOg~ 7#H^>t.U-$ '5$dtwC}RI @5] @IqeFI/(bDeOjG}kmGZe6~rN%R[$3g8>˜~>wC22-O\76Hsh?k2vxn#\" MٗbC- c._/;W<4"42<6tppM["lb' .aapӝrknw\8:n0MTyRel0(QQ11Tr{|](k;hãR(;z6o  šu;BA"q GcCs.\s~az… |gTL pT*eJ],tޠVf4fB.aoTQ?dc#][1cƺ-VD>J~%{DyDBoJWyIWS4#*oּ *6u(\^gft.<|wyxGzЃ=AzЃo=AzЃ=Az - -#$K|:T*Vz%F -E9@ނ@J+-4s-2y@^4@ނ3ax%=I/P :%TA -(e*?ji52(˴aG ˖R;-3h6$+S)FR4J 75VBA՚ꁵiUg ЫN-xhe -2[K+Væڠl(K@s0jU}#-BK^5ZW/ 6d}]jWFɲjczڵuk+jjWu++Gy QJkW6JN1e5HKA>^ҘUtYC1zꪜIyESJjVUϨzVų|_b(Y[QUb -vhziM}C*f9cQ2(ZdQʨ^Y_}2D"VRŅ(L|F8_߳ 5cFHeiJh^`4ը$~&#kPoӐwWO-)e¡V8L\"H\P8iXdQx6udvӒ>yh 9  -endstream -endobj -966 0 obj -<< -/Length 7560 -/Filter /FlateDecode -/Length1 21604 ->> -stream -h[y|TE>U& i6M@Y%-" JBH$ԇ "A&DA灻(n6srWշCQg7_NU:ܦ!FD'N*HKx; -ǀeK_^Bĺήk}9Ιx`?OeEiMI -S&Qd侕 |I_._]VJi]rʂkjFD KT}Atd"њE5O}Lt1LbZvi۬ʟh6vh<ܦrQ['qdbjn< f^bi\m?DDG65?O`@dsA:@O(0&zzPMvZC6MGvl4ڎNa;~b͏iVR)P&MjZ.7 z[]ECrZH5o{^ڧ巴6+W̜c~ܴ>4<WЇ,-SQL| -V t%Ufφܭ0';ڸIOHyyzR -G;4]ٜ!ԏ#=Ϋ-]jיP7DE>/dzByFcfQgohciljEYyNAATNs1ޛP[,;uW 3f$,=Y-5;|&ܮޯl/Ev7, cSدX%[ְ߰;agB^O),<jJQQsqSjL7o)ڂ]pܬl=vYZy>f_xx<|_owx^*=>J2DjxF #;jzT51FmSۭ=E Njg~wٷym&a\4 -ޗ♇ވ{"0vq?.d l3W{ *;#yy³$IՇPV*#t GL*W&rD*Y]cG+贚~o_D -hM2J}NoGP5EP##>m> TumfWjNɈ?br+wCzzbޱq|ۅ}(&) -DP=ZEU/tx-+W-4-X<󮬉z?z7e֍n`W*mka?R&|Vp=HW+ZX}!MDveJ]]eXd*E\(&*"h.4bGV4G̰/4tt9(sjIЭnX9o˵16L5^7_v"O<a(իRecIh^~)ipԠo>¨ҜOpFkרԞ.*flÇ rA$wEI}=}ܺw=t92"b.,n=rIRQ7WP{9)5?z Rk)oEKTt (ȫ>@` r&~QE(`*g&@aOE5IkiET,ۨ=K-wNpZ;״e6v&F~t[@!o?Z|'z6^S+cU;W -ô@NRZ,-2gD L5Ϫw6Klяr7nkJT["@|r*D@XNI 䕘|uF|0 ~s1ljpؾ@EL2}PM15'??F7cOQ-~V AkZQkK!TVL@mXG,ok+Xbh`ߵt/͡lU3}\lZP(8G}N3!Uz q,4Z},LZk0{iƘ̝ٚJӖ/fއ~_ry/t:Gt)mՊhvۊbh'劄/(';WX_k7ŞC2+џkcb5?ưJ=G kQvQ؇}W)VE[aD7Cw@ݛPeۄo^wqG6ASо1mW&ZqjJy{AAHyuAH3H[qR?^滔pĭ8C+i:ҕASB꟰V(ڕ.VpKWp4Yː7tuʯLU{P:sr-(ޣTk> dM4ur } <6s -_gOSԋrFFoA<6:e+Z1n 8I)8ㇰeuX >2nC `5~tx/Ytm6/ZCCmGpK˶y͕.3 'VP7\}ok'kXOP s!4Pa} h7[Q]Plǟ -J9QL03;n :'1@N54y?!VH!ryAKT*t8@7D~ǂ0O۬{eOZeV}?Gݗ_AOP'ggB^<Sbƀ]h( #罇T;Kt@445B!;v48xgz>Ϗ(泹5",-,ov;;+v&)/h/i -ZoEMQS]ys @0^_δz{3-3f?Ӈ0xgŅ_|39ʡs> Kϻ\@P}?Wnr{IHn^>Gq-h~.ĻȹȇeVݹ\l;_ z8 -wtǃfIrog!S=,m-_(ǭ!L )  D \wHǩ+sWt] <9 -rTCaTfL@!4`0 -(T+iUz4n ,ɞyӥXg\)=|A:qJ $itb_аݕ)OagmJ WlƫD雔S¨\A5FvI &?E8?'9]ҷfN@y9f[Q`'-ERS)7e* 7:H^õ?7O2iJ==_n+ۣ'e䯐p4 -*t`2P6p'?p 0!E8 d_jD3~1)˕ٝR a/g$}?-Ag{(32NP'h5.3 ?q!M2ILV>hT(%cIO;&e#t$ $Mx'D$ݲHnXN$I׭'K$|8$M N$I -! -{k*gFoU]c6{w3c̟;3JW12'0o2lϼMmX?2-'1"e~ q`Ir%ٓ)eӣ#FX = -RH4[>{g#ҫ3'QILÓ6bD=JDQH3A`6X4 -iVtraX$!'>˙LvSnM`Q٤fo>w'..|I2;[ qEom+65&=ʌaEUDNI,tJy%8nƄ(՘:R{]&8!~U=F1hvupǒ d.M% s=xHDFrAOJj!y\I]P_N,uue$\"u A?  Jo}>~=ݞbw]^x{7Gp9Cup9d{n6H2*y< (on|] ) ͓Ō<+2%f149ϰOUqc53ju>b^zGݗdfD2|L$%V|ۆel+(6v1{?Ǿ`ssSF/r^TiG:vϥ7ŽtG]"î ԉ]bNNe®onNC߾ҦNҦP"lMw?61Z$$w4aq MX4z$2&ْ$m"Ol"O&~*ٞ'q% -ĸyIe៥ e>rI%*-0|̓73DHON-,ni);mںK&@eEe"{hkhkhkwldO.npP/{Faגx/f ޑq!I>#“eD"+535SdaMwVVx֭,']t%Pm -$Bbơ΢R(R%OD..H]9xƫŦ -KD{TdZ$ aR5[x"20?jr:y4EFJ拦ɜcoHpaQQHNY6. -G0/4 gp[wxr|$b_,T,7<:9O:ORQ22 dW..!(#-&37l@:Ёt@9Xt@:Ёt@:ԙ"i,S)H W3ϴx$4WZN$a+c*%(]-> <#bMi-TŦp<)ҥ6%P'K壾Z`-AZE/CWI9r.*12:h.ZVu¦Ϊ=i,Slo"Ih{M)E -*_*K^[S1B_/'V/JϮ^TSnnBf~=Fi2zb/DAÇLE>@Ϝ?_ϟ;VϯX> ->> endobj -923 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [431.846 612.565 443.802 623.509] -/Subtype /Link -/A << /S /GoTo /D (figure.15) >> ->> endobj -920 0 obj << -/D [918 0 R /XYZ 125.858 740.998 null] ->> endobj -921 0 obj << -/D [918 0 R /XYZ 125.858 697.377 null] ->> endobj -701 0 obj << -/D [918 0 R /XYZ 242.197 584.849 null] ->> endobj -702 0 obj << -/D [918 0 R /XYZ 217.156 463.921 null] ->> endobj -924 0 obj << -/D [918 0 R /XYZ 125.858 185.056 null] ->> endobj -917 0 obj << -/Font << /F42 510 0 R /F32 500 0 R /F43 512 0 R /F56 730 0 R /F34 502 0 R >> -/XObject << /Im5 915 0 R /Im6 916 0 R >> -/ProcSet [ /PDF /Text ] ->> endobj -969 0 obj << -/Length 3608 -/Filter /FlateDecode ->> -stream -xڍZKsWj%>+g3nT;{)b EjIjʯhK,@7}?q/dQze}q 1ӝ([!}xc(3?~7Om"劉~}BxcFxn~hQؠ$ǁ0(^,Wk/df5{0 ?h~84]OǼ87P)`#a#5iޟ5lhoqQ H" b85#ͯ |҇|#[ Dn' P~bƜ:fdgT4uSɾͻ=N_$=W5d#/v8eZ -!03t I2Hnt9]Ey8wEvzPv<6[X2!'HS'*4 lۧ)=]٭c'=T^[?ꚶr*f`Qpx]Bcdՙ75֝-:v6+o9Jڞ4,2~5䛷}A6Lo3+սО+S?64 Z˓'&04v#R@jJ8aWLI${Wz_H @-Gfvl:~--P~<\13J˜[bjJzw085Ń5&DX ێ__'&M (Lh[$ $spJ9?O@&,:BBz4.' -݊[gcd*s umľ5/Fk,w796 !}&V( l7 -4gϿ9q\qV->(a(r&㸑'kYX-m[ -e0 -h؊J~–,&gǃVx-xMS|`O;&寘 -11S^k-GwyF\x{A01GL`/ItͨH|.kHwhG6(=\gr? &,Ȱ2i=tQVe_2LqR1I `(l OMy9f8NBB;682&gog2#o\e.\Y/&0{Xn3VI`AiU3%)Bei1z<~׶+2ŏ؎^[&8_ݹ9@)JGҰDyrBzP7*x6lMTs][.ztёGp26y*xp]YcFv[4jm.نqE1!ʚ_Q=3;S<#QWb|[ZF܅: -.c^SڭSKYyO5^\zɈ$2⹎tV锩 7&3 [lwb~~{;rB_Y/i&P6b5uqMN=' -&َJ 2M@ejU*e1r -t>=#wf_V)NRc&1ob*az5?_hř xljgTҩ9X~ȘhA t^S&4LHe^s^k? Po4QwuճŖ3B2^n. - Ԗ642qELdkzbWO0څZ4a=.2_C?ܑq1/Giy{uo.pJAe"e,y/З$ G,Hf#ênpL_Tx޷-JĻPuqJ\"~%Y:!nZhrU IO)߮g-<̖!$zuUp>NМeNoܭ~lIv>r2 _ߪy^"gk]OQC*SAiDtB5` &,9덳68wáVy+\vFxfq߉8s[DZձ|3"D^S++͚F~! ,x'T7mǗUA(]L+Ik)Pd*0EXpWպpjYFo~]"n!C/QQCjJCmn 1{w:$4_%HֿS-O -0AЉY`LjmK $+WAobe(endstream -endobj -968 0 obj << -/Type /Page -/Contents 969 0 R -/Resources 967 0 R -/MediaBox [0 0 595.276 841.89] -/Parent 898 0 R -/Annots [ 971 0 R 972 0 R 973 0 R 975 0 R ] ->> endobj -971 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [243.137 607.334 255.082 618.278] -/Subtype /Link -/A << /S /GoTo /D (part.3) >> ->> endobj -972 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [289.901 464.495 296.875 475.439] -/Subtype /Link -/A << /S /GoTo /D (section.6) >> ->> endobj -973 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [331.028 332.988 337.005 345.509] -/Subtype /Link -/A << /S /GoTo /D (Hfootnote.4) >> ->> endobj -975 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [199.136 239.962 211.091 250.906] -/Subtype /Link -/A << /S /GoTo /D (figure.16) >> ->> endobj -970 0 obj << -/D [968 0 R /XYZ 125.858 740.998 null] ->> endobj -54 0 obj << -/D [968 0 R /XYZ 125.858 593.76 null] ->> endobj -974 0 obj << -/D [968 0 R /XYZ 125.858 288.909 null] ->> endobj -976 0 obj << -/D [968 0 R /XYZ 140.204 143.907 null] ->> endobj -967 0 obj << -/Font << /F42 510 0 R /F32 500 0 R /F43 512 0 R /F34 502 0 R /F56 730 0 R >> -/ProcSet [ /PDF /Text ] ->> endobj -979 0 obj << -/Length 3334 -/Filter /FlateDecode ->> -stream -xZ_sFУ4S1%m:.=}%E"U,4)Ҍ}C&s . Vb?DINQ&"^ЏIցf#zyy⍖4JZ\^&TxyZxwB,/_>ݻ+|oToRTt -btR!N4mtVza 4S4 93=(Vvi); D~Sܜ꜖*_Vk%]VEyCEyR`d>_xyxTR$=_ߌ95Pxs9Rɐ>b( { -2SMF. hp_PJQE9au,JBBbX@ H|5$b$PҋѶ:ڂ~>=x3'Dv}jD*bp{zɆ=ULÜLM?uF&t8]tHfy 5-ChW}OQC|N3A Tq`6Hf9AѯǼ cX - -ep -N8{TߧkeMqqF!:<-i -8.{}.]QR6R $u']zᄸ{($aoDrlAaj_m>bj͎_"uG9?oc[Te`ʱs`y or+Zʂ P/EEڇU["(EAmf~ny0+l>!Ǭ.23 Q9|KUNϢ,"η {'9sJ0Gpސ0$a'Ԛ6NwE{cCinoX-/!) 0e[jtwC_KPOރxf!oo:tvfi?mu~&6<㉒Bs8K=z Ż7v U@cGإH/I]II2XT>(f VY)P oyyҒO,Lx_riZXGѩ|՘p7e: *FJz- -&I7ceQ 9;j\qS;yC[kTBUND:~ . z!POT a"i4Y䙸#L"6}'@E ^ G)$c W\йHGoS;CD<|y =I -9T [ڨ22s#>7)l8g: ^^z^Cu.z2rο|DޯjBb߉ 'Q'L]4NO EAoǰ&QEoaC0˯A8Ʉy'T&L؎jT'3Ib7`H" yHE~Vs&_J@rV)fBHUʡ#r#L٤|@ > / id"cpEQ;V{ppppNc7lԇ{A[o[+n}=E=ұ?SpS)6Lh?RHTLЄi@@ @Sco$ڌl& iޤm'=,EBO•YHlgw6# /k_H-Ɉ <32v=)%A)FR y<u? Aic¶cއ,[}%vB -)endstream -endobj -978 0 obj << -/Type /Page -/Contents 979 0 R -/Resources 977 0 R -/MediaBox [0 0 595.276 841.89] -/Parent 898 0 R -/Annots [ 981 0 R 983 0 R 985 0 R ] ->> endobj -981 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [370.811 528.012 377.785 538.956] -/Subtype /Link -/A << /S /GoTo /D (figure.6) >> ->> endobj -983 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [301.469 399.12 313.425 410.064] -/Subtype /Link -/A << /S /GoTo /D (figure.17) >> ->> endobj -985 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [357.584 131.963 369.539 142.931] -/Subtype /Link -/A << /S /GoTo /D (figure.18) >> ->> endobj -980 0 obj << -/D [978 0 R /XYZ 125.858 740.998 null] ->> endobj -703 0 obj << -/D [978 0 R /XYZ 252.359 711.29 null] ->> endobj -982 0 obj << -/D [978 0 R /XYZ 125.858 485.775 null] ->> endobj -704 0 obj << -/D [978 0 R /XYZ 253.246 383.36 null] ->> endobj -984 0 obj << -/D [978 0 R /XYZ 125.858 156.999 null] ->> endobj -977 0 obj << -/Font << /F42 510 0 R /F32 500 0 R /F34 502 0 R /F56 730 0 R /F53 751 0 R /F43 512 0 R >> -/ProcSet [ /PDF /Text ] ->> endobj -988 0 obj << -/Length 3148 -/Filter /FlateDecode ->> -stream -xZKsFW̑Sidg_xMR'k@qz$g ɱ ×(%Arl4d+ -؊qERI*?\-$@}}}+Mt,V׻ OXo4rF|͚1]_]}Eֿ\1BDjPqםj2DzQ{!DxFs"$Q\8K OjkM @J+nOq[eW`4zoldQSL)X.+oZ$ aJzLՕ1ٍTO3M)G_/~@%zcJ֫Å`8RbpJ?ɮɍR vЗEjZi`Mv=tש^RvhŎX<&ckTZc|_Ao? -)͢1#J~8s982 VaרOA@e+=L¦H|v|hxh(\ׯ3Oy&K 9žG`V>?_4c[Te3+Nф -25ɋ 3=&R&2½UN8иNjMn|c9Y}2u]l}g|SaEY'UM\OQhL=<1Q)f@(v6qgKDeQK9mu*[ߒ;Ϥd%^Tl5M{KG[$*°= -/hk?jka|XuѶXyCJ@&ˆ4cwef7pP=S(4njf(QC~5$2J™W Oz޻T(p)[oפ|t 8s9/EYY]5bk0OqGMoa.XeǬn,l -MNsʶx`wDf9vq1k[SlJ hSkѾ4yw%J]^+uOͧ%HAX*ty`c^swEQkǽ}ݛ +Ok")SMudvGP,U`G|noie~lS8޴~q^mKr` _*d5m0 z@~o4w՚ 9o[kũ U>gz:)VA:ObOL0uVY -fBn#DK9BB<7nݞrT͂.!4V>7BӠ"2EmD|K۬.qܯ7 dW!j[cnf JJ<+#<8EYݻ`P< g8JA=lw6|vqfR`ȟnqAj/X"b@/1`TۀyGkLv56T]buɫJ\q,.iYr6RΪ!pC Pi_OEm\Iw 2S^%XRfXob;4~]VG !]cFphcqendstream -endobj -987 0 obj << -/Type /Page -/Contents 988 0 R -/Resources 986 0 R -/MediaBox [0 0 595.276 841.89] -/Parent 898 0 R -/Annots [ 990 0 R 992 0 R ] ->> endobj -990 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [164.562 364.087 171.536 375.031] -/Subtype /Link -/A << /S /GoTo /D (figure.4) >> ->> endobj -992 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [153.365 187.375 165.32 198.318] -/Subtype /Link -/A << /S /GoTo /D (figure.19) >> ->> endobj -989 0 obj << -/D [987 0 R /XYZ 125.858 740.998 null] ->> endobj -705 0 obj << -/D [987 0 R /XYZ 262.596 711.29 null] ->> endobj -58 0 obj << -/D [987 0 R /XYZ 125.858 421.621 null] ->> endobj -991 0 obj << -/D [987 0 R /XYZ 125.858 285.985 null] ->> endobj -986 0 obj << -/Font << /F42 510 0 R /F32 500 0 R /F56 730 0 R /F53 751 0 R /F34 502 0 R /F43 512 0 R >> -/ProcSet [ /PDF /Text ] ->> endobj -995 0 obj << -/Length 3475 -/Filter /FlateDecode ->> -stream -xr_Gif%D2}H64ҵ'/IhYK+R{.xWvsǹXHtA$ZĘl]; II"o/^laQ|q};BtmW MtyUdw߬(՛o~rEV\[!- D5 r0`TMdp*4¨Z$¹t 2; '*5_NA66_VT.}S;Pa{r7J3"bg̳+-QϾ7hn?X ->>U›z[?A}8s#4)@մDjMWF.Ǧy|L(4.]C=˥\6aADpvG.е2q[X8MվXwU'MٴCW >cSWBB> NWꁢ4j"D:$.H#]K+y[$xʖU wHTǘfMپ895 -6,zAVPjíޗʁiX)+<^C䁪eJ}Pl1C;c>ލكjǰ^RV֫ bXjUaU:;H~ʑC:u!۾-mQ tW/i%N]jD0a.eV—CcW*68Λ5,|@Qknr{=Z, -\D`Tl`mq 3`Y7WR\{PV,zoW۩]},FBф@YXi,7Kˊd1Oɳ_׍mk/RΤ5]U`8sWw!v -PI6Me8.MYW#:[`>8.^ )ap(lij -TOVw0k=D1j,:O;DP"6 GUP1a.e]"C=j!&*<ӳI=qCxD: ӧ:ayR}$ociq90NPC?U~m~Slϫ#bewU{ؔ3c$#2 6 }ۮ 'V ID ?.&űs 61K;0x=-Pfo hM# - U`#J Q.#ń 1QwJh ہvt7$a+`$4{_;MMR:qak1s~:Z)Yu9<>nˢ ^B[a٦mNї|=]*BK'rQB5[)[>dCW7?}[2 Ed:9N 8&oݒM?U@xh; "; f ]!_o<"[ـ)\^ z9^U -KT3aۺ/^ kc0MjN{?q3e0ex{0[)Unq˜^T9l\cQgIBa-9\߹Ml,pwy6ׁjO@v-Z]3Ԫ5Ԍ5]Ķ}4^#*4} ՝iYVmrBoLϺŽNWZٝ{T~2jh.5a`~ȅvqsP<~4.lo_X}$› Vzb - -eCWϏOQqtJkӂpv2v}dqKx2|Rdg2'(F`k:(dh] -ӿ\ya˳3nN=g~ dף?h$8$WG(|#nDdePϹ)nNp;HgyM̘hd1&:F@878QBY!wV baM!. -ҳ^v ?bu+`f,*6*k1kN*(P8mPyx*"4$tS 0LQb\'b@P}f,{C$)G63OoGOMR-ϕC 脜!rzyzD3uiزm_ --`Rv)߶最y_qnovpj۵89ئX#X?tXn[OڧgKh -(HJ&thX}NʠYFL̦3zOA%hLf&ӴH9I4D26g=M2<̓@D -4L-"TfL/PTݎFгrQFF0D 0$!ZɮzHg@1}*Q-/(}G0(GzFGT397=e' -ѳG!y;zV+C 'RYyD=Z -9|yZhX_l0J|mGD_v dksVx}fDHbendstream -endobj -994 0 obj << -/Type /Page -/Contents 995 0 R -/Resources 993 0 R -/MediaBox [0 0 595.276 841.89] -/Parent 1001 0 R -/Annots [ 999 0 R 1000 0 R ] ->> endobj -999 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [380.07 365.332 387.044 376.301] -/Subtype /Link -/A << /S /GoTo /D (figure.8) >> ->> endobj -1000 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [372.84 305.556 384.795 316.525] -/Subtype /Link -/A << /S /GoTo /D (figure.20) >> ->> endobj -996 0 obj << -/D [994 0 R /XYZ 125.858 740.998 null] ->> endobj -706 0 obj << -/D [994 0 R /XYZ 253.54 711.29 null] ->> endobj -997 0 obj << -/D [994 0 R /XYZ 125.858 531.215 null] ->> endobj -998 0 obj << -/D [994 0 R /XYZ 125.858 402.324 null] ->> endobj -707 0 obj << -/D [994 0 R /XYZ 274.635 277.816 null] ->> endobj -993 0 obj << -/Font << /F42 510 0 R /F32 500 0 R /F56 730 0 R /F53 751 0 R /F34 502 0 R /F43 512 0 R /F47 642 0 R >> -/ProcSet [ /PDF /Text ] ->> endobj -1004 0 obj << -/Length 2987 -/Filter /FlateDecode ->> -stream -xڕZKܶW[ |%ge;Su8١!')i} >\ɑD4~| ᯼Q,8Ku(<+/o»g)?簘ut|x^J<=h?^߫SHub (o&t8ɿ*^I&BFΖEۚC1ji*VLR%4ba˱Uvx,qj{XP;?ʹg?lnFl?H4u kPOmZc} -ңLꁨ52N3 0$ -x:g`p!)=ݴ%[[W@L>|&gwR\H~B:DWyFGS *C$sjD|6.pE0i)Ώ]{cm=Cjf՛uTI$;_F;4@x9:c `~StlG 25b^MYnD,vÇ gcZӷǸ;‰8:p4KVLJ5xI*tO h{HAlR<LьBxum'B/} -.cG:an'*d>ā'x&GDžkGWiݟ2(AױzsꊢHD6Lk&xt-t~|0R-<glRL2s 2G!$eP=KiSu! >i)L2@h _Sء(~ODLv$bUfbDHev@Hw@ow~i: cic7缽#"0KLE+N&>{l3 >h8iu .E"J JiBZKz1Hq깻X.Gy% nN,[dzHuү[0%j%f.ZzgAQ8SA+O+VOhGKG5y?8$OZ( RKy.(`!,KnՆX;hKc^ePo ;e3o1ay)-1ߏ="﨔2+4 %Y:qf@Sb82)}ŋ; Q"7s+ -f)&At;?oRS|]P|e"ߦsk" QG=\)Hl0[nq - z-`)Ae{K=a$;D=:)c6yYRw-:/ Hysa|Q?̀UͶ݋H Wd2^*h2 %&6EOSvQCMy b!tF4_@?⩌XYA(ThzSXB#pDY 糧 -X W0yfޔbroԙCі?$"JݴT *i<{_cS~wJ -F ghyS{@ˮԯm~6ЀC+رw_y{WgRuj%Ghw8눏:`j,-v >Y֍4t]q]3=BFD6:s1 krrDt^ 8\wVAVC+1%3qͪx@ҷSQWmjBm;ձnEhNjb-ݫ1“?Iבq1w-Zl:P=wM+=ⲇ|踼'BhiUG}AXx'_ѡ 0#Mw8Z/+)T+E(^@Bum: h@[R.2-Rs~CcT _ -aB'*H `\Bk^; dN TN p-v - ND>AOogIY: bN`|=KQ(L?W0@#*BAZP%O ", :_#S -W橈&彊@X4&ӻ [$F/޺a"#|ŰU0g6l1Ѓ -m1[9N7'ym0}=?/ TI6GoFdpKXC1Eyv7F*}^~Kd -5!^K?j (D~_ 5endstream -endobj -1003 0 obj << -/Type /Page -/Contents 1004 0 R -/Resources 1002 0 R -/MediaBox [0 0 595.276 841.89] -/Parent 1001 0 R ->> endobj -1005 0 obj << -/D [1003 0 R /XYZ 125.858 740.998 null] ->> endobj -62 0 obj << -/D [1003 0 R /XYZ 125.858 569.85 null] ->> endobj -1006 0 obj << -/D [1003 0 R /XYZ 125.858 492.147 null] ->> endobj -1007 0 obj << -/D [1003 0 R /XYZ 125.858 339.345 null] ->> endobj -1008 0 obj << -/D [1003 0 R /XYZ 125.858 222.408 null] ->> endobj -1002 0 obj << -/Font << /F42 510 0 R /F32 500 0 R /F34 502 0 R /F43 512 0 R /F56 730 0 R >> -/ProcSet [ /PDF /Text ] ->> endobj -1011 0 obj << -/Length 3016 -/Filter /FlateDecode ->> -stream -xڍYY~ׯG.x~Pi %{fsH֛_pf(EX`]]]]]]w;?,s<+O~z+VH?'#$4.^&Eeѓ"Bˣo5\P">Л4ODGy%$| -4k0̺|ͣBu ye m#V&|mY&oֲ=g>1Tg$A9R:mi(q 'y Օay, 5^#bAPhO7zu5yf/xE`]2t8}S2|4M$#P%S<)>|ya7T;6&Ewmvl -H`-: )ZB=#e}V1*qxvk 0u󮯎TO9_!bg] ,H`d1}fH| |Vxm9.ؙۚmVf 웢Cӕ={ Q{Nz eMHY(Wg}'LLϚGJOX ӕS`œߚpsw~fus/K#Vɋ$6{By@xe垛xֹ+e ^7PΙlݨr<sdPT - 2R,"x`슱I}WלLl΋`pE= UJύ.=9ZpPJbV\è2!auEvQR4kb:_B+I-O"!mb?0^"~K{Hnq%u /j^wsj{yW\ˠ_l& tD??{hR[QV*}ѿ(x13pU+L C7dy6ݍ {ajZU%#8CtΦ_JB>i%@9=ߵcXvi|؇?l5F:(:V,uiG*zq͘ cVL32gvHKKy84S꫼ k28ϤoTK/C(q^^4}Vɗiʖ$͖Ti֣$,֚ڄ12=Rыͼz߮ USocYVJxG^bk C[F oZȖIMCۉآeiȪdgc/Irv`ɶS r%'@ JT;T>mDX~h43MdTF8a3ʄ$` PDB*ľ꫉Q!X:[w=7oU4o$e JtB=Iqg㾘8͠sA-1`c0u][ I:}0@\lȚFh- 4h6KS%t%ZNLw'ơ fQ(;q9Xɥ+$%Qg4j;ʹ)LB>[ ff͍vNy~BܠQf+P}mjh*ӓ*#,/?Nw'دQ7\M8̒MRRTsiKٹ+I hNNHG3iZ6m;,g&W(H"oDͶDmH=dZ5pDu\ӌ]Teb}yۿ&kM͇wiD5T'KG}u9m@Qtnl?aendstream -endobj -1010 0 obj << -/Type /Page -/Contents 1011 0 R -/Resources 1009 0 R -/MediaBox [0 0 595.276 841.89] -/Parent 1001 0 R ->> endobj -1012 0 obj << -/D [1010 0 R /XYZ 125.858 740.998 null] ->> endobj -66 0 obj << -/D [1010 0 R /XYZ 125.858 677.447 null] ->> endobj -70 0 obj << -/D [1010 0 R /XYZ 125.858 546.562 null] ->> endobj -74 0 obj << -/D [1010 0 R /XYZ 125.858 324.047 null] ->> endobj -1009 0 obj << -/Font << /F42 510 0 R /F32 500 0 R /F34 502 0 R /F43 512 0 R /F56 730 0 R /F47 642 0 R >> -/ProcSet [ /PDF /Text ] ->> endobj -1015 0 obj << -/Length 3697 -/Filter /FlateDecode ->> -stream -x]۶~ AIݙԱ;8iڻKӱHt߻(~ wNt[6ȩcܳ6Pso\:usqGidȀn~E \g-(V⤧+ Q6mVGStR1 Hvy >sj:;Tm^^2-7n|8O#+4!;!dWthܗȾmSjs+$:e{Z9i[TSh0TL1PUR șlZ?5R)A(V;T,,؜np$0Q9NTԁpAwpU{C>zՙ`5#ͩh)U-vH>x#.Y[Q -V#?}@GmlNMcWeU:= -C :~,S ř42;CҘP`?Mq}Nkxfv06̨{u7,IbWVUJ ,6<ƬiaQůrL|FD~m*GG l3R%,l2%d1R ƃ |`9AZ a/2(δfY9&A3 3 8 -}sř#1JHؽﯮ~*NXE08`".,k9X9I2޹ `)^sHxsS<=41͛+x<_g:,E$'<"ÄQ<bB H>I0'#";*|F&R0AcDHOj -$7 s2"b +@Th'bm`)C䜥>?]?A #Ӡ/ Aߗd!ŨhFUv_4>ՈQQm06CT#;U  ە: UvgW=yY >ͮFG1zSnCJҜZD`6Ӄ&E bQҀA]&әprS=jO!9c:S~-{(JL%s!lIA"lLgM@nC6)@M¢'9 ZzS g;wJ {ScHRl~D4Was0e $x _CyD.r^$A=L=kY٘z 1 *)`頤&LO˜CI7SI1^]A)P^4c&LCKg@JS%ua#$8[z HHJq`֏ e3:qD\3Q\(3i |.e}\j-YPFbq:]T -s,YCLg2\Z>s} 9IC=L}0}6I~>}hDib[C`QP&HWԖv>Y+ݥn#ua'~rtFyF$oY'6$!q}ϰt a=P:Kk;BtqayAx|^{-_T9҂kϓp:EψCƘ?A_1,Ju$9K#"vPD'2wV@vHU W)PH5[ၰlCPE%|, i-IK[VbuSȹ~Q8o[Œ;Qѳ{e௳6Ozr`{a\H%̛Y٢D%=F&zRQɤ( yҕP۽!64Dem/kaW|&$%éig[u#T {XG -S#Hޜ+0A[bk+4!*EcǼmВ7YtP2 -] TXcq]LU|9!T%]ůrgo 4qW)\qtSqʠ9.$%0},"`A4j@L'\gv:YiRO{mPCͦ+/LuWcO@b sVe`j/!{8=st?Dh .fоtaLr+e2>;Y[f3^Օ^o -ѥ`ZQu]Toq6?4S7A8Wx)_3\i%0ۙk9 z8TLFnBa x8ip&lA{SF( k&#=Lr%uK2Y\]{0"Ǭ{\bi.ǟ̳H[l}3 Zq_T{j} _.븦x\PcdրGtzz @}|\ۋ$t7Y6==>@c4b ;kֶқ(IOiTΩ^Xn_ꆻoϢZ%en0?؆}y}f6ì-Mn2Rhq{jlY)]0y)h%^tGG]K/prv~Q[$sonCseن B|ߥ#Scח-詃]`*f|ﻄJ`']ݶJR2˘% ,v'>wG+֐ K餿z.?^J%ʚ{}~tStw zȒT𚇇|X+IH> endobj -1017 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [157.729 564.396 179.647 575.339] -/Subtype /Link -/A << /S /GoTo /D (subsubsection.4.4.2) >> ->> endobj -1018 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [366.223 564.396 378.178 575.339] -/Subtype /Link -/A << /S /GoTo /D (figure.21) >> ->> endobj -1019 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [318.673 295.893 324.651 308.414] -/Subtype /Link -/A << /S /GoTo /D (Hfootnote.5) >> ->> endobj -1016 0 obj << -/D [1014 0 R /XYZ 125.858 740.998 null] ->> endobj -78 0 obj << -/D [1014 0 R /XYZ 125.858 716.092 null] ->> endobj -82 0 obj << -/D [1014 0 R /XYZ 125.858 692.898 null] ->> endobj -708 0 obj << -/D [1014 0 R /XYZ 247.293 538.311 null] ->> endobj -86 0 obj << -/D [1014 0 R /XYZ 125.858 211.426 null] ->> endobj -1020 0 obj << -/D [1014 0 R /XYZ 140.204 139.255 null] ->> endobj -1013 0 obj << -/Font << /F42 510 0 R /F32 500 0 R /F43 512 0 R /F34 502 0 R /F56 730 0 R /F53 751 0 R >> -/ProcSet [ /PDF /Text ] ->> endobj -1023 0 obj << -/Length 3081 -/Filter /FlateDecode ->> -stream -xڝ˒6>_RUC|6NlǩݍKEaF"Rx~9VjDh~c&?Q: $dqEhCCzpXoHqAKow*m*۝Nao1&6twoMi&i};ždQ*]rG{۝MPrCVEAVDzp,Fk koBA&[OWԖU?ڞvxu-n"8 -$]w=^WV|}s;P#ClYWe CG@<ʑ~crdCu[ ģ;n4Jo&\C@t̰߯E1ctUJa4/tQ'-zLxF`i']|~ÙF)0Xn̠yr;|8.;3or^M१-Bnb5r70mdK˂.|)Z`qa wܜNԗ{/3 @o;5ቤ$h+ wЄ:VTd[pcN@ {C] -|:}D?Nt45M$8QQ.^$UFk$( |6kԟmUס?ߐ]]Yh`W^~?]ĨVPvuMo.e$ )d23p){"lقmEN˷E7"lc'IM<m0ҙ8r.=Va7HYxۏҰbaDŽ+.,tpX2Q)BߢЁP)S]:V˃>!Bzoom#9^zИ4{:)Biq+0.H+sg' B&H]tњ/PQ0gUpeXX膱a,50eXg4CTeJ}?Yن%z{C*Uw=;qXXroOjj^BTQ)#^ a=r:m={E(#!?_}8 xAn!Ra"fi"Wvo;) ڰ -BCY\@jĕ`kV;.+5ruX\]:k0xiŠB93m; _=NgQ|k &4L43$3{v {i@+;@ÔfRTly+es_o)(۱(WivMH Ŗ:BqYnm@:0~!@"ީnjÞr?jgB[δ_l1"/Lϵ W|%_ٷ x:Ǻ3_p#2RMacmqO0l|{:öxFxnUsd2Gɔ8FlU!(>̜'VM$`smˬlˌ2f|Cy' 4ɤJQ -^^Gqe-$Ӹ/W0`_|C3 "2FQE+ AѢr%1seӴH8G4&< ^fw/STI \=6|;>oP,ç^1TnaJm2Ln\$-Z!ύ>'˞TbeiL9qq54WEhB xW,y |KK6YI|pԮ(X٢3G,q2K5'8I:辠w q3쟸ϪїdER$:*?FϲL[ÕW8C)&5hJ됼JyvfAHP*cbK6. -~jFNi 7~Mv۵"7+&g=Gޝ|TKGRQfUQ )9x|E9`&>}R*%i}ڔR'c0ifF+A![dL3I&ɤP#:VIM򆕤TKB ۔PWӋ.?W\t dENrGڟ~!yݑqu",z -_t9.'7#,Kp4>MVS6;^/`Jut`aBG젢)W7% B5, D-w.> endobj -1025 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [293.816 643.2 315.734 654.144] -/Subtype /Link -/A << /S /GoTo /D (subsubsection.8.3.2) >> ->> endobj -1026 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [462.097 607.334 468.075 619.855] -/Subtype /Link -/A << /S /GoTo /D (Hfootnote.6) >> ->> endobj -1024 0 obj << -/D [1022 0 R /XYZ 125.858 740.998 null] ->> endobj -1027 0 obj << -/D [1022 0 R /XYZ 125.858 503.479 null] ->> endobj -1028 0 obj << -/D [1022 0 R /XYZ 125.858 386.543 null] ->> endobj -1029 0 obj << -/D [1022 0 R /XYZ 125.858 233.741 null] ->> endobj -1030 0 obj << -/D [1022 0 R /XYZ 140.204 155.489 null] ->> endobj -1021 0 obj << -/Font << /F42 510 0 R /F32 500 0 R /F34 502 0 R /F43 512 0 R /F56 730 0 R /F47 642 0 R >> -/ProcSet [ /PDF /Text ] ->> endobj -1033 0 obj << -/Length 3289 -/Filter /FlateDecode ->> -stream -xZK6ϯ誽ҴvS'dfZ+mO~$kI!K1c}¢aRX, "g(0u/օU.߿8"o%,G Gt :V.pFIfVTYNSTe$V,2ށ>9q2-"osب2g %7^[7ae5$E.~-;5_վp3#WƵicZT5v -,c6 - yvH=ǂaUs8캅;m[Jܤ?8 ,UWđ(!9|?}jH(RwiuwNrb۵yyoغf{ \X@36Xo{p]]q&&1">;"^ba#N{>kiP.h8X5&J]6dXN8uăeYZ%f5qGJxFTti@Wc.`s4D-G.w1ڂ$> -ءGhܺw;*/߅O$ރ#[AzC3@J.΍/b\ _V -ҲwO{wס -H1-o. Ma" qmߝ8fmL ,CP6;} HBt 1~Eb/6<`_BSKrs&!ǺH;:Z֖i ifZ_边 -Au - 6wX^]_2((t y.FEcF~b#.O!a3%H !d *5Zt6+\Ў< ӳgt1*/0p~ ׆`8a0pl0\p(ݼMb{ru ]Lz(3p™I.kx,Xf#ÖNijf}<.(|}iGp*{G>G&t~03EY d%WF&Zy  fx}0u$h$MӰG~ -պX>MA~t 0`(I4XytuzxV=@r>}>-<EN |8bFF娗$ҏFXZF}xa+8}/>פ8['5<6z$6B"iYvgmX<|ޡP+؆*,F)AbMޏhRpEG<Zr).)WS}=lKH-oӲG5]+~Rzygz#Nn%-9l]v׿5>˝ -qWuز].$ x!ׁJá(ڮB ]6  Nt <+J ذ/k4uBT5mą |#`ZxUHfԚ|{@_A@oG(Ww@czOU-y d)y  $Ka7X'j?o"tЯX"r!"OCUSb 8-\`96.LLp?jU2*؜dKAFpXɓEb_2kd\R77oew; ~Aۺ2,mЋUJ;NQHշ;rS[BE뺪 KJ܉WP!mVѲ٤P|I)t@=4Vm'wܝ\3(O {3_K '/ľgŇ,}BX,8Kn~r,Fiv.`SZ0ғ}^l۸+Ζ -zv}(n99`jKR2%7RIs`oiendstream -endobj -1032 0 obj << -/Type /Page -/Contents 1033 0 R -/Resources 1031 0 R -/MediaBox [0 0 595.276 841.89] -/Parent 1001 0 R -/Annots [ 1035 0 R ] ->> endobj -1035 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [153.58 488.406 165.535 499.349] -/Subtype /Link -/A << /S /GoTo /D (figure.22) >> ->> endobj -1034 0 obj << -/D [1032 0 R /XYZ 125.858 740.998 null] ->> endobj -90 0 obj << -/D [1032 0 R /XYZ 125.858 629.626 null] ->> endobj -709 0 obj << -/D [1032 0 R /XYZ 214.576 472.645 null] ->> endobj -94 0 obj << -/D [1032 0 R /XYZ 125.858 180.152 null] ->> endobj -1031 0 obj << -/Font << /F42 510 0 R /F32 500 0 R /F34 502 0 R /F56 730 0 R /F43 512 0 R /F47 642 0 R >> -/ProcSet [ /PDF /Text ] ->> endobj -1038 0 obj << -/Length 3424 -/Filter /FlateDecode ->> -stream -xZݏ߿b*gF$E}E%i/&in"H򠕵PYr%9-EY!C!9Z߇q*u}*x_l=vB燻O>}?<-= Vat?6ںo>t5. 6: s;agUIja*3E=Bn&w+m2WP% >?b+ Tܙw dNyCt_6eW"qFI*F /EbuZ+$ZaVsk|Uqf^KIbS]nLX ' B{^Ac*wMBx&=W9!o~c](8%FEUWC>Wpi3|f<*sW)w¶b"ʇX6bsNwVz}n8545vf3q%+K?>՟xś A%jB;wUË8?D:tyYufa3)eN0踣iw2,-N =uta$!palI4IeL8:]Eꃯšw(nـe}őw&ZXYڨOuq@i#z"2-b/F]҅_]&SnjFөh[>l+T=?%j+=84zF^/.5*o{~~ EVπ*"?h 8]f-ʸsxꆍDPsGF'wǗע`OmZdHl!3M$X,+6~6 .ǺŒ!Xva04j۾BQY - r,6||iJ<l[qlUQ1 &*d֞Ҍ瞔>a>tX{'cx*:)ًJ+C8I&F|`hC?ZZ-U6B*.VVźldC3QǏ'6+NEc4TLJ@`le- J&!6UYڛ){ ΎDc9m_|<{k/)7_F"K6c 04d8}y̛5M0@}y"%h{}jS{=hq DY(H]Z%4@daLlf>rt9ӹSlbT;B΃40q +cߌU:}{5,} ѺYD$QB¦ʗ~܀9H4!YFX/Iy10m.97S-y3܄ `/rI!, @Otz\LGЁTKS.;&qߣZ+vw.H4SZ#W|Hk^g$Dc-%9#x@d*\{cT精WɰQ1좲cMÖpV!NWx⺲*%0PBtk*aýZВjҴN TGe&$d!H,K!}P&CHܶ%F{uulv 8"]|Gz~#DyaG1xĕl]BJ :<r ,  -}h2"9a%Y %Mucj>>MS&S~Q)P(vbv@ܟr߁Fnގ[ˡm\LKnZ -4DX2("+,xjw@H{2IjuS]Z79nPw 6!(}GA.T!ZTʢλv0]Q2䢉YCK1z +З_eN D*nL< l{<0xΌGΠ)5(57sf~"*`d|PM 165J.}辸 !P+8 w*,}Ad''n 8ɯl~ bA sY!)4j#D `7`q%.D0>Pl[ߥ3w3d, -/퉦rBt^ti^No}ן!xB  !EGڂt D*N"Zl ^Nz!9Uf?S, B&78B -lqX+%Ȍ7˿F1&^UNAqʫ]q\r(n,w<C| HUu[D.&H@i5{5VYmǿj wjw/Hw2-ˍ>HtWR " NB8 7 sb+W -ǫQupo(iA]Gm@wE}ݣj4KY-nھyE΅ۇpbP)dT끯E[gr[Ok蒏@5cX4&:xr~& >s.C)B8ȏBȤ9-9?U|H;Դgo1jlDLH^Va|'x6O.?4&endstream -endobj -1037 0 obj << -/Type /Page -/Contents 1038 0 R -/Resources 1036 0 R -/MediaBox [0 0 595.276 841.89] -/Parent 1042 0 R -/Annots [ 1040 0 R 1041 0 R ] ->> endobj -1040 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [234.565 406.712 249.011 417.656] -/Subtype /Link -/A << /S /GoTo /D (subsection.4.1) >> ->> endobj -1041 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [244.855 301.731 256.81 312.674] -/Subtype /Link -/A << /S /GoTo /D (figure.23) >> ->> endobj -1039 0 obj << -/D [1037 0 R /XYZ 125.858 740.998 null] ->> endobj -98 0 obj << -/D [1037 0 R /XYZ 125.858 557.994 null] ->> endobj -102 0 obj << -/D [1037 0 R /XYZ 125.858 345.317 null] ->> endobj -710 0 obj << -/D [1037 0 R /XYZ 240.001 285.97 null] ->> endobj -1036 0 obj << -/Font << /F42 510 0 R /F32 500 0 R /F34 502 0 R /F43 512 0 R /F47 642 0 R /F56 730 0 R /F53 751 0 R >> -/ProcSet [ /PDF /Text ] ->> endobj -1045 0 obj << -/Length 3250 -/Filter /FlateDecode ->> -stream -xZm6PD,_;iE屢+pij-VcK$7ko3%K,rF93PV BHQHB),]7r(Yy@gBDfx˕R_,CkL~_,W:Roo3ƈ$Td4J|yƙQn3gҙ0(ʖJnGmϪXd2bz=ц~^('K:,;idPxjzܣOUקa^ =j;5YìM6wveK7cZyPUG=v8Z8/;;.oxu]ʙ(ǎF/PЀ28T^>ٻIpmܠո!QP;1יo^}{;wI̳0&72 yƱd -k{F \_}.ןfc:{8o`/Q"NҮS ¡p)n@դK%1-R[6©~Ͻdp׮iw B>Qpp -vG%T[iá#Sg. BpֱJ*2hqt` C("ve{r-N BȔbrՖB#`Gwf27axjS -ɱsEՌSXXtOWWv rfc{uШVV~щGLl2r R-fxku%A`ȎΙqܣ%v"";"S|ה^<ok8}Vb>\Q.@هuSLlIu2y|SzU/C9wn;$U„j8Cē0]L0a9L|u6a$'Xzlζ^qAcosXWo@H ]rD22V5ظ0jUaw9A 6+fuA}߼{}<N@vN8ߞV&Yd(cRj TTrd,C3ҹ&6=0hƚ音vl!Vrl>\MZ35cJP@u -mP-5RaFN^8AGP%h9=~l=(Ttz.t,X? Nol.&vݘfLMԯz,$t%E*bE&'3(Db@eH'Hg\TP#"Z6ZI[j'Vt5"n7r`r\X<+FK6Ws-\|-%0#$cy6kjhui O {X!gl=ŏ=+@^Qp8KO/f:"I?@Yv5R(B7) onW~;CeQy7+ * 9O>4ΒA $Ӎ%4 +B<{ѕf`z_6*r`|/0WBߛe>h,z{a5,eqji՞H7x0/~đK&1wɹn\ JB?3.r40u݋/,DpQf>e Oendstream -endobj -1044 0 obj << -/Type /Page -/Contents 1045 0 R -/Resources 1043 0 R -/MediaBox [0 0 595.276 841.89] -/Parent 1042 0 R -/Annots [ 1047 0 R ] ->> endobj -1047 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [411.623 315.888 417.6 328.311] -/Subtype /Link -/A << /S /GoTo /D (Hfootnote.7) >> ->> endobj -1046 0 obj << -/D [1044 0 R /XYZ 125.858 740.998 null] ->> endobj -106 0 obj << -/D [1044 0 R /XYZ 125.858 665.655 null] ->> endobj -1048 0 obj << -/D [1044 0 R /XYZ 140.204 139.255 null] ->> endobj -1043 0 obj << -/Font << /F42 510 0 R /F32 500 0 R /F34 502 0 R /F43 512 0 R /F56 730 0 R /F53 751 0 R >> -/ProcSet [ /PDF /Text ] ->> endobj -1052 0 obj << -/Length 3204 -/Filter /FlateDecode ->> -stream -xڭْܶ]_oTi(7[GJDvY*Y#Z}rv#')UiFhU7S7JG~7IY,/}]o2?iC//Uwova}L}7vR߿_3 r? 3` /NLqGq,g˷QϢhxJg̸ ˶9~ݞ/rmjp`oR?fYQw(-" ;!B)\Wݥ;xlԡJ"o|R㞯;82Vpzq|`ߩkyR" Gn}`.jB? @G`Ku`ϗApvzЖ3c=o4^5|"ﭜrr9=\VW}1Ě6;V-E ][=BVZh7/5ҞmfA?ΫqnLV͑6_y>!)x0\]=2 zėV!hD`(GXT_CUWDĭhp{:00C-g0j9eeӑw/Z5횼Idژ|ЄoיT)"/o_T=e-YS -&%2pUROXdǁ-ʦ*5c9JyC^={eɒVsu?30b|=mox]-*Cn"Y5a0Y.N.Hj~|nJLF_ -}%0E{4ݧh¾ -}89[R 7 RsLΈ!_f~bbъ)#t:S\3H!`9m9WW.Hl(1I+Hdɼ=`y 0P+N -re^< - -X685.=:o ׆Ƈ(?Y*y]dp]ԑJ4{!;>퉐GZ-L?`:t$b7> G=wc @r[L"Ov>(A@,},M>brE~ʈ'·`!w``O 0<]jUxw8/o+H2S&I缓 [q<}6Fǚ'PjeaIjr}^O` f& *)Rػߣz9Y9HE xdfFWn\cɹ̈́Lcg9@u@ C@ %/y H˱*ia"h/ -EI'~MpJܡXpF~P?Ecw< dVl [nx$-OxdB8_h6<$1솓FRM"dhxĎUv,VvZ?b(Hgjq p+蜹+_5G H֏p9 0H]V0MdXH =tweT8%+ h6/3Bux\̼rCm?=!`ru2KIvKI(Ğ*|=9m{[D><8z|$~Cx]b=C8ik~(֐9%)cBwD?ⲑE:Ss#wal*\k\0 -@ -\S)xWbjGtr4-Qee9oP$WlıbXO -CVXXˎz'_nkBϟ,;  !TFǶ%8Ƴs᣼/Ofak_"xvSxlJG h;r<9 pƝe_&1Q)'Vi}ڸwqPJR+jLz%R ۸I[`LC\&٬;Q0E6Uq* -&ol(OLgϫhPQp"/I} *Io'h+!LmǢt_S_gC_F5`4hl_ 38t-::HҧOJÅ7ppCv@*-eE}_Ik/ZRJB#gLr Lb_.(-燐%d5J1i*t٨ {ҁkCj%QoBP`ɼqŇ\\~=\΃Z'3]2(@տ1b7 endstream -endobj -1051 0 obj << -/Type /Page -/Contents 1052 0 R -/Resources 1050 0 R -/MediaBox [0 0 595.276 841.89] -/Parent 1042 0 R -/Annots [ 1062 0 R 1063 0 R ] ->> endobj -1062 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [348.828 222.941 360.783 234.896] -/Subtype /Link -/A << /S /GoTo /D (figure.24) >> ->> endobj -1063 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [153.365 199.365 165.32 210.308] -/Subtype /Link -/A << /S /GoTo /D (figure.10) >> ->> endobj -1053 0 obj << -/D [1051 0 R /XYZ 125.858 740.998 null] ->> endobj -110 0 obj << -/D [1051 0 R /XYZ 125.858 716.092 null] ->> endobj -1054 0 obj << -/D [1051 0 R /XYZ 125.858 580.44 null] ->> endobj -1061 0 obj << -/D [1051 0 R /XYZ 125.858 272.221 null] ->> endobj -1050 0 obj << -/Font << /F42 510 0 R /F32 500 0 R /F43 512 0 R /F34 502 0 R /F8 1057 0 R /F14 1060 0 R /F11 792 0 R >> -/ProcSet [ /PDF /Text ] ->> endobj -1066 0 obj << -/Length 2676 -/Filter /FlateDecode ->> -stream -xڅYKܶﯘ#JC9+)V>9pbDZo~}>j 4F?>40j)y8 -"/wCSr<_~6( -2ID^?~x{,c,.@db{0)E CACaxT*U0K{RdEhL<~g<45oUFEՍeUSr cuuϝƝu<}yt~26{__ [racDq[dkH&1oVSĴœ8_BHK{g~4sjjSoZ!mK -%^hZ\sXRdO?AϲҌbc^;~QPmpfi%~)YJ߰]ʘ\ԛ[^5I& -$ijoϱ _ [mO$)b; ܵAVĮޫ$W:" t SX(E-k ΉN^uyr>af1z*>BC) ̪1H.q]G MU%f"~{ zU'`u#pP=0a-t 7 ^@>]|G.: vvv#"5jTčTA`2psJp% -~#\ W$Oް4 Kyjm܋Anؤerږ"/xrq]cEd;6#{[bSb RN4VTXA"JLN/ o^guN #t r7}>7XPc;gLev `-`ifmo]84uҜX) ];H[_'T-oWKƿNEJfΰƷEX騀}._n @r|H]X߼|ih&P߸|ݨ)8wlPu.WCy'+a0 VUdL͵{ISY+K02 5l# -@㭥i霟R_kyI|?Jm"|FsiquBa<ζԾ:i

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%0DfY0w+8tMaZGP);PZ2p>ddpm(gA(ObB}M9J@dH- z%+@q{Kb1}-nZjD&qWyQd`hUPO$k+d47E5CPesBlUnYMHb7EJPZ!t4###3g)zi63nO z*S`cl94Qu$kKL^-&R@mbxXF6|r}9T&>gCVn_vGt8M$`Q;Bo1M*e2)qrY96NZW-IOM@8|bs^TlM> z{!BV0S;?L0_ALH&WiwcTupHnBQ&{|LKXg6XPUz3s_Ou#mXOlF

%)Po^C_CWTtCB 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 Z{qI+f0$)y=ofz~Us@Y%v`<0`>{{=^)4;ugg diff --git a/Grammars/Oberon10Independent (by Juliet)/GPLex_GPPG/QUT.ShiftReduceParser.dll b/Grammars/Oberon10Independent (by Juliet)/GPLex_GPPG/QUT.ShiftReduceParser.dll deleted file mode 100644 index bb22154eafec4e1aa67d6412f3fec70c37666f29..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 14848 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 - -using System; -using System.IO; -using System.Text; -using System.Globalization; -using System.Collections.Generic; -using System.Runtime.Serialization; -using System.Diagnostics.CodeAnalysis; - -##-->version290 -##-->usingDcl -{ - ///

- /// Summary Canonical example of GPLEX automaton - /// - -#if STANDALONE - // - // These are the dummy declarations for stand-alone GPLEX applications - // normally these declarations would come from the parser. - // If you declare /noparser, or %option noparser then you get this. - // - -##-->translate $public enum $Tokens - { - EOF = 0, maxParseToken = int.MaxValue - // must have at least these two, values are almost arbitrary - } - -##-->translate $public abstract class $ScanBase - { - [SuppressMessage("Microsoft.Naming", "CA1709:IdentifiersShouldBeCasedCorrectly", MessageId = "yylex")] - [SuppressMessage("Microsoft.Naming", "CA1704:IdentifiersShouldBeSpelledCorrectly", MessageId = "yylex")] - public abstract int yylex(); - - [SuppressMessage("Microsoft.Naming", "CA1709:IdentifiersShouldBeCasedCorrectly", MessageId = "yywrap")] - [SuppressMessage("Microsoft.Naming", "CA1704:IdentifiersShouldBeSpelledCorrectly", MessageId = "yywrap")] - protected virtual bool yywrap() { return true; } - -#if BABEL - protected abstract int CurrentSc { get; set; } - // EolState is the 32-bit of state data persisted at - // the end of each line for Visual Studio colorization. - // The default is to return CurrentSc. You must override - // this if you want more complicated behavior. - public virtual int EolState { - get { return CurrentSc; } - set { CurrentSc = value; } - } - } - -##-->translate $public interface IColorScan - { - void SetSource(string source, int offset); - int GetNext(ref int state, out int start, out int end); -#endif // BABEL - } - -#endif // STANDALONE - - // If the compiler can't find the scanner base class maybe you - // need to run GPPG with the /gplex option, or GPLEX with /noparser -#if BABEL -##-->translate $public sealed partial class $Scanner : $ScanBase, IColorScan - { - private ScanBuff buffer; - int currentScOrd; // start condition ordinal - - protected override int CurrentSc - { - // The current start state is a property - // to try to avoid the user error of setting - // scState but forgetting to update the FSA - // start state "currentStart" - // - get { return currentScOrd; } // i.e. return YY_START; - set { currentScOrd = value; // i.e. BEGIN(value); - currentStart = startState[value]; } - } -#else // BABEL -##-->translate $public sealed partial class $Scanner : $ScanBase - { - private ScanBuff buffer; - int currentScOrd; // start condition ordinal -#endif // BABEL - - /// - /// The input buffer for this scanner. - /// - [SuppressMessage("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] - public ScanBuff Buffer { get { return buffer; } } - - private static int GetMaxParseToken() { -##-->translate System.Reflection.FieldInfo f = typeof($Tokens).GetField("maxParseToken"); - return (f == null ? int.MaxValue : (int)f.GetValue(null)); - } - - static int parserMax = GetMaxParseToken(); - - enum Result {accept, noMatch, contextFound}; - -##-->consts - -#region user code -##-->codeIncl -#endregion user code - - int state; - int currentStart = startState[0]; - int code; // last code read - int cCol; // column number of code - int lNum; // current line number - // - // The following instance variables are used, among other - // things, for constructing the yylloc location objects. - // - int tokPos; // buffer position at start of token - int tokCol; // zero-based column number at start of token - int tokLin; // line number at start of token - int tokEPos; // buffer position at end of token - int tokECol; // column number at end of token - int tokELin; // line number at end of token - string tokTxt; // lazily constructed text of token -#if STACK - private Stack scStack = new Stack(); -#endif // STACK - -##-->tableDef - - -#if BACKUP - // ============================================================== - // == Nested struct used for backup in automata that do backup == - // ============================================================== - - struct Context // class used for automaton backup. - { - public int bPos; - public int rPos; // scanner.readPos saved value - public int cCol; - public int lNum; // Need this in case of backup over EOL. - public int state; - public int cChr; - } - - private Context ctx = new Context(); -#endif // BACKUP - - // ============================================================== - // ==== Nested struct to support input switching in scanners ==== - // ============================================================== - - struct BufferContext { - internal ScanBuff buffSv; - internal int chrSv; - internal int cColSv; - internal int lNumSv; - } - - // ============================================================== - // ===== Private methods to save and restore buffer contexts ==== - // ============================================================== - - /// - /// This method creates a buffer context record from - /// the current buffer object, together with some - /// scanner state values. - /// - [SuppressMessage("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] - BufferContext MkBuffCtx() - { - BufferContext rslt; - rslt.buffSv = this.buffer; - rslt.chrSv = this.code; - rslt.cColSv = this.cCol; - rslt.lNumSv = this.lNum; - return rslt; - } - - /// - /// This method restores the buffer value and allied - /// scanner state from the given context record value. - /// - [SuppressMessage("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] - void RestoreBuffCtx(BufferContext value) - { - this.buffer = value.buffSv; - this.code = value.chrSv; - this.cCol = value.cColSv; - this.lNum = value.lNumSv; - } - // =================== End Nested classes ======================= - -#if !NOFILES -##-->translate $public $Scanner(Stream file) { -##-->bufferCtor - } - -#endif // !NOFILES - -##-->translate $public $Scanner() { } - - private int readPos; - - void GetCode() - { - if (code == '\n') // This needs to be fixed for other conventions - // i.e. [\r\n\205\u2028\u2029] - { - cCol = -1; - lNum++; - } - readPos = buffer.Pos; - - // Now read new codepoint. - code = buffer.Read(); - if (code > ScanBuff.EndOfFile) - { -#if (!BYTEMODE) - if (code >= 0xD800 && code <= 0xDBFF) - { - int next = buffer.Read(); - if (next < 0xDC00 || next > 0xDFFF) - code = ScanBuff.UnicodeReplacementChar; - else - code = (0x10000 + (code & 0x3FF << 10) + (next & 0x3FF)); - } -#endif - cCol++; - } - } - - void MarkToken() - { -#if (!PERSIST) - buffer.Mark(); -#endif - tokPos = readPos; - tokLin = lNum; - tokCol = cCol; - } - - void MarkEnd() - { - tokTxt = null; - tokEPos = readPos; - tokELin = lNum; - tokECol = cCol; - } - - [SuppressMessage("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] - int Peek() - { - int rslt, codeSv = code, cColSv = cCol, lNumSv = lNum, bPosSv = buffer.Pos; - GetCode(); rslt = code; - lNum = lNumSv; cCol = cColSv; code = codeSv; buffer.Pos = bPosSv; - return rslt; - } - - // ============================================================== - // ===== Initialization of string-based input buffers ==== - // ============================================================== - - /// - /// Create and initialize a StringBuff buffer object for this scanner - /// - /// the input string - /// starting offset in the string - [SuppressMessage("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] - public void SetSource(string source, int offset) - { - this.buffer = ScanBuff.GetBuffer(source); - this.buffer.Pos = offset; - this.lNum = 0; - this.code = '\n'; // to initialize yyline, yycol and lineStart - GetCode(); - } - -#if !NOFILES - // ================ LineBuffer Initialization =================== - - /// - /// Create and initialize a LineBuff buffer object for this scanner - /// - /// the list of input strings - [SuppressMessage("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] - public void SetSource(IList source) - { - this.buffer = ScanBuff.GetBuffer(source); - this.code = '\n'; // to initialize yyline, yycol and lineStart - this.lNum = 0; - GetCode(); - } - - // =============== StreamBuffer Initialization ================== - - /// - /// Create and initialize a StreamBuff buffer object for this scanner. - /// StreamBuff is buffer for 8-bit byte files. - /// - /// the input byte stream - [SuppressMessage("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] - public void SetSource(Stream source) - { - this.buffer = ScanBuff.GetBuffer(source); - this.lNum = 0; - this.code = '\n'; // to initialize yyline, yycol and lineStart - GetCode(); - } - -#if !BYTEMODE - // ================ TextBuffer Initialization =================== - - /// - /// Create and initialize a TextBuff buffer object for this scanner. - /// TextBuff is a buffer for encoded unicode files. - /// - /// the input text file - /// Code page to use if file has - /// no BOM. For 0, use machine default; for -1, 8-bit binary - [SuppressMessage("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] - public void SetSource(Stream source, int fallbackCodePage) - { - this.buffer = ScanBuff.GetBuffer(source, fallbackCodePage); - this.lNum = 0; - this.code = '\n'; // to initialize yyline, yycol and lineStart - GetCode(); - } -#endif // !BYTEMODE -#endif // !NOFILES - - // ============================================================== - -#if BABEL - // - // Get the next token for Visual Studio - // - // "state" is the inout mode variable that maintains scanner - // state between calls, using the EolState property. In principle, - // if the calls of EolState are costly set could be called once - // only per line, at the start; and get called only at the end - // of the line. This needs more infrastructure ... - // - public int GetNext(ref int state, out int start, out int end) - { -##-->translate $Tokens next; - int s, e; - s = state; // state at start - EolState = state; -##-->translate next = ($Tokens)Scan(); - state = EolState; - e = state; // state at end; - start = tokPos; - end = tokEPos - 1; // end is the index of last char. - return (int)next; - } -#endif // BABEL - - // ======== AbstractScanner<> Implementation ========= - - [SuppressMessage("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] - [SuppressMessage("Microsoft.Naming", "CA1709:IdentifiersShouldBeCasedCorrectly", MessageId = "yylex")] - [SuppressMessage("Microsoft.Naming", "CA1704:IdentifiersShouldBeSpelledCorrectly", MessageId = "yylex")] - public override int yylex() - { - // parserMax is set by reflecting on the Tokens - // enumeration. If maxParseToken is defined - // that is used, otherwise int.MaxValue is used. - int next; - do { next = Scan(); } while (next >= parserMax); - return next; - } - - [SuppressMessage("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] - int yypos { get { return tokPos; } } - - [SuppressMessage("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] - int yyline { get { return tokLin; } } - - [SuppressMessage("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] - int yycol { get { return tokCol; } } - - [SuppressMessage("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] - [SuppressMessage("Microsoft.Naming", "CA1709:IdentifiersShouldBeCasedCorrectly", MessageId = "yytext")] - [SuppressMessage("Microsoft.Naming", "CA1704:IdentifiersShouldBeSpelledCorrectly", MessageId = "yytext")] - public string yytext - { - get - { - if (tokTxt == null) - tokTxt = buffer.GetString(tokPos, tokEPos); - return tokTxt; - } - } - - [SuppressMessage("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] - void yyless(int n) - { - buffer.Pos = tokPos; - // Must read at least one char, so set before start. - cCol = tokCol - 1; - GetCode(); - // Now ensure that line counting is correct. - lNum = tokLin; - // And count the rest of the text. - for (int i = 0; i < n; i++) GetCode(); - MarkEnd(); - } - - // - // It would be nice to count backward in the text - // but it does not seem possible to re-establish - // the correct column counts except by going forward. - // - [SuppressMessage("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] - void _yytrunc(int n) { yyless(yyleng - n); } - - // - // This is painful, but we no longer count - // codepoints. For the overwhelming majority - // of cases the single line code is fast, for - // the others, well, at least it is all in the - // buffer so no files are touched. Note that we - // can't use (tokEPos - tokPos) because of the - // possibility of surrogate pairs in the token. - // - [SuppressMessage("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] - [SuppressMessage("Microsoft.Naming", "CA1709:IdentifiersShouldBeCasedCorrectly", MessageId = "yyleng")] - [SuppressMessage("Microsoft.Naming", "CA1704:IdentifiersShouldBeSpelledCorrectly", MessageId = "yyleng")] - public int yyleng - { - get { -#if BYTEMODE - return tokEPos - tokPos; -#else - if (tokELin == tokLin) - return tokECol - tokCol; - else { - int ch; - int count = 0; - int save = buffer.Pos; - buffer.Pos = tokPos; - do { - ch = buffer.Read(); - if (!char.IsHighSurrogate((char)ch)) count++; - } while (buffer.Pos < tokEPos && ch != ScanBuff.EndOfFile); - buffer.Pos = save; - return count; - } -#endif // BYTEMODE - } - } - - // ============ methods available in actions ============== - - [SuppressMessage("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] - internal int YY_START { - get { return currentScOrd; } - set { currentScOrd = value; - currentStart = startState[value]; - } - } - - [SuppressMessage("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] - internal void BEGIN(int next) { - currentScOrd = next; - currentStart = startState[next]; - } - - // ============== The main tokenizer code ================= - - int Scan() - { -##-->prolog - for (; ; ) - { - int next; // next state to enter -#if BACKUP - Result rslt = Result.noMatch; -#endif // BACKUP -#if LEFTANCHORS - for (;;) - { - // Discard characters that do not start any pattern. - // Must check the left anchor condition after *every* GetCode! - state = ((cCol == 0) ? anchorState[currentScOrd] : currentStart); - if ((next = NextState()) != goStart) - break; // LOOP EXIT HERE... - GetCode(); - } - -#else // !LEFTANCHORS - state = currentStart; - while ((next = NextState()) == goStart) - // At this point, the current character has no - // transition from the current state. We discard - // the "no-match" char. In traditional LEX such - // characters are echoed to the console. - GetCode(); -#endif // LEFTANCHORS - // At last, a valid transition ... - MarkToken(); - state = next; - GetCode(); - - while ((next = NextState()) > eofNum) // Exit for goStart AND for eofNum -#if BACKUP - if (state <= maxAccept && next > maxAccept) // need to prepare backup data - { - // ctx is an object. The fields may be - // mutated by the call to Recurse2. - // On return the data in ctx is the - // *latest* accept state that was found. - - rslt = Recurse2(ref ctx, next); - if (rslt == Result.noMatch) - RestoreStateAndPos(ref ctx); - break; - } - else -#endif // BACKUP - { - state = next; - GetCode(); - } - if (state <= maxAccept) - { - MarkEnd(); -##-->actionCases - } - } -##-->epilog - } - -#if BACKUP - Result Recurse2(ref Context ctx, int next) - { - // Assert: at entry "state" is an accept state AND - // NextState(state, code) != goStart AND - // NextState(state, code) is not an accept state. - // - SaveStateAndPos(ref ctx); - state = next; - GetCode(); - - while ((next = NextState()) > eofNum) - { - if (state <= maxAccept && next > maxAccept) // need to update backup data - SaveStateAndPos(ref ctx); - state = next; - if (state == eofNum) return Result.accept; - GetCode(); - } - return (state <= maxAccept ? Result.accept : Result.noMatch); - } - - void SaveStateAndPos(ref Context ctx) - { - ctx.bPos = buffer.Pos; - ctx.rPos = readPos; - ctx.cCol = cCol; - ctx.lNum = lNum; - ctx.state = state; - ctx.cChr = code; - } - - void RestoreStateAndPos(ref Context ctx) - { - buffer.Pos = ctx.bPos; - readPos = ctx.rPos; - cCol = ctx.cCol; - lNum = ctx.lNum; - state = ctx.state; - code = ctx.cChr; - } - -#endif // BACKUP - - // ============= End of the tokenizer code ================ - -#if STACK - [SuppressMessage("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] - internal void yy_clear_stack() { scStack.Clear(); } - - [SuppressMessage("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] - internal int yy_top_state() { return scStack.Peek(); } - - internal void yy_push_state(int state) - { - scStack.Push(currentScOrd); - BEGIN(state); - } - - internal void yy_pop_state() - { - // Protect against input errors that pop too far ... - if (scStack.Count > 0) { - int newSc = scStack.Pop(); - BEGIN(newSc); - } // Otherwise leave stack unchanged. - } - #endif // STACK - - [SuppressMessage("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] - internal void ECHO() { Console.Out.Write(yytext); } - -##-->userCode - } // end class $Scanner - -##-->embeddedBuffers - -} // end namespace diff --git a/Grammars/Oberon10Independent (by Juliet)/GPLex_GPPG/guesser.frame b/Grammars/Oberon10Independent (by Juliet)/GPLex_GPPG/guesser.frame deleted file mode 100644 index 8d0574d4d..000000000 --- a/Grammars/Oberon10Independent (by Juliet)/GPLex_GPPG/guesser.frame +++ /dev/null @@ -1,77 +0,0 @@ -## -## DO NOT EDIT THIS FILE CARELESSLY! -## THE CONTENTS OF THIS FILE ARE STRONGLY LINKED TO THE -## CODE OF Dfsa.cs, AND ALL MUST VARY TOGETHER -## -## This frame file produces an include file for gplex -## C# output. It does not produce a stand-alone scanner -## and uses not defined symbols, or "using" declarations. -## This only works for automata with no backup states! -## -// -// Guesser.frame version 1.1.0 of 30-January-2009 -// - -##-->version255 -##-->usingDcl -{ - public enum Tokens { EndToken = 0, MaxParseToken = int.MaxValue } - - public class Scanner - { - ScanBuff buffer; - - enum Result {accept, noMatch, contextFound}; - - bool yywrap() { return true; } - - public int GuessCodePage() { return Scan(); } - -##-->consts - -#region user code -##-->codeIncl -#endregion user code - - int state; - int currentStart = startState[0]; - int code; - -##-->tableDef - - public Scanner(System.IO.Stream file) { SetSource(file); } - - public void SetSource(System.IO.Stream source) - { - this.buffer = new BuildBuffer(source); - code = buffer.Read(); - } - - int Scan() - { -##-->prolog - for (; ; ) - { - int next; - state = currentStart; - while ((next = NextState()) == goStart) - code = buffer.Read(); - - state = next; - code = buffer.Read(); - - while ((next = NextState()) > eofNum) - { - state = next; - code = buffer.Read(); - } - if (state <= maxAccept) - { -##-->actionCases - } - } -##-->epilog - } -##-->userCode - } // end class Scanner -} // end namespace diff --git a/Grammars/Oberon10Independent (by Juliet)/Install/PascalABC.NET/Highlighting/Oberon00.xshd b/Grammars/Oberon10Independent (by Juliet)/Install/PascalABC.NET/Highlighting/Oberon00.xshd deleted file mode 100644 index 8ab7dde91..000000000 --- a/Grammars/Oberon10Independent (by Juliet)/Install/PascalABC.NET/Highlighting/Oberon00.xshd +++ /dev/null @@ -1,112 +0,0 @@ - - - - - - - - - - - - - - &<>~!%^*()-+=|\#/{}[]:;"' , .? - - - //@!/@ - - - - (* - *) - - - - /* - */ - - - - ' - ' - - - " - " - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - <>~!@%^*()-+=|\#/{}[]:;"' , .? - - - - - - - - - - - - diff --git a/Grammars/Oberon10Independent (by Juliet)/Install/PascalABC.NET/Lib/Oberon00System.pcu b/Grammars/Oberon10Independent (by Juliet)/Install/PascalABC.NET/Lib/Oberon00System.pcu deleted file mode 100644 index 727fe2213afab1caa1ce6e51e0f474a7f071473e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2191 zcma)--A)rh6vua=P`-^-Lx@Vaz>lOz$~S~Gq|^oo4aI_*m>APG8(nF4$##3eTj(3; zwTX}619;(u7aG0r!VBXAXz=`IX9_KC;xx1WbI$+F{AbV1Z1=MdpIFUiCkkaJ@V!*( z;G`Zpwb|oReMH#4{lN9Yw>_3+TXAJqz27a~M(=s>cK|a>a&H z8#vf56b~izO1bfTVQ)*kcgl+ubD8{y$jokMirfBMeH_nW_Cox$0JS zos&cV$nnzUm6g&`WodbCZDG+#t**&*7G-IXSDuPUVIoSZ5E(IJ^ckby7;$3^U~J1{ z&=^C;7#3qorhd)Lx}o1YrnhO+_p46HgX$g8u^lg5m{*ZulXVh0?J3KPDl)25?)&oQ zQIZ*zeNhTpat=Z{49{Cah4M?M5~`3{Qr7qCvM6G9-{Zgy9crWAc2K!_*XtBwz*y@k zq>R)Hydr(Fm44>dj;l`1@xoFl+d6Hk4qlaR8U;?;Y=vs4Z7pfDIjZ_?%xTg_-bzTn zNbyS6^^O#Z)^taTO}6fJq}Xa@saalSnNL>fG``q|u2AfO`Iy}e@#Q0RqVvusaKx%OuO9+O5YO4jiH4e~(x%v!Vw|#3v zkjwc|ogvHm1VUbD)Q8fVI-QEHOc&+0Pxo0*_oeG}H}rHM1@&clGF|kc;JM!8&#Cvs z`7ZNFV7?jnp#^?+6}TzGSTBgc*GPbBowZ+Ghfhip!$F20X+bf&w!1Jacl?3Qp)QN> zC3IU1rUN-$>Gu10OM+yBNZrvs$eImrdHQVG8KKbwIgJ);5e5-W*wKHi&`%}K#~d0Qm40C@DG8ztvX%wygA6ph k@g;Qb-7C1dtq8ILu;XiU&yWIAY77{8%h| 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%0AujTPr9{rDzl7rU?EmR~i2O6UyP` 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 ECv`iQJpcdz diff --git a/Grammars/Oberon10Independent (by Juliet)/Oberon00ParserTools.cs b/Grammars/Oberon10Independent (by Juliet)/Oberon00ParserTools.cs deleted file mode 100644 index 3f7ef8589..000000000 --- a/Grammars/Oberon10Independent (by Juliet)/Oberon00ParserTools.cs +++ /dev/null @@ -1,134 +0,0 @@ -using System.Collections.Generic; -using PascalABCCompiler.SyntaxTree; -using PascalABCCompiler.Errors; -using QUT.Gppg; -using GPPGParserScanner; - -namespace PascalABCCompiler.Oberon00Parser -{ - // Класс глобальных описаний и статических методов - // для использования различными подсистемами парсера и сканера - public static class PT // PT - parser tools - { - public static List Errors; - /// Последний прочтенный идентификатор - public static string LastIdentificator = ""; - //public static int max_errors; - public static string CurrentFileName; - /// Словарь стандартных типов с соответствующими внутренними именами - public static Dictionary standartTypes = new Dictionary(); - - /// Статический конструктор - static PT() { - standartTypes.Add("BOOLEAN", "boolean"); - standartTypes.Add("INTEGER", "integer"); - standartTypes.Add("SHORTINT", "byte"); - standartTypes.Add("LONGINT", "int64"); - standartTypes.Add("REAL", "real"); - standartTypes.Add("LONGREAL", "double"); - standartTypes.Add("CHAR", "char"); - standartTypes.Add("STRING", "string"); - } - - public static SourceContext ToSourceContext(LexLocation loc) - { - if (loc != null) - return new SourceContext(loc.StartLine, loc.StartColumn + 1, loc.EndLine, loc.EndColumn); - return null; - } - - public static string CreateErrorString(params object[] args) - { - string[] ww = new string[args.Length - 1]; - for (int i = 1; i < args.Length; i++) - ww[i - 1] = GetStrByTokenName((string)args[i]); - string w = string.Join(" или ", ww); - System.Collections.Generic.List l = new List(); - - string got = (string)args[0]; - if (got.Equals("ID")) - got = "'" + LastIdentificator + "'"; - else - got = GetStrByTokenName(got); - return string.Format("Синтаксическая ошибка: встречено {0}, а ожидалось {1}", got, w); - } - - public static void AddError(string message, LexLocation loc) - { - Errors.Add(new SyntaxError(message, CurrentFileName, ToSourceContext(loc), null)); - } - - /// Определяет содержимое строки по ее представлению в тексте программы - /// Строка с кавычками - /// Содержимое строки без кавычек - public static string GetStringContent(string sourceStr) { - bool hasStrType = (sourceStr.IndexOf('\'') != -1) || - (sourceStr.IndexOf('"') != -1); - if (hasStrType) - return sourceStr.Substring(1, sourceStr.Length - 2); - else { // символ представлен 16ным кодом - string hexCode = sourceStr.Remove(sourceStr.Length - 1); - int tryParseHex; - if (int.TryParse(hexCode, System.Globalization.NumberStyles.AllowHexSpecifier, null, out tryParseHex)) - return ((char)tryParseHex).ToString(); - else - throw new System.ArgumentException("Некорректный шестнадцатеричный код символа"); - } - } - - /// Преобразует вещественный литерал, принятый в Обероне, к виду .NET - /// Исходная строка вещественного числа - /// Корректную строку - вещественное число - public static string GetCorrectDoubleStr(string sourceDoubleStr) { - string correct = sourceDoubleStr.Replace(".", - System.Globalization.NumberFormatInfo.CurrentInfo.NumberDecimalSeparator); - correct = correct.Replace('D', 'E'); - return correct; - } - - /// Определяет внутреннее имя типа по типу в программе - /// Имя типа в программе - /// Корректное внутреннее имя типа - public static string InternalTypeName(string typeName) { - if (standartTypes.ContainsKey(typeName)) - return standartTypes[typeName]; - else - return typeName; - } - - - // ----------------------------------------------------------------------------- - // Вспомогательные методы - // ----------------------------------------------------------------------------- - /// Возвращает по имени токена представляющую его строку - private static string GetStrByTokenName(string tokenName) { - switch (tokenName) { - case "ASSIGN": return "':='"; - case "SEMICOLUMN": return "';'"; - case "COLON": return "':'"; - case "COMMA": return "'.'"; - case "COLUMN": return "','"; - case "LPAREN": return "'('"; - case "RPAREN": return "')'"; - case "PLUS": return "'+'"; - case "MINUS": return "'-'"; - case "MULT": return "'*'"; - case "DIVIDE": return "'/'"; - case "LT": return "'<'"; - case "GT": return "'>'"; - case "LE": return "'<='"; - case "GE": return "'>='"; - case "EQ": return "'='"; - case "NE": return "'#'"; - case "NOT": return "'~'"; - case "AND": return "'&'"; - case "EXCLAMATION": return "'!'"; - case "ID": return "идентификатор"; - case "EOF": return "конец программы"; - case "INTNUM": return "целое число"; - case "ASTERISK": return "'*'"; - default: return tokenName; - } - } - } -} \ No newline at end of file diff --git a/Grammars/Oberon10Independent (by Juliet)/ObrProba.csproj b/Grammars/Oberon10Independent (by Juliet)/ObrProba.csproj deleted file mode 100644 index 319218b26..000000000 --- a/Grammars/Oberon10Independent (by Juliet)/ObrProba.csproj +++ /dev/null @@ -1,91 +0,0 @@ - - - - Debug - AnyCPU - 9.0.30729 - 2.0 - {D215937C-36EA-4E60-B3EB-A2527DE39D19} - Library - Properties - Oberon00Parser - Oberon00Parser - v4.0 - 512 - - - - - - - 3.5 - - - - true - full - false - bin\Debug\ - DEBUG;TRACE - prompt - 4 - AllRules.ruleset - - - pdbonly - true - bin\Release\ - TRACE - prompt - 4 - AllRules.ruleset - - - - - 3.5 - - - 3.5 - - - 3.5 - - - - - - - - - - - - - - - {44a01f9e-dce7-470c-aae5-c3de0ccbee3b} - Errors - - - {2de2842f-0912-4251-bc0f-480854c44a13} - Localization - - - {af2efd7b-69dd-4b43-af65-b59b29349c23} - ParserTools - - - {c2cac65a-b2ae-4ccc-b067-e6b8e75df73a} - SyntaxTree - - - - - \ No newline at end of file diff --git a/Grammars/Oberon10Independent (by Juliet)/ObrProba.sln b/Grammars/Oberon10Independent (by Juliet)/ObrProba.sln deleted file mode 100644 index 032f303bd..000000000 --- a/Grammars/Oberon10Independent (by Juliet)/ObrProba.sln +++ /dev/null @@ -1,44 +0,0 @@ - -Microsoft Visual Studio Solution File, Format Version 11.00 -# Visual Studio 2010 -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ObrProba", "ObrProba.csproj", "{D215937C-36EA-4E60-B3EB-A2527DE39D19}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Errors", "..\..\Errors\Errors.csproj", "{44A01F9E-DCE7-470C-AAE5-C3DE0CCBEE3B}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ParserTools", "..\..\ParserTools\ParserTools.csproj", "{AF2EFD7B-69DD-4B43-AF65-B59B29349C23}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Localization", "..\..\Localization\Localization.csproj", "{2DE2842F-0912-4251-BC0F-480854C44A13}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SyntaxTree", "..\..\SyntaxTree\SyntaxTree.csproj", "{C2CAC65A-B2AE-4CCC-B067-E6B8E75DF73A}" -EndProject -Global - GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug|Any CPU = Debug|Any CPU - Release|Any CPU = Release|Any CPU - EndGlobalSection - GlobalSection(ProjectConfigurationPlatforms) = postSolution - {D215937C-36EA-4E60-B3EB-A2527DE39D19}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {D215937C-36EA-4E60-B3EB-A2527DE39D19}.Debug|Any CPU.Build.0 = Debug|Any CPU - {D215937C-36EA-4E60-B3EB-A2527DE39D19}.Release|Any CPU.ActiveCfg = Release|Any CPU - {D215937C-36EA-4E60-B3EB-A2527DE39D19}.Release|Any CPU.Build.0 = Release|Any CPU - {44A01F9E-DCE7-470C-AAE5-C3DE0CCBEE3B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {44A01F9E-DCE7-470C-AAE5-C3DE0CCBEE3B}.Debug|Any CPU.Build.0 = Debug|Any CPU - {44A01F9E-DCE7-470C-AAE5-C3DE0CCBEE3B}.Release|Any CPU.ActiveCfg = Release|Any CPU - {44A01F9E-DCE7-470C-AAE5-C3DE0CCBEE3B}.Release|Any CPU.Build.0 = Release|Any CPU - {AF2EFD7B-69DD-4B43-AF65-B59B29349C23}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {AF2EFD7B-69DD-4B43-AF65-B59B29349C23}.Debug|Any CPU.Build.0 = Debug|Any CPU - {AF2EFD7B-69DD-4B43-AF65-B59B29349C23}.Release|Any CPU.ActiveCfg = Release|Any CPU - {AF2EFD7B-69DD-4B43-AF65-B59B29349C23}.Release|Any CPU.Build.0 = Release|Any CPU - {2DE2842F-0912-4251-BC0F-480854C44A13}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {2DE2842F-0912-4251-BC0F-480854C44A13}.Debug|Any CPU.Build.0 = Debug|Any CPU - {2DE2842F-0912-4251-BC0F-480854C44A13}.Release|Any CPU.ActiveCfg = Release|Any CPU - {2DE2842F-0912-4251-BC0F-480854C44A13}.Release|Any CPU.Build.0 = Release|Any CPU - {C2CAC65A-B2AE-4CCC-B067-E6B8E75DF73A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {C2CAC65A-B2AE-4CCC-B067-E6B8E75DF73A}.Debug|Any CPU.Build.0 = Debug|Any CPU - {C2CAC65A-B2AE-4CCC-B067-E6B8E75DF73A}.Release|Any CPU.ActiveCfg = Release|Any CPU - {C2CAC65A-B2AE-4CCC-B067-E6B8E75DF73A}.Release|Any CPU.Build.0 = Release|Any CPU - EndGlobalSection - GlobalSection(SolutionProperties) = preSolution - HideSolutionNode = FALSE - EndGlobalSection -EndGlobal diff --git a/Grammars/Oberon10Independent (by Juliet)/ObrProba.suo b/Grammars/Oberon10Independent (by Juliet)/ObrProba.suo deleted file mode 100644 index 67fd81589be57c61cf361e41fc1ae7a3a712df00..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 61440 zcmeHQ3!Gb3na`9drBHd7H*^X`UY(G6Pg@F19@7?P+M$`YfPps2WTt5|$&h49Ym194 zDvA$wbrl2^S!7*Q6a^L5RRkB`;_B+UsQ5yB<6Bu*WdHwj?#X@3&CSi7%w$q}^80dc z?mao*d41pczVCeJoUcA{)c4Bx2Y@c%I|^_# z;26NMfW?600H*+!08Rv)1UMP+62MBpX@C~MQo!kea{*@nmH}Q0=mnewI2^D7a2}u) zupHnAbOFu>1ORP-c0dQ96VMF^0(t=J0qmQraJ>+)8n9M-)`#oGfJs0I5CMb%{eTMq zTL6~;)&VX8TnZQf3<9En4S*rQWq^%ee;UB(?o3lvbh1E}c&%D)NUDdb5#XT3UwWx!85P<7xGSG{Y(4e5(v zGw=hjnBC*nT=?OxG8pOZI`2k@SJWQBH59zeP#jgl9TrWuED3eqAEApMgM@Yxz% zN$>2Y7UnaxGMTLremdlzVkx=RR@OOag0gnv+e6Tmxw&qh$oO}Ai4{rM$9#s{76JigkUqI7MEAaoX z1B5X$#lVfo4U+iIfU1J%6@E}d1idDPo;svG+ltoSjOQ`m8gPm@c=9;D^Y~{B<3d8v zZw~yd4Ly{6Z3Isy0P>Dpwgr7VfwpNW(c!cTfj^U;ISz!ha*(TzX}N2`sFp^FQX+?g zg0t{_0T9O11V+Ize8~5}qz;+S4a;{py|Ik%Sq4GbZ%t&6rV8tIq9#Y7|PSjWq zIc04*@!+$8e*w}Vy)qL_vr=GPy;X~3#n17Fe0KtP)5t;A5j%O+yrveUr7A#6*70&M z-jcU6Sn;!^*iWLsJ&C%gGzI{_klEHEEw|-oePuWZBaDjPxEWXrz{h^y0^CL1kBIWO zfP?zck7MZZA$%v1ry{Nek+&F9xE@e#ud5a-`(y@GHVXVYZuPsKd5}4)Pd%`wBvCJH zs}$-*1~x25{vp3w{*0rLeC)C=}9qDWBjC2QDgB_7zYhQa;drvshu_D~I;<|ks68WKgE)n-r z{v1U8WkfBJb8#dl|C%W27S#MCyIUo6#J%YC?HHZAz}q^YDTW|bc0g*3V0>>yj0o-n zxC`QG1mCTA-j3Mqh#SU}4*V~S|F3{F$Z(cY_!`j94ix+viR8F2+4X$i219 z+bZOnlAlv)!{}q>`k&H;!l+Z$t6lJWpg$x1bDSdwQ+-_0*(iGb7@ktPQg7_AQzw|$ zLB4ZxJwcAy7QR(qAV|H^M9 zZ~gObHa9}l*E@Rbqknt!w1K>GAPW$zWaxs0rssA7F9sc=~GJjoo#)ey7c+GQ9 zJbE`7J~Y(JT4=Kx5o7&?Xceiw#L=&lXpbyfiSpV~@Fe+cD_U+Bp2zSeU*eG*2Pe>8 z9C`U%ax0E^&Vl`p+>Ls_+y1u%ai49H>25+!h&3)`n2}O`Bws8y>dXJ~+Y9{}`~O-{ z-H5=QMVT|mO~2qsl&GlDRSLl0MEe76B5uoX#J@rCz6^4a6)9 zb*0B?m_eW(C^c7Q+u!K1H?b9E-%G>dp!03YrLwVKXOr?W&=4(gn*WpF0{nj%ntuo!a1ear707c8?Kljs zu^twHsP<$)#OVXoswczfW#gc`7`RX;{?!f}coh7UGG-hUIgA=f;X^4SgU>QhZaaPj z0A2X*5i*IL-GXBoQr?siiiGpI{tjNmVmOeD*I~`;|6;qM-WN{ zl_=0l|33q`mHyo?ID0@yeIc{}B|$kFwBlDA+O-3=dZi1nJtmQ-qAEVxeqIxMAZeeW z^upoBNdML0pV~UWU&8GcKl$~yXq@D=M*X)3b+w`n{g&dIwvj?V zqUBRcBjlR0FU_Ak=O${zdS8S;<^O`v^b%g9#P;oFhhBW4z_XqX)P#W+G4b9el+Z+#lG zqG*W_rO5Ic4PJ_1$H#(@J=XYEL1Ng55sexQ!(o6`;6&78+DdnnSJ{_o2Uh)<_HGO% zrob_hT$MFX*^F~ZGH{%uT9XsnGo>Fji(sAsp%lkC6-t;atCC|>I(8Unowo~Xf&=U3 zQjcWWSti;ASjxQIUB@ zm3fQ7iXdl(Y0;xTvlGvDL6@N3M%{1^dM~Xj<9Nax6N}=Glqr>5$-J*F<=r?tK>D4E zS)Z@A&w-uxXwJ>$$Wx|lUO2+e)p}Gpr!JX=XH>cR9Gk;sP_}kIxP`R3N6|Bi7|-QA z73ZVXymYzp(Z5Bu(QNb=mCtgySuv}*ky?a-~(*ZaA;D^Ho$+Nm!^PHjb10&70&L95h4jD5_Sr+SWl)Srxb z^TVf?qoXyCjW{aO3nB`OG_9=UT2tpAq@IXq4uSq(^zWoEsI-|mMAlxNiR-i4eOSnD zNytau!Xgj$Pow?Ssr+*0!8uKPTn9m;qQ=99KVU5xXG{F*8f_> z{iT*FXTPN9$y5vK`uBeCXJ!lP)T~(jC6%`%XVLPYl{QFW(uPLe-JMTTxiqB?tGpUj zy7x>w-F29QiU}#4b-@viGbfzoR=x+$Z>`z~XK!d1pq-iegUYF$pC~xVp;r5ws^xbs zxikEe?<`t#?~fmQYS9;;r4S=bH0R&=!`7o0UKaes5o-^zx3JM3L0z8ZF?*iMxgy;j zBirW9=Nxqxy%LSR*xk(7O*5j^I_2M9#|AGucJdvpAxQ$)_3-Lyc>6uq+{3Y4uVHCDa7VvZ-g6M_|JTE*&h7kFaIk;)WMEfzhpASF z<(SPU7gT!d>XIEqNKyP^)|E)Lh(_qEHy6UG#N^meK2=C%i}7MQmmP{HcgDw3%Ud?5 z@&)`}-4?*q7e32dLX(-|WInYzo0=@<J#uJ&8_z~G%Ol1q{L^_i$?(q*Xrv*Gorp_A>H>o`T7cJ)UDVFmv ztUWM~iEjIko3#bjITS1BBmgcg=9PvPbB@>R57-60(V;ryRxyde0+R7 zo-f35iBvw9Z3}<^QWGhBWs5CmKU^XGnOiwy?cLQ{hOxG7E{!tBntAz5I(F;CFn}VJX z@9U&S%jSQRkiIh*H)8Ojk~V$J_@KS$(xS^U)dt$tWBA=%R-E2jBo-B|Yj&TGS*>fc*WPM}4oiF4JXUP^KYCm#(b{j&@I ztrVz#a{NCPK&+MG^F8(ITeXNz_`9_@P8Z-WmDVl(9whi-7x<~CR|;P6FGHek%FldO z3atNA5a|qn+w!xg9HI@KYMu*cPDb*@#!B#N`z!{n%{D@d@T*pAWnzAD(PJa7e9(pb1KeiYHZaoGz_q>xMpp`?zta)vXn@8C+sC`w6&-eet zFOB}3@KeUG6zG4x6p_vbxGn!}i2D~U;cPJ$%oU5d@lub-7W;GgaX&P#-Hdba1=-0= zh7%YFmwW7Gz!J)hPoy)cJbGOrmq|%AsywDpb(o^jE3Sx9JqzY`mrwMf>Jn91E}!6F zbqQ{mpdwokgoi58ewI(Zx4Pt+P@8?jxnK{O$+2{{U~H#iK9@m@l^(6jjsk;F#_h56 zIOKPYQX@79H6jqu^oc;gzlUAR)Xy$)NN5PU2=r>5+sOy|?}2!BjQPt==94MmKW<8U zz(v}Z!XzLU7;1^@4=SV{be*~=Moc7JA1_FqwZ6I(4ZIds%gfS%_>M2DwZoU4S9U{Kg*Hn(B~=x{jvuyVA+j z#?&>FsY0<}pRiN6E7yq8`1nL7h1#DShq5hMrhV$0tIM`t6R!m6-2k9oc_ZLefL8-v z1GowBS^)RQxEa8Cvp3-SM!?Lc9N@c6|ibPiyy&;rbcv{&8GC3-}!1^MEe^nEsb={W9PyfF}T71^g%AYk;o< z{tNI8z&8Q^4fqz|e*jMco&$Ub@Ld4Y`W~*|2mC<${UcnT2K*TCjP~rOxc&_AbHFdO zXTQRgbEm)7e*YHN-vNHF{r)4ae**kj`~APTa;zuLzvB8l?*T&OY{H&V=vcAHNE#MN zy;Ja^eLve!T|YB2jt!H=iAk*!m*-4Xc4Q-hei){rd&U#FOkrcH0F$s2!Bk1-SZqF# z$`{kALJVokk;SftnyM9%%#~gmYR!-BFu|}_U0WDMq@j2=)o!0^w7OJ{4G_uabNK=d z-Ib)fX>_AdZY0$YK~ix=`%<8Xy9}TKAvp8O&|vcqSC_RvRnouvU^gpFW5pu%?Y1fF zk#xJ8xAjPsS1igo0P~t1CtZ6n8nv-k=@em!=i; zs>_q-pAj(IEuN{7{l;!?e&+iU*E-Nkg*(4&MIFmo0Pe*?-)zoVsycma!I^(K2=$6# zR0Q0LFx~ZY^vVp~m2dQp)NSO)Eq-jfxh5LB{MC*ucTYTdhq?TJYH0rNw)|6lBVYgR zi}u-#2RdcAyK|bGt7iWQuj8jP|7)vQ2*v-FA*NgYb06YTA7*gIzd}ZG_$L0d@SdIy zZt>rOxbDWEUI)zb74QqZlKZi^{4QY`Z-IjdO36RtKca#Mv7cee^!{^hZ}XTuJ_?a<%YaO?l-FYF*^J4>?@mp z=l@mm|B=>>>bZ-m73FzXX~(7M`hT((S$nEBXT$t7pUAScb9yznxhj`e%^^0#3B)8P zJ&CfJF0%7E4lJbTbR@qR4#Vgp`&ISQbYf4-j>$|qRXnFOpEx0A){2-6F8Gs$ef#$I zb%%O7JNtTD1CdT_DcT?EZtd;u?rRNnceeL-1iCuAdpfWCu*VHZr|UpzD1gj(6?ty* zl{{e67kk}7wT1g;X5F8GLQvtX#BtG~CcyS1w`5^3%1i3D1ESM-Nk+d|#gMK;vd)zybh zV{N9{ranUTSMrEW=CY&dvB|uc36G6sun%n}UMQr-6PZ0}%#l~og5gH&c7kXPUnlsQ zK-4D~o~YaKjCV?9KdZMj+R1A0v1eAFXD|KM&VEww@*8*1q8~L!-l_JJrB6S!)?5?M z)yRG@x65z0Ki$n&KKjb(TM(X|X8k$o-`pd+QlS3bib&@Jq!d``A3ont5M`bw@Hpdl z=l@2$DpbZU*S`Kni|B-(vs;yd7yX~OmH(X+{&siv_p0sBe=y*mEBw>QKkTfsO8cHV z168SooZo+En)Fle`jc~2+%uIn7@lFkC#tqi_}Xm)W`1j}jatp$%_aWpZU;wM6OCT} z>002ZK#&(71ZW0OH#``?C6Zhtun@qxqQd~R8NLK?IN%7tk$|HBM+1%l(8p*ouEzn6 z2b`ciI|k?dBwENR>Jp-^z`>lBSf$PlIfc4BOr*%pCst>v2q2e+pf|P1C z4_s`2SJ$IB<=WuXDm%CxoDr(*hlk-uvC^6?(RF2&2!np-_ z<^E;rOcv7Z(&k`upm}w3Z*yPsD%`a@}};<>!h;C9UYI^_}*luQx3k zWy110<l+S%{L>T3&I|Ke!WqrQk*Xi6Kz}gERh_@jto@c)uyI zSHka3|K%((IRi&)Em_A)Ki<*@p24~N?)-l^OMD@~E&ewlZXUoe+xw-sl~<2L-tO?o zYn@kKd)YaIb7a;%la?Zf_22zPSzW#I1vQ(lcB!@7t)&zCBu^Z%?iSrQ#m=YvCDmS+ z3Di-&cZ=1>I%`?EBd;u*bw^&c6N>$AqV%`$CIzUS3hd@))r=#QAaVNfUesJWfV;VO zW7lAwO&7!yoUjPX&!!5ZZMwyIRXn#Y2(N6OUe$#h_T$=t_}3vtxl89ZT+Qvl z)4I6wm%FOv;O)je!zeS*b3jQE{CBzF<@`t1AJ?KV3<me3f;Y>?OT( zl{6^-WBkVXhl1}ZP09GK+&%SF_0HY-E5oSELDXCvvK8kl_0a7Be;@w-dM$}zNTocf zP{}jd$k)|2jN)3BWD?4>GQnh&q3#pq;i!$&}~ujidfm z8)#8&FFgNt0B_jqJOa| zinfOy-9m;peSkgnv(plzT5U4FV6={6#_nJULB34P|yY&yOC61|X>;I#Odp$q~(p_WoH9Afk zMcj4AQFNL!wX+;zX@PI9>^ttne>#LzkIXs*#s4T%yX8M0 zLEIa)G@bFglYgt_zaIzg>s{e@HU2bRfV3_KxGn#~hiCQhI zM0QOTO$CWm;QuX0` zFZ7yD-0@8GeprM#pB{!?m-FVd4D+;f&aC(06M;3j6~8(VBO;!MfX#@NyhG04@g(hi z_)iuyJuUdp5O!DdV`SqTdlB@o9d{Yz(wHC0&b7^tE>TvS7tXfqMgIF?8;{^SjG73d z^xdeVFg~oCAfQ9kO~3F;p#8iH@9CMa0&hC;O}_%lvq65srv`!h0wUZyBE7IEwjO^4LR!S4{bo zIcE`v1Wp~8^Szu0U5e3KKHCbtdl#P5M_l?8=w~e&S3*$kr@zJsQZS#jNKcA{7z=h_ zG~yYn#Bq-BeWkWd@23%QP8M;h9eCX2i1C#_Vi7V1J!R+-u4dELdrY^0+^REgxPn)n zbfZ!gS+;x)f98^7u6+CpkKXs;FAaQX?3s`MwErYJ9s<8PI?aV|AYw6!SiDEczct#+3;HFqVnul`af<*|D-PfIl~D0 zD|c8m>Z6op*~itYpOaDQdY@jG6tpY#wI#?;BcDdrg8aXDSHshOyMM36Jr*T=5~I^f z@agHEc1rz)ek`-?z3+5dG-m)B+kR}f4u>4C+$m19p?|AJE!urMESG-lpzw z$q~C&t2(`mj6JB0>CFeInPK~Vv(-38FPU0dkLJ>fIlC2PN209e9Ye^CILa&OQ`)VR z=O5+ask7lmsX(_xCK~Pl8v0T!Xqm zLTD9vNZitUTfH}4>6_Ds2i{~v`}~w^rx<4D4PqrTO!BqyclaDn*pBXVppIphh zQM2xGr$RknYwMgZV=e2sx^UKVbt!6N4=kTtw=iO;m+-9Rz`nhrXfM4!*34RNjH}71 zv&fw-cSExoME{;J_|G1( zlLKvI!{Cs#&FS@YX`OS&nSZtF(aM)NC*-XUB?Z5$#ZDI?&v~%#7u0#V69rcmN}H3u z$A_db`n7WPC)a`MJAkt%)t;)$<#C-!=Foe~`kL29xg6N{Wj*#FYOjEg969tHMrJXG zLy#2p9OXe>$^xzD$NRbx`;@tR$y6*{b?S{$%3&$@yxK84S@WFPtz403Xmf{pQVeGR zbXuZ}QN%p%Zg4(Y^4V+Tna-?9Ydraz^Cz4;H`5ML%_O?*GJH5cHbm8X;+`t@Vye)?FxSv*QM-XZAEca*OfONFEfmN=vCaC4;%C zH`RoN#-;a8y={kT-Xq=dX1iFjCMVGU$fJ$*$5jP0N81H$1fa}CZbuI$Blg+rOO&}- zcHR2UkxCzd)JoMvi6R+4SDKZddwUnKohi+7w>7`-#j}^pT-|x$#lDxsxt=+R+OH@A ziX+X*6EXGG*E1SRa4pHUut`(`4D7TW{h*7pm?fm6b z?yqjpR?+(_+k-)kDKkSE3xL5$F~q1aQ!<+QUT|Q~1@7QVe>>{LgSbly{zbWBX7@Yc zY_fU$S3E)W0QLswY-& zi<46I4&S`nTd!&Kd3Smo+ReL{s~a^YlHwSuoq4B!us02?T#o2xNsUYH??x*GInpGa z(A&~z3G;4$_lnzU;nelznaGRO;W#Hld!ypi)*VLG%&4B1MzhN(Nn`)uhvf2#({l`? zS4$(x>BjZ+q`H2g+fYwbJi}VjZ4Fb>7rVB*zv_;SEiW4BN%6$}rKJwY{8FRYe@BDG z;QmH!$8Xw^#XN$j@ezL!dfxsq@_W^UtZTKl9WFH??kwa@wq`r1HEP3<9_1P}yQflW zR2oq3_2chd_J=PwdH2w=!y$K$x8}!;*$)Yyezkeu9g`o(Qws}*q9IfSYC!G&V_mB) zcWCC`rCsoY=UNZ$@y?lexmyZ72{S%&9StZp9`GsRrV&cHTXh5vFrdt2#_ zX>hL~YVfjdxI;k^$9ahtr7t^eNxtMRM_jRQr;FLuk&>xY(sn5~tCyB5rOaBl7&S22 zYgGS%SaE@7_$6N^JLD>g4nY7%zDSkXrQ`s9%1zARqMaG3RG4cnEUW*O}=RiYoQ`Z#1o+ zT+6%HqFo;~Qf;5$Riq+%trUHBRHS6={X_aNY7ea2ZRmTAVRty7jW4K-_{ zWEX1>JfMxo#8^2hMkaM)O$&Sg>Aj=QP*ir^12b^7JYzx5XCIh>!yq66$2uLNp-3o7 z7rz6+MGZLZzf0fo4t$&f&wrvm$311;?mv4PnCT;0qLuM;SF-ZK%lTtVf&aQ0RG - /// Abstract class for GPPG shift-reduce parsers. - /// Parsers generated by GPPG derive from this base - /// class, overriding the abstract Initialize() and - /// DoAction() methods. - /// - /// Semantic value type - /// Location type -#if EXPORT_GPPG - public abstract class ShiftReduceParser -#else - internal abstract class ShiftReduceParser -#endif - where TSpan : IMerge, new() - { - public AbstractScanner scanner; - /// - /// The abstract scanner for this parser. - /// - protected AbstractScanner Scanner { - get { return scanner; } - set { scanner = value; } - } - - /// - /// Constructor for base class - /// - /// Scanner instance for this parser - protected ShiftReduceParser(AbstractScanner scanner) - { - this.scanner = scanner; - } - - // ============================================================== - // TECHNICAL EXPLANATION. - // Why the next two fields are not exposed via properties. - // ============================================================== - // These fields are of the generic parameter types, and are - // frequently instantiated as struct types in derived classes. - // Semantic actions are defined in the derived classes and refer - // to instance fields of these structs. Is such cases the code - // "get_CurrentSemanticValue().myField = blah;" will fail since - // the getter pushes the value of the field, not the reference. - // So, in the presence of properties, gppg would need to encode - // such field accesses as ... - // "tmp = get_CurrentSemanticValue(); // Fetch value - // tmp.myField = blah; // update - // set_CurrentSemanticValue(tmp); " // Write update back. - // There is no issue if TValue is restricted to be a ref type. - // The same explanation applies to scanner.yylval. - // ============================================================== - /// - /// The current value of the "$$" symbolic variable in the parser - /// - [SuppressMessage("Microsoft.Design", "CA1051:DoNotDeclareVisibleInstanceFields")] - protected TValue CurrentSemanticValue; - - /// - /// The current value of the "@$" symbolic variable in the parser - /// - [SuppressMessage("Microsoft.Design", "CA1051:DoNotDeclareVisibleInstanceFields")] - protected TSpan CurrentLocationSpan; - - private TSpan LastSpan; - private int NextToken; - private State FsaState; - private bool recovering; - private int tokensSinceLastError; - - private PushdownPrefixState StateStack = new PushdownPrefixState(); - private PushdownPrefixState valueStack = new PushdownPrefixState(); - private PushdownPrefixState locationStack = new PushdownPrefixState(); - - /// - /// The stack of semantic value (YYSTYPE) values. - /// - protected PushdownPrefixState ValueStack { get { return valueStack; } } - - /// - /// The stack of location value (YYLTYPE) varlues. - /// - protected PushdownPrefixState LocationStack { get { return locationStack; } } - - private int errorToken; - private int endOfFileToken; - private string[] nonTerminals; - private State[] states; - private Rule[] rules; - - /// - /// Initialization method to allow derived classes - /// to insert the rule list into this base class. - /// - /// The array of Rule objects - protected void InitRules(Rule[] rules) { this.rules = rules; } - - /// - /// Initialization method to allow derived classes to - /// insert the states table into this base class. - /// - /// The pre-initialized states table - protected void InitStates(State[] states) { this.states = states; } - - /// - /// OBSOLETE FOR VERSION 1.4.0 - /// - /// - protected void InitStateTable(int size) { states = new State[size]; } - - /// - /// Initialization method to allow derived classes - /// to insert the special value for the error and EOF tokens. - /// - /// The error state ordinal - /// The EOF stat ordinal - protected void InitSpecialTokens(int err, int end) - { - errorToken = err; - endOfFileToken = end; - } - - /// - /// Initialization method to allow derived classes to - /// insert the non-terminal symbol names into this base class. - /// - /// Non-terminal symbol names - protected void InitNonTerminals(string[] names) { nonTerminals = names; } - - #region YYAbort, YYAccept etcetera. - [Serializable] - [SuppressMessage("Microsoft.Design", "CA1064:ExceptionsShouldBePublic")] - // Reason for FxCop message suppression - - // This exception cannot escape from the local context - private class AcceptException : Exception - { - internal AcceptException() { } - protected AcceptException(SerializationInfo i, StreamingContext c) : base(i, c) { } - } - [Serializable] - [SuppressMessage("Microsoft.Design", "CA1064:ExceptionsShouldBePublic")] - // Reason for FxCop message suppression - - // This exception cannot escape from the local context - private class AbortException : Exception - { - internal AbortException() { } - protected AbortException(SerializationInfo i, StreamingContext c) : base(i, c) { } - } - [Serializable] - [SuppressMessage("Microsoft.Design", "CA1064:ExceptionsShouldBePublic")] - // Reason for FxCop message suppression - - // This exception cannot escape from the local context - private class ErrorException : Exception - { - internal ErrorException() { } - protected ErrorException(SerializationInfo i, StreamingContext c) : base(i, c) { } - } - - // The following methods are only called from within - // a semantic action. The thrown exceptions can never - // propagate outside the ShiftReduceParser class in - // which they are nested. - - /// - /// Force parser to terminate, returning "true" - /// - protected static void YYAccept() { throw new AcceptException(); } - - /// - /// Force parser to terminate, returning "false" - /// - protected static void YYAbort() { throw new AbortException(); } - - /// - /// Force parser to terminate, returning - /// "false" if error recovery fails. - /// - protected static void YYError() { throw new ErrorException(); } - - /// - /// Check if parser in error recovery state. - /// - protected bool YYRecovering { get { return recovering; } } - #endregion - - /// - /// Abstract base method. ShiftReduceParser calls this - /// to initialize the base class data structures. Concrete - /// parser classes must override this method. - /// - protected abstract void Initialize(); - - /// - /// Main entry point of the Shift-Reduce Parser. - /// - /// True if parse succeeds, else false for - /// unrecoverable errors - public bool Parse() - { - Initialize(); // allow derived classes to instantiate rules, states and nonTerminals - - NextToken = 0; - FsaState = states[0]; - - StateStack.Push(FsaState); - valueStack.Push(CurrentSemanticValue); - LocationStack.Push(CurrentLocationSpan); - - while (true) - { -#if TRACE_ACTIONS - Console.Error.WriteLine("Entering state {0} ", FsaState.number); -#endif - int action = FsaState.defaultAction; - - if (FsaState.ParserTable != null) - { - if (NextToken == 0) - { -#if TRACE_ACTIONS - Console.Error.Write("Reading a token: "); -#endif - // We save the last token span, so that the location span - // of production right hand sides that begin or end with a - // nullable production will be correct. - LastSpan = scanner.yylloc; - NextToken = scanner.yylex(); - } - -#if TRACE_ACTIONS - Console.Error.WriteLine("Next token is {0}", TerminalToString(NextToken)); -#endif - if (FsaState.ParserTable.ContainsKey(NextToken)) - action = FsaState.ParserTable[NextToken]; - } - - if (action > 0) // shift - { - Shift(action); - } - else if (action < 0) // reduce - { - try - { - Reduce(-action); - if (action == -1) // accept - return true; - } - catch (Exception x) - { - if (x is AbortException) - return false; - else if (x is AcceptException) - return true; - else if (x is ErrorException && !ErrorRecovery()) - return false; - else - throw; // Rethrow x, preserving information. - - } - } - else if (action == 0) // error - if (!ErrorRecovery()) - return false; - } - } - - private void Shift(int stateIndex) - { -#if TRACE_ACTIONS - Console.Error.Write("Shifting token {0}, ", TerminalToString(NextToken)); -#endif - FsaState = states[stateIndex]; - - valueStack.Push(scanner.yylval); - StateStack.Push(FsaState); - LocationStack.Push(scanner.yylloc); - - if (recovering) - { - if (NextToken != errorToken) - tokensSinceLastError++; - - if (tokensSinceLastError > 5) - recovering = false; - } - - if (NextToken != endOfFileToken) - NextToken = 0; - } - - private void Reduce(int ruleNumber) - { -#if TRACE_ACTIONS - DisplayRule(ruleNumber); -#endif - Rule rule = rules[ruleNumber]; - // - // Default actions for unit productions. - // - if (rule.RightHandSide.Length == 1) - { - CurrentSemanticValue = valueStack.TopElement(); // Default action: $$ = $1; - CurrentLocationSpan = LocationStack.TopElement(); // Default action "@$ = @1; - } - else - { - if (rule.RightHandSide.Length == 0) - { - // Create a new blank value. - // Explicit semantic action may mutate this value - CurrentSemanticValue = default(TValue); - // The location span for an empty production will start with the - // beginning of the next lexeme, and end with the finish of the - // previous lexeme. This gives the correct behaviour when this - // nonsense value is used in later Merge operations. - CurrentLocationSpan = (scanner.yylloc != null && LastSpan != null ? - scanner.yylloc.Merge(LastSpan) : - default(TSpan)); - } - else - { - // Default action: $$ = $1; - CurrentSemanticValue = valueStack.TopElement(); - // Default action "@$ = @1.Merge(@N)" for location info. - TSpan at1 = LocationStack[LocationStack.Depth - rule.RightHandSide.Length]; - TSpan atN = LocationStack[LocationStack.Depth - 1]; - CurrentLocationSpan = - ((at1 != null && atN != null) ? at1.Merge(atN) : default(TSpan)); - } - } - - DoAction(ruleNumber); - - for (int i = 0; i < rule.RightHandSide.Length; i++) - { - StateStack.Pop(); - valueStack.Pop(); - LocationStack.Pop(); - } - -#if TRACE_ACTIONS - DisplayStack(); -#endif - FsaState = StateStack.TopElement(); - - if (FsaState.Goto.ContainsKey(rule.LeftHandSide)) - FsaState = states[FsaState.Goto[rule.LeftHandSide]]; - - StateStack.Push(FsaState); - valueStack.Push(CurrentSemanticValue); - LocationStack.Push(CurrentLocationSpan); - } - - /// - /// Execute the selected action from array. - /// Must be overriden in derived classes. - /// - /// Index of the action to perform - protected abstract void DoAction(int actionNumber); - - private bool ErrorRecovery() - { - bool discard; - - if (!recovering) // if not recovering from previous error - ReportError(); - - if (!FindErrorRecoveryState()) - return false; - // - // The interim fix for the "looping in error recovery" - // artifact involved moving the setting of the recovering - // bool until after invalid tokens have been discarded. - // - ShiftErrorToken(); - discard = DiscardInvalidTokens(); - recovering = true; - tokensSinceLastError = 0; - return discard; - } - - private void ReportError1() - { - StringBuilder errorMsg = new StringBuilder(); - errorMsg.AppendFormat("Syntax error, unexpected {0}", TerminalToString(NextToken)); - - if (FsaState.ParserTable.Count < 7) - { - bool first = true; - foreach (int terminal in FsaState.ParserTable.Keys) - { - if (first) - errorMsg.Append(", expecting "); - else - errorMsg.Append(", or "); - - errorMsg.Append(TerminalToString(terminal)); - first = false; - } - } - scanner.yyerror(errorMsg.ToString()); - } - - private void ReportError() - { - object[] args = new object[FsaState.ParserTable.Keys.Count+1]; - args[0] = TerminalToString(NextToken); - int i=1; - foreach (int terminal in FsaState.ParserTable.Keys) - { - args[i] = TerminalToString(terminal); - i++; - } - scanner.yyerror("",args); - } - - private void ShiftErrorToken() - { - int old_next = NextToken; - NextToken = errorToken; - - Shift(FsaState.ParserTable[NextToken]); - -#if TRACE_ACTIONS - Console.Error.WriteLine("Entering state {0} ", FsaState.number); -#endif - NextToken = old_next; - } - - private bool FindErrorRecoveryState() - { - while (true) // pop states until one found that accepts error token - { - if (FsaState.ParserTable != null && - FsaState.ParserTable.ContainsKey(errorToken) && - FsaState.ParserTable[errorToken] > 0) // shift - return true; - -#if TRACE_ACTIONS - Console.Error.WriteLine("Error: popping state {0}", StateStack.Top().number); -#endif - StateStack.Pop(); - valueStack.Pop(); - LocationStack.Pop(); - -#if TRACE_ACTIONS - DisplayStack(); -#endif - if (StateStack.IsEmpty()) - { -#if TRACE_ACTIONS - Console.Error.Write("Aborting: didn't find a state that accepts error token"); -#endif - return false; - } - else - FsaState = StateStack.TopElement(); - } - } - - private bool DiscardInvalidTokens() - { - - int action = FsaState.defaultAction; - - if (FsaState.ParserTable != null) - { - // Discard tokens until find one that works ... - while (true) - { - if (NextToken == 0) - { -#if TRACE_ACTIONS - Console.Error.Write("Reading a token: "); -#endif - NextToken = scanner.yylex(); - } - -#if TRACE_ACTIONS - Console.Error.WriteLine("Next token is {0}", TerminalToString(NextToken)); -#endif - if (NextToken == endOfFileToken) - return false; - - if (FsaState.ParserTable.ContainsKey(NextToken)) - action = FsaState.ParserTable[NextToken]; - - if (action != 0) - return true; - else - { -#if TRACE_ACTIONS - Console.Error.WriteLine("Error: Discarding {0}", TerminalToString(NextToken)); -#endif - NextToken = 0; - } - } - } - else if (recovering && tokensSinceLastError == 0) - { - // - // Boolean recovering is not set until after the first - // error token has been shifted. Thus if we get back - // here with recovering set and no tokens read we are - // looping on the same error recovery action. This - // happens if current_state.ParserTable is null because - // the state has an LR(0) reduction, but not all - // lookahead tokens are valid. This only occurs for - // error productions that *end* on "error". - // - // This action discards tokens one at a time until - // the looping stops. Another attack would be to always - // use the LALR(1) table if a production ends on "error" - // -#if TRACE_ACTIONS - Console.Error.WriteLine("Error: panic discard of {0}", TerminalToString(NextToken)); -#endif - if (NextToken == endOfFileToken) - return false; - NextToken = 0; - return true; - } - else - return true; - - } - - /// - /// Traditional YACC method. Discards the next input token. - /// - [SuppressMessage("Microsoft.Naming", "CA1709:IdentifiersShouldBeCasedCorrectly", MessageId = "yyclearin")] - [SuppressMessage("Microsoft.Naming", "CA1704:IdentifiersShouldBeSpelledCorrectly", MessageId = "yyclearin")] - // Reason for FxCop message suppression - - // This is a traditional name for YACC-like functionality - protected void yyclearin() { NextToken = 0; } - - /// - /// Tradional YACC method. Clear the "recovering" flag. - /// - [SuppressMessage("Microsoft.Naming", "CA1709:IdentifiersShouldBeCasedCorrectly", MessageId = "yyerrok")] - [SuppressMessage("Microsoft.Naming", "CA1704:IdentifiersShouldBeSpelledCorrectly", MessageId = "yyerrok")] - // Reason for FxCop message suppression - - // This is a traditional name for YACC-like functionality - protected void yyerrok() - { - recovering = false; - } - - /// - /// OBSOLETE FOR VERSION 1.4.0 - /// Method used by derived types to insert new - /// state instances in the "states" array. - /// - /// index of the state - /// data for the state - protected void AddState(int stateNumber, State state) - { - states[stateNumber] = state; - state.number = stateNumber; - } - - private void DisplayStack() - { - Console.Error.Write("State now"); - for (int i = 0; i < StateStack.Depth; i++) - Console.Error.Write(" {0}", StateStack[i].number); - Console.Error.WriteLine(); - } - - private void DisplayRule(int ruleNumber) - { - Console.Error.Write("Reducing stack by rule {0}, ", ruleNumber); - DisplayProduction(rules[ruleNumber]); - } - - private void DisplayProduction(Rule rule) - { - if (rule.RightHandSide.Length == 0) - Console.Error.Write("/* empty */ "); - else - foreach (int symbol in rule.RightHandSide) - Console.Error.Write("{0} ", SymbolToString(symbol)); - - Console.Error.WriteLine("-> {0}", SymbolToString(rule.LeftHandSide)); - } - - /// - /// Abstract state class naming terminal symbols. - /// This is overridden by derived classes with the - /// name (or alias) to be used in error messages. - /// - /// The terminal ordinal - /// - protected abstract string TerminalToString(int terminal); - - private string SymbolToString(int symbol) - { - if (symbol < 0) - return nonTerminals[-symbol]; - else - return TerminalToString(symbol); - } - - /// - /// Return text representation of argument character - /// - /// The character to convert - /// String representation of the character - protected static string CharToString(char input) - { - switch (input) - { - case '\a': return @"'\a'"; - case '\b': return @"'\b'"; - case '\f': return @"'\f'"; - case '\n': return @"'\n'"; - case '\r': return @"'\r'"; - case '\t': return @"'\t'"; - case '\v': return @"'\v'"; - case '\0': return @"'\0'"; - default: return string.Format(CultureInfo.InvariantCulture, "'{0}'", input); - } - } - } - - /// - /// Classes implementing this interface must supply a - /// method that merges two location objects to return - /// a new object of the same type. - /// GPPG-generated parsers have the default location - /// action equivalent to "@$ = @1.Merge(@N);" where N - /// is the right-hand-side length of the production. - /// - /// The Location type -#if EXPORT_GPPG - public interface IMerge -#else - internal interface IMerge -#endif - { - /// - /// Interface method that creates a location object from - /// the current and last object. Typically used to create - /// a location object extending from the start of the @1 - /// object to the end of the @N object. - /// - /// The lexically last object to merge - /// The merged location object - TSpan Merge(TSpan last); - } - - /// - /// This is the default class that carries location - /// information from the scanner to the parser. - /// If you don't declare "%YYLTYPE Foo" the parser - /// will expect to deal with this type. - /// -#if EXPORT_GPPG - public class LexLocation : IMerge -#else - [SuppressMessage("Microsoft.Performance", "CA1812:AvoidUninstantiatedInternalClasses")] - internal class LexLocation : IMerge -#endif - { - private int startLine; // start line - private int startColumn; // start column - private int endLine; // end line - private int endColumn; // end column - - /// - /// The line at which the text span starts. - /// - public int StartLine { get { return startLine; } } - - /// - /// The column at which the text span starts. - /// - public int StartColumn { get { return startColumn; } } - - /// - /// The line on which the text span ends. - /// - public int EndLine { get { return endLine; } } - - /// - /// The column of the first character - /// beyond the end of the text span. - /// - public int EndColumn { get { return endColumn; } } - - /// - /// Default no-arg constructor. - /// - public LexLocation() - { } - - /// - /// Constructor for text-span with given start and end. - /// - /// start line - /// start column - /// end line - /// end column - public LexLocation(int sl, int sc, int el, int ec) - { startLine = sl; startColumn = sc; endLine = el; endColumn = ec; } - - /// - /// Create a text location which spans from the - /// start of "this" to the end of the argument "last" - /// - /// The last location in the result span - /// The merged span - public LexLocation Merge(LexLocation last) - { return new LexLocation(this.startLine, this.startColumn, last.endLine, last.endColumn); } - - public static implicit operator SourceContext(LexLocation loc) - { - return new SourceContext(loc.StartLine, loc.StartColumn + 1, loc.EndLine, loc.EndColumn); - } - - } - - /// - /// Abstract scanner class that GPPG expects its scanners to - /// extend. - /// - /// Semantic value type YYSTYPE - /// Source location type YYLTYPE -#if EXPORT_GPPG - public abstract class AbstractScanner -#else - internal abstract class AbstractScanner -#endif - where TSpan : IMerge - { - /// - /// Lexical value optionally set by the scanner. The value - /// is of the %YYSTYPE type declared in the parser spec. - /// - [SuppressMessage("Microsoft.Design", "CA1051:DoNotDeclareVisibleInstanceFields")] - [SuppressMessage("Microsoft.Naming", "CA1709:IdentifiersShouldBeCasedCorrectly", MessageId = "yylval")] - [SuppressMessage("Microsoft.Naming", "CA1704:IdentifiersShouldBeSpelledCorrectly", MessageId = "yylval")] - // Reason for FxCop message suppression - - // This is a traditional name for YACC-like functionality - // A field must be declared for this value of parametric type, - // since it may be instantiated by a value struct. If it were - // implemented as a property, machine generated code in derived - // types would not be able to select on the returned value. - public TValue yylval; // Lexical value: set by scanner - - /// - /// Current scanner location property. The value is of the - /// type declared by %YYLTYPE in the parser specification. - /// - [SuppressMessage("Microsoft.Naming", "CA1709:IdentifiersShouldBeCasedCorrectly", MessageId = "yylloc")] - [SuppressMessage("Microsoft.Naming", "CA1704:IdentifiersShouldBeSpelledCorrectly", MessageId = "yylloc")] - // Reason for FxCop message suppression - - // This is a traditional name for YACC-like functionality - public virtual TSpan yylloc - { - get { return default(TSpan); } // Empty implementation allowing - set { /* skip */ } // yylloc to be ignored entirely. - } - - /// - /// Main call point for LEX-like scanners. Returns an int - /// corresponding to the token recognized by the scanner. - /// - /// An int corresponding to the token - [SuppressMessage("Microsoft.Naming", "CA1709:IdentifiersShouldBeCasedCorrectly", MessageId = "yylex")] - [SuppressMessage("Microsoft.Naming", "CA1704:IdentifiersShouldBeSpelledCorrectly", MessageId = "yylex")] - // Reason for FxCop message suppression - - // This is a traditional name for YACC-like functionality - public abstract int yylex(); - - /// - /// Traditional error reporting provided by LEX-like scanners - /// to their YACC-like clients. - /// - /// Message format string - /// Optional array of args - [SuppressMessage("Microsoft.Naming", "CA1709:IdentifiersShouldBeCasedCorrectly", MessageId = "yyerror")] - [SuppressMessage("Microsoft.Naming", "CA1704:IdentifiersShouldBeSpelledCorrectly", MessageId = "yyerror")] - // Reason for FxCop message suppression - - // This is a traditional name for YACC-like functionality - public virtual void yyerror(string format, params object[] args) { } - } - - /// - /// Encapsulated state for the parser. - /// Opaque to users, visible to the tool-generated code. - /// -#if EXPORT_GPPG - public class State -#else - internal class State -#endif - { - internal int number; - internal Dictionary ParserTable; // Terminal -> ParseAction - internal Dictionary Goto; // NonTerminal -> State; - internal int defaultAction; // = 0; // ParseAction - - /// - /// State transition data for this state. Pairs of elements of the - /// goto array associate symbol ordinals with next state indices. - /// The actions array is passed to another constructor. - /// - /// The action list - /// Next state data - public State(int[] actions, int[] goToList) - : this(actions) - { - Goto = new Dictionary(); - for (int i = 0; i < goToList.Length; i += 2) - Goto.Add(goToList[i], goToList[i + 1]); - } - - /// - /// Action data for this state. Pairs of elements of the - /// action array associate action ordinals with each of - /// those symbols that have actions in the current state. - /// - /// The action array - public State(int[] actions) - { - ParserTable = new Dictionary(); - for (int i = 0; i < actions.Length; i += 2) - ParserTable.Add(actions[i], actions[i + 1]); - } - - /// - /// Set the default action for this state. - /// - /// Ordinal of the default action - public State(int defaultAction) - { - this.defaultAction = defaultAction; - } - - /// - /// Set the default action and the state transition table. - /// - /// The default action - /// Transitions from this state - public State(int defaultAction, int[] goToList) - : this(defaultAction) - { - Goto = new Dictionary(); - for (int i = 0; i < goToList.Length; i += 2) - Goto.Add(goToList[i], goToList[i + 1]); - } - } - - /// - /// Rule representation at runtime. - /// -#if EXPORT_GPPG - public class Rule -#else - internal class Rule -#endif - { - internal int LeftHandSide; // symbol - internal int[] RightHandSide; // symbols - - /// - /// Rule constructor. This holds the ordinal of - /// the left hand side symbol, and the list of - /// right hand side symbols, in lexical order. - /// - /// The LHS non-terminal - /// The RHS symbols, in lexical order - public Rule(int left, int[] right) - { - this.LeftHandSide = left; - this.RightHandSide = right; - } - } - - /// - /// Stack utility for the shift-reduce parser. - /// GPPG parsers have three instances: - /// (1) The parser state stack, T = QUT.Gppg.State, - /// (2) The semantic value stack, T = TValue, - /// (3) The location stack, T = TSpan. - /// - /// -#if EXPORT_GPPG - public class PushdownPrefixState -#else - internal class PushdownPrefixState -#endif - { - // Note that we cannot use the BCL Stack class - // here as derived types need to index into stacks. - // - private T[] array = new T[8]; - private int tos = 0; - - /// - /// Indexer for values of the stack below the top. - /// - /// index of the element, starting from the bottom - /// the selected element - public T this[int index] { get { return array[index]; } } - - /// - /// The current depth of the stack. - /// - public int Depth { get { return tos; } } - - internal void Push(T value) - { - if (tos >= array.Length) - { - T[] newarray = new T[array.Length * 2]; - System.Array.Copy(array, newarray, tos); - array = newarray; - } - array[tos++] = value; - } - - internal T Pop() - { - T rslt = array[--tos]; - array[tos] = default(T); - return rslt; - } - - internal T TopElement() { return array[tos - 1]; } - - internal bool IsEmpty() { return tos == 0; } - } -} \ No newline at end of file diff --git a/Grammars/Oberon10Independent (by Juliet)/generateParserScanner.bat b/Grammars/Oberon10Independent (by Juliet)/generateParserScanner.bat deleted file mode 100644 index 2f9f25c2c..000000000 --- a/Grammars/Oberon10Independent (by Juliet)/generateParserScanner.bat +++ /dev/null @@ -1,3 +0,0 @@ -cls -GPLex_GPPG\gplex.exe /unicode oberon00.lex -GPLex_GPPG\gppg.exe /no-lines /gplex oberon00.y diff --git a/Grammars/Oberon10Independent (by Juliet)/generate_all.bat b/Grammars/Oberon10Independent (by Juliet)/generate_all.bat deleted file mode 100644 index 602cf5ca0..000000000 --- a/Grammars/Oberon10Independent (by Juliet)/generate_all.bat +++ /dev/null @@ -1,9 +0,0 @@ -cls -GPLex_GPPG\gplex.exe /unicode oberon00.lex -GPLex_GPPG\gppg.exe /no-lines /gplex oberon00.y - -copy ..\..\bin\SyntaxTree.dll DLL\SyntaxTree.dll -%windir%\microsoft.net\framework\v3.5\msbuild /t:rebuild /property:Configuration=Release ObrProba.sln - -copy bin\Release\Oberon00Parser.dll Install\PascalABC.NET\Oberon00Parser.dll -copy bin\Release\Oberon00Parser.dll ..\..\bin\Oberon00Parser.dll diff --git a/Grammars/Oberon10Independent (by Juliet)/oberon00.cs b/Grammars/Oberon10Independent (by Juliet)/oberon00.cs deleted file mode 100644 index 8fd285398..000000000 --- a/Grammars/Oberon10Independent (by Juliet)/oberon00.cs +++ /dev/null @@ -1,1702 +0,0 @@ -// -// This CSharp output file generated by Gardens Point LEX -// Version: 1.1.3.301 -// Machine: SSM -// DateTime: 13.03.2013 16:51:38 -// UserName: ????????? -// GPLEX input file -// GPLEX frame file -// -// Option settings: unicode, parser, minimize -// Option settings: classes, compressMap, compressNext, persistBuffer, embedbuffers -// Fallback code page: Target machine default -// - -// -// Experimental embedded frame -// Version 1.1.3 of 18-April-2010 -// -// -#define BACKUP -#define PERSIST - -using System; -using System.IO; -using System.Text; -using System.Globalization; -using System.Collections.Generic; -using System.Runtime.Serialization; -using System.Diagnostics.CodeAnalysis; - -using PascalABCCompiler.Oberon00Parser; - -namespace GPPGParserScanner -{ - /// - /// Summary Canonical example of GPLEX automaton - /// - -#if STANDALONE - // - // These are the dummy declarations for stand-alone GPLEX applications - // normally these declarations would come from the parser. - // If you declare /noparser, or %option noparser then you get this. - // - - public enum Tokens - { - EOF = 0, maxParseToken = int.MaxValue - // must have at least these two, values are almost arbitrary - } - - public abstract class ScanBase - { - [SuppressMessage("Microsoft.Naming", "CA1709:IdentifiersShouldBeCasedCorrectly", MessageId = "yylex")] - [SuppressMessage("Microsoft.Naming", "CA1704:IdentifiersShouldBeSpelledCorrectly", MessageId = "yylex")] - public abstract int yylex(); - - [SuppressMessage("Microsoft.Naming", "CA1709:IdentifiersShouldBeCasedCorrectly", MessageId = "yywrap")] - [SuppressMessage("Microsoft.Naming", "CA1704:IdentifiersShouldBeSpelledCorrectly", MessageId = "yywrap")] - protected virtual bool yywrap() { return true; } - -#if BABEL - protected abstract int CurrentSc { get; set; } - // EolState is the 32-bit of state data persisted at - // the end of each line for Visual Studio colorization. - // The default is to return CurrentSc. You must override - // this if you want more complicated behavior. - public virtual int EolState { - get { return CurrentSc; } - set { CurrentSc = value; } - } - } - - public interface IColorScan - { - void SetSource(string source, int offset); - int GetNext(ref int state, out int start, out int end); -#endif // BABEL - } - -#endif // STANDALONE - - // If the compiler can't find the scanner base class maybe you - // need to run GPPG with the /gplex option, or GPLEX with /noparser -#if BABEL - public sealed partial class Scanner : ScanBase, IColorScan - { - private ScanBuff buffer; - int currentScOrd; // start condition ordinal - - protected override int CurrentSc - { - // The current start state is a property - // to try to avoid the user error of setting - // scState but forgetting to update the FSA - // start state "currentStart" - // - get { return currentScOrd; } // i.e. return YY_START; - set { currentScOrd = value; // i.e. BEGIN(value); - currentStart = startState[value]; } - } -#else // BABEL - public sealed partial class Scanner : ScanBase - { - private ScanBuff buffer; - int currentScOrd; // start condition ordinal -#endif // BABEL - - /// - /// The input buffer for this scanner. - /// - [SuppressMessage("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] - public ScanBuff Buffer { get { return buffer; } } - - private static int GetMaxParseToken() { - System.Reflection.FieldInfo f = typeof(Tokens).GetField("maxParseToken"); - return (f == null ? int.MaxValue : (int)f.GetValue(null)); - } - - static int parserMax = GetMaxParseToken(); - - enum Result {accept, noMatch, contextFound}; - - const int maxAccept = 39; - const int initial = 40; - const int eofNum = 0; - const int goStart = -1; - const int INITIAL = 0; - const int COMMENT = 1; - const int COMMENT_S = 2; - -#region user code -#endregion user code - - int state; - int currentStart = startState[0]; - int code; // last code read - int cCol; // column number of code - int lNum; // current line number - // - // The following instance variables are used, among other - // things, for constructing the yylloc location objects. - // - int tokPos; // buffer position at start of token - int tokCol; // zero-based column number at start of token - int tokLin; // line number at start of token - int tokEPos; // buffer position at end of token - int tokECol; // column number at end of token - int tokELin; // line number at end of token - string tokTxt; // lazily constructed text of token -#if STACK - private Stack scStack = new Stack(); -#endif // STACK - -#region ScannerTables - struct Table { - public int min; public int rng; public int dflt; - public sbyte[] nxt; - public Table(int m, int x, int d, sbyte[] n) { - min = m; rng = x; dflt = d; nxt = n; - } - }; - - static int[] startState = new int[] {40, 50, 53, 0}; - -#region CompressedCharacterMap - // - // There are 33 equivalence classes - // There are 2 character sequence regions - // There are 1 tables, 127 entries - // There are 1 runs, 0 singletons - // Decision tree depth is 1 - // - static sbyte[] mapC0 = new sbyte[127] { -/* '\0' */ 0, 23, 0, 0, 0, 0, 0, 0, 0, 0, 24, 0, 0, 0, 0, 0, -/* '\x10' */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -/* '\x20' */ 0, 17, 31, 10, 0, 0, 15, 30, 11, 12, 6, 5, 13, 4, 16, 7, -/* '0' */ 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 1, 3, 8, 2, 9, 0, -/* '@' */ 0, 27, 27, 27, 29, 29, 27, 25, 28, 25, 25, 25, 25, 25, 25, 25, -/* 'P' */ 25, 25, 25, 25, 25, 25, 25, 25, 32, 25, 25, 20, 0, 21, 0, 25, -/* '`' */ 0, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, -/* 'p' */ 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 18, 22, 19, 14 }; - - static sbyte MapC(int code) - { // '\0' <= code <= '\U0010FFFF' - if (code < 127) // '\0' <= code <= '~' - return mapC0[code - 0]; - else // '\x7F' <= code <= '\U0010FFFF' - return (sbyte)0; - } -#endregion - - static Table[] NxS = new Table[54] { -/* NxS[ 0] */ new Table(0, 0, 0, null), -/* NxS[ 1] */ new Table(2, 1, -1, new sbyte[] {36}), -/* NxS[ 2] */ new Table(0, 0, -1, null), -/* NxS[ 3] */ new Table(0, 0, -1, null), -/* NxS[ 4] */ new Table(0, 0, -1, null), -/* NxS[ 5] */ new Table(0, 0, -1, null), -/* NxS[ 6] */ new Table(0, 0, -1, null), -/* NxS[ 7] */ new Table(7, 1, -1, new sbyte[] {35}), -/* NxS[ 8] */ new Table(2, 1, -1, new sbyte[] {34}), -/* NxS[ 9] */ new Table(2, 1, -1, new sbyte[] {33}), -/* NxS[ 10] */ new Table(0, 0, -1, null), -/* NxS[ 11] */ new Table(6, 1, -1, new sbyte[] {32}), -/* NxS[ 12] */ new Table(0, 0, -1, null), -/* NxS[ 13] */ new Table(0, 0, -1, null), -/* NxS[ 14] */ new Table(0, 0, -1, null), -/* NxS[ 15] */ new Table(0, 0, -1, null), -/* NxS[ 16] */ new Table(16, 1, -1, new sbyte[] {31}), -/* NxS[ 17] */ new Table(0, 0, -1, null), -/* NxS[ 18] */ new Table(0, 0, -1, null), -/* NxS[ 19] */ new Table(0, 0, -1, null), -/* NxS[ 20] */ new Table(0, 0, -1, null), -/* NxS[ 21] */ new Table(0, 0, -1, null), -/* NxS[ 22] */ new Table(0, 0, -1, null), -/* NxS[ 23] */ new Table(0, 0, -1, null), -/* NxS[ 24] */ new Table(25, 8, -1, new sbyte[] {24, 24, 24, 24, 24, -1, - -1, 24}), -/* NxS[ 25] */ new Table(16, 17, -1, new sbyte[] {28, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 25, 47, 29, 47, -1, -1, 27}), -/* NxS[ 26] */ new Table(0, 0, -1, null), -/* NxS[ 27] */ new Table(0, 0, -1, null), -/* NxS[ 28] */ new Table(26, 4, -1, new sbyte[] {28, -1, -1, 48}), -/* NxS[ 29] */ new Table(0, 0, -1, null), -/* NxS[ 30] */ new Table(26, 1, -1, new sbyte[] {30}), -/* NxS[ 31] */ new Table(0, 0, -1, null), -/* NxS[ 32] */ new Table(0, 0, -1, null), -/* NxS[ 33] */ new Table(0, 0, -1, null), -/* NxS[ 34] */ new Table(0, 0, -1, null), -/* NxS[ 35] */ new Table(0, 0, -1, null), -/* NxS[ 36] */ new Table(0, 0, -1, null), -/* NxS[ 37] */ new Table(0, 0, -1, null), -/* NxS[ 38] */ new Table(0, 0, -1, null), -/* NxS[ 39] */ new Table(0, 0, -1, null), -/* NxS[ 40] */ new Table(30, 30, 24, new sbyte[] {41, 42, 24, -1, 1, 2, - 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, - 19, 20, 21, 22, 23, -1, 24, 25}), -/* NxS[ 41] */ new Table(24, 7, 45, new sbyte[] {-1, 45, 45, 45, 45, 45, - 26}), -/* NxS[ 42] */ new Table(24, 8, 43, new sbyte[] {-1, 43, 43, 43, 43, 43, - 43, 26}), -/* NxS[ 43] */ new Table(24, 8, 44, new sbyte[] {-1, 44, 44, 44, 44, 44, - 44, 27}), -/* NxS[ 44] */ new Table(24, 8, 44, new sbyte[] {-1, 44, 44, 44, 44, 44, - 44, 26}), -/* NxS[ 45] */ new Table(24, 7, 46, new sbyte[] {-1, 46, 46, 46, 46, 46, - 27}), -/* NxS[ 46] */ new Table(24, 7, 46, new sbyte[] {-1, 46, 46, 46, 46, 46, - 26}), -/* NxS[ 47] */ new Table(26, 7, -1, new sbyte[] {47, 47, 29, 47, -1, -1, - 27}), -/* NxS[ 48] */ new Table(26, 13, -1, new sbyte[] {30, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 49, 49}), -/* NxS[ 49] */ new Table(26, 1, -1, new sbyte[] {30}), -/* NxS[ 50] */ new Table(6, 6, -1, new sbyte[] {51, -1, -1, -1, -1, 52}), -/* NxS[ 51] */ new Table(12, 1, -1, new sbyte[] {38}), -/* NxS[ 52] */ new Table(6, 1, -1, new sbyte[] {37}), -/* NxS[ 53] */ new Table(24, 1, -1, new sbyte[] {39}), - }; - -int NextState() { - if (code == ScanBuff.EndOfFile) - return eofNum; - else - unchecked { - int rslt; - int idx = MapC(code) - NxS[state].min; - if (idx < 0) idx += 33; - if ((uint)idx >= (uint)NxS[state].rng) rslt = NxS[state].dflt; - else rslt = NxS[state].nxt[idx]; - return rslt; - } -} - -#endregion - - -#if BACKUP - // ============================================================== - // == Nested struct used for backup in automata that do backup == - // ============================================================== - - struct Context // class used for automaton backup. - { - public int bPos; - public int rPos; // scanner.readPos saved value - public int cCol; - public int lNum; // Need this in case of backup over EOL. - public int state; - public int cChr; - } - - private Context ctx = new Context(); -#endif // BACKUP - - // ============================================================== - // ==== Nested struct to support input switching in scanners ==== - // ============================================================== - - struct BufferContext { - internal ScanBuff buffSv; - internal int chrSv; - internal int cColSv; - internal int lNumSv; - } - - // ============================================================== - // ===== Private methods to save and restore buffer contexts ==== - // ============================================================== - - /// - /// This method creates a buffer context record from - /// the current buffer object, together with some - /// scanner state values. - /// - [SuppressMessage("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] - BufferContext MkBuffCtx() - { - BufferContext rslt; - rslt.buffSv = this.buffer; - rslt.chrSv = this.code; - rslt.cColSv = this.cCol; - rslt.lNumSv = this.lNum; - return rslt; - } - - /// - /// This method restores the buffer value and allied - /// scanner state from the given context record value. - /// - [SuppressMessage("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] - void RestoreBuffCtx(BufferContext value) - { - this.buffer = value.buffSv; - this.code = value.chrSv; - this.cCol = value.cColSv; - this.lNum = value.lNumSv; - } - // =================== End Nested classes ======================= - -#if !NOFILES - public Scanner(Stream file) { - SetSource(file, 0); // unicode option - } - - public Scanner(Stream file, string codepage) { - SetSource(file, CodePageHandling.GetCodePage(codepage)); - } - -#endif // !NOFILES - - public Scanner() { } - - private int readPos; - - void GetCode() - { - if (code == '\n') // This needs to be fixed for other conventions - // i.e. [\r\n\205\u2028\u2029] - { - cCol = -1; - lNum++; - } - readPos = buffer.Pos; - - // Now read new codepoint. - code = buffer.Read(); - if (code > ScanBuff.EndOfFile) - { -#if (!BYTEMODE) - if (code >= 0xD800 && code <= 0xDBFF) - { - int next = buffer.Read(); - if (next < 0xDC00 || next > 0xDFFF) - code = ScanBuff.UnicodeReplacementChar; - else - code = (0x10000 + (code & 0x3FF << 10) + (next & 0x3FF)); - } -#endif - cCol++; - } - } - - void MarkToken() - { -#if (!PERSIST) - buffer.Mark(); -#endif - tokPos = readPos; - tokLin = lNum; - tokCol = cCol; - } - - void MarkEnd() - { - tokTxt = null; - tokEPos = readPos; - tokELin = lNum; - tokECol = cCol; - } - - [SuppressMessage("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] - int Peek() - { - int rslt, codeSv = code, cColSv = cCol, lNumSv = lNum, bPosSv = buffer.Pos; - GetCode(); rslt = code; - lNum = lNumSv; cCol = cColSv; code = codeSv; buffer.Pos = bPosSv; - return rslt; - } - - // ============================================================== - // ===== Initialization of string-based input buffers ==== - // ============================================================== - - /// - /// Create and initialize a StringBuff buffer object for this scanner - /// - /// the input string - /// starting offset in the string - [SuppressMessage("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] - public void SetSource(string source, int offset) - { - this.buffer = ScanBuff.GetBuffer(source); - this.buffer.Pos = offset; - this.lNum = 0; - this.code = '\n'; // to initialize yyline, yycol and lineStart - GetCode(); - } - -#if !NOFILES - // ================ LineBuffer Initialization =================== - - /// - /// Create and initialize a LineBuff buffer object for this scanner - /// - /// the list of input strings - [SuppressMessage("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] - public void SetSource(IList source) - { - this.buffer = ScanBuff.GetBuffer(source); - this.code = '\n'; // to initialize yyline, yycol and lineStart - this.lNum = 0; - GetCode(); - } - - // =============== StreamBuffer Initialization ================== - - /// - /// Create and initialize a StreamBuff buffer object for this scanner. - /// StreamBuff is buffer for 8-bit byte files. - /// - /// the input byte stream - [SuppressMessage("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] - public void SetSource(Stream source) - { - this.buffer = ScanBuff.GetBuffer(source); - this.lNum = 0; - this.code = '\n'; // to initialize yyline, yycol and lineStart - GetCode(); - } - -#if !BYTEMODE - // ================ TextBuffer Initialization =================== - - /// - /// Create and initialize a TextBuff buffer object for this scanner. - /// TextBuff is a buffer for encoded unicode files. - /// - /// the input text file - /// Code page to use if file has - /// no BOM. For 0, use machine default; for -1, 8-bit binary - [SuppressMessage("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] - public void SetSource(Stream source, int fallbackCodePage) - { - this.buffer = ScanBuff.GetBuffer(source, fallbackCodePage); - this.lNum = 0; - this.code = '\n'; // to initialize yyline, yycol and lineStart - GetCode(); - } -#endif // !BYTEMODE -#endif // !NOFILES - - // ============================================================== - -#if BABEL - // - // Get the next token for Visual Studio - // - // "state" is the inout mode variable that maintains scanner - // state between calls, using the EolState property. In principle, - // if the calls of EolState are costly set could be called once - // only per line, at the start; and get called only at the end - // of the line. This needs more infrastructure ... - // - public int GetNext(ref int state, out int start, out int end) - { - Tokens next; - int s, e; - s = state; // state at start - EolState = state; - next = (Tokens)Scan(); - state = EolState; - e = state; // state at end; - start = tokPos; - end = tokEPos - 1; // end is the index of last char. - return (int)next; - } -#endif // BABEL - - // ======== AbstractScanner<> Implementation ========= - - [SuppressMessage("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] - [SuppressMessage("Microsoft.Naming", "CA1709:IdentifiersShouldBeCasedCorrectly", MessageId = "yylex")] - [SuppressMessage("Microsoft.Naming", "CA1704:IdentifiersShouldBeSpelledCorrectly", MessageId = "yylex")] - public override int yylex() - { - // parserMax is set by reflecting on the Tokens - // enumeration. If maxParseToken is defined - // that is used, otherwise int.MaxValue is used. - int next; - do { next = Scan(); } while (next >= parserMax); - return next; - } - - [SuppressMessage("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] - int yypos { get { return tokPos; } } - - [SuppressMessage("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] - int yyline { get { return tokLin; } } - - [SuppressMessage("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] - int yycol { get { return tokCol; } } - - [SuppressMessage("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] - [SuppressMessage("Microsoft.Naming", "CA1709:IdentifiersShouldBeCasedCorrectly", MessageId = "yytext")] - [SuppressMessage("Microsoft.Naming", "CA1704:IdentifiersShouldBeSpelledCorrectly", MessageId = "yytext")] - public string yytext - { - get - { - if (tokTxt == null) - tokTxt = buffer.GetString(tokPos, tokEPos); - return tokTxt; - } - } - - [SuppressMessage("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] - void yyless(int n) - { - buffer.Pos = tokPos; - // Must read at least one char, so set before start. - cCol = tokCol - 1; - GetCode(); - // Now ensure that line counting is correct. - lNum = tokLin; - // And count the rest of the text. - for (int i = 0; i < n; i++) GetCode(); - MarkEnd(); - } - - // - // It would be nice to count backward in the text - // but it does not seem possible to re-establish - // the correct column counts except by going forward. - // - [SuppressMessage("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] - void _yytrunc(int n) { yyless(yyleng - n); } - - // - // This is painful, but we no longer count - // codepoints. For the overwhelming majority - // of cases the single line code is fast, for - // the others, well, at least it is all in the - // buffer so no files are touched. Note that we - // can't use (tokEPos - tokPos) because of the - // possibility of surrogate pairs in the token. - // - [SuppressMessage("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] - [SuppressMessage("Microsoft.Naming", "CA1709:IdentifiersShouldBeCasedCorrectly", MessageId = "yyleng")] - [SuppressMessage("Microsoft.Naming", "CA1704:IdentifiersShouldBeSpelledCorrectly", MessageId = "yyleng")] - public int yyleng - { - get { -#if BYTEMODE - return tokEPos - tokPos; -#else - if (tokELin == tokLin) - return tokECol - tokCol; - else { - int ch; - int count = 0; - int save = buffer.Pos; - buffer.Pos = tokPos; - do { - ch = buffer.Read(); - if (!char.IsHighSurrogate((char)ch)) count++; - } while (buffer.Pos < tokEPos && ch != ScanBuff.EndOfFile); - buffer.Pos = save; - return count; - } -#endif // BYTEMODE - } - } - - // ============ methods available in actions ============== - - [SuppressMessage("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] - internal int YY_START { - get { return currentScOrd; } - set { currentScOrd = value; - currentStart = startState[value]; - } - } - - [SuppressMessage("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] - internal void BEGIN(int next) { - currentScOrd = next; - currentStart = startState[next]; - } - - // ============== The main tokenizer code ================= - - int Scan() - { - try { - for (; ; ) - { - int next; // next state to enter -#if BACKUP - Result rslt = Result.noMatch; -#endif // BACKUP -#if LEFTANCHORS - for (;;) - { - // Discard characters that do not start any pattern. - // Must check the left anchor condition after *every* GetCode! - state = ((cCol == 0) ? anchorState[currentScOrd] : currentStart); - if ((next = NextState()) != goStart) - break; // LOOP EXIT HERE... - GetCode(); - } - -#else // !LEFTANCHORS - state = currentStart; - while ((next = NextState()) == goStart) - // At this point, the current character has no - // transition from the current state. We discard - // the "no-match" char. In traditional LEX such - // characters are echoed to the console. - GetCode(); -#endif // LEFTANCHORS - // At last, a valid transition ... - MarkToken(); - state = next; - GetCode(); - - while ((next = NextState()) > eofNum) // Exit for goStart AND for eofNum -#if BACKUP - if (state <= maxAccept && next > maxAccept) // need to prepare backup data - { - // ctx is an object. The fields may be - // mutated by the call to Recurse2. - // On return the data in ctx is the - // *latest* accept state that was found. - - rslt = Recurse2(ref ctx, next); - if (rslt == Result.noMatch) - RestoreStateAndPos(ref ctx); - break; - } - else -#endif // BACKUP - { - state = next; - GetCode(); - } - if (state <= maxAccept) - { - MarkEnd(); -#region ActionSwitch -#pragma warning disable 162 - switch (state) - { - case eofNum: - switch (currentStart) { - case 50: -PT.AddError("Комментарий не закрыт", yylloc); - break; - } - if (yywrap()) - return (int)Tokens.EOF; - break; - case 1: -return (int)Tokens.COLON; - break; - case 2: -return (int)Tokens.EQ; - break; - case 3: -return (int)Tokens.SEMICOLUMN; - break; - case 4: -return (int)Tokens.MINUS; - break; - case 5: -return (int)Tokens.PLUS; - break; - case 6: -return (int)Tokens.MULT; - break; - case 7: -return (int)Tokens.DIVIDE; - break; - case 8: -return (int)Tokens.LT; - break; - case 9: -return (int)Tokens.GT; - break; - case 10: -return (int)Tokens.NE; - break; - case 11: -return (int)Tokens.LPAREN; - break; - case 12: -return (int)Tokens.RPAREN; - break; - case 13: -return (int)Tokens.COLUMN; - break; - case 14: -return (int)Tokens.NOT; - break; - case 15: -return (int)Tokens.AND; - break; - case 16: -return (int)Tokens.COMMA; - break; - case 17: -return (int)Tokens.EXCLAMATION; - break; - case 18: -return (int)Tokens.LBRACE; - break; - case 19: -return (int)Tokens.RBRACE; - break; - case 20: -return (int)Tokens.LBRACKET; - break; - case 21: -return (int)Tokens.RBRACKET; - break; - case 22: -return (int)Tokens.PIPE; - break; - case 23: -return (int)Tokens.INVISIBLE; - break; - case 24: -int res = Keywords.KeywordOrIDToken(yytext); - if (res == (int)Tokens.ID){ - yylval.sVal = yytext; - PT.LastIdentificator = yytext; - } - return res; - break; - case 25: -int tryParseInt; - if (int.TryParse(yytext, out tryParseInt)){ - yylval.iVal = tryParseInt; - return (int)Tokens.INTNUM; - } - System.Int64 tryParseLong; - if (System.Int64.TryParse(yytext, out tryParseLong)){ - yylval.lVal = tryParseLong; - return (int)Tokens.LONGINTNUM; - } - PT.AddError("Слишком длинное целое", yylloc); - break; - case 26: -yylval.sVal = PT.GetStringContent(yytext); - return (int)Tokens.STRING_CONST; - break; - case 27: -try{ - yylval.cVal = PT.GetStringContent(yytext)[0]; - return (int)Tokens.CHAR_CONST; - } - catch (System.ArgumentException){ - PT.AddError("Некорректный код символа", yylloc); - } - break; - case 28: - case 30: -double tryParseDouble; - var correctDouble = PT.GetCorrectDoubleStr(yytext); - if (double.TryParse(correctDouble, out tryParseDouble)){ - yylval.rVal = tryParseDouble; - return (int)Tokens.REALNUM; - } - PT.AddError("Слишком длинное вещественное", yylloc); - break; - case 29: -var _yytext = yytext.Substring(0, yytext.Length - 1); - int tryParseHexInt; - if (int.TryParse(_yytext, System.Globalization.NumberStyles.AllowHexSpecifier, null, out tryParseHexInt)){ - yylval.iVal = tryParseHexInt; - return (int)Tokens.INTNUM; - } - System.Int64 tryParseHexLong; - if (System.Int64.TryParse(_yytext, System.Globalization.NumberStyles.AllowHexSpecifier, null, out tryParseHexLong)){ - yylval.lVal = tryParseHexLong; - return (int)Tokens.LONGINTNUM; - } - PT.AddError("Слишком длинное шестнадцатеричное целое", yylloc); - break; - case 31: -return (int)Tokens.DOUBLEPOINT; - break; - case 32: -BEGIN(COMMENT); - mlCommentCnt = 1; - break; - case 33: -return (int)Tokens.GE; - break; - case 34: -return (int)Tokens.LE; - break; - case 35: -BEGIN(COMMENT_S); - break; - case 36: -return (int)Tokens.ASSIGN; - break; - case 37: -++mlCommentCnt; - break; - case 38: ---mlCommentCnt; - if (mlCommentCnt == 0) - BEGIN(INITIAL); - break; - case 39: -BEGIN(INITIAL); - break; - default: - break; - } -#pragma warning restore 162 -#endregion - } - } - } // end try - finally { -// User-specified epilog to scan() -yylloc = new QUT.Gppg.LexLocation(tokLin, tokCol, tokELin, tokECol); -// End, user-specified epilog - } // end finally - } - -#if BACKUP - Result Recurse2(ref Context ctx, int next) - { - // Assert: at entry "state" is an accept state AND - // NextState(state, code) != goStart AND - // NextState(state, code) is not an accept state. - // - SaveStateAndPos(ref ctx); - state = next; - GetCode(); - - while ((next = NextState()) > eofNum) - { - if (state <= maxAccept && next > maxAccept) // need to update backup data - SaveStateAndPos(ref ctx); - state = next; - if (state == eofNum) return Result.accept; - GetCode(); - } - return (state <= maxAccept ? Result.accept : Result.noMatch); - } - - void SaveStateAndPos(ref Context ctx) - { - ctx.bPos = buffer.Pos; - ctx.rPos = readPos; - ctx.cCol = cCol; - ctx.lNum = lNum; - ctx.state = state; - ctx.cChr = code; - } - - void RestoreStateAndPos(ref Context ctx) - { - buffer.Pos = ctx.bPos; - readPos = ctx.rPos; - cCol = ctx.cCol; - lNum = ctx.lNum; - state = ctx.state; - code = ctx.cChr; - } - -#endif // BACKUP - - // ============= End of the tokenizer code ================ - -#if STACK - [SuppressMessage("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] - internal void yy_clear_stack() { scStack.Clear(); } - - [SuppressMessage("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] - internal int yy_top_state() { return scStack.Peek(); } - - internal void yy_push_state(int state) - { - scStack.Push(currentScOrd); - BEGIN(state); - } - - internal void yy_pop_state() - { - // Protect against input errors that pop too far ... - if (scStack.Count > 0) { - int newSc = scStack.Pop(); - BEGIN(newSc); - } // Otherwise leave stack unchanged. - } - #endif // STACK - - [SuppressMessage("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] - internal void ECHO() { Console.Out.Write(yytext); } - -#region UserCodeSection - -static int mlCommentCnt = 0; - - public override void yyerror(string format, params object[] args) - { - string errorMsg = PT.CreateErrorString(args); - PT.AddError(errorMsg,yylloc); - } - -// Статический класс, определяющий ключевые слова языка -public static class Keywords -{ - private static Dictionary keywords = new Dictionary(); - - static Keywords() - { - keywords.Add("TRUE", (int)Tokens.TRUE); - keywords.Add("FALSE", (int)Tokens.FALSE); - keywords.Add("ODD", (int)Tokens.ODD); - keywords.Add("OR", (int)Tokens.OR); - keywords.Add("DIV", (int)Tokens.DIV); - keywords.Add("MOD", (int)Tokens.MOD); - keywords.Add("BEGIN", (int)Tokens.BEGIN); - keywords.Add("END", (int)Tokens.END); - keywords.Add("MODULE", (int)Tokens.MODULE); - keywords.Add("CONST", (int)Tokens.CONST); - keywords.Add("VAR", (int)Tokens.VAR); - keywords.Add("TYPE", (int)Tokens.TYPE); - keywords.Add("ARRAY", (int)Tokens.ARRAY); - keywords.Add("OF", (int)Tokens.OF); - keywords.Add("RECORD", (int)Tokens.RECORD); - keywords.Add("POINTER", (int)Tokens.POINTER); - keywords.Add("IF", (int)Tokens.IF); - keywords.Add("THEN", (int)Tokens.THEN); - keywords.Add("ELSE", (int)Tokens.ELSE); - keywords.Add("ELSEIF", (int)Tokens.ELSEIF); - keywords.Add("WHILE", (int)Tokens.WHILE); - keywords.Add("DO", (int)Tokens.DO); - keywords.Add("REPEAT", (int)Tokens.REPEAT); - keywords.Add("UNTIL", (int)Tokens.UNTIL); - keywords.Add("FOR", (int)Tokens.FOR); - keywords.Add("TO", (int)Tokens.TO); - keywords.Add("BY", (int)Tokens.BY); - keywords.Add("CASE", (int)Tokens.CASE); - keywords.Add("PROCEDURE", (int)Tokens.PROCEDURE); - } - public static int KeywordOrIDToken(string s) - { - if (keywords.ContainsKey(s)) - return keywords[s]; - else - return (int)Tokens.ID; - } -} - -#endregion - } // end class $Scanner - -// ============================================================== -// -// This code automatically produced from an embedded resource. -// Do not edit this file, or it will become incompatible with -// the specification from which it was generated. -// -// ============================================================== - -// Code copied from GPLEX embedded resource - [Serializable] - public class BufferException : Exception - { - public BufferException() { } - public BufferException(string message) : base(message) { } - public BufferException(string message, Exception innerException) - : base(message, innerException) { } - protected BufferException(SerializationInfo info, StreamingContext context) - : base(info, context) { } - } - - public abstract class ScanBuff - { - private string fileNm; - - public const int EndOfFile = -1; - public const int UnicodeReplacementChar = 0xFFFD; - - public bool IsFile { get { return (fileNm != null); } } - public string FileName { get { return fileNm; } set { fileNm = value; } } - - public abstract int Pos { get; set; } - public abstract int Read(); - public virtual void Mark() { } - - public abstract string GetString(int begin, int limit); - - public static ScanBuff GetBuffer(string source) - { - return new StringBuffer(source); - } - - public static ScanBuff GetBuffer(IList source) - { - return new LineBuffer(source); - } - - public static ScanBuff GetBuffer(Stream source) - { - return new BuildBuffer(source); - } - -#if (!BYTEMODE) - public static ScanBuff GetBuffer(Stream source, int fallbackCodePage) - { - return new BuildBuffer(source, fallbackCodePage); - } -#endif - } - - #region Buffer classes - - // ============================================================== - // ===== Definitions for various ScanBuff derived classes ==== - // ============================================================== - // =============== String input ================ - // ============================================================== - - /// - /// This class reads characters from a single string as - /// required, for example, by Visual Studio language services - /// - sealed class StringBuffer : ScanBuff - { - string str; // input buffer - int bPos; // current position in buffer - int sLen; - - public StringBuffer(string source) - { - this.str = source; - this.sLen = source.Length; - this.FileName = null; - } - - public override int Read() - { - if (bPos < sLen) return str[bPos++]; - else if (bPos == sLen) { bPos++; return '\n'; } // one strike, see new line - else { bPos++; return EndOfFile; } // two strikes and you're out! - } - - public override string GetString(int begin, int limit) - { - // "limit" can be greater than sLen with the BABEL - // option set. Read returns a "virtual" EOL if - // an attempt is made to read past the end of the - // string buffer. Without the guard any attempt - // to fetch yytext for a token that includes the - // EOL will throw an index exception. - if (limit > sLen) limit = sLen; - if (limit <= begin) return ""; - else return str.Substring(begin, limit - begin); - } - - public override int Pos - { - get { return bPos; } - set { bPos = value; } - } - - public override string ToString() { return "StringBuffer"; } - } - - // ============================================================== - // The LineBuff class contributed by Nigel Horspool, - // nigelh@cs.uvic.cs - // ============================================================== - - sealed class LineBuffer : ScanBuff - { - IList line; // list of source lines from a file - int numLines; // number of strings in line list - string curLine; // current line in that list - int cLine; // index of current line in the list - int curLen; // length of current line - int curLineStart; // position of line start in whole file - int curLineEnd; // position of line end in whole file - int maxPos; // max position ever visited in whole file - int cPos; // ordinal number of code in source - - // Constructed from a list of strings, one per source line. - // The lines have had trailing '\n' characters removed. - public LineBuffer(IList lineList) - { - line = lineList; - numLines = line.Count; - cPos = curLineStart = 0; - curLine = (numLines > 0 ? line[0] : ""); - maxPos = curLineEnd = curLen = curLine.Length; - cLine = 1; - FileName = null; - } - - public override int Read() - { - if (cPos < curLineEnd) - return curLine[cPos++ - curLineStart]; - if (cPos++ == curLineEnd) - return '\n'; - if (cLine >= numLines) - return EndOfFile; - curLine = line[cLine]; - curLen = curLine.Length; - curLineStart = curLineEnd + 1; - curLineEnd = curLineStart + curLen; - if (curLineEnd > maxPos) - maxPos = curLineEnd; - cLine++; - return curLen > 0 ? curLine[0] : '\n'; - } - - // To speed up searches for the line containing a position - private int cachedPosition; - private int cachedIxdex; - private int cachedLineStart; - - // Given a position pos within the entire source, the results are - // ix -- the index of the containing line - // lstart -- the position of the first character on that line - private void findIndex(int pos, out int ix, out int lstart) - { - if (pos >= cachedPosition) - { - ix = cachedIxdex; lstart = cachedLineStart; - } - else - { - ix = lstart = 0; - } - for (; ; ) - { - int len = line[ix].Length + 1; - if (pos < lstart + len) break; - lstart += len; - ix++; - } - cachedPosition = pos; - cachedIxdex = ix; - cachedLineStart = lstart; - } - - public override string GetString(int begin, int limit) - { - if (begin >= maxPos || limit <= begin) return ""; - int endIx, begIx, endLineStart, begLineStart; - findIndex(begin, out begIx, out begLineStart); - int begCol = begin - begLineStart; - findIndex(limit, out endIx, out endLineStart); - int endCol = limit - endLineStart; - string s = line[begIx]; - if (begIx == endIx) - { - // the usual case, substring all on one line - return (endCol <= s.Length) ? - s.Substring(begCol, endCol - begCol) - : s.Substring(begCol) + "\n"; - } - // the string spans multiple lines, yuk! - StringBuilder sb = new StringBuilder(); - if (begCol < s.Length) - sb.Append(s.Substring(begCol)); - for (; ; ) - { - sb.Append("\n"); - s = line[++begIx]; - if (begIx >= endIx) break; - sb.Append(s); - } - if (endCol <= s.Length) - { - sb.Append(s.Substring(0, endCol)); - } - else - { - sb.Append(s); - sb.Append("\n"); - } - return sb.ToString(); - } - - public override int Pos - { - get { return cPos; } - set - { - cPos = value; - findIndex(cPos, out cLine, out curLineStart); - curLine = line[cLine]; - curLineEnd = curLineStart + curLine.Length; - } - } - - public override string ToString() { return "LineBuffer"; } - } - - - // ============================================================== - // ===== class BuildBuff : for unicode text files ======== - // ============================================================== - - class BuildBuffer : ScanBuff - { - // Double buffer for char stream. - class BufferElement - { - StringBuilder bldr = new StringBuilder(); - StringBuilder next = new StringBuilder(); - int minIx; - int maxIx; - int brkIx; - bool appendToNext; - - internal BufferElement() { } - - internal int MaxIndex { get { return maxIx; } } - // internal int MinIndex { get { return minIx; } } - - internal char this[int index] - { - get - { - if (index < minIx || index >= maxIx) - throw new BufferException("Index was outside data buffer"); - else if (index < brkIx) - return bldr[index - minIx]; - else - return next[index - brkIx]; - } - } - - internal void Append(char[] block, int count) - { - maxIx += count; - if (appendToNext) - this.next.Append(block, 0, count); - else - { - this.bldr.Append(block, 0, count); - brkIx = maxIx; - appendToNext = true; - } - } - - internal string GetString(int start, int limit) - { - if (limit <= start) - return ""; - if (start >= minIx && limit <= maxIx) - if (limit < brkIx) // String entirely in bldr builder - return bldr.ToString(start - minIx, limit - start); - else if (start >= brkIx) // String entirely in next builder - return next.ToString(start - brkIx, limit - start); - else // Must do a string-concatenation - return - bldr.ToString(start - minIx, brkIx - start) + - next.ToString(0, limit - brkIx); - else - throw new BufferException("String was outside data buffer"); - } - - internal void Mark(int limit) - { - if (limit > brkIx + 16) // Rotate blocks - { - StringBuilder temp = bldr; - bldr = next; - next = temp; - next.Length = 0; - minIx = brkIx; - brkIx = maxIx; - } - } - } - - BufferElement data = new BufferElement(); - - int bPos; // Postion index in the StringBuilder - BlockReader NextBlk; // Delegate that serves char-arrays; - - private string EncodingName - { - get - { - StreamReader rdr = NextBlk.Target as StreamReader; - return (rdr == null ? "raw-bytes" : rdr.CurrentEncoding.BodyName); - } - } - - public BuildBuffer(Stream stream) - { - FileStream fStrm = (stream as FileStream); - if (fStrm != null) FileName = fStrm.Name; - NextBlk = BlockReaderFactory.Raw(stream); - } - -#if (!BYTEMODE) - public BuildBuffer(Stream stream, int fallbackCodePage) - { - FileStream fStrm = (stream as FileStream); - if (fStrm != null) FileName = fStrm.Name; - NextBlk = BlockReaderFactory.Get(stream, fallbackCodePage); - } -#endif - - /// - /// Marks a conservative lower bound for the buffer, - /// allowing space to be reclaimed. If an application - /// needs to call GetString at arbitrary past locations - /// in the input stream, Mark() is not called. - /// - public override void Mark() { data.Mark(bPos - 2); } - - public override int Pos - { - get { return bPos; } - set { bPos = value; } - } - - - /// - /// Read returns the ordinal number of the next char, or - /// EOF (-1) for an end of stream. Note that the next - /// code point may require *two* calls of Read(). - /// - /// - public override int Read() - { - // - // Characters at positions - // [data.offset, data.offset + data.bldr.Length) - // are available in data.bldr. - // - if (bPos < data.MaxIndex) - { - // ch0 cannot be EOF - return (int)data[bPos++]; - } - else // Read from underlying stream - { - // Experimental code, blocks of page size - char[] chrs = new char[4096]; - int count = NextBlk(chrs, 0, 4096); - if (count == 0) - return EndOfFile; - else - { - data.Append(chrs, count); - return (int)data[bPos++]; - } - } - } - - public override string GetString(int begin, int limit) - { - return data.GetString(begin, limit); - } - - public override string ToString() - { - return "StringBuilder buffer, encoding: " + this.EncodingName; - } - } - - // =============== End ScanBuff-derived classes ================== - - public delegate int BlockReader(char[] block, int index, int number); - - // A delegate factory, serving up a delegate that - // reads a block of characters from the underlying - // encoded stream, via a StreamReader object. - // - public static class BlockReaderFactory - { - public static BlockReader Raw(Stream stream) - { - return delegate(char[] block, int index, int number) - { - byte[] b = new byte[number]; - int count = stream.Read(b, 0, number); - int i = 0; - int j = index; - for (; i < count; i++, j++) - block[j] = (char)b[i]; - return count; - }; - } - -#if (!BYTEMODE) - public static BlockReader Get(Stream stream, int fallbackCodePage) - { - Encoding encoding; - int preamble = Preamble(stream); - - if (preamble != 0) // There is a valid BOM here! - encoding = Encoding.GetEncoding(preamble); - else if (fallbackCodePage == -1) // Fallback is "raw" bytes - return Raw(stream); - else if (fallbackCodePage != -2) // Anything but "guess" - encoding = Encoding.GetEncoding(fallbackCodePage); - else // This is the "guess" option - { - int guess = new Guesser(stream).GuessCodePage(); - stream.Seek(0, SeekOrigin.Begin); - if (guess == -1) // ==> this is a 7-bit file - encoding = Encoding.ASCII; - else if (guess == 65001) - encoding = Encoding.UTF8; - else // ==> use the machine default - encoding = Encoding.Default; - } - StreamReader reader = new StreamReader(stream, encoding); - return reader.Read; - } - - static int Preamble(Stream stream) - { - int b0 = stream.ReadByte(); - int b1 = stream.ReadByte(); - - if (b0 == 0xfe && b1 == 0xff) - return 1201; // UTF16BE - if (b0 == 0xff && b1 == 0xfe) - return 1200; // UTF16LE - - int b2 = stream.ReadByte(); - if (b0 == 0xef && b1 == 0xbb && b2 == 0xbf) - return 65001; // UTF8 - // - // There is no unicode preamble, so we - // return denoter for the machine default. - // - stream.Seek(0, SeekOrigin.Begin); - return 0; - } -#endif // !BYTEMODE - } - #endregion Buffer classes - - // ============================================================== - // ============ class CodePageHandling ============= - // ============================================================== - - public static class CodePageHandling - { - public static int GetCodePage(string option) - { - string command = option.ToUpperInvariant(); - if (command.StartsWith("CodePage:", StringComparison.OrdinalIgnoreCase)) - command = command.Substring(9); - try - { - if (command.Equals("RAW")) - return -1; - else if (command.Equals("GUESS")) - return -2; - else if (command.Equals("DEFAULT")) - return 0; - else if (char.IsDigit(command[0])) - return int.Parse(command, CultureInfo.InvariantCulture); - else - { - Encoding enc = Encoding.GetEncoding(command); - return enc.CodePage; - } - } - catch (FormatException) - { - Console.Error.WriteLine( - "Invalid format \"{0}\", using machine default", option); - } - catch (ArgumentException) - { - Console.Error.WriteLine( - "Unknown code page \"{0}\", using machine default", option); - } - return 0; - } - } -#region guesser -#if (!BYTEMODE) - // ============================================================== - // ============ Encoding Guesser ============= - // ============================================================== - - /// - /// This class provides a simple finite state automaton that - /// scans the file looking for (1) valid UTF-8 byte patterns, - /// (2) bytes >= 0x80 which are not part of a UTF-8 sequence. - /// The method then guesses whether it is UTF-8 or maybe some - /// local machine default encoding. This works well for the - /// various Latin encodings. - /// - internal class Guesser - { - ScanBuff buffer; - - public int GuessCodePage() { return Scan(); } - - const int maxAccept = 10; - const int initial = 0; - const int eofNum = 0; - const int goStart = -1; - const int INITIAL = 0; - const int EndToken = 0; - - #region user code - /* - * Reads the bytes of a file to determine if it is - * UTF-8 or a single-byte code page file. - */ - public long utfX; - public long uppr; - #endregion user code - - int state; - int currentStart = startState[0]; - int code; - - #region ScannerTables - static int[] startState = new int[] { 11, 0 }; - - #region CharacterMap - static sbyte[] map = new sbyte[256] { -/* '\0' */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -/* '\x10' */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -/* '\x20' */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -/* '0' */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -/* '@' */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -/* 'P' */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -/* '`' */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -/* 'p' */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -/* '\x80' */ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, -/* '\x90' */ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, -/* '\xA0' */ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, -/* '\xB0' */ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, -/* '\xC0' */ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, -/* '\xD0' */ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, -/* '\xE0' */ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, -/* '\xF0' */ 4, 4, 4, 4, 4, 4, 4, 4, 5, 5, 5, 5, 5, 5, 5, 5 }; - #endregion - - static sbyte[][] nextState = new sbyte[][] { - new sbyte[] {0, 0, 0, 0, 0, 0}, - new sbyte[] {-1, -1, 10, -1, -1, -1}, - new sbyte[] {-1, -1, -1, -1, -1, -1}, - new sbyte[] {-1, -1, 8, -1, -1, -1}, - new sbyte[] {-1, -1, 5, -1, -1, -1}, - new sbyte[] {-1, -1, 6, -1, -1, -1}, - new sbyte[] {-1, -1, 7, -1, -1, -1}, - null, - new sbyte[] {-1, -1, 9, -1, -1, -1}, - null, - null, - new sbyte[] {-1, 1, 2, 3, 4, 2} - }; - - - [SuppressMessage("Microsoft.Performance", "CA1810:InitializeReferenceTypeStaticFieldsInline")] - // Reason for suppression: cannot have self-reference in array initializer. - static Guesser() - { - nextState[7] = nextState[2]; - nextState[9] = nextState[2]; - nextState[10] = nextState[2]; - } - - int NextState() - { - if (code == ScanBuff.EndOfFile) - return eofNum; - else - return nextState[state][map[code]]; - } - #endregion - - public Guesser(System.IO.Stream file) { SetSource(file); } - - public void SetSource(System.IO.Stream source) - { - this.buffer = new BuildBuffer(source); - code = buffer.Read(); - } - - int Scan() - { - for (; ; ) - { - int next; - state = currentStart; - while ((next = NextState()) == goStart) - code = buffer.Read(); - - state = next; - code = buffer.Read(); - - while ((next = NextState()) > eofNum) - { - state = next; - code = buffer.Read(); - } - if (state <= maxAccept) - { - #region ActionSwitch -#pragma warning disable 162 - switch (state) - { - case eofNum: - switch (currentStart) - { - case 11: - if (utfX == 0 && uppr == 0) return -1; /* raw ascii */ - else if (uppr * 10 > utfX) return 0; /* default code page */ - else return 65001; /* UTF-8 encoding */ - break; - } - return EndToken; - case 1: // Recognized '{Upper128}', Shortest string "\xC0" - case 2: // Recognized '{Upper128}', Shortest string "\x80" - case 3: // Recognized '{Upper128}', Shortest string "\xE0" - case 4: // Recognized '{Upper128}', Shortest string "\xF0" - uppr++; - break; - case 5: // Recognized '{Utf8pfx4}{Utf8cont}', Shortest string "\xF0\x80" - uppr += 2; - break; - case 6: // Recognized '{Utf8pfx4}{Utf8cont}{2}', Shortest string "\xF0\x80\x80" - uppr += 3; - break; - case 7: // Recognized '{Utf8pfx4}{Utf8cont}{3}', Shortest string "\xF0\x80\x80\x80" - utfX += 3; - break; - case 8: // Recognized '{Utf8pfx3}{Utf8cont}', Shortest string "\xE0\x80" - uppr += 2; - break; - case 9: // Recognized '{Utf8pfx3}{Utf8cont}{2}', Shortest string "\xE0\x80\x80" - utfX += 2; - break; - case 10: // Recognized '{Utf8pfx2}{Utf8cont}', Shortest string "\xC0\x80" - utfX++; - break; - default: - break; - } -#pragma warning restore 162 - #endregion - } - } - } - } // end class Guesser - -#endif // !BYTEMODE -#endregion - -// End of code copied from embedded resource - -} // end namespace diff --git a/Grammars/Oberon10Independent (by Juliet)/oberon00.lex b/Grammars/Oberon10Independent (by Juliet)/oberon00.lex deleted file mode 100644 index ac9eb1fa0..000000000 --- a/Grammars/Oberon10Independent (by Juliet)/oberon00.lex +++ /dev/null @@ -1,190 +0,0 @@ -%namespace GPPGParserScanner - -%using PascalABCCompiler.Oberon00Parser; - -Digit [0-9] -HexDigit {Digit}|[A-F] -Alpha [a-zA-Z_] -EndLine \n // -AlphaDigit {Alpha}|{Digit} -ScaleFactor [ED][\+\-]?{Digit}+ -HEXINTNUM {Digit}{HexDigit}*H -INTNUM {Digit}+ -REALNUM {Digit}+\.{Digit}*{ScaleFactor}? -ID {Alpha}{AlphaDigit}* -CHARACTER '[^'\n]'|\"[^\"\n]\"|{Digit}{HexDigit}*X -STRING '[^'\n]*'|\"[^\"\n]*\" - - -%x COMMENT // -%x COMMENT_S // - -%% - -":=" { return (int)Tokens.ASSIGN; } -";" { return (int)Tokens.SEMICOLUMN; } -"-" { return (int)Tokens.MINUS; } -"+" { return (int)Tokens.PLUS; } -"*" { return (int)Tokens.MULT; } -"/" { return (int)Tokens.DIVIDE; } -"<" { return (int)Tokens.LT; } -">" { return (int)Tokens.GT; } -"<=" { return (int)Tokens.LE; } -">=" { return (int)Tokens.GE; } -"=" { return (int)Tokens.EQ; } -"#" { return (int)Tokens.NE; } -"(" { return (int)Tokens.LPAREN; } -")" { return (int)Tokens.RPAREN; } -"," { return (int)Tokens.COLUMN; } -"~" { return (int)Tokens.NOT; } -"&" { return (int)Tokens.AND; } -"." { return (int)Tokens.COMMA; } -":" { return (int)Tokens.COLON; } -"!" { return (int)Tokens.EXCLAMATION; } -"{" { return (int)Tokens.LBRACE; } -"}" { return (int)Tokens.RBRACE; } -"[" { return (int)Tokens.LBRACKET; } -"]" { return (int)Tokens.RBRACKET; } -".." { return (int)Tokens.DOUBLEPOINT; } -"|" { return (int)Tokens.PIPE; } -\x01 { return (int)Tokens.INVISIBLE; } - -"//" { BEGIN(COMMENT_S);} // - {EndLine} { BEGIN(INITIAL);} -"(*" { // - BEGIN(COMMENT); - mlCommentCnt = 1; -} - "(*" { ++mlCommentCnt; } - "*)" { - --mlCommentCnt; - if (mlCommentCnt == 0) - BEGIN(INITIAL); -} - <> { - PT.AddError(" ", yylloc); -} - -{ID} { - int res = Keywords.KeywordOrIDToken(yytext); - if (res == (int)Tokens.ID){ - yylval.sVal = yytext; - PT.LastIdentificator = yytext; - } - return res; -} - -{INTNUM} { - int tryParseInt; - if (int.TryParse(yytext, out tryParseInt)){ - yylval.iVal = tryParseInt; - return (int)Tokens.INTNUM; - } - System.Int64 tryParseLong; - if (System.Int64.TryParse(yytext, out tryParseLong)){ - yylval.lVal = tryParseLong; - return (int)Tokens.LONGINTNUM; - } - PT.AddError(" ", yylloc); -} - -{HEXINTNUM} { - var _yytext = yytext.Substring(0, yytext.Length - 1); - int tryParseHexInt; - if (int.TryParse(_yytext, System.Globalization.NumberStyles.AllowHexSpecifier, null, out tryParseHexInt)){ - yylval.iVal = tryParseHexInt; - return (int)Tokens.INTNUM; - } - System.Int64 tryParseHexLong; - if (System.Int64.TryParse(_yytext, System.Globalization.NumberStyles.AllowHexSpecifier, null, out tryParseHexLong)){ - yylval.lVal = tryParseHexLong; - return (int)Tokens.LONGINTNUM; - } - PT.AddError(" ", yylloc); -} - -{REALNUM} { - double tryParseDouble; - var correctDouble = PT.GetCorrectDoubleStr(yytext); - if (double.TryParse(correctDouble, out tryParseDouble)){ - yylval.rVal = tryParseDouble; - return (int)Tokens.REALNUM; - } - PT.AddError(" ", yylloc); -} - -{CHARACTER} { - try{ - yylval.cVal = PT.GetStringContent(yytext)[0]; - return (int)Tokens.CHAR_CONST; - } - catch (System.ArgumentException){ - PT.AddError(" ", yylloc); - } -} -{STRING} { - yylval.sVal = PT.GetStringContent(yytext); - return (int)Tokens.STRING_CONST; -} - -%{ - yylloc = new QUT.Gppg.LexLocation(tokLin, tokCol, tokELin, tokECol); -%} - -%% - -// -static int mlCommentCnt = 0; - - public override void yyerror(string format, params object[] args) - { - string errorMsg = PT.CreateErrorString(args); - PT.AddError(errorMsg,yylloc); - } - -// , -public static class Keywords -{ - private static Dictionary keywords = new Dictionary(); - - static Keywords() - { - keywords.Add("TRUE", (int)Tokens.TRUE); - keywords.Add("FALSE", (int)Tokens.FALSE); - keywords.Add("ODD", (int)Tokens.ODD); - keywords.Add("OR", (int)Tokens.OR); - keywords.Add("DIV", (int)Tokens.DIV); - keywords.Add("MOD", (int)Tokens.MOD); - keywords.Add("BEGIN", (int)Tokens.BEGIN); - keywords.Add("END", (int)Tokens.END); - keywords.Add("MODULE", (int)Tokens.MODULE); - keywords.Add("CONST", (int)Tokens.CONST); - keywords.Add("VAR", (int)Tokens.VAR); - keywords.Add("TYPE", (int)Tokens.TYPE); - keywords.Add("ARRAY", (int)Tokens.ARRAY); - keywords.Add("OF", (int)Tokens.OF); - keywords.Add("RECORD", (int)Tokens.RECORD); - keywords.Add("POINTER", (int)Tokens.POINTER); - keywords.Add("IF", (int)Tokens.IF); - keywords.Add("THEN", (int)Tokens.THEN); - keywords.Add("ELSE", (int)Tokens.ELSE); - keywords.Add("ELSEIF", (int)Tokens.ELSEIF); - keywords.Add("WHILE", (int)Tokens.WHILE); - keywords.Add("DO", (int)Tokens.DO); - keywords.Add("REPEAT", (int)Tokens.REPEAT); - keywords.Add("UNTIL", (int)Tokens.UNTIL); - keywords.Add("FOR", (int)Tokens.FOR); - keywords.Add("TO", (int)Tokens.TO); - keywords.Add("BY", (int)Tokens.BY); - keywords.Add("CASE", (int)Tokens.CASE); - keywords.Add("PROCEDURE", (int)Tokens.PROCEDURE); - } - public static int KeywordOrIDToken(string s) - { - if (keywords.ContainsKey(s)) - return keywords[s]; - else - return (int)Tokens.ID; - } -} - diff --git a/Grammars/Oberon10Independent (by Juliet)/oberon00.lst b/Grammars/Oberon10Independent (by Juliet)/oberon00.lst deleted file mode 100644 index 92b1f2990..000000000 --- a/Grammars/Oberon10Independent (by Juliet)/oberon00.lst +++ /dev/null @@ -1,906 +0,0 @@ - -// ========================================================================== -// GPPG error listing for yacc source file -// ========================================================================== -// Version: 1.3.6 -// Machine: SSM -// DateTime: 13.03.2013 16:49:30 -// UserName: Станислав -// ========================================================================== - - -%{ -// Ýòè îáúÿâëåíèÿ äîáàâëÿþòñÿ â êëàññ GPPGParser, ïðåäñòàâëÿþùèé ñîáîé ïàðñåð, ãåíåðèðóåìûé ñèñòåìîé gppg - public syntax_tree_node root; // Êîðíåâîé óçåë ñèíòàêñè÷åñêîãî äåðåâà - public GPPGParser(AbstractScanner scanner) : base(scanner) { } -%} - -%output=oberon00yacc.cs - -%parsertype GPPGParser - -%union - { - public bool bVal; - public string sVal; - public int iVal; - public long lVal; // Äëèííîå öåëîå - public char cVal; - public double rVal; - public pascal_set_constant sc; // Êîíñòàíòà - ìíîæåñòâî - public named_type_reference ntr; // Èìåíîâàííîå îïðåäåëåíèå òèïà - public type_definition tdef; // Ñàì òèï - public diapason dpsn; // Òèï äèàïàçîí - public array_type arrt; // Òèï ìàññèâ - public class_definition cldef; // Îïðåäåëåíèå çàïèñè - public indexers_types indts; // Òèï òèïû èíäåêñîâ ìàññèâà - public ref_type rft; // Òèï óêàçàòåëü - public ident_list il; // Ñïèñîê èäåíòèôèêàòîðîâ - public ident id; // Èäåíòèôèêàòîð - public oberon_ident_with_export_marker obrid; // Îáåðîíîâñêèé óòî÷íåííûé èäåíòèôèêàòîð - public oberon_export_marker obrem; // Îáåðîíîâñêàÿ ýêñïîðòíàÿ ìåòêà - public var_def_statement vds; // Îïèñàíèå ïåðåìåííûõ - public variable_definitions vdss; // Ñåêöèÿ îïèñàíèÿ ïåðåìåííûõ - public type_declarations td; // Ñåêöèÿ îïðåäåëåíèÿ òèïîâ - public type_declaration tdec; // Îïèñàíèå òèïà - public expression ex; // Âûðàæåíèå - public expression_list el; // Ñïèñîê âûðàæåíèé - public Operators ops; // Îïåðàòîðû (îïåðàöèè) - public block bl; // Ïðîãðàììíûé áëîê - public statement st; // Îïåðàòîð ïðîãðàììíûé - public statement_list sl; // Ñïèñîê îïåðàòîðîâ - public case_variants cvars; // Ñïèñîê âàðèàíòîâ îïåðàòîðà CASE - public case_variant cvar; // Âàðèàíò îïåðàòîðà CASE - public declaration decsec; // Îïèñàíèå - public declarations decl; // Ñïèñîê îïèñàíèé - public simple_const_definition scd; // Îïðåäåëåíèå êîíñòàíòû - public consts_definitions_list cdl; // Ñïèñîê îïèñàíèé êîíñòàíò - public procedure_definition pd; // Îïèñàíèå ïðîöåäóðû - public dot_node dn; // Óçåë â òî÷å÷íîé íîòàöèè - public addressed_value adrv; // Àäðåñîâàííîå çíà÷åíèå - } - -%using PascalABCCompiler.SyntaxTree -%using PascalABCCompiler.Errors -%using PascalABCCompiler.Oberon00Parser - -%namespace GPPGParserScanner - -%start module // Ñòàðòîâûé ñèìâîë - ïðîãðàììíûé ìîäóëü - -%token ID STRING_CONST -%token INTNUM -%token REALNUM -%token LONGINTNUM -%token TRUE FALSE -%token CHAR_CONST -%token PLUS MINUS MULT DIVIDE AND OR LT GT LE GE EQ NE DIV MOD -%token NOT -%token ASSIGN SEMICOLUMN LPAREN RPAREN COLUMN COMMA COLON EXCLAMATION -%token LBRACE RBRACE DOUBLEPOINT LBRACKET RBRACKET PIPE -%token TRUE FALSE -%token IF THEN ELSE ELSEIF BEGIN END WHILE DO MODULE CONST VAR TYPE -%token INVISIBLE -%token PROCEDURE ARRAY OF RECORD REPEAT UNTIL FOR TO BY CASE POINTER -%token ODD - -%type ident specifiedIdent identDef -%type identDef -%type ExportLabel -%type IDList -%type complexTypeIdent -%type SetConstant SetElemList -%type expr ConstExpr SetElem SimpleExpr ForStep CaseVariantLabels -%type term signedTerm factor AddList FactorList -%type Assignment IfStatement ElseIfStatements ElseStatements WhileStatement WriteStatement -%type RepeatStatement Statement ForStatement CaseStatement ElseBranch -%type EmptyStatement ProcCallStatement -%type StatementSequence -%type CaseVariantList -%type CaseVariant -%type Declarations -%type DeclarationsSect -%type VarDecl -%type VarDeclarations VarDeclarationsSect -%type ConstDecl -%type ConstDeclarations ConstDeclarationsSect -%type TypeDeclarationsSect TypeDeclarations -%type TypeDecl -%type TypeDef ArrayType -%type PointerType -%type RecordType -%type ProcedureDeclarationSect -%type mainblock -%type factparams ExprList CaseVariantLabelList -%type Length -%type LengthList -%type AddOperator MultOperator Relation -%type specifiedIdent ComplexDesignator Designator -%type maybevar - -%left LT GT LE GE EQ NE -%left PLUS MINUS OR -%left MULT DIVIDE AND -%left NOT -%left UMINUS UPLUS - -%% -// Warning: NonTerminal symbol "EmptyStatement" is unreachable -// ----------------------------------------------------------- - -module // Ïðîãðàììíûé ìîäóëü - : MODULE ident SEMICOLUMN mainblock ident COMMA - { - if ($2.name != $5.name) - PT.AddError("Èìÿ " + $5.name + " äîëæíî ñîâïàäàòü ñ èìåíåì ìîäóëÿ " + $2.name, @5); - - // Ïîäêëþ÷åíèå ñòàíäàðòíîãî ìîäóëÿ Oberon00System, íàïèñàííîãî íà PascalABC.NET - var ul = new uses_list("Oberon00System"); - - // Ôîðìèðîâàíèå ìîäóëÿ îñíîâíîé ïðîãðàììû (èñïîëüçóåòñÿ ôàáðè÷íûé ìåòîä âìåñòî êîíñòðóêòîðà) - root = program_module.create($2, ul, $4, @$); - } - | INVISIBLE expr { // Äëÿ Intellisense - root = $2; - } - ; - -ident // Èäåíòèôèêàòîð - : ID { - $$ = new ident($1,@$); - } - ; - -specifiedIdent // Óòî÷íåííûé èäåíòèôèêàòîð - : ident COMMA ident { - $$ = new dot_node($1, $3, @$); - } - | ident { - $$ = $1; - } - ; - -identDef // Îïðåäåëåííûé èäåíòèôèêàòîð (âîçìîæíà ýêñïîðòíàÿ ìåòêà) TODO - : ident ExportLabel { - $$ = new oberon_ident_with_export_marker($1.name, $2, @$); - } - ; - -ExportLabel // Ýêñïîðòíàÿ ìåòêà TODO - : MULT { - $$ = oberon_export_marker.export; - } - | MINUS { - $$ = oberon_export_marker.export_readonly; - } - | { - //$$ = oberon_export_marker.nonexport; - $$ = oberon_export_marker.export; - } - ; - -mainblock // Ïðîãðàììíûé áëîê - : Declarations BEGIN StatementSequence END - { - $$ = new block($1, $3, @$); - } - ; - -SetConstant // Âûðàæåíèå-êîíñòàíòà ìíîæåñòâî TODO - : LBRACE SetElemList RBRACE { - $$ = $2; - $$.source_context = @$; - } - ; - -SetElemList // Ñïèñîê ýëåìåíòîâ ìíîæåñòâà TODO - : SetElem { - $$ = new pascal_set_constant(); - $$.Add($1); - $$.source_context = @$; - - } - | SetElemList COLUMN SetElem { - $$ = $1; - $$.Add($3); - $$.source_context = @$; - } - | { - $$ = new pascal_set_constant(); - } - ; - -SetElem // Ýëåìåíò ìíîæåñòâà TODO - : expr - | expr DOUBLEPOINT expr { - $$ = new diapason_expr($1, $3, @$); - } - ; - -expr // Âûðàæåíèå - : SimpleExpr { - $$ = $1; - } - | SimpleExpr Relation SimpleExpr { - $$ = new bin_expr($1, $3, $2, @$); - } - ; - -Relation // Îòíîøåíèå - : EQ { - $$ = Operators.Equal; - } - | NE { - $$ = Operators.NotEqual; - } - | LT { - $$ = Operators.Less; - } - | LE { - $$ = Operators.LessEqual; - } - | GT { - $$ = Operators.Greater; - } - | GE { - $$ = Operators.GreaterEqual; - } - ; - -SimpleExpr // Ïðîñòîå âûðàæåíèå - : signedTerm { - $$ = $1; - $$.source_context = @$; - } - | signedTerm AddOperator AddList { - $$ = new bin_expr($1, $3, $2, @$); - } - ; - -signedTerm // Ñëàãàåìîå ñî çíàêîì - : term - | MINUS term %prec UMINUS { - $$ = new un_expr($2, Operators.Minus, @$); - } - | PLUS term %prec UPLUS { - $$ = new un_expr($2, Operators.Plus, @$); - } - ; - -AddList // Ñïèñîê ñî ñëàãàåìûìè - : term - | AddList AddOperator term { - $$ = new bin_expr($1, $3, $2, @$); - } - ; - -term // Ñëàãàåìîå - : factor - | factor MultOperator FactorList { - $$ = new bin_expr($1, $3, $2, @$); - } - ; - -FactorList // Ñïèñîê ñî ìíîæèòåëÿìè - : factor - | FactorList MultOperator factor { - $$ = new bin_expr($1, $3, $2, @$); - } - ; - -factor // Ìíîæèòåëü - : Designator { - $$ = $1; - } - | INTNUM { - $$ = new int32_const($1,@$); - } - | LONGINTNUM{ - $$ = new int64_const($1, @$); - } - | REALNUM { - $$ = new double_const($1, @$); - } - | TRUE { - $$ = new bool_const(true,@$); - } - | FALSE { - $$ = new bool_const(false,@$); - } - | CHAR_CONST { - $$ = new char_const($1, @$); - } - | STRING_CONST { - $$ = new string_const($1, @$); - } - | LPAREN expr RPAREN { - $$ = $2; - } - | NOT factor { - $$ = new un_expr($2,Operators.LogicalNOT,@$); - } - | SetConstant - ; - -Designator // Îáîçíà÷åíèå (îáðàùåíèå ó ýëåìåòó ìàññèâà, ...) TODO - : specifiedIdent { - $$ = $1; - } - | ComplexDesignator { - $$ = $1; - } - ; - -ComplexDesignator // Ñîñòàâíîå îáîçíà÷åíèå TODO - : specifiedIdent COMMA ident { - $$ = new dot_node($1, $3, @$); - } - | specifiedIdent LBRACKET ExprList RBRACKET { - indexer indxr = new indexer(); - indxr.dereferencing_value = $1; - indxr.indexes = $3; - $$ = indxr; - $$.source_context = @$; - } - | ComplexDesignator COMMA ident { - $$ = new dot_node($1, $3, @$); - } - | ComplexDesignator LBRACKET ExprList RBRACKET { - indexer indxr = new indexer(); - indxr.dereferencing_value = $1; - indxr.indexes = $3; - $$ = indxr; - $$.source_context = @$; - } - ; - -ExprList // Ñïèñîê âûðàæåíèé - : expr { - $$ = new expression_list($1, @$); - } - | ExprList COLUMN expr { - $$ = $1; - $$.Add($3, @3); - $$.source_context = @$; - } - ; - -AddOperator // Îïåðàöèÿ ñëîæåíèÿ - : MINUS { - $$ = Operators.Minus; - } - | PLUS { - $$ = Operators.Plus; - } - | OR { - $$ = Operators.LogicalOR; - } - ; - -MultOperator // Îïåðàöèÿ óìíîæåíèÿ - : MULT { - $$ = Operators.Multiplication; - } - | DIVIDE { - $$ = Operators.Division; - } - | DIV { - $$ = Operators.IntegerDivision; - } - | MOD { - $$ = Operators.ModulusRemainder; - } - | AND { - $$ = Operators.LogicalAND; - } - ; - -Statement // Îïåðàòîð TODO - : Assignment - | IfStatement - | WhileStatement - | RepeatStatement - | ForStatement - | CaseStatement - | WriteStatement - | ProcCallStatement - ; - -StatementSequence // Ïîñëåäîâàòåëüíîñòü (áëîê) îïåðàòîðîâ - : Statement { - $$ = new statement_list($1,@$); - } - | StatementSequence SEMICOLUMN Statement { - $1.Add($3,@$); - $$ = $1; - } - ; - -Assignment // Ïðèñâàèâàíèå - : Designator ASSIGN expr { - $$ = new assign($1, $3, Operators.Assignment, @$); - } - ; - -IfStatement // Óñëîâíûé îïåðàòîð - : IF expr THEN StatementSequence ElseStatements END { - $$ = new if_node($2, $4, $5, @$); - } - | IF expr THEN StatementSequence ElseIfStatements END{ - $$ = new if_node($2, $4, $5, @$); - } - ; - -ElseStatements // Else-÷àñòü óñëîâíîãî îïåðàòîðà - : ELSE StatementSequence { - $$ = $2; - $$.source_context = @$; - } - | { - $$ = null; - } - ; - -ElseIfStatements // ElseIf-÷àñòü óñëîâíîãî îïåðàòîðà - : ELSEIF expr THEN StatementSequence ElseStatements { - $$ = new if_node($2, $4, $5, @$); - } - | ELSEIF expr THEN StatementSequence ElseIfStatements{ - $$ = new if_node($2, $4, $5, @$); - } - ; - -WhileStatement // Öèêë ñ ïðåäóñëîâèåì - : WHILE expr DO StatementSequence END { - $$ = new while_node($2, $4, WhileCycleType.While, @$); - } - ; - -RepeatStatement // Öèêë ñ ïîñòóñëîâèåì - : REPEAT StatementSequence UNTIL expr { - $$ = new repeat_node($2, $4, @$); - } - ; - -ForStatement // Öèêë - : FOR ident ASSIGN expr TO expr ForStep DO StatementSequence END { - expression step; - if ($7 != null) step = $7; - else step = new int32_const(1, @7); - // Áóäåì ìîäåëèðîâàòü öèêë ÷åðåç while - statement_list forStmnt = GetForThroughWhile($2, $4, $6, $9, step, @3, @$); - $$ = forStmnt; - $$.source_context = @$; - } - ; - -ForStep // Øàã öèêëà - : BY ConstExpr { - int32_const step32 = $2 as int32_const; - if (step32 != null) { // øàã ÿâëÿåòñÿ ïðîñòî öåëûì ÷èñëîì (áåç çíàêà) - if (step32.val == 0) PT.AddError("Øàã öèêëà íå ìîæåò áûòü íóëåâûì", @1); - else $$ = new int32_const(step32.val, @$); - } - else { // â çíà÷åíèè øàãà ëèáî ïðèñóòñòâóåò çíàê, ëèáî ýòî âîîáùå íå öåëîå - un_expr stepMinus = $2 as un_expr; - int32_const stepMinusTerm = stepMinus.subnode as int32_const; - bool signMinus = (stepMinusTerm != null) && (stepMinus.operation_type == Operators.Minus); - if (signMinus) - if (stepMinusTerm.val == 0) - PT.AddError("Øàã öèêëà íå ìîæåò áûòü íóëåâûì", @1); - else - $$ = new un_expr(stepMinusTerm, Operators.Minus, @2); - else - PT.AddError("Øàã öèêëà äîëæåí áûòü öåëûì ÷èñëîì", @1); - } - } - | { - $$ = null; - } - ; - -CaseStatement // Îïåðàòîð âûáîðà - : CASE expr OF CaseVariantList ElseBranch END { - $$ = new case_node($2, $4, $5, @$); - } - ; - -CaseVariantList // Ñïèñîê âàðèàíòîâ îïåðàòîðà CASE - : CaseVariant { - $$ = new case_variants(); - $$.Add($1); - $$.source_context = @$; - } - | CaseVariantList PIPE CaseVariant { - $$ = $1; - $$.Add($3); - $$.source_context = @$; - } - | { - $$ = new case_variants(); - } - ; - -CaseVariant // Âàðèàíò îïåðàòîðà CASE - : CaseVariantLabelList COLON StatementSequence { - $$ = new case_variant($1, $3, @$); - } - ; - -CaseVariantLabelList // Ñïèñîê ìåòîê âàðèàíòà - : CaseVariantLabels { - $$ = new expression_list($1, @$); - } - | CaseVariantLabelList COLUMN CaseVariantLabels { - $$ = $1; - $$.Add($3, @3); - $$.source_context = @$; - } - ; - -CaseVariantLabels // Ìåòêè âàðèàíòà - : ConstExpr { - $$ = $1; - } - | ConstExpr DOUBLEPOINT ConstExpr { - $$ = new diapason_expr($1, $3, @$); - } - ; - -ElseBranch // Âåòêà ELSE îïåðàòîðà CASE - : ELSE StatementSequence { - $$ = $2; - $$.source_context = @$; - } - | { - $$ = null; - } - ; - -WriteStatement - : EXCLAMATION expr { - expression_list el = new expression_list($2); - method_call mc = new method_call(el); - mc.dereferencing_value = new ident("print"); - $$ = mc; - } - ; - -factparams - : expr { - $$ = new expression_list($1,@$); - } - | factparams COLUMN expr { - $1.Add($3,@$); - $$ = $1; - } - ; - -ProcCallStatement - : ident LPAREN factparams RPAREN { - $$ = new method_call($1,$3,@$); - } - ; - -EmptyStatement // Ïóñòîé îïåðàòîð - : { - $$ = new empty_statement(); - } - ; - -IDList // Ñïèñîê èäåíòèôèêàòîðîâ - : identDef { - $$=new ident_list($1,@$); - - } - | IDList COLUMN identDef { - $1.Add($3,@$); - $$ = $1; - } - ; - -VarDecl // Îïèñàíèå ïåðåìåííûõ îäíîãî òèïà - : IDList COLON TypeDef SEMICOLUMN { - $$ = new var_def_statement($1, $3, null, definition_attribute.None, false, @$); - } - ; - -VarDeclarations // Ñïèñîê îïèñàíèé ïåðåìåííûõ - : VarDecl { - $$ = new variable_definitions($1,@$); - } - | VarDeclarations VarDecl { - $1.Add($2,@$); - $$ = $1; - } - ; - - -ConstDecl // Îïèñàíèå îäíîé êîíñòàíòû - : identDef EQ ConstExpr SEMICOLUMN { - $$ = new simple_const_definition($1,$3,@$); - } - ; - -ConstExpr // Êîíñòàíòíîå âûðàæåíèå - : expr - ; - -ConstDeclarations // Ñïèñîê îïèñàíèé êîíñòàíò - : ConstDecl { - $$ = new consts_definitions_list($1,@$); - } - | ConstDeclarations ConstDecl { - $1.Add($2,@$); - $$ = $1; - } - ; - -ConstDeclarationsSect // Áëîê îïèñàíèÿ êîíñòàíò - : CONST ConstDeclarations { - $$ = $2; - $$.source_context = @$; - } - ; - -VarDeclarationsSect // Áëîê îïèñàíèÿ ïåðåìåííûõ - : VAR VarDeclarations { - $$ = $2; - $$.source_context = @$; - } - ; - -TypeDeclarationsSect // Áëîê îïðåäåëåíèÿ òèïîâ òèïîâ - : TYPE TypeDeclarations { - $$ = $2; - $$.source_context = @$; - } - ; - -TypeDeclarations // Ñïèñîê îïðåäåëåíèé òèïîâ - : TypeDecl { - $$ = new type_declarations(); - $$.Add($1); - $$.source_context = @$; - } - | TypeDeclarations TypeDecl { - $$ = $1; - $$.Add($2); - $$.source_context = @$; - } - ; - -TypeDecl // Îïðåäåëåíèå òèïà - : identDef EQ TypeDef SEMICOLUMN { - $$ = new type_declaration($1, $3, @$); - } - ; - -TypeDef // Òèï TODO - : complexTypeIdent { - $$ = $1; - } - | ArrayType { - $$ = $1; - $$.source_context = @$; - } - | RecordType { - $$ = $1; - $$.source_context = @$; - } - | PointerType { - $$ = $1; - $$.source_context = @$; - } - ; - -ArrayType // Òèï ìàññèâ TODO - : ARRAY OF TypeDef { - // îòêðûòûé ìàññèâ - diapason dp = new diapason(new int32_const(0), new int32_const(0)); - indexers_types inxr = new indexers_types(); - inxr.Add(dp); - $$ = new array_type(inxr, $3, @$); - } - | ARRAY LengthList OF TypeDef { - // Áóäåì èñêàòü array n of char, ÷òîáû çàìåíèòü íà ñòðîêó - named_type_reference ntr = $4 as named_type_reference; - bool complexArr = (ntr != null) && (ntr.names.Count == 1) && - (ntr.names[0].name == "char"); - if (complexArr) - $$ = GetArrWithStrInsteadCharArr($2, @2, @$); - else - $$ = new array_type($2, $4, @$); - } - ; - -RecordType // Çàïèñü TODO - : RECORD END COLUMN { - - } - ; - -LengthList // Ñïèñîê ðàçìåðîâ ìàññèâà - : Length { - $$ = new indexers_types(); - $$.source_context = @$; - $$.Add($1); - } - | LengthList COLUMN Length { - $$ = $1; - $$.source_context = @$; - $$.Add($3); - } - ; - -Length // Äëèíà ìàññèâà - : ConstExpr { - //  îáåðîíå â ìàññèâå óêàçûâàåòñÿ öåëî÷èñëåííàÿ äëèíà - // Ïîýòîìó íàäî ïðîâåðèòü, ÷òî âûðàæåíèå îòíîñèòñÿ ê öåëîìó òèïó - object[] types = {$1}; - bool isLength = typeof(int32_const) == System.Type.GetTypeArray(types)[0]; - if (isLength) - $$ = GetDiapasonByArrLength($1, @$); - else - PT.AddError("Äëèíà äîëæíà áûòü öåëûì ÷èñëîì", @1); - } - ; - -PointerType // Òèï óêàçàòåëü - : POINTER TO TypeDef { - $$ = new ref_type($3, @$); - } - ; - -complexTypeIdent // Ñîñòàâíîé èäåíòèôèêàòîð òèïà (id1.id2.id3) - : ident { - $$ = new named_type_reference(PT.InternalTypeName($1.name), @$); - } - | complexTypeIdent COMMA ident { - $$ = $1; - $$.Add(PT.InternalTypeName($3.name)); - $$.source_context = @$; - } - ; - -DeclarationsSect // Áëîê îïèñàíèé TODO - : VarDeclarationsSect { - $$ = $1; - } - | ConstDeclarationsSect { - $$ = $1; - } - | TypeDeclarationsSect { - $$ = $1; - } - | ProcedureDeclarationSect { - $$ = $1; - } - ; - -Declarations // Ñïèñîê áëîêîâ îïèñàíèé - : { - $$ = new declarations(); - } - | Declarations DeclarationsSect { - if ($2 != null) - $1.Add($2); - $$ = $1; - $$.source_context = @$; // Íåîáõîäèìî ïîêàçàòü ìåñòî â ïðîãðàììå, ò.ê. íåÿâíî ýòî íå ñäåëàíî - // (íàïðèìåð, â êîíñòðóêòîðå) - } - ; - -ProcedureDeclarationSect - : PROCEDURE ident maybeformalparams maybereturn SEMICOLUMN mainblock ident SEMICOLUMN { - - } - ; - -maybeformalparams - : { - //$$ = null; - } - | LPAREN FPList RPAREN { - //$$ = $2; - } - ; - -maybereturn // TODO - : { - - } - | COLUMN TypeDef { - - } - ; - -FPList - : FPSect { - - } - | FPList SEMICOLUMN FPSect { - - } - ; - -FPSect - : maybevar IDList COLON TypeDef { - - } - ; - -maybevar - : { - $$ = false; - } - | VAR { - $$ = true; - } - ; -%% - -/* Âîçâðàùàåò ïîñëåäîâàòåëüíîñòü îïåðàòîðîâ, ñîîòâåòñâóþùóþ - öèêëó for, ìîäåëèðóåìîìó ÷åðåç while */ -public static statement_list GetForThroughWhile(ident id, expression expr, expression endExpr, statement_list stmnts, - expression step, SourceContext assignSC, SourceContext wholeSC){ - // Áóäåì ìîäåëèðîâàòü öèêë ÷åðåç while - statement_list forStmnt = new statement_list(); - ident endFor = new ident("_oberon_for_end_"); - forStmnt.Add(new var_statement(new var_def_statement( - new ident_list("_oberon_for_end_"), - new named_type_reference("integer", null), - endExpr, - definition_attribute.None, - false)) - ); - forStmnt.Add( new assign(id, expr, Operators.Assignment, assignSC) ); - statement_list posStatementList = new statement_list(); // ïðè ïîëîæèòåëüíîì øàãå - posStatementList.Add(stmnts); - posStatementList.Add( new assign(id, step, Operators.AssignmentAddition) ); - while_node posWhile = new while_node( - new bin_expr(id, endFor, Operators.LessEqual), - posStatementList, - WhileCycleType.While); - statement_list negStatementList = new statement_list(); // ïðè îòðèöàòåëüíîì øàãå - negStatementList.Add(stmnts); - negStatementList.Add( new assign(id, step, Operators.AssignmentAddition) ); - while_node negWhile = new while_node( - new bin_expr(id, endFor, Operators.GreaterEqual), - negStatementList, - WhileCycleType.While); - forStmnt.Add( new if_node( - new bin_expr(step, new int32_const(0), Operators.Greater), - posWhile, - negWhile, - wholeSC)); - return forStmnt; -} - -/* Âîçâðàùàåò ìíîãîìåðíûé ìàññèâ, â êîòîðîì ïðè íåîáõîäèìîñòè - ìàññèâ ñèìâîëîâ çàìåíåí íà ñòðîêó */ -public static type_definition GetArrWithStrInsteadCharArr(indexers_types lenList, - SourceContext lenListSC, SourceContext wholeSC){ - List indxrs = lenList.indexers; - diapason dp = indxrs[indxrs.Count - 1] as diapason; - int32_const len = new int32_const(); - len.val = (dp.right as int32_const).val + 1; - type_definition result = new string_num_definition(len, new ident("string", lenListSC), wholeSC); - if (indxrs.Count > 1) { // íàäî äåëàòü ìàññèâ ìàññèâîâ ... ñòðîê - indxrs.RemoveAt(indxrs.Count - 1); - result = new array_type(lenList, result, wholeSC); - } - return result; -} - -/* Âîçâðàùàåò äèàïàçîí 0..Length-1, ïîëó÷åííûé ïî îáåðîíîâñêîé äëèíå - ìàññèâà, è íåîáõîäèìûé äëÿ ïàñêàëåâñêîãî ñèíòàêñè÷åñêîãî óçëà */ -public static diapason GetDiapasonByArrLength(expression lenExpr, SourceContext lenSC){ - int32_const zero = new int32_const(); - zero.val = 0; - int32_const max = (int32_const)lenExpr; - max.val = max.val - 1; - return new diapason(zero, max, lenSC); -} -// ========================================================================== - diff --git a/Grammars/Oberon10Independent (by Juliet)/oberon00.y b/Grammars/Oberon10Independent (by Juliet)/oberon00.y deleted file mode 100644 index 3bd09fd26..000000000 --- a/Grammars/Oberon10Independent (by Juliet)/oberon00.y +++ /dev/null @@ -1,892 +0,0 @@ -%{ -// GPPGParser, , gppg - public syntax_tree_node root; // - public GPPGParser(AbstractScanner scanner) : base(scanner) { } -%} - -%output=oberon00yacc.cs - -%parsertype GPPGParser - -%union - { - public bool bVal; - public string sVal; - public int iVal; - public long lVal; // - public char cVal; - public double rVal; - public pascal_set_constant sc; // - - public named_type_reference ntr; // - public type_definition tdef; // - public diapason dpsn; // - public array_type arrt; // - public class_definition cldef; // - public indexers_types indts; // - public ref_type rft; // - public ident_list il; // - public ident id; // - public oberon_ident_with_export_marker obrid; // - public oberon_export_marker obrem; // - public var_def_statement vds; // - public variable_definitions vdss; // - public type_declarations td; // - public type_declaration tdec; // - public expression ex; // - public expression_list el; // - public Operators ops; // () - public block bl; // - public statement st; // - public statement_list sl; // - public case_variants cvars; // CASE - public case_variant cvar; // CASE - public declaration decsec; // - public declarations decl; // - public simple_const_definition scd; // - public consts_definitions_list cdl; // - public procedure_definition pd; // - public dot_node dn; // - public addressed_value adrv; // - } - -%using PascalABCCompiler.SyntaxTree -%using PascalABCCompiler.Errors -%using PascalABCCompiler.Oberon00Parser - -%namespace GPPGParserScanner - -%start module // - - -%token ID STRING_CONST -%token INTNUM -%token REALNUM -%token LONGINTNUM -%token TRUE FALSE -%token CHAR_CONST -%token PLUS MINUS MULT DIVIDE AND OR LT GT LE GE EQ NE DIV MOD -%token NOT -%token ASSIGN SEMICOLUMN LPAREN RPAREN COLUMN COMMA COLON EXCLAMATION -%token LBRACE RBRACE DOUBLEPOINT LBRACKET RBRACKET PIPE -%token TRUE FALSE -%token IF THEN ELSE ELSEIF BEGIN END WHILE DO MODULE CONST VAR TYPE -%token INVISIBLE -%token PROCEDURE ARRAY OF RECORD REPEAT UNTIL FOR TO BY CASE POINTER -%token ODD - -%type ident specifiedIdent identDef -%type identDef -%type ExportLabel -%type IDList -%type complexTypeIdent -%type SetConstant SetElemList -%type expr ConstExpr SetElem SimpleExpr ForStep CaseVariantLabels -%type term signedTerm factor AddList FactorList -%type Assignment IfStatement ElseIfStatements ElseStatements WhileStatement WriteStatement -%type RepeatStatement Statement ForStatement CaseStatement ElseBranch -%type EmptyStatement ProcCallStatement -%type StatementSequence -%type CaseVariantList -%type CaseVariant -%type Declarations -%type DeclarationsSect -%type VarDecl -%type VarDeclarations VarDeclarationsSect -%type ConstDecl -%type ConstDeclarations ConstDeclarationsSect -%type TypeDeclarationsSect TypeDeclarations -%type TypeDecl -%type TypeDef ArrayType -%type PointerType -%type RecordType -%type ProcedureDeclarationSect -%type mainblock -%type factparams ExprList CaseVariantLabelList -%type Length -%type LengthList -%type AddOperator MultOperator Relation -%type specifiedIdent ComplexDesignator Designator -%type maybevar - -%left LT GT LE GE EQ NE -%left PLUS MINUS OR -%left MULT DIVIDE AND -%left NOT -%left UMINUS UPLUS - -%% - -module // - : MODULE ident SEMICOLUMN mainblock ident COMMA - { - if ($2.name != $5.name) - PT.AddError(" " + $5.name + " " + $2.name, @5); - - // Oberon00System, PascalABC.NET - var ul = new uses_list("Oberon00System"); - - // ( ) - root = program_module.create($2, ul, $4, @$); - } - | INVISIBLE expr { // Intellisense - root = $2; - } - ; - -ident // - : ID { - $$ = new ident($1,@$); - } - ; - -specifiedIdent // - : ident COMMA ident { - $$ = new dot_node($1, $3, @$); - } - | ident { - $$ = $1; - } - ; - -identDef // ( ) TODO - : ident ExportLabel { - $$ = new oberon_ident_with_export_marker($1.name, $2, @$); - } - ; - -ExportLabel // TODO - : MULT { - $$ = oberon_export_marker.export; - } - | MINUS { - $$ = oberon_export_marker.export_readonly; - } - | { - //$$ = oberon_export_marker.nonexport; - $$ = oberon_export_marker.export; - } - ; - -mainblock // - : Declarations BEGIN StatementSequence END - { - $$ = new block($1, $3, @$); - } - ; - -SetConstant // - TODO - : LBRACE SetElemList RBRACE { - $$ = $2; - $$.source_context = @$; - } - ; - -SetElemList // TODO - : SetElem { - $$ = new pascal_set_constant(); - $$.Add($1); - $$.source_context = @$; - - } - | SetElemList COLUMN SetElem { - $$ = $1; - $$.Add($3); - $$.source_context = @$; - } - | { - $$ = new pascal_set_constant(); - } - ; - -SetElem // TODO - : expr - | expr DOUBLEPOINT expr { - $$ = new diapason_expr($1, $3, @$); - } - ; - -expr // - : SimpleExpr { - $$ = $1; - } - | SimpleExpr Relation SimpleExpr { - $$ = new bin_expr($1, $3, $2, @$); - } - ; - -Relation // - : EQ { - $$ = Operators.Equal; - } - | NE { - $$ = Operators.NotEqual; - } - | LT { - $$ = Operators.Less; - } - | LE { - $$ = Operators.LessEqual; - } - | GT { - $$ = Operators.Greater; - } - | GE { - $$ = Operators.GreaterEqual; - } - ; - -SimpleExpr // - : signedTerm { - $$ = $1; - $$.source_context = @$; - } - | signedTerm AddOperator AddList { - $$ = new bin_expr($1, $3, $2, @$); - } - ; - -signedTerm // - : term - | MINUS term %prec UMINUS { - $$ = new un_expr($2, Operators.Minus, @$); - } - | PLUS term %prec UPLUS { - $$ = new un_expr($2, Operators.Plus, @$); - } - ; - -AddList // - : term - | AddList AddOperator term { - $$ = new bin_expr($1, $3, $2, @$); - } - ; - -term // - : factor - | factor MultOperator FactorList { - $$ = new bin_expr($1, $3, $2, @$); - } - ; - -FactorList // - : factor - | FactorList MultOperator factor { - $$ = new bin_expr($1, $3, $2, @$); - } - ; - -factor // - : Designator { - $$ = $1; - } - | INTNUM { - $$ = new int32_const($1,@$); - } - | LONGINTNUM{ - $$ = new int64_const($1, @$); - } - | REALNUM { - $$ = new double_const($1, @$); - } - | TRUE { - $$ = new bool_const(true,@$); - } - | FALSE { - $$ = new bool_const(false,@$); - } - | CHAR_CONST { - $$ = new char_const($1, @$); - } - | STRING_CONST { - $$ = new string_const($1, @$); - } - | LPAREN expr RPAREN { - $$ = $2; - } - | NOT factor { - $$ = new un_expr($2,Operators.LogicalNOT,@$); - } - | SetConstant - ; - -Designator // ( , ...) TODO - : specifiedIdent { - $$ = $1; - } - | ComplexDesignator { - $$ = $1; - } - ; - -ComplexDesignator // TODO - : specifiedIdent COMMA ident { - $$ = new dot_node($1, $3, @$); - } - | specifiedIdent LBRACKET ExprList RBRACKET { - indexer indxr = new indexer(); - indxr.dereferencing_value = $1; - indxr.indexes = $3; - $$ = indxr; - $$.source_context = @$; - } - | ComplexDesignator COMMA ident { - $$ = new dot_node($1, $3, @$); - } - | ComplexDesignator LBRACKET ExprList RBRACKET { - indexer indxr = new indexer(); - indxr.dereferencing_value = $1; - indxr.indexes = $3; - $$ = indxr; - $$.source_context = @$; - } - ; - -ExprList // - : expr { - $$ = new expression_list($1, @$); - } - | ExprList COLUMN expr { - $$ = $1; - $$.Add($3, @3); - $$.source_context = @$; - } - ; - -AddOperator // - : MINUS { - $$ = Operators.Minus; - } - | PLUS { - $$ = Operators.Plus; - } - | OR { - $$ = Operators.LogicalOR; - } - ; - -MultOperator // - : MULT { - $$ = Operators.Multiplication; - } - | DIVIDE { - $$ = Operators.Division; - } - | DIV { - $$ = Operators.IntegerDivision; - } - | MOD { - $$ = Operators.ModulusRemainder; - } - | AND { - $$ = Operators.LogicalAND; - } - ; - -Statement // TODO - : Assignment - | IfStatement - | WhileStatement - | RepeatStatement - | ForStatement - | CaseStatement - | WriteStatement - | ProcCallStatement - | EmptyStatement - ; - -StatementSequence // () - : Statement { - $$ = new statement_list($1,@$); - } - | StatementSequence SEMICOLUMN Statement { - $1.Add($3,@$); - $$ = $1; - } - ; - -Assignment // - : Designator ASSIGN expr { - $$ = new assign($1, $3, Operators.Assignment, @$); - } - ; - -IfStatement // - : IF expr THEN StatementSequence ElseStatements END { - $$ = new if_node($2, $4, $5, @$); - } - | IF expr THEN StatementSequence ElseIfStatements END { - $$ = new if_node($2, $4, $5, @$); - } - ; - -ElseStatements // Else- - : ELSE StatementSequence { - $$ = $2; - $$.source_context = @$; - } - | { - $$ = null; - } - ; - -ElseIfStatements // ElseIf- - : ELSEIF expr THEN StatementSequence ElseStatements { - $$ = new if_node($2, $4, $5, @$); - } - | ELSEIF expr THEN StatementSequence ElseIfStatements{ - $$ = new if_node($2, $4, $5, @$); - } - ; - -WhileStatement // - : WHILE expr DO StatementSequence END { - $$ = new while_node($2, $4, WhileCycleType.While, @$); - } - ; - -RepeatStatement // - : REPEAT StatementSequence UNTIL expr { - $$ = new repeat_node($2, $4, @$); - } - ; - -ForStatement // - : FOR ident ASSIGN expr TO expr ForStep DO StatementSequence END { - expression step; - if ($7 != null) step = $7; - else step = new int32_const(1, @7); - // while - statement_list forStmnt = GetForThroughWhile($2, $4, $6, $9, step, @3, @$); - $$ = forStmnt; - $$.source_context = @$; - } - ; - -ForStep // - : BY ConstExpr { - int32_const step32 = $2 as int32_const; - if (step32 != null) { // ( ) - if (step32.val == 0) PT.AddError(" ", @1); - else $$ = new int32_const(step32.val, @$); - } - else { // , - un_expr stepMinus = $2 as un_expr; - int32_const stepMinusTerm = stepMinus.subnode as int32_const; - bool signMinus = (stepMinusTerm != null) && (stepMinus.operation_type == Operators.Minus); - if (signMinus) - if (stepMinusTerm.val == 0) - PT.AddError(" ", @1); - else - $$ = new un_expr(stepMinusTerm, Operators.Minus, @2); - else - PT.AddError(" ", @1); - } - } - | { - $$ = null; - } - ; - -CaseStatement // - : CASE expr OF CaseVariantList ElseBranch END { - $$ = new case_node($2, $4, $5, @$); - } - ; - -CaseVariantList // CASE - : CaseVariant { - $$ = new case_variants(); - $$.Add($1); - $$.source_context = @$; - } - | CaseVariantList PIPE CaseVariant { - $$ = $1; - $$.Add($3); - $$.source_context = @$; - } - | { - $$ = new case_variants(); - } - ; - -CaseVariant // CASE - : CaseVariantLabelList COLON StatementSequence { - $$ = new case_variant($1, $3, @$); - } - ; - -CaseVariantLabelList // - : CaseVariantLabels { - $$ = new expression_list($1, @$); - } - | CaseVariantLabelList COLUMN CaseVariantLabels { - $$ = $1; - $$.Add($3, @3); - $$.source_context = @$; - } - ; - -CaseVariantLabels // - : ConstExpr { - $$ = $1; - } - | ConstExpr DOUBLEPOINT ConstExpr { - $$ = new diapason_expr($1, $3, @$); - } - ; - -ElseBranch // ELSE CASE - : ELSE StatementSequence { - $$ = $2; - $$.source_context = @$; - } - | { - $$ = null; - } - ; - -WriteStatement - : EXCLAMATION expr { - expression_list el = new expression_list($2,@$); - method_call mc = new method_call(el); - mc.dereferencing_value = new ident("print"); - $$ = mc; - } - ; - -factparams - : expr { - $$ = new expression_list($1,@$); - } - | factparams COLUMN expr { - $1.Add($3,@$); - $$ = $1; - } - ; - -ProcCallStatement - : ident LPAREN factparams RPAREN { - $$ = new method_call($1,$3,@$); - } - ; - -EmptyStatement // - : { - $$ = new empty_statement(); - } - ; - -IDList // - : identDef { - $$=new ident_list($1,@$); - - } - | IDList COLUMN identDef { - $1.Add($3,@$); - $$ = $1; - } - ; - -VarDecl // - : IDList COLON TypeDef SEMICOLUMN { - $$ = new var_def_statement($1, $3, null, definition_attribute.None, false, @$); - } - ; - -VarDeclarations // - : VarDecl { - $$ = new variable_definitions($1,@$); - } - | VarDeclarations VarDecl { - $1.Add($2,@$); - $$ = $1; - } - ; - - -ConstDecl // - : identDef EQ ConstExpr SEMICOLUMN { - $$ = new simple_const_definition($1,$3,@$); - } - ; - -ConstExpr // - : expr - ; - -ConstDeclarations // - : ConstDecl { - $$ = new consts_definitions_list($1,@$); - } - | ConstDeclarations ConstDecl { - $1.Add($2,@$); - $$ = $1; - } - ; - -ConstDeclarationsSect // - : CONST ConstDeclarations { - $$ = $2; - $$.source_context = @$; - } - ; - -VarDeclarationsSect // - : VAR VarDeclarations { - $$ = $2; - $$.source_context = @$; - } - ; - -TypeDeclarationsSect // - : TYPE TypeDeclarations { - $$ = $2; - $$.source_context = @$; - } - ; - -TypeDeclarations // - : TypeDecl { - $$ = new type_declarations(); - $$.Add($1); - $$.source_context = @$; - } - | TypeDeclarations TypeDecl { - $$ = $1; - $$.Add($2); - $$.source_context = @$; - } - ; - -TypeDecl // - : identDef EQ TypeDef SEMICOLUMN { - $$ = new type_declaration($1, $3, @$); - } - ; - -TypeDef // TODO - : complexTypeIdent { - $$ = $1; - } - | ArrayType { - $$ = $1; - $$.source_context = @$; - } - | RecordType { - $$ = $1; - $$.source_context = @$; - } - | PointerType { - $$ = $1; - $$.source_context = @$; - } - ; - -ArrayType // TODO - : ARRAY OF TypeDef { - // - diapason dp = new diapason(new int32_const(0), new int32_const(0)); - indexers_types inxr = new indexers_types(); - inxr.Add(dp); - $$ = new array_type(inxr, $3, @$); - } - | ARRAY LengthList OF TypeDef { - // array n of char, - named_type_reference ntr = $4 as named_type_reference; - bool complexArr = (ntr != null) && (ntr.names.Count == 1) && - (ntr.names[0].name == "char"); - if (complexArr) - $$ = GetArrWithStrInsteadCharArr($2, @2, @$); - else - $$ = new array_type($2, $4, @$); - } - ; - -RecordType // TODO - : RECORD END COLUMN { - - } - ; - -LengthList // - : Length { - $$ = new indexers_types(); - $$.source_context = @$; - $$.Add($1); - } - | LengthList COLUMN Length { - $$ = $1; - $$.source_context = @$; - $$.Add($3); - } - ; - -Length // - : ConstExpr { - // - // , - object[] types = {$1}; - bool isLength = typeof(int32_const) == System.Type.GetTypeArray(types)[0]; - if (isLength) - $$ = GetDiapasonByArrLength($1, @$); - else - PT.AddError(" ", @1); - } - ; - -PointerType // - : POINTER TO TypeDef { - $$ = new ref_type($3, @$); - } - ; - -complexTypeIdent // (id1.id2.id3) - : ident { - $$ = new named_type_reference(PT.InternalTypeName($1.name), @$); - } - | complexTypeIdent COMMA ident { - $$ = $1; - $$.Add(PT.InternalTypeName($3.name)); - $$.source_context = @$; - } - ; - -DeclarationsSect // TODO - : VarDeclarationsSect { - $$ = $1; - } - | ConstDeclarationsSect { - $$ = $1; - } - | TypeDeclarationsSect { - $$ = $1; - } - | ProcedureDeclarationSect { - $$ = $1; - } - ; - -Declarations // - : { - $$ = new declarations(); - } - | Declarations DeclarationsSect { - if ($2 != null) - $1.Add($2); - $$ = $1; - $$.source_context = @$; // , .. - // (, ) - } - ; - -ProcedureDeclarationSect - : PROCEDURE ident maybeformalparams maybereturn SEMICOLUMN mainblock ident SEMICOLUMN { - - } - ; - -maybeformalparams - : { - //$$ = null; - } - | LPAREN FPList RPAREN { - //$$ = $2; - } - ; - -maybereturn // TODO - : { - - } - | COLUMN TypeDef { - - } - ; - -FPList - : FPSect { - - } - | FPList SEMICOLUMN FPSect { - - } - ; - -FPSect - : maybevar IDList COLON TypeDef { - - } - ; - -maybevar - : { - $$ = false; - } - | VAR { - $$ = true; - } - ; -%% - -/* , - for, while */ -public static statement_list GetForThroughWhile(ident id, expression expr, expression endExpr, statement_list stmnts, - expression step, SourceContext assignSC, SourceContext wholeSC){ - // while - statement_list forStmnt = new statement_list(); - ident endFor = new ident("_oberon_for_end_"); - forStmnt.Add(new var_statement(new var_def_statement( - new ident_list("_oberon_for_end_"), - new named_type_reference("integer", null), - endExpr, - definition_attribute.None, - false)) - ); - forStmnt.Add( new assign(id, expr, Operators.Assignment, assignSC) ); - statement_list posStatementList = new statement_list(); // - posStatementList.Add(stmnts); - posStatementList.Add( new assign(id, step, Operators.AssignmentAddition) ); - while_node posWhile = new while_node( - new bin_expr(id, endFor, Operators.LessEqual), - posStatementList, - WhileCycleType.While); - statement_list negStatementList = new statement_list(); // - negStatementList.Add(stmnts); - negStatementList.Add( new assign(id, step, Operators.AssignmentAddition) ); - while_node negWhile = new while_node( - new bin_expr(id, endFor, Operators.GreaterEqual), - negStatementList, - WhileCycleType.While); - forStmnt.Add( new if_node( - new bin_expr(step, new int32_const(0), Operators.Greater), - posWhile, - negWhile, - wholeSC)); - return forStmnt; -} - -/* , - */ -public static type_definition GetArrWithStrInsteadCharArr(indexers_types lenList, - SourceContext lenListSC, SourceContext wholeSC){ - List indxrs = lenList.indexers; - diapason dp = indxrs[indxrs.Count - 1] as diapason; - int32_const len = new int32_const(); - len.val = (dp.right as int32_const).val + 1; - type_definition result = new string_num_definition(len, new ident("string", lenListSC), wholeSC); - if (indxrs.Count > 1) { // ... - indxrs.RemoveAt(indxrs.Count - 1); - result = new array_type(lenList, result, wholeSC); - } - return result; -} - -/* 0..Length-1, - , */ -public static diapason GetDiapasonByArrLength(expression lenExpr, SourceContext lenSC){ - int32_const zero = new int32_const(); - zero.val = 0; - int32_const max = (int32_const)lenExpr; - max.val = max.val - 1; - return new diapason(zero, max, lenSC); -} diff --git a/Grammars/Oberon10Independent (by Juliet)/oberon00yacc.cs b/Grammars/Oberon10Independent (by Juliet)/oberon00yacc.cs deleted file mode 100644 index 715a644b1..000000000 --- a/Grammars/Oberon10Independent (by Juliet)/oberon00yacc.cs +++ /dev/null @@ -1,1353 +0,0 @@ -// This code was generated by the Gardens Point Parser Generator -// Copyright (c) Wayne Kelly, QUT 2005-2010 -// (see accompanying GPPGcopyright.rtf) - -// GPPG version 1.3.6 -// Machine: SSM -// DateTime: 13.03.2013 16:51:39 -// UserName: ????????? -// Input file - -// options: no-lines gplex - -using System; -using System.Collections.Generic; -using System.Globalization; -using System.Text; -using QUT.Gppg; -using PascalABCCompiler.SyntaxTree; -using PascalABCCompiler.Errors; -using PascalABCCompiler.Oberon00Parser; - -namespace GPPGParserScanner -{ -public enum Tokens { - error=1,EOF=2,ID=3,STRING_CONST=4,INTNUM=5,REALNUM=6, - LONGINTNUM=7,TRUE=8,FALSE=9,CHAR_CONST=10,PLUS=11,MINUS=12, - MULT=13,DIVIDE=14,AND=15,OR=16,LT=17,GT=18, - LE=19,GE=20,EQ=21,NE=22,DIV=23,MOD=24, - NOT=25,ASSIGN=26,SEMICOLUMN=27,LPAREN=28,RPAREN=29,COLUMN=30, - COMMA=31,COLON=32,EXCLAMATION=33,LBRACE=34,RBRACE=35,DOUBLEPOINT=36, - LBRACKET=37,RBRACKET=38,PIPE=39,IF=40,THEN=41,ELSE=42, - ELSEIF=43,BEGIN=44,END=45,WHILE=46,DO=47,MODULE=48, - CONST=49,VAR=50,TYPE=51,INVISIBLE=52,PROCEDURE=53,ARRAY=54, - OF=55,RECORD=56,REPEAT=57,UNTIL=58,FOR=59,TO=60, - BY=61,CASE=62,POINTER=63,ODD=64,UMINUS=65,UPLUS=66}; - -public struct ValueType -{ - public bool bVal; - public string sVal; - public int iVal; - public long lVal; // Длинное целое - public char cVal; - public double rVal; - public pascal_set_constant sc; // Константа - множество - public named_type_reference ntr; // Именованное определение типа - public type_definition tdef; // Сам тип - public diapason dpsn; // Тип диапазон - public array_type arrt; // Тип массив - public class_definition cldef; // Определение записи - public indexers_types indts; // Тип типы индексов массива - public ref_type rft; // Тип указатель - public ident_list il; // Список идентификаторов - public ident id; // Идентификатор - public oberon_ident_with_export_marker obrid; // Обероновский уточненный идентификатор - public oberon_export_marker obrem; // Обероновская экспортная метка - public var_def_statement vds; // Описание переменных - public variable_definitions vdss; // Секция описания переменных - public type_declarations td; // Секция определения типов - public type_declaration tdec; // Описание типа - public expression ex; // Выражение - public expression_list el; // Список выражений - public Operators ops; // Операторы (операции) - public block bl; // Программный блок - public statement st; // Оператор программный - public statement_list sl; // Список операторов - public case_variants cvars; // Список вариантов оператора CASE - public case_variant cvar; // Вариант оператора CASE - public declaration decsec; // Описание - public declarations decl; // Список описаний - public simple_const_definition scd; // Определение константы - public consts_definitions_list cdl; // Список описаний констант - public procedure_definition pd; // Описание процедуры - public dot_node dn; // Узел в точечной нотации - public addressed_value adrv; // Адресованное значение - } -// Abstract base class for GPLEX scanners -public abstract class ScanBase : AbstractScanner { - private LexLocation __yylloc = new LexLocation(); - public override LexLocation yylloc { get { return __yylloc; } set { __yylloc = value; } } - protected virtual bool yywrap() { return true; } -} - -public class GPPGParser: ShiftReduceParser -{ - // Verbatim content from oberon00.y -// Эти объявления добавляются в класс GPPGParser, представляющий собой парсер, генерируемый системой gppg - public syntax_tree_node root; // Корневой узел синтаксического дерева - public GPPGParser(AbstractScanner scanner) : base(scanner) { } - // End verbatim content from oberon00.y - -#pragma warning disable 649 - private static Dictionary aliasses; -#pragma warning restore 649 - private static Rule[] rules = new Rule[147]; - private static State[] states = new State[253]; - private static string[] nonTerms = new string[] { - "module", "ident", "specifiedIdent", "identDef", "ExportLabel", "IDList", - "complexTypeIdent", "SetConstant", "SetElemList", "expr", "ConstExpr", - "SetElem", "SimpleExpr", "ForStep", "CaseVariantLabels", "term", "signedTerm", - "factor", "AddList", "FactorList", "Assignment", "IfStatement", "ElseIfStatements", - "ElseStatements", "WhileStatement", "WriteStatement", "RepeatStatement", - "Statement", "ForStatement", "CaseStatement", "ElseBranch", "EmptyStatement", - "ProcCallStatement", "StatementSequence", "CaseVariantList", "CaseVariant", - "Declarations", "DeclarationsSect", "VarDecl", "VarDeclarations", "VarDeclarationsSect", - "ConstDecl", "ConstDeclarations", "ConstDeclarationsSect", "TypeDeclarationsSect", - "TypeDeclarations", "TypeDecl", "TypeDef", "ArrayType", "PointerType", - "RecordType", "ProcedureDeclarationSect", "mainblock", "factparams", "ExprList", - "CaseVariantLabelList", "Length", "LengthList", "AddOperator", "MultOperator", - "Relation", "ComplexDesignator", "Designator", "maybevar", "$accept", "maybeformalparams", - "maybereturn", "FPList", "FPSect", }; - - static GPPGParser() { - states[0] = new State(new int[]{48,3,52,251},new int[]{-1,1}); - states[1] = new State(new int[]{2,2}); - states[2] = new State(-1); - states[3] = new State(new int[]{3,9},new int[]{-2,4}); - states[4] = new State(new int[]{27,5}); - states[5] = new State(-135,new int[]{-53,6,-37,10}); - states[6] = new State(new int[]{3,9},new int[]{-2,7}); - states[7] = new State(new int[]{31,8}); - states[8] = new State(-2); - states[9] = new State(-4); - states[10] = new State(new int[]{44,11,50,173,49,212,51,221,53,230},new int[]{-38,171,-41,172,-44,211,-45,220,-52,229}); - states[11] = new State(new int[]{3,9,40,103,46,115,57,121,59,126,62,137,33,149,45,-102,27,-102},new int[]{-34,12,-28,113,-21,16,-63,17,-3,34,-2,95,-62,46,-22,102,-25,114,-27,120,-29,125,-30,136,-26,148,-33,151,-32,152}); - states[12] = new State(new int[]{45,13,27,14}); - states[13] = new State(-11); - states[14] = new State(new int[]{3,9,40,103,46,115,57,121,59,126,62,137,33,149,45,-102,27,-102,42,-102,43,-102,58,-102,39,-102},new int[]{-28,15,-21,16,-63,17,-3,34,-2,95,-62,46,-22,102,-25,114,-27,120,-29,125,-30,136,-26,148,-33,151,-32,152}); - states[15] = new State(-74); - states[16] = new State(-64); - states[17] = new State(new int[]{26,18}); - states[18] = new State(new int[]{3,9,5,53,7,54,6,55,8,56,9,57,10,58,4,59,28,60,25,63,34,66,12,74,11,76},new int[]{-10,19,-13,20,-17,23,-16,42,-18,28,-63,33,-3,34,-2,43,-62,46,-8,65}); - states[19] = new State(-75); - states[20] = new State(new int[]{21,89,22,90,17,91,19,92,18,93,20,94,45,-18,27,-18,42,-18,43,-18,58,-18,39,-18,38,-18,30,-18,29,-18,36,-18,35,-18,41,-18,47,-18,60,-18,61,-18,55,-18,32,-18,2,-18},new int[]{-61,21}); - states[21] = new State(new int[]{3,9,5,53,7,54,6,55,8,56,9,57,10,58,4,59,28,60,25,63,34,66,12,74,11,76},new int[]{-13,22,-17,23,-16,42,-18,28,-63,33,-3,34,-2,43,-62,46,-8,65}); - states[22] = new State(-19); - states[23] = new State(new int[]{12,85,11,86,16,87,21,-26,22,-26,17,-26,19,-26,18,-26,20,-26,45,-26,27,-26,42,-26,43,-26,58,-26,39,-26,38,-26,30,-26,29,-26,36,-26,35,-26,41,-26,47,-26,60,-26,61,-26,55,-26,32,-26,2,-26},new int[]{-59,24}); - states[24] = new State(new int[]{3,9,5,53,7,54,6,55,8,56,9,57,10,58,4,59,28,60,25,63,34,66},new int[]{-19,25,-16,88,-18,28,-63,33,-3,34,-2,43,-62,46,-8,65}); - states[25] = new State(new int[]{12,85,11,86,16,87,21,-27,22,-27,17,-27,19,-27,18,-27,20,-27,45,-27,27,-27,42,-27,43,-27,58,-27,39,-27,38,-27,30,-27,29,-27,36,-27,35,-27,41,-27,47,-27,60,-27,61,-27,55,-27,32,-27,2,-27},new int[]{-59,26}); - states[26] = new State(new int[]{3,9,5,53,7,54,6,55,8,56,9,57,10,58,4,59,28,60,25,63,34,66},new int[]{-16,27,-18,28,-63,33,-3,34,-2,43,-62,46,-8,65}); - states[27] = new State(-32); - states[28] = new State(new int[]{13,79,14,80,23,81,24,82,15,83,12,-33,11,-33,16,-33,21,-33,22,-33,17,-33,19,-33,18,-33,20,-33,45,-33,27,-33,42,-33,43,-33,58,-33,39,-33,38,-33,30,-33,29,-33,36,-33,35,-33,41,-33,47,-33,60,-33,61,-33,55,-33,32,-33,2,-33},new int[]{-60,29}); - states[29] = new State(new int[]{3,9,5,53,7,54,6,55,8,56,9,57,10,58,4,59,28,60,25,63,34,66},new int[]{-20,30,-18,84,-63,33,-3,34,-2,43,-62,46,-8,65}); - states[30] = new State(new int[]{13,79,14,80,23,81,24,82,15,83,12,-34,11,-34,16,-34,21,-34,22,-34,17,-34,19,-34,18,-34,20,-34,45,-34,27,-34,42,-34,43,-34,58,-34,39,-34,38,-34,30,-34,29,-34,36,-34,35,-34,41,-34,47,-34,60,-34,61,-34,55,-34,32,-34,2,-34},new int[]{-60,31}); - states[31] = new State(new int[]{3,9,5,53,7,54,6,55,8,56,9,57,10,58,4,59,28,60,25,63,34,66},new int[]{-18,32,-63,33,-3,34,-2,43,-62,46,-8,65}); - states[32] = new State(-36); - states[33] = new State(-37); - states[34] = new State(new int[]{31,35,37,37,26,-48,13,-48,14,-48,23,-48,24,-48,15,-48,12,-48,11,-48,16,-48,21,-48,22,-48,17,-48,19,-48,18,-48,20,-48,45,-48,27,-48,42,-48,43,-48,58,-48,39,-48,38,-48,30,-48,29,-48,36,-48,35,-48,41,-48,47,-48,60,-48,61,-48,55,-48,32,-48,2,-48}); - states[35] = new State(new int[]{3,9},new int[]{-2,36}); - states[36] = new State(-50); - states[37] = new State(new int[]{3,9,5,53,7,54,6,55,8,56,9,57,10,58,4,59,28,60,25,63,34,66,12,74,11,76},new int[]{-55,38,-10,52,-13,20,-17,23,-16,42,-18,28,-63,33,-3,34,-2,43,-62,46,-8,65}); - states[38] = new State(new int[]{38,39,30,40}); - states[39] = new State(-51); - states[40] = new State(new int[]{3,9,5,53,7,54,6,55,8,56,9,57,10,58,4,59,28,60,25,63,34,66,12,74,11,76},new int[]{-10,41,-13,20,-17,23,-16,42,-18,28,-63,33,-3,34,-2,43,-62,46,-8,65}); - states[41] = new State(-55); - states[42] = new State(-28); - states[43] = new State(new int[]{31,44,37,-6,13,-6,14,-6,23,-6,24,-6,15,-6,12,-6,11,-6,16,-6,21,-6,22,-6,17,-6,19,-6,18,-6,20,-6,45,-6,27,-6,42,-6,43,-6,58,-6,39,-6,38,-6,30,-6,29,-6,36,-6,35,-6,41,-6,47,-6,60,-6,61,-6,55,-6,32,-6,2,-6}); - states[44] = new State(new int[]{3,9},new int[]{-2,45}); - states[45] = new State(-5); - states[46] = new State(new int[]{31,47,37,49,26,-49,13,-49,14,-49,23,-49,24,-49,15,-49,12,-49,11,-49,16,-49,21,-49,22,-49,17,-49,19,-49,18,-49,20,-49,45,-49,27,-49,42,-49,43,-49,58,-49,39,-49,38,-49,30,-49,29,-49,36,-49,35,-49,41,-49,47,-49,60,-49,61,-49,55,-49,32,-49,2,-49}); - states[47] = new State(new int[]{3,9},new int[]{-2,48}); - states[48] = new State(-52); - states[49] = new State(new int[]{3,9,5,53,7,54,6,55,8,56,9,57,10,58,4,59,28,60,25,63,34,66,12,74,11,76},new int[]{-55,50,-10,52,-13,20,-17,23,-16,42,-18,28,-63,33,-3,34,-2,43,-62,46,-8,65}); - states[50] = new State(new int[]{38,51,30,40}); - states[51] = new State(-53); - states[52] = new State(-54); - states[53] = new State(-38); - states[54] = new State(-39); - states[55] = new State(-40); - states[56] = new State(-41); - states[57] = new State(-42); - states[58] = new State(-43); - states[59] = new State(-44); - states[60] = new State(new int[]{3,9,5,53,7,54,6,55,8,56,9,57,10,58,4,59,28,60,25,63,34,66,12,74,11,76},new int[]{-10,61,-13,20,-17,23,-16,42,-18,28,-63,33,-3,34,-2,43,-62,46,-8,65}); - states[61] = new State(new int[]{29,62}); - states[62] = new State(-45); - states[63] = new State(new int[]{3,9,5,53,7,54,6,55,8,56,9,57,10,58,4,59,28,60,25,63,34,66},new int[]{-18,64,-63,33,-3,34,-2,43,-62,46,-8,65}); - states[64] = new State(-46); - states[65] = new State(-47); - states[66] = new State(new int[]{3,9,5,53,7,54,6,55,8,56,9,57,10,58,4,59,28,60,25,63,34,66,12,74,11,76,35,-15,30,-15},new int[]{-9,67,-12,78,-10,71,-13,20,-17,23,-16,42,-18,28,-63,33,-3,34,-2,43,-62,46,-8,65}); - states[67] = new State(new int[]{35,68,30,69}); - states[68] = new State(-12); - states[69] = new State(new int[]{3,9,5,53,7,54,6,55,8,56,9,57,10,58,4,59,28,60,25,63,34,66,12,74,11,76},new int[]{-12,70,-10,71,-13,20,-17,23,-16,42,-18,28,-63,33,-3,34,-2,43,-62,46,-8,65}); - states[70] = new State(-14); - states[71] = new State(new int[]{36,72,35,-16,30,-16}); - states[72] = new State(new int[]{3,9,5,53,7,54,6,55,8,56,9,57,10,58,4,59,28,60,25,63,34,66,12,74,11,76},new int[]{-10,73,-13,20,-17,23,-16,42,-18,28,-63,33,-3,34,-2,43,-62,46,-8,65}); - states[73] = new State(-17); - states[74] = new State(new int[]{3,9,5,53,7,54,6,55,8,56,9,57,10,58,4,59,28,60,25,63,34,66},new int[]{-16,75,-18,28,-63,33,-3,34,-2,43,-62,46,-8,65}); - states[75] = new State(-29); - states[76] = new State(new int[]{3,9,5,53,7,54,6,55,8,56,9,57,10,58,4,59,28,60,25,63,34,66},new int[]{-16,77,-18,28,-63,33,-3,34,-2,43,-62,46,-8,65}); - states[77] = new State(-30); - states[78] = new State(-13); - states[79] = new State(-59); - states[80] = new State(-60); - states[81] = new State(-61); - states[82] = new State(-62); - states[83] = new State(-63); - states[84] = new State(-35); - states[85] = new State(-56); - states[86] = new State(-57); - states[87] = new State(-58); - states[88] = new State(-31); - states[89] = new State(-20); - states[90] = new State(-21); - states[91] = new State(-22); - states[92] = new State(-23); - states[93] = new State(-24); - states[94] = new State(-25); - states[95] = new State(new int[]{31,44,28,96,37,-6,26,-6}); - states[96] = new State(new int[]{3,9,5,53,7,54,6,55,8,56,9,57,10,58,4,59,28,60,25,63,34,66,12,74,11,76},new int[]{-54,97,-10,101,-13,20,-17,23,-16,42,-18,28,-63,33,-3,34,-2,43,-62,46,-8,65}); - states[97] = new State(new int[]{29,98,30,99}); - states[98] = new State(-101); - states[99] = new State(new int[]{3,9,5,53,7,54,6,55,8,56,9,57,10,58,4,59,28,60,25,63,34,66,12,74,11,76},new int[]{-10,100,-13,20,-17,23,-16,42,-18,28,-63,33,-3,34,-2,43,-62,46,-8,65}); - states[100] = new State(-100); - states[101] = new State(-99); - states[102] = new State(-65); - states[103] = new State(new int[]{3,9,5,53,7,54,6,55,8,56,9,57,10,58,4,59,28,60,25,63,34,66,12,74,11,76},new int[]{-10,104,-13,20,-17,23,-16,42,-18,28,-63,33,-3,34,-2,43,-62,46,-8,65}); - states[104] = new State(new int[]{41,105}); - states[105] = new State(new int[]{3,9,40,103,46,115,57,121,59,126,62,137,33,149,27,-102,42,-102,43,-102,45,-102},new int[]{-34,106,-28,113,-21,16,-63,17,-3,34,-2,95,-62,46,-22,102,-25,114,-27,120,-29,125,-30,136,-26,148,-33,151,-32,152}); - states[106] = new State(new int[]{27,14,42,111,43,165,45,-79},new int[]{-24,107,-23,109}); - states[107] = new State(new int[]{45,108}); - states[108] = new State(-76); - states[109] = new State(new int[]{45,110}); - states[110] = new State(-77); - states[111] = new State(new int[]{3,9,40,103,46,115,57,121,59,126,62,137,33,149,27,-102,45,-102},new int[]{-34,112,-28,113,-21,16,-63,17,-3,34,-2,95,-62,46,-22,102,-25,114,-27,120,-29,125,-30,136,-26,148,-33,151,-32,152}); - states[112] = new State(new int[]{27,14,45,-78}); - states[113] = new State(-73); - states[114] = new State(-66); - states[115] = new State(new int[]{3,9,5,53,7,54,6,55,8,56,9,57,10,58,4,59,28,60,25,63,34,66,12,74,11,76},new int[]{-10,116,-13,20,-17,23,-16,42,-18,28,-63,33,-3,34,-2,43,-62,46,-8,65}); - states[116] = new State(new int[]{47,117}); - states[117] = new State(new int[]{3,9,40,103,46,115,57,121,59,126,62,137,33,149,45,-102,27,-102},new int[]{-34,118,-28,113,-21,16,-63,17,-3,34,-2,95,-62,46,-22,102,-25,114,-27,120,-29,125,-30,136,-26,148,-33,151,-32,152}); - states[118] = new State(new int[]{45,119,27,14}); - states[119] = new State(-82); - states[120] = new State(-67); - states[121] = new State(new int[]{3,9,40,103,46,115,57,121,59,126,62,137,33,149,58,-102,27,-102},new int[]{-34,122,-28,113,-21,16,-63,17,-3,34,-2,95,-62,46,-22,102,-25,114,-27,120,-29,125,-30,136,-26,148,-33,151,-32,152}); - states[122] = new State(new int[]{58,123,27,14}); - states[123] = new State(new int[]{3,9,5,53,7,54,6,55,8,56,9,57,10,58,4,59,28,60,25,63,34,66,12,74,11,76},new int[]{-10,124,-13,20,-17,23,-16,42,-18,28,-63,33,-3,34,-2,43,-62,46,-8,65}); - states[124] = new State(-83); - states[125] = new State(-68); - states[126] = new State(new int[]{3,9},new int[]{-2,127}); - states[127] = new State(new int[]{26,128}); - states[128] = new State(new int[]{3,9,5,53,7,54,6,55,8,56,9,57,10,58,4,59,28,60,25,63,34,66,12,74,11,76},new int[]{-10,129,-13,20,-17,23,-16,42,-18,28,-63,33,-3,34,-2,43,-62,46,-8,65}); - states[129] = new State(new int[]{60,130}); - states[130] = new State(new int[]{3,9,5,53,7,54,6,55,8,56,9,57,10,58,4,59,28,60,25,63,34,66,12,74,11,76},new int[]{-10,131,-13,20,-17,23,-16,42,-18,28,-63,33,-3,34,-2,43,-62,46,-8,65}); - states[131] = new State(new int[]{61,163,47,-86},new int[]{-14,132}); - states[132] = new State(new int[]{47,133}); - states[133] = new State(new int[]{3,9,40,103,46,115,57,121,59,126,62,137,33,149,45,-102,27,-102},new int[]{-34,134,-28,113,-21,16,-63,17,-3,34,-2,95,-62,46,-22,102,-25,114,-27,120,-29,125,-30,136,-26,148,-33,151,-32,152}); - states[134] = new State(new int[]{45,135,27,14}); - states[135] = new State(-84); - states[136] = new State(-69); - states[137] = new State(new int[]{3,9,5,53,7,54,6,55,8,56,9,57,10,58,4,59,28,60,25,63,34,66,12,74,11,76},new int[]{-10,138,-13,20,-17,23,-16,42,-18,28,-63,33,-3,34,-2,43,-62,46,-8,65}); - states[138] = new State(new int[]{55,139}); - states[139] = new State(new int[]{3,9,5,53,7,54,6,55,8,56,9,57,10,58,4,59,28,60,25,63,34,66,12,74,11,76,39,-90,42,-90,45,-90},new int[]{-35,140,-36,162,-56,145,-15,159,-11,155,-10,158,-13,20,-17,23,-16,42,-18,28,-63,33,-3,34,-2,43,-62,46,-8,65}); - states[140] = new State(new int[]{39,143,42,160,45,-97},new int[]{-31,141}); - states[141] = new State(new int[]{45,142}); - states[142] = new State(-87); - states[143] = new State(new int[]{3,9,5,53,7,54,6,55,8,56,9,57,10,58,4,59,28,60,25,63,34,66,12,74,11,76},new int[]{-36,144,-56,145,-15,159,-11,155,-10,158,-13,20,-17,23,-16,42,-18,28,-63,33,-3,34,-2,43,-62,46,-8,65}); - states[144] = new State(-89); - states[145] = new State(new int[]{32,146,30,153}); - states[146] = new State(new int[]{3,9,40,103,46,115,57,121,59,126,62,137,33,149,27,-102,39,-102,42,-102,45,-102},new int[]{-34,147,-28,113,-21,16,-63,17,-3,34,-2,95,-62,46,-22,102,-25,114,-27,120,-29,125,-30,136,-26,148,-33,151,-32,152}); - states[147] = new State(new int[]{27,14,39,-91,42,-91,45,-91}); - states[148] = new State(-70); - states[149] = new State(new int[]{3,9,5,53,7,54,6,55,8,56,9,57,10,58,4,59,28,60,25,63,34,66,12,74,11,76},new int[]{-10,150,-13,20,-17,23,-16,42,-18,28,-63,33,-3,34,-2,43,-62,46,-8,65}); - states[150] = new State(-98); - states[151] = new State(-71); - states[152] = new State(-72); - states[153] = new State(new int[]{3,9,5,53,7,54,6,55,8,56,9,57,10,58,4,59,28,60,25,63,34,66,12,74,11,76},new int[]{-15,154,-11,155,-10,158,-13,20,-17,23,-16,42,-18,28,-63,33,-3,34,-2,43,-62,46,-8,65}); - states[154] = new State(-93); - states[155] = new State(new int[]{36,156,32,-94,30,-94}); - states[156] = new State(new int[]{3,9,5,53,7,54,6,55,8,56,9,57,10,58,4,59,28,60,25,63,34,66,12,74,11,76},new int[]{-11,157,-10,158,-13,20,-17,23,-16,42,-18,28,-63,33,-3,34,-2,43,-62,46,-8,65}); - states[157] = new State(-95); - states[158] = new State(-109); - states[159] = new State(-92); - states[160] = new State(new int[]{3,9,40,103,46,115,57,121,59,126,62,137,33,149,27,-102,45,-102},new int[]{-34,161,-28,113,-21,16,-63,17,-3,34,-2,95,-62,46,-22,102,-25,114,-27,120,-29,125,-30,136,-26,148,-33,151,-32,152}); - states[161] = new State(new int[]{27,14,45,-96}); - states[162] = new State(-88); - states[163] = new State(new int[]{3,9,5,53,7,54,6,55,8,56,9,57,10,58,4,59,28,60,25,63,34,66,12,74,11,76},new int[]{-11,164,-10,158,-13,20,-17,23,-16,42,-18,28,-63,33,-3,34,-2,43,-62,46,-8,65}); - states[164] = new State(-85); - states[165] = new State(new int[]{3,9,5,53,7,54,6,55,8,56,9,57,10,58,4,59,28,60,25,63,34,66,12,74,11,76},new int[]{-10,166,-13,20,-17,23,-16,42,-18,28,-63,33,-3,34,-2,43,-62,46,-8,65}); - states[166] = new State(new int[]{41,167}); - states[167] = new State(new int[]{3,9,40,103,46,115,57,121,59,126,62,137,33,149,27,-102,42,-102,43,-102,45,-102},new int[]{-34,168,-28,113,-21,16,-63,17,-3,34,-2,95,-62,46,-22,102,-25,114,-27,120,-29,125,-30,136,-26,148,-33,151,-32,152}); - states[168] = new State(new int[]{27,14,42,111,43,165,45,-79},new int[]{-24,169,-23,170}); - states[169] = new State(-80); - states[170] = new State(-81); - states[171] = new State(-136); - states[172] = new State(-131); - states[173] = new State(new int[]{3,9},new int[]{-40,174,-39,210,-6,176,-4,209,-2,205}); - states[174] = new State(new int[]{3,9,44,-113,50,-113,49,-113,51,-113,53,-113},new int[]{-39,175,-6,176,-4,209,-2,205}); - states[175] = new State(-107); - states[176] = new State(new int[]{32,177,30,203}); - states[177] = new State(new int[]{3,9,54,185,56,189,63,193},new int[]{-48,178,-7,180,-2,183,-49,184,-51,188,-50,192}); - states[178] = new State(new int[]{27,179}); - states[179] = new State(-105); - states[180] = new State(new int[]{31,181,27,-118,29,-118}); - states[181] = new State(new int[]{3,9},new int[]{-2,182}); - states[182] = new State(-130); - states[183] = new State(-129); - states[184] = new State(-119); - states[185] = new State(new int[]{55,186,3,9,5,53,7,54,6,55,8,56,9,57,10,58,4,59,28,60,25,63,34,66,12,74,11,76},new int[]{-58,196,-57,202,-11,201,-10,158,-13,20,-17,23,-16,42,-18,28,-63,33,-3,34,-2,43,-62,46,-8,65}); - states[186] = new State(new int[]{3,9,54,185,56,189,63,193},new int[]{-48,187,-7,180,-2,183,-49,184,-51,188,-50,192}); - states[187] = new State(-122); - states[188] = new State(-120); - states[189] = new State(new int[]{45,190}); - states[190] = new State(new int[]{30,191}); - states[191] = new State(-124); - states[192] = new State(-121); - states[193] = new State(new int[]{60,194}); - states[194] = new State(new int[]{3,9,54,185,56,189,63,193},new int[]{-48,195,-7,180,-2,183,-49,184,-51,188,-50,192}); - states[195] = new State(-128); - states[196] = new State(new int[]{55,197,30,199}); - states[197] = new State(new int[]{3,9,54,185,56,189,63,193},new int[]{-48,198,-7,180,-2,183,-49,184,-51,188,-50,192}); - states[198] = new State(-123); - states[199] = new State(new int[]{3,9,5,53,7,54,6,55,8,56,9,57,10,58,4,59,28,60,25,63,34,66,12,74,11,76},new int[]{-57,200,-11,201,-10,158,-13,20,-17,23,-16,42,-18,28,-63,33,-3,34,-2,43,-62,46,-8,65}); - states[200] = new State(-126); - states[201] = new State(-127); - states[202] = new State(-125); - states[203] = new State(new int[]{3,9},new int[]{-4,204,-2,205}); - states[204] = new State(-104); - states[205] = new State(new int[]{13,207,12,208,32,-10,30,-10,21,-10},new int[]{-5,206}); - states[206] = new State(-7); - states[207] = new State(-8); - states[208] = new State(-9); - states[209] = new State(-103); - states[210] = new State(-106); - states[211] = new State(-132); - states[212] = new State(new int[]{3,9},new int[]{-43,213,-42,219,-4,215,-2,205}); - states[213] = new State(new int[]{3,9,44,-112,50,-112,49,-112,51,-112,53,-112},new int[]{-42,214,-4,215,-2,205}); - states[214] = new State(-111); - states[215] = new State(new int[]{21,216}); - states[216] = new State(new int[]{3,9,5,53,7,54,6,55,8,56,9,57,10,58,4,59,28,60,25,63,34,66,12,74,11,76},new int[]{-11,217,-10,158,-13,20,-17,23,-16,42,-18,28,-63,33,-3,34,-2,43,-62,46,-8,65}); - states[217] = new State(new int[]{27,218}); - states[218] = new State(-108); - states[219] = new State(-110); - states[220] = new State(-133); - states[221] = new State(new int[]{3,9},new int[]{-46,222,-47,228,-4,224,-2,205}); - states[222] = new State(new int[]{3,9,44,-114,50,-114,49,-114,51,-114,53,-114},new int[]{-47,223,-4,224,-2,205}); - states[223] = new State(-116); - states[224] = new State(new int[]{21,225}); - states[225] = new State(new int[]{3,9,54,185,56,189,63,193},new int[]{-48,226,-7,180,-2,183,-49,184,-51,188,-50,192}); - states[226] = new State(new int[]{27,227}); - states[227] = new State(-117); - states[228] = new State(-115); - states[229] = new State(-134); - states[230] = new State(new int[]{3,9},new int[]{-2,231}); - states[231] = new State(new int[]{28,240,30,-138,27,-138},new int[]{-66,232}); - states[232] = new State(new int[]{30,238,27,-140},new int[]{-67,233}); - states[233] = new State(new int[]{27,234}); - states[234] = new State(-135,new int[]{-53,235,-37,10}); - states[235] = new State(new int[]{3,9},new int[]{-2,236}); - states[236] = new State(new int[]{27,237}); - states[237] = new State(-137); - states[238] = new State(new int[]{3,9,54,185,56,189,63,193},new int[]{-48,239,-7,180,-2,183,-49,184,-51,188,-50,192}); - states[239] = new State(-141); - states[240] = new State(new int[]{50,249,3,-145},new int[]{-68,241,-69,250,-64,245}); - states[241] = new State(new int[]{29,242,27,243}); - states[242] = new State(-139); - states[243] = new State(new int[]{50,249,3,-145},new int[]{-69,244,-64,245}); - states[244] = new State(-143); - states[245] = new State(new int[]{3,9},new int[]{-6,246,-4,209,-2,205}); - states[246] = new State(new int[]{32,247,30,203}); - states[247] = new State(new int[]{3,9,54,185,56,189,63,193},new int[]{-48,248,-7,180,-2,183,-49,184,-51,188,-50,192}); - states[248] = new State(-144); - states[249] = new State(-146); - states[250] = new State(-142); - states[251] = new State(new int[]{3,9,5,53,7,54,6,55,8,56,9,57,10,58,4,59,28,60,25,63,34,66,12,74,11,76},new int[]{-10,252,-13,20,-17,23,-16,42,-18,28,-63,33,-3,34,-2,43,-62,46,-8,65}); - states[252] = new State(-3); - - rules[1] = new Rule(-65, new int[]{-1,2}); - rules[2] = new Rule(-1, new int[]{48,-2,27,-53,-2,31}); - rules[3] = new Rule(-1, new int[]{52,-10}); - rules[4] = new Rule(-2, new int[]{3}); - rules[5] = new Rule(-3, new int[]{-2,31,-2}); - rules[6] = new Rule(-3, new int[]{-2}); - rules[7] = new Rule(-4, new int[]{-2,-5}); - rules[8] = new Rule(-5, new int[]{13}); - rules[9] = new Rule(-5, new int[]{12}); - rules[10] = new Rule(-5, new int[]{}); - rules[11] = new Rule(-53, new int[]{-37,44,-34,45}); - rules[12] = new Rule(-8, new int[]{34,-9,35}); - rules[13] = new Rule(-9, new int[]{-12}); - rules[14] = new Rule(-9, new int[]{-9,30,-12}); - rules[15] = new Rule(-9, new int[]{}); - rules[16] = new Rule(-12, new int[]{-10}); - rules[17] = new Rule(-12, new int[]{-10,36,-10}); - rules[18] = new Rule(-10, new int[]{-13}); - rules[19] = new Rule(-10, new int[]{-13,-61,-13}); - rules[20] = new Rule(-61, new int[]{21}); - rules[21] = new Rule(-61, new int[]{22}); - rules[22] = new Rule(-61, new int[]{17}); - rules[23] = new Rule(-61, new int[]{19}); - rules[24] = new Rule(-61, new int[]{18}); - rules[25] = new Rule(-61, new int[]{20}); - rules[26] = new Rule(-13, new int[]{-17}); - rules[27] = new Rule(-13, new int[]{-17,-59,-19}); - rules[28] = new Rule(-17, new int[]{-16}); - rules[29] = new Rule(-17, new int[]{12,-16}); - rules[30] = new Rule(-17, new int[]{11,-16}); - rules[31] = new Rule(-19, new int[]{-16}); - rules[32] = new Rule(-19, new int[]{-19,-59,-16}); - rules[33] = new Rule(-16, new int[]{-18}); - rules[34] = new Rule(-16, new int[]{-18,-60,-20}); - rules[35] = new Rule(-20, new int[]{-18}); - rules[36] = new Rule(-20, new int[]{-20,-60,-18}); - rules[37] = new Rule(-18, new int[]{-63}); - rules[38] = new Rule(-18, new int[]{5}); - rules[39] = new Rule(-18, new int[]{7}); - rules[40] = new Rule(-18, new int[]{6}); - rules[41] = new Rule(-18, new int[]{8}); - rules[42] = new Rule(-18, new int[]{9}); - rules[43] = new Rule(-18, new int[]{10}); - rules[44] = new Rule(-18, new int[]{4}); - rules[45] = new Rule(-18, new int[]{28,-10,29}); - rules[46] = new Rule(-18, new int[]{25,-18}); - rules[47] = new Rule(-18, new int[]{-8}); - rules[48] = new Rule(-63, new int[]{-3}); - rules[49] = new Rule(-63, new int[]{-62}); - rules[50] = new Rule(-62, new int[]{-3,31,-2}); - rules[51] = new Rule(-62, new int[]{-3,37,-55,38}); - rules[52] = new Rule(-62, new int[]{-62,31,-2}); - rules[53] = new Rule(-62, new int[]{-62,37,-55,38}); - rules[54] = new Rule(-55, new int[]{-10}); - rules[55] = new Rule(-55, new int[]{-55,30,-10}); - rules[56] = new Rule(-59, new int[]{12}); - rules[57] = new Rule(-59, new int[]{11}); - rules[58] = new Rule(-59, new int[]{16}); - rules[59] = new Rule(-60, new int[]{13}); - rules[60] = new Rule(-60, new int[]{14}); - rules[61] = new Rule(-60, new int[]{23}); - rules[62] = new Rule(-60, new int[]{24}); - rules[63] = new Rule(-60, new int[]{15}); - rules[64] = new Rule(-28, new int[]{-21}); - rules[65] = new Rule(-28, new int[]{-22}); - rules[66] = new Rule(-28, new int[]{-25}); - rules[67] = new Rule(-28, new int[]{-27}); - rules[68] = new Rule(-28, new int[]{-29}); - rules[69] = new Rule(-28, new int[]{-30}); - rules[70] = new Rule(-28, new int[]{-26}); - rules[71] = new Rule(-28, new int[]{-33}); - rules[72] = new Rule(-28, new int[]{-32}); - rules[73] = new Rule(-34, new int[]{-28}); - rules[74] = new Rule(-34, new int[]{-34,27,-28}); - rules[75] = new Rule(-21, new int[]{-63,26,-10}); - rules[76] = new Rule(-22, new int[]{40,-10,41,-34,-24,45}); - rules[77] = new Rule(-22, new int[]{40,-10,41,-34,-23,45}); - rules[78] = new Rule(-24, new int[]{42,-34}); - rules[79] = new Rule(-24, new int[]{}); - rules[80] = new Rule(-23, new int[]{43,-10,41,-34,-24}); - rules[81] = new Rule(-23, new int[]{43,-10,41,-34,-23}); - rules[82] = new Rule(-25, new int[]{46,-10,47,-34,45}); - rules[83] = new Rule(-27, new int[]{57,-34,58,-10}); - rules[84] = new Rule(-29, new int[]{59,-2,26,-10,60,-10,-14,47,-34,45}); - rules[85] = new Rule(-14, new int[]{61,-11}); - rules[86] = new Rule(-14, new int[]{}); - rules[87] = new Rule(-30, new int[]{62,-10,55,-35,-31,45}); - rules[88] = new Rule(-35, new int[]{-36}); - rules[89] = new Rule(-35, new int[]{-35,39,-36}); - rules[90] = new Rule(-35, new int[]{}); - rules[91] = new Rule(-36, new int[]{-56,32,-34}); - rules[92] = new Rule(-56, new int[]{-15}); - rules[93] = new Rule(-56, new int[]{-56,30,-15}); - rules[94] = new Rule(-15, new int[]{-11}); - rules[95] = new Rule(-15, new int[]{-11,36,-11}); - rules[96] = new Rule(-31, new int[]{42,-34}); - rules[97] = new Rule(-31, new int[]{}); - rules[98] = new Rule(-26, new int[]{33,-10}); - rules[99] = new Rule(-54, new int[]{-10}); - rules[100] = new Rule(-54, new int[]{-54,30,-10}); - rules[101] = new Rule(-33, new int[]{-2,28,-54,29}); - rules[102] = new Rule(-32, new int[]{}); - rules[103] = new Rule(-6, new int[]{-4}); - rules[104] = new Rule(-6, new int[]{-6,30,-4}); - rules[105] = new Rule(-39, new int[]{-6,32,-48,27}); - rules[106] = new Rule(-40, new int[]{-39}); - rules[107] = new Rule(-40, new int[]{-40,-39}); - rules[108] = new Rule(-42, new int[]{-4,21,-11,27}); - rules[109] = new Rule(-11, new int[]{-10}); - rules[110] = new Rule(-43, new int[]{-42}); - rules[111] = new Rule(-43, new int[]{-43,-42}); - rules[112] = new Rule(-44, new int[]{49,-43}); - rules[113] = new Rule(-41, new int[]{50,-40}); - rules[114] = new Rule(-45, new int[]{51,-46}); - rules[115] = new Rule(-46, new int[]{-47}); - rules[116] = new Rule(-46, new int[]{-46,-47}); - rules[117] = new Rule(-47, new int[]{-4,21,-48,27}); - rules[118] = new Rule(-48, new int[]{-7}); - rules[119] = new Rule(-48, new int[]{-49}); - rules[120] = new Rule(-48, new int[]{-51}); - rules[121] = new Rule(-48, new int[]{-50}); - rules[122] = new Rule(-49, new int[]{54,55,-48}); - rules[123] = new Rule(-49, new int[]{54,-58,55,-48}); - rules[124] = new Rule(-51, new int[]{56,45,30}); - rules[125] = new Rule(-58, new int[]{-57}); - rules[126] = new Rule(-58, new int[]{-58,30,-57}); - rules[127] = new Rule(-57, new int[]{-11}); - rules[128] = new Rule(-50, new int[]{63,60,-48}); - rules[129] = new Rule(-7, new int[]{-2}); - rules[130] = new Rule(-7, new int[]{-7,31,-2}); - rules[131] = new Rule(-38, new int[]{-41}); - rules[132] = new Rule(-38, new int[]{-44}); - rules[133] = new Rule(-38, new int[]{-45}); - rules[134] = new Rule(-38, new int[]{-52}); - rules[135] = new Rule(-37, new int[]{}); - rules[136] = new Rule(-37, new int[]{-37,-38}); - rules[137] = new Rule(-52, new int[]{53,-2,-66,-67,27,-53,-2,27}); - rules[138] = new Rule(-66, new int[]{}); - rules[139] = new Rule(-66, new int[]{28,-68,29}); - rules[140] = new Rule(-67, new int[]{}); - rules[141] = new Rule(-67, new int[]{30,-48}); - rules[142] = new Rule(-68, new int[]{-69}); - rules[143] = new Rule(-68, new int[]{-68,27,-69}); - rules[144] = new Rule(-69, new int[]{-64,-6,32,-48}); - rules[145] = new Rule(-64, new int[]{}); - rules[146] = new Rule(-64, new int[]{50}); - } - - protected override void Initialize() { - this.InitSpecialTokens((int)Tokens.error, (int)Tokens.EOF); - this.InitStates(states); - this.InitRules(rules); - this.InitNonTerminals(nonTerms); - } - - protected override void DoAction(int action) - { - switch (action) - { - case 2: // module -> MODULE, ident, SEMICOLUMN, mainblock, ident, COMMA -{ - if (ValueStack[ValueStack.Depth-5].id.name != ValueStack[ValueStack.Depth-2].id.name) - PT.AddError("Имя " + ValueStack[ValueStack.Depth-2].id.name + " должно совпадать с именем модуля " + ValueStack[ValueStack.Depth-5].id.name, LocationStack[LocationStack.Depth-2]); - - // Подключение стандартного модуля Oberon00System, написанного на PascalABC.NET - var ul = new uses_list("Oberon00System"); - - // Формирование модуля основной программы (используется фабричный метод вместо конструктора) - root = program_module.create(ValueStack[ValueStack.Depth-5].id, ul, ValueStack[ValueStack.Depth-3].bl, CurrentLocationSpan); - } - break; - case 3: // module -> INVISIBLE, expr -{ // Для Intellisense - root = ValueStack[ValueStack.Depth-1].ex; - } - break; - case 4: // ident -> ID -{ - CurrentSemanticValue.id = new ident(ValueStack[ValueStack.Depth-1].sVal,CurrentLocationSpan); - } - break; - case 5: // specifiedIdent -> ident, COMMA, ident -{ - CurrentSemanticValue.adrv = new dot_node(ValueStack[ValueStack.Depth-3].id, ValueStack[ValueStack.Depth-1].id, CurrentLocationSpan); - } - break; - case 6: // specifiedIdent -> ident -{ - CurrentSemanticValue.adrv = ValueStack[ValueStack.Depth-1].id; - } - break; - case 7: // identDef -> ident, ExportLabel -{ - CurrentSemanticValue.obrid = new oberon_ident_with_export_marker(ValueStack[ValueStack.Depth-2].id.name, ValueStack[ValueStack.Depth-1].obrem, CurrentLocationSpan); - } - break; - case 8: // ExportLabel -> MULT -{ - CurrentSemanticValue.obrem = oberon_export_marker.export; - } - break; - case 9: // ExportLabel -> MINUS -{ - CurrentSemanticValue.obrem = oberon_export_marker.export_readonly; - } - break; - case 10: // ExportLabel -> /* empty */ -{ - //$$ = oberon_export_marker.nonexport; - CurrentSemanticValue.obrem = oberon_export_marker.export; - } - break; - case 11: // mainblock -> Declarations, BEGIN, StatementSequence, END -{ - CurrentSemanticValue.bl = new block(ValueStack[ValueStack.Depth-4].decl, ValueStack[ValueStack.Depth-2].sl, CurrentLocationSpan); - } - break; - case 12: // SetConstant -> LBRACE, SetElemList, RBRACE -{ - CurrentSemanticValue.sc = ValueStack[ValueStack.Depth-2].sc; - CurrentSemanticValue.sc.source_context = CurrentLocationSpan; - } - break; - case 13: // SetElemList -> SetElem -{ - CurrentSemanticValue.sc = new pascal_set_constant(); - CurrentSemanticValue.sc.Add(ValueStack[ValueStack.Depth-1].ex); - CurrentSemanticValue.sc.source_context = CurrentLocationSpan; - - } - break; - case 14: // SetElemList -> SetElemList, COLUMN, SetElem -{ - CurrentSemanticValue.sc = ValueStack[ValueStack.Depth-3].sc; - CurrentSemanticValue.sc.Add(ValueStack[ValueStack.Depth-1].ex); - CurrentSemanticValue.sc.source_context = CurrentLocationSpan; - } - break; - case 15: // SetElemList -> /* empty */ -{ - CurrentSemanticValue.sc = new pascal_set_constant(); - } - break; - case 17: // SetElem -> expr, DOUBLEPOINT, expr -{ - CurrentSemanticValue.ex = new diapason_expr(ValueStack[ValueStack.Depth-3].ex, ValueStack[ValueStack.Depth-1].ex, CurrentLocationSpan); - } - break; - case 18: // expr -> SimpleExpr -{ - CurrentSemanticValue.ex = ValueStack[ValueStack.Depth-1].ex; - } - break; - case 19: // expr -> SimpleExpr, Relation, SimpleExpr -{ - CurrentSemanticValue.ex = new bin_expr(ValueStack[ValueStack.Depth-3].ex, ValueStack[ValueStack.Depth-1].ex, ValueStack[ValueStack.Depth-2].ops, CurrentLocationSpan); - } - break; - case 20: // Relation -> EQ -{ - CurrentSemanticValue.ops = Operators.Equal; - } - break; - case 21: // Relation -> NE -{ - CurrentSemanticValue.ops = Operators.NotEqual; - } - break; - case 22: // Relation -> LT -{ - CurrentSemanticValue.ops = Operators.Less; - } - break; - case 23: // Relation -> LE -{ - CurrentSemanticValue.ops = Operators.LessEqual; - } - break; - case 24: // Relation -> GT -{ - CurrentSemanticValue.ops = Operators.Greater; - } - break; - case 25: // Relation -> GE -{ - CurrentSemanticValue.ops = Operators.GreaterEqual; - } - break; - case 26: // SimpleExpr -> signedTerm -{ - CurrentSemanticValue.ex = ValueStack[ValueStack.Depth-1].ex; - CurrentSemanticValue.ex.source_context = CurrentLocationSpan; - } - break; - case 27: // SimpleExpr -> signedTerm, AddOperator, AddList -{ - CurrentSemanticValue.ex = new bin_expr(ValueStack[ValueStack.Depth-3].ex, ValueStack[ValueStack.Depth-1].ex, ValueStack[ValueStack.Depth-2].ops, CurrentLocationSpan); - } - break; - case 29: // signedTerm -> MINUS, term -{ - CurrentSemanticValue.ex = new un_expr(ValueStack[ValueStack.Depth-1].ex, Operators.Minus, CurrentLocationSpan); - } - break; - case 30: // signedTerm -> PLUS, term -{ - CurrentSemanticValue.ex = new un_expr(ValueStack[ValueStack.Depth-1].ex, Operators.Plus, CurrentLocationSpan); - } - break; - case 32: // AddList -> AddList, AddOperator, term -{ - CurrentSemanticValue.ex = new bin_expr(ValueStack[ValueStack.Depth-3].ex, ValueStack[ValueStack.Depth-1].ex, ValueStack[ValueStack.Depth-2].ops, CurrentLocationSpan); - } - break; - case 34: // term -> factor, MultOperator, FactorList -{ - CurrentSemanticValue.ex = new bin_expr(ValueStack[ValueStack.Depth-3].ex, ValueStack[ValueStack.Depth-1].ex, ValueStack[ValueStack.Depth-2].ops, CurrentLocationSpan); - } - break; - case 36: // FactorList -> FactorList, MultOperator, factor -{ - CurrentSemanticValue.ex = new bin_expr(ValueStack[ValueStack.Depth-3].ex, ValueStack[ValueStack.Depth-1].ex, ValueStack[ValueStack.Depth-2].ops, CurrentLocationSpan); - } - break; - case 37: // factor -> Designator -{ - CurrentSemanticValue.ex = ValueStack[ValueStack.Depth-1].adrv; - } - break; - case 38: // factor -> INTNUM -{ - CurrentSemanticValue.ex = new int32_const(ValueStack[ValueStack.Depth-1].iVal,CurrentLocationSpan); - } - break; - case 39: // factor -> LONGINTNUM -{ - CurrentSemanticValue.ex = new int64_const(ValueStack[ValueStack.Depth-1].lVal, CurrentLocationSpan); - } - break; - case 40: // factor -> REALNUM -{ - CurrentSemanticValue.ex = new double_const(ValueStack[ValueStack.Depth-1].rVal, CurrentLocationSpan); - } - break; - case 41: // factor -> TRUE -{ - CurrentSemanticValue.ex = new bool_const(true,CurrentLocationSpan); - } - break; - case 42: // factor -> FALSE -{ - CurrentSemanticValue.ex = new bool_const(false,CurrentLocationSpan); - } - break; - case 43: // factor -> CHAR_CONST -{ - CurrentSemanticValue.ex = new char_const(ValueStack[ValueStack.Depth-1].cVal, CurrentLocationSpan); - } - break; - case 44: // factor -> STRING_CONST -{ - CurrentSemanticValue.ex = new string_const(ValueStack[ValueStack.Depth-1].sVal, CurrentLocationSpan); - } - break; - case 45: // factor -> LPAREN, expr, RPAREN -{ - CurrentSemanticValue.ex = ValueStack[ValueStack.Depth-2].ex; - } - break; - case 46: // factor -> NOT, factor -{ - CurrentSemanticValue.ex = new un_expr(ValueStack[ValueStack.Depth-1].ex,Operators.LogicalNOT,CurrentLocationSpan); - } - break; - case 48: // Designator -> specifiedIdent -{ - CurrentSemanticValue.adrv = ValueStack[ValueStack.Depth-1].adrv; - } - break; - case 49: // Designator -> ComplexDesignator -{ - CurrentSemanticValue.adrv = ValueStack[ValueStack.Depth-1].adrv; - } - break; - case 50: // ComplexDesignator -> specifiedIdent, COMMA, ident -{ - CurrentSemanticValue.adrv = new dot_node(ValueStack[ValueStack.Depth-3].adrv, ValueStack[ValueStack.Depth-1].id, CurrentLocationSpan); - } - break; - case 51: // ComplexDesignator -> specifiedIdent, LBRACKET, ExprList, RBRACKET -{ - indexer indxr = new indexer(); - indxr.dereferencing_value = ValueStack[ValueStack.Depth-4].adrv; - indxr.indexes = ValueStack[ValueStack.Depth-2].el; - CurrentSemanticValue.adrv = indxr; - CurrentSemanticValue.adrv.source_context = CurrentLocationSpan; - } - break; - case 52: // ComplexDesignator -> ComplexDesignator, COMMA, ident -{ - CurrentSemanticValue.adrv = new dot_node(ValueStack[ValueStack.Depth-3].adrv, ValueStack[ValueStack.Depth-1].id, CurrentLocationSpan); - } - break; - case 53: // ComplexDesignator -> ComplexDesignator, LBRACKET, ExprList, RBRACKET -{ - indexer indxr = new indexer(); - indxr.dereferencing_value = ValueStack[ValueStack.Depth-4].adrv; - indxr.indexes = ValueStack[ValueStack.Depth-2].el; - CurrentSemanticValue.adrv = indxr; - CurrentSemanticValue.adrv.source_context = CurrentLocationSpan; - } - break; - case 54: // ExprList -> expr -{ - CurrentSemanticValue.el = new expression_list(ValueStack[ValueStack.Depth-1].ex, CurrentLocationSpan); - } - break; - case 55: // ExprList -> ExprList, COLUMN, expr -{ - CurrentSemanticValue.el = ValueStack[ValueStack.Depth-3].el; - CurrentSemanticValue.el.Add(ValueStack[ValueStack.Depth-1].ex, LocationStack[LocationStack.Depth-1]); - CurrentSemanticValue.el.source_context = CurrentLocationSpan; - } - break; - case 56: // AddOperator -> MINUS -{ - CurrentSemanticValue.ops = Operators.Minus; - } - break; - case 57: // AddOperator -> PLUS -{ - CurrentSemanticValue.ops = Operators.Plus; - } - break; - case 58: // AddOperator -> OR -{ - CurrentSemanticValue.ops = Operators.LogicalOR; - } - break; - case 59: // MultOperator -> MULT -{ - CurrentSemanticValue.ops = Operators.Multiplication; - } - break; - case 60: // MultOperator -> DIVIDE -{ - CurrentSemanticValue.ops = Operators.Division; - } - break; - case 61: // MultOperator -> DIV -{ - CurrentSemanticValue.ops = Operators.IntegerDivision; - } - break; - case 62: // MultOperator -> MOD -{ - CurrentSemanticValue.ops = Operators.ModulusRemainder; - } - break; - case 63: // MultOperator -> AND -{ - CurrentSemanticValue.ops = Operators.LogicalAND; - } - break; - case 73: // StatementSequence -> Statement -{ - CurrentSemanticValue.sl = new statement_list(ValueStack[ValueStack.Depth-1].st,CurrentLocationSpan); - } - break; - case 74: // StatementSequence -> StatementSequence, SEMICOLUMN, Statement -{ - ValueStack[ValueStack.Depth-3].sl.Add(ValueStack[ValueStack.Depth-1].st,CurrentLocationSpan); - CurrentSemanticValue.sl = ValueStack[ValueStack.Depth-3].sl; - } - break; - case 75: // Assignment -> Designator, ASSIGN, expr -{ - CurrentSemanticValue.st = new assign(ValueStack[ValueStack.Depth-3].adrv, ValueStack[ValueStack.Depth-1].ex, Operators.Assignment, CurrentLocationSpan); - } - break; - case 76: // IfStatement -> IF, expr, THEN, StatementSequence, ElseStatements, END -{ - CurrentSemanticValue.st = new if_node(ValueStack[ValueStack.Depth-5].ex, ValueStack[ValueStack.Depth-3].sl, ValueStack[ValueStack.Depth-2].st, CurrentLocationSpan); - } - break; - case 77: // IfStatement -> IF, expr, THEN, StatementSequence, ElseIfStatements, END -{ - CurrentSemanticValue.st = new if_node(ValueStack[ValueStack.Depth-5].ex, ValueStack[ValueStack.Depth-3].sl, ValueStack[ValueStack.Depth-2].st, CurrentLocationSpan); - } - break; - case 78: // ElseStatements -> ELSE, StatementSequence -{ - CurrentSemanticValue.st = ValueStack[ValueStack.Depth-1].sl; - CurrentSemanticValue.st.source_context = CurrentLocationSpan; - } - break; - case 79: // ElseStatements -> /* empty */ -{ - CurrentSemanticValue.st = null; - } - break; - case 80: // ElseIfStatements -> ELSEIF, expr, THEN, StatementSequence, ElseStatements -{ - CurrentSemanticValue.st = new if_node(ValueStack[ValueStack.Depth-4].ex, ValueStack[ValueStack.Depth-2].sl, ValueStack[ValueStack.Depth-1].st, CurrentLocationSpan); - } - break; - case 81: // ElseIfStatements -> ELSEIF, expr, THEN, StatementSequence, ElseIfStatements -{ - CurrentSemanticValue.st = new if_node(ValueStack[ValueStack.Depth-4].ex, ValueStack[ValueStack.Depth-2].sl, ValueStack[ValueStack.Depth-1].st, CurrentLocationSpan); - } - break; - case 82: // WhileStatement -> WHILE, expr, DO, StatementSequence, END -{ - CurrentSemanticValue.st = new while_node(ValueStack[ValueStack.Depth-4].ex, ValueStack[ValueStack.Depth-2].sl, WhileCycleType.While, CurrentLocationSpan); - } - break; - case 83: // RepeatStatement -> REPEAT, StatementSequence, UNTIL, expr -{ - CurrentSemanticValue.st = new repeat_node(ValueStack[ValueStack.Depth-3].sl, ValueStack[ValueStack.Depth-1].ex, CurrentLocationSpan); - } - break; - case 84: // ForStatement -> FOR, ident, ASSIGN, expr, TO, expr, ForStep, DO, - // StatementSequence, END -{ - expression step; - if (ValueStack[ValueStack.Depth-4].ex != null) step = ValueStack[ValueStack.Depth-4].ex; - else step = new int32_const(1, LocationStack[LocationStack.Depth-4]); - // Будем моделировать цикл через while - statement_list forStmnt = GetForThroughWhile(ValueStack[ValueStack.Depth-9].id, ValueStack[ValueStack.Depth-7].ex, ValueStack[ValueStack.Depth-5].ex, ValueStack[ValueStack.Depth-2].sl, step, LocationStack[LocationStack.Depth-8], CurrentLocationSpan); - CurrentSemanticValue.st = forStmnt; - CurrentSemanticValue.st.source_context = CurrentLocationSpan; - } - break; - case 85: // ForStep -> BY, ConstExpr -{ - int32_const step32 = ValueStack[ValueStack.Depth-1].ex as int32_const; - if (step32 != null) { // шаг является просто целым числом (без знака) - if (step32.val == 0) PT.AddError("Шаг цикла не может быть нулевым", LocationStack[LocationStack.Depth-2]); - else CurrentSemanticValue.ex = new int32_const(step32.val, CurrentLocationSpan); - } - else { // в значении шага либо присутствует знак, либо это вообще не целое - un_expr stepMinus = ValueStack[ValueStack.Depth-1].ex as un_expr; - int32_const stepMinusTerm = stepMinus.subnode as int32_const; - bool signMinus = (stepMinusTerm != null) && (stepMinus.operation_type == Operators.Minus); - if (signMinus) - if (stepMinusTerm.val == 0) - PT.AddError("Шаг цикла не может быть нулевым", LocationStack[LocationStack.Depth-2]); - else - CurrentSemanticValue.ex = new un_expr(stepMinusTerm, Operators.Minus, LocationStack[LocationStack.Depth-1]); - else - PT.AddError("Шаг цикла должен быть целым числом", LocationStack[LocationStack.Depth-2]); - } - } - break; - case 86: // ForStep -> /* empty */ -{ - CurrentSemanticValue.ex = null; - } - break; - case 87: // CaseStatement -> CASE, expr, OF, CaseVariantList, ElseBranch, END -{ - CurrentSemanticValue.st = new case_node(ValueStack[ValueStack.Depth-5].ex, ValueStack[ValueStack.Depth-3].cvars, ValueStack[ValueStack.Depth-2].st, CurrentLocationSpan); - } - break; - case 88: // CaseVariantList -> CaseVariant -{ - CurrentSemanticValue.cvars = new case_variants(); - CurrentSemanticValue.cvars.Add(ValueStack[ValueStack.Depth-1].cvar); - CurrentSemanticValue.cvars.source_context = CurrentLocationSpan; - } - break; - case 89: // CaseVariantList -> CaseVariantList, PIPE, CaseVariant -{ - CurrentSemanticValue.cvars = ValueStack[ValueStack.Depth-3].cvars; - CurrentSemanticValue.cvars.Add(ValueStack[ValueStack.Depth-1].cvar); - CurrentSemanticValue.cvars.source_context = CurrentLocationSpan; - } - break; - case 90: // CaseVariantList -> /* empty */ -{ - CurrentSemanticValue.cvars = new case_variants(); - } - break; - case 91: // CaseVariant -> CaseVariantLabelList, COLON, StatementSequence -{ - CurrentSemanticValue.cvar = new case_variant(ValueStack[ValueStack.Depth-3].el, ValueStack[ValueStack.Depth-1].sl, CurrentLocationSpan); - } - break; - case 92: // CaseVariantLabelList -> CaseVariantLabels -{ - CurrentSemanticValue.el = new expression_list(ValueStack[ValueStack.Depth-1].ex, CurrentLocationSpan); - } - break; - case 93: // CaseVariantLabelList -> CaseVariantLabelList, COLUMN, CaseVariantLabels -{ - CurrentSemanticValue.el = ValueStack[ValueStack.Depth-3].el; - CurrentSemanticValue.el.Add(ValueStack[ValueStack.Depth-1].ex, LocationStack[LocationStack.Depth-1]); - CurrentSemanticValue.el.source_context = CurrentLocationSpan; - } - break; - case 94: // CaseVariantLabels -> ConstExpr -{ - CurrentSemanticValue.ex = ValueStack[ValueStack.Depth-1].ex; - } - break; - case 95: // CaseVariantLabels -> ConstExpr, DOUBLEPOINT, ConstExpr -{ - CurrentSemanticValue.ex = new diapason_expr(ValueStack[ValueStack.Depth-3].ex, ValueStack[ValueStack.Depth-1].ex, CurrentLocationSpan); - } - break; - case 96: // ElseBranch -> ELSE, StatementSequence -{ - CurrentSemanticValue.st = ValueStack[ValueStack.Depth-1].sl; - CurrentSemanticValue.st.source_context = CurrentLocationSpan; - } - break; - case 97: // ElseBranch -> /* empty */ -{ - CurrentSemanticValue.st = null; - } - break; - case 98: // WriteStatement -> EXCLAMATION, expr -{ - expression_list el = new expression_list(ValueStack[ValueStack.Depth-1].ex,CurrentLocationSpan); - method_call mc = new method_call(el); - mc.dereferencing_value = new ident("print"); - CurrentSemanticValue.st = mc; - } - break; - case 99: // factparams -> expr -{ - CurrentSemanticValue.el = new expression_list(ValueStack[ValueStack.Depth-1].ex,CurrentLocationSpan); - } - break; - case 100: // factparams -> factparams, COLUMN, expr -{ - ValueStack[ValueStack.Depth-3].el.Add(ValueStack[ValueStack.Depth-1].ex,CurrentLocationSpan); - CurrentSemanticValue.el = ValueStack[ValueStack.Depth-3].el; - } - break; - case 101: // ProcCallStatement -> ident, LPAREN, factparams, RPAREN -{ - CurrentSemanticValue.st = new method_call(ValueStack[ValueStack.Depth-4].id,ValueStack[ValueStack.Depth-2].el,CurrentLocationSpan); - } - break; - case 102: // EmptyStatement -> /* empty */ -{ - CurrentSemanticValue.st = new empty_statement(); - } - break; - case 103: // IDList -> identDef -{ - CurrentSemanticValue.il=new ident_list(ValueStack[ValueStack.Depth-1].obrid,CurrentLocationSpan); - - } - break; - case 104: // IDList -> IDList, COLUMN, identDef -{ - ValueStack[ValueStack.Depth-3].il.Add(ValueStack[ValueStack.Depth-1].obrid,CurrentLocationSpan); - CurrentSemanticValue.il = ValueStack[ValueStack.Depth-3].il; - } - break; - case 105: // VarDecl -> IDList, COLON, TypeDef, SEMICOLUMN -{ - CurrentSemanticValue.vds = new var_def_statement(ValueStack[ValueStack.Depth-4].il, ValueStack[ValueStack.Depth-2].tdef, null, definition_attribute.None, false, CurrentLocationSpan); - } - break; - case 106: // VarDeclarations -> VarDecl -{ - CurrentSemanticValue.vdss = new variable_definitions(ValueStack[ValueStack.Depth-1].vds,CurrentLocationSpan); - } - break; - case 107: // VarDeclarations -> VarDeclarations, VarDecl -{ - ValueStack[ValueStack.Depth-2].vdss.Add(ValueStack[ValueStack.Depth-1].vds,CurrentLocationSpan); - CurrentSemanticValue.vdss = ValueStack[ValueStack.Depth-2].vdss; - } - break; - case 108: // ConstDecl -> identDef, EQ, ConstExpr, SEMICOLUMN -{ - CurrentSemanticValue.scd = new simple_const_definition(ValueStack[ValueStack.Depth-4].obrid,ValueStack[ValueStack.Depth-2].ex,CurrentLocationSpan); - } - break; - case 110: // ConstDeclarations -> ConstDecl -{ - CurrentSemanticValue.cdl = new consts_definitions_list(ValueStack[ValueStack.Depth-1].scd,CurrentLocationSpan); - } - break; - case 111: // ConstDeclarations -> ConstDeclarations, ConstDecl -{ - ValueStack[ValueStack.Depth-2].cdl.Add(ValueStack[ValueStack.Depth-1].scd,CurrentLocationSpan); - CurrentSemanticValue.cdl = ValueStack[ValueStack.Depth-2].cdl; - } - break; - case 112: // ConstDeclarationsSect -> CONST, ConstDeclarations -{ - CurrentSemanticValue.cdl = ValueStack[ValueStack.Depth-1].cdl; - CurrentSemanticValue.cdl.source_context = CurrentLocationSpan; - } - break; - case 113: // VarDeclarationsSect -> VAR, VarDeclarations -{ - CurrentSemanticValue.vdss = ValueStack[ValueStack.Depth-1].vdss; - CurrentSemanticValue.vdss.source_context = CurrentLocationSpan; - } - break; - case 114: // TypeDeclarationsSect -> TYPE, TypeDeclarations -{ - CurrentSemanticValue.td = ValueStack[ValueStack.Depth-1].td; - CurrentSemanticValue.td.source_context = CurrentLocationSpan; - } - break; - case 115: // TypeDeclarations -> TypeDecl -{ - CurrentSemanticValue.td = new type_declarations(); - CurrentSemanticValue.td.Add(ValueStack[ValueStack.Depth-1].tdec); - CurrentSemanticValue.td.source_context = CurrentLocationSpan; - } - break; - case 116: // TypeDeclarations -> TypeDeclarations, TypeDecl -{ - CurrentSemanticValue.td = ValueStack[ValueStack.Depth-2].td; - CurrentSemanticValue.td.Add(ValueStack[ValueStack.Depth-1].tdec); - CurrentSemanticValue.td.source_context = CurrentLocationSpan; - } - break; - case 117: // TypeDecl -> identDef, EQ, TypeDef, SEMICOLUMN -{ - CurrentSemanticValue.tdec = new type_declaration(ValueStack[ValueStack.Depth-4].obrid, ValueStack[ValueStack.Depth-2].tdef, CurrentLocationSpan); - } - break; - case 118: // TypeDef -> complexTypeIdent -{ - CurrentSemanticValue.tdef = ValueStack[ValueStack.Depth-1].ntr; - } - break; - case 119: // TypeDef -> ArrayType -{ - CurrentSemanticValue.tdef = ValueStack[ValueStack.Depth-1].tdef; - CurrentSemanticValue.tdef.source_context = CurrentLocationSpan; - } - break; - case 120: // TypeDef -> RecordType -{ - CurrentSemanticValue.tdef = ValueStack[ValueStack.Depth-1].cldef; - CurrentSemanticValue.tdef.source_context = CurrentLocationSpan; - } - break; - case 121: // TypeDef -> PointerType -{ - CurrentSemanticValue.tdef = ValueStack[ValueStack.Depth-1].rft; - CurrentSemanticValue.tdef.source_context = CurrentLocationSpan; - } - break; - case 122: // ArrayType -> ARRAY, OF, TypeDef -{ - // открытый массив - diapason dp = new diapason(new int32_const(0), new int32_const(0)); - indexers_types inxr = new indexers_types(); - inxr.Add(dp); - CurrentSemanticValue.tdef = new array_type(inxr, ValueStack[ValueStack.Depth-1].tdef, CurrentLocationSpan); - } - break; - case 123: // ArrayType -> ARRAY, LengthList, OF, TypeDef -{ - // Будем искать array n of char, чтобы заменить на строку - named_type_reference ntr = ValueStack[ValueStack.Depth-1].tdef as named_type_reference; - bool complexArr = (ntr != null) && (ntr.names.Count == 1) && - (ntr.names[0].name == "char"); - if (complexArr) - CurrentSemanticValue.tdef = GetArrWithStrInsteadCharArr(ValueStack[ValueStack.Depth-3].indts, LocationStack[LocationStack.Depth-3], CurrentLocationSpan); - else - CurrentSemanticValue.tdef = new array_type(ValueStack[ValueStack.Depth-3].indts, ValueStack[ValueStack.Depth-1].tdef, CurrentLocationSpan); - } - break; - case 124: // RecordType -> RECORD, END, COLUMN -{ - - } - break; - case 125: // LengthList -> Length -{ - CurrentSemanticValue.indts = new indexers_types(); - CurrentSemanticValue.indts.source_context = CurrentLocationSpan; - CurrentSemanticValue.indts.Add(ValueStack[ValueStack.Depth-1].dpsn); - } - break; - case 126: // LengthList -> LengthList, COLUMN, Length -{ - CurrentSemanticValue.indts = ValueStack[ValueStack.Depth-3].indts; - CurrentSemanticValue.indts.source_context = CurrentLocationSpan; - CurrentSemanticValue.indts.Add(ValueStack[ValueStack.Depth-1].dpsn); - } - break; - case 127: // Length -> ConstExpr -{ - // В обероне в массиве указывается целочисленная длина - // Поэтому надо проверить, что выражение относится к целому типу - object[] types = {ValueStack[ValueStack.Depth-1].ex}; - bool isLength = typeof(int32_const) == System.Type.GetTypeArray(types)[0]; - if (isLength) - CurrentSemanticValue.dpsn = GetDiapasonByArrLength(ValueStack[ValueStack.Depth-1].ex, CurrentLocationSpan); - else - PT.AddError("Длина должна быть целым числом", LocationStack[LocationStack.Depth-1]); - } - break; - case 128: // PointerType -> POINTER, TO, TypeDef -{ - CurrentSemanticValue.rft = new ref_type(ValueStack[ValueStack.Depth-1].tdef, CurrentLocationSpan); - } - break; - case 129: // complexTypeIdent -> ident -{ - CurrentSemanticValue.ntr = new named_type_reference(PT.InternalTypeName(ValueStack[ValueStack.Depth-1].id.name), CurrentLocationSpan); - } - break; - case 130: // complexTypeIdent -> complexTypeIdent, COMMA, ident -{ - CurrentSemanticValue.ntr = ValueStack[ValueStack.Depth-3].ntr; - CurrentSemanticValue.ntr.Add(PT.InternalTypeName(ValueStack[ValueStack.Depth-1].id.name)); - CurrentSemanticValue.ntr.source_context = CurrentLocationSpan; - } - break; - case 131: // DeclarationsSect -> VarDeclarationsSect -{ - CurrentSemanticValue.decsec = ValueStack[ValueStack.Depth-1].vdss; - } - break; - case 132: // DeclarationsSect -> ConstDeclarationsSect -{ - CurrentSemanticValue.decsec = ValueStack[ValueStack.Depth-1].cdl; - } - break; - case 133: // DeclarationsSect -> TypeDeclarationsSect -{ - CurrentSemanticValue.decsec = ValueStack[ValueStack.Depth-1].td; - } - break; - case 134: // DeclarationsSect -> ProcedureDeclarationSect -{ - CurrentSemanticValue.decsec = ValueStack[ValueStack.Depth-1].pd; - } - break; - case 135: // Declarations -> /* empty */ -{ - CurrentSemanticValue.decl = new declarations(); - } - break; - case 136: // Declarations -> Declarations, DeclarationsSect -{ - if (ValueStack[ValueStack.Depth-1].decsec != null) - ValueStack[ValueStack.Depth-2].decl.Add(ValueStack[ValueStack.Depth-1].decsec); - CurrentSemanticValue.decl = ValueStack[ValueStack.Depth-2].decl; - CurrentSemanticValue.decl.source_context = CurrentLocationSpan; // Необходимо показать место в программе, т.к. неявно это не сделано - // (например, в конструкторе) - } - break; - case 137: // ProcedureDeclarationSect -> PROCEDURE, ident, maybeformalparams, maybereturn, - // SEMICOLUMN, mainblock, ident, SEMICOLUMN -{ - - } - break; - case 138: // maybeformalparams -> /* empty */ -{ - //$$ = null; - } - break; - case 139: // maybeformalparams -> LPAREN, FPList, RPAREN -{ - //$$ = $2; - } - break; - case 140: // maybereturn -> /* empty */ -{ - - } - break; - case 141: // maybereturn -> COLUMN, TypeDef -{ - - } - break; - case 142: // FPList -> FPSect -{ - - } - break; - case 143: // FPList -> FPList, SEMICOLUMN, FPSect -{ - - } - break; - case 144: // FPSect -> maybevar, IDList, COLON, TypeDef -{ - - } - break; - case 145: // maybevar -> /* empty */ -{ - CurrentSemanticValue.bVal = false; - } - break; - case 146: // maybevar -> VAR -{ - CurrentSemanticValue.bVal = true; - } - break; - } - } - - protected override string TerminalToString(int terminal) - { - if (aliasses != null && aliasses.ContainsKey(terminal)) - return aliasses[terminal]; - else if (((Tokens)terminal).ToString() != terminal.ToString(CultureInfo.InvariantCulture)) - return ((Tokens)terminal).ToString(); - else - return CharToString((char)terminal); - } - - -/* Возвращает последовательность операторов, соответсвующую - циклу for, моделируемому через while */ -public static statement_list GetForThroughWhile(ident id, expression expr, expression endExpr, statement_list stmnts, - expression step, SourceContext assignSC, SourceContext wholeSC){ - // Будем моделировать цикл через while - statement_list forStmnt = new statement_list(); - ident endFor = new ident("_oberon_for_end_"); - forStmnt.Add(new var_statement(new var_def_statement( - new ident_list("_oberon_for_end_"), - new named_type_reference("integer", null), - endExpr, - definition_attribute.None, - false)) - ); - forStmnt.Add( new assign(id, expr, Operators.Assignment, assignSC) ); - statement_list posStatementList = new statement_list(); // при положительном шаге - posStatementList.Add(stmnts); - posStatementList.Add( new assign(id, step, Operators.AssignmentAddition) ); - while_node posWhile = new while_node( - new bin_expr(id, endFor, Operators.LessEqual), - posStatementList, - WhileCycleType.While); - statement_list negStatementList = new statement_list(); // при отрицательном шаге - negStatementList.Add(stmnts); - negStatementList.Add( new assign(id, step, Operators.AssignmentAddition) ); - while_node negWhile = new while_node( - new bin_expr(id, endFor, Operators.GreaterEqual), - negStatementList, - WhileCycleType.While); - forStmnt.Add( new if_node( - new bin_expr(step, new int32_const(0), Operators.Greater), - posWhile, - negWhile, - wholeSC)); - return forStmnt; -} - -/* Возвращает многомерный массив, в котором при необходимости - массив символов заменен на строку */ -public static type_definition GetArrWithStrInsteadCharArr(indexers_types lenList, - SourceContext lenListSC, SourceContext wholeSC){ - List indxrs = lenList.indexers; - diapason dp = indxrs[indxrs.Count - 1] as diapason; - int32_const len = new int32_const(); - len.val = (dp.right as int32_const).val + 1; - type_definition result = new string_num_definition(len, new ident("string", lenListSC), wholeSC); - if (indxrs.Count > 1) { // надо делать массив массивов ... строк - indxrs.RemoveAt(indxrs.Count - 1); - result = new array_type(lenList, result, wholeSC); - } - return result; -} - -/* Возвращает диапазон 0..Length-1, полученный по обероновской длине - массива, и необходимый для паскалевского синтаксического узла */ -public static diapason GetDiapasonByArrLength(expression lenExpr, SourceContext lenSC){ - int32_const zero = new int32_const(); - zero.val = 0; - int32_const max = (int32_const)lenExpr; - max.val = max.val - 1; - return new diapason(zero, max, lenSC); -} -} -} diff --git a/ReleaseGenerators/.gitignore b/ReleaseGenerators/.gitignore index 4d8424564..26f70a3d9 100644 --- a/ReleaseGenerators/.gitignore +++ b/ReleaseGenerators/.gitignore @@ -3,14 +3,4 @@ /RebuildStandartModules.exe -#TODO Вместо утого удалить устаревшие .pas тесты, оставив остальное без игнора -/Samples/* -!/Samples/_SVN/ - - - -!/Samples/ExportSamples.bat -!/Samples/GetSamples.exe -!/Samples/GetSamples.pnet - diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/01_First/Amp.pas b/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/01_First/Amp.pas deleted file mode 100644 index 64c8ee9f9..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/01_First/Amp.pas +++ /dev/null @@ -1,9 +0,0 @@ -// Пример иллюстрирует использование значка & для снятия атрибута ключевого слова -var - &begin,&end: integer; -begin - &begin := 1; - &end := 2; - var t: System.Type := &begin.GetType; // в System.Type использовать & не надо - write(&begin,' ',&end,' ',t); -end. \ No newline at end of file diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/01_First/AssignExt.pas b/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/01_First/AssignExt.pas deleted file mode 100644 index 3ba218714..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/01_First/AssignExt.pas +++ /dev/null @@ -1,18 +0,0 @@ -// Присваивания += -= *= /= -var - i: integer; - r: real; - -begin - i := 1; - writeln('i := 1; i = ',i); - i += 2; // Увеличение на 2 - writeln('i += 2; i = ',i); - i *= 3; // Умножение на 3 - writeln('i *= 3; i = ',i); - writeln; - r := 6; - writeln('r := 6; r = ',r); - r /= 2; - writeln('r /= 2; r = ',r); -end. \ No newline at end of file diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/01_First/AutoVars.pas b/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/01_First/AutoVars.pas deleted file mode 100644 index 25797a7bb..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/01_First/AutoVars.pas +++ /dev/null @@ -1,10 +0,0 @@ -// Автоопределение типа переменной -// Описание переменной в заголовке цикла for -begin - var x := 2; - for var i:=1 to 10 do - begin - write(x,' '); - x += 2; - end; -end. \ No newline at end of file diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/01_First/BlockVar.pas b/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/01_First/BlockVar.pas deleted file mode 100644 index d1257db6c..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/01_First/BlockVar.pas +++ /dev/null @@ -1,11 +0,0 @@ -// Перемена местами значений двух переменных с использованием третьей -var x,y: real; - -begin - write('Введите x,y: '); - readln(x,y); - var v: real := x; // вспомогательная переменная - x := y; - y := v; - writeln('Новые значения x,y: ',x,' ',y); -end. \ No newline at end of file diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/01_First/Foreach.pas b/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/01_First/Foreach.pas deleted file mode 100644 index 2b546058b..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/01_First/Foreach.pas +++ /dev/null @@ -1,26 +0,0 @@ -// Пример иллюстрирует возможности оператора foreach -uses System.Collections.Generic; - -var - a: array [1..5] of integer := (1,3,5,7,9); - s: set of integer; - l: List; - -begin - write('foreach по обычному массиву: ':35); - foreach x: integer in a do - write(x,' '); - writeln; - - s := [2..5,10..14]; - write('foreach по множеству: ':35); - foreach x: integer in s do - write(x,' '); - writeln; - - l := new List; - l.Add(7); l.Add(2); l.Add(5); - write('foreach по динамическому массиву: ':35); - foreach x: integer in l do - write(x,' '); -end. \ No newline at end of file diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/01_First/RandomDiap.pas b/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/01_First/RandomDiap.pas deleted file mode 100644 index 7bea343d6..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/01_First/RandomDiap.pas +++ /dev/null @@ -1,5 +0,0 @@ -// Генерация случайного числа в заданном диапазоне -begin - var i := Random(2,5); - writeln('Случайное целое в диапазоне 2..5: ',i); -end. \ No newline at end of file diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/01_First/RealExtNums.pas b/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/01_First/RealExtNums.pas deleted file mode 100644 index 5e099f699..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/01_First/RealExtNums.pas +++ /dev/null @@ -1,5 +0,0 @@ -// При работе с вещественными числами невозможно получить ошибку выполнения -begin - writeln(1/0); - writeln(sqrt(-1)); -end. \ No newline at end of file diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/01_First/SimpleNewFeatures.pas b/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/01_First/SimpleNewFeatures.pas deleted file mode 100644 index 60cef0d77..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/01_First/SimpleNewFeatures.pas +++ /dev/null @@ -1,27 +0,0 @@ -// Простейшие новые возможности языка PascalABC.NET - -// Инициализация переменной при описании -var i: integer := 1; - -// Автоопределение типа переменной при инициализации -var r := 2.5; - -begin - // Внутриблочные описания переменных - var s: real := 1.0; - - // Описание переменной в заголовке цикла (время жизни переменной - до конца тела цикла) - for j: integer := 1 to 10 do - s += j; // Операция += для чисел - - var p := 1; - - // Описание переменной в заголовке цикла с автоопределением типа - for var j := 1 to 10 do - p *= j; // Операция *= - - var str := ''; - for c: char := 'a' to 'z' do - str += c; // Операция += для строк - -end. \ No newline at end of file diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/01_First/StandardTypes.pas b/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/01_First/StandardTypes.pas deleted file mode 100644 index 6eb0c2b4d..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/01_First/StandardTypes.pas +++ /dev/null @@ -1,33 +0,0 @@ -/// Стандартные размерные типы данных и их размер -var - i: integer; - j: shortint; - k: smallint; - l: longint; // синоним integer - i64: int64; - b: byte; - w: word; - lw: longword; - car: cardinal; // синоним longword - ui64: uint64; - r: real; - d: double; // синоним real - sn: single; - c: char; - -begin - writeln('sizeof(integer) = ':20, sizeof(integer)); - writeln('sizeof(shortint) = ':20,sizeof(shortint)); - writeln('sizeof(smallint) = ':20,sizeof(smallint)); - writeln('sizeof(longint) = ':20, sizeof(longint)); - writeln('sizeof(int64) = ':20, sizeof(int64)); - writeln('sizeof(byte) = ':20, sizeof(byte)); - writeln('sizeof(word) = ':20, sizeof(word)); - writeln('sizeof(longword) = ':20,sizeof(longword)); - writeln('sizeof(cardinal) = ':20,sizeof(cardinal)); - writeln('sizeof(uint64) = ':20, sizeof(uint64)); - writeln('sizeof(real) = ':20, sizeof(real)); - writeln('sizeof(double) = ':20, sizeof(double)); - writeln('sizeof(single) = ':20, sizeof(single)); - writeln('sizeof(char) = ':20, sizeof(char)); -end. \ No newline at end of file diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/01_First/WriteAll.pas b/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/01_First/WriteAll.pas deleted file mode 100644 index 7b9ca40ce..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/01_First/WriteAll.pas +++ /dev/null @@ -1,12 +0,0 @@ -/// Вывод различных типов процедурой write -begin - // Вывод, целого, строки, вещественного - Writeln(1,' ',2.5); - // Вывод множества - Writeln([1..10]); - // Вывод логического - Writeln(True); - var a: array [1..10] of integer; - // Вывод массива (выводится его тип) - Writeln(a); -end. \ No newline at end of file diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/01_First/WriteFormat.pas b/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/01_First/WriteFormat.pas deleted file mode 100644 index a6ea0c119..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/01_First/WriteFormat.pas +++ /dev/null @@ -1,11 +0,0 @@ -/// Использование процедуры WritelnFormat -begin - // Вывод в обратном порядке - WritelnFormat('{2},{1},{0}',1,2,3); - // Вывод фигурных скобочек - WritelnFormat('{{}}{0}','Вывод фигурных скобочек в форматной строке'); - // Задание ширины поля вывода - WritelnFormat('{0,10:f}',3.1415); - // Задание количества знаков после запятой для вещественного числа - WritelnFormat('{0:f3}',3.1415); -end. \ No newline at end of file diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/02_Types/CharFunc.pas b/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/02_Types/CharFunc.pas deleted file mode 100644 index 95bed5ad7..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/02_Types/CharFunc.pas +++ /dev/null @@ -1,19 +0,0 @@ -// Стандартные функции Ord, Chr, OrdUnicode, ChrUnicode -var - c: char; - i: integer; - -begin - writeln('sizeof(char) = ',sizeof(char)); - writeln; - c := 'Ж'; - i := Ord(c); - writelnFormat('Код символа {0} в кодировке Windows равен {1}',c,i); - c := Chr(i); - writelnFormat('Символ с кодом {0} в кодировке Windows - это {1}',i,c); - writeln; - i := OrdUnicode(c); - writelnFormat('Код символа {0} в кодировке Unicode равен {1}',c,i); - c := ChrUnicode(i); - writelnFormat('Символ с кодом {0} в кодировке Unicode - это {1}',i,c); -end. \ No newline at end of file diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/02_Types/Dynarray.pas b/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/02_Types/Dynarray.pas deleted file mode 100644 index 63d162f37..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/02_Types/Dynarray.pas +++ /dev/null @@ -1,40 +0,0 @@ -// Процедуры и методы работы с динамическим массивом -uses System; - -procedure Print(a: array of integer); -begin - foreach v: integer in a do - Write(v, ' '); - Writeln; -end; - -var a: array of integer; - -begin - SetLength(a,10); // выделение памяти. А можно так: a := new integer[10]; - - // Заполнение массива - for var i:=0 to a.Length-1 do - a[i] := PABCSystem.Random(100); - - // Вывод всех элементов массива - Print(a); - - // Сортировка массива (знак & используется для того, - // чтобы воспользоваться ключевым словом array при обозначении - // класса Array) - &Array.Sort(a); - Print(a); - - // Обращение массива - &Array.Reverse(a); - Print(a); - - // Изменение размерамассиав с сохранением элементов. То же делает SetLength - &Array.Resize(a,a.Length+2); - Print(a); - - // Поиск вхождения элемента в массив - var i := &Array.IndexOf(a, 50); - Writeln(i); -end. \ No newline at end of file diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/02_Types/Enum.pas b/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/02_Types/Enum.pas deleted file mode 100644 index db92312ee..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/02_Types/Enum.pas +++ /dev/null @@ -1,25 +0,0 @@ -// Перечислимый тип -type Months = (January,February,March,April,May,June,July,August,September,October,November,December); - -var m: Months; - -begin - m := February; - writeln(m); - // Использование констант перечислимого типа после имени типа удобно: после точки intellisense показывает список констант - m := Months.April; - writeln('Следующий месяц: ',m); - Inc(m); - writeln('Следующий месяц: ',m); - m := Succ(m); - writeln('Следующий месяц: ',m); - m := Pred(m); - writeln('Предыдующий месяц: ',m); - Dec(m); - writeln('Предыдующий месяц: ',m); - writeln('Его порядковый номер (нумерация - с нуля): ',Ord(m)); - // Ошибки нет - writeln('Месяц перед январем - выход за границы: ',pred(Months.January)); - // Ошибки нет - writeln('Месяц после декабря - выход за границы: ',succ(Months.December)); -end. \ No newline at end of file diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/02_Types/InitRecords.pas b/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/02_Types/InitRecords.pas deleted file mode 100644 index 5befeb806..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/02_Types/InitRecords.pas +++ /dev/null @@ -1,15 +0,0 @@ -// Инициализаторы полей записи -type - Frac = record - num: integer := 0; - denom := 1; // автоопределеине типа - denom: integer - end; - -var - f: Frac; - f1: Frac := (num: 2; denom: 3); - -begin - writeln(f.num,'/',f.denom); - writeln(f1.num,'/',f1.denom); -end. \ No newline at end of file diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/02_Types/PointerToRef.pas b/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/02_Types/PointerToRef.pas deleted file mode 100644 index 8a07a43a9..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/02_Types/PointerToRef.pas +++ /dev/null @@ -1,10 +0,0 @@ -// Указатели на ссылочные типы запрещены. Исключение: указатели на строки и динамические массивы -type - A = class - i: integer; - end; - -var p: ^record field: A; end; - -begin -end. \ No newline at end of file diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/02_Types/PointersVsRef/Pointers.pas b/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/02_Types/PointersVsRef/Pointers.pas deleted file mode 100644 index 42aa2fc6d..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/02_Types/PointersVsRef/Pointers.pas +++ /dev/null @@ -1,43 +0,0 @@ -// Выделение динамической памяти -// Использование указателей для создания односвязного списка -type - PNode = ^TNode; - TNode = record - data: integer; - next: PNode; - end; - -function NewNode(d: integer; n: PNode): PNode; -begin - New(Result); - Result^.data := d; - Result^.next := n; -end; - -var first: PNode; - -begin - first := nil; - // Добавляем в начало односвязного списка - first := NewNode(3,first); - first := NewNode(7,first); - first := NewNode(5,first); - - // Вывод односвязного списка - writeln('Содержимое односвязного списка: '); - var p := first; - while p<>nil do - begin - write(p^.data,' '); - p := p^.next; - end; - - // Разрушение односвязного списка - p := first; - while p<>nil do - begin - var p1 := p; - p := p^.next; - Dispose(p1); // Память обязательно возвращать - end; -end. \ No newline at end of file diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/02_Types/PointersVsRef/References.pas b/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/02_Types/PointersVsRef/References.pas deleted file mode 100644 index fabbe9d1f..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/02_Types/PointersVsRef/References.pas +++ /dev/null @@ -1,35 +0,0 @@ -// Использование ссылок вместо указателей для создания односвязного списка -// Мы рекомендуем именно этот способ -type - Node = class - data: integer; - next: Node; - constructor (d: integer; n: Node); - begin - data := d; - next := n; - end; - end; - -// Переменная типа "класс" представляет собой ссылку на объект, выделяемый конструктором -var first: Node; - -begin - first := nil; - // Добавляем в начало односвязного списка - first := new Node(3,first); - first := new Node(7,first); - first := new Node(5,first); - - // Вывод односвязного списка. ^ отсутствуют - writeln('Содержимое односвязного списка (использование ссылок вместо указателей): '); - var p := first; - while p<>nil do - begin - write(p.data,' '); - p := p.next; - end; - - // Разрушение односвязного списка - first := nil; // Сборщик мусора соберет память, на которую никто больше не указывает -end. \ No newline at end of file diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/02_Types/Sets.pas b/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/02_Types/Sets.pas deleted file mode 100644 index a404ba7bd..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/02_Types/Sets.pas +++ /dev/null @@ -1,15 +0,0 @@ -// Работа с множествами -// Базовый тип для множества может быть произвольным -var - s1: set of string := ['Иванов','Попов','Сидорова','Петров']; - s2: set of string := ['Козлов','Петров','Иванов']; -begin - writeln('Множество s1: ',s1); - writeln('Множество s2: ',s2); - writeln('Объединение множеств s1 и s2: ',s1+s2); - writeln('Пересечение множеств s1 и s2: ',s1*s2); - writeln('Разность множеств s1 и s2: ',s1-s2); - Include(s1,'Умнов'); - Exclude(s1,'Иванов'); - writeln('Множество s1: ',s1); -end. \ No newline at end of file diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/02_Types/StringInteger.pas b/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/02_Types/StringInteger.pas deleted file mode 100644 index ce86a50a3..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/02_Types/StringInteger.pas +++ /dev/null @@ -1,16 +0,0 @@ -// Преобразование целое <-> строка в новом стиле -var - s: string; - i: integer; - -begin - // Преобразование целого в строку - i := 234; - s := i.ToString; - writelnFormat('Целое: {0}. После преобразования к строке: ''{1}''',i,s); - - // Преобразование строки в целое - s := '567'; - if integer.TryParse(s,i) then - writelnFormat('Строка: ''{0}''. После преобразования к целому: {1}',s,i); -end. \ No newline at end of file diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/02_Types/StringMethods.pas b/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/02_Types/StringMethods.pas deleted file mode 100644 index 609eb8234..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/02_Types/StringMethods.pas +++ /dev/null @@ -1,18 +0,0 @@ -// Строки. Методы класса string -var - s: string := ' Pascal__NET '; - s1: string := 'NET'; - -begin - writeln('Исходная строка: ''',s,''''); - s := s.Trim; - writeln('После вызова s.Trim: ''',s,''''); - var p := s.IndexOf(s1); // Индексация - с нуля - writelnFormat('Позиция подстроки ''{0}'' в строке ''{1}'' равна {2}',s1,s,p); - s := s.Remove(6,2); - writeln('После удаления символов __: ',s); - s := s.Insert(6,'ABC.'); - writeln('После вставки подстроки ''ABC.'': ',s); - writeln('Первая часть строки: ',s.Substring(0,9)); - writeln('Последняя часть строки: ',s.Substring(10,3)); -end. \ No newline at end of file diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/02_Types/StringTypes.pas b/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/02_Types/StringTypes.pas deleted file mode 100644 index 7e89b95d1..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/02_Types/StringTypes.pas +++ /dev/null @@ -1,17 +0,0 @@ -// Строки string, string[n], shortstring -var - s: string; // память, занимаемая s, зависит от ее длины - s10: string[10]; // память под ss фиксирована - ss: shortstring := s; - f: file of string[10]; - // f: file of string; - ошибка - -begin - s := '12345678901234567890'; - s10 := s; // обрезание - writeln(s10); - s += s; s += s; - s += s; s += s; - writeln(s); - writeln('Длина строки = ',s.Length); -end. \ No newline at end of file diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/02_Types/StructTypeEquiv.pas b/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/02_Types/StructTypeEquiv.pas deleted file mode 100644 index 8648f73fd..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/02_Types/StructTypeEquiv.pas +++ /dev/null @@ -1,23 +0,0 @@ -// Иллюстрация структурной эквивалентности для некоторых типов. В Delphi - именная эквивалентность -var - a: array of integer; - a1: array of integer; - s: set of real; - s1: set of real; - p: procedure (i: integer); - p1: procedure (i: integer); - r: ^integer; - r1: ^integer; - -procedure proc(aa: array of integer; ss: set of real; pp: procedure (i: integer); rr: ^integer); -begin - -end; - -begin - a := a1; - s := s1; - p := p1; - r := r1; // В Delphi ни одно из этих присваиваний не сработает - proc(a,s,p,r); // Этот вызов - тоже -end. \ No newline at end of file diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/02_Types/UntypedFile.pas b/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/02_Types/UntypedFile.pas deleted file mode 100644 index 24bb11de5..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/02_Types/UntypedFile.pas +++ /dev/null @@ -1,19 +0,0 @@ -// Бестиповые файлы -var - f: file; - i: integer; - r: real; - s: string; - -begin - assign(f,'a.dat'); - rewrite(f); - // Записываем в файл данные любых типов - write(f,1,2.5,'Hello'); - close(f); - reset(f); - // Считываем эти данные из файла - read(f,i,r,s); - write(i,' ',r,' ',s); - close(f); -end. \ No newline at end of file diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/02_Types/a.dat b/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/02_Types/a.dat deleted file mode 100644 index 01d0483f77705efea9afb635cd7989a1d2459181..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 18 ScmZQ%fB_Z(var a,b: T); -begin - var v := a; - a := b; - b := v; -end; - -begin - var a := 2; - var b := 3; - writelnFormat('До Swap a={0}, b={1}',a,b); - Swap(a,b); - writelnFormat('После Swap a={0}, b={1}',a,b); - var c := 2.5; - var d := 3.3; - writeln; - writelnFormat('До Swap c={0}, d={1}',c,d); - Swap(c,d); - writelnFormat('После Swap c={0}, d={1}',c,d); -end. \ No newline at end of file diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/04_Units/CallC#/CallCS.pas b/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/04_Units/CallC#/CallCS.pas deleted file mode 100644 index d118c77ac..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/04_Units/CallC#/CallCS.pas +++ /dev/null @@ -1,9 +0,0 @@ -// Вызов статического метода add класса Class1, помещенного в пространство имен ClassLibrary1 -// Класс Class1 помещен в библиотеку ClassLibrary1.dll, откомпилированную на C# - -{$reference ClassLibrary1.dll} -uses ClassLibrary1; - -begin - writeln(Class1.add(2,3)); -end. \ No newline at end of file diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/04_Units/CallC#/ClassLibrary1.dll b/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/04_Units/CallC#/ClassLibrary1.dll deleted file mode 100644 index efed75e8e7dbab0443d001897f390ac7f515cc2c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 16384 zcmeHNU2GIp6h5>4VfksLC5di*JFc38KsWS-uP~~vf4FjZe6QH ziPl4-2HNuvgzcp015}(~7jX-zoM|2%F%MEl$p-Fl9}w!p6OS2&->hgQiFODgmdY`r zbSHn2b8~2OY{_t(igT4D z5q-=xEC&NctaJ>A@D;~VB}t-zs;+EG1|$QL0m*=5Kr$d1kPJu$BmwNLx)Dv zIDdftH=;jaIXcclFkKni7{o+3lrGv77>&p5*P z1mly88l%bhEN~k#%}_g?0j|fc3XIWO>HyvcK4OS25A0&xOUKbp(Tl*xS(9aanlZ=v z6Lc0gOvtBMp`|pxBj)D2P3jeFvO;*)krXl%;uI#?)QSolC^>mKA6c zwFWABImfk3ow9SDZxm@%KW^lF((;Hp=R0nwkBuAC77V6iQ@`gKMcta)Z(7Er;d;>Z z`}q3lW#3pZE;9uFW8-DpH;YDW#P$u>DP;}!q?t238Y-LlMK39*IB9yOZW)WZ%Cf1l z<(J(R3=^)FH;S5jVud+QY0fnZGyZbZml9j*z`Y9}qMZu0_jPv}x#`~Nj?Tn%Z%21$ zUuTD|Pv<&%y5c>%6Goydk?X-7j<522721%hY@2%df~t1L<9$RM6l$vZZsTT$b$AXM z;>Jg`P23MABAX7oTIrx;56SLw6V3bPX-x1M%L$p=VS}v8p zH;a~|DaTD))&b45gA3L$_=*-IZfz$uxj0m|Bm`>S>RElBKm~7TV%P?S~1k$ z7CvI1gpUly7kG9GjFb?MV4y%V@GSf+)v0s=5A!N@G7BhD;6eBq4d)5=L@X6PMDL%+ zw2!$QgD(ehmcgT6mDTO?BI;%iYv(Ryaw(5}Jg1+TG7zVZ$mfvV-_1kXQX~VC0m*=5 zKr$d1kPJu$BmfExVI_(!|%>@;Nbk^#wpWI!??8ITM}1|$QL0m*=5Kr$d1 KkPQ4a1AhXODig{8 diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/04_Units/DllTest/MyDll.dll b/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/04_Units/DllTest/MyDll.dll deleted file mode 100644 index 9a9c8f82715d6198e732ca50e3316357d55290ce..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 16384 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 diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/04_Units/NativeDll/NativeDll.dpr b/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/04_Units/NativeDll/NativeDll.dpr deleted file mode 100644 index b050bdd86..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/04_Units/NativeDll/NativeDll.dpr +++ /dev/null @@ -1,13 +0,0 @@ -// Delphi -library NativeDll; - -function add(a,b: integer): integer; stdcall; -begin - Result := a+b; -end; - -exports - add; -begin -end. - \ No newline at end of file diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/04_Units/SimpleUnit/MainProgram.pas b/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/04_Units/SimpleUnit/MainProgram.pas deleted file mode 100644 index 98617cdfc..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/04_Units/SimpleUnit/MainProgram.pas +++ /dev/null @@ -1,7 +0,0 @@ -uses MyUnit; // подключили модуль - -var a: array of integer := (1,5,3,7,3,6,4,5,1,8,3,5,6); - -begin - writeln('Максимальный элемент в массиве = ',Max(a)); -end. diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/04_Units/SimpleUnit/MyUnit.pas b/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/04_Units/SimpleUnit/MyUnit.pas deleted file mode 100644 index 70fb761e3..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/04_Units/SimpleUnit/MyUnit.pas +++ /dev/null @@ -1,14 +0,0 @@ -/// Модуль упрощенной структуры -unit MyUnit; // имя модуля должно совпадать с именем файла - -// Документирующие комментарии отображаются при наведении на имя курсора мыши -/// Возвращает максимальный элемент в массиве -function Max(a: array of integer): integer; -begin - Result := integer.MinValue; - foreach x: integer in a do - if x>Result then - Result := x; -end; - -end. diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/04_Units/SimpleUnit/MyUnit.pcu b/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/04_Units/SimpleUnit/MyUnit.pcu deleted file mode 100644 index e6f17bc5a9e98516d9bf70fdddd3836a0616597b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 795 zcmb7AO-sW-5KT;NwHBclMevYAkseB@{j^9B+mn_;LF>`7Eqe$io04qQhzI|H|J6UB z^EMl(6%i-AeX}!@nYS|?&4xy9W_gm%geRR9i%kkz6ZR~K;b&)gdN~~3q_N}yg1|V4 zmto|4i-vv2qu2|D+j5%t8ulphWfE~$@I*$;Z`jjh;d{$5PjABqF5E@G&$`QQ?{v`a z@aEY7W43f(_}OGkxhC8rq77A6B~#*D3E6HTVeRY4FbsXppxr2DZ^92n0(g&bkcH=7 zu=07pg=CVX*YfG$3gJHnokwfSGK^9!dYsb|br%$zo2&pGRRY*1D8oc$sQT{E4W(tx z(Dgz1&FV-L2-U-^1g)J{I(7(eI4pfRCaz?qH11^ZA`Z%Dw<1 CQ-+%W diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/04_Units/SystemUnitTest.pas b/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/04_Units/SystemUnitTest.pas deleted file mode 100644 index 262e7f035..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/04_Units/SystemUnitTest.pas +++ /dev/null @@ -1,12 +0,0 @@ -// Иллюстрация поиска имен вначале справа налево в секции uses, а затем в системном модуле PABCSystem -uses System; - -begin - // Имя Random, определенное в пространстве имен System, перекрывает имя Random - // в модуле PABCSystem, который неявно подключается первым - var r: Random := new Random(); - writeln(r.Next(10)); - // Именно поэтому перед данным Random необходимо явно указывать имя модуля, в котором он находится - var i: integer := PABCSystem.Random(10); - writeln(i); -end. \ No newline at end of file diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/05_Graph/ABC.pas b/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/05_Graph/ABC.pas deleted file mode 100644 index de94d7aba..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/05_Graph/ABC.pas +++ /dev/null @@ -1,41 +0,0 @@ -// Модуль ABCObjects. Изменение свойств объекта -uses ABCObjects,GraphABC; - -const delay = 300; - -procedure Pause; -begin - Sleep(delay); -end; - -var - r: RectangleABC; - z: StarABC; - -begin - z := new StarABC(Window.Center.X,Window.Center.Y,70,30,6,Color.Green); - r := new RectangleABC(100,100,200,100,Color.Gold); - Pause; - r.Center := Window.Center; - Pause; - r.Height := 70; - Pause; - r.Width := 220; - Pause; - z.Radius := 150; - Pause; - z.Color := Color.LightCoral; - Pause; - z.Count := 5; - Pause; - - r.Text := 'PascalABC.NET'; - r.Color := Color.Gainsboro; - Pause; - r.BorderWidth := 3; - r.BorderColor := Color.Blue; - Pause; - r.Center := Window.Center; - Pause; -// r.Bordered := False; -end. diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/05_Graph/GraphABCTest.pas b/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/05_Graph/GraphABCTest.pas deleted file mode 100644 index cd8f125a1..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/05_Graph/GraphABCTest.pas +++ /dev/null @@ -1,19 +0,0 @@ -// Иллюстрация простейших возможностей GraphABC -uses GraphABC; - -begin - Coordinate.Origin := Window.Center; - Coordinate.SetMathematic; - Brush.Color := Color.LightSkyBlue; - while True do - begin - LockDrawing; - ClearWindow; - Ellipse(-120,-70,120,70); - Line(0,0,200,0); - Line(0,0,0,200); - Redraw; - Coordinate.Angle := Coordinate.Angle + 1; - Sleep(100); - end; -end. diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/05_Graph/MouseEvents.pas b/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/05_Graph/MouseEvents.pas deleted file mode 100644 index f48183e0a..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/05_Graph/MouseEvents.pas +++ /dev/null @@ -1,19 +0,0 @@ -// Иллюстрация обработки событий мыши -uses GraphABC; - -procedure MouseDown(x,y,mb: integer); -begin - MoveTo(x,y); -end; - -procedure MouseMove(x,y,mb: integer); -begin - if mb=1 then LineTo(x,y); -end; - -begin - // Привязка обработчиков к событиям - OnMouseDown := MouseDown; - OnMouseMove := MouseMove -end. - diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/06_Classes/AllFromObject.pas b/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/06_Classes/AllFromObject.pas deleted file mode 100644 index f33bcd697..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/06_Classes/AllFromObject.pas +++ /dev/null @@ -1,14 +0,0 @@ -// Все типы - производные от Object -var - i: integer; - r: real; - o: object; - -begin - o := i; - writeln(o.GetType); - o := r; - writeln(o.GetType); - if o.GetType=typeof(real) then - writeln('В переменной o - вещественный тип'); -end. \ No newline at end of file diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/06_Classes/Boxing.pas b/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/06_Classes/Boxing.pas deleted file mode 100644 index 8f7eec850..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/06_Classes/Boxing.pas +++ /dev/null @@ -1,22 +0,0 @@ -// Упаковка-распаковка размерных типов -var - i: integer := 2; - r: real := 3.14; - o: object; - -begin - o := i; // Упаковка: объект размерного типа integer упаковывается в объект ссылочного типа, - // котрый и присваивается переменной o - // Преобразование типов при упаковке - неявное - writeln(integer(o)); // Распаковка: из упакованного объекта извлекается значение - // Преобразование типов при распаковке - явное - o := r; - writeln(real(o)); - - try // При неверном преобразовании типов генерируется исключение InvalidCastException - writeln(shortint(o)); - except - on e: Exception do - writeln(e.GetType); - end; -end. \ No newline at end of file diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/06_Classes/ClassConstructor.pas b/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/06_Classes/ClassConstructor.pas deleted file mode 100644 index 11679be8a..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/06_Classes/ClassConstructor.pas +++ /dev/null @@ -1,36 +0,0 @@ -// Пример использования классового (статического) конструктора -type - Person = class - private - class arr: array of Person; // Классовое поле. Связано не с переменной класса, а с классом. - name: string; - age: integer; - public - class constructor; // Конструктор класса. Вызывается до создания первого объекта класса и до вызова любого классового метода - begin - writeln(' Вызван классовый конструктор'); - SetLength(arr,3); - arr[0] := new Person('Иванов',20); - arr[1] := new Person('Петрова',19); - arr[2] := new Person('Попов',35); - end; - constructor (n: string; a: integer); - begin - name := n; - age := a; - end; - function ToString: string; override; - begin - Result := Format('Имя: {0} Возраст: {1}',name,age); - end; - class function RandomPerson: Person; // Классовый метод. Может обращаться только к классовым полям - begin - Result := arr[Random(3)]; - end; - end; - -begin - writeln('Случайные персоны'); - for var i:=1 to 5 do - writeln(Person.RandomPerson); // Вызов классового метода -end. \ No newline at end of file diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/06_Classes/GarbageCollection.pas b/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/06_Classes/GarbageCollection.pas deleted file mode 100644 index e9361cc02..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/06_Classes/GarbageCollection.pas +++ /dev/null @@ -1,13 +0,0 @@ -// Сборка мусора: для освобождения объекта присвойте переменной nil -uses System.Collections.Generic; - -var l: List := new List; - -begin - l.Add(3); - l.Add(5); - l.Add(2); - foreach x:integer in l do - write(x,' '); - l := nil; // после этого память, занимаемая динамическим массивом, будет собрана сборщиком мусора -end. \ No newline at end of file diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/06_Classes/Interf.pas b/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/06_Classes/Interf.pas deleted file mode 100644 index 7deff8846..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/06_Classes/Interf.pas +++ /dev/null @@ -1,42 +0,0 @@ -// Иллюстрация использованя интерфейсов -type - IShape = interface - procedure Draw; - property X: integer read; - property Y: integer read; - end; - - ICloneable = interface - function Clone: Object; - end; - - Point = class(IShape,ICloneable) - private - xx,yy: integer; - public - constructor Create(x,y: integer); - begin - xx := x; yy := y; - end; - procedure Draw; begin end; - property X: integer read xx; - property Y: integer read yy; - function Clone: Object; - begin - Result := new Point(xx,yy); - end; - end; - -var - p: Point := new Point(2,3); - ish: IShape := p; - icl: ICloneable := p; - -begin - writeln(ish.X,' ',ish.Y); - var p1: Point := Point(icl.Clone); - p := nil; - writeln(p1.X,' ',p1.Y); - writeln(ish is Point); - writeln(ish is ICloneable); // Cross cast! -end. \ No newline at end of file diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/06_Classes/OperatorOverloading.pas b/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/06_Classes/OperatorOverloading.pas deleted file mode 100644 index 1b62ef27b..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/06_Classes/OperatorOverloading.pas +++ /dev/null @@ -1,54 +0,0 @@ -// Перегрузка операций -type - Frac = record - private - num,denom: integer; - public - constructor (n,d: integer); - begin - num := n; - denom := d; - end; - class function operator+(a,b: Frac): Frac; - begin - Result := new Frac(a.num*b.denom+b.num*a.denom,a.denom*b.denom); - end; - class function operator-(a,b: Frac): Frac; - begin - Result := new Frac(a.num*b.denom-b.num*a.denom,a.denom*b.denom); - end; - class function operator*(a,b: Frac): Frac; - begin - Result := new Frac(a.num*b.num,a.denom*b.denom); - end; - class function operator/(a,b: Frac): Frac; - begin - Result := new Frac(a.num*b.denom,a.denom*b.num); - end; - class function operator=(a,b: Frac): boolean; - begin - Result := (a.num = b.num) and (a.denom = b.denom); - end; - class procedure operator+=(var a: Frac; b: Frac); - begin - a := a + b; - end; - function ToString: string; override; - begin - Result := Format('{0}/{1}',num,denom); - end; - end; - -var - f := new Frac(1,2); - f1 := new Frac(3,5); - -begin - writelnFormat('{0} + {1} = {2}',f,f1,f+f1); - writelnFormat('{0} - {1} = {2}',f,f1,f-f1); - writelnFormat('{0} * {1} = {2}',f,f1,f*f1); - writelnFormat('{0} / {1} = {2}',f,f1,f/f1); - writeln(f1=f); - f += f1; - writeln(f); -end. \ No newline at end of file diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/06_Classes/PersonInternal.pas b/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/06_Classes/PersonInternal.pas deleted file mode 100644 index e146f930e..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/06_Classes/PersonInternal.pas +++ /dev/null @@ -1,30 +0,0 @@ -// Описание методов внутри интерфейса класса -// Удобство: методы можно реализовывать сразу после объявления -// Неудобство: для больших классов интерфейс трудно читается -type - Person = class - private - // Поля класса, как правило, приватны. Доступ к ним - через методы и свойства - name: string; - age: integer; - public - // Конструктор неявно имеет имя Create - constructor (n: string; a: integer); - begin - name := n; age := a; - end; - procedure Print; - begin - writeln('Имя: ',name,' Возраст: ',age); - end; - end; - -var p,p1: Person; - -begin - p := new Person('Иванов',20); // Новый синтаксис вызова конструктора (рекомендуется) - p.Print; - p1 := Person.Create('Попов',19); // Старый синтаксис вызова конструктора (не рекомендуется) - p1.Print; - // Деструкторы отсутствуют, вместо них - автоматическая сборка мусора -end. \ No newline at end of file diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/06_Classes/Records.pas b/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/06_Classes/Records.pas deleted file mode 100644 index e95d97a88..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/06_Classes/Records.pas +++ /dev/null @@ -1,26 +0,0 @@ -// Иллюстрация конструкторов и методов в записях -// Если переопределен метод ToString, то он вызывается при выводе объекта этого типа процедурой writeln -type - SexType = (Male, Female); - Person = record - Name: string; - Age, Weight: integer; - Sex: SexType; - constructor (Name: string; Age, Weight: integer; Sex: SexType); - begin - Self.Name := Name; - Self.Age := Age; - Self.Sex := Sex; - Self.Weight := Weight; - end; - function ToString: string; override; - begin - Result := Format('Имя: {0} Пол: {1} Возраст: {2} Вес: {3}', Name, Sex, Age, Weight); - end; - end; - -var p: Person := new Person('Иванов',20,70,SexType.Male); - -begin - writeln(p); -end. diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/06_Classes/Stack.pas b/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/06_Classes/Stack.pas deleted file mode 100644 index d818e96ea..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/06_Classes/Stack.pas +++ /dev/null @@ -1,56 +0,0 @@ -// Демонстрация создания простого класса стека на базе массива -type - Stack = class - private - a: array of T; - last: integer; - public - constructor Create(sz: integer); - begin - SetLength(a,sz); - last := 0; - end; - constructor Create; - begin - Create(100); - end; - procedure push(i: T); - begin - a[last] := i; - Inc(last); - end; - function pop: T; - begin - Dec(last); - pop := a[last]; - end; - function top: T; - begin - top := a[last-1]; - end; - function empty: boolean; - begin - Result := (last=0); - end; - function ToString: string; override; - begin - Result := ''; - for var i:=0 to last-1 do - Result += a[i]+' '; - end; - end; - -var s: Stack; - -begin - s := new Stack; - s.push(7); - s.push(2); - s.push(5); - s.push(4); - writeln(s); - while not s.empty do - write(s.pop,' '); -end. - - diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/06_Classes/Where.pas b/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/06_Classes/Where.pas deleted file mode 100644 index 4b932d35a..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/06_Classes/Where.pas +++ /dev/null @@ -1,21 +0,0 @@ -// Секция Where - ограничение на типы параметров -uses System,System.Collections.Generic; - -type - MyClass = class - where T: System.Array,ICloneable; - where T1: constructor; - procedure p(obj1: T; var obj2: T1); - begin - obj1.Clone(); - obj2 := new T1; - end; - end; - IntArr = array of integer; - -var - m: MyClass; - //m1: MyClass; // ошибка - -begin -end. \ No newline at end of file diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/06_Classes/WriteRecord.pas b/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/06_Classes/WriteRecord.pas deleted file mode 100644 index d35db749a..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/06_Classes/WriteRecord.pas +++ /dev/null @@ -1,26 +0,0 @@ -// Иллюстрация конструкторов и методов в записях -// Если переопределен метод ToString, то он вызывается при выводе объекта этого типа процедурой writeln -type - SexType = (Male, Female); - Person = record - Name: string; - Age, Weight: integer; - Sex: SexType; - constructor (Name: string; Age, Weight: integer; Sex: SexType); - begin - Self.Name := Name; - Self.Age := Age; - Self.Sex := Sex; - Self.Weight := Weight; - end; - function ToString: string; override; - begin - Result := string.Format('Имя: {0} Возраст: {1} Вес: {2} Пол: {3}', Name, Age, Weight, Sex); - end; - end; - -var p: Person := new Person('Иванов',20,70,SexType.Male); - -begin - writeln(p); -end. diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/07_NetLibs/DateTime.pas b/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/07_NetLibs/DateTime.pas deleted file mode 100644 index 01e72e36d..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/07_NetLibs/DateTime.pas +++ /dev/null @@ -1,31 +0,0 @@ -Uses System; - -var d1, d2, d3: DateTime; // Объекты для хранения даты и времени - ts: TimeSpan; // Объект для хранения промежутков времени - -begin - // Получение текущей даты - вызов статического метода - d1 := DateTime.Now; - Writeln(d1); - - // Дата и время через один месяц - d2 := d1.AddMonths(1); - Writeln(d2); - - // Дата и время на 12 часов раньше - d2 := d1.AddHours(-12); - Writeln(d2); - - // Формирование даты - вызов конструктора объекта (год, месяц,число) - d3 := new DateTime(2001, 1, 1); - Writeln(d3); - - // Определение времени, прошедшего с начала тысячелетия (разность дат) - ts := d1.Subtract(d3); - - // Промежуток времени в днях (результат - вещественное число) - Writeln(ts.TotalDays); - - // Промежуток времени в днях, часах, минутах и секундах - Writeln(ts.Days, ' ', ts.Hours, ':', ts.Minutes, ':', ts.Seconds); -end. \ No newline at end of file diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/07_NetLibs/FormWebBrowser.pas b/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/07_NetLibs/FormWebBrowser.pas deleted file mode 100644 index 840d6506d..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/07_NetLibs/FormWebBrowser.pas +++ /dev/null @@ -1,17 +0,0 @@ -// Иллюстрация использования компонента WebBrowser -{$apptype windows} -{$reference System.Windows.Forms.dll} - -uses - System.Windows.Forms, - System.Net; - -begin - var myForm := new Form; - var w := new WebBrowser; - w.Url := new System.Uri('http://pascalabc.net'); - w.Dock := Dockstyle.Fill; - myForm.Controls.Add(w); - myForm.WindowState := FormWindowState.Maximized; - Application.Run(myForm); -end. diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/07_NetLibs/LinkedList.pas b/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/07_NetLibs/LinkedList.pas deleted file mode 100644 index dd1474e39..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/07_NetLibs/LinkedList.pas +++ /dev/null @@ -1,27 +0,0 @@ -// Использование LinkedList - двусвязного списка стандартной библиотеки - и его итератора -uses System.Collections,System.Collections.Generic; - -procedure print(l: ICollection); -begin - foreach x: integer in l do - write(x,' '); - writeln; -end; - -var l: LinkedList := new LinkedList; - -begin - l.AddLast(3); - l.AddLast(5); - l.AddLast(7); - l.AddFirst(2); - print(l); - - var a := new integer[10]; - l.CopyTo(a,0); - print(a); - - var lit: LinkedListNode := l.Find(5); - l.AddBefore(lit,777); - print(l); -end. \ No newline at end of file diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/07_NetLibs/Reflection.pas b/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/07_NetLibs/Reflection.pas deleted file mode 100644 index 99deddba5..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/07_NetLibs/Reflection.pas +++ /dev/null @@ -1,11 +0,0 @@ -// Отражение типов. Выводятся все члены типа DateTime -uses System,System.Reflection; - -begin - var bf := BindingFlags.Public or BindingFlags.NonPublic or BindingFlags.Instance or BindingFlags.Static; - var t: &Type := typeof(DateTime); - var mi := t.GetMembers(bf); - foreach m: MemberInfo in mi do - writeln(m); -end. - diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/07_NetLibs/WinFormWithButton.pas b/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/07_NetLibs/WinFormWithButton.pas deleted file mode 100644 index a0f0c2c8c..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/07_NetLibs/WinFormWithButton.pas +++ /dev/null @@ -1,29 +0,0 @@ -// Создание оконного приложения -{$apptype windows} -{$reference System.Windows.Forms.dll} - -uses - System, - System.Windows.Forms; - -var - myForm: Form; - myButton: Button; - -procedure MyButtonClick(sender: Object; e: EventArgs); -begin - myForm.Close; -end; - -begin - myForm := new Form; - myForm.Text := 'Оконное приложение'; - myButton := new Button; - myButton.Text := ' Закрыть окно '; - myButton.AutoSize := True; - myButton.Left := 90; - myButton.Top := 110; - myForm.Controls.Add(myButton); - myButton.Click += MyButtonClick; - Application.Run(myForm); -end. diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/01_First/Assign1.pas b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/01_First/Assign1.pas deleted file mode 100644 index ac5fe9ee8..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/01_First/Assign1.pas +++ /dev/null @@ -1,12 +0,0 @@ -// Использование вспомогательных переменных -var r: real; - -begin - write('Введите r: '); - readln(r); - var r2,r4,r8: real; // вспомогательные переменные - r2 := r * r; - r4 := r2 * r2; - r8 := r4 * r4; - writeln(r,' в степени 8 = ',r8); -end. \ No newline at end of file diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/01_First/Assign2.pas b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/01_First/Assign2.pas deleted file mode 100644 index 13b2ad3a9..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/01_First/Assign2.pas +++ /dev/null @@ -1,12 +0,0 @@ -// Перемена местами значений двух переменных с использованием третьей -var x,y: real; - -begin - write('Введите x,y: '); - readln(x,y); - var v: real; // вспомогательная переменная - v := x; - x := y; - y := v; - writeln('Новые значения x,y: ',x,' ',y); -end. \ No newline at end of file diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/01_First/AssignExt.pas b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/01_First/AssignExt.pas deleted file mode 100644 index 109d1f089..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/01_First/AssignExt.pas +++ /dev/null @@ -1,18 +0,0 @@ -// Присваивания += -= *= /= -var - i: integer; - r: real; - -begin - i := 1; - writeln('i := 1; i = ',i); - i += 2; // Увеличение на 2 - writeln('i += 2; i = ',i); - i *= 3; // Увеличение в 3 раза - writeln('i *= 3; i = ',i); - writeln; - r := 6; - writeln('r := 6; r = ',r); - r /= 2; - writeln('r /= 2; r = ',r); -end. \ No newline at end of file diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/01_First/Boolean1.pas b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/01_First/Boolean1.pas deleted file mode 100644 index 630763ae6..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/01_First/Boolean1.pas +++ /dev/null @@ -1,16 +0,0 @@ -// Логический тип. Логические выражения с and, or и not -var - b: boolean; - x: integer; -begin - write('Введите x (от 1 до 9): '); - readln(x); - b := x=5; - writeln('x=5? ',b); - b := (x>=3) and (x<=5); - writeln('x=3,4 или 5? ',b); - b := (x=3) or (x=4) or (x=5); - writeln('x=3,4 или 5? ',b); - b := not Odd(x); - writeln('x - четное? ',b); -end. \ No newline at end of file diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/01_First/Calculations1.pas b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/01_First/Calculations1.pas deleted file mode 100644 index f6ba098ae..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/01_First/Calculations1.pas +++ /dev/null @@ -1,10 +0,0 @@ -// Вывод результатов вычислений -begin - writeln('Вычисления:'); -// Вывод пустой строки - writeln; - writeln('121 + 363 = ',121+363); - writeln('121 - 363 = ',121-363); - writeln('121 * 363 = ',121*363); - writeln('121 / 363 = ',121/363); -end. \ No newline at end of file diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/01_First/Calculations2.pas b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/01_First/Calculations2.pas deleted file mode 100644 index ff692f587..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/01_First/Calculations2.pas +++ /dev/null @@ -1,13 +0,0 @@ -// Вывод результатов вычислений. Используются именованные константы -const - a = 121; - b = 363; - -begin - writeln('Вычисления:'); - writeln; - writeln(a,' + ',b,' = ',a+b); - writeln(a,' - ',b,' = ',a-b); - writeln(a,' * ',b,' = ',a*b); - writeln(a,' / ',b,' = ',a/b); -end. \ No newline at end of file diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/01_First/Calculations3.pas b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/01_First/Calculations3.pas deleted file mode 100644 index 255a9b131..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/01_First/Calculations3.pas +++ /dev/null @@ -1,12 +0,0 @@ -// Вывод результатов вычислений. Используются переменные и процедура ввода -var a,b: integer; - -begin - writeln('Введите a и b:'); - readln(a,b); - writeln; - writeln(a,' + ',b,' = ',a+b); - writeln(a,' - ',b,' = ',a-b); - writeln(a,' * ',b,' = ',a*b); - writeln(a,' / ',b,' = ',a/b); -end. \ No newline at end of file diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/01_First/DivMod1.pas b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/01_First/DivMod1.pas deleted file mode 100644 index 37fc92a04..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/01_First/DivMod1.pas +++ /dev/null @@ -1,10 +0,0 @@ -// Операции div и mod -var a: integer; - -begin - write('Введите a: '); - readln(a); - writeln('Последняя цифра числа: ',a mod 10); - writeln('Число без последней цифры: ',a div 10); - writeln('Если число a четно, то 0: ',a mod 2); -end. \ No newline at end of file diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/01_First/DivMod2.pas b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/01_First/DivMod2.pas deleted file mode 100644 index 7a008006b..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/01_First/DivMod2.pas +++ /dev/null @@ -1,13 +0,0 @@ -// Операции div и mod -var a: integer := 247; - -begin - write('Цифры числа в обратном порядке: '); - // Выводим последнюю цифру - write(a mod 10,' '); - // Отбрасываем последнюю цифру - a := a div 10; - write(a mod 10,' '); - a := a div 10; - write(a mod 10,' '); -end. \ No newline at end of file diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/01_First/HelloWorld.pas b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/01_First/HelloWorld.pas deleted file mode 100644 index 0ce413328..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/01_First/HelloWorld.pas +++ /dev/null @@ -1,5 +0,0 @@ -// Первая программа -program HelloWorld; -begin - writeln('Привет, мир!'); -end. \ No newline at end of file diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/01_First/Random1.pas b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/01_First/Random1.pas deleted file mode 100644 index e8738e012..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/01_First/Random1.pas +++ /dev/null @@ -1,13 +0,0 @@ -// Генерация случайного числа -var - i: integer; - r: real; - -begin - i := Random(100); - writeln('Случайное целое в диапазоне 0..99: ',i); - i := Random(2,5); - writeln('Случайное целое в диапазоне 2..5: ',i); - r := Random; - writeln('Случайное вещественное в диапазоне [0,1): ',r); -end. \ No newline at end of file diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/01_First/Random2.pas b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/01_First/Random2.pas deleted file mode 100644 index edb94ebd9..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/01_First/Random2.pas +++ /dev/null @@ -1,10 +0,0 @@ -// Бросание кубиков - -var k1,k2: integer; - -begin - k1 := Random(1,6); - k2 := Random(1,6); - writeln('Очки на кубиках: ',k1,' ',k2); - writeln('Сумма очков: ',k1+k2); -end. \ No newline at end of file diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/01_First/ReadString.pas b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/01_First/ReadString.pas deleted file mode 100644 index a214b05b6..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/01_First/ReadString.pas +++ /dev/null @@ -1,8 +0,0 @@ -// Ввод строки -var s: string; - -begin - write('Введите Ваше имя: '); - readln(s); - writeln('Здравствуйте, ',s); -end. \ No newline at end of file diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/01_First/Shl.pas b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/01_First/Shl.pas deleted file mode 100644 index 5a381c181..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/01_First/Shl.pas +++ /dev/null @@ -1,8 +0,0 @@ -// Демонстрация операции shl -begin - writeln('Степени двойки'); - writeln(' n 2^n'); - for var i:=0 to 30 do - writeln(i:2,(1 shl i):12); -end. - diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/01_First/StandFun.pas b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/01_First/StandFun.pas deleted file mode 100644 index 5d820f901..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/01_First/StandFun.pas +++ /dev/null @@ -1,14 +0,0 @@ -// Стандартные функции -var x: real; - -begin - write('Введите x: '); - readln(x); - writeln('Квадрат ',x,' равен ',sqr(x)); - writeln(x,' в степени 5 равно ',power(x,5)); - writeln('Квадратный корень из ',x,' равен ',sqrt(x)); - writeln('Модуль ',x,' равен ',abs(x)); - writeln('Натуральный логарифм ',x,' равен ',ln(x)); - writeln('Синус ',x,' равен ',sin(x)); - writeln('Косинус ',x,' равен ',cos(x)); -end. \ No newline at end of file diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/01_First/StandardTypes.pas b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/01_First/StandardTypes.pas deleted file mode 100644 index 6eb0c2b4d..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/01_First/StandardTypes.pas +++ /dev/null @@ -1,33 +0,0 @@ -/// Стандартные размерные типы данных и их размер -var - i: integer; - j: shortint; - k: smallint; - l: longint; // синоним integer - i64: int64; - b: byte; - w: word; - lw: longword; - car: cardinal; // синоним longword - ui64: uint64; - r: real; - d: double; // синоним real - sn: single; - c: char; - -begin - writeln('sizeof(integer) = ':20, sizeof(integer)); - writeln('sizeof(shortint) = ':20,sizeof(shortint)); - writeln('sizeof(smallint) = ':20,sizeof(smallint)); - writeln('sizeof(longint) = ':20, sizeof(longint)); - writeln('sizeof(int64) = ':20, sizeof(int64)); - writeln('sizeof(byte) = ':20, sizeof(byte)); - writeln('sizeof(word) = ':20, sizeof(word)); - writeln('sizeof(longword) = ':20,sizeof(longword)); - writeln('sizeof(cardinal) = ':20,sizeof(cardinal)); - writeln('sizeof(uint64) = ':20, sizeof(uint64)); - writeln('sizeof(real) = ':20, sizeof(real)); - writeln('sizeof(double) = ':20, sizeof(double)); - writeln('sizeof(single) = ':20, sizeof(single)); - writeln('sizeof(char) = ':20, sizeof(char)); -end. \ No newline at end of file diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/01_First/StringPlus.pas b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/01_First/StringPlus.pas deleted file mode 100644 index f267a010f..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/01_First/StringPlus.pas +++ /dev/null @@ -1,8 +0,0 @@ -// Сложение строк -var s1: string := 'Pascal'; -var s2: string := 'NET'; - -begin - writeln(s2+'-'+s1); - writeln(s1+'.'+s2); -end. \ No newline at end of file diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/01_First/WriteFormat.pas b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/01_First/WriteFormat.pas deleted file mode 100644 index 81b23cce6..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/01_First/WriteFormat.pas +++ /dev/null @@ -1,11 +0,0 @@ -/// Использование процедуры WritelnFormat -begin - // Вывод в обратном порядке - WritelnFormat('{2},{1},{0}',1,2,3); - // Вывод фигурных скобочек - WritelnFormat('{{}}{0}','Вывод фигурных скобочек в форматной строке'); - // Задание количества знаков после запятой для вещественного числа - WritelnFormat('{0:f3}',3.1415); - // Задание ширины поля вывода - WritelnFormat('{0,10:f}',3.1415); -end. \ No newline at end of file diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/02_Errors/CompilerError1.pas b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/02_Errors/CompilerError1.pas deleted file mode 100644 index 89b2f9ac6..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/02_Errors/CompilerError1.pas +++ /dev/null @@ -1,8 +0,0 @@ -// Исправьте ошибку компиляции. -// Обратите внимание, что курсор позиционируется в конце слова, вызвавшего ошибку -var i: integer - -begin - i := 2; - writeln(i); -end. \ No newline at end of file diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/02_Errors/CompilerError2.pas b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/02_Errors/CompilerError2.pas deleted file mode 100644 index 965d64a33..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/02_Errors/CompilerError2.pas +++ /dev/null @@ -1,5 +0,0 @@ -// Исправьте ошибки компиляции. Опишите переменную r -begin - r := 2.5; - witeln(r); -end. \ No newline at end of file diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/02_Errors/CompilerError3.pas b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/02_Errors/CompilerError3.pas deleted file mode 100644 index 77ac7ce3b..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/02_Errors/CompilerError3.pas +++ /dev/null @@ -1,8 +0,0 @@ -// Исправьте ошибку компиляции. Не всегда надо "верить" тексту ошибки - -var k: real; - -begin - k := 2,5; - writeln(r); -end. \ No newline at end of file diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/02_Errors/CompilerError4.pas b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/02_Errors/CompilerError4.pas deleted file mode 100644 index f4ad2ff53..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/02_Errors/CompilerError4.pas +++ /dev/null @@ -1,6 +0,0 @@ -// Исправьте ошибки компиляции, изменив тип переменной x -var x: integer; - -begin - x := 3/5; -end. \ No newline at end of file diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/02_Errors/RuntimeError1.pas b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/02_Errors/RuntimeError1.pas deleted file mode 100644 index 07b8eb262..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/02_Errors/RuntimeError1.pas +++ /dev/null @@ -1,7 +0,0 @@ -// Введите не число -// Посмотрите, как выглядит ошибка при выполнении программы -var i: integer; - -begin - read(i); -end. \ No newline at end of file diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/02_Errors/RuntimeError2.pas b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/02_Errors/RuntimeError2.pas deleted file mode 100644 index c505b4c3f..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/02_Errors/RuntimeError2.pas +++ /dev/null @@ -1,6 +0,0 @@ -// Посмотрите, как выглядит ошибка выполнения при целочисленном делении на 0 -var i: integer := 0; - -begin - write(2 div i); -end. \ No newline at end of file diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/02_Errors/RuntimeError3.pas b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/02_Errors/RuntimeError3.pas deleted file mode 100644 index bd7e13190..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/02_Errors/RuntimeError3.pas +++ /dev/null @@ -1,6 +0,0 @@ -// При обычном делении на 0 ошибки не возникает -var r: real := 0; - -begin - write(1/0); -end. \ No newline at end of file diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/02_Errors/RuntimeError4.pas b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/02_Errors/RuntimeError4.pas deleted file mode 100644 index e5d2f7412..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/02_Errors/RuntimeError4.pas +++ /dev/null @@ -1,4 +0,0 @@ -// При работе с вещественными числами невозможно получить ошибку выполнения -begin - writeln(sqrt(-1)); -end. \ No newline at end of file diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/03_Robot_Drawman/DMa1.pas b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/03_Robot_Drawman/DMa1.pas deleted file mode 100644 index fde4bef24..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/03_Robot_Drawman/DMa1.pas +++ /dev/null @@ -1,14 +0,0 @@ -// Исполнитель Чертежник - отличное средство для начального обучения программированию -// школьников младших и средних классов -// Для генерации шаблона задания нажмите Ctrl-L и наберите DM и имя задания -uses Drawman; - -begin - Task('a1'); - ToPoint(2,3); - PenDown; - OnVector(1,2); - PenUp; - ToPoint(0,0); -end. - diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/03_Robot_Drawman/RBa1.pas b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/03_Robot_Drawman/RBa1.pas deleted file mode 100644 index e7c59265c..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/03_Robot_Drawman/RBa1.pas +++ /dev/null @@ -1,16 +0,0 @@ -// Исполнитель Робот - отличное средство для начального обучения программированию -// школьников младших и средних классов -// Для генерации шаблона задания нажмите Ctrl-L и наберите RB и имя задания -uses Robot; - -begin - Task('a1'); - Right; Right; Right; Right; - Up; - Left; Paint; - Left; Paint; - Left; Paint; - Left; Paint; - Left; -end. - diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/04_Graphics/Gr1.pas b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/04_Graphics/Gr1.pas deleted file mode 100644 index 1b3eb122e..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/04_Graphics/Gr1.pas +++ /dev/null @@ -1,8 +0,0 @@ -// Графика. Линии. Размеры окна. Заголовок окна -uses GraphABC; - -begin - Window.Title := 'Первая графическая программа'; - Line(0,0,Window.Width-1,Window.Height-1); - Line(0,Window.Height-1,Window.Width-1,0); -end. \ No newline at end of file diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/04_Graphics/Gr2.pas b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/04_Graphics/Gr2.pas deleted file mode 100644 index 0471c2aa8..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/04_Graphics/Gr2.pas +++ /dev/null @@ -1,8 +0,0 @@ -// Графика. Точка. Случайный цвет. Скорость работы -uses GraphABC,Utils; - -begin - for var i:=1 to 100000 do - SetPixel(Random(Window.Width),Random(Window.Height),clRandom); - writeln('Время работы: ',Milliseconds/1000,' секунд'); -end. \ No newline at end of file diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/04_Graphics/Gr3.pas b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/04_Graphics/Gr3.pas deleted file mode 100644 index de0d7ae58..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/04_Graphics/Gr3.pas +++ /dev/null @@ -1,14 +0,0 @@ -// Графика. Свойства кисти и пера -uses GraphABC; - -begin - Window.Title := 'Свойства кисти и пера'; - Pen.Color := Color.Red; - Pen.Width := 3; - Pen.Style := psDashDot; - Brush.Style := bsHatch; - Brush.Color := Color.Green; - Brush.Hatch := bhDiagonalBrick; - Brush.HatchBackgroundColor := Color.Bisque; - Rectangle(20, 20, Window.Width - 20, Window.Height - 20); -end. \ No newline at end of file diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/04_Graphics/Gr4.pas b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/04_Graphics/Gr4.pas deleted file mode 100644 index 7c060dd57..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/04_Graphics/Gr4.pas +++ /dev/null @@ -1,22 +0,0 @@ -// Графика. Draw и Fill - процедуры -uses GraphABC; - -begin - Window.Title := 'Draw и Fill - процедуры'; - for var i := 1 to 100 do - begin - Pen.Color := clRandom; - var x := Random(Window.Width-100); - var y := Random(Window.Height-100); - DrawRectangle(x,y,x+Random(100),y+Random(100)); - Sleep(30); - end; - for var i := 1 to 100 do - begin - Brush.Color := clRandom; - var x := Random(Window.Width-100); - var y := Random(Window.Height-100); - FillRectangle(x,y,x+Random(100),y+Random(100)); - Sleep(30); - end; -end. \ No newline at end of file diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/04_Graphics/Gr5.pas b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/04_Graphics/Gr5.pas deleted file mode 100644 index 979566e61..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/04_Graphics/Gr5.pas +++ /dev/null @@ -1,20 +0,0 @@ -// Графика. Pie -uses GraphABC; - -const r = 200; - -begin - Window.Title := 'Круговая гистограмма'; - var x := Window.Center.X; - var y := Window.Center.Y; - Brush.Color := clRandom; - Pie(x,y,r,0,30); - Brush.Color := clRandom; - Pie(x,y,r,30,110); - Brush.Color := clRandom; - Pie(x,y,r,110,160); - Brush.Color := clRandom; - Pie(x,y,r,160,280); - Brush.Color := clRandom; - Pie(x,y,r,280,360); -end. \ No newline at end of file diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/04_Graphics/Gr6.pas b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/04_Graphics/Gr6.pas deleted file mode 100644 index 6430311b0..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/04_Graphics/Gr6.pas +++ /dev/null @@ -1,19 +0,0 @@ -// Графика. Прозрачность -uses GraphABC; - -begin - Window.Title := 'Демонстрация прозрачности'; - - Brush.Color := clRed; - FillRectangle(50,50,100,Window.Height - 50); - Brush.Color := clGreen; - FillRectangle(150,50,200,Window.Height - 50); - Brush.Color := clBlue; - FillRectangle(250,50,300,Window.Height - 50); - Brush.Color := ARGB(127,255,0,0); - FillRectangle(20,100,420,150); - Brush.Color := ARGB(63,0,127,0); - FillRectangle(20,200,420,250); - Brush.Color := ARGB(31,0,0,255); - FillRectangle(20,300,420,350); -end. \ No newline at end of file diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/04_Graphics/Gr7.pas b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/04_Graphics/Gr7.pas deleted file mode 100644 index 3eacff030..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/04_Graphics/Gr7.pas +++ /dev/null @@ -1,24 +0,0 @@ -// Графика. Сохраниение изображения графического окна в файл и загрузка из файла -uses GraphABC; - -const - delay = 500; - filename = 'GraphWindow.bmp'; - -begin - Window.Title := 'Window.Save и Window.Load'; - SetWindowSize(320,240); - - for var x:=0 to Window.Width - 1 do - for var y:=0 to Window.Height - 1 do - SetPixel(x,y,RGB(x-2*y,y+x,y-2*x)); - - Window.Save(filename); - for var i := 1 to 5 do - begin - Window.Clear; - Sleep(delay); - Window.Load(filename); - Sleep(delay); - end; -end. \ No newline at end of file diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/04_Graphics/Gr8.pas b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/04_Graphics/Gr8.pas deleted file mode 100644 index 678a0a382..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/04_Graphics/Gr8.pas +++ /dev/null @@ -1,18 +0,0 @@ -// Графика. Сглаживание -uses GraphABC; - -begin - Window.Title := 'Демонстрация сглаживания'; - TextOut(40,20,'Со сглаживанием'); - Pen.Width := 2; - - Ellipse(40,60,300,200); - Line(340,60,600,130); - Line(600,130,340,200); - - SetSmoothingOff; - TextOut(40,240,'Без сглаживания'); - Ellipse(40,280,300,420); - Line(340,280,600,350); - Line(600,350,340,420); -end. \ No newline at end of file diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/04_Graphics/GrAnim1.pas b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/04_Graphics/GrAnim1.pas deleted file mode 100644 index 67e0b2d54..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/04_Graphics/GrAnim1.pas +++ /dev/null @@ -1,14 +0,0 @@ -// Графика. Пример "наивной" анимации. Эффект мерцания -uses GraphABC; - -begin - Window.Title := 'Демонстрация простой анимации'; - var y := 200; - Brush.Color := clGreen; - for var x := 70 to 500 do - begin - Window.Clear(clWhite); - Circle(x,y,50); - Sleep(3); - end; -end. \ No newline at end of file diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/04_Graphics/GrAnim2.pas b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/04_Graphics/GrAnim2.pas deleted file mode 100644 index b88e17046..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/04_Graphics/GrAnim2.pas +++ /dev/null @@ -1,18 +0,0 @@ -// Графика. Использование LockDrawing-Redraw. Мерцание отсутствует -uses GraphABC; - -begin - Window.Title := 'Анимация без мерцания'; - var y := 200; - Brush.Color := clGreen; - // Отключаем рисование в окне - LockDrawing; - for var x := 70 to 500 do - begin - Window.Clear(clWhite); - Circle(x,y,50); - // Перерисовываем окно из внеэранного буфера - Redraw; - Sleep(3); - end; -end. \ No newline at end of file diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/04_Graphics/GrCoord1.pas b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/04_Graphics/GrCoord1.pas deleted file mode 100644 index 8da8ac886..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/04_Graphics/GrCoord1.pas +++ /dev/null @@ -1,19 +0,0 @@ -// Демонстрация преобразований системы координат -uses GraphABC; - -begin - Window.Title := 'Преобразования системы координат'; - Window.IsFixedSize := True; - - // Поворот - Coordinate.Angle := 30; - // Масштаб - Coordinate.Scale := 3; - // Начало координат - в центре окна - Coordinate.Origin := Window.Center; - - Brush.Color := clMoneyGreen; - Ellipse(-50,-20,50,20); - Line(-70,0,70,0); - Line(0,-40,0,40); -end. diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/04_Graphics/GrCoord2.pas b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/04_Graphics/GrCoord2.pas deleted file mode 100644 index e81b9b651..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/04_Graphics/GrCoord2.pas +++ /dev/null @@ -1,15 +0,0 @@ -// Демонстрация преобразований системы координат -uses GraphABC; - -begin - Window.Title := 'Преобразования системы координат'; - Window.IsFixedSize := True; - - Coordinate.Origin := Window.Center; - Circle(0,0,200); - for var i := 1 to 12 do - begin - Circle(0,180,10); - Coordinate.Angle := Coordinate.Angle + 30; - end; -end. diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/04_Graphics/GrCoord3.pas b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/04_Graphics/GrCoord3.pas deleted file mode 100644 index 515de5fc5..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/04_Graphics/GrCoord3.pas +++ /dev/null @@ -1,17 +0,0 @@ -uses GraphABC; - -begin - Coordinate.Origin := Window.Center; - Coordinate.SetMathematic; - while True do - begin - LockDrawing; - ClearWindow; - Ellipse(-120,-70,120,70); - Line(0,0,200,0); - Line(0,0,0,200); - Redraw; - Coordinate.Angle := Coordinate.Angle + 1; - Sleep(100); - end; -end. diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/04_Graphics/GrFont1.pas b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/04_Graphics/GrFont1.pas deleted file mode 100644 index 40446966c..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/04_Graphics/GrFont1.pas +++ /dev/null @@ -1,23 +0,0 @@ -// Демонстрация работы со шрифтами -uses GraphABC; - -begin - Window.Title := 'Шрифты'; - SetWindowSize(760,460); - Font.Name := 'Arial'; - Font.Style := fsBoldItalic; - for var i:=4 to 14 do - begin - Font.Size := 2*i; - Font.Color := clRandom; - TextOut(30,2*i*i-15,'PascalABC.NET'); - end; - Font.Name := 'Times New Roman'; - Font.Style := fsBoldUnderline; - for var i:=4 to 14 do - begin - Font.Size := 2*i; - Font.Color := clRandom; - TextOut(400,2*i*i-15,'PascalABC.NET'); - end; -end. diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/04_Graphics/GrFont2.pas b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/04_Graphics/GrFont2.pas deleted file mode 100644 index 17947a8ff..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/04_Graphics/GrFont2.pas +++ /dev/null @@ -1,16 +0,0 @@ -// Демонстрация использования TextWidth и TextHeight -uses GraphABC; - -const s = 'Width & Height'; - -begin - Window.Title := 'Текст по центру'; - Window.IsFixedSize := True; - SetWindowSize(700,300); - Window.Center; - Font.Name := 'Times'; - Font.Size := 50; - var tw := TextWidth(s); - var th := TextHeight(s); - TextOut((Window.Width-tw) div 2,(Window.Height-th) div 2,s); -end. diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/04_Graphics/GrPoly.pas b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/04_Graphics/GrPoly.pas deleted file mode 100644 index 68f80312d..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/04_Graphics/GrPoly.pas +++ /dev/null @@ -1,18 +0,0 @@ -// Процедуры Polyline, Polygon, Curve, ClosedCurve -// Перенос начала системы координат -uses GraphABC; - -var a: array of Point := (new Point(0,0), new Point(50,170), new Point(100,100), new Point(150,170), new Point(200,0)); - -begin - Window.Title := 'Рисование по массиву точек'; - Brush.Color := Color.Beige; - Coordinate.SetOrigin(60,30); - Polyline(a); - Coordinate.OriginX := 360; - Polygon(a); - Coordinate.Origin := new Point(60,250); - Curve(a); - Coordinate.OriginX := 360; - ClosedCurve(a); -end. diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/04_Graphics/GraphWindow.bmp b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/04_Graphics/GraphWindow.bmp deleted file mode 100644 index 1325f0b68434b94cd01adaf88ae6461c245ed1b7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 211619 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�gL9sQkuW4`kLIa&hadKn<} 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 diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/04a_ABCObjects/ABC1.pas b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/04a_ABCObjects/ABC1.pas deleted file mode 100644 index 0fe49e801..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/04a_ABCObjects/ABC1.pas +++ /dev/null @@ -1,40 +0,0 @@ -// Модуль ABCObjects. Изменение свойств объекта -uses ABCObjects,GraphABC; - -const delay = 300; - -procedure Pause; -begin - Sleep(delay); -end; - -var - r: RectangleABC; - z: StarABC; - -begin - Window.Title := 'ABCObjects: свойства графических объектов'; - z := new StarABC(Window.Center.X,Window.Center.Y,70,30,6,Color.Green); - r := new RectangleABC(100,100,200,100,Color.Gold); - Pause; - r.Center := Window.Center; - Pause; - r.Height := 70; - Pause; - r.Width := 220; - Pause; - z.Radius := 150; - Pause; - z.Color := Color.LightCoral; - Pause; - z.Count := 5; - Pause; - - r.Text := 'PascalABC.NET'; - r.Color := Color.Gainsboro; - Pause; - r.BorderWidth := 3; - r.BorderColor := Color.Blue; - Pause; - r.Center := Window.Center; -end. diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/05_IfCaseBoolean/Case1.pas b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/05_IfCaseBoolean/Case1.pas deleted file mode 100644 index 9f2c5a27c..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/05_IfCaseBoolean/Case1.pas +++ /dev/null @@ -1,15 +0,0 @@ -// Оператор выбора -var x: integer; - -begin - writeln('Введите оценку (1..5): '); - readln(x); - case x of - 1: writeln('Единица'); - 2: writeln('Двойка'); - 3: writeln('Тройка'); - 4: writeln('Четверка'); - 5: writeln('Пятерка'); - else writeln('Такой оценки нет'); - end; -end. \ No newline at end of file diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/05_IfCaseBoolean/Case2.pas b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/05_IfCaseBoolean/Case2.pas deleted file mode 100644 index a6b257bbd..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/05_IfCaseBoolean/Case2.pas +++ /dev/null @@ -1,12 +0,0 @@ -// Оператор выбора -var day: integer; - -begin - writeln('Введите номер дня недели (1..7): '); - readln(day); - case day of - 1..5: writeln('Будний'); - 6,7: writeln('Выходной'); - else writeln('Неверный день недели'); - end; -end. \ No newline at end of file diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/05_IfCaseBoolean/Case3.pas b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/05_IfCaseBoolean/Case3.pas deleted file mode 100644 index bd061c036..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/05_IfCaseBoolean/Case3.pas +++ /dev/null @@ -1,12 +0,0 @@ -// Оператор выбора -var c: char; - -begin - writeln('Введите символ: '); - readln(c); - case c of - '0'..'9': writeln('Это цифра'); - 'a'..'z','A'..'Z': writeln('Это английская буква'); - 'а'..'я','А'..'Я': writeln('Это русская буква'); - end; -end. \ No newline at end of file diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/05_IfCaseBoolean/Case4.pas b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/05_IfCaseBoolean/Case4.pas deleted file mode 100644 index ce699c1ca..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/05_IfCaseBoolean/Case4.pas +++ /dev/null @@ -1,14 +0,0 @@ -// Оператор выбора. Случайная фигура -uses GraphABC; - -begin - SetWindowSize(400,300); - var t := Random(1,5); - case t of - 1: Circle(200,150,100); - 2: Rectangle(100,100,300,200); - 3: Ellipse(100,100,300,200); - 4: RoundRect(100,100,300,200,20,20); - 5: Line(100,100,300,200); - end; -end. \ No newline at end of file diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/05_IfCaseBoolean/If1.pas b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/05_IfCaseBoolean/If1.pas deleted file mode 100644 index a76e75399..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/05_IfCaseBoolean/If1.pas +++ /dev/null @@ -1,10 +0,0 @@ -// Условный оператор. Полная форма -var - x: integer := 5; - y: integer := 3; - -begin - if x=1) and (x<=9) then - writeln('Однозначное число'); - // Odd - функция, возвращающая True только если x - нечетно - if Odd(x) and (x>=10) and (x<=99) then - writeln('Нечетное двузначное число'); - if (x=3) or (x=9) or (x=27) or (x=81) then - writeln('Степень тройки'); -end. \ No newline at end of file diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/05_IfCaseBoolean/If4.pas b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/05_IfCaseBoolean/If4.pas deleted file mode 100644 index 41008a92a..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/05_IfCaseBoolean/If4.pas +++ /dev/null @@ -1,18 +0,0 @@ -// Вложенные условные операторы -var x: integer; - -begin - writeln('Введите оценку (1..5): '); - readln(x); - if (x=1) then - writeln('Единица') - else if (x=2) then - writeln('Двойка') - else if (x=3) then - writeln('Тройка') - else if (x=4) then - writeln('Четверка') - else if (x=5) then - writeln('Пятерка') - else writeln('Такой оценки нет') -end. \ No newline at end of file diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/05_IfCaseBoolean/If5.pas b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/05_IfCaseBoolean/If5.pas deleted file mode 100644 index 074bf783b..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/05_IfCaseBoolean/If5.pas +++ /dev/null @@ -1,19 +0,0 @@ -// Вложенные условные операторы. Антонимы -var s: string; - -begin - writeln('Введите слово из списка (черный,высокий,свет,радость,умный): '); - readln(s); - write('Антоним: '); - if (s='черный') then - writeln('белый') - else if (s='высокий') then - writeln('низкий') - else if (s='свет') then - writeln('тьма') - else if (s='радость') then - writeln('горе') - else if (s='умный') then - writeln('глупый') - else writeln('Такого слова в списке нет') -end. \ No newline at end of file diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/06_ForWhileRepeat/For1.pas b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/06_ForWhileRepeat/For1.pas deleted file mode 100644 index 5545f146f..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/06_ForWhileRepeat/For1.pas +++ /dev/null @@ -1,22 +0,0 @@ -// Цикл for - -const n = 20; - -var i: integer; - -begin - writeln('Числа от 1 до ',n,':'); - for i:=1 to n do - write(i,' '); - writeln; - writeln; - writeln('Числа от ',n,' до 1:'); - for i:=n downto 1 do - write(i,' '); - writeln; - writeln; - writeln('Маленькие английские буквы:'); - for c: char := 'a' to 'z' do - write(c,' '); - writeln; -end. \ No newline at end of file diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/06_ForWhileRepeat/For1a.pas b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/06_ForWhileRepeat/For1a.pas deleted file mode 100644 index 600a4a7bc..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/06_ForWhileRepeat/For1a.pas +++ /dev/null @@ -1,38 +0,0 @@ -// Цикл for. Шаг цикла 2 -const n = 25; - -var i: integer; - -begin - writeln('Четные числа от 1 до ',2*n); - for i:=1 to n do - write(2*i,' '); - writeln; - writeln; - - writeln('Четные числа от 1 до ',2*n); - var x := 2; - for i:=1 to n do - begin - write(x,' '); - x += 2; - end; - writeln; - writeln; - - writeln('Нечетные числа от 1 до ',2*n); - for i:=1 to n do - write(2*i-1,' '); - writeln; - writeln; - - writeln('Нечетные числа от 1 до ',2*n); - x := 1; - for i:=1 to n do - begin - write(x,' '); - x += 2; - end; - writeln; - writeln; -end. \ No newline at end of file diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/06_ForWhileRepeat/For2.pas b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/06_ForWhileRepeat/For2.pas deleted file mode 100644 index f94af5449..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/06_ForWhileRepeat/For2.pas +++ /dev/null @@ -1,15 +0,0 @@ -// Цикл for. Последовательность случайных чисел - -const n = 20; - -var i: integer; - -begin - write('Случайные оценки: '); - for i:=1 to n do - write(Random(2,5),' '); - writeln; - write('Случайные целые от 1 до 99: '); - for i:=n downto 1 do - write(Random(1,99),' '); -end. \ No newline at end of file diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/06_ForWhileRepeat/For3.pas b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/06_ForWhileRepeat/For3.pas deleted file mode 100644 index 945e1ce5b..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/06_ForWhileRepeat/For3.pas +++ /dev/null @@ -1,11 +0,0 @@ -// Цикл for. Последовательность случайных чисел -const n = 20; - -begin - for var i:=1 to n do - write(Random(2,5),' '); - writeln; - write('Случайные целые от 1 до 99: '); - for i:=n downto 1 do - write(Random(1,99),' '); -end. \ No newline at end of file diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/06_ForWhileRepeat/For4.pas b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/06_ForWhileRepeat/For4.pas deleted file mode 100644 index d10ab5ca5..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/06_ForWhileRepeat/For4.pas +++ /dev/null @@ -1,9 +0,0 @@ -// ÷икл for. —умма всех двузначных чисел -var s: integer; - -begin - s := 0; - for var i:=10 to 99 do - s := s + i; // можно s += i - writeln('—умма всех двузначных чисел = ',s); -end. \ No newline at end of file diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/06_ForWhileRepeat/For5.pas b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/06_ForWhileRepeat/For5.pas deleted file mode 100644 index 5b1a9a4cd..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/06_ForWhileRepeat/For5.pas +++ /dev/null @@ -1,13 +0,0 @@ -// ÷икл for. a в степени n -var - a: real; - n: integer; - -begin - write('¬ведите a,n: '); - readln(a,n); - var p: real := 1; - for var i:=1 to n do - p := p * a; // можно p *= a - writelnFormat('{0} в степени {1} = {2}',a,n,p); -end. \ No newline at end of file diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/06_ForWhileRepeat/For6.pas b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/06_ForWhileRepeat/For6.pas deleted file mode 100644 index d4073450f..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/06_ForWhileRepeat/For6.pas +++ /dev/null @@ -1,15 +0,0 @@ -// for. -var - a: real := 0; - b: real := 4; - n: integer := 16; - -begin - var h := (b-a)/n; - var x := a; - for var i:=0 to n do - begin - writelnFormat('{0:f2} {1:f4}',x,sqrt(x)); - x += h; - end; -end. \ No newline at end of file diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/06_ForWhileRepeat/For7.pas b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/06_ForWhileRepeat/For7.pas deleted file mode 100644 index fdee8f3a2..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/06_ForWhileRepeat/For7.pas +++ /dev/null @@ -1,17 +0,0 @@ -// for. -const n = 25; - -begin - var a := 1; - var b := 1; - writeln(' :'); - write(a,' ',b,' '); - - for var i:=3 to n do - begin - var c := a + b; - write(c,' '); - a := b; - b := c; - end; -end. \ No newline at end of file diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/06_ForWhileRepeat/For8.pas b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/06_ForWhileRepeat/For8.pas deleted file mode 100644 index 5167640b8..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/06_ForWhileRepeat/For8.pas +++ /dev/null @@ -1,17 +0,0 @@ -// Цикл for. Максимум из введенных чисел -const n = 10; - -var max: real; - -begin - writelnFormat('Введите {0} чисел',n); - max := integer.MinValue; // самое маленькое целое число - for var i:=1 to n do - begin - var x: real; - read(x); - if x>max then - max := x; - end; - writeln('Максимальное равно ',max); -end. \ No newline at end of file diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/06_ForWhileRepeat/For9.pas b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/06_ForWhileRepeat/For9.pas deleted file mode 100644 index 7ca1357f1..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/06_ForWhileRepeat/For9.pas +++ /dev/null @@ -1,26 +0,0 @@ -// Цикл for. Поиск значения. Оператор break -const n = 10; - -var - k: integer; - found: boolean; - -begin - writeln('Введите число для поиска: '); - readln(k); - writelnFormat('Введите {0} чисел',n); - found := False; - for var i:=1 to n do - begin - var x: integer; - read(x); - if x=k then - begin - found := True; - break; - end; - end; - if found then - writeln('Найдено') - else writeln('Не найдено'); -end. \ No newline at end of file diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/06_ForWhileRepeat/ForFor1.pas b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/06_ForWhileRepeat/ForFor1.pas deleted file mode 100644 index c6f2b1322..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/06_ForWhileRepeat/ForFor1.pas +++ /dev/null @@ -1,12 +0,0 @@ -// Вложенные циклы for. Таблица умножения -const n = 9; - -begin - writeln('Таблица умножения'); - for var i:=1 to n do - begin - for var j:=1 to n do - write(i*j:4); - writeln; - end; -end. \ No newline at end of file diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/06_ForWhileRepeat/ForFor2.pas b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/06_ForWhileRepeat/ForFor2.pas deleted file mode 100644 index 002e2d5c0..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/06_ForWhileRepeat/ForFor2.pas +++ /dev/null @@ -1,20 +0,0 @@ -// Вложенные циклы for -const n = 6; - -begin - for var i:=1 to n do - begin - for var j:=1 to i do - write('*'); - writeln; - end; - writeln; - for var i:=1 to n do - begin - for var j:=1 to 3*n do - if Odd(i+j) then - write('*') - else write(' '); - writeln; - end; -end. \ No newline at end of file diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/06_ForWhileRepeat/ForGra1.pas b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/06_ForWhileRepeat/ForGra1.pas deleted file mode 100644 index a7028177b..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/06_ForWhileRepeat/ForGra1.pas +++ /dev/null @@ -1,16 +0,0 @@ -// Вложенные циклы for. Сетка из квадртов -uses GraphABC; - -const - sz = 35; - zz = 5; - -begin - var h := sz+zz; - for var nx:=0 to Window.Width div h do - for var ny:=0 to Window.Height div h do - begin - Brush.Color := clRandom; - Rectangle(zz+nx*h,zz+ny*h,zz+nx*h+sz,zz+ny*h+sz); - end; -end. \ No newline at end of file diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/06_ForWhileRepeat/algo1.pas b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/06_ForWhileRepeat/algo1.pas deleted file mode 100644 index a6713302b..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/06_ForWhileRepeat/algo1.pas +++ /dev/null @@ -1,21 +0,0 @@ -// Алгоритм определения простоты числа -var - N: integer; - IsSimple: boolean; - -begin - writeln('Введите число: '); - readln(N); - - IsSimple := True; - for var i:=2 to round(sqrt(N)) do // если число составное, то один из его сомножителей <= (sqrt(N)) - if N mod i = 0 then - begin - IsSimple := False; - break; - end; - - if IsSimple then - writeln('Число ',N,' простое') - else writeln('Число ',N,' составное'); -end. \ No newline at end of file diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/06_ForWhileRepeat/algo2.pas b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/06_ForWhileRepeat/algo2.pas deleted file mode 100644 index 1d02bcd1f..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/06_ForWhileRepeat/algo2.pas +++ /dev/null @@ -1,21 +0,0 @@ -// Алгоритм вычисления значения многочлена в точке x по схеме Горнера -const n=5; - -var - x,a: real; - -begin - writeln('Введите значение x: '); - readln(x); - - writeln('Введите коэффициенты многочлена (',n+1,' штук): '); - read(a); - var s := a; - for var i:=1 to n do - begin - read(a); - s := s*x + a; - end; - - writeln('Значение многочлена в точке ',x,' равно ',s); -end. \ No newline at end of file diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/06_ForWhileRepeat/repeat1.pas b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/06_ForWhileRepeat/repeat1.pas deleted file mode 100644 index 6621f57de..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/06_ForWhileRepeat/repeat1.pas +++ /dev/null @@ -1,12 +0,0 @@ -// Цикл repeat. Контроль ввода -var mark: integer; - -begin - repeat - writeln('Введите оценку (2..5): '); - readln(mark); - if (mark<2) or (mark>5) then - writeln('Оценка неверная. Повторите ввод'); - until (mark>=2) and (mark<=5); - writeln('Вы ввели оценку ',mark); -end. \ No newline at end of file diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/06_ForWhileRepeat/repeat2.pas b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/06_ForWhileRepeat/repeat2.pas deleted file mode 100644 index da416f808..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/06_ForWhileRepeat/repeat2.pas +++ /dev/null @@ -1,13 +0,0 @@ -// Цикл repeat. Алгоритм Евклида нахождения наибольшего общего делителя -var A,B: integer; - -begin - write('Введите два целых числа: '); - readln(A,B); - repeat - var C := A mod B; - A := B; - B := C; - until B=0; - write('Наибольший общий делитель = ',A); -end. \ No newline at end of file diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/06_ForWhileRepeat/while1.pas b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/06_ForWhileRepeat/while1.pas deleted file mode 100644 index bf8f62300..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/06_ForWhileRepeat/while1.pas +++ /dev/null @@ -1,12 +0,0 @@ -// Цикл while. Вывод чисел с шагом 3 -const n = 60; - -begin - writeln('Числа от 1 до ',n,', кратные 3'); - var x := 3; - while x<=n do - begin - write(x,' '); - x += 3; - end; -end. \ No newline at end of file diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/06_ForWhileRepeat/while2.pas b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/06_ForWhileRepeat/while2.pas deleted file mode 100644 index ff9996415..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/06_ForWhileRepeat/while2.pas +++ /dev/null @@ -1,12 +0,0 @@ -// Цикл while. Степени 2 -begin - writeln('Степени 2'); - var i := 1; - var p := 1; - while i<32 do - begin - writeln(i:2,p:12); - i += 1; - p *= 2; - end; -end. \ No newline at end of file diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/06_ForWhileRepeat/while3.pas b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/06_ForWhileRepeat/while3.pas deleted file mode 100644 index 35345d005..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/06_ForWhileRepeat/while3.pas +++ /dev/null @@ -1,18 +0,0 @@ -// ÷икл while. —умма цифр положительного числа -var m: integer; - -begin - writeln('¬ведите положительное число: '); - read(m); - write('÷ифры числа в обратном пор¤дке: '); - var s := 0; - while m>0 do - begin - var digit := m mod 10; - write(digit,' '); - s += digit; - m := m div 10; - end; - writeln; - writeln('—умма цифр = ',s); -end. \ No newline at end of file diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/07_CharString/Char1.pas b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/07_CharString/Char1.pas deleted file mode 100644 index 0093f5157..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/07_CharString/Char1.pas +++ /dev/null @@ -1,13 +0,0 @@ -// Стандартные функции Ord Chr -var - i: integer; - c: char; - -begin - c := 'z'; - i := Ord(c); - writelnFormat('Код символа {0} в кодировке Windows равен {1}',c,i); - i := 193; - c := Chr(i); - writelnFormat('Символ с кодом {0} в кодировке Windows - это {1}',i,c); -end. \ No newline at end of file diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/07_CharString/Char2.pas b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/07_CharString/Char2.pas deleted file mode 100644 index d89fd87a7..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/07_CharString/Char2.pas +++ /dev/null @@ -1,13 +0,0 @@ -// Стандартные функции OrdUnicode ChrUnicode -var - i: integer; - c: char; - -begin - c := 'Д'; - i := OrdUnicode(c); - writelnFormat('Код символа {0} в кодировке Unicode равен {1}',c,i); - i := 1046; - c := ChrUnicode(i); - writelnFormat('Символ с кодом {0} в кодировке Unicode - это {1}',i,c); -end. \ No newline at end of file diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/07_CharString/Char3.pas b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/07_CharString/Char3.pas deleted file mode 100644 index 25dd82795..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/07_CharString/Char3.pas +++ /dev/null @@ -1,9 +0,0 @@ -// Стандартные функции UpperCase LowerCase -var c: char; - -begin - c := 'д'; - writelnFormat('Символ {0} в верхнем регистре: {1}',c,UpperCase(c)); - c := 'F'; - writelnFormat('Символ {0} в нижнем регистре: {1}',c,LowerCase(c)); -end. \ No newline at end of file diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/07_CharString/CharTable.pas b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/07_CharString/CharTable.pas deleted file mode 100644 index 220cb62fa..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/07_CharString/CharTable.pas +++ /dev/null @@ -1,8 +0,0 @@ -// Таблица символов и их кодов -begin - for var i:=32 to 255 do - begin - write(i:4,chr(i):2,' '); - if i mod 8 = 7 then writeln; - end; -end. diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/07_CharString/String1.pas b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/07_CharString/String1.pas deleted file mode 100644 index d6785340d..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/07_CharString/String1.pas +++ /dev/null @@ -1,12 +0,0 @@ -// Строки. Операция + и оператор +=. Доступ по индексу - -var s: string := 'Pascal'; - -begin - writeln(s); - s := s + '.'; - writeln(s); - s += 'NET'; - writeln(s); - writeln(s[1],' ',s[2],' ',s[3],' ',s[4],' ',s[5],' ',s[6]); -end. \ No newline at end of file diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/07_CharString/String2.pas b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/07_CharString/String2.pas deleted file mode 100644 index a2a26c791..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/07_CharString/String2.pas +++ /dev/null @@ -1,14 +0,0 @@ -// Строки. Процедура SetLength, функция Length и свойство Length - -var s: string; - -begin - writeln('Length(s) = ',Length(s)); - SetLength(s,3); - s[1] := 'N'; - s[2] := 'E'; - s[3] := 'T'; - writeln(s,' Length(s) = ',Length(s)); - for var i:= 1 to s.Length do - write(s[i],' '); -end. \ No newline at end of file diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/07_CharString/String3.pas b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/07_CharString/String3.pas deleted file mode 100644 index 5a2a97b3e..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/07_CharString/String3.pas +++ /dev/null @@ -1,12 +0,0 @@ -// Строки. Строка может иметь произвольную длину -var s: string; - -begin - s := 'abcdefghijklmnopqrstuvwxyz'; - s := s + Uppercase(s); - s += s; - s += s; - s += s; - writeln('Длина строки = ',s.Length); - writeln('Cтрока: ',s); -end. \ No newline at end of file diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/07_CharString/String4.pas b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/07_CharString/String4.pas deleted file mode 100644 index 7c765fc61..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/07_CharString/String4.pas +++ /dev/null @@ -1,12 +0,0 @@ -// Строки фиксированной длины. Длина не может быть больше 255 -var - s: string[9]; - s1: shortstring; // shortstring = string[255] - slong: string; - -begin - slong := 'PascalABC.NET'; - writeln('Cтрока произвольной длины: ',slong); - s := slong; - writeln('Cтрока фиксированной длины обрезается: ',s); -end. \ No newline at end of file diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/07_CharString/String5.pas b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/07_CharString/String5.pas deleted file mode 100644 index e4e667578..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/07_CharString/String5.pas +++ /dev/null @@ -1,18 +0,0 @@ -// Строки. Стандартные подпрограммы работы со строками -var - s: string := ' Pascal__NET '; - s1: string := 'NET'; - -begin - writeln('Исходная строка: ''',s,''''); - s := Trim(s); - writeln('После вызова функции Trim: ''',s,''''); - var p := Pos(s1,s); - writelnFormat('Позиция подстроки ''{0}'' в строке ''{1}'' равна {2}',s1,s,p); - Delete(s,7,2); - writeln('После удаления символов __: ',s); - Insert('ABC.',s,7); - writeln('После вставки подстроки ''ABC.'': ',s); - writeln('Первая часть строки: ',Copy(s,1,9)); - writeln('Последняя часть строки: ',Copy(s,11,3)); -end. \ No newline at end of file diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/07_CharString/String6.pas b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/07_CharString/String6.pas deleted file mode 100644 index 609eb8234..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/07_CharString/String6.pas +++ /dev/null @@ -1,18 +0,0 @@ -// Строки. Методы класса string -var - s: string := ' Pascal__NET '; - s1: string := 'NET'; - -begin - writeln('Исходная строка: ''',s,''''); - s := s.Trim; - writeln('После вызова s.Trim: ''',s,''''); - var p := s.IndexOf(s1); // Индексация - с нуля - writelnFormat('Позиция подстроки ''{0}'' в строке ''{1}'' равна {2}',s1,s,p); - s := s.Remove(6,2); - writeln('После удаления символов __: ',s); - s := s.Insert(6,'ABC.'); - writeln('После вставки подстроки ''ABC.'': ',s); - writeln('Первая часть строки: ',s.Substring(0,9)); - writeln('Последняя часть строки: ',s.Substring(10,3)); -end. \ No newline at end of file diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/07_CharString/StringInteger1.pas b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/07_CharString/StringInteger1.pas deleted file mode 100644 index 484f91218..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/07_CharString/StringInteger1.pas +++ /dev/null @@ -1,16 +0,0 @@ -// Преобразование целое <-> строка -var - s: string; - i: integer; - -begin - // Преобразование целого в строку - i := 234; - s := IntToStr(i); - writelnFormat('Целое: {0}. После преобразования к строке: ''{1}''',i,s); - - // Преобразование строки в целое (может произойти исключение) - s := '567'; - i := StrToInt(s); - writelnFormat('Строка: ''{0}''. После преобразования к целому: {1}',s,i); -end. \ No newline at end of file diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/07_CharString/StringInteger2.pas b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/07_CharString/StringInteger2.pas deleted file mode 100644 index 5dfe155aa..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/07_CharString/StringInteger2.pas +++ /dev/null @@ -1,18 +0,0 @@ -// Преобразование целое <-> строка в старом стиле (Val и Str) -var - s: string; - i: integer; - -begin - // Преобразование целого в строку - i := 234; - Str(i,s); - writelnFormat('Целое: {0}. После преобразования к строке: ''{1}''',i,s); - - // Преобразование строки в целое - s := '567'; - var err: integer; - Val(s,i,err); - if err=0 then - writelnFormat('Строка: ''{0}''. После преобразования к целому: {1}',s,i); -end. \ No newline at end of file diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/07_CharString/StringInteger3.pas b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/07_CharString/StringInteger3.pas deleted file mode 100644 index ce86a50a3..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/07_CharString/StringInteger3.pas +++ /dev/null @@ -1,16 +0,0 @@ -// Преобразование целое <-> строка в новом стиле -var - s: string; - i: integer; - -begin - // Преобразование целого в строку - i := 234; - s := i.ToString; - writelnFormat('Целое: {0}. После преобразования к строке: ''{1}''',i,s); - - // Преобразование строки в целое - s := '567'; - if integer.TryParse(s,i) then - writelnFormat('Строка: ''{0}''. После преобразования к целому: {1}',s,i); -end. \ No newline at end of file diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/07_CharString/StringReal1.pas b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/07_CharString/StringReal1.pas deleted file mode 100644 index 4b1037b65..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/07_CharString/StringReal1.pas +++ /dev/null @@ -1,16 +0,0 @@ -// Преобразование вещественное <-> строка -var - s: string; - r: real; - -begin - // Преобразование целого в строку - r := 3.1415; - s := FloatToStr(r); - writelnFormat('Целое: {0}. После преобразования к строке: ''{1}''',r,s); - - // Преобразование строки в целое (может произойти исключение) - s := '3.1415'; - r := StrToFloat(s); - writelnFormat('Строка: ''{0}''. После преобразования к целому: {1}',s,r); -end. \ No newline at end of file diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/07_CharString/UpLowCase.pas b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/07_CharString/UpLowCase.pas deleted file mode 100644 index 2c7303586..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/07_CharString/UpLowCase.pas +++ /dev/null @@ -1,22 +0,0 @@ -// Использование стандартных функций UpperCase, LowerCase -var c: char; - -begin - for c:='a' to 'z' do - write(UpperCase(c)); - writeln; - for c:='A' to 'Z' do - write(LowerCase(c)); - writeln; - for c:='А' to 'Я' do - write(UpperCase(c)); - writeln; - for c:='а' to 'я' do - write(LowerCase(c)); - writeln; - var s := 'Папа у Васи силён в математике'; - s := UpperCase(s); - writeln(s); - s := LowerCase(s); - writeln(s); -end. diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/08_ProcFunc/Fun1.pas b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/08_ProcFunc/Fun1.pas deleted file mode 100644 index 9aeffb0e6..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/08_ProcFunc/Fun1.pas +++ /dev/null @@ -1,22 +0,0 @@ -// Определение функции. Вывод таблицы ее значений - -function MyFun(x: real): real; -begin - Result := x*sin(x); -end; - -const - a = 0.0; - b = 2*Pi; - n = 10; - -begin - var h := (b-a)/n; - var x := a; - writeln('Таблица значений функции MyFun:'); - for var i := 0 to n do - begin - writeln(x:5:2,MyFun(x):10:4); - x += h; - end; -end. \ No newline at end of file diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/08_ProcFunc/Fun2.pas b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/08_ProcFunc/Fun2.pas deleted file mode 100644 index 4994822e4..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/08_ProcFunc/Fun2.pas +++ /dev/null @@ -1,17 +0,0 @@ -// Функция Power - -function Power(x: real; n: integer): real; -begin - Result := 1; - for var i:=1 to n do - Result *= x; -end; - -var - x: real; - n: integer; - -begin - x := 2; n := 5; - writelnFormat('{0} в степени {1} = {2}',x,n,Power(x,n)); -end. \ No newline at end of file diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/08_ProcFunc/Proc1.pas b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/08_ProcFunc/Proc1.pas deleted file mode 100644 index 95f40b8a0..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/08_ProcFunc/Proc1.pas +++ /dev/null @@ -1,17 +0,0 @@ -// Параметры процедур - -procedure Operations(a,b: integer); -begin - writeln(a,' + ',b,' = ',a+b); - writeln(a,' - ',b,' = ',a-b); - writeln(a,' * ',b,' = ',a*b); - writeln(a,' / ',b,' = ',a/b); - writeln(a,' div ',b,' = ',a div b); - writeln(a,' mod ',b,' = ',a mod b); -end; - -begin - Operations(5,3); - writeln; - Operations(7,4); -end. \ No newline at end of file diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/08_ProcFunc/Proc2.pas b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/08_ProcFunc/Proc2.pas deleted file mode 100644 index 498b595b6..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/08_ProcFunc/Proc2.pas +++ /dev/null @@ -1,22 +0,0 @@ -// Параметры-переменные - -procedure DivMod(a,b: integer; var d,m: integer); -begin - d := a div b; - m := a mod b; -end; - -var - a,b: integer; - d,m: integer; - -begin - a := 7; - b := 3; - DivMod(a,b,d,m); - writelnFormat('{0} div {1} = {2}; {0} mod {1} = {3}',a,b,a div b,a mod b); - a := 23; - b := 5; - DivMod(a,b,d,m); - writelnFormat('{0} div {1} = {2}; {0} mod {1} = {3}',a,b,a div b,a mod b); -end. \ No newline at end of file diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/08_ProcFunc/Proc3.pas b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/08_ProcFunc/Proc3.pas deleted file mode 100644 index ccbdb03a0..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/08_ProcFunc/Proc3.pas +++ /dev/null @@ -1,26 +0,0 @@ -// Упаковка параметров в запись -uses GraphABC; - -type - Point = record - x,y: integer; - constructor (xx,yy: integer); - begin - x := xx; - y := yy; - end; - end; - -procedure Line(p1,p2: Point); -begin - GraphABC.Line(p1.x,p1.y,p2.x,p2.y); -end; - -begin - var p1 := new Point(10,10); - var p2 := new Point(10,210); - var p3 := new Point(210,10); - Line(p1,p2); - Line(p2,p3); - Line(p3,p1); -end. \ No newline at end of file diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/09_Arrays/DynArr1.pas b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/09_Arrays/DynArr1.pas deleted file mode 100644 index 1a683cae4..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/09_Arrays/DynArr1.pas +++ /dev/null @@ -1,14 +0,0 @@ -// Использование динамического массива. -// Процедура SetLength выделения памяти под динамический массив -// Оператор foreach (массив доступен только на чтение) -var a: array of integer; - -begin - var n := 20; - SetLength(a,n); - for var i:=0 to a.Length-1 do - a[i] := Random(1,9); - writeln('Содержимое случайного динамического массива целых: '); - foreach x: integer in a do - write(x,' '); -end. \ No newline at end of file diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/09_Arrays/DynArr2.pas b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/09_Arrays/DynArr2.pas deleted file mode 100644 index b5e877dc4..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/09_Arrays/DynArr2.pas +++ /dev/null @@ -1,17 +0,0 @@ -// Использование динамического массива. -var a: array of integer; - -begin - writeln('При присваивании динамических массивов две переменные начинают указывать на одну память:'); - var n := 20; - a := new integer[n]; // Другой способ выделения памяти - for var i:=0 to a.Length-1 do - a[i] := i; - - writeln('До присваивания b[5]: a[5]=',a[5]); - - var b: array of integer; - b := a; - b[5] := 666; - writeln('После присваивания b[5]: a[5]=',a[5]); -end. \ No newline at end of file diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/09_Arrays/DynArr3.pas b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/09_Arrays/DynArr3.pas deleted file mode 100644 index 0f2acfb79..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/09_Arrays/DynArr3.pas +++ /dev/null @@ -1,17 +0,0 @@ -// Использование динамического массива. -var a: array of integer; - -begin - writeln('SetLength при повторном вызове не портит старые элементы:'); - SetLength(a,5); - for var i:=0 to a.Length-1 do - a[i] := i+1; - for var i:=0 to a.Length-1 do - write(a[i],' '); - writeln; - - SetLength(a,10); - for var i:=0 to a.Length-1 do - write(a[i],' '); - writeln; -end. \ No newline at end of file diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/09_Arrays/DynArr4.pas b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/09_Arrays/DynArr4.pas deleted file mode 100644 index 47fb8c953..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/09_Arrays/DynArr4.pas +++ /dev/null @@ -1,23 +0,0 @@ -// Передача динамического массива в качестве параметра - -procedure WriteArr(a: array of integer); // var указывать не нужно, т.к. динамический массив является ссылкой на реальный объект -begin - foreach x: integer in a do - write(x,' '); - writeln; -end; - -procedure CreateRandomArr(var a: array of integer; n: integer); // var указывать нужно, т.к. в процедуре создается новый динамический массив -begin - a := new integer[n]; - for var i:=0 to a.Length-1 do - a[i] := Random(10); -end; - -var a: array of integer; - -begin - writeln('Случайный целый массив: '); - CreateRandomArr(a,30); - WriteArr(a); -end. \ No newline at end of file diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/09_Arrays/DynArrErr1.pas b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/09_Arrays/DynArrErr1.pas deleted file mode 100644 index f8e2d5104..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/09_Arrays/DynArrErr1.pas +++ /dev/null @@ -1,6 +0,0 @@ -// Ошибка невыделения памяти для динамического массива -var a: array of integer; - -begin - a[0] := 666; -end. \ No newline at end of file diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/09_Arrays/DynArrErr2.pas b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/09_Arrays/DynArrErr2.pas deleted file mode 100644 index cd1da4b02..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/09_Arrays/DynArrErr2.pas +++ /dev/null @@ -1,7 +0,0 @@ -// Ошибка выхода за границы диапазона для динамического массива -var a: array of integer; - -begin - SetLength(a,10); - a[10] := 666; -end. \ No newline at end of file diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/09_Arrays/SortByChoice.pas b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/09_Arrays/SortByChoice.pas deleted file mode 100644 index a0f618c87..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/09_Arrays/SortByChoice.pas +++ /dev/null @@ -1,42 +0,0 @@ -// Сортировка выбором -procedure SortByChoice(a: array of real); -begin - for var i:=0 to a.Length-2 do - begin - var min := a[i]; - var ind := i; - for var j:=i+1 to a.Length-1 do - if a[j]0 then - writeln('Индекс первого элемента 7 равен ', ind) - else writeln('Элемент 7 отсутствует'); -end. \ No newline at end of file diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/09_Units/UnitInitFin/MainInitFinDemo.pas b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/09_Units/UnitInitFin/MainInitFinDemo.pas deleted file mode 100644 index fb2a6d4f2..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/09_Units/UnitInitFin/MainInitFinDemo.pas +++ /dev/null @@ -1,7 +0,0 @@ -// Демонстрация секций инициализации и финализации модулей -// Откройте модуль MyUnit, нажав на имени модуля правой мышью и выбрав пункт "Перейти к определению" -uses MyUnit; - -begin - writeln('Основная программа') -end. diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/09_Units/UnitInitFin/MyUnit.pas b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/09_Units/UnitInitFin/MyUnit.pas deleted file mode 100644 index 1887dbc7f..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/09_Units/UnitInitFin/MyUnit.pas +++ /dev/null @@ -1,7 +0,0 @@ -unit MyUnit; - -initialization - writeln('Секция инициализации. Выполняется до начала основной программы') -finalization - writeln('Секция финализации. Выполняется после окончания основной программы') -end. diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/09_Units/UnitNames/MainSameNames.pas b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/09_Units/UnitNames/MainSameNames.pas deleted file mode 100644 index 4f881ad42..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/09_Units/UnitNames/MainSameNames.pas +++ /dev/null @@ -1,7 +0,0 @@ -// Алгоритм поиска имен в модулях -uses MyA,MyB; // Имена вначале ищутся в основной программе, а затем в модулях в порядке справа налево - -begin - p; // Вызывается MyB.p - MyA.p; // Если надо вызвать MyA.p, следует использовать имя p, уточненное именем модуля -end. diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/09_Units/UnitNames/MyA.pas b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/09_Units/UnitNames/MyA.pas deleted file mode 100644 index 7c8a67ab7..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/09_Units/UnitNames/MyA.pas +++ /dev/null @@ -1,10 +0,0 @@ -unit MyA; - -procedure p; -begin - writeln('MyA.p'); -end; - -begin - -end. diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/09_Units/UnitNames/MyB.pas b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/09_Units/UnitNames/MyB.pas deleted file mode 100644 index a33cebbf7..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/09_Units/UnitNames/MyB.pas +++ /dev/null @@ -1,10 +0,0 @@ -unit MyB; - -procedure p; -begin - writeln('MyB.p'); -end; - -begin - -end. diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/09_Units/UnitNames/MyB.pcu b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/09_Units/UnitNames/MyB.pcu deleted file mode 100644 index 00595cfe5107ae223235336272a9c236caf44531..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 401 zcmWG=4z*{10Y-M;N+-R7#A1*DBM|eec;;o6WG3chRwb5X=I2#_RWbodf%y2K)RfGk z)Z`LRf8YF+RIUI=C+FbG;*!){kUTPQ0dgXM7@`{@!wj?uWCI%zgJ=#Q76yvNXXX~< zq~@mPm4Gc&0m;EICy-4E0GT6+=_!bjA~;R{j|Pq-snh_mLFU?`Df-V0l>pJKPz+KC NVuQrc)dPjV005a[i] then - Result := a[i]; -end; - -end. diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/09_Units/UnitStructure/MyUnit.pcu b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/09_Units/UnitStructure/MyUnit.pcu deleted file mode 100644 index f6ea244705990d9f2a1703768444d873b8a41349..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3682 zcmbVOQBNdA5bnNZ7j8W`7f+O+xWr8)7hHE?4~`HHk42Q=35s}+WPm=Lb9Qz!J9`R= z5BJ~?(8R>V#Gl}^Kf)j2gYm%!|A7xanDhH;rgwK{0mUXg)m2^fRdrQ$FT3^qb!CUn zKRDg@-LTwp+Rs5awCA3gQij{Zo37{G4}$q2rL-D(7`UMU`<1Yn2d@8%ta8@t^F-50X1fR_x^f)@3bA7 z23gMSM*FB4c<$j`@e>oY-KM`fU#{?Pu2}DQVJ9%FzUhR4dqNPOTnTApbbl$Zx7 z*<6v{z~tciwr0*au476jbRPZ1)yOgBGM=Rdg}1fM@)X%#7IPX5;W+efaKiv^Vv^2c zGR^t-o1dFt%Re?>_+p#iZ?$5<*CH7EpyPS#PTL%#iJjA*Ak3(&OACT#)bNQ351u&Q z@7U35xE*mz*wZSRux~{lUjNU4t>h}o(Nl0Yk-|*+P}d}Ao|`JS&QqZV!vh@kB)?S7 z=rkBxdMYkWoJ<<8WLr+)G{l-XH0I#m;6TwtXlV%zGG&WK^OYgbJPNyLE7`z3`LxGh z4c#F+&w*&P8W+#_#2^{^8yu;=diEngc$gV^XQU^kx=~TjPrzXI=!Ynp9~qM<2h+*U zBjvNgOe{*~RS8Ru5lo6nM=|v@>=w0HeFy$^OwuZ*lC}q(z_Cr@O;7PA! zzyn-tkWMQui&B#|A5wbl=(sd$Mf=?zfL@e4NuY4?2bqu;hO~hB5Qze0RM&n;CjGxb zz7Ru_vSG%NXh2Hsqplw=1y2s}>n8C<*Kj3{{Bk$l$^({#V!lWj{jV&~1!IxvVlqcn{-uGZjz1w!Gz zIk#}#Sfp@oY5upz7m8UVox~Jep4AG{=}+^6alA(u3|5;+q->snO5TEyl_O;gd?Cq` z($MZ(9-^p{I9=izmH&VQ$NtM6JG#Ym`YI-|NZApI2AGC`HL*0&02HzTEG0^!w9CM+ zWf8d5ur#4H11)I)?)E!NH30R_2$^hvt~k*El&0}Y1^mL=J3o+-#0~DoBz5Tz_bPTp z90-l5NLecN8Yb&l#1sKTWZJAC-8*SMeWZboS(EtEX0N~n`-YVMXJVd|?(M$iAyR8Q zm3#6lH}JmI{sdOnil do - begin - write(p^.data,' '); - p := p^.next; - end; - - // Разрушение односвязного списка - p := first; - while p<>nil do - begin - var p1 := p; - p := p^.next; - Dispose(p1); - end; -end. \ No newline at end of file diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/13_Pointers/ProcPointer1.pas b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/13_Pointers/ProcPointer1.pas deleted file mode 100644 index 2d54f9fb4..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/13_Pointers/ProcPointer1.pas +++ /dev/null @@ -1,21 +0,0 @@ -// Процедурные переменные - -function add(a,b: integer): integer; -begin - Result := a + b; -end; - -function mult(a,b: integer): integer; -begin - Result := a * b; -end; - -var p: function (a,b: integer): integer; - - -begin - p := add; - writeln('Сумма 2 и 3 равна ',p(2,3)); - p := mult; - writeln('Произведение 2 и 3 равно ',p(2,3)); -end. \ No newline at end of file diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/13_Pointers/ProcPointer2.pas b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/13_Pointers/ProcPointer2.pas deleted file mode 100644 index 2ba35543b..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/13_Pointers/ProcPointer2.pas +++ /dev/null @@ -1,27 +0,0 @@ -// Процедурная переменная как параметр -procedure for_each(a: array of real; p: procedure(var r: real)); -begin - for var i := 0 to a.Length-1 do - p(a[i]); -end; - -procedure mult2(var r: real); -begin - r := 2*r -end; - -procedure print(var r: real); -begin - write(r,' '); -end; - -var a: array of real := (1,2,3,6,7); - -begin - writeln('Содержимое массива: '); - for_each(a,print); - writeln; - for_each(a,mult2); - writeln('Содержимое массива после умножения его элеметов на 2: '); - for_each(a,print); -end. \ No newline at end of file diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/13_Pointers/Reference.pas b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/13_Pointers/Reference.pas deleted file mode 100644 index 5dd358cd0..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/13_Pointers/Reference.pas +++ /dev/null @@ -1,34 +0,0 @@ -// Использование ссылок вместо указателей для создания односвязного списка -type - Node = class - data: integer; - next: Node; - constructor (d: integer; n: Node); - begin - data := d; - next := n; - end; - end; - -// Переменная типа "класс" представляет собой ссылку на объект, выделяемый конструктором -var first: Node; - -begin - first := nil; - // Добавляем в начало односвязного списка - first := new Node(3,first); - first := new Node(7,first); - first := new Node(5,first); - - // Вывод односвязного списка. ^ отсутствуют - writeln('Содержимое односвязного списка (использование ссылок вместо указателей): '); - var p := first; - while p<>nil do - begin - write(p.data,' '); - p := p.next; - end; - - // Разрушение односвязного списка - first := nil; // Сборщик мусора соберет память, на которую никто больше не указывает -end. \ No newline at end of file diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/14_Records/Rec1.pas b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/14_Records/Rec1.pas deleted file mode 100644 index 5b6b049e9..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/14_Records/Rec1.pas +++ /dev/null @@ -1,35 +0,0 @@ -type - SexType = (Male, Female); - Person = record - Name: string; - Age, Weight: integer; - Sex: SexType; - end; - -procedure WritePerson(const p: Person); -begin - writelnFormat('Фамилия: {0} Пол: {1} Возраст: {2} Вес: {3}',p.Name,p.Sex,p.Age,p.Weight); -end; - -var - p: Person := (Name: 'Иванов'; Age: 20; Weight: 64; Sex: Male); - p1: Person; -begin - p1 := p; // Присваивание записей - var p2: Person; - p2.Name := 'Петрова'; - p2.Age := 18; - p2.Weight := 50; - p2.Sex := Female; - WritePerson(p2); - - var p3: Person; - with p3 do - begin - Name := 'Сидоров'; - Age := 24; - Weight := 80; - Sex := Male; - end; - WritePerson(p3); -end. \ No newline at end of file diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/14_Records/Rec2.pas b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/14_Records/Rec2.pas deleted file mode 100644 index e95d97a88..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/14_Records/Rec2.pas +++ /dev/null @@ -1,26 +0,0 @@ -// Иллюстрация конструкторов и методов в записях -// Если переопределен метод ToString, то он вызывается при выводе объекта этого типа процедурой writeln -type - SexType = (Male, Female); - Person = record - Name: string; - Age, Weight: integer; - Sex: SexType; - constructor (Name: string; Age, Weight: integer; Sex: SexType); - begin - Self.Name := Name; - Self.Age := Age; - Self.Sex := Sex; - Self.Weight := Weight; - end; - function ToString: string; override; - begin - Result := Format('Имя: {0} Пол: {1} Возраст: {2} Вес: {3}', Name, Sex, Age, Weight); - end; - end; - -var p: Person := new Person('Иванов',20,70,SexType.Male); - -begin - writeln(p); -end. diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/15_Classes/Inheritance1.pas b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/15_Classes/Inheritance1.pas deleted file mode 100644 index 94c4e7ccd..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/15_Classes/Inheritance1.pas +++ /dev/null @@ -1,66 +0,0 @@ -// Наследование. Полиморфизм и виртуальные функции -type - Person = class - private - name: string; - age: integer; - public - constructor (n: string; a: integer); - begin - name := n; age := a; - end; - procedure Print; virtual; // Виртуальная функция. Переопределяется в классах-потомках - begin - var s := GetType.ToString; - write('Тип: ',Copy(s,pos('.',s)+1,Length(s)):7,' Имя: ',name,' Возраст: ',age); - end; - procedure Println; - begin - Print; - writeln; - end; - end; - - Pupil = class(Person) // Pupil - наследник Person - private - clas: integer; - public - constructor (n: string; a,c: integer); - begin - inherited Create(n,a); // Вызов унаследованного конструктора - clas := c; - end; - procedure Print; override; - begin - inherited Print; - write(' Класс: ',clas); - end; - end; - - Teacher = class(Person) - private - predm: string; - public - constructor (n: string; a: integer; p: string); - begin - inherited Create(n,a); // Вызов унаследованного конструктора - predm := p; - end; - procedure Print; override; - begin - inherited Print; - write(' Предмет: ',predm); - end; - end; - -var a: array of Person := new Person[4]; // Полиморфный контейнер - контейнер объектов базового класса. Может содержать объекты производных классов - -begin - a[0] := new Pupil('Вова',11,5); - a[1] := new Teacher('Марья Ивановна',30,'Информатика'); - a[2] := new Person('Иванов',65); - a[3] := new Pupil('Вася',12,6); - - for var i:=0 to a.Length-1 do - a[i].Println; -end. \ No newline at end of file diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/15_Classes/PersonExternal.pas b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/15_Classes/PersonExternal.pas deleted file mode 100644 index 5d205a700..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/15_Classes/PersonExternal.pas +++ /dev/null @@ -1,30 +0,0 @@ -// Описание методов вне интерфейса класса -// Удобство: интерфейс лучше виден -// Если класс описан в модуле, то реализация методов помещается в секцию реализации модуля -type - Person = class - private - name: string; - age: integer; - public - constructor (n: string; a: integer); - procedure Print; - end; - -//----------------- Person ------------------- -constructor Person.Create(n: string; a: integer); -begin - name := n; age := a; -end; - -procedure Person.Print; -begin - writeln('Имя: ',name,' Возраст: ',age); -end; - -var p: Person; - -begin - p := new Person('Иванов',20); - p.Print; -end. \ No newline at end of file diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/15_Classes/PersonInternal.pas b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/15_Classes/PersonInternal.pas deleted file mode 100644 index e146f930e..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/15_Classes/PersonInternal.pas +++ /dev/null @@ -1,30 +0,0 @@ -// Описание методов внутри интерфейса класса -// Удобство: методы можно реализовывать сразу после объявления -// Неудобство: для больших классов интерфейс трудно читается -type - Person = class - private - // Поля класса, как правило, приватны. Доступ к ним - через методы и свойства - name: string; - age: integer; - public - // Конструктор неявно имеет имя Create - constructor (n: string; a: integer); - begin - name := n; age := a; - end; - procedure Print; - begin - writeln('Имя: ',name,' Возраст: ',age); - end; - end; - -var p,p1: Person; - -begin - p := new Person('Иванов',20); // Новый синтаксис вызова конструктора (рекомендуется) - p.Print; - p1 := Person.Create('Попов',19); // Старый синтаксис вызова конструктора (не рекомендуется) - p1.Print; - // Деструкторы отсутствуют, вместо них - автоматическая сборка мусора -end. \ No newline at end of file diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/15_Classes/Properties.pas b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/15_Classes/Properties.pas deleted file mode 100644 index aa6958bad..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/15_Classes/Properties.pas +++ /dev/null @@ -1,35 +0,0 @@ -// Свойства (properties) -type - /// Класс персоны - Person = class - private - nm: string; - ag: integer; - procedure SetAge(a: integer); // Процедура доступа к свойству располагается обычно в приватной секции - begin - if a<0 then // Перед установкой значения свойства мы можем сделать дополнительные проверки - a := 0; // и скорректировать значение свойства, либо сгенерировать исключение - ag := a; - end; - public - constructor (n: string; a: integer); - begin - nm := n; ag := a; - end; - /// Имя персоны - property Name: string read nm; // Свойство Name доступно только на чтение и возвращает значение поля nm - /// Возраст персоны - property Age: integer read ag write SetAge; - procedure Print; - begin - writeln('Имя: ',nm,' Возраст: ',ag); - end; - end; - -var p: Person := new Person('Иванов', 20); - -begin - writeln('Имя: ',p.Name); // Менять Name нельзя, доступ - только на чтение - p.Age := -1; // Попытка изменения возраста на отрицательное значение приводит к корректировке: возраст становится = 0 - writeln('Возраст: ',p.Age); -end. \ No newline at end of file diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/16_Exceptions/Try1.pas b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/16_Exceptions/Try1.pas deleted file mode 100644 index c879e8a2f..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/16_Exceptions/Try1.pas +++ /dev/null @@ -1,14 +0,0 @@ -// Простейшая обработка исключений. Ввод с ошибкой -var a: integer; - -begin - try - writeln('Введите число: '); - // При вводе попробуйте совершить ошибку :) - readln(a); - writeln('Число введено верно '); - except - writeln('Ошибка ввода'); - end; - writeln('Выполнение программы продолжено'); -end. diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/16_Exceptions/Try2.pas b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/16_Exceptions/Try2.pas deleted file mode 100644 index 4145b1fe0..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/16_Exceptions/Try2.pas +++ /dev/null @@ -1,15 +0,0 @@ -// Обработка нескольких исключений -var x: integer; - -begin - try - writeln('Введите число (1 - ошибка деления на 0): '); - readln(x); - x := 10 div (x-1); - except - on System.FormatException do - writeln('Ошибка ввода'); - on System.DivideByZeroException do - writeln('Деление на 0'); - end; -end. diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/16_Exceptions/Try3.pas b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/16_Exceptions/Try3.pas deleted file mode 100644 index 4fcc48113..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/16_Exceptions/Try3.pas +++ /dev/null @@ -1,15 +0,0 @@ -// Иллюстрация finally -// Секция finally выполняется независимо от того, произошло исключение или нет -var x: integer := 0; - -begin - try - if Random(2)=0 then - x := 10 div x; - writeln('Выполнение продолжается'); - finally - writeln('Сработала секция finally'); - end; - // Если возникает исключение, то этот оператор не выполняется - writeln('После секции finally'); -end. diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/16_Exceptions/Try4.pas b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/16_Exceptions/Try4.pas deleted file mode 100644 index 2f61a1b0b..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/16_Exceptions/Try4.pas +++ /dev/null @@ -1,11 +0,0 @@ -// Исключения. Генерация исключения -function f(x: integer): integer; -begin - if x=0 then - raise new System.Exception('Аргумент функции f не может быть равен 0'); - Result := 10 mod x; -end; - -begin - writeln(f(0)); -end. diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/17_Interfaces/Interf1.pas b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/17_Interfaces/Interf1.pas deleted file mode 100644 index d96590acc..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/17_Interfaces/Interf1.pas +++ /dev/null @@ -1,61 +0,0 @@ -// Интерфейсы. Интерфейс IComparer -uses System,System.Collections; - -type - Student = class - private - name: string; - age,course,group: integer; - public - constructor (n: string; a,c,g: integer); - begin - name := n; - age := a; - course := c; - group := g; - end; - function ToString: string; override; - begin - Result := Format('Имя: {0,9} Возраст: {1} Курс: {2} Группа: {3}',name,age,course,group); - end; - end; - - SortByName = class(IComparer) - public - function Compare(s1,s2: object): integer; - begin - Result := string.Compare(Student(s1).name,Student(s2).name); - end; - end; - - SortByAge = class(IComparer) - public - function Compare(s1,s2: object): integer; - begin - Result := Student(s1).age - Student(s2).age; - end; - end; - -procedure WriteArray(prompt: string; a: array of T); -begin - writeln(prompt); - foreach x: T in a do - writeln(x); - writeln; -end; - -var a: array of Student; - -begin - SetLength(a,5); - a[0] := new Student('Иванова',18,2,3); - a[1] := new Student('Козлов',19,3,10); - a[2] := new Student('Сидорова',22,5,1); - a[3] := new Student('Крикунов',17,1,2); - a[4] := new Student('Лихачев',25,4,8); - WriteArray('Исходный массив:',a); - &Array.Sort(a,new SortByName); - WriteArray('Сортировка по имени: ',a); - &Array.Sort(a,new SortByAge); - WriteArray('Сортировка по возрасту: ',a); -end. diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/17_Interfaces/Interf2.pas b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/17_Interfaces/Interf2.pas deleted file mode 100644 index 8dc63b9f7..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/17_Interfaces/Interf2.pas +++ /dev/null @@ -1,48 +0,0 @@ -// Интерфейсы. Интерфейс IComparer -uses System,System.Collections; - -type - Student = class - private - name: string; - age,course,group: integer; - public - constructor (n: string; a,c,g: integer); - begin - name := n; - age := a; - course := c; - group := g; - end; - function ToString: string; override; - begin - Result := Format('Имя: {0,9} Возраст: {1} Курс: {2} Группа: {3}',name,age,course,group); - end; - end; - -procedure WriteArray(prompt:string; a: array of T); -begin - writeln(prompt); - foreach x: T in a do - writeln(x); - writeln; -end; - -function IsKozlov(s: Student): boolean; -begin - Result := s.name = 'Козлов' -end; - -var a: array of Student; - -begin - SetLength(a,5); - a[0] := new Student('Иванова',18,2,3); - a[1] := new Student('Козлов',19,3,10); - a[2] := new Student('Сидорова',22,5,1); - a[3] := new Student('Крикунов',17,1,2); - a[4] := new Student('Лихачев',25,4,8); - WriteArray('Исходный массив:',a); - - writeln('Индекс Козлова = ',&Array.FindIndex(a,IsKozlov)); -end. diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/18_Dll/Main.pas b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/18_Dll/Main.pas deleted file mode 100644 index d5ff4f5c3..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/18_Dll/Main.pas +++ /dev/null @@ -1,12 +0,0 @@ -// Основная программа, использующая библиотеку MyLib.dll -// MyLib.pas должен быть предварительно откомпилирован -#reference 'MyLib.dll' - -var f: Frac; - -begin - writeln('Сумма чисел 2 и 3 равна ',add(2,3)); - writeln('MyPi = ',MyPi); - f := new Frac(2,3); - f.Print; -end. \ No newline at end of file diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/18_Dll/MyLib.dll b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/18_Dll/MyLib.dll deleted file mode 100644 index 91ebe6a3b0d5b2b064f840cd43799b41b1ef1214..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6656 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 diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/18_Dll/MyLib.pas b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/18_Dll/MyLib.pas deleted file mode 100644 index 89708ec46..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/18_Dll/MyLib.pas +++ /dev/null @@ -1,26 +0,0 @@ -// Откомпилируйте библиотеку, нажав Ctrl-F9. В папке должен появиться файл MyLib.dll - -library MyLib; - -const MyPi = 3.14; - -function add(a,b: integer): integer; -begin - Result := a + b; -end; - -type - Frac = record - num,denom: integer; - constructor (n,d: integer); - begin - num := n; - denom := d; - end; - procedure Print; - begin - writeln(num,'/',denom); - end; - end; - -end. \ No newline at end of file diff --git a/ReleaseGenerators/Samples/_SVN/Pas/Algorithms/Eratosphen.pas b/ReleaseGenerators/Samples/_SVN/Pas/Algorithms/Eratosphen.pas deleted file mode 100644 index 49a1cdb99..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/Algorithms/Eratosphen.pas +++ /dev/null @@ -1,26 +0,0 @@ -// "Решето Эратосфена" - вычисление простых чисел -const n = 50000; - -var primes: set of integer; - -begin - primes := [2..n]; - - for var i:=2 to round(sqrt(n)) do - begin - if not (i in primes) then - continue; - var x := 2*i; - while x<=n do - begin - Exclude(primes,x); - x += i; - end; - end; - - writeln('Простые числа < ',n,':'); - writeln(primes); - writeln; - writeln('Время вычисления: ',Milliseconds/1000); -end. - diff --git a/ReleaseGenerators/Samples/_SVN/Pas/Algorithms/MazeGen.pas b/ReleaseGenerators/Samples/_SVN/Pas/Algorithms/MazeGen.pas deleted file mode 100644 index 003aa4c1b..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/Algorithms/MazeGen.pas +++ /dev/null @@ -1,106 +0,0 @@ -// Программа генерации случайных лабиринтов -uses GraphABC; - -const - szw = 70; // размер лабиринта - szh = 50; - cellsz = 10; // размер ячейки - -type - point = record - x,y: integer; - end; - -var - maze: array [0..szw-1] of array [0..szh-1] of integer; - todo: array [0..szw*szh-1] of point; - todonum: integer; - -const - dx: array [0..3] of integer = (0, 0, -1, 1); - dy: array [0..3] of integer = (-1, 1, 0, 0); - -procedure Init; -var x,y,n,d: integer; -begin - for x:=0 to szw-1 do - for y:=0 to szh-1 do - if (x=0) or (x=szw-1) or (y=0) or (y=szh-1) then - maze[x][y]:=32 - else maze[x][y]:=63; - - x := Random(szw-2)+1; - y := Random(szh-2)+1; - -// Пометить клетку как принадлежащую лабиринту - maze[x][y]:= maze[x][y] and not 48; - -// Занести в список todo все ближайшие необработанные клетки - for var d:=0 to 3 do - if (maze[x + dx[d]][y + dy[d]] and 16) <> 0 then - begin - todo[todonum].x := x + dx[d]; - todo[todonum].y := y + dy[d]; - Inc(todonum); - maze[x + dx[d]][y + dy[d]] := maze[x + dx[d]][y + dy[d]] and not 16; - end; - - // Пока не обработаны все клетки - while todonum > 0 do - begin - // Выбрать из списка todo произвольную клетку - n := Random(todonum); - x := todo[n].x; - y := todo[n].y; - - // Удалить из списка обработанную клетку - Dec(todonum); - todo[n]:= todo[todonum]; - - // Выбрать направление, которое ведет к лабиринту - repeat - d:=Random (4); - until not ((maze[x + dx[d]][y + dy[d]] and 32) <> 0); - - // Присоединить выбранную клетку к лабиринту - maze[x][y] := maze[x][y] and not ((1 shl d) or 32); - maze[x + dx[d]][y + dy[d]] := maze[x + dx[d]][y + dy[d]] and not (1 shl (d xor 1)); - - // Занести в список todo все ближайшие необработанные клетки - for var d:=0 to 3 do - if (maze[x + dx[d]][y + dy[d]] and 16) <> 0 then - begin - todo[todonum].x := x + dx[d]; - todo[todonum].y := y + dy[d]; - Inc(todonum); - maze[x + dx[d]][y + dy[d]] := maze[x + dx[d]][y + dy[d]] and not 16; - end; - end; - - maze[1][1] := maze[1][1] and not 1; // начало лабиринта - в левом верхнем углу - maze[szw-2][szh-2] := maze[szw-2][szh-2] and not 2; // конец лабиринта - в правом нижнем углу -end; - -procedure Draw; -begin - for var x:=1 to szw-2 do - for var y:=1 to szh-2 do - begin - if ((maze[x][y] and 1) <> 0) then // верхняя стена - Line(x * cellsz, y * cellsz, x * cellsz + cellsz , y * cellsz); - if ((maze[x][y] and 2) <> 0) then // нижняя стена - Line(x * cellsz, y * cellsz + cellsz, x * cellsz + cellsz , y * cellsz + cellsz); - if ((maze[x][y] and 4) <> 0) then // левая стена - Line(x * cellsz, y * cellsz, x * cellsz, y * cellsz + cellsz ); - if ((maze[x][y] and 8) <> 0) then // правая стена - Line(x * cellsz + cellsz, y * cellsz, x * cellsz + cellsz, y * cellsz + cellsz); - end; -end; - -begin - Window.Title := 'Генерация лабиринта'; - SetWindowSize(szw*cellsz,szh*cellsz); - Init; - Draw; -end. - diff --git a/ReleaseGenerators/Samples/_SVN/Pas/Algorithms/Recursion/ESquares.pas b/ReleaseGenerators/Samples/_SVN/Pas/Algorithms/Recursion/ESquares.pas deleted file mode 100644 index ceb9752cd..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/Algorithms/Recursion/ESquares.pas +++ /dev/null @@ -1,27 +0,0 @@ -// E-квадраты. Демонстрация рекурсии -uses GraphABC; - -const mw = 2.9; - -procedure ESquares(n,x,y,w: integer); -begin - var w1 := round(w/mw); - var h := (w-2*w1) div 3; - Brush.Color := clRandom; - Rectangle(x,y,x+w,y+w); - if n>0 then - begin - Sleep(1); - ESquares(n-1,x+h,y+h,w1); - ESquares(n-1,x+w-h-w1,y+h,w1); - ESquares(n-1,x+h,y+w-h-w1,w1); - ESquares(n-1,x+w-h-w1,y+w-h-w1,w1); - end; -end; - -begin - Window.Title := 'Рекурсия: E-квадраты'; - SetWindowSize(750,530); - Pen.Color := clWhite; - ESquares(4,125,18,490); -end. diff --git a/ReleaseGenerators/Samples/_SVN/Pas/Algorithms/Recursion/Hanoi.pas b/ReleaseGenerators/Samples/_SVN/Pas/Algorithms/Recursion/Hanoi.pas deleted file mode 100644 index c315a89fa..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/Algorithms/Recursion/Hanoi.pas +++ /dev/null @@ -1,121 +0,0 @@ -// Ханойские башни -uses GraphABC; - -type - /// Тип диска - DiskType = record - /// Диаметр диска - Sz: integer; - /// Цвет диска - Color: GraphABC.Color; - end; - /// Тип массива дисков на стержне - DiskArr = array of DiskType; - -const - /// Количество дисков - CountDisks = 8; - /// Высота диска - DiskHeight = 12; - /// Приращение ширины диска - DiskWidthDelta = 12; - h = CountDisks * DiskWidthDelta * 2 + 20; - /// y-координата основания пирамид дисков - y0 = DiskHeight * CountDisks + 80; - hh = 30; - /// x-координата первого стержня - x1 = h div 2 + hh; - /// x-координата второго стержня - x2 = x1 + h; - /// x-координата третьего стержня - x3 = x2 + h; - /// Пауза, мс - delay = 50; - -var - /// Массив пирамид дисков - Tower: array [1..3] of DiskArr; - /// Массив количеств дисков в пирамидах - DisksInTower: array [1..3] of integer; - /// Номер хода - MoveNumber: integer; - -/// Рисование пирамиды -procedure DrawTower(a: DiskArr; n: integer; x0,y0: integer); -begin - Brush.Color := clBlack; - Rectangle(x0-5,y0,x0+5,y0-DiskHeight*CountDisks-10); - for var i:=0 to n-1 do - begin - Brush.Color := a[i].Color; - Rectangle(x0-a[i].sz*DiskWidthDelta,y0-DiskHeight*(i-1),x0+a[i].sz*DiskWidthDelta,y0-DiskHeight*i+1) - end; -end; - -/// Рисование всех пирамид и информационной строки -procedure DrawAll; -begin - DrawTower(Tower[1],DisksInTower[1],x1,y0); - DrawTower(Tower[2],DisksInTower[2],x2,y0); - DrawTower(Tower[3],DisksInTower[3],x3,y0); - Brush.Color := clWhite; - TextOut(20,20,'Число перемещений дисков = '+IntToStr(MoveNumber)); - Redraw; -end; - -/// Перемещение диска со стержня FromN на стержень ToN -procedure MoveDisk(FromN, ToN: integer); -begin - Inc(MoveNumber); - Inc(DisksInTower[ToN]); - Tower[ToN][DisksInTower[ToN]-1] := Tower[FromN][DisksInTower[FromN]-1]; - Dec(DisksInTower[FromN]); - Sleep(delay); - ClearWindow; - DrawAll; -end; - -/// Основная екурсивная процедура алгоритма "Ханойские башни" -procedure MoveTower(n: integer; FromN, ToN, WorkN: integer); -begin - if n=0 then exit; - MoveTower(n-1, FromN, WorkN, ToN); - MoveDisk(FromN, ToN); - MoveTower(n-1, WorkN, ToN, FromN); -end; - -/// Инициализация массивов -procedure InitTowers; -begin - SetLength(Tower[1],CountDisks); - SetLength(Tower[2],CountDisks); - SetLength(Tower[3],CountDisks); - DisksInTower[1] := CountDisks; - DisksInTower[2] := 0; - DisksInTower[3] := 0; - for var i:=0 to DisksInTower[1]-1 do - begin - Tower[1][i].Sz := DisksInTower[1]-i+1; - Tower[1][i].Color := clRandom; - end; -end; - -/// Инициализация окна -procedure InitWindow; -begin - SetWindowSize(x3+x1,y0+50); - CenterWindow; - Window.Title := 'Ханойские башни'; - Font.Size := 14; - Font.Name := 'Arial'; -end; - -begin - InitWindow; - InitTowers; - LockDrawing; - DrawAll; - MoveTower(CountDisks,1,3,2); -end. - - diff --git a/ReleaseGenerators/Samples/_SVN/Pas/Algorithms/Recursion/Knapsack.pas b/ReleaseGenerators/Samples/_SVN/Pas/Algorithms/Recursion/Knapsack.pas deleted file mode 100644 index 53993e66c..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/Algorithms/Recursion/Knapsack.pas +++ /dev/null @@ -1,57 +0,0 @@ -// Задача о ранце. В массиве B заданы веса предметов. -// Выдать все варианты полной комплектации ранца частью этих предметов -const Sz=100; - -type IntArr = array [1..Sz] of integer; - -procedure PrintArr(const A: IntArr; n: integer); -begin - for var i:=1 to n do - write(A[i],' '); - writeln; -end; - -procedure TrySolve(n: integer; const B: IntArr; nb: integer); -var - Subset: IntArr; - space: integer; - ns: integer; - - procedure TrySolve0(i: integer); - begin - if space=0 then - PrintArr(Subset,ns) - else if (space<0) or (i>nb) then - exit // отсечение - else // продолжение перебора всех подмножеств множества B - begin - TrySolve0(i+1); // попробовать не взять i-тый элемент - - ns += 1; - Subset[ns] := B[i]; - space := space - B[i]; - TrySolve0(i+1); // попробовать взять i-тый элемент - space := space + B[i]; - ns -= 1; - end; - end; - -begin - space:=n; - TrySolve0(1); -end; - -procedure FillArr(var B: IntArr; var n: integer); -begin - n:=5; // количество предметов - B[1]:=8; B[2]:=5; B[3]:=13; B[4]:=3; B[5]:=15; // веса предметов -end; - -var - B: IntArr; - nb: integer; - -begin - FillArr(B,nb); - TrySolve(23,B,5); -end. diff --git a/ReleaseGenerators/Samples/_SVN/Pas/Algorithms/Recursion/TreeDraw.pas b/ReleaseGenerators/Samples/_SVN/Pas/Algorithms/Recursion/TreeDraw.pas deleted file mode 100644 index 3251ca1dc..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/Algorithms/Recursion/TreeDraw.pas +++ /dev/null @@ -1,27 +0,0 @@ -// Рекурсивное рисование двоичного дерева -uses GraphABC; - -const - LevelHeight = 50; - Levels = 8; - delay = 10; - -procedure DrawTree(x,y,dx,level: integer); -// обход: левое поддерево, корень, правое -begin - if level>0 then - begin - DrawTree(x-dx,y+LevelHeight,dx div 2,level-1); - Line(x,y,x-dx,y+LevelHeight); - Line(x,y,x+dx,y+LevelHeight); - Sleep(delay); - DrawTree(x+dx,y+LevelHeight,dx div 2,level-1); - end; -end; - -begin - Window.Title := 'Рекурсивное рисование бинарного дерева'; - SetSmoothingOff; - SetWindowSize(800,30+Levels*LevelHeight); - DrawTree(WindowWidth div 2,10,WindowWidth div 5,Levels); -end. diff --git a/ReleaseGenerators/Samples/_SVN/Pas/Algorithms/Simple/SimpleNumbers.pas b/ReleaseGenerators/Samples/_SVN/Pas/Algorithms/Simple/SimpleNumbers.pas deleted file mode 100644 index bb0174db0..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/Algorithms/Simple/SimpleNumbers.pas +++ /dev/null @@ -1,21 +0,0 @@ -// Генерация больших простых чисел -begin - writeln('Большие простые числа: '); - var count := 0; - var beg := Random(1000000000)+2; - for var i:=beg to beg+5000 do - begin - var f := True; - var j := 2; - var r := round(sqrt(i)); - while f and (j<=r) do - if i mod j = 0 then f := false - else j += 1; - if f then - begin - write(i,' '); - Inc(count); - if count mod 5 = 0 then writeln; - end; - end; -end. diff --git a/ReleaseGenerators/Samples/_SVN/Pas/Algorithms/SortArrays/ArrayLib.pas b/ReleaseGenerators/Samples/_SVN/Pas/Algorithms/SortArrays/ArrayLib.pas deleted file mode 100644 index a06ade6a4..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/Algorithms/SortArrays/ArrayLib.pas +++ /dev/null @@ -1,33 +0,0 @@ -unit ArrayLib; - -/// Вывод массива -procedure WriteArray(a: array of T); -begin - for var i:=0 to a.Length-1 do - write(a[i],' '); - writeln; -end; - -procedure WriteArray(a: array of real); -begin - foreach x: real in a do - write(x:0:1,' '); - writeln; -end; - -/// Создание массива и заполнение его случайными числами -procedure CreateRandom(var a: array of integer; n: integer); -begin - a := new integer[n]; - for var i:=0 to n-1 do - a[i] := random(100); -end; - -procedure CreateRandom(var a: array of real; n: integer); -begin - a := new real[n]; - for var i:=0 to n-1 do - a[i] := random*10; -end; - -end. \ No newline at end of file diff --git a/ReleaseGenerators/Samples/_SVN/Pas/Algorithms/SortArrays/QuickSort.pas b/ReleaseGenerators/Samples/_SVN/Pas/Algorithms/SortArrays/QuickSort.pas deleted file mode 100644 index 9a778619a..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/Algorithms/SortArrays/QuickSort.pas +++ /dev/null @@ -1,55 +0,0 @@ -// Быстрая сортировка Ч. Хоара -uses ArrayLib; - -/// Быстрая сортировка -procedure QuickSort(a: array of integer); - -/// Разделение a[l]..a[r] на части a[l]..a[q] <= a[q+1]..a[r] - function Partition(l,r: integer): integer; - begin - var i := l - 1; - var j := r + 1; - var x := a[l]; - while True do - begin - repeat - Inc(i); - until a[i]>=x; - repeat - Dec(j); - until a[j]<=x; - if i=r then exit; - var j := Partition(l,r); - sort(l,j); - sort(j+1,r); - end; - -begin - sort(0,a.Length-1) -end; - -const n = 20; - -var a: array of integer; - -begin - CreateRandom(a,n); - writeln('До сортировки: '); - WriteArray(a); - QuickSort(a); - writeln('После сортировки: '); - WriteArray(a); -end. diff --git a/ReleaseGenerators/Samples/_SVN/Pas/Algorithms/SortArrays/SortByChoice.pas b/ReleaseGenerators/Samples/_SVN/Pas/Algorithms/SortArrays/SortByChoice.pas deleted file mode 100644 index ed67282aa..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/Algorithms/SortArrays/SortByChoice.pas +++ /dev/null @@ -1,37 +0,0 @@ -// Сортировка выбором -uses ArrayLib; - -procedure SortByChoice(a: array of real); -begin - for var i:=0 to a.Length-2 do - begin - var min := a[i]; - var ind := i; - for var j:=i+1 to a.Length-1 do - if a[j]i; - Swap(digits[i],digits[x]); - end; - if n mod 2=0 then - Swap(digits[1],digits[2]); // количество обменов должно быть четным -end; - -// Заполнить двумерный массив фишек. Вместо пустой ячейки - белая фишка с числом 0 -procedure Fill15ByDigitsArr; -begin - Swap(p[EmptyCellY,EmptyCellX],p[n,n]); // Переместить пустую фишку в правый нижний угол - EmptyCellX := n; - EmptyCellY := n; - var i := 1; - for var y:=1 to n do - for var x:=1 to n do - begin - if x*y=n*n then exit; - p[y,x].Number := digits[i]; - i += 1; - end; -end; - -// Перемешать массив фишек -procedure Mesh15; -begin - MeshDigitsArr; - Fill15ByDigitsArr; - MovesCount := 0; - EndOfGame := False; - StatusRect.Text := 'Количество ходов: '+IntToStr(MovesCount); - StatusRect.Color := RGB(200,200,255); -end; - -// Создать массив фишек -procedure Create15; -begin - EmptyCellX := n; - EmptyCellY := n; - for var x:=1 to n do - for var y:=1 to n do - begin - p[y,x] := new SquareABC(x0+(x-1)*(sz+zz),y0+(y-1)*(sz+zz),sz,clMoneyGreen); - p[y,x].BorderColor := clGreen; - p[y,x].BorderWidth := 2; - p[y,x].TextScale := 0.7; - end; - p[EmptyCellY,EmptyCellX].Color := clWhite; - p[EmptyCellY,EmptyCellX].BorderColor := clWhite; - FillDigitsArr; - MeshDigitsArr; - Fill15ByDigitsArr; -end; - -// Проверить, все ли фишки стоят на своих местах -function IsSolution: boolean; -var x,y,i: integer; -begin - Result:=True; - i:=1; - for y:=1 to n do - for x:=1 to n do - begin - if p[y,x].Number<>i then - begin - Result:=False; - break; - end; - Inc(i); - if i=n*n then i:=0; - end; -end; - -procedure MouseDown(x,y,mb: integer); -begin - if EndOfGame then // Если все фишки на своих местах, то не реагировать на мышь и ждать нажатия кнопки "Перемешать" - exit; - if ObjectUnderPoint(x,y)=nil then // Eсли мы щелкнули не на объекте, то не реагировать на мышь - exit; - var fx := (x-x0) div (sz+zz) + 1; // Вычислить координаты на доске для ячейки, на которой мы щелкнули мышью - var fy := (y-y0) div (sz+zz) + 1; - if (fx>n) or (fy>n) then - exit; - if Sosedi(fx,fy,EmptyCellX,EmptyCellY) then // Если ячейка соседствует с пустой, то поменять их местами - begin - Swap(p[EmptyCellY,EmptyCellX],p[fy,fx]); - EmptyCellX := fx; - EmptyCellY := fy; - Inc(MovesCount); - StatusRect.Text := 'Количество ходов: ' + IntToStr(MovesCount); - if IsSolution then - begin - StatusRect.Text := 'Победа! Сделано ходов: ' + IntToStr(MovesCount); - StatusRect.Color := RGB(255,200,200); - EndOfGame := True; - end - end; -end; - -begin - SetSmoothingOff; - Window.Title := 'Игра в 15'; - Window.IsFixedSize := True; - SetWindowSize(2*x0+(sz+zz)*n-zz,2*y0+(sz+zz)*n-zz+90); - - EndOfGame := False; - Create15; - - MeshButton := ButtonABC.Create((WindowWidth-200) div 2,2*y0+(sz+zz)*n-zz,200,'Перемешать',clLightGray); - MeshButton.OnClick := Mesh15; - StatusRect := new RectangleABC(0,WindowHeight-40,WindowWidth,40,RGB(200,200,255)); - StatusRect.TextVisible := True; - StatusRect.Text := 'Количество ходов: '+IntToStr(MovesCount); - StatusRect.BorderWidth := 2; - StatusRect.BorderColor := RGB(80,80,255); - - MovesCount := 0; - - OnMouseDown := MouseDown; -end. diff --git a/ReleaseGenerators/Samples/_SVN/Pas/Applications/Games/Animals/Animals.pas b/ReleaseGenerators/Samples/_SVN/Pas/Applications/Games/Animals/Animals.pas deleted file mode 100644 index b8eda8322..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/Applications/Games/Animals/Animals.pas +++ /dev/null @@ -1,96 +0,0 @@ -// Самообучающаяся игра "Угадай животное". -// Старайтесь на вопрос "Чем отличается" вводить самый общий ответ -// Например: "Чем отличается чиж от ежа" - "Умеет летать" -type - TNode = class - s: string; - left,right: TNode; - constructor(s: string); - begin - Self.s := s; - left := nil; - right := nil; - end; - end; - -var f: text; - -/// Сохранить дерево в файл -procedure SaveToFile(p: TNode); -begin - if p=nil then - begin - writeln(f,''); - exit - end; - writeln(f,p.s); - SaveToFile(p.left); - SaveToFile(p.right); -end; - -/// Загрузить дерево из файла -function LoadFromFile: TNode; -var - s: string; - p: TNode; -begin - readln(f,s); - if s='' then - begin - Result := nil; - exit - end; - p := new TNode(s); - p.left := LoadFromFile; - p.right := LoadFromFile; - Result := p; -end; - -var - p,p1,p2,root: TNode; - x: integer; - s,q: string; - -begin - writeln('Загадайте животное'); - assign(f, 'animals_data.txt'); - if not FileExists('animals_data.txt') then - root := new TNode('Собака') - else - begin - reset(f); - root := loadfromfile; - close(f); - end; - - p := root; - while p.left<>nil do - begin - write(p.s+'? (0 - Нет, 1 - Да): '); - readln(x); - if x=1 then - p := p.left - else - p := p.right - end; - - write('Это '+p.s+'? (0 - Нет, 1 - Да): '); - readln(x); - if x=1 then - writeln('Я угадала!') - else - begin - write('Я проиграла. Что это за животное? '); - readln(s); - write('Введите вопрос, отличающий это животное от '+p.s+': '); - readln(q); - p1 := new TNode(s); - p2 := new TNode(p.s); - p.s := q; - p.left := p1; - p.right := p2; - end; - Rewrite(f); - SaveToFile(root); - Close(f); -end. diff --git a/ReleaseGenerators/Samples/_SVN/Pas/Applications/Games/Animals/animals_data.txt b/ReleaseGenerators/Samples/_SVN/Pas/Applications/Games/Animals/animals_data.txt deleted file mode 100644 index f7ff8b724..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/Applications/Games/Animals/animals_data.txt +++ /dev/null @@ -1,147 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/ReleaseGenerators/Samples/_SVN/Pas/Applications/Games/Battle.pas b/ReleaseGenerators/Samples/_SVN/Pas/Applications/Games/Battle.pas deleted file mode 100644 index 8e7c03bc5..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/Applications/Games/Battle.pas +++ /dev/null @@ -1,318 +0,0 @@ -uses GraphABC; - -const types = 3; //число типов рыб минус 1 - rmax = 4; //радиус всех рыб - CanEat = rmax; //максимальное расстояние при поедании - eps = 0.00001; //необходимо при операциях с данными real - epsustupi = 0.1; //насколько значима иерархия среди хищников - strahkraj = 3; //во сколько раз жертвы боятся края меньше, чем хищников - ustupi = CanEat*10; //насколько значима иерархия среди хищников - BkColor = clBlack; //Фон - Height = 600; //Высота графического окна - Width = 780; //Ширина графического окна - xmin = 10; // - ymin = 10; //Минимальные и максимальные значения координат, - xmax = Width - 100; //которые могут принимать рыбы - ymax = Height - 140; // - -Type -fishtype = class //Описание одной стаи - c : color; - public - CanRazm, MaxKol, Kol, MaxLife, MinFood: integer; - //цвет, размножение, макс. кол-во, текущее кол-во, макс. жизнь, - //сколько хищнику нужно есть для размножения - Speed, See: real; //Нормальная скорость и зрение в пикселях - constructor create(ac:color; aCanRazm, aMaxKol, aMaxLife, aMinFood:integer; aSpeed, aSee: real); - begin - c:= ac; CanRazm:= aCanRazm; MaxKol:= aMaxKol; Kol:= 1; - MaxLife:= aMaxLife; MinFood:= aMinFood; Speed:= aSpeed; See:= aSee - end; - procedure ShowKol(y: integer); //отобразить текущее кол-во - var s: string; - begin - SetFontColor(c); - TextOut(xmax + 20, y, ' '); - s := IntToStr(kol); - TextOut(xmax + 20, y, s); - end; - end; - -var opisanie: array[0..types] of fishtype; //данные для всех стай - -Type -fish = class - x, y, r, dx0, dy0: real; //текущие координаты, радиус и предыдущий шаг - tip, life, razm, status, food: integer; - //razm - время с момента последнего размножения, - //status - состояние - спокойное или возбуждённое - next, prev: fish; //двусвязный циклический список - constructor Create(ax, ay, ar: real; atip: integer; aprev, anext: fish); - begin - x:= ax; y:= ay; r:= ar; tip:= atip; prev:= aprev; next:= anext; - life:= 0; razm:= 0; dx0:= random; dy0:= random; status:= 1; food:= 0; - end; - procedure show; - begin - SetPenColor(opisanie[tip].c); - circle(round(x), round(y), round(r)) - end; - procedure hide; - begin - SetPenColor(BkColor); - circle(round(x), round(y), round(r)) - end; - procedure Destroy; - begin - hide; - opisanie[tip].kol:= opisanie[tip].kol - 1; - opisanie[tip].ShowKol(tip*40 + 20); - end; - procedure moveto(dx, dy: real); - begin - hide; - x:= x + dx; y:= y + dy; - if x > xmax then x:= xmax; - if x < xmin then x:= xmin; - if y > ymax then y:= ymax; - if y < ymin then y:= ymin; - show - end; - - procedure MakeDeti(var mama, StartAkula, KonAkula, StartKilka, KonKilka : fish); - //произвести потомство - var d: fish; - begin - razm:= 0; - food:= 0; - d:= fish.create(x, y, r, tip, mama, next); - next.prev:= d; - next:= d; - if mama = KonAkula then KonAkula:= d; - if mama = KonKilka then KonKilka:= d; - opisanie[tip].kol:= opisanie[tip].kol + 1; - opisanie[tip].ShowKol(tip*40 + 20); - end; - - procedure step(var ribka, StartAkula, KonAkula, StartKilka, KonKilka : fish); - //Здесь алгоритмы для рыб - var - dx, dy, d, dx2, dy2, dmin: real; - t, trup, found: fish; - FoundOhot: boolean; - begin - status:= 1; //Нормальное состояние - dx:= 0; dy:= 0; - if tip > 0 then - begin //Начало алгоритма для жертв - t:= StartAkula; - if t<>nil then - repeat //Ищем всех хищников в поле видимости - d:= sqrt((x - t.x)*(x - t.x) + (y - t.y)*(y - t.y)); - if d < opisanie[tip].See then - begin - if d < eps then d:= eps; - dx2:= (x - t.x)/(d*d); - dy2:= (y - t.y)/(d*d); - dx:= dx + dx2; - dy:= dy + dy2; - status:= 2; //Возбуждённое состояние - end; - t:= t.next - until t = KonAkula.next; - //И обратим внимание на края: - if x - xmin < opisanie[tip].See then dx:= dx + 1/((x - xmin + eps)*strahkraj); - if xmax - x < opisanie[tip].See then dx:= dx + 1/((x - xmax - eps)*strahkraj); - if y - ymin < opisanie[tip].See then dy:= dy + 1/((y - ymin + eps)*strahkraj); - if ymax - y < opisanie[tip].See then dy:= dy + 1/((y - ymax - eps)*strahkraj); - d:= sqrt(dx*dx + dy*dy); - if d < eps then - begin - dx:= 2*status*random()*opisanie[tip].Speed - status*opisanie[tip].Speed; - dy:= 2*status*random()*opisanie[tip].Speed - status*opisanie[tip].Speed - end - else - begin - dx:= status*opisanie[tip].Speed*dx/d; - dy:= status*opisanie[tip].Speed*dy/d - end - end - else {tip = 0} - begin //Начало алгоритма для хищников - dmin:= 11000; - t:= StartAkula; - while t<>ribka do //Проверяем всех выше по иерархии - begin - - d:= sqrt((x - t.x)*(x - t.x) + (y - t.y)*(y - t.y)); - if (d < dmin) and (abs(dx0 - t.dx0) < epsustupi) and - (abs(dy0 - t.dy0) < epsustupi) then dmin:= d; - - t:= t.next - end; - FoundOhot:= dmin < ustupi; - dmin:= 11000; - found:= nil; - t:= StartKilka; - if (t<>nil) and (life > 100) and not FoundOhot then - repeat - - d:= sqrt((x - t.x)*(x - t.x) + (y - t.y)*(y - t.y)); - if d < dmin then - begin - dmin:= d; - found:= t //found - ближайшая жертва - end; - t:= t.next - until t = KonKilka.next; - if (found <> nil) and (dmin < opisanie[tip].See) then - begin - status:= 2; //Возбуждённое состояние - dx:= found.x - x; - dy:= found.y - y; - if dmin < CanEat + status*opisanie[tip].Speed then - begin //Поедание - found.next.prev:= found.prev; - found.prev.next:= found.next; - if (found = StartKilka) and (found = KonKilka) then - begin - //StartKilka:= nil; - //KonKilka:= nil - end; - if found = StartKilka then - StartKilka:= StartKilka.next; - if found = KonKilka then - KonKilka:= KonKilka.prev; - found.destroy; - found := nil; - food:= food + 1 - end - end - else - if (x <= xmin) or (x >= xmax) or (y <= ymin) or (y >= ymax) then - begin - dx:= 2*status*random()*opisanie[tip].Speed - status*opisanie[tip].Speed; - dy:= 2*status*random()*opisanie[tip].Speed - status*opisanie[tip].Speed - end - else - begin - dx:= dx0; dy:= dy0 //Повтор предыдущего шага - патрулирование - end; - d:= sqrt(dx*dx + dy*dy); - if d > eps then - begin - dx:= status*opisanie[tip].Speed*dx/d; - dy:= status*opisanie[tip].Speed*dy/d; - end - end; - //Начало алгоритма для всех рыб - moveto(dx, dy); - dx0:= dx; dy0:= dy; - life:= life + 1; razm:= razm + 1; - if opisanie[tip].Kol >= opisanie[tip].MaxKol then Razm:= 0; - if (razm > opisanie[tip].CanRazm) and (food >= opisanie[tip].minfood) then - MakeDeti(ribka, StartAkula, KonAkula, StartKilka, KonKilka); - if life > opisanie[tip].MaxLife then //Смерть от старости - begin - trup:= ribka; ribka:= ribka.prev; - trup.next.prev:= trup.prev; - trup.prev.next:= trup.next; - if trup = StartKilka then - StartKilka:= StartKilka.next; - if trup = KonKilka then - KonKilka:= KonKilka.prev; - if trup = StartAkula then - StartAkula:= StartAkula.next; - if trup = KonAkula then - KonAkula:= KonAkula.prev; - if trup = trup.next then ribka:= nil; - if trup <> nil then - trup.destroy; - trup := nil; - end - end; - - end; - -function getAllCount:integer; -var i,c:integer; -begin - c:=0; - for i:=0 to types do - c:=c+opisanie[i].Kol; - getAllCount:=c; -end; - -var i: integer; - p, q, StartAkula, StartKilka, KonAkula, KonKilka, tek: fish; - -begin - SetSmoothing(False); - SetWindowSize(Width, Height); - SetWindowLeft(200); - SetWindowTop(50); - SetWindowCaption('Битва за жизнь'); - SetFontSize(7); - SetFontName('Arial'); - SetBrushColor(BkColor); - FillRectangle(0, 0, Width, Height); - SetFontColor(clWhite); - TextOut(10, ymax + 20, 'Автор программы - Иванов С.О. e-mail: ssyy@yandex.ru'); - TextOut(10, ymax + 20+1*18, 'Программа моделирует поведение нескольких стай рыб. Справа - количества рыб в текущий'); - TextOut(10, ymax + 20+2*18, 'момент времени. Изменяя параметры в коде программы, можно влиять на ход битвы.'); - TextOut(10, ymax + 20+3*18, 'По умолчанию: красные - хищники, поедают любых рыб из других стай, не плодятся,'); - TextOut(10, ymax + 20+4*18, 'пока не поели; синие - жертвы, самые медленные, но быстрее всех плодятся; зелёные - жертвы,'); - TextOut(10, ymax + 20+5*18, 'быстрее синих, но плодятся медленнее; желтые - самые быстрые среди жертв, но желтых мало.'); - SetFontSize(12); - StartAkula:= nil; - StartKilka:= nil; - KonAkula:= nil; - KonKilka:= nil; - - //c - цвет. - //CanRazm - минимальное количество ходов отдельно взятой рыбы между двумя - // её последовательными размножениями. - //MaxKol - максимально допустимое количество рыб данного вида. - //Kol - количество рыб данного вида в текущий момент времени. - //MaxLife - максимальная продолжительность жизни. - // После того, как рыба сделает больше шагов, чем это число, она умирает. - //MinFood - минимальное количество съеденных жертв, необходимое для размножения - // (только для хищников; для жертв это количество принято за -1). - //Speed - нормальная скорость. Максимальная скорость рыбы в 2 раза больше этого числа. - //See - радиус обзора - как далеко видит рыба. - - //c, CanRazm, MaxKol, MaxLife, MinFood, Speed, See - opisanie[3]:= fishtype.create(clYellow, 300, 15, 1500, -1, 0.99, 50); - opisanie[2]:= fishtype.create(clGreen, 150, 50, 1500, -1, 0.9, 50); - opisanie[1]:= fishtype.create(clBlue, 30, 50, 500, -1, 0.7, 35); - opisanie[0]:= fishtype.create(clRed, 1000, 40, 5000, 1, 1, 500); - SetPenColor(clWhite); - rectangle(round(xmin - rmax - 1), round(ymin - rmax - 1), - round(xmax + rmax + 1), round(ymax + rmax + 1)); - //Теперь нужно построить первоначальный список - q:= fish.create(xmin + 10, ymax - 10, rmax, 0, nil, nil); - p:= fish.create(xmin + 10, ymin + 10, rmax, 1, q, q); - q.next:= p; q.prev:= p; - StartAkula:= q; KonAkula:= q; - StartKilka:= p; KonKilka:= p; - p:= fish.create(xmax - 10, ymin + 10, rmax, 2, KonKilka, StartAkula); - StartAkula.prev:= p; - KonKilka.next:= p; KonKilka:= p; - p:= fish.create(xmax - 10, ymax - 10, rmax, 3, KonKilka, StartAkula); - StartAkula.prev:= p; - KonKilka.next:= p; KonKilka:= p; - for i:= 0 to types do opisanie[i].ShowKol(i*40 + 20); - //И все ходят по очереди, пока хоть кто-то жив. - tek:= StartKilka; - //i:=0;c:=getallcount;LockDrawing; - repeat - tek:= tek.next; - tek.step(tek, StartAkula, KonAkula, StartKilka, KonKilka); - {i:=i+1; - if i>=c then begin - i:=0;c:=getallcount; - Redraw; - end;} - until (tek = nil); - -end. diff --git a/ReleaseGenerators/Samples/_SVN/Pas/Applications/Games/BookWorm/BookWormABCNET.pas b/ReleaseGenerators/Samples/_SVN/Pas/Applications/Games/BookWorm/BookWormABCNET.pas deleted file mode 100644 index 0ab555846..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/Applications/Games/BookWorm/BookWormABCNET.pas +++ /dev/null @@ -1,226 +0,0 @@ -uses GraphABC,ABCObjects,ABCButtons,Events; - -const -/// Примерная частота повторяемости букв - freqcharstr='аааааааааааааааааааааааааабббббввввввввггггдддддддееееееееееееееееееееежжззззииииииииииииииииииийккккккккккккккклллллллллллммммммнннннннннннннннннооооооооооооооооооооооооппппппппрррррррррррррррррссссссссссссстттттттттттттттууууууффххцццчччшшщыыьььььэюяяяя'; - -const - MaxWordLen = 12; - scorehits: array [1..MaxWordLen] of integer = (0,1,2,4,7,11,16,22,29,37,46,56); - -type - MySquareABC = class(SquareABC) end; - -var -/// Доска с буквами - MainBoard: ObjectBoardABC; -/// Доска высоты 1 для размещения слова - WordBoard: ObjectBoardABC; -/// Номер первого незанятого символа на доске WordBoard - cur: integer; -/// Количество ходов - moves: integer; -/// Очки - score: integer; -/// Прямоугольник для отображения информации - Status: RectangleABC; - -/// Существует ли такое слово (все слова хранятся в файле words.txt) -function WordExists(s: string): boolean; -var - f: text; - str: string; -begin - s := LowerCase(s); - Result := False; - assign(f,'words.txt'); - reset(f); - while not eof(f) do - begin - readln(f,str); - if s=str then - begin - Result := True; - break; - end; - end; - close(f); -end; - -procedure MyMouseDown(x,y,mb: integer); -begin -// Нажата левая мышь - if mb=1 then - begin - if cur>WordBoard.DimX then - exit; - var ob := ObjectUnderPoint(x,y); - if (ob is MySquareABC) and ob.Visible then - begin - var ob1 := WordBoard[cur,1]; - ob1.Visible := True; - ob1.Text := ob.Text; - Inc(cur); - ob.Visible := False; - var s := ''; - for var i:=1 to cur-1 do - s := s + WordBoard[i,1].Text; - if WordExists(s) then - WordBoard.Color := clYellow - else WordBoard.Color := clSkyBlue - end; - end - else -// Нажата правая мышь - begin - for var xx:=1 to cur-1 do - WordBoard[xx,1].Visible := False; - for var xx:=1 to MainBoard.DimX do - for var yy:=1 to MainBoard.DimY do - MainBoard[xx,yy].Visible:=True; - cur := 1; - WordBoard.Color := clSkyBlue - end; -end; - -/// Обработчик кнопки "Новая игра" -procedure BtNewClick; -begin - score := 0; - moves := 0; - Status.Text := 'Ходов: '+IntToStr(moves)+' Очков: '+IntToStr(score); - MyMouseDown(1,1,2); - for var xx:=1 to MainBoard.DimX do - for var yy:=1 to MainBoard.DimY do - MainBoard[xx,yy].Text := UpCase(freqcharstr[Random(255)+1]); -end; - -/// Обработчик кнопки "Сказать слово" -procedure BtWordClick; -begin - if WordBoard.Color<>clYellow then - exit; - Inc(score,scorehits[cur-1]); - Inc(moves); - for var xx:=1 to cur-1 do - WordBoard[xx,1].Visible:=False; - for var xx:=1 to MainBoard.DimX do - for var yy:=1 to MainBoard.DimY do - if not MainBoard[xx,yy].Visible then - begin - MainBoard[xx,yy].Visible:=True; - MainBoard[xx,yy].Text:=UpCase(freqcharstr[Random(255)+1]); - end; - cur := 1; - WordBoard.Color := clSkyBlue; - Status.Text := 'Ходов: '+IntToStr(moves)+' Очков: '+IntToStr(score); -end; - -/// Обработчик кнопки "Подсказка" -procedure BtPleaseClick; -var - f: text; - str,maxstr: string; - arr,work: array ['а'..'я'] of integer; - maxlen: integer; - - function CanConstructWord(s: string): boolean; - begin - work := arr; - Result := True; - for var i:=1 to Length(s) do - begin - Dec(work[s[i]]); - if work[s[i]]<0 then - begin - Result := False; - break; - end; - end; - end; - -begin // BtPleaseClick - maxlen := 0; - maxstr := ''; - for var c:='а' to 'я' do - arr[c]:=0; - - for var xx:=1 to MainBoard.DimX do - for var yy:=1 to MainBoard.DimY do - Inc(arr[LowCase(MainBoard[xx,yy].Text[1])]); - - assign(f,'words.txt'); - reset(f); - while not eof(f) do - begin - readln(f,str); - if CanConstructWord(str) and (Length(str)>maxlen) and (Length(str)<=MaxWordLen) then - begin - maxlen := Length(str); - maxstr := str; - end; - end; - close(f); - - writeln(maxstr); -end; - -procedure InitWindow; -begin - SetWindowSize(640,480); - Window.IsFixedSize := True; - Window.Title := 'Знай русские слова!'; - Brush.Color := clMoneyGreen; - FillRect(0,0,WindowWidth,WindowHeight); -end; - -procedure InitGameVars; -begin - cur := 1; - moves := 0; - score := 0; -end; - -procedure InitButtons; -begin - var btword := new ButtonABC(70,410,180,30,'Сказать слово',clGray); - var btnew := new ButtonABC(280,410,100,30,'Заново',clLightGray); - var btplease := new ButtonABC(410,410,160,30,'Подсказка',clGray); - -// Привязка обработчиков к кнопкам - btword.OnClick := BtWordClick; - btnew.OnClick := BtNewClick; - btplease.OnClick := BtPleaseClick; -end; - - -procedure InitInterface; -begin - Status := new RectangleABC(70,350,500,30,clSkyBlue); - Status.Text := 'Ходов: 0 Очков: 0'; - WordBoard := new ObjectBoardABC(20,40,MaxWordLen,1,50,50,clSkyBlue); - MainBoard := new ObjectBoardABC(220,120,4,4,50,50,clMoneyGreen); - MainBoard.BorderColor := clGreen; - //MainBoard.Bordered := False; - - for var x:=1 to WordBoard.DimX do - begin - WordBoard[x,1] := new SquareABC(0,0,WordBoard.CellSizeX-6,clWhite); - WordBoard[x,1].Visible := False; - end; - for var x:=1 to MainBoard.DimX do - for var y:=1 to MainBoard.DimY do - begin - MainBoard[x,y] := new MySquareABC(0,0,MainBoard.CellSizeX-6,clWhite); - MainBoard[x,y].Text := UpCase(freqcharstr[Random(freqcharstr.Length)+1]); - end; -end; - -begin - InitWindow; - InitGameVars; - InitInterface; - InitButtons; - - OnMouseDown := MyMouseDown; -end. \ No newline at end of file diff --git a/ReleaseGenerators/Samples/_SVN/Pas/Applications/Games/BookWorm/words.txt b/ReleaseGenerators/Samples/_SVN/Pas/Applications/Games/BookWorm/words.txt deleted file mode 100644 index 1f8de268b..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/Applications/Games/BookWorm/words.txt +++ /dev/null @@ -1,14842 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/ReleaseGenerators/Samples/_SVN/Pas/Applications/Games/DeleteByMouse.pas b/ReleaseGenerators/Samples/_SVN/Pas/Applications/Games/DeleteByMouse.pas deleted file mode 100644 index 77203faa2..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/Applications/Games/DeleteByMouse.pas +++ /dev/null @@ -1,56 +0,0 @@ -uses ABCObjects,GraphABC; - -const CountSquares = 20; - -var - /// Текущая цифра - CurrentDigit: integer; - /// Количество ошибок - Mistakes: integer; - /// Строка информации - StatusRect: RectangleABC; - -/// Вывод информационной строки -procedure DrawStatusText; -begin - if CurrentDigit<=CountSquares then - StatusRect.Text := 'Удалено квадратов: ' + IntToStr(CurrentDigit-1) + ' Ошибок: ' + IntToStr(Mistakes) - else StatusRect.Text := 'Игра окончена. Время: ' + IntToStr(Milliseconds div 1000) + ' с. Ошибок: ' + IntToStr(Mistakes); -end; - -/// Обработчик события мыши -procedure MyMouseDown(x,y,mb: integer); -begin - var ob := ObjectUnderPoint(x,y); - if (ob<>nil) and (ob is RectangleABC) then - if ob.Number=CurrentDigit then - begin - ob.Destroy; - Inc(CurrentDigit); - DrawStatusText; - end - else - begin - ob.Color := clRed; - Inc(Mistakes); - DrawStatusText; - end; -end; - -begin - Window.Title := 'Игра: удали все квадраты по порядку'; - Window.IsFixedSize := True; - for var i:=1 to CountSquares do - begin - var x := Random(WindowWidth-50); - var y := Random(WindowHeight-100); - var ob := RectangleABC.Create(x,y,50,50,clMoneyGreen); - ob.Number := i; - end; - StatusRect := RectangleABC.Create(0,Window.Height-40,Window.Width,40,Color.LightSteelBlue); - CurrentDigit := 1; - Mistakes := 0; - DrawStatusText; - // Установка обработчиков - OnMouseDown := MyMouseDown; -end. \ No newline at end of file diff --git a/ReleaseGenerators/Samples/_SVN/Pas/Applications/Games/KillThem.pas b/ReleaseGenerators/Samples/_SVN/Pas/Applications/Games/KillThem.pas deleted file mode 100644 index 0ed3a4842..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/Applications/Games/KillThem.pas +++ /dev/null @@ -1,238 +0,0 @@ -uses ABCObjects,GraphABC,Timers; - -const - clPlayer = Color.BurlyWood; - -var - kLeftKey,kRightKey: boolean; - kSpaceKey: integer; - /// Игрок - Player: RectangleABC; - /// Таймер движения врагов - t: Timer; - /// Флаг конца игры - EndOfGame: boolean; - /// Количество неигровых объектов - StaticObjectsCount: integer; - /// Счетчик выигрышей - Wins: integer; - /// Счетчик проигрышей - Falls: integer; - /// Информационная строка - InfoString: RectangleABC; - /// Сообщение в начале игры - NewGame: RoundRectABC; - -type - KeysType = (kLeft,kRight); - - /// Класс пули - Pulya = class(CircleABC) - public - constructor Create(x,y: integer); - procedure Move; override; - end; - - /// Класс врага - Enemy = class(RectangleABC) - public - constructor Create(x,y,w: integer); - procedure Move; override; - end; - -constructor Pulya.Create(x,y: integer); -begin - inherited Create(x,y,5,clRed); - dx := 0; - dy := -5; -end; - -procedure Pulya.Move; -begin - inherited Move; - if Top<0 then - Visible := False; - for var j:=StaticObjectsCount to Objects.Count-1 do - // При столкновении пуля и объект становятся невидимыми - if (Objects[j]<>Self) and Intersect(Objects[j]) then - begin - Objects[j].Visible := False; - Visible := False; - end; -end; - -constructor Enemy.Create(x,y,w: integer); -begin - inherited Create(x,y,w,20,clRandom); - if Random(2)=0 then - dx := 5 - else dx := -5; - dy := 0; -end; - -procedure Enemy.Move; -begin - if Random(2)<>0 then - Exit; - if Random(10)=0 then - dy := 5; - if (Left<0) or (Left+Width>Window.Width) or (Random(30)=0) then - dx := -dx; - inherited Move; - if dy<>0 then - dy := 0; - if Top>Window.Height-50 then - EndOfGame := True; -end; - -/// Количество врагов -function NumberOfEnemies: integer; -begin - Result := 0; - for var i:=0 to Objects.Count-1 do - if Objects[i] is Enemy then - Result += 1; -end; - -/// Создание игрока и врагов -procedure CreateObjects; -begin - Player := new RectangleABC(280,WindowHeight-30,100,20,clPlayer); - for var i:=1 to 100 do - begin - var r1 := new Enemy(Random(WindowWidth-50),40+Random(10),50); - r1.TextVisible := True; - r1.Number := i; - end; -end; - -/// Разрушение игрока и врагов -procedure DestroyObjects; -begin - for var i:=Objects.Count-1 downto StaticObjectsCount do - Objects[i].Destroy; -end; - -/// Перемещение врагов -procedure MoveObjects; -begin - for var i:=StaticObjectsCount+1 to Objects.Count-1 do - Objects[i].Move; -end; - -/// Удаление уничтоженных объектов -procedure DestroyKilledObjects; -begin - for var i:=ObjectsCount-1 downto StaticObjectsCount+1 do - if not Objects[i].Visible then - Objects[i].Destroy; -end; - -/// Обработчик нажатия клавиши -procedure KeyDown(Key: integer); -begin - case Key of -vk_Left: kLeftKey := True; -vk_Right: kRightKey := True; -vk_Space: if kSpaceKey=2 then kSpaceKey := 1; - end; -end; - -/// Обработчик отжатия клавиши -procedure KeyUp(Key: integer); -begin - case Key of -vk_Left: kLeftKey := False; -vk_Right: kRightKey := False; -vk_Space: kSpaceKey := 2; - end; -end; - -/// Изменение информационной строки -procedure ChangeInfoString; -begin - InfoString.Text := 'Врагов: '+IntToStr(NumberOfEnemies)+' Побед: '+IntToStr(Wins)+' Поражений: '+IntToStr(Falls); -end; - -/// Обработчик нажатия символьной клавиши -procedure KeyPress(Key: char); -begin - if (Key in ['G','П','g','п']) and EndOfGame then - begin - NewGame.Visible := False; - EndOfGame := False; - t.Start; - CreateObjects; - kSpaceKey := 2; - kLeftKey := False; - kRightKey := False; - end; -end; - -/// Обработчик отжатия мыши -procedure MouseUp(x,y,mb: integer); -begin - if NewGame.PTInside(x,y) then - KeyPress('G'); -end; - -/// Обработчик таймера -procedure TimerProc; -begin - if kLeftKey and (Player.Left>0) then - Player.MoveOn(-10,0); - if kRightKey and (Player.Left+Player.Width0 then - Falls += 1 - else Wins += 1; - NewGame.Visible := True; - DestroyObjects; - ChangeInfoString; - RedrawObjects; - end; -end; - -begin - Window.Title := 'Стрелялка'; - Window.IsFixedSize := True; - ClearWindow(clBlack); - LockDrawingObjects; - EndOfGame := True; - InfoString := new RectangleABC(0,0,Window.Width,38,Color.DarkBlue); - InfoString.Bordered := False; - InfoString.FontColor := clWhite; - InfoString.TextScale := 0.9; - - var zz := 100; - NewGame := new RoundRectABC(zz,200,400,200,30,Color.Violet); - NewGame.Center := Window.Center; - NewGame.Text := 'G - Новая игра'; - StaticObjectsCount := Objects.Count; - ChangeInfoString; - RedrawObjects; - - OnKeyDown := KeyDown; - OnKeyPress := KeyPress; - OnKeyUp := KeyUp; - OnMouseUp := MouseUp; - - t := new Timer(1,TimerProc); -end. diff --git a/ReleaseGenerators/Samples/_SVN/Pas/Applications/Games/Life.pas b/ReleaseGenerators/Samples/_SVN/Pas/Applications/Games/Life.pas deleted file mode 100644 index 87956714a..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/Applications/Games/Life.pas +++ /dev/null @@ -1,318 +0,0 @@ -// Игра "Жизнь" на торе -// Оптимизация хешированием по равномерной сетке -uses Utils,GraphABC; - -const -/// Ширина клетки - w = 4; -/// Количество клеток по ширине - m = 300; -/// Количество клеток по высоте - n = 220; -/// Отступ поля от левой границы окна - x0 = 1; -/// Отступ поля от верхней границы окна - y0 = 21; - mm = m + 1; - nn = n + 1; -/// Количество клеток сетки по горизонтали - mk = 15; -/// Количество клеток сетки по вертикали - nk = 10; - -var - a,b,sosedia,sosedib: array [0..nn,0..mm] of byte; - obnovA,obnovB: array [1..nk,1..mk] of boolean; - CountCells: integer; - obn: boolean; - gen: integer; - hn,hm: integer; - -/// Нарисовать ячейку -procedure DrawCell(i,j: integer); -begin - DrawInBuffer := False; - SetBrushColor(clBlack); - FillRectangle(x0+(j-1)*w,y0+(i-1)*w,x0+j*w-1,y0+i*w-1); - DrawInBuffer := True; -end; - -/// Стереть ячейку -procedure ClearCell(i,j: integer); -begin - DrawInBuffer := False; - SetBrushColor(clWhite); - FillRectangle(x0+(j-1)*w,y0+(i-1)*w,x0+j*w-1,y0+i*w-1); - DrawInBuffer := True; -end; - -/// Нарисовать все изменившиеся ячейки -procedure DrawConfiguration; -begin - for var i:=1 to n do - for var j:=1 to m do - begin - var bb := b[i,j]; - if a[i,j]<>bb then - if bb=1 then DrawCell(i,j) - else ClearCell(i,j); - end; -end; - -/// Нарисовать все ячейки -procedure DrawConfigurationFull; -begin - for var i:=1 to n do - for var j:=1 to m do - if b[i,j]=1 then DrawCell(i,j) - else ClearCell(i,j); -end; - -/// Нарисовать поле -procedure DrawField; -begin - Pen.Color := clLightGray; - for var i:=0 to m do - begin - if i mod hm = 0 then - Pen.Color := clGray - else Pen.Color := clLightGray; - Line(x0+i*w-1,y0,x0+i*w-1,y0+n*w); - end; - for var i:=0 to n do - begin - if i mod hn = 0 then - Pen.Color := clGray - else Pen.Color := clLightGray; - Line(x0,y0+i*w-1,x0+m*w,y0+i*w-1); - end; -end; - -/// Увеличить массив соседей для данной клетки -procedure IncSosedi(i,j: integer); -var i1,i2,j1,j2: integer; -begin - if i=1 then i1:=n else i1:=i-1; - if i=n then i2:=1 else i2:=i+1; - if j=1 then j1:=m else j1:=j-1; - if j=m then j2:=1 else j2:=j+1; - SosediB[i1,j1] += 1; - SosediB[i1,j] += 1; - SosediB[i1,j2] += 1; - SosediB[i,j1] += 1; - SosediB[i,j2] += 1; - SosediB[i2,j1] += 1; - SosediB[i2,j] += 1; - SosediB[i2,j2] += 1; -end; - -/// Уменьшить массив соседей для данной клетки -procedure DecSosedi(i,j: integer); -var i1,i2,j1,j2: integer; -begin - if i=1 then i1:=n else i1:=i-1; - if i=n then i2:=1 else i2:=i+1; - if j=1 then j1:=m else j1:=j-1; - if j=m then j2:=1 else j2:=j+1; - SosediB[i1,j1] -= 1; - SosediB[i1,j] -= 1; - SosediB[i1,j2] -= 1; - SosediB[i,j1] -= 1; - SosediB[i,j2] -= 1; - SosediB[i2,j1] -= 1; - SosediB[i2,j] -= 1; - SosediB[i2,j2] -= 1; -end; - -/// Поставить ячейку в клетку (i,j) -procedure SetCell(i,j: integer); -begin - if b[i,j]=0 then - begin - b[i,j] := 1; - obn := True; - IncSosedi(i,j); - end; - CountCells += 1; -end; - -/// Убрать ячейку из клетки (i,j) -procedure UnSetCell(i,j: integer); -begin - if b[i,j]=1 then - begin - b[i,j] := 0; - obn := True; - DecSosedi(i,j); - end; - CountCells -= 1; -end; - -/// Инициализировать массивы и конфигурацию поля -procedure Init; -var - xc := n div 2; - yc := m div 2; -begin - for var i:=0 to n+1 do - for var j:=0 to m+1 do - b[i,j] := 0; - a := b; - SosediB := b; - SosediA := SosediB; - for var ik:=1 to nk do - for var jk:=1 to mk do - obnovB[ik,jk] := True; - obnovA := obnovB; - CountCells := 0; - - SetCell(xc,yc); - SetCell(xc,yc+1); - SetCell(xc,yc+2); - SetCell(xc-1,yc+2); - SetCell(xc+1,yc+1); -end; - -/// Обработать ячейку -procedure ProcessCell(i,j: integer); -begin - case SosediA[i,j] of -0..1,4..9: - if b[i,j]=1 then - begin - b[i,j] := 0; - obn := True; - DecSosedi(i,j); - ClearCell(i,j); - Dec(CountCells); - end; -3: if b[i,j]=0 then - begin - b[i,j] := 1; - obn := True; - IncSosedi(i,j); - DrawCell(i,j); - Inc(CountCells); - end; - end; {case} -end; - -/// Перейти к следующему поколению -procedure NextGen; -var ifirst,jfirst,ilast,jlast: integer; -begin - for var ik:=1 to nk do - begin - for var jk:=1 to mk do - begin - obn := False; - ifirst := (ik-1)*hn+1; - ilast := (ik-1)*hn+hn; - jfirst := (jk-1)*hm+1; - jlast := (jk-1)*hm+hm; - if obnovA[ik,jk] then - begin - for var i:=ifirst to ilast do - for var j:=jfirst to jlast do - ProcessCell(i,j); - end - else - begin - var ik1,jk1,ik2,jk2: integer; - if ik=1 then ik1:=nk else ik1:=ik-1; - if ik=nk then ik2:=1 else ik2:=ik+1; - if jk=1 then jk1:=mk else jk1:=jk-1; - if jk=mk then jk2:=1 else jk2:=jk+1; - var l := obnovA[ik,jk1]; - var r := obnovA[ik,jk2]; - var u := obnovA[ik1,jk]; - var d := obnovA[ik2,jk]; - var lu := obnovA[ik1,jk1]; - var ld := obnovA[ik2,jk1]; - var ru := obnovA[ik1,jk2]; - var rd := obnovA[ik2,jk2]; - if u then - for var j:=jfirst+1 to jlast-1 do - ProcessCell(ifirst,j); - if d then - for var j:=jfirst+1 to jlast-1 do - ProcessCell(ilast,j); - if l then - for var i:=ifirst+1 to ilast-1 do - ProcessCell(i,jfirst); - if r then - for var i:=ifirst+1 to ilast-1 do - ProcessCell(i,jlast); - if u or l or lu then - ProcessCell(ifirst,jfirst); - if u or r or ru then - ProcessCell(ifirst,jlast); - if d or l or ld then - ProcessCell(ilast,jfirst); - if d or r or rd then - ProcessCell(ilast,jlast); - end; - obnovB[ik,jk] := obn; - end; - end; -end; - -/// Перерисовка содержимого окна -procedure LifeRedrawProc; -begin - Redraw; - DrawConfigurationFull; -end; - -/// Вывод номера поколения и количества ячеек -procedure DrawInfo; -begin - Brush.Color := clWhite; - TextOut(25,0,'Поколение '+IntToStr(gen)); - TextOut(WindowWidth - 130,0,'Жителей: '+IntToStr(CountCells)+' '); -end; - -begin - if (m mod mk<>0) or (n mod nk<>0) then - begin - writeln('Размер кластера не согласован с размером поля. Программа завершена'); - exit - end; - hm := m div mk; - hn := n div nk; - SetWindowSize(x0+m*w,y0+n*w); - CenterWindow; - Window.Title := 'Игра "Жизнь"'; - Window.IsFixedSize := True; - Font.Name := 'Arial'; - Font.Size := 10; - Init; - - LockDrawing; - DrawInfo; - DrawField; - DrawConfiguration; - UnLockDrawing; - - var mil := Milliseconds; - gen := 0; - RedrawProc := LifeRedrawProc; - while True do - begin - gen += 1; - - if gen mod 11 = 0 then - DrawInfo; - - SosediA := SosediB; - obnovA := obnovB; - NextGen; - - if gen mod 1000 = 0 then - begin - var mil1 := Milliseconds; - writeln(gen,' ',(mil1-mil)/1000); - mil := mil1; - end; - end; -end. diff --git a/ReleaseGenerators/Samples/_SVN/Pas/Applications/Games/Matches.pas b/ReleaseGenerators/Samples/_SVN/Pas/Applications/Games/Matches.pas deleted file mode 100644 index 0ea31f7ed..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/Applications/Games/Matches.pas +++ /dev/null @@ -1,45 +0,0 @@ -// Игра "Спички" -const InitialCount=15; - -var - /// Текущее количество спичек - Count: integer; - /// Количество спичек, которое берет игрок - Num: integer; - /// Номер текущего игрока - Player: integer; - -begin - Player := 1; - Count := InitialCount; - - repeat - if Player=1 then - begin - var Correct: boolean; - repeat - write('Ваш ход. На столе ',Count,' спичек. '); - write('Сколько спичек Вы берете? '); - readln(Num); - Correct := (Num>=1) and (Num<=3) and (Num<=Count); - if not Correct then - writeln('Неверно! Повторите ввод!'); - until Correct; - end - else - begin - Num := Random(1,3); - if Num>Count then - Num := Count; - writeln('Мой ход. Я взял ',Num,' спичек'); - end; - Count -= Num; - if Player=1 then - Player := 2 - else Player := 1; - until Count=0; - - if Player=1 then - writeln('Вы победили!') - else writeln('Вы проиграли!'); -end. diff --git a/ReleaseGenerators/Samples/_SVN/Pas/Applications/Games/NewLife.pas b/ReleaseGenerators/Samples/_SVN/Pas/Applications/Games/NewLife.pas deleted file mode 100644 index acb6036b1..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/Applications/Games/NewLife.pas +++ /dev/null @@ -1,347 +0,0 @@ -// Игра Жизнь на торе -// Оптимизация хешированием по равномерной сетке - - -uses Utils,GraphABC; - -const - w =3; - w1=1; - k=20; - m=300; - n=220; - graphW=0; - mk=m div k;//15; - nk=n div k;//10; - mm=m+1; - nn=n+1; - x0=1; - y0=21; - ClearColor=clBlack; - FillColor=clLimeGreen; - FiledColor=RGB(0,40,0); - FiledColor2=RGB(0,70,0);{} - {ClearColor=clWhite; - FillColor=clBlack; - FiledColor=clLightGray; - FiledColor2=clGray;{} - - -var - //a,b,sosedia,sosedib: array [0..nn,0..mm] of byte; - a,b,sosedia,sosedib:array of array of byte; - //obnovA,obnovB: array [1..nk,1..mk] of boolean; - obnovA,obnovB: array of array of boolean; - count: integer; - obn: boolean; - mil,mil1: integer; - hn,hm: integer; - -procedure AssignArray(var arr:array of array of boolean; n,m:integer); -begin - SetLength(arr,n); - for var i:=0 to n-1 do - SetLength(arr[i],m); -end; -procedure AssignArray(var arr:array of array of byte; n,m:integer); -begin - SetLength(arr,n); - for var i:=0 to n-1 do - SetLength(arr[i],m); -end; -procedure CopyArray(arr1,arr2:array of array of byte); -begin - for var i:=0 to arr1.Length-1 do - arr1[i].CopyTo(arr2[i],0); -end; -procedure CopyArray(arr1,arr2:array of array of boolean); -begin - for var i:=0 to arr1.Length-1 do - arr1[i].CopyTo(arr2[i],0); -end; - -procedure DrawCell(i,j: integer); -begin - if BrushColor<>FillColor then begin - SetBrushColor(FillColor); - SetPenColor(FillColor); - end; - FillRect(x0+(j-1)*w,y0+(i-1)*w,x0+j*w-w1,y0+i*w-w1); -end; - - -procedure ClearCell(i,j: integer); -begin - if BrushColor<>clearColor then begin - SetBrushColor(clearColor); - SetPenColor(clearColor); - end; - FillRect(x0+(j-1)*w,y0+(i-1)*w,x0+j*w-w1,y0+i*w-w1); -end; - -procedure DrawConfiguration; -begin - for var i:=1 to n do - for var j:=1 to m do - if a[i,j]=1 then - DrawCell(i,j) -end; - -procedure DrawField; -begin - SetBrushColor(ClearColor); - FillRectangle(x0,y0,x0+m*w,y0+n*w); - SetPenColor(FiledColor); - for var i:=0 to m do - Line(x0+i*w-1,y0,x0+i*w-1,y0+n*w); - for var i:=0 to n do - Line(x0,y0+i*w-1,x0+m*w,y0+i*w-1); - SetPenColor(FiledColor2); - for var i:=0 to m div hm do - Line(x0+i*w*hm-1,y0,x0+i*w*hm-1,y0+n*w); - for var i:=0 to n div hn do - Line(x0,y0+i*w*hn-1,x0+m*w,y0+i*w*hn-1); -end; - -procedure IncSosedi(i,j: integer); -begin - var i1 := i=1 ? n : i-1; - var i2 := i=n ? 1 : i+1; - var j1 := j=1 ? m : j-1; - var j2 := j=m ? 1 : j+1; - SosediB[i1,j1] += 1; - SosediB[i1,j] += 1; - SosediB[i1,j2] += 1; - SosediB[i,j1] += 1; - SosediB[i,j2] += 1; - SosediB[i2,j1] += 1; - SosediB[i2,j] += 1; - SosediB[i2,j2] += 1; -end; - -procedure DecSosedi(i,j: integer); -begin - var i1 := i=1 ? n : i-1; - var i2 := i=n ? 1 : i+1; - var j1 := j=1 ? m : j-1; - var j2 := j=m ? 1 : j+1; - SosediB[i1,j1] -= 1; - SosediB[i1,j] -= 1; - SosediB[i1,j2] -= 1; - SosediB[i,j1] -= 1; - SosediB[i,j2] -= 1; - SosediB[i2,j1] -= 1; - SosediB[i2,j] -= 1; - SosediB[i2,j2] -= 1; -end; - -procedure SetCell(i,j: integer); -begin - if b[i,j]=0 then - begin - b[i,j]:=1; - obn:=true; - IncSosedi(i,j); - end; - count += 1; -end; - -procedure UnSetCell(i,j: integer); -begin - if b[i,j]=1 then - begin - b[i,j]:=0; - obn:=true; - DecSosedi(i,j); - end; - count -= 1; -end; - -type - ColonyType = (Big, LD, RD, LU, RU); -procedure AddColonyType(xc,yc:integer; ctype:ColonyType); -begin - case ctype of - ColonyType.Big:begin - SetCell(xc,yc); - SetCell(xc,yc+1); - SetCell(xc,yc+2); - SetCell(xc-1,yc+2); - SetCell(xc+1,yc+1); - end; - ColonyType.LD:begin - SetCell(xc,yc-1); - SetCell(xc,yc); - SetCell(xc,yc+1); - SetCell(xc-1,yc-1); - SetCell(xc-2,yc); - end; - end; - //SosediA:=SosediB; - CopyArray(sosedib,sosedia); - for var ik:=1 to nk do - for var jk:=1 to mk do - obnovB[ik,jk]:=true; - //obnovA:=obnovB; - CopyArray(obnovB,obnovA); -end; - -procedure Init; -begin - Count:=0; - AddColonyType(n div 2,m div 2, ColonyType.Big); -end; - -procedure OnlyCase(i,j: integer); -begin - case SosediA[i,j] of -0..1,4..9: - if b[i,j]=1 then - begin - b[i,j]:=0; - obn:=true; - DecSosedi(i,j); - ClearCell(i,j); - count -= 1; - end; -3: if b[i,j]=0 then - begin - b[i,j]:=1; - obn:=true; - IncSosedi(i,j); - DrawCell(i,j); - count += 1; - end; - end; -end; - -procedure NextGen; -var - i,j,ik1,jk1,ik2,jk2,ifirst,jfirst,ilast,jlast: integer; - l,r,u,d,lu,ld,ru,rd: boolean; -begin - for var ik:=1 to nk do - begin - for var jk:=1 to mk do - begin - obn := false; - ifirst := (ik-1)*hn+1; - ilast := ik*hn; - jfirst := (jk-1)*hm+1; - jlast := jk*hm; - if obnovA[ik,jk] then - begin - for i:=ifirst to ilast do - for j:=jfirst to jlast do - OnlyCase(i,j); - end - else - begin - ik1 := ik=1 ? nk : ik-1; - ik2 := ik=nk ? 1 : ik+1; - jk1 := jk=1 ? mk : jk-1; - jk2 := jk=mk ? 1 : jk+1; - l:=obnovA[ik,jk1]; - r:=obnovA[ik,jk2]; - u:=obnovA[ik1,jk]; - d:=obnovA[ik2,jk]; - lu:=obnovA[ik1,jk1]; - ld:=obnovA[ik2,jk1]; - ru:=obnovA[ik1,jk2]; - rd:=obnovA[ik2,jk2]; - if u then - begin - i:=ifirst; - for j:=jfirst+1 to jlast-1 do - OnlyCase(i,j); - end; - if d then - begin - i:=ilast; - for j:=jfirst+1 to jlast-1 do - OnlyCase(i,j); - end; - if l then - begin - j:=jfirst; - for i:=ifirst+1 to ilast-1 do - OnlyCase(i,j); - end; - if r then - begin - j:=jlast; - for i:=ifirst+1 to ilast-1 do - OnlyCase(i,j); - end; - if u or l or lu then - OnlyCase(ifirst,jfirst); - if u or r or ru then - OnlyCase(ifirst,jlast); - if d or l or ld then - OnlyCase(ilast,jfirst); - if d or r or rd then - OnlyCase(ilast,jlast); - end; - obnovB[ik,jk]:=obn; - end; - end; -end; - -procedure MouseDown(x,y,b:integer); -begin - case b of - 1:AddColonyType((y-y0)div w,(x-x0)div w, ColonyType.LD); - - end; -end; - -begin - AssignArray(obnovA,nk+1,mk+1); - AssignArray(obnovB,nk+1,mk+1); - AssignArray(a,nn+1,mm+1); - AssignArray(b,nn+1,mm+1); - AssignArray(sosedia,nn+1,mm+1); - AssignArray(sosedib,nn+1,mm+1); - SetWindowCaption('Игра "Жизнь"'); - if (m mod mk<>0) or (n mod nk<>0) then - begin - writeln('Размер кластера не согласован с размером поля. Программа завершена'); - exit - end; - hm:=m div mk; - hn:=n div nk; - SetBrushColor(ClearColor); - SetWindowSize(x0+m*w,y0+n*w+graphW); - CenterWindow; - ClearWindow(ClearColor); - SetFontName('Courier New'); - SetFontSize(10); - Init; - DrawField; - DrawConfiguration; - OnMouseDown:=MouseDown; - mil:=Milliseconds; - var gen:=0; - DrawInBuffer := false; - while true do begin - gen+=1; - //SosediA:=SosediB; - //obnovA:=obnovB; - CopyArray(sosedib,sosedia); - CopyArray(obnovB,obnovA); - NextGen; - if gen mod 10 = 0 then begin - DrawInBuffer := True; - SetBrushColor(ClearColor); - SetFontColor(FillColor); - TextOut(25, 0,'Поколение: '+IntToStr(gen)); - TextOut(765,0,'Жителей: '+IntToStr(count)+' '); - if gen mod 1000 = 0 then begin - mil1:=Milliseconds; - writeln(gen,' ',(mil1-mil)/1000); - mil:=mil1; - end; - DrawInBuffer := false; - end; - end; -end. diff --git a/ReleaseGenerators/Samples/_SVN/Pas/Applications/GraphApplications/Paporotnik/Main.pas b/ReleaseGenerators/Samples/_SVN/Pas/Applications/GraphApplications/Paporotnik/Main.pas deleted file mode 100644 index 3946450ad..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/Applications/GraphApplications/Paporotnik/Main.pas +++ /dev/null @@ -1,22 +0,0 @@ -//(c) DarkStar 2008 -uses GraphABC, Paporotnik, PaporotnikData; - -const - Iterations = 300000; - Height = 600; - Fast = false; - Width = Height div 2; - WindowWidth= Width * 3; - Brightness = 170; - -var - Paprotnik := new PaporotnikFractal(PaprotnikData); - SimplePaprotnik := new PaporotnikFractal(SimplePaprotnikData); - Elka := new PaporotnikFractal(ElkaData); - -begin - InitWindow(200, 50, WindowWidth , Height, clBlack); - Paprotnik.Draw(0, 0, Iterations, Height, Brightness, fast); - SimplePaprotnik.Draw(Width, 0, Iterations, Height, Brightness, fast); - Elka.Draw(Width*2, 0, Iterations, Height, Brightness, fast); -end. \ No newline at end of file diff --git a/ReleaseGenerators/Samples/_SVN/Pas/Applications/GraphApplications/Paporotnik/Paporotnik.pas b/ReleaseGenerators/Samples/_SVN/Pas/Applications/GraphApplications/Paporotnik/Paporotnik.pas deleted file mode 100644 index 3d689e7a5..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/Applications/GraphApplications/Paporotnik/Paporotnik.pas +++ /dev/null @@ -1,51 +0,0 @@ -///Модуль для рисования фракталов семейства "Лист папоротника" -unit Paporotnik; - -uses GraphABC; - -type - - ///Настройки фрактала - PaporotnikFractalInitalData = record - data: array of array of real; - P0,P1,P2,P3:real; - end; - - ///Фрактал "Лист папоротника" - PaporotnikFractal = class - private - data: array of array of real; - P0,P1,P2,P3:real; - public - constructor(initdata: PaporotnikFractalInitalData); - begin - data := initdata.data; - P0 := initdata.P0; - P1 := initdata.P1; - P2 := initdata.P2; - P3 := initdata.P3; - end; - procedure Draw(x0,y0,Iterations,Height,Brightness: integer; fast: boolean); - begin - var plotx, ploty, x, y : real; - var Size := Height/11; - var Width := Height div 2; - var dx := Width div 2; - var dc := Iterations div Brightness; - if fast then - LockDrawing; - for var i:=1 to Iterations do begin - var P := Random(100); - var rnd := P=1 do - begin - OnVector(0,i); - OnVector(i,0); - i -= 1; - OnVector(0,-i); - OnVector(-i,0); - i -= 1; - end; - PenUp; -end; - -begin - Task('pp17'); - ToPoint(2,2); - Spir(10); - ToPoint(16,2); - Spir(8); - ToPoint(0,0); -end. diff --git a/ReleaseGenerators/Samples/_SVN/Pas/CheckedTasks/DrawMan/DrawManMakeTask/DMMy1.pas b/ReleaseGenerators/Samples/_SVN/Pas/CheckedTasks/DrawMan/DrawManMakeTask/DMMy1.pas deleted file mode 100644 index 239a4dfa6..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/CheckedTasks/DrawMan/DrawManMakeTask/DMMy1.pas +++ /dev/null @@ -1,5 +0,0 @@ -uses DrawMan,DrawManAddTasks; - -begin - Task('my1'); -end. diff --git a/ReleaseGenerators/Samples/_SVN/Pas/CheckedTasks/DrawMan/DrawManMakeTask/DrawManAddTasks.pas b/ReleaseGenerators/Samples/_SVN/Pas/CheckedTasks/DrawMan/DrawManMakeTask/DrawManAddTasks.pas deleted file mode 100644 index 5ad9e6a56..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/CheckedTasks/DrawMan/DrawManMakeTask/DrawManAddTasks.pas +++ /dev/null @@ -1,24 +0,0 @@ -/// Дополнительный модуль для исполнителя Чертежник с заданиями -unit DrawManAddTasks; -// После компиляции pcu-файл модуля желательно разместить в папке PascalABC.NET\bin\Lib - -uses DrawMan,DMTaskMaker; - -procedure my1; -begin - TaskText('Задание my1. Начертите, используя циклы'); - Field(14,14); - DoToPoint(1,7); - var k := 1; - DoPenDown; - for var i:=1 to 12 do - begin - DoOnVector(1,i*k); - k:=-k; - end; - DoPenUp; -end; - -begin - RegisterTask('my1',my1); -end. diff --git a/ReleaseGenerators/Samples/_SVN/Pas/CheckedTasks/DrawMan/random_DM.pas b/ReleaseGenerators/Samples/_SVN/Pas/CheckedTasks/DrawMan/random_DM.pas deleted file mode 100644 index c9f2904c0..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/CheckedTasks/DrawMan/random_DM.pas +++ /dev/null @@ -1,16 +0,0 @@ -// Демонстрация использования случайных чисел для Чертежника. Лучи -uses DrawMan; - -begin - Field(30,22); - ToPoint(15,11); - PenDown; - for var i:=1 to 100 do - begin - var dx := Random(-10,10); - var dy := Random(-10,10); - OnVector(dx,dy); - OnVector(-dx,-dy); - end; - PenUp; -end. diff --git a/ReleaseGenerators/Samples/_SVN/Pas/CheckedTasks/PT4/Dynamic2.pas b/ReleaseGenerators/Samples/_SVN/Pas/CheckedTasks/PT4/Dynamic2.pas deleted file mode 100644 index 4888d1972..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/CheckedTasks/PT4/Dynamic2.pas +++ /dev/null @@ -1,18 +0,0 @@ -// Пример решения задачи Dynamic2 из электронного задачника Programming Taskbook -uses PT4; - -var p1,p2: PNode; - -begin - Task('Dynamic2'); - read(p1); - var n := 0; - while p1 <> nil do - begin - write(p1^.Data); - n += 1; - p2 := p1; { сохраняем адрес текущего элемента } - p1 := p1^.Next; { и переходим к следующему элементу } - end; - write(n, p2); -end. \ No newline at end of file diff --git a/ReleaseGenerators/Samples/_SVN/Pas/CheckedTasks/PT4/File48.pas b/ReleaseGenerators/Samples/_SVN/Pas/CheckedTasks/PT4/File48.pas deleted file mode 100644 index b6c906d29..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/CheckedTasks/PT4/File48.pas +++ /dev/null @@ -1,24 +0,0 @@ -// Пример решения задачи File48 из электронного задачника Programming Taskbook -uses PT4; -var - f: array [1..4] of file of integer; -begin - Task('File48'); - for var i:=1 to 4 do - begin - var s: string; - read(s); - Assign(f[i], s); - if i < 4 then Reset(f[i]) - else Rewrite(f[i]); - end; - while not Eof(f[1]) do - for var i:=1 to 3 do - begin - var a: integer; - read(f[i],a); - write(f[4],a); - end; - for var i := 1 to 4 do - Close(f[i]); -end. diff --git a/ReleaseGenerators/Samples/_SVN/Pas/CheckedTasks/PT4/PT4TaskMaker/PT4Demo.pas b/ReleaseGenerators/Samples/_SVN/Pas/CheckedTasks/PT4/PT4TaskMaker/PT4Demo.pas deleted file mode 100644 index b8647c5bc..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/CheckedTasks/PT4/PT4TaskMaker/PT4Demo.pas +++ /dev/null @@ -1,312 +0,0 @@ -unit PT4Demo; - -interface - -implementation - -uses PT4TaskMaker; - -procedure Demo3; -var - a, b: real; -begin - StartTask('Ввод и вывод данных, оператор присваивания'); - TaskText('Даны стороны прямоугольника~{a} и~{b}.', 0, 2); - TaskText('Найти его площадь {S}~=~{a}\*{b} и периметр {P}~=~2\*({a}\;+\;{b}).', 0, 4); - a := (1 + Random(100)) / 10; - b := (1 + Random(100)) / 10; - DataR('a = ', a, xLeft, 3, 4); - DataR('b = ', b, xRight, 3, 4); - ResultR('S = ', a * b, 0, 2, 4); - ResultR('P = ', 2 * (a + b), 0, 4, 4); - SetNumberOfTests(3); -end; - -procedure Demo4; -var - m, n, i, j, k: integer; - a: array [1..5, 1..8] of real; -begin - StartTask('Двумерные массивы (матрицы): вывод элементов'); - TaskText('Дана матрица размера~{M}\;\x\;{N} и\ целое число~{K} (1~\l~{K}~\l~{M}).', 0, 2); - TaskText('Вывести элементы {K}-й строки данной матрицы.', 0, 4); - m := 2 + Random(4); - n := 4 + Random(5); - k := 1; - if m = 5 then k := 0; - DataN('M = ', m, 3, 1, 1); - DataN('N = ', n, 10, 1, 1); - for i := 1 to M do - for j := 1 to N do - begin - a[i, j] := 9.98 * Random; - DataR('', a[i,j], Center(j, n, 4, 2), i + k, 4); - end; - k := 1 + Random(m); - dataN('K = ', k, 68, 5, 1); - for j := 1 to n do - ResultR('', a[k, j], Center(j, n, 4, 2), 3, 4); - SetNumberOfTests(5); -end; - -procedure Demo5; -var s: string; -begin - StartTask('Символы и строки: основные операции'); - TaskText('Дана строка~{S}.', 0, 2); - TaskText('Вывести ее первый и последний символ.', 0, 4); - s := SampleWord(Random(SampleWordCount)); - DataS('S = ', s, 0, 3); - ResultC('Первый символ: ', s[1], xLeft, 3); - ResultC('Последний символ: ', s[length(s)], xRight, 3); - SetNumberOfTests(4); -end; - -function FileName(Len: integer): string; -const - c = '0123456789abcdefghijklmnopqrstuvwxyz'; -var - i: integer; -begin - result := ''; - for i := 1 to len do - result := result + c[Random(Length(c))+1]; -end; - -procedure Demo6; -var - k, i, j, jmax: integer; - s1, s2, s3: string; - fs1: file of shortstring; - fs2: file of shortstring; - fc3: file of char; - s: shortstring; - c: char; -begin - StartTask('Символьные и строковые файлы'); - TaskText('Дано целое число~{K} (>\,0) и строковый файл.', 0, 1); - TaskText('Создать два новых файла: строковый, содержащий первые {K}~символов', 0, 2); - TaskText('каждой строки исходного файла, и символьный, содержащий {K}-й символ', 0, 3); - TaskText('каждой строки (если длина строки меньше~{K}, то в строковый файл', 0, 4); - TaskText('записывается вся строка, а в символьный файл записывается пробел).', 0, 5); - s1 := '1' + FileName(5) + '.tst'; - s2 := '2' + FileName(5) + '.tst'; - s3 := '3' + FileName(5) + '.tst'; - Assign(fs1, s1); - Rewrite(fs1); - Assign(fs2, s2); - Rewrite(fs2); - Assign(fc3, s3); - Rewrite(fc3); - k := 2 + Random(10); - jmax := 0; - for i := 1 to 10 + Random(20) do - begin - j := 2 + Random(15); - if jmax < j then - jmax := j; - s := FileName(j); - write(fs1, s); - if j >= k then - c := s[k] - else - c := ' '; - write(fc3, c); - s := copy(s, 1, k); - write(fs2,s); - end; - Close(fs1); - Close(fs2); - Close(fc3); - DataN('K =', k, 0, 1, 2); - DataS('Имя исходного файла: ', s1, 3, 2); - DataS('Имя результирующего строкового файла: ', s2, 3, 4); - DataS('Имя результирующего символьного файла: ', s3, 3, 5); - DataComment('Содержимое исходного файла:', xRight, 2); - DataFileS(s1, 3, jmax + 3); - ResultComment('Содержимое результирующего строкового файла:', 0, 2); - ResultComment('Содержимое результирующего символьного файла:', 0, 4); - ResultFileS(s2, 3, k + 3); - ResultFileC(s3, 5, 4); -end; - -procedure Demo7; -var - i, n: integer; - s: TSampleLines; - s1, s2: string; - t1, t2: text; -begin - StartTask('Текстовые файлы: основные операции'); - TaskText('Дан текстовый файл.', 0, 2); - TaskText('Удалить из него все пустые строки.', 0, 4); - s1 := FileName(6) + '.tst'; - s2 := '#' + FileName(6) + '.tst'; - SampleText(Random(SampleTextCount), n, S); - Assign(t2, s2); - Rewrite(t2); - Assign(t1, s1); - Rewrite(t1); - for i := 0 to n - 1 do - begin - writeln(t2, s[i]); - if s[i] <> '' then - writeln(t1, s[i]); - end; - Close(t1); - Close(t2); - ResultFileT(s1, 1, 5); - Rename(t2, s1); - DataFileT(s1, 2, 5); - DataS('Имя файла: ', s1, 0, 1); - SetNumberOfTests(3); -end; - -var WrongNode: TNode; - -procedure Demo8; -var - i, n: integer; - p, p1, p2: PNode; -begin - StartTask('Динамические структуры данных: двусвязный список'); - TaskText('Дан указатель~{P}_1 на начало непустой цепочки элементов-записей типа TNode,', 0, 1); - TaskText('связанных между собой с помощью поля Next. Используя поле Prev записи TNode,', 0, 2); - TaskText('преобразовать исходную (\Iодносвязную\i) цепочку в \Iдвусвязную\i, в которой каждый', 0, 3); - TaskText('элемент связан не только с последующим элементом (с помощью поля Next),', 0, 4); - TaskText('но и с предыдущим (с помощью поля Prev). Поле Prev первого элемента положить', 0, 5); - TaskText('равным~\N. Вывести указатель на последний элемент преобразованной цепочки.', 0, 0); - if Random(4) = 0 then - n := 1 - else - n := 2 + Random(8); - new(p1); - p1^.Data := Random(90) + 10; - p1^.Prev := nil; - p2 := p1; - for i := 2 to n do - begin - new(p); - p^.Data := Random(90) + 10; - p^.Prev := p2; - p2^.Next := p; - p2 := p; - end; - p2^.Next := nil; - SetPointer(1, p1); - SetPointer(2, p2); - ResultP('Адрес последнего элемента: ', 2, 0, 2); - ResultList(1, 0, 3); - ShowPointer(2); - DataP('', 1, 0, 2); - p := p1; - for i := 1 to n do - begin - p^.prev := @WrongNode; - p := p^.Next; - end; - DataList(1, 0, 3); - ShowPointer(1); -end; - -procedure Demo9; -var - i, n: integer; - p, p1, p2: PNode; -begin - StartTask('Динамические структуры данных: двусвязный список'); - TaskText('Дана ссылка~{A}_1 на начало непустой цепочки элементов-объектов типа Node,', 0, 1); - TaskText('связанных между собой с помощью своих свойств Next. Используя свойства Prev', 0, 2); - TaskText('данных объектов, преобразовать исходную (\Iодносвязную\i) цепочку в \Iдвусвязную\i,', 0, 3); - TaskText('в которой каждый элемент связан не только с последующим элементом (с помощью', 0, 4); - TaskText('свойства Next), но и с предыдущим (с помощью свойства Prev). Свойство Prev', 0, 5); - TaskText('первого элемента положить равным~\O. Вывести ссылку~{A}_2 на последний', 0, 0); - TaskText('элемент преобразованной цепочки.', 0, 0); - SetObjectStyle; - if Random(4) = 0 then - n := 1 - else - n := 2 + Random(8); - new(p1); - p1^.Data := Random(90) + 10; - p1^.Prev := nil; - p2 := p1; - for i := 2 to n do - begin - new(p); - p^.Data := Random(90) + 10; - p^.Prev := p2; - p2^.Next := p; - p2 := p; - end; - p2^.Next := nil; - SetPointer(1, p1); - SetPointer(2, p2); - ResultP('Последний элемент: ', 2, 0, 2); - ResultList(1, 0, 3); - ShowPointer(2); - DataP('', 1, 0, 2); - p := p1; - for i := 1 to n do - begin - p^.prev := @WrongNode; - p := p^.Next; - end; - DataList(1, 0, 3); - ShowPointer(1); - SetNumberOfTests(6); -end; - -var i: integer := 0; - -procedure InitTask(num: integer); -begin - i += 1; - writeln(i); - case num of - 1..2: UseTask('Begin', num); - 3: Demo3; - 4: Demo4; - 5: Demo5; - 6: Demo6; - 7: Demo7; - 8: Demo8; - 9: Demo9; - end; -end; - -begin - AddGroup('Demo', 'Примеры различных задач', 'М. Э. Абрамян, 2008', - 'qwqfsdf13dfttd', 9, InitTask); - - AddCommentText('Демонстрируются различные возможности'); - AddCommentText('конструктора учебных заданий \MPT4TaskMaker\m.'); - - SubgroupComment('Ввод и вывод данных, оператор присваивания'); - AddCommentText('В данной подгруппе два первых задания \Iимпортированы\i'); - AddCommentText('из группы \SBegin\s. '); - AddCommentText('\PПриводимый ниже абзац преамбулы также импортирован из группы \SBegin\s.\P'); - UseCommentText('Begin'); - - SubgroupComment('Двумерные массивы (матрицы): вывод элементов'); - AddCommentText('Данное задание дублирует задание Matrix7.'); - - SubgroupComment('Символьные и строковые файлы'); - AddCommentText('Данное задание дублирует задание File63. Оно демонстрирует'); - AddCommentText('особенности, связанные с двоичными \Iстроковыми\i файлами.'); - AddCommentText('При реализации задания используется вспомогательная функция \MFileName\m.'); - - SubgroupComment('Текстовые файлы: основные операции'); - AddCommentText('Данное задание дублирует задание Text16.'); - - SubgroupComment('Динамические структуры данных: двусвязный список'); - AddCommentText('Первое задание дублирует задание Dynamic30.'); - AddCommentText('\PВторое задание дублирует задание ObjDyn30. Его реализация совпадает, по существу, '); - AddCommentText('с реализацией предыдущего задания. Отличия проявляются лишь в стиле формулировки:'); - AddCommentText('во втором задании использован \<объектный\> стиль, характерный для среды .NET.'); - - RegisterGroup; - - CloseGroup; -end. - diff --git a/ReleaseGenerators/Samples/_SVN/Pas/CheckedTasks/PT4/PT4TaskMaker/PT4Demo.pcu b/ReleaseGenerators/Samples/_SVN/Pas/CheckedTasks/PT4/PT4TaskMaker/PT4Demo.pcu deleted file mode 100644 index 554b616f6bcdc22e294f61886639d64f2d2f59e1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 25123 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 feOA4rgGIh*;C>MXPD diff --git a/ReleaseGenerators/Samples/_SVN/Pas/CheckedTasks/PT4/PT4TaskMaker/PT4DemoTest.pas b/ReleaseGenerators/Samples/_SVN/Pas/CheckedTasks/PT4/PT4TaskMaker/PT4DemoTest.pas deleted file mode 100644 index 9736d7ae3..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/CheckedTasks/PT4/PT4TaskMaker/PT4DemoTest.pas +++ /dev/null @@ -1,7 +0,0 @@ -uses PT4, PT4Demo; -begin -// для отображения окна задачника -// надо закомментировать вызов процедуры MakeText - MakeText('Demo'); - Task('Demo7?'); -end. \ No newline at end of file diff --git a/ReleaseGenerators/Samples/_SVN/Pas/CheckedTasks/PT4/PT4TaskMaker/PT4Tasks.html b/ReleaseGenerators/Samples/_SVN/Pas/CheckedTasks/PT4/PT4TaskMaker/PT4Tasks.html deleted file mode 100644 index b2c858958..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/CheckedTasks/PT4/PT4TaskMaker/PT4Tasks.html +++ /dev/null @@ -1,53 +0,0 @@ - - -Programming Taskbook 4.7 - - -

-

: . . , 2008

-

PT4TaskMaker.

-

  ,

-

Begin.

Begin.

.

-

Demo1.  a.  P = 4·a.

-

Demo2.  a.  S = a2.

-

Demo3.  a  b. S = a·b P = 2·(a + b).

-

():

-

Matrix7.

-

Demo4.  M ´ N  K (1 £ K £ M). K- .

-

 :

-

Demo5.  S. .

-

 

-

File63. , . FileName.

-

Demo6.  K (> 0) . : , K  , , K- (  K, , ).

-

:

-

Text16.

-

Demo7. . .

-

:

-

Dynamic30.

ObjDyn30. , , . : «» , .NET.

-

Demo8.  P1 - TNode, Next. Prev TNode, () , ( Next), ( Prev). Prev  nil. .

-

Demo9.  A1 - Node, Next. Prev , () , ( Next), ( Prev). Prev  null.  A2 .

-
-
: 15.10.2008.
- diff --git a/ReleaseGenerators/Samples/_SVN/Pas/CheckedTasks/PT4/PT4TaskMaker/results.abc b/ReleaseGenerators/Samples/_SVN/Pas/CheckedTasks/PT4/PT4TaskMaker/results.abc deleted file mode 100644 index 75a45940f..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/CheckedTasks/PT4/PT4TaskMaker/results.abc +++ /dev/null @@ -1 +0,0 @@ -N祭|10PABC1 NC:\PROGRA~1\PASCAL~1.NET\PT4 NV8#"%'%&&*&$#"%'%&&*&:R4='%&&*&$#"%'%>7<7:7:<8==>C><6257566:643257566:6 \ No newline at end of file diff --git a/ReleaseGenerators/Samples/_SVN/Pas/CheckedTasks/PT4/String9.pas b/ReleaseGenerators/Samples/_SVN/Pas/CheckedTasks/PT4/String9.pas deleted file mode 100644 index 44715e324..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/CheckedTasks/PT4/String9.pas +++ /dev/null @@ -1,15 +0,0 @@ -// Пример решения задачи String9 из электронного задачника Programming Taskbook -uses PT4; -var - n: integer; - c1,c2: char; - s: string; -begin - Task('String9'); - read(n,c1,c2); - s := ''; - for var i := 1 to n div 2 do - s := s + c1 + c2; - write(s); -end. - diff --git a/ReleaseGenerators/Samples/_SVN/Pas/CheckedTasks/Robot/RBcc17.pas b/ReleaseGenerators/Samples/_SVN/Pas/CheckedTasks/Robot/RBcc17.pas deleted file mode 100644 index 59285e1a8..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/CheckedTasks/Robot/RBcc17.pas +++ /dev/null @@ -1,23 +0,0 @@ -// Выполнение задания cc17 для Робота -uses Robot; - -begin - Task('cc17'); - for var i:=6 downto 1 do - begin - for var j:=1 to i do - begin - for var k:=1 to j do - begin - Paint; - Up; - end; - for var k:=1 to j do - Down; - Right; - end; - Right; - end; - Left; -end. - diff --git a/ReleaseGenerators/Samples/_SVN/Pas/CheckedTasks/Robot/RobotMakeTask/RBMy1.pas b/ReleaseGenerators/Samples/_SVN/Pas/CheckedTasks/Robot/RobotMakeTask/RBMy1.pas deleted file mode 100644 index 79d0ecc1a..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/CheckedTasks/Robot/RobotMakeTask/RBMy1.pas +++ /dev/null @@ -1,5 +0,0 @@ -uses Robot,RobotAddTasks; - -begin - Task('my1'); -end. diff --git a/ReleaseGenerators/Samples/_SVN/Pas/CheckedTasks/Robot/RobotMakeTask/RobotAddTasks.pas b/ReleaseGenerators/Samples/_SVN/Pas/CheckedTasks/Robot/RobotMakeTask/RobotAddTasks.pas deleted file mode 100644 index 6bf966b38..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/CheckedTasks/Robot/RobotMakeTask/RobotAddTasks.pas +++ /dev/null @@ -1,18 +0,0 @@ -unit RobotAddTasks; - -uses Robot,RobotTaskMaker; - -procedure my1; -begin - TaskText('Задание my1. Закрасить помеченные клетки'); - Field(15,11); - RobotBeginEnd(1,1,15,11); - Tag(8,6); - HorizontalWall(3,5,5); - HorizontalWall(3,6,5); - VerticalWall(8,5,1); -end; - -begin - RegisterTask('my1',my1); -end. diff --git a/ReleaseGenerators/Samples/_SVN/Pas/CheckedTasks/Robot/random_Robot.pas b/ReleaseGenerators/Samples/_SVN/Pas/CheckedTasks/Robot/random_Robot.pas deleted file mode 100644 index 4ab24f209..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/CheckedTasks/Robot/random_Robot.pas +++ /dev/null @@ -1,17 +0,0 @@ - // Демонстрация использования случайных чисел для Робота. Случайное блуждание -uses Robot; - -begin - Field(50,40); - while True do - begin - var r := Random(4); - case r of - 0: if FreeFromUp then Up; - 1: if FreeFromDown then Down; - 2: if FreeFromLeft then Left; - 3: if FreeFromRight then Right; - end; - Paint; - end; -end. diff --git a/ReleaseGenerators/Samples/_SVN/Pas/LanguageFeatures/Boxing.pas b/ReleaseGenerators/Samples/_SVN/Pas/LanguageFeatures/Boxing.pas deleted file mode 100644 index 8f7eec850..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/LanguageFeatures/Boxing.pas +++ /dev/null @@ -1,22 +0,0 @@ -// Упаковка-распаковка размерных типов -var - i: integer := 2; - r: real := 3.14; - o: object; - -begin - o := i; // Упаковка: объект размерного типа integer упаковывается в объект ссылочного типа, - // котрый и присваивается переменной o - // Преобразование типов при упаковке - неявное - writeln(integer(o)); // Распаковка: из упакованного объекта извлекается значение - // Преобразование типов при распаковке - явное - o := r; - writeln(real(o)); - - try // При неверном преобразовании типов генерируется исключение InvalidCastException - writeln(shortint(o)); - except - on e: Exception do - writeln(e.GetType); - end; -end. \ No newline at end of file diff --git a/ReleaseGenerators/Samples/_SVN/Pas/LanguageFeatures/ClassConstructor.pas b/ReleaseGenerators/Samples/_SVN/Pas/LanguageFeatures/ClassConstructor.pas deleted file mode 100644 index c9f9d8d3c..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/LanguageFeatures/ClassConstructor.pas +++ /dev/null @@ -1,36 +0,0 @@ -// Иллюстрация использования статических (классовых) конструкторов -type - Person = class - private - class arr: array of Person; // Классовое поле. Связано не с переменной класса, а с классом. - name: string; - age: integer; - public - class constructor; // Конструктор класса. Вызывается до создания первого объекта класса и до вызова любого классового метода - begin - writeln(' Вызван классовый конструктор'); - SetLength(arr,3); - arr[0] := new Person('Иванов',20); - arr[1] := new Person('Петрова',19); - arr[2] := new Person('Попов',35); - end; - constructor (n: string; a: integer); - begin - name := n; - age := a; - end; - function ToString: string; override; - begin - Result := Format('Имя: {0} Возраст: {1}',name,age); - end; - class function RandomPerson: Person; // Классовый метод. Может обращаться только к классовым полям - begin - Result := arr[Random(3)]; - end; - end; - -begin - writeln('Случайные персоны'); - for var i:=1 to 5 do - writeln(Person.RandomPerson); // Вызов классового метода -end. \ No newline at end of file diff --git a/ReleaseGenerators/Samples/_SVN/Pas/LanguageFeatures/DllTest/MyDll.dll b/ReleaseGenerators/Samples/_SVN/Pas/LanguageFeatures/DllTest/MyDll.dll deleted file mode 100644 index 9a9c8f82715d6198e732ca50e3316357d55290ce..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 16384 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 - -begin - for var i:=1 to n do - a[i] := Random(100); - // Цикл foreach по статическому массиву - foreach x in a do - write(x,' '); - writeln; - - SetLength(b,n); - for var i:=0 to n-1 do - b[i] := Random(100); - - // Цикл foreach по динамическому массиву - foreach x in b do - write(x,' '); - writeln; - - s := [2..5,10..14]; - foreach x in s do - write(x,' '); - writeln; - - l := new List; - l.AddRange(b); - l.Reverse; - foreach x in l do - write(x,' '); - writeln; - -end. \ No newline at end of file diff --git a/ReleaseGenerators/Samples/_SVN/Pas/LanguageFeatures/ForeachForSet.pas b/ReleaseGenerators/Samples/_SVN/Pas/LanguageFeatures/ForeachForSet.pas deleted file mode 100644 index 5044ff296..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/LanguageFeatures/ForeachForSet.pas +++ /dev/null @@ -1,5 +0,0 @@ -// Цикл по множеству. Порядок - не по алфавиту, поскольку множества реализованы на базе хеш-таблиц -begin - foreach c: char in ['a'..'z'] do - Write(c); -end. \ No newline at end of file diff --git a/ReleaseGenerators/Samples/_SVN/Pas/LanguageFeatures/ForeachIEnumerable.pas b/ReleaseGenerators/Samples/_SVN/Pas/LanguageFeatures/ForeachIEnumerable.pas deleted file mode 100644 index b30140fa1..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/LanguageFeatures/ForeachIEnumerable.pas +++ /dev/null @@ -1,51 +0,0 @@ -// Пример иллюстрирует реализацию классом интерфейса IEnumerable -// для использования его в операторе foreach -uses System.Collections; - -type - // Генератор чисел Фибоначчи - FibGen = class(IEnumerable, IEnumerator) - private - a,b,n,i: integer; - public - constructor Create(n: integer); - begin - i := -1; - a := 0; - b := 1; - Self.n := n; - end; - function Get_Current: Object; - begin - if i=0 then - Result := 1 - else Result := b; - end; - function GetEnumerator: IEnumerator; - begin - Result := Self; - end; - function MoveNext: boolean; - begin - i += 1; - Result := i = class - private - a: array of T; - last: integer; - public - constructor Create(sz: integer); - begin - SetLength(a,sz); - last := 0; - end; - constructor Create; - begin - Create(100); - end; - procedure push(i: T); - begin - a[last] := i; - Inc(last); - end; - function pop: T; - begin - Dec(last); - pop := a[last]; - end; - function top: T; - begin - top := a[last-1]; - end; - function empty: boolean; - begin - Result := (last=0); - end; - function ToString: string; override; - begin - Result := ''; - for var i:=0 to last-1 do - Result += a[i]+' '; - end; - end; - -var s: Stack; - -begin - s := new Stack; - s.push(7); - s.push(2); - s.push(5); - s.push(4); - writeln(s); - while not s.empty do - write(s.pop,' '); -end. - - diff --git a/ReleaseGenerators/Samples/_SVN/Pas/LanguageFeatures/Generics/GenericProcFun/FindT.pas b/ReleaseGenerators/Samples/_SVN/Pas/LanguageFeatures/Generics/GenericProcFun/FindT.pas deleted file mode 100644 index 09eea2c38..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/LanguageFeatures/Generics/GenericProcFun/FindT.pas +++ /dev/null @@ -1,21 +0,0 @@ -// Обобщенные функции -// Выведение типа T по типам параметров - -function IndexOf(a: array of T; val: T): integer; -begin - Result := -1; - for var i:=0 to a.Length-1 do - if a[i]=val then - begin - Result := i; - exit; - end; -end; - -var a: array of string := ('Ваня', 'Коля', 'Саша', 'Сережа'); - -begin - var s := 'Сережа'; - writelnFormat('Индекс элемент со значением ''{0}'' равен {1}',s,IndexOf(a,s)); -end. - diff --git a/ReleaseGenerators/Samples/_SVN/Pas/LanguageFeatures/Generics/GenericProcFun/SwapT.pas b/ReleaseGenerators/Samples/_SVN/Pas/LanguageFeatures/Generics/GenericProcFun/SwapT.pas deleted file mode 100644 index f8b0bcae9..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/LanguageFeatures/Generics/GenericProcFun/SwapT.pas +++ /dev/null @@ -1,17 +0,0 @@ -// Обобщенные функции -// Выведение типа T по типам параметров - -procedure Swap(var a,b: T); -begin - var v := a; - a := b; - b := v; -end; - -begin - var a := 2; - var b := 3; - writelnFormat('До Swap a={0}, b={1}',a,b); - Swap(a,b); - writelnFormat('После Swap a={0}, b={1}',a,b); -end. \ No newline at end of file diff --git a/ReleaseGenerators/Samples/_SVN/Pas/LanguageFeatures/IndexProperties.pas b/ReleaseGenerators/Samples/_SVN/Pas/LanguageFeatures/IndexProperties.pas deleted file mode 100644 index 7b35e9e54..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/LanguageFeatures/IndexProperties.pas +++ /dev/null @@ -1,76 +0,0 @@ -// Индексные свойства. Массив цветных квадратов -uses GraphABC; - -const - sz = 50; - dim = 10; - delay = 500; - -type - /// - VisualArray = class - private - a: array of Color; - procedure SetItem(i: integer; x: Color); // Процедура, устанавливающая цвет i-того квадрата - begin - if (i<0) or (i>=a.Length) then - raise new System.ArgumentException('Выход за границы изменения индекса: '+IntToStr(i)); - a[i] := x; - Draw(i); - end; - function GetItem(i: integer): Color; // Функция, возвращающая цвет i-того квадрата - begin - if (i<0) or (i>=a.Length) then - raise new System.ArgumentException('Выход за границы изменения индекса: '+IntToStr(i)); - Result := a[i]; - end; - public - constructor (n: integer); - begin - SetLength(a,n); - for var i:=0 to n-1 do - a[i] := clWhite; - Draw; - end; - /// Рисует i-тый квадрат - procedure Draw(i: integer); - begin - Brush.Color := a[i]; - Rectangle(sz+sz*i,sz,sz+sz*(i+1)+1,sz+sz); - end; - /// Рисует массив цветных квадратов - procedure Draw; - begin - for var i:=0 to a.Length-1 do - Draw(i); - end; - /// Индексное свойство по умолчанию - property Item[i: integer]: Color read GetItem write SetItem; default; - end; - -var arr: VisualArray; - -begin - Window.Title := 'Иллюстрация индексных свойств'; - arr := new VisualArray(dim); - SetWindowSize(sz*(dim+2),3*sz); - arr[0] := clGreen; // arr.Items[0] = arr[0] поскольку свойство Items является свойством по умолчанию - Sleep(delay); - arr[1] := clBlack; - Sleep(delay); - arr[2] := clYellow; - Sleep(delay); - arr[3] := clGray; - Sleep(delay); - arr[4] := clRed; - Sleep(delay); - arr[5] := clMagenta; - Sleep(delay); - arr[6] := clBrown; - Sleep(delay); - arr[7] := clMoneyGreen; - Sleep(delay); - arr[8] := clOlive; - Sleep(delay); - arr[9] := clLinen; -end. \ No newline at end of file diff --git a/ReleaseGenerators/Samples/_SVN/Pas/LanguageFeatures/ParamsConcat.pas b/ReleaseGenerators/Samples/_SVN/Pas/LanguageFeatures/ParamsConcat.pas deleted file mode 100644 index 6f66ceed6..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/LanguageFeatures/ParamsConcat.pas +++ /dev/null @@ -1,13 +0,0 @@ -// Создание функции Concat с переменным числом параметров - -function Concat(params strs: array of string): string; -begin - var sb := new System.Text.StringBuilder; - foreach x: string in strs do - sb.Append(x); - Result := sb.ToString; -end; - -begin - Writeln(Concat('Pascal','ABC','.NET')); -end. \ No newline at end of file diff --git a/ReleaseGenerators/Samples/_SVN/Pas/LanguageFeatures/ParamsWriteln.pas b/ReleaseGenerators/Samples/_SVN/Pas/LanguageFeatures/ParamsWriteln.pas deleted file mode 100644 index e31fc4699..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/LanguageFeatures/ParamsWriteln.pas +++ /dev/null @@ -1,17 +0,0 @@ -// Создание процедуры MyWriteln с переменным числом параметров - -procedure MyWriteln(params args: array of object); -begin - foreach x: Object in args do - System.Console.Write(x); - System.Console.WriteLine; -end; - -var - a: integer := 777; - b: boolean := True; - r: real := 3.1415; - -begin - MyWriteln(a,' ',b,' ',r); -end. \ No newline at end of file diff --git a/ReleaseGenerators/Samples/_SVN/Pas/LanguageFeatures/ProcParam.pas b/ReleaseGenerators/Samples/_SVN/Pas/LanguageFeatures/ProcParam.pas deleted file mode 100644 index 5a77aa708..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/LanguageFeatures/ProcParam.pas +++ /dev/null @@ -1,27 +0,0 @@ -// Иллюстрация процедурных переменных как параметров подпрограмм -// Для процедурного типа в PascalABC.NET реализована структурная эквивалентность типов -// Процедурный тип реализован через делегаты .NET -procedure for_each(var a: array of real; p: procedure(var r: real)); -var i: integer; -begin - for i := 0 to a.Length-1 do - p(a[i]); -end; - -procedure mult2(var r: real); -begin - r := 2*r -end; - -procedure print(var r: real); -begin - write(r,' '); -end; - -var a: array of real := (1,2,3,6,7); - -begin - for_each(a,print); writeln; - for_each(a,mult2); - for_each(a,print); -end. \ No newline at end of file diff --git a/ReleaseGenerators/Samples/_SVN/Pas/LanguageFeatures/ProcVars.pas b/ReleaseGenerators/Samples/_SVN/Pas/LanguageFeatures/ProcVars.pas deleted file mode 100644 index 6a4e88dd5..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/LanguageFeatures/ProcVars.pas +++ /dev/null @@ -1,36 +0,0 @@ -// Все возможные способы инициализации поцедурной переменной -// Процедурный тип реализован через делегаты .NET, для него доступны операции +=, -= - -procedure pp; -begin - writeln('Вызов обычной процедуры'); -end; - -type - A = class - private - x: integer; - public - constructor Create(xx: integer); - begin - x := xx; - end; - procedure pp; - begin - writeln('Вызов метода класса, значение поля равно ',x); - end; - class procedure ppstatic; - begin - writeln('Вызов классового метода класса'); - end; - end; - -var p: procedure; - -begin - p := pp; - var a1: A := new A(5); - p += a1.pp; - p += A.ppstatic; - p; -end. \ No newline at end of file diff --git a/ReleaseGenerators/Samples/_SVN/Pas/LanguageFeatures/Students.pas b/ReleaseGenerators/Samples/_SVN/Pas/LanguageFeatures/Students.pas deleted file mode 100644 index 1bb0dc994..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/LanguageFeatures/Students.pas +++ /dev/null @@ -1,39 +0,0 @@ -//Перегрузка операторов -type - Student = class - Name: string; - Height: integer; - public - constructor(Name: string; Height: integer); - begin - Self.Name := Name; - Self.Height := Height; - end; - class function operator<(left,right: Student): boolean; - // Сравнение по росту - begin - Result := left.Height < right.Height; - end; - class function operator>(left,right: Student): boolean; - begin - Result := left.Height > right.Height; - end; - function ToString: string; override; - begin - Result := string.Format('{0} ({1})', Name, Height); - end; - end; - -var - s1,s2: Student; - -begin - s1 := new Student('Stepa Morkovkin',188); - s2 := new Student('Petya Pomidorov',180); - Writeln('s1: ',s1); - Writeln('s2: ',s2); - Writeln; - Writeln('s1(s1,s2): ',Student.operator>(s1,s2)); -end. \ No newline at end of file diff --git a/ReleaseGenerators/Samples/_SVN/Pas/LanguageFeatures/TemplatePair.pas b/ReleaseGenerators/Samples/_SVN/Pas/LanguageFeatures/TemplatePair.pas deleted file mode 100644 index 34728301e..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/LanguageFeatures/TemplatePair.pas +++ /dev/null @@ -1,39 +0,0 @@ -// Иллюстрация шаблонов классов в стиле C++ (template) -type - /// Пара объектов - Pair = template class - public - First: T; - Second: Q; - constructor (First: T; Second: Q); - begin - Self.First := First; - Self.Second := Second; - end; - function ToString: string; override; - begin - Result := Format('({0}; {1})', First, Second); - end; - end; - - /// Пара объектов, каждый из которых можно складывать с объектом того же типа - PairForPlus = template class(Pair) - public - class function operator+(Left,Right: PairForPlus): PairForPlus; - end; - -class function PairForPlus.operator+(Left,Right: PairForPlus): PairForPlus; -begin - Result := new PairForPlus(Left.First + Right.First, Left.Second + Right.Second); -end; - -var - r: Pair := new Pair(3.14,2.8); - a,b: PairForPlus; - -begin - a := new PairForPlus(1, 'один+'); - b := new PairForPlus(2, 'два'); - Writeln(r); - Writeln(a + b); -end. \ No newline at end of file diff --git a/ReleaseGenerators/Samples/_SVN/Pas/LanguageFeatures/WriteRecord.pas b/ReleaseGenerators/Samples/_SVN/Pas/LanguageFeatures/WriteRecord.pas deleted file mode 100644 index d35db749a..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/LanguageFeatures/WriteRecord.pas +++ /dev/null @@ -1,26 +0,0 @@ -// Иллюстрация конструкторов и методов в записях -// Если переопределен метод ToString, то он вызывается при выводе объекта этого типа процедурой writeln -type - SexType = (Male, Female); - Person = record - Name: string; - Age, Weight: integer; - Sex: SexType; - constructor (Name: string; Age, Weight: integer; Sex: SexType); - begin - Self.Name := Name; - Self.Age := Age; - Self.Sex := Sex; - Self.Weight := Weight; - end; - function ToString: string; override; - begin - Result := string.Format('Имя: {0} Возраст: {1} Вес: {2} Пол: {3}', Name, Age, Weight, Sex); - end; - end; - -var p: Person := new Person('Иванов',20,70,SexType.Male); - -begin - writeln(p); -end. diff --git a/ReleaseGenerators/Samples/_SVN/Pas/NETLibraries/System.Array/SystemArray1.pas b/ReleaseGenerators/Samples/_SVN/Pas/NETLibraries/System.Array/SystemArray1.pas deleted file mode 100644 index 2bce6941d..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/NETLibraries/System.Array/SystemArray1.pas +++ /dev/null @@ -1,37 +0,0 @@ -Uses System, PABCSystem; - -const Size = 10; - -procedure PrintArray(a: array of T); -begin - foreach v: T in a do - Write(v, ' '); - Writeln; -end; - -var a: array of integer; - -begin - SetLength(a, Size); - // Заполнение массива - for var i:=0 to a.Length-1 do - a[i] := Random(100); - - // Вывод всех элементов массива - PrintArray(a); - - // Сортировка массива (знак & используется для того, - // чтобы воспользоваться ключевым словом array при обозначении класса Array) - &Array.Sort(a); - - PrintArray(a); - - // Обращение массива - &Array.Reverse(a); - - PrintArray(a); - - // Поиск вхождения элемента в массив - var i := &Array.IndexOf(a, 99); - Writeln(i); -end. \ No newline at end of file diff --git a/ReleaseGenerators/Samples/_SVN/Pas/NETLibraries/System.DateTime/DateTime1.pas b/ReleaseGenerators/Samples/_SVN/Pas/NETLibraries/System.DateTime/DateTime1.pas deleted file mode 100644 index 9832b1c44..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/NETLibraries/System.DateTime/DateTime1.pas +++ /dev/null @@ -1,32 +0,0 @@ -Uses System; - -var - d1, d2, d3: DateTime; // Объекты для хранения даты и времени - ts: TimeSpan; // Объект для хранения промежутков времени - -begin - // Получение текущей даты - вызов статического метода - d1 := DateTime.Now; - Writeln(d1); - - // Дата и время через один месяц - d2 := d1.AddMonths(1); - Writeln(d2); - - // Дата и время на 12 часов раньше - d2 := d1.AddHours(-12); - Writeln(d2); - - // Формирование даты - вызов конструктора объекта (год, месяц,число) - d3 := new DateTime(2001, 1, 1); - Writeln(d3); - - // Определение времени, прошедшего с начала тысячелетия (разность дат) - ts := d1.Subtract(d3); - - // Промежуток времени в днях (результат - вещественное число) - Writeln(ts.TotalDays); - - // Промежуток времени в днях, часах, минутах и секундах - WritelnFormat('{0} {1}:{2}:{3}',ts.Days,ts.Hours,ts.Minutes,ts.Seconds); -end. \ No newline at end of file diff --git a/ReleaseGenerators/Samples/_SVN/Pas/NETLibraries/System.DateTime/DateTime2.pas b/ReleaseGenerators/Samples/_SVN/Pas/NETLibraries/System.DateTime/DateTime2.pas deleted file mode 100644 index f444870fc..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/NETLibraries/System.DateTime/DateTime2.pas +++ /dev/null @@ -1,34 +0,0 @@ -Uses System; - -var - d: DateTime; - s: string; - -begin - s := '27.03.2008 9:58:17'; - //Попытка преобразования строки в объект DateTime - if not DateTime.TryParse(s, d) then - begin - Writeln('Строка не содержит значение даты и времени'); - Exit; - end; - - // Проверка високосности заданного года с помощью статического метода - if DateTime.IsLeapYear(d.Year) then - Writeln('Год високосный') - else - Writeln('Год невисокосный'); - - // Преобразование даты и времени в строковое представление - s := d.ToString; - Writeln(s); - - // Преобразование даты в строковое представление - s := d.ToShortDateString; - Writeln(s); - - // Преобразование времени в строковое представление - s := d.ToShortTimeString; - Writeln(s); - -end. \ No newline at end of file diff --git a/ReleaseGenerators/Samples/_SVN/Pas/NETLibraries/System.DateTime/DateTimeInterval.pas b/ReleaseGenerators/Samples/_SVN/Pas/NETLibraries/System.DateTime/DateTimeInterval.pas deleted file mode 100644 index b7afdf928..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/NETLibraries/System.DateTime/DateTimeInterval.pas +++ /dev/null @@ -1,16 +0,0 @@ -// Работа с классом System.DateTime -// Вычисление времени выполнения фрагмента кода - -uses System, PABCSystem; - -var dt: DateTime := DateTime.Now; - -begin - // Делаем случайную паузу - var ms := Random(1000); - Writeln('Sleep','(',ms,')'); - Sleep(ms); - - // Сравниваем с показаниями DateTime.Now - Writeln((DateTime.Now-dt).TotalMilliseconds,'ms'); -end. \ No newline at end of file diff --git a/ReleaseGenerators/Samples/_SVN/Pas/NETLibraries/System.String/StringConvert.pas b/ReleaseGenerators/Samples/_SVN/Pas/NETLibraries/System.String/StringConvert.pas deleted file mode 100644 index fe2a5b8a6..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/NETLibraries/System.String/StringConvert.pas +++ /dev/null @@ -1,25 +0,0 @@ -var - s: string; - i: integer; - r: real; - -begin - // Преобразование строки в число - s := '123,3443'; // Дробная часть отделяется запятой - настройки Windows - if not real.TryParse(s, r) then - Writeln('Строка s не является строковым представлением вещественного числа') - else Writeln(r); - - if not integer.TryParse(s, i) then - Writeln('Строка s не является строковым представлением целого числа'); - - // Преобразование числа в строку - i := 10; - s := i.ToString; - Writeln(s); - - s := ''; - for i:=1 to 9 do - s += i.ToString; - Writeln(s); -end. \ No newline at end of file diff --git a/ReleaseGenerators/Samples/_SVN/Pas/NETLibraries/System.String/StringMethods1.pas b/ReleaseGenerators/Samples/_SVN/Pas/NETLibraries/System.String/StringMethods1.pas deleted file mode 100644 index b0db02e3c..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/NETLibraries/System.String/StringMethods1.pas +++ /dev/null @@ -1,30 +0,0 @@ -var s1,s2: string; - -begin - // Определение длины строки - s1 := 'ABCDEFGH'; - Writeln(s1.Length); - - // Сравнение строк без учета регистра символов - s1 := 'AAA'; - s2 := 'aaa'; - if String.Compare(s1, s2, {ignoreCase - без учета регистра} true) = 0 then - Writeln('Строки совпадают с точностью до регистра букв'); - - // Определение вхождений подстрок - s1 := 'Long string'; - s2 := 'string'; - if s1.EndsWith(s2) then - Writeln('В конце строки s1 содержится подстрока, совпадающая с s2'); - - // Поиск индекса вхождения подстроки в строку - Writeln(s1.IndexOf(s2)); - - // Извлечение подстрок - s1 := 'ABCDEFGH'; - s2 := s1.Substring( {начальная_позиция = } 3); - Writeln(s2); - - s2 := s1.Substring(3, {длина_подстроки = } 2); - Writeln(s2); -end. \ No newline at end of file diff --git a/ReleaseGenerators/Samples/_SVN/Pas/NETLibraries/System.String/StringMethods2.pas b/ReleaseGenerators/Samples/_SVN/Pas/NETLibraries/System.String/StringMethods2.pas deleted file mode 100644 index 13cc3e57e..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/NETLibraries/System.String/StringMethods2.pas +++ /dev/null @@ -1,37 +0,0 @@ -var s1,s2: string; - -begin - // Извлечение подстрок - s1 := 'ABCDEFGH'; - s2 := s1.Substring( {начальная_позиция = } 3); - Writeln(s2); - - s2 := s1.Substring(3, {длина_подстроки = } 2); - Writeln(s2); - - // Вставка, удаление и замена подстрок - s1 := 'ABCDEFGH'; - s2 := s1.Insert(2, 'xxx'); - Writeln(s2); - - s2 := s2.Replace('x', '!'); - Writeln(s2); - - s2 := s2.Remove(2, 3); - Writeln(s2); - - s1 := 'слово слово слово'; - s2 := s1.Replace('слов', 'молок'); - Writeln(s2); - - // Удаление пробельных символов в концах строки - s1 := ' xxx xxx '; - Writeln('|', s1, '|'); - s1 := s1.Trim; - Writeln('|', s1, '|'); - - // Смена регистра символов - s1 := 'абвгд'; - s1 := s1.ToUpper; - Writeln(s1); -end. \ No newline at end of file diff --git a/ReleaseGenerators/Samples/_SVN/Pas/NETLibraries/System.String/StringSplit.pas b/ReleaseGenerators/Samples/_SVN/Pas/NETLibraries/System.String/StringSplit.pas deleted file mode 100644 index 184c12c2e..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/NETLibraries/System.String/StringSplit.pas +++ /dev/null @@ -1,26 +0,0 @@ -uses System; - -var - str_arr: array of string; - int_arr: array of integer; - s: string := '12 765 765 76'; - -begin - // Разбиение строки на массив подстрок с заданным разелителем - str_arr := s.Split(' '); - - // Соединение массива подстрок с новым разделителем - s := string.Join('+', str_arr); - Write(s, '='); - - // Формирование целочисленного массива по массиву подстрок - SetLength(int_arr, str_arr.Length); - for var i:=0 to int_arr.Length-1 do - integer.TryParse(str_arr[i], int_arr[i]); - - // Вычисление суммы элементов целочисленного массива - var sum := 0; - foreach v: integer in int_arr do - sum += v; - Writeln(sum); -end. \ No newline at end of file diff --git a/ReleaseGenerators/Samples/_SVN/Pas/NETLibraries/System.Timers.Timer/SystemTimer.pas b/ReleaseGenerators/Samples/_SVN/Pas/NETLibraries/System.Timers.Timer/SystemTimer.pas deleted file mode 100644 index 8223bd886..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/NETLibraries/System.Timers.Timer/SystemTimer.pas +++ /dev/null @@ -1,31 +0,0 @@ -//События, +=, -=, демонстрация работы таймера System.Timers.Timer -uses System; - -var Timer:System.Timers.Timer; - x:integer; - exit:boolean; - -procedure OnTimer2(sender:object; e:System.Timers.ElapsedEventArgs); -begin - Writeln(x); - x:=x+1; - exit:=x>=10; -end; -procedure OnTimer1(sender:object; e:System.Timers.ElapsedEventArgs); -begin - Writeln(e.SignalTime); - x:=x+1; - if x>=5 then begin - Timer.Elapsed-=OnTimer1; - Timer.Elapsed+=OnTimer2; - end; -end; - -begin - Exit:=false; - Timer:=System.Timers.Timer.Create(1000); - Timer.Elapsed+=OnTimer1; - Timer.Start; - while not exit do - Sleep(Round(Timer.Interval)); -end. \ No newline at end of file diff --git a/ReleaseGenerators/Samples/_SVN/Pas/NETLibraries/System.Windows.Forms/FormWebBrowser.pas b/ReleaseGenerators/Samples/_SVN/Pas/NETLibraries/System.Windows.Forms/FormWebBrowser.pas deleted file mode 100644 index 840d6506d..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/NETLibraries/System.Windows.Forms/FormWebBrowser.pas +++ /dev/null @@ -1,17 +0,0 @@ -// Иллюстрация использования компонента WebBrowser -{$apptype windows} -{$reference System.Windows.Forms.dll} - -uses - System.Windows.Forms, - System.Net; - -begin - var myForm := new Form; - var w := new WebBrowser; - w.Url := new System.Uri('http://pascalabc.net'); - w.Dock := Dockstyle.Fill; - myForm.Controls.Add(w); - myForm.WindowState := FormWindowState.Maximized; - Application.Run(myForm); -end. diff --git a/ReleaseGenerators/Samples/_SVN/Pas/NETLibraries/System.Windows.Forms/MouseDraw.pas b/ReleaseGenerators/Samples/_SVN/Pas/NETLibraries/System.Windows.Forms/MouseDraw.pas deleted file mode 100644 index 139865687..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/NETLibraries/System.Windows.Forms/MouseDraw.pas +++ /dev/null @@ -1,52 +0,0 @@ -// Рисование мышью на форме. Иллюстрация Windows.Forms, событий -{$apptype windows} -{$reference System.Windows.Forms.dll} -{$reference System.Drawing.dll} - -uses - System, - System.Drawing, - System.Windows.Forms; - -type - MyForm = class(Form) - private - g: Graphics; - // Предыдущие координаты мыши - x,y: integer; - public - constructor; - begin - Size := new System.Drawing.Size(640,480); - StartPosition := FormStartPosition.CenterScreen; - Text := 'Рисование мышью на форме'; - // Привязка обработчиков к событиям - MouseDown += OnMouseDown; - MouseMove += OnMouseMove; - Resize += OnResize; - g := Graphics.FromHwnd(Handle); - end; - procedure OnMouseDown(sender: object; e: MouseEventArgs); - begin - x := e.x; - y := e.y; - end; - procedure OnMouseMove(sender: object; e: MouseEventArgs); - begin - if e.Button = System.Windows.Forms.MouseButtons.Left then - begin - g.DrawLine(new Pen(Color.FromARGB(PABCSystem.Random(255),PABCSystem.Random(255),PABCSystem.Random(255))),x,y,e.x,e.y); - x := e.x; - y := e.y; - writeln(e.x,' ',e.y); - end; - end; - procedure OnResize(sender: object; e: EventArgs); - begin - g := Graphics.FromHwnd(Handle); - end; - end; - -begin - Application.Run(new MyForm); -end. \ No newline at end of file diff --git a/ReleaseGenerators/Samples/_SVN/Pas/NETLibraries/System.Windows.Forms/TextEditor/Open.png b/ReleaseGenerators/Samples/_SVN/Pas/NETLibraries/System.Windows.Forms/TextEditor/Open.png deleted file mode 100644 index 6380ba958a4ddd329c54bf7889bb2a9aab4979ca..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 575 zcmV-F0>J%=P)Px#1ZP1_K>z@;j|==^1poj5AY({UO#lFTCIA3{ga82g0001h=l}q9FaQARU;qF* zm;eA5aGbhPJOBUy7j#8fbW?9;ba!ELWdKlNX>N2bPDNB8b~7$8%`aC*0004+Nklv~Kd7hyhs4tq1&Kux!!<+FVvaa%q7_O{_bEOxY23|Evt#E&P_N~b~ z91Q57Bd86t0pc`B11w4TxB6nhDc+!#DHT}FUbLif>K1hq z-=-hhL|o5R${SP@I!rr3MGbxujmG2IL5Aaly_Nx)Fl>fo;19J%uyk)TV3NTNQ&c*^ zZf64zcOx>OI*w*uNVm0t2T2T?)Wfb!AiDxb`#XM_!N7*<*3{`O5GJHD=mrUFKSsVT zFq>Wn173zTt=a3uCbb4DEnrpb(>vQ+AFncRk{_ilX)!8lWa!>dS}B8cPe2vIrw>j~ z77dilA$z1ELy>35H&bNmDblqBNg|L40kIk*j$;T?`_=x_$MoCR`UZwPyEDh!r5^wQ N002ovPDHLkV1iw7<#qr7 diff --git a/ReleaseGenerators/Samples/_SVN/Pas/NETLibraries/System.Windows.Forms/TextEditor/Save.png b/ReleaseGenerators/Samples/_SVN/Pas/NETLibraries/System.Windows.Forms/TextEditor/Save.png deleted file mode 100644 index 8262de3ae8ebd479949957dcb6c377ebeeb9bba0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 535 zcmV+y0_gpTP)Px#1ZP1_K>z@;j|==^1poj5AY({UO#lFTCIA3{ga82g0001h=l}q9FaQARU;qF* zm;eA5aGbhPJOBUy7j#8fbW?9;ba!ELWdKlNX>N2bPDNB8b~7$8%`aC*0004UNkl_f>5N!XTpTH-aL`EVbk&(zqWF#^Y8HtQUMj}sEMpj1FZD;m?3s*4hzBljQ zyJTi}X7es0Z~rO^k#w!k0LIC!oc*2jMqPYrySc>2>|GlpEEn>Gt z+%_wI3mn=@Hp#6uF}BDsI0$tD2_tg?j`*x@2g~Zo<0k|* zS^Yl>AS@M_g1Og{T*fLZlf>;70!*3$Jh;^}a=BFbSVO=Su^UZ%+Cs#N%2}{Vh&ZV8 z0@BvN;F)8y^PSAIUV!0cgi0i26JwKrjZAy5YRzLh?F_Po=%WB0Mn27CyY;x(!FkvV z9T@^9%og~v`pzWddCOpoF!`}Iar=O->`Zc62w=o?#5=f-O#zbqK1v0d`}ZN@ABk!D zuKNk#PkqDlih&IVffhw6qm&ERW|gSGCd}H;7PtwwV?bFS$Q?+UVJYC5T_<3|r2s|# Zf*-~>!i>FQ^x6Ob002ovPDHLkV1m|L*`ELa diff --git a/ReleaseGenerators/Samples/_SVN/Pas/NETLibraries/System.Windows.Forms/TextEditor/TextEditor.pas b/ReleaseGenerators/Samples/_SVN/Pas/NETLibraries/System.Windows.Forms/TextEditor/TextEditor.pas deleted file mode 100644 index c544ac9d8..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/NETLibraries/System.Windows.Forms/TextEditor/TextEditor.pas +++ /dev/null @@ -1,91 +0,0 @@ -{$apptype windows} -{$reference System.Windows.Forms.dll} -{$reference System.Drawing.dll} -{$resource Open.png} -{$resource Save.png} - -uses System.Windows.Forms; - -const - TextFileExt = 'txt'; - TextFileFilter = 'Текстовые файлы (*.'+TextFileExt+')|*.'+TextFileExt; - -var - myForm: Form; - TextBox1: TextBox; - -procedure SaveFile(FileName: string); -begin - //Создаем файловый поток с кодировкой Windows 1251, необходимо для корректного сохранения русских букв - var f := new System.IO.StreamWriter(FileName, false, System.Text.Encoding.Default); - f.Write(TextBox1.Text); - f.Close; -end; - -procedure OpenFile(FileName: string); -begin - //Создаем файловый поток с кодировкой Windows 1251, необходимо для корректного чтения русских букв - var f := new System.IO.StreamReader(FileName, System.Text.Encoding.Default); - TextBox1.Text := f.ReadToEnd; - f.Close; -end; - -procedure FormClose(sender: object; args: System.EventArgs); -begin - myForm.Close; -end; - -procedure MenuSaveClick(sender:object; args:System.EventArgs); -begin - //Диалог для выбора файла - var sd := new SaveFileDialog; - //Расширение поумолчанию - sd.DefaultExt := TextFileExt; - //Фильтр для диалга - sd.Filter := TextFileFilter; - if sd.ShowDialog=DialogResult.OK then - //если результат выполнения sd.ShowDialog это нажатие кнопки подтверждения то - SaveFile(sd.FileName); -end; - -procedure MenuOpenClick(sender:object; args:System.EventArgs); -begin - var sd := new OpenFileDialog; - sd.DefaultExt := TextFileExt; - sd.Filter := TextFileFilter; - if sd.ShowDialog = DialogResult.OK then - OpenFile(sd.FileName); -end; - -begin - myForm := new Form; - myForm.Text := 'Простой текстовый редактор'; - - TextBox1 := new TextBox; - TextBox1.Multiline := True; - TextBox1.Height := 100; - TextBox1.Dock := DockStyle.Fill; - //Полосы прокрутки - TextBox1.ScrollBars := ScrollBars.Both; - //Устанавливаем шрифт - TextBox1.Font := new System.Drawing.Font('Courier New',10); - - myForm.Controls.Add(TextBox1); - - //Создаем меню - var toolStrip1 := new ToolStrip; - toolStrip1.GripStyle := System.Windows.Forms.ToolStripGripStyle.Hidden; - var miFile := new ToolStripMenuItem('Файл'); - miFile.DropDownItems.Add(new ToolStripMenuItem('Открыть', new System.Drawing.Bitmap(GetResourceStream('Open.png')),MenuOpenClick)); - miFile.DropDownItems.Add(new ToolStripMenuItem('Сохранить как...',new System.Drawing.Bitmap(GetResourceStream('Save.png')),MenuSaveClick)); - miFile.DropDownItems.Add(new ToolStripMenuItem('Выход',nil,FormClose)); - toolStrip1.Items.Add(miFile); - myForm.Controls.Add(toolStrip1); - - //Посмотрим в аргументы командной строки - //Если их количество = 1, то открываем - if CommandLineArgs.Length = 1 then - OpenFile(CommandLineArgs[0]); - - Application.Run(myForm); -end. \ No newline at end of file diff --git a/ReleaseGenerators/Samples/_SVN/Pas/NETLibraries/System.Windows.Forms/TextEditor/Thumbs.db b/ReleaseGenerators/Samples/_SVN/Pas/NETLibraries/System.Windows.Forms/TextEditor/Thumbs.db deleted file mode 100644 index 39ac489fd6ab3cba8844dd1490df3c847444ffc0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4096 zcmca`Uhu)fjZzO8(10BSGsD0CoD6J8;*3Bx2!nwD0|OI~0pkDr|NlQkkbwcn90fxt z1pWfu3W`4vW&uVbD-eU?9K;_5!#@Oq81jLzgh7G9l_3vE7co@AvNBP$7%;`aLW!Ax zjtQK9jdp6CWCW>eV23C+B%p_oGz+j4g4qwE38{z4yFwl7%#aB5bs|F!Fci{Zk|fXq zWZ2IKG(Q4rhY<;OVN(k9KO?9N29?Fc`kx=D)*I@7m|hSUIsb#AhXaT?ftU-3xq+Am zh9G120;#BniF7VRAOKfWMmd({C|W&9_V~lpld-6h5|+=pc~oPIXJnvfeN+) zb0{M-GZPCl$kjmAwLp0W7C}}aMMFn6;lM<8r9u&-#)%6#l$|yn6b-ugLB%+!sELzH zOk6@zN>xo=LsQGd)Xdz%(#qMz)y>_*(g#sP*Y8=$?w;5vH-YvE4Ti?)eU1lZ zk58?;WXJWRab3lx*Y218Xs)!#O?&nHcjOkyQt61bOJ+WOaIDX>M1#R+!VUf&!5F*A zAG+f&?9bF^+umlw|LEC=B~ss}n(SKppP@Z%+t09yTW%9N0$81QPhw-R-DzJbWl<4Y zD(h>hpRE_)cKd$y>ut|@mYQcQz4HGiEaj0w3ox*Q%kBiAUJzCRVsJ`cmwv0hE&yD~QmNz=F+a}yOHviGw>_$e)ZK3m0dY$BBImYkXLpmg^j{6Hr+ z@>>0|A^X9GoBOhPiVm;hE65LfbSd6Ca_Q&Ywl^PaxO8~eq!p95oqYYhKFprXTnx&i T{=mGM3e26zc@&gAhXMcq_Hxb= diff --git a/ReleaseGenerators/Samples/_SVN/Pas/NETLibraries/System.Windows.Forms/WinFormWithButton.pas b/ReleaseGenerators/Samples/_SVN/Pas/NETLibraries/System.Windows.Forms/WinFormWithButton.pas deleted file mode 100644 index a0f0c2c8c..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/NETLibraries/System.Windows.Forms/WinFormWithButton.pas +++ /dev/null @@ -1,29 +0,0 @@ -// Создание оконного приложения -{$apptype windows} -{$reference System.Windows.Forms.dll} - -uses - System, - System.Windows.Forms; - -var - myForm: Form; - myButton: Button; - -procedure MyButtonClick(sender: Object; e: EventArgs); -begin - myForm.Close; -end; - -begin - myForm := new Form; - myForm.Text := 'Оконное приложение'; - myButton := new Button; - myButton.Text := ' Закрыть окно '; - myButton.AutoSize := True; - myButton.Left := 90; - myButton.Top := 110; - myForm.Controls.Add(myButton); - myButton.Click += MyButtonClick; - Application.Run(myForm); -end. diff --git a/ReleaseGenerators/Samples/_SVN/Pas/Other/SpeedTests/CalculationsGlobalLocal/BlockVars.pas b/ReleaseGenerators/Samples/_SVN/Pas/Other/SpeedTests/CalculationsGlobalLocal/BlockVars.pas deleted file mode 100644 index 4f8bcf2ab..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/Other/SpeedTests/CalculationsGlobalLocal/BlockVars.pas +++ /dev/null @@ -1,15 +0,0 @@ -// Сравнение скорости работы глобальных и внутриблочных переменных. -// См. также файл GlobalVars.pas -uses Utils; - -begin - var s := 0.0; - var i: real := 1; - while i<10000000 do - begin - s += 1/i; - i += 1; - end; - writeln(s); - writeln('Время расчета = ',Milliseconds/1000,' с'); -end. diff --git a/ReleaseGenerators/Samples/_SVN/Pas/Other/SpeedTests/CalculationsGlobalLocal/GlobalVars.pas b/ReleaseGenerators/Samples/_SVN/Pas/Other/SpeedTests/CalculationsGlobalLocal/GlobalVars.pas deleted file mode 100644 index 6cd714a35..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/Other/SpeedTests/CalculationsGlobalLocal/GlobalVars.pas +++ /dev/null @@ -1,17 +0,0 @@ -// Сравнение скорости работы глобальных и внутриблочных переменных. -// См. также файл BlockVars.pas -uses Utils; - -var - s: real := 0; - i: real := 1; - -begin - while i<10000000 do - begin - s += 1/i; - i += 1; - end; - writeln(s); - writeln('Время расчета = ',Milliseconds/1000,' с'); -end. diff --git a/ReleaseGenerators/Samples/_SVN/Pas/Other/SpeedTests/Milli.pas b/ReleaseGenerators/Samples/_SVN/Pas/Other/SpeedTests/Milli.pas deleted file mode 100644 index 92f5c8d9f..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/Other/SpeedTests/Milli.pas +++ /dev/null @@ -1,13 +0,0 @@ -// Демонстрация функции Milliseconds -uses Utils; - -const n = 5000; - -var a: array [1..n,1..n] of real; - -begin - for var i:=1 to n do - for var j:=1 to n do - a[i,j] := 1; - writeln(Milliseconds/1000); -end. diff --git a/ReleaseGenerators/Samples/_SVN/Pas/Other/UnmanagedGraphics/GraphTest.dll b/ReleaseGenerators/Samples/_SVN/Pas/Other/UnmanagedGraphics/GraphTest.dll deleted file mode 100644 index 7740869f932f5a8e75d496c84904ff8d72b7f32d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 369152 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�K*FK!xW57Ta;$wM%1fK-&kROSkdmRq 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 or (y1>max) then break; - x:=x1; - y:=y1; - end; - if i>=n then PutPixel(ix,iy,clRed) - else PutPixel(ix,iy,RGB(255,255-i,255-i)); - //writeln(RGB(255,255-i,255-i)); - end; - WaitForExit; -end. - diff --git a/ReleaseGenerators/Samples/_SVN/Pas/Other/UnmanagedGraphics/MessageBox.pas b/ReleaseGenerators/Samples/_SVN/Pas/Other/UnmanagedGraphics/MessageBox.pas deleted file mode 100644 index df7998740..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/Other/UnmanagedGraphics/MessageBox.pas +++ /dev/null @@ -1,6 +0,0 @@ -function MessageBox(h:integer;m,c:string;t:integer):integer; -external 'User32.dll' name 'MessageBox'; - -begin - MessageBox(0,'Привет!','Сообщение',0); -end. \ No newline at end of file diff --git a/ReleaseGenerators/Samples/_SVN/Pas/StandardUnits/ABCObjects/Sprites/SpriteFrames/multi1.bmp b/ReleaseGenerators/Samples/_SVN/Pas/StandardUnits/ABCObjects/Sprites/SpriteFrames/multi1.bmp deleted file mode 100644 index 72ae1e4c9fdea2f122289302692fa54459c13299..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 30054 zcmeI)TTa6;5CzaubrCFqPrg_H|Lg*>19o3kICbi_*YVBxQPJ2Jg(~B*9nY!5OA()6 zKfk;4$A^1;bD!Vy=gaQ(-2Oi2&%yk1JRNmNKmrnwfCMBU0SQPz0uqowuE1e`2uJQ% z-#-j@CuK8iZd7rl#RE4-bi3e!stbnPUU9qU1%($3*{%<)JgfGs&Tyd)!mRSMI(L8* zmtYhyc8lllsl|w3?ADV^T#E(4(kGs|%a&D&)ec>Ab;?XHzf(gp&)qUySu9$T@#e1w`gSmHqi(>y}!O>y4;Md zR`TTY)IyEKB`f=8mX*<}4b&L7p{$IX%5{^Ktn32zp4wM-E7!9P*LHsJ&ccDtvH}ni z%8KB`samcvZouGH&NUd66O&cgHkOl#%lHT6%P%#qzh&lL`&hZgRtoR_yulXtnBRMX iik?!qqKPQN30q4i5|DrdBp?9^NI(J-kbndl3j6`;>4l>J diff --git a/ReleaseGenerators/Samples/_SVN/Pas/StandardUnits/ABCObjects/Sprites/SpriteFrames/multi2.bmp b/ReleaseGenerators/Samples/_SVN/Pas/StandardUnits/ABCObjects/Sprites/SpriteFrames/multi2.bmp deleted file mode 100644 index b6e9bae3b59f375ac6a2471fdb8080a592334041..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 30054 zcmeI)L2kk@5QSliI7E-oWmi2w_q|2c8}#-F)sPU-v-6mkbP@Zn49a+HgFlS{6^YNU zpWof(?<3v6rQ7#-d)d8S`rpU=B^d9Hry~sk1Q0*~0R#|0009ILKwzoBVSkv~(z(O< zX?nV-TVZpvs&`sFadSlXPq<>&6;tjXal6+Q8?TtMT_1Voi}t=~usl!$;iBy?8r%R* zzJ;Jba9F;6OFcn^;INit^1Vb5B4hHEo9uZ=@o+$sEX7TE3ZE@5*mkD@F{!pq=5{v+ zGS@%1PAC0EmSSfoAZD96OWtFq_m&bI347C++izkqZEjYd{pS+eAB&CZl9IqmKun00 z!I2bJ0%Ag}434C*5)cz&WpE^gm4KKKD}y5`tOUe_SQ#8iVI?3Y#LD1E3M&CIAyx)Q zQdkLy39&LblEO+rOo)}ikrY+}VnVD8j-;>>5EEi$a3qD5fS3>~gCi-d1jK|5Tcxe7 z-ilw)r_S{sXyZSy&~ROu(^QwjD(;3AR&jy&Na_l!xIla)b%j-2AU-nHm1*&Hnjd*n zIvozuu7=GcL^gPa5}#t&%`XfT(Z+Hr$`m^lcwq8^N={lu_6)#rV zcjC{MRv$$*y|UGFbq4j+D|~-eBUkVr$kz{_sT!xs?C>Ib82eV53ggT*wETVWnwkc4 fF$mnyAj&>GP$UQ-fB*srAbxBmeC_n)UP=Epypa2CZKmiJD6`0ObJhsja z@o~C4saxT2v#K+#o_IK-#|>9xT`}eHipM>#NW5aoaec(jH|4%5SX^j;=BD&F1rLCe zrl1s1hNbI|)T2aDhK(eX=AuE+#H1?^*|SQq8ZabFHYrSjN3#o#-3dUz(AXxW>`EY| z{?a-|`m-$AP9q>7&6FkW0n@Dw2^`V1rcuh*v4EpA%VxhXq4Onsu)0J^&`N-SCanOD z7^0N`0Zm!~95F;I0Roz|0ytubRssYxX$5e^5Um6VXwnMch#^`D5YVI*z!5{V5+I;S zD}W=0XeB^E(}IJK5E$ac^CG(nYFwwTD&Mj9E|A{kigDM*=@B7 z>wpW5G$fK$T7_9Yc*H`&Nky?$s~CwF9Da0hD1S!pCG8bbDdp9=Dor%lPb>YCPAgjJ z1@w`uD_ZFV^pUJ9TImJ!k*==5pYn#6H493DZFpobDZ*{1DZbCz<-%49ox zd|;$``kpODTTUsOy#k|^vU=;GLYbK&DT}Jx4am9* z0{X|%-#PFe)Zc^MZo|=wDv^a^j!YT;7;0r~dk z(^X@vOoJ!do6)vXEDX;Tj`Zi?Z72rwBnaHmNR+&JV3AOO0u-PC1t>rP3Q&Lo6xc)H E4_cF#D*ylh diff --git a/ReleaseGenerators/Samples/_SVN/Pas/StandardUnits/ABCObjects/Sprites/SpriteFrames/multi4.bmp b/ReleaseGenerators/Samples/_SVN/Pas/StandardUnits/ABCObjects/Sprites/SpriteFrames/multi4.bmp deleted file mode 100644 index e097634893495527cc8c9f4602e6d42413f69fe7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 30054 zcmeI&L2kk@5QSlia)=(G%dUEW?t6=>H|XsnR0jw1ltkkvl5UtEnP|dHBjsb9I>6`G z&+qB__$b@A^8B8kFQ?b*>+f^^x-)Oa%g8_g0R#|0009ILKmY**5ZEuEw^}9E0|qHA z%Neh&aymF?jg_NRYp}w~7w{|TE3AA0zmmSf$`|k}=_{;!0l$*I!pax$E9on&d;!0b zzH+RF^AHT@2zhD>)Oa2@$CTpd79xO^-w#+}esL#4%Q}k7lt_jX1_C_R%a>su9On#XgH{<8tl? zTk+x`Np{=mW7U1fvFZ}F0<0QEH^8b()C#a_6x{%;E>SDMs!?OT&ljuMN3&R|MjT@m`)C#`)re!PVjs<7r5bUJRqUhLVigRnOdj8r zF2k@GH^bya_4FsGh0o@0?q4I%?X)Sg`C`3o%y(Dlw$mCdUxQ&~UV$Hns%@60we~_~ z;=;-r@VC#ta$pYnbMUZf`0PzpNsnnQthiXMK1JEv zS~;4kUD+PzN(Qy-3ZKtv<}yD(zAZjWH@4197`T%$w^D12iK~wF|G`_T6%$l}I~qi* Y#RE-(00IagfB*srAbge@A6jCL0RR91 diff --git a/ReleaseGenerators/Samples/_SVN/Pas/StandardUnits/ABCObjects/Sprites/SpriteFrames/multi5.bmp b/ReleaseGenerators/Samples/_SVN/Pas/StandardUnits/ABCObjects/Sprites/SpriteFrames/multi5.bmp deleted file mode 100644 index 727d8217091d012c13c0903891becbff469b0134..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 30054 zcmeI&L2iRU429t|;t)MTmtFM$-S-w%Z_wMLsFMtFo&b3qK&mwUD}oF*Nb|)*AnE7V z&+qB>_fghw<@G(iUQVyK{qIx$wlS^7%gBNN0tg_000IagfB*srAh2IRAGJ!XCv;L; zmN2d|I`HKl&8CfK9i-iibZ_-k&pcJ!8Qq4lZ#bkIv@-VK@Z*);;H(bB zckr{TC+vRb(qy@(dxXdUhx6bpku&6}DNy5iTwSgyemW5Wtm6HE6;^S9cqM)1Ta{Y^ zD+pTYA$DwrKnISM|Bhqj`)C#`)$n7id>_qXr5b*WmG7fjtW?8~vGRR1i2h zX0cKYKgP=UnPrVD@;qq8vy&v*wBcjbe8;hB5?KLOM$rtgY7$uiRz}ebuxb)n0aixQ z46tevX+hyCH&_1s)l?wAQ|lSB#lBTG4S&2?`97M(N;Ui#E8j=6SgD2|W99p37Aw{8 zW2}51%@!+X(aPlUL+LUMv*m7>oTv`}3N`at-OT;p$WuG5%B=3JkB#}B3Zw0`M9bG; zSOu@Z+o5WkrD?6bP?@-}3eLV#hE>q&7^oc65UXHQ9X0{!t11v*_kQQV9E{Jw!=_>H zO;t&cX)Ua{SS`Lq+1pwh48AAPo&*#H0l diff --git a/ReleaseGenerators/Samples/_SVN/Pas/StandardUnits/ABCObjects/Sprites/gr_SpriteCreation.pas b/ReleaseGenerators/Samples/_SVN/Pas/StandardUnits/ABCObjects/Sprites/gr_SpriteCreation.pas deleted file mode 100644 index efe2a13cd..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/StandardUnits/ABCObjects/Sprites/gr_SpriteCreation.pas +++ /dev/null @@ -1,29 +0,0 @@ -// Создание спрайта и его состояний -uses GraphABC,ABCSprites,ABCObjects,Events; - -var s: SpriteABC; - -begin - Window.Title := 'Создание спрайта'; - SetWindowSize(400,300); - CenterWindow; - - // Создание спрайта и добавление в него кадров - s := new SpriteABC(150,100,'SpriteFrames\multi1.bmp'); - s.Add('SpriteFrames\multi2.bmp'); - s.Add('SpriteFrames\multi3.bmp'); - s.Add('SpriteFrames\multi2.bmp'); - s.Add('SpriteFrames\multi4.bmp'); - s.Add('SpriteFrames\multi5.bmp'); - - // Добавление состояний к спрайту - s.AddState('fly',4); // Летать - 4 кадра - s.AddState('stand',1); // Стоять - 1 кадр - s.AddState('sit',1); // Сидеть - 1 кадр - - // Задание скорости спрайт-анимации (1..10) - s.Speed := 9; - - // Сохранение спрайта в "длинный" рисунок и создание информационного файла спрайта - s.SaveWithInfo('spr.png'); -end. \ No newline at end of file diff --git a/ReleaseGenerators/Samples/_SVN/Pas/StandardUnits/ABCObjects/Sprites/gr_SpriteUsing.pas b/ReleaseGenerators/Samples/_SVN/Pas/StandardUnits/ABCObjects/Sprites/gr_SpriteUsing.pas deleted file mode 100644 index df48901ad..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/StandardUnits/ABCObjects/Sprites/gr_SpriteUsing.pas +++ /dev/null @@ -1,27 +0,0 @@ -// Переключение состояний спрайта щелчком мыши -uses GraphABC,ABCSprites,ABCObjects,Events; - -var - s: SpriteABC; - t: TextABC; - -procedure MyMouseDown(x,y,mb: integer); -begin - if s.PtInside(x,y) then - begin - // Переход к следующему состоянию спрайта - if s.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 then - begin - sx := ob.Left - x; - sy := ob.Top - y; - end; -end; - -procedure MyMouseMove(x,y,mb: integer); -begin - if ob<>nil then - ob.Position := new Point(x+sx,y+sy); -end; - -procedure MyMouseUp(x,y,mb: integer); -begin - ob := nil; -end; - - -begin - Window.Title := 'Передвигайте мышью объекты'; - for var i:=1 to 10 do - begin - var p := new PictureABC(Random(Window.Width-100),Random(Window.Height-100),'demo.bmp'); - p.Transparent := True; - end; - OnMouseDown := MyMouseDown; - OnMouseMove := MyMouseMove; - OnMouseUp := MyMouseUp; -end. \ No newline at end of file diff --git a/ReleaseGenerators/Samples/_SVN/Pas/StandardUnits/ABCObjects/gr_Intersect.pas b/ReleaseGenerators/Samples/_SVN/Pas/StandardUnits/ABCObjects/gr_Intersect.pas deleted file mode 100644 index 243b5bb48..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/StandardUnits/ABCObjects/gr_Intersect.pas +++ /dev/null @@ -1,28 +0,0 @@ -// Иллюстрация метода Intersect для графических объектов -uses ABCObjects,GraphABC; - -var Destroyer: CircleABC; - -procedure CheckPulyaIntersects; -begin - for var i:=Objects.Count-1 downto 0 do - begin - if (Destroyer.Intersect(Objects[i])) and (Objects[i]<>Destroyer) then - Objects[i].Destroy; - end; -end; - -begin - Window.Title := 'Разрушитель: метод Intersect пересечения объектов'; - for var i:=1 to 500 do - new RectangleABC(Random(WindowWidth-200)+100,Random(WindowHeight-100),Random(200),Random(200),clRandom); - Destroyer := new CircleABC(10,WindowHeight div 2,100,clBlack); - Destroyer.FontColor := clYellow; - Destroyer.Text := 'Destroyer'; - - for var i:=1 to 900 do - begin - Destroyer.MoveOn(1,0); - CheckPulyaIntersects; - end; -end. diff --git a/ReleaseGenerators/Samples/_SVN/Pas/StandardUnits/ABCObjects/gr_Move_Param.pas b/ReleaseGenerators/Samples/_SVN/Pas/StandardUnits/ABCObjects/gr_Move_Param.pas deleted file mode 100644 index 1b2c1f8c4..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/StandardUnits/ABCObjects/gr_Move_Param.pas +++ /dev/null @@ -1,70 +0,0 @@ -// Движение по траектории -uses ABCObjects,GraphABC; - -const -/// Шаг по параметру кривой - step = 0.03; -/// Задержка по времени, мс - delay = 10; - -type - PointR = record - x,y: real; - end; - -function Position(t: real): PointR; // астроида -begin - var si := sin(1.5 * t); - var co := cos(1.5 * t); - Result.x := si*si*si; - Result.y := co*co*co; -end; - -function Position1(t: real): PointR; // фигура Лиссажу -begin - Result.x := cos(4*t); - Result.y := cos(2.97221*t + 2*Pi/3); -end; - -function LogicalToScreen(p: PointR): Point; -begin - var ww := WindowWidth div 2; - var hh := WindowHeight div 2; - Result.x := round((ww - 50) * p.x + ww); - Result.y := round((hh - 50) * p.y + hh); -end; - -procedure InitScreen; -begin - SetBrushColor(clMoneyGreen); - Rectangle(10,10,WindowWidth-10,WindowHeight-10); - var p := LogicalToScreen(Position1(0)); - MoveTo(p.x,p.y); -end; - -begin - Window.IsFixedSize := True; - Window.Title := 'Движение по траектории'; - SetWindowSize(640,480); - CenterWindow; - - InitScreen; - var c := new CircleABC(200,200,25,clGreen); - var d := new StarABC(200,200,40,20,5,clYellow); - - var t: real := 0; - while True do - begin - c.Center := LogicalToScreen(Position1(t)); - d.Center := LogicalToScreen(Position(t)); - if t<20*Pi then - LineTo(c.Center.x,c.Center.y) - else - begin - t := 0; - InitScreen; - end; - t += step; - Sleep(delay); - end; -end. diff --git a/ReleaseGenerators/Samples/_SVN/Pas/StandardUnits/ABCObjects/gr_MovingObjects.pas b/ReleaseGenerators/Samples/_SVN/Pas/StandardUnits/ABCObjects/gr_MovingObjects.pas deleted file mode 100644 index 9f1f6834d..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/StandardUnits/ABCObjects/gr_MovingObjects.pas +++ /dev/null @@ -1,51 +0,0 @@ -uses ABCObjects,GraphABC,Utils; - -const -/// Количество графических объектов - Count = 300; -/// Флаг ускорения анимации - AnimationIsFast = True; - -/// Возвращает случайный графический объект -function NewRandomABC: ObjectABC; -begin - case Random(3) of -0: Result := new CircleABC(Random(WindowWidth-30)+10,Random(WindowHeight-30)+10,Random(10)+5,clRandom); -1: Result := new RectangleABC(Random(WindowWidth-30)+10,Random(WindowHeight-30)+10,Random(20)+10,Random(20)+10,clRandom); -2: Result := new StarABC(Random(WindowWidth-30)+10,Random(WindowHeight-30)+10,Random(20)+10,Random(10)+5,Random(4)+4,clRandom); - end; -end; - -/// Передвигает графический объект с отражением его от стенок -procedure Move(o: ObjectABC); -begin - o.Move; - if (o.Left<0) or (o.Left+o.Width>WindowWidth) then - o.dx := -o.dx; - if (o.Top<0) or (o.Top+o.Height>WindowHeight) then - o.dy := -o.dy; -end; - -begin - Window.Title := 'Движущиеся объекты'; - if AnimationIsFast then - LockDrawingObjects; - for var i:=1 to Count do - begin - var m: ObjectABC := NewRandomABC; - repeat - m.dx := Random(-3,3); - m.dy := Random(-3,3); - until (m.dx<>0) and (m.dy<>0); - end; - var k := 1; - while True do - begin - for var i:=0 to Objects.Count-1 do - Move(Objects[i]); - if AnimationIsFast then - RedrawObjects; - k += 1; - Window.Title := Format('{0,5:f2}',k/Milliseconds*1000)+' кадров в секунду'; - end; -end. diff --git a/ReleaseGenerators/Samples/_SVN/Pas/StandardUnits/ABCObjects/gr_PictureScale.pas b/ReleaseGenerators/Samples/_SVN/Pas/StandardUnits/ABCObjects/gr_PictureScale.pas deleted file mode 100644 index 03ba24b3d..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/StandardUnits/ABCObjects/gr_PictureScale.pas +++ /dev/null @@ -1,38 +0,0 @@ -// Свойства ScaleX и ScaleY класса PictureABC -uses ABCObjects,GraphABC; - -const delay = 2; - -var p: PictureABC; - -begin - Window.Title := 'Движение и масштабирование рисунка по горизонтали'; - SetWindowSize(640,260); - p := PictureABC.Create(100,100,'demo.bmp'); - while True do - begin - for var x:=100 to 450 do - begin - Sleep(delay); - p.MoveOn(1,0); - end; - for var i:=100 downto -100 do - begin - Sleep(delay); - var w := p.Width; - p.ScaleX := i/100; - p.MoveOn(w - p.Width,0); - end; - for var x:=450 downto 100 do - begin - Sleep(delay); - p.MoveOn(-1,0); - end; - for var i:=-100 to 100 do - begin - Sleep(delay); - p.ScaleX:=i/100; - end; - end; -end. - diff --git a/ReleaseGenerators/Samples/_SVN/Pas/StandardUnits/ABCObjects/gr_RealNumber.pas b/ReleaseGenerators/Samples/_SVN/Pas/StandardUnits/ABCObjects/gr_RealNumber.pas deleted file mode 100644 index 726026047..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/StandardUnits/ABCObjects/gr_RealNumber.pas +++ /dev/null @@ -1,21 +0,0 @@ -uses ABCObjects,GraphABC; - -const -/// отступ по оси x - zx = 100; -/// отступ по оси y - zy = 50; - -begin - Window.IsFixedSize := True; - Window.Title := 'Секундомер'; - var r := new RoundRectABC(zx,zy,Window.Width-2*zx,Window.Height-2*zy,100,clMoneyGreen); - r.BorderWidth := 5; - r.BorderColor := clGreen; - for var i:=1 to 1000 do - begin - r.RealNumber := i/10; - Sleep(100); - end; -end. - diff --git a/ReleaseGenerators/Samples/_SVN/Pas/StandardUnits/ABCObjects/gr_StandardColors.pas b/ReleaseGenerators/Samples/_SVN/Pas/StandardUnits/ABCObjects/gr_StandardColors.pas deleted file mode 100644 index 2156732e7..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/StandardUnits/ABCObjects/gr_StandardColors.pas +++ /dev/null @@ -1,144 +0,0 @@ -uses - GraphABC, - ABCObjects, - System.Reflection; - -const lim = 127 + 32; - -var - CurrentBackColor := clWhite; - InfoString: RectangleABC; - -procedure ChangeInfoStringText(colorName: string); -begin - var c := Color.FromName(colorName); - InfoString.Text := string.Format('Color.{0}: (R: {1} G: {2} B: {3}) (H: {4:f1} S: {5:f1} B: {6:f1})',colorName,c.R,c.G,c.B,c.GetHue,c.GetSaturation,c.GetBrightness); - InfoString.Color := c; - if c.R*c.R+c.G*c.G+c.B*c.B <= 3*lim*lim then - InfoString.FontColor := clWhite - else InfoString.FontColor := clBlack; - if c.A = 0 then - InfoString.FontColor := clGray; -end; - -procedure CreateStandardColors(backColor: Color); -begin - ClearWindow(backColor); - var t := typeof(Color); - var mi := t.GetProperties(); - var y := 10; - var x := 10; - var h := Window.Width div 5 - 11; - foreach m: PropertyInfo in mi do - begin - if m.GetGetMethod(true).IsStatic then - begin - var c := Color(m.GetValue(nil,nil)); - var r := new RectangleABC(x,y,h,22,c); - r.Text := m.Name; - r.TextScale := 0.9; - r.Bordered := False; - if c.R*c.R+c.G*c.G+c.B*c.B <= 3*lim*lim then - r.FontColor := clWhite - else r.FontColor := clBlack; - if c.A = 0 then - r.FontColor := clGray; - y += 25; - if y > Window.Height-40 then - begin - y := 10; - x += h + 10; - end; - end; - end; -end; - -var - ob: ObjectABC; - dx,dy: integer; - -procedure MouseDown(x,y,mb: integer); -begin - ob := ObjectUnderPoint(x,y); - if ob=InfoString then - ob := nil; - if ob<>nil then - begin - ob.ToFront; - dx := x - ob.Left; - dy := y - ob.Top; - var c := ob.Color; - if (mb=2) then - ob.Scale(2) - else ob.Color := Color.FromArgb(128,c.R,c.G,c.B); - end; -end; - -procedure MouseUp(x,y,mb: integer); -begin - if ob<>nil then - begin - if (mb=2) then - ob.Scale(0.5) - else - begin - var c := ob.Color; - if ob.Text = 'Transparent' then - ob.Color := Color.FromArgb(0,c.R,c.G,c.B) - else ob.Color := Color.FromArgb(255,c.R,c.G,c.B); - end; - ob:= nil; - end; -end; - -procedure MouseMove(x,y,mb: integer); -begin - if (ob<>nil) and (mb=1) then - begin - ob.ToFront; - ob.Left := x - dx; - ob.Top := y - dy; - end; - if ob=nil then - begin - InfoString.Text := ''; - InfoString.Color := CurrentBackColor; - end; - var ob1 := ObjectUnderPoint(x,y); - if ob1=InfoString then - ob1 := nil; - if (ob1<>nil) and (mb=0) then - ChangeInfoStringText(ob1.Text); -end; - -procedure KeyDown(Key: integer); -begin - if Key=vk_Space then - begin - if CurrentBackColor=clWhite then - begin - CurrentBackColor := clBlack; - InfoString.BorderColor := clWhite; - end - else - begin - CurrentBackColor := clWhite; - InfoString.BorderColor := clBlack; - end; - ClearWindow(CurrentBackColor); - RedrawObjects; - end; -end; - -begin - SetWindowSize(1024,768); - Window.IsFixedSize := True; - Window.CenterOnScreen; - Window.Title := 'Стандартные цвета (нажмите Пробел для изменения фонового цвета)'; - CreateStandardColors(CurrentBackColor); - InfoString := new RectangleABC(10,Window.Height-30,Window.Width-20,25); - OnMouseMove := MouseMove; - OnMouseDown := MouseDown; - OnMouseUp := MouseUp; - OnKeyDown := KeyDown; -end. diff --git a/ReleaseGenerators/Samples/_SVN/Pas/StandardUnits/ABCObjects/gr_Star_Rotate.pas b/ReleaseGenerators/Samples/_SVN/Pas/StandardUnits/ABCObjects/gr_Star_Rotate.pas deleted file mode 100644 index 82d52752c..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/StandardUnits/ABCObjects/gr_Star_Rotate.pas +++ /dev/null @@ -1,18 +0,0 @@ -// Изменение свойств объекта StarABC -uses ABCObjects,GraphABC; - -var z: StarABC; - -begin - z := new StarABC(WindowWidth div 2,WindowHeight div 2,WindowHeight div 2 - 5,WindowHeight div 4 + 16,6,clRed); - for var i:=1 to 20 do - begin - Sleep(100); - z.Count := z.Count + 1; - end; - for var i:=1 to 180 do - begin - Sleep(10); - z.Angle := z.Angle + 1; - end; -end. diff --git a/ReleaseGenerators/Samples/_SVN/Pas/StandardUnits/ABCObjects/gr_Text.pas b/ReleaseGenerators/Samples/_SVN/Pas/StandardUnits/ABCObjects/gr_Text.pas deleted file mode 100644 index 017a0d654..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/StandardUnits/ABCObjects/gr_Text.pas +++ /dev/null @@ -1,17 +0,0 @@ -// Клонирование графических объектов -uses ABCObjects,GraphABC; - -var bt: TextABC; - -begin - var x := 224; - bt := new TextABC(60,110,110,'Hello!',RGB(x,x,x)); - while x>32 do - begin - Sleep(40); - x -= 32; - bt := bt.Clone; - bt.Color := RGB(x,x,x); - bt.MoveOn(7,7); - end; -end. diff --git a/ReleaseGenerators/Samples/_SVN/Pas/StandardUnits/CRT/Bill.pas b/ReleaseGenerators/Samples/_SVN/Pas/StandardUnits/CRT/Bill.pas deleted file mode 100644 index 91f57c0ea..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/StandardUnits/CRT/Bill.pas +++ /dev/null @@ -1,145 +0,0 @@ -// Отражение шарика от стенок. Консольный режим -// Для запуска программы используйте Shift+F9 !!! -uses CRT; - -const -// Ширина поля - w = 80; -// Высота поля - h = 24; - -var -/// Координаты шарика - ax,ay: integer; -/// Вектор перемещения шарика - vx,vy: integer; -/// Массив клеток поля - a: array [1..w,1..h] of char; - -/// Очистка массива a -procedure CleanA; -begin - for var j := 1 to h do - for var i := 1 to w do - A[i,j] := ' ' -end; - -/// Создание горизонтальной стены -procedure HorizWall(x,y,L: integer); -begin - for var i := x to x+L-1 do - A[i,y] := '*' -end; - -/// Создание вертикальной стены -procedure VertWall(x,y,L: integer); -begin - for var j := y to y+L-1 do - A[x,j] := '*' -end; - -/// Заполнение поля стенами -procedure Fill; -begin - CleanA; - HorizWall(1,1,w); - HorizWall(1,h,w); - VertWall(1,1,h); - VertWall(w,1,h); - - HorizWall(49,9,31); - HorizWall(49,14,31); -end; - -/// Перерисовка экрана -procedure DrawScreen; -begin - TextColor(White); - ClrScr; - for var j := 1 to h do - for var i := 1 to w do - write(A[i,j]) -end; - -/// Возвращает True, если на пути шарика препятствие -function FilledInFront: boolean; -begin - Result := (A[ax+vx,ay]<>' ') or (A[ax,ay+vy]<>' ') or (A[ax+vx,ay+vy]<>' ') -end; - -/// Меняет направление шарика -procedure ChangeDirection; -begin - if A[ax+vx,ay]<>' ' then - vx := -vx; - if A[ax,ay+vy]<>' ' then - vy := -vy; - if (A[ax+vx,ay]=' ') and (A[ax,ay+vy]=' ') and (A[ax+vx,ay+vy]<>' ') then - begin - vx := -vx; - vy := -vy - end; - Sleep(10); -end; - -/// Рисует шарик -procedure ShowBall; -begin - GotoXY(ax,ay); - write('B'); -end; - -/// Стирает шарик -procedure HideBall; -begin - GotoXY(ax,ay); - write(' '); -end; - -/// Устанавливает вектор движение шарика -procedure SetBallCoords(x,y: integer); -begin - ax := x; - ay := y -end; - -/// Устанавливает координаты шарика -procedure SetBallVeloc(vx0,vy0: integer); -begin - vx := vx0; - vy := vy0 -end; - -/// Перемещает шарик к позиции (x,y) -procedure MoveTo(x,y: integer); -begin - HideBall; - SetBallCoords(x,y); - ShowBall -end; - -/// Перемещает шарик на вектор (dx,dy) -procedure MoveOn(dx,dy: integer); -begin - MoveTo(ax+dx,ay+dy); -end; - -BEGIN - SetWindowTitle('Биллиард (ностальгия по CRT)'); - HideCursor; - - Fill; - DrawScreen; - - SetBallCoords(70,13); - SetBallVeloc(1,1); - TextColor(Yellow); - ShowBall; - - repeat - Delay(20); - if FilledInFront then - ChangeDirection; - MoveOn(vx,vy); - until KeyPressed; -END. diff --git a/ReleaseGenerators/Samples/_SVN/Pas/StandardUnits/CRT/CPaint.pas b/ReleaseGenerators/Samples/_SVN/Pas/StandardUnits/CRT/CPaint.pas deleted file mode 100644 index 5ea9b4078..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/StandardUnits/CRT/CPaint.pas +++ /dev/null @@ -1,70 +0,0 @@ -// Рисование курсором в консольном окне -// Иллюстрация GotoXY, TextBackGround -// Для запуска программы используйте Shift+F9 !!! -uses Crt; - -var - draw: boolean; - color: integer; - -function IsCoordCorrect(x,y: integer): boolean; -begin - Result := (x in [1..WindowWidth]) and (y in [1..WindowHeight]); -end; - -procedure MyGotoXY(x,y: integer); -begin - if not IsCoordCorrect(x,y) then - exit; - GotoXY(x,y); -end; - -procedure DrawSymbol(x,y: integer; c: char); -begin - if not IsCoordCorrect(x,y) then - exit; - GotoXY(x,y); - write(c); - GotoXY(x,y); -end; - -begin - draw := True; - color := Green; - ClrScr; - SetWindowTitle('Рисование курсором (Esc-выход, Num 5 - изменение цвета)'); - TextBackGround(color); - GotoXY(WindowWidth div 2,WindowHeight div 2); - var c: char; - repeat - c := ReadKey; - if c=#32 then - draw := not draw; - if c=#0 then - begin - c := ReadKey; - case c of - // Изменение цвета по клавише Num 5 - {5} #12: begin - color := color + 1; - if color=16 then - color := 0; - TextBackGround(color); - end; - {RU}#33: MyGotoXY(WhereX+1,WhereY-1); - {RD}#34: MyGotoXY(WhereX+1,WhereY+1); - {LD}#35: MyGotoXY(WhereX-1,WhereY+1); - {LU}#36: MyGotoXY(WhereX-1,WhereY-1); - {L} #37: MyGotoXY(WhereX-1,WhereY); - {U} #38: MyGotoXY(WhereX,WhereY-1); - {R} #39: MyGotoXY(WhereX+1,WhereY); - {D} #40: MyGotoXY(WhereX,WhereY+1); - #67: ClrScr; - end; - if draw then - DrawSymbol(WhereX, WhereY,' '); - end; - until c=#27; - TextBackGround(Black); - GotoXY(1,25); -end. diff --git a/ReleaseGenerators/Samples/_SVN/Pas/StandardUnits/CRT/CRTColors.pas b/ReleaseGenerators/Samples/_SVN/Pas/StandardUnits/CRT/CRTColors.pas deleted file mode 100644 index 5b205c89d..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/StandardUnits/CRT/CRTColors.pas +++ /dev/null @@ -1,20 +0,0 @@ -// Стандартные CRT-цвета -// Для запуска программы используйте Shift+F9 !!! -uses CRT; - -begin - SetWindowTitle('Стандартные CRT-цвета'); - for var i:=0 to 15 do - begin - TextBackground(i); - for var j:=0 to 15 do - begin - TextColor(j); - write(' CRT'); - end; - writeln; - end; - HideCursor; - TextBackground(0); - TextColor(0); -end. diff --git a/ReleaseGenerators/Samples/_SVN/Pas/StandardUnits/CRT/SimpleTextEditor.pas b/ReleaseGenerators/Samples/_SVN/Pas/StandardUnits/CRT/SimpleTextEditor.pas deleted file mode 100644 index b8dc321c4..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/StandardUnits/CRT/SimpleTextEditor.pas +++ /dev/null @@ -1,17 +0,0 @@ -// Простейший текстовый редактор -// Для запуска программы используйте Shift+F9 !!! -uses CRT; - -begin - SetWindowTitle('Текстовый редактор (Enter - новая строка, Esc - выход)'); - clrScr; - repeat - var c := ReadKey; - case c of - #13: writeln; - #27: break; - #32..#255: write(c); - #0: c := ReadKey; - end; - until false; -end. diff --git a/ReleaseGenerators/Samples/_SVN/Pas/StandardUnits/GraphABC/AnalogClock.pas b/ReleaseGenerators/Samples/_SVN/Pas/StandardUnits/GraphABC/AnalogClock.pas deleted file mode 100644 index 5fcaca2b1..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/StandardUnits/GraphABC/AnalogClock.pas +++ /dev/null @@ -1,14 +0,0 @@ -uses GraphABC,System; - -begin - Font.Size := 80; - var x0 := (Window.Width - TextWidth('00:00:00')) div 2; - var y0 := (Window.Height - TextHeight('00:00:00')) div 2; - while True do - begin - var t := DateTime.Now; - var s := string.Format('{0:d2}:{1:d2}:{2:d2}',t.Hour,t.Minute,t.Second); - TextOut(x0,y0,s); - Sleep(1000); - end; -end. \ No newline at end of file diff --git a/ReleaseGenerators/Samples/_SVN/Pas/StandardUnits/GraphABC/Flame.pas b/ReleaseGenerators/Samples/_SVN/Pas/StandardUnits/GraphABC/Flame.pas deleted file mode 100644 index 0d069ec7f..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/StandardUnits/GraphABC/Flame.pas +++ /dev/null @@ -1,66 +0,0 @@ -uses GraphABC; - -const frames = 25; - size = 250; - dxy = size div 2; - dm = 2*PI/1024; - flameh = 4; - Light: byte = 255; - -procedure FillPallete(ColorsTable: array of Color); -begin - for var i:=0 to 255 do - if(i<128) then - ColorsTable[i] := RGB(i,0,i div 2) - else - ColorsTable[i] := RedColor(i); -end; - -begin - //Создаюм буфер экрана - var ScreenBuffer := new array of byte[size+1]; - for var i:=0 to size do - ScreenBuffer[i] := new byte[size+1]; - //Создаем палитру - var ColorsTable := new Color[256]; - FillPallete(ColorsTable); - //Настраиваем окно - SetWindowSize(size,size); - SetBrushColor(clBlack); - FillRectangle(0,0,WindowWidth,WindowHeight); - SetSmoothingOff; - LockDrawing; - //Поехали - var x, y, s, tt, xx, yy: Integer; - var dt := System.DateTime.Now; - var ds := WindowWidth div 4; - repeat - tt := tt + 1; - xx := dxy + Round(ds*Sin(tt*dm)); - yy := dxy + Round(ds*Cos(tt*dm)); - ScreenBuffer[xx,yy] := Light; - SetPixel(xx,yy,ColorsTable[Light]); - for var i:=0 to 5 do begin - x := Random(size-1) + 1; - y := Random(size-1) + 1; - s := ScreenBuffer[Y,X]; - if s>=flameh then - s := s - flameh; - if s=0 then - continue; - ScreenBuffer[y-1,x+1] := s; - ScreenBuffer[y-1,x ] := s; - ScreenBuffer[y-1,x-1] := s; - ScreenBuffer[y+1,x ] := s; - var c := ColorsTable[s]; - SetPixel(y-1,x+1,c); - SetPixel(y-1,x, c); - SetPixel(y-1,x-1,c); - SetPixel(y+1,x, c); - end; - if((system.datetime.Now-dt).TotalMilliseconds>1000/frames) then begin - dt := System.Datetime.Now; - Redraw; - end; - until False; -end. diff --git a/ReleaseGenerators/Samples/_SVN/Pas/StandardUnits/GraphABC/Fractals/Dragon.pas b/ReleaseGenerators/Samples/_SVN/Pas/StandardUnits/GraphABC/Fractals/Dragon.pas deleted file mode 100644 index 27570e5d3..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/StandardUnits/GraphABC/Fractals/Dragon.pas +++ /dev/null @@ -1,70 +0,0 @@ -// Пример из пакета KuMir/PMir -program Dragon; - -uses GraphABC,Utils; - -var - x := 200; - y := 150; - dx := 0; - dy := -4; - turn: array [1..1000] of Boolean; - -begin - SetWindowSize(790,500); - Window.Title := 'Кривая Дракона'; - var f := True; - for var a := 1 to 64 do - begin - turn[2*a-1] := f; - f := not f; - turn[2*a] := turn[a]; - end; - var b := 0; - var d := 1; - f := false; - MoveTo(x,y); - - for var a:=1 to 128 do - begin - var t: integer; - LockDrawing; - for var i:=1 to 127*4 do - begin - b += d; - x += dx; - y += dy; - LineTo(x,y); - if f and not turn[b] or not f and turn[b] then - begin - t := dy; - dy := -dx; - end - else - begin - t := -dy; - dy := dx; - end; - dx := t; - end; - b += d; - x += dx; - y += dy; - LineTo(x,y); - d := -d; - f := not f; - if turn[a] then - begin - t := dy; - dy := -dx; - end - else - begin - t := -dy; - dy := dx; - end; - dx := t; - UnLockDrawing; - end; - write('Время работы = ',Milliseconds/1000,' с'); -end. diff --git a/ReleaseGenerators/Samples/_SVN/Pas/StandardUnits/GraphABC/Fractals/Mandelbrot.pas b/ReleaseGenerators/Samples/_SVN/Pas/StandardUnits/GraphABC/Fractals/Mandelbrot.pas deleted file mode 100644 index 1a3a48c7a..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/StandardUnits/GraphABC/Fractals/Mandelbrot.pas +++ /dev/null @@ -1,42 +0,0 @@ -// Демонстрация фрактальной графики. Множество Мандельброта -// Для каждой точки комплексной плоскости z=(x,y) выполняем итерационный процесс z=z^2+c, c=(cx,cy) -// Считаем количество итераций i до тех пор пока не выполнится условие |x|>max и |y|>max -// После этого рисуем точку x,y с насыщенностью красного цвета, пропорциональной i -uses GraphABC,Utils; - -const - max = 10; - coef1 = 0.5; - coef2 = 0.88; - scalex = 0.0035; - scaley = 0.0035; - dx = 430; - dy = 300; - -begin - Window.Title := 'Фракталы: множество Мандельброта'; - SetWindowSize(600,600); - CenterWindow; - for var ix:=0 to Window.Width-1 do - for var iy:=0 to Window.Height-1 do - begin - var x := 0.0; - var y := 0.0; - var cx := scalex * (ix - dx); - var cy := scaley * (iy - dy); - var i := 1; - while i<255 do - begin - var x1 := x*x-y*y+cx; - var y1 := 2*x*y+cy; - x := x1; - y := y1; - if (abs(x)>max) and (abs(y)>max) then break; - i += 1; - end; - if i>=255 then SetPixel(ix,iy,clRed) - else SetPixel(ix,iy,RGB(255,255-i,255-i)); - end; - writeln('Время расчета = ',Milliseconds/1000,' с'); -end. - diff --git a/ReleaseGenerators/Samples/_SVN/Pas/StandardUnits/GraphABC/Fractals/Paporotnik/Main.pas b/ReleaseGenerators/Samples/_SVN/Pas/StandardUnits/GraphABC/Fractals/Paporotnik/Main.pas deleted file mode 100644 index 3946450ad..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/StandardUnits/GraphABC/Fractals/Paporotnik/Main.pas +++ /dev/null @@ -1,22 +0,0 @@ -//(c) DarkStar 2008 -uses GraphABC, Paporotnik, PaporotnikData; - -const - Iterations = 300000; - Height = 600; - Fast = false; - Width = Height div 2; - WindowWidth= Width * 3; - Brightness = 170; - -var - Paprotnik := new PaporotnikFractal(PaprotnikData); - SimplePaprotnik := new PaporotnikFractal(SimplePaprotnikData); - Elka := new PaporotnikFractal(ElkaData); - -begin - InitWindow(200, 50, WindowWidth , Height, clBlack); - Paprotnik.Draw(0, 0, Iterations, Height, Brightness, fast); - SimplePaprotnik.Draw(Width, 0, Iterations, Height, Brightness, fast); - Elka.Draw(Width*2, 0, Iterations, Height, Brightness, fast); -end. \ No newline at end of file diff --git a/ReleaseGenerators/Samples/_SVN/Pas/StandardUnits/GraphABC/Fractals/Paporotnik/Paporotnik.pas b/ReleaseGenerators/Samples/_SVN/Pas/StandardUnits/GraphABC/Fractals/Paporotnik/Paporotnik.pas deleted file mode 100644 index 3d689e7a5..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/StandardUnits/GraphABC/Fractals/Paporotnik/Paporotnik.pas +++ /dev/null @@ -1,51 +0,0 @@ -///Модуль для рисования фракталов семейства "Лист папоротника" -unit Paporotnik; - -uses GraphABC; - -type - - ///Настройки фрактала - PaporotnikFractalInitalData = record - data: array of array of real; - P0,P1,P2,P3:real; - end; - - ///Фрактал "Лист папоротника" - PaporotnikFractal = class - private - data: array of array of real; - P0,P1,P2,P3:real; - public - constructor(initdata: PaporotnikFractalInitalData); - begin - data := initdata.data; - P0 := initdata.P0; - P1 := initdata.P1; - P2 := initdata.P2; - P3 := initdata.P3; - end; - procedure Draw(x0,y0,Iterations,Height,Brightness: integer; fast: boolean); - begin - var plotx, ploty, x, y : real; - var Size := Height/11; - var Width := Height div 2; - var dx := Width div 2; - var dc := Iterations div Brightness; - if fast then - LockDrawing; - for var i:=1 to Iterations do begin - var P := Random(100); - var rnd := Pmax и |y|>max -// После этого рисуем точку x,y с насыщенностью красного цвета, пропорциональной i -uses GraphABC,Utils; - -const - max = 10; - cx = 0.251; - cy = 0.95; - coef1 = 0.5; - coef2 = 0.88; - - scalex = 0.001; - scaley = 0.001; - dx = 200; - dy = 130; - -begin - Window.Title := 'Фракталы: папоротник'; - SetWindowSize(800,600); - CenterWindow; - for var ix:=0 to Window.Width-1 do - for var iy:=0 to Window.Height-1 do - begin - var x := scalex*(ix-dx); - var y := scaley*(iy-dy); - var i := 1; - while i<255 do - begin - var x1 := coef1*x*x-coef2*y*y+cx; - var y1 := x*y+cy; - x := x1; - y := y1; - if (abs(x)>max) and (abs(y)>max) then break; - i += 1; - end; - if i>=255 then SetPixel(ix,iy,clRed) - else SetPixel(ix,iy,RGB(255,255-i,255-i)); - end; - writeln('Время расчета = ',Milliseconds/1000,' с'); -end. diff --git a/ReleaseGenerators/Samples/_SVN/Pas/StandardUnits/GraphABC/Mosaic.pas b/ReleaseGenerators/Samples/_SVN/Pas/StandardUnits/GraphABC/Mosaic.pas deleted file mode 100644 index 4aee71d02..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/StandardUnits/GraphABC/Mosaic.pas +++ /dev/null @@ -1,51 +0,0 @@ -// Мозаика. Квадратики случайным образом меняются местами -uses GraphABC; - -const - w = 25; - w1 = 1; - m = 50; - n = 70; - x0 = 0; - y0 = 0; - delay = 10; - -var a: array [0..n,0..m] of Color; - -begin - Window.Title := 'Мозаика'; - Window.SetSize(800,600); - - // Заполнение массива случайными цветами - for var i:=0 to n-1 do - for var j:=0 to m-1 do - begin - a[i,j] := clRandom; - Brush.Color := a[i,j]; - FillRect(x0+i*w,y0+j*w,x0+(i+1)*w-w1,y0+(j+1)*w-w1); - end; - - var k := 0; - while true do - begin - k += 1; - if k mod 1000 = 0 then - begin - k := 0; - Sleep(delay); - end; - - var i := Random(1,n-2); - var j := Random(1,m-2); - var di := Random(-1,1); - var dj := Random(-1,1); - var i1 := i+di; - var j1 := j+dj; - Swap(a[i,j],a[i1,j1]); - - Brush.Color := a[i,j]; - FillRect(x0+i*w,y0+j*w,x0+(i+1)*w-w1,y0+(j+1)*w-w1); - Brush.Color := a[i1,j1]; - FillRect(x0+i1*w,y0+j1*w,x0+(i1+1)*w-w1,y0+(j1+1)*w-w1); - end; -end. diff --git a/ReleaseGenerators/Samples/_SVN/Pas/StandardUnits/GraphABC/SetPixel.pas b/ReleaseGenerators/Samples/_SVN/Pas/StandardUnits/GraphABC/SetPixel.pas deleted file mode 100644 index 498bb4a0f..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/StandardUnits/GraphABC/SetPixel.pas +++ /dev/null @@ -1,7 +0,0 @@ -uses GraphABC; - -begin - for var x:=0 to Window.Width-1 do - for var y:=0 to Window.Height-1 do - SetPixel(x,y,RGB(2*x-y,x-3*y,x+y)); -end. \ No newline at end of file diff --git a/ReleaseGenerators/Samples/_SVN/Pas/StandardUnits/GraphABC/Star.pas b/ReleaseGenerators/Samples/_SVN/Pas/StandardUnits/GraphABC/Star.pas deleted file mode 100644 index 76054f2f8..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/StandardUnits/GraphABC/Star.pas +++ /dev/null @@ -1,17 +0,0 @@ -uses GraphABC; - -const - n = 17; // количество точек - n1 = 7; // через сколько точек соединять - -begin - var a := -Pi/2; - var Center := Window.Center; - var Radius := Window.Height/2.2; - MoveTo(Round(Center.X+Radius*cos(a)),Round(Center.Y+Radius*sin(a))); - for var i:=1 to n do - begin - a += n1*2*Pi/n; - LineTo(Round(Center.X+Radius*cos(a)),Round(Center.Y+Radius*sin(a))); - end; -end. \ No newline at end of file diff --git a/ReleaseGenerators/Samples/_SVN/Pas/StandardUnits/GraphABC/graph3d.pas b/ReleaseGenerators/Samples/_SVN/Pas/StandardUnits/GraphABC/graph3d.pas deleted file mode 100644 index ea0587a05..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/StandardUnits/GraphABC/graph3d.pas +++ /dev/null @@ -1,64 +0,0 @@ -// Пример из пакета KuMir/PMir -// Публикуется практически без изменений -// Дорог как память :) -Uses GraphABC; - -var Xmin,Xmax,Xstep: real; - Ymin,Ymax,Ystep,asp: real; - dx: integer; - -function f(x,y:real): integer; -var r: real; -begin - r := x*x+y*y+1; - f := round(5*asp*(cos(r)/r+0.1)) -end; - -procedure gr(N : integer); -var X,Y: real; - i,j,k,Z0,dy: integer; - pred: array [1..100] of integer; - jj,maxX,maxY: integer; -begin - Xmin := -4; - Xmax := 4; - Ymin := -3; - Ymax := 3; - maxX := 600; - maxY := 400; - Xstep := dx*(Xmax-Xmin)/maxX; - X := Xmin; - Ystep := (Ymax-Ymin)/N; - Y := Ymin; - dy := maxY div N div 2; - asp := maxY/8; - for i := 1 to N do - begin - pred[i] := maxY-i*dy-f(X,Y); - Y := Y + Ystep - end; - for jj := 1 to maxX div dx do - begin - j := jj*dx; - X := X + Xstep; - Y := Ymin; Z0 := maxY; - for i := 1 to N do - begin - k := maxY-i*dy-f(X,Y); - if kmax then - max := yi[xi]; - end; - - yl0 := min; - hl := -(max-min); - - // Нарисовать оси системы координат - Line(0,LtoSy(0),ws,LtoSy(0)); - Line(LtoSx(0),0,LtoSx(0),hs); - - Pen.Color := clBlue; - MoveTo(xs0,LtoSy(yi[0])); - for var xi:=xs0+1 to xs0+ws do - LineTo(xi,LtoSy(yi[xi-xs0])); -end; - -procedure Resize; -begin - ClearWindow; - drawGraph(0,60,f); - Redraw; -end; - -begin - LockDrawing; - SetWindowCaption('График функции: масштабирование'); - drawGraph(0,60,f); - Redraw; - OnResize := Resize; -end. diff --git a/ReleaseGenerators/Samples/_SVN/Pas/StandardUnits/GraphABC/rain.pas b/ReleaseGenerators/Samples/_SVN/Pas/StandardUnits/GraphABC/rain.pas deleted file mode 100644 index 17f971f4d..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/StandardUnits/GraphABC/rain.pas +++ /dev/null @@ -1,27 +0,0 @@ -// Имитация кругов на воде от капель дождя -uses GraphABC; - -const speed = 2; - -procedure Kaplia(x0,y0: integer); -begin - var r := 1; - for var i:=0 to 63 do - begin - Pen.Color := RGB(i*4,i*4,i*4); - Circle(x0,y0,r); - if i mod speed = 0 then Sleep(10); - Pen.Color := clWhite; - Circle(x0,y0,r); - r += 2; - end; -end; - -const z=50; - -begin - Window.Title := 'Капли дождя'; - SetWindowSize(800,600); - while True do - Kaplia(Random(z,WindowWidth-z),Random(z,WindowHeight-z)); -end. diff --git a/ReleaseGenerators/Samples/_SVN/Pas/StandardUnits/Timers/Timer1.pas b/ReleaseGenerators/Samples/_SVN/Pas/StandardUnits/Timers/Timer1.pas deleted file mode 100644 index fadc43320..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/StandardUnits/Timers/Timer1.pas +++ /dev/null @@ -1,21 +0,0 @@ -Uses Timers; - -var t1, t2: Timer; - -procedure OnTimer1; -begin - Write('!'); -end; - -procedure OnTimer2; -begin - Write('?'); -end; - -begin - t1 := new Timer(200, OnTimer1); - t2 := new Timer(300, OnTimer2); - t1.Start; - t2.Start; - Sleep(10000); -end. \ No newline at end of file diff --git a/ReleaseGenerators/Samples/_SVN/Pas/StandardUnits/Timers/Timer2.pas b/ReleaseGenerators/Samples/_SVN/Pas/StandardUnits/Timers/Timer2.pas deleted file mode 100644 index 073c3a6b9..000000000 --- a/ReleaseGenerators/Samples/_SVN/Pas/StandardUnits/Timers/Timer2.pas +++ /dev/null @@ -1,59 +0,0 @@ -// "Собачка". Иллюстрация использования таймера. -uses GraphABC, Timers; - -var - t: Timer; - xx,yy,px,py: integer; - -procedure Draw; -begin - FillCircle(xx,yy,11); -end; - -procedure Show; -begin - Brush.Color := clBlack; - Draw; -end; - -procedure Hide; -begin - Brush.Color := clWhite; - Draw; -end; - -procedure Move(x,y: integer); -begin - Hide; - xx := x; - yy := y; - show; -end; - -procedure Timer1; -begin - if (xx<>px) or (yy<>py) then - begin - var t := 1/10; - var newx := round((1-t)*xx+t*px); - var newy := round((1-t)*yy+t*py); - Move(newx,newy); - end; -end; - -procedure MouseMove(x,y,mb: integer); -begin - px := x; py := y; -end; - -begin - SetWindowCaption('"Собачка"'); - SetSmoothingOff; - OnMouseMove:=MouseMove; - xx := 100; yy := 100; - px := xx; py := yy; - Show; - Timer1; - t := new Timer(20,Timer1); - t.Start; -end. diff --git a/TestSuite/.gitignore b/TestSuite/.gitignore index 413caff47..a0f2c2bcb 100644 --- a/TestSuite/.gitignore +++ b/TestSuite/.gitignore @@ -16,30 +16,3 @@ /exe/*.dat - -#TODO Большая часть .pas файлов добавленны, некоторые нет... пока заигнорил недобавленные -# - Вообще по моему лучше удалить все эти файлы из индекса -# - В индекс -/CompilationSamples/Controls.pas -/CompilationSamples/LightPT.pas -/CompilationSamples/NUnitABC.pas -/CompilationSamples/PT4Databases.pas -/CompilationSamples/Speech.pas -/CompilationSamples/Tasks.pas -/CompilationSamples/Tasks1Arr.pas -/CompilationSamples/Tasks1Begin.pas -/CompilationSamples/Tasks1BoolIfCase.pas -/CompilationSamples/Tasks1Loops.pas -/CompilationSamples/TasksArr.pas -/CompilationSamples/TasksMatr.pas -/CompilationSamples/TasksStr.pas -/CompilationSamples/Turtle.pas -/CompilationSamples/TurtleWPF.pas -/CompilationSamples/TwoPanelsWindow.pas -/CompilationSamples/XLSX.pas -/CompilationSamples/xPT4MakerNetX.pas -/CompilationSamples/xPT4TaskMakerNET.pas -/CompilationSamples/Мозаика.pas -/CompilationSamples/МозаикаABC.pas - - diff --git a/TestSuite/CompilationSamples/Controls.pas b/TestSuite/CompilationSamples/Controls.pas new file mode 100644 index 000000000..3adc7a918 --- /dev/null +++ b/TestSuite/CompilationSamples/Controls.pas @@ -0,0 +1,1503 @@ +// Copyright (©) Ivan Bondarev, Stanislav Mikhalkovich (for details please see \doc\copyright.txt) +// This code is distributed under the GNU LGPL (for details please see \doc\license.txt) +///Модуль элементов управления для GraphWPF, WPFObjects и Graph3D +unit Controls; + +interface + +uses GraphWPFBase; +uses System.Windows; +uses System.Windows.Media; +uses System.Windows.Media.Imaging; +uses System.Windows.Controls; +uses System.Windows.Controls.Primitives; +uses System.ComponentModel; + +const PanelsColor = Colors.WhiteSmoke; + +type + Dock = System.Windows.Controls.Dock; + GButton = System.Windows.Controls.Button; + GTextBlock = System.Windows.Controls.TextBlock; + GTextBox = System.Windows.Controls.TextBox; + GListBox = System.Windows.Controls.ListBox; + GPanel = System.Windows.Controls.Panel; + GControl = System.Windows.Controls.Control; + GStatusBar = System.Windows.Controls.Primitives.StatusBar; + Orientation = System.Windows.Controls.Orientation; + MessageBox = System.Windows.MessageBox; + MessageBoxButton = System.Windows.MessageBoxButton; + MessageBoxResult = System.Windows.MessageBoxResult; + MessageBoxImage = System.Windows.MessageBoxImage; + /// Набор предопределённых цветов + Colors = System.Windows.Media.Colors; + Key = System.Windows.Input.Key; + +var + _ActivePanel: GPanel; + GlobalHMargin := 12; + +function __ActivePanelInternal: GPanel; +procedure __SetActivePanelInternal(p: GPanel); + +procedure Invoke(d: System.Delegate; params args: array of object); +procedure InvokeP(p: procedure(r: real); r: real); + +type + ///!# + /// Базовый класс для всех элементов управления + CommonElementWPF = class + protected + element: FrameworkElement; + procedure Init0(el: FrameworkElement; width: real := 0; x: real := -1; y: real := -1); + private + procedure SetWP(w: real) := element.Width := w; + procedure SetHP(h: real) := element.Height := h; + procedure SetMPB(m: real) := element.Margin := new Thickness(0,0,0,m); + procedure SetMPs(m: (real, real, real, real)) := element.Margin := new Thickness(m[0],m[1],m[2],m[3]); + procedure SetTTP(s: string) := element.Tooltip := s; + procedure SetEP(enabled: boolean) := element.IsEnabled := enabled; + public + /// Ширина элемента управления + property Width: real read InvokeReal(()->element.Width) write Invoke(SetWP, value); + /// Высота элемента управления + property Height: real read InvokeReal(()->element.Height) write Invoke(SetHP, value); virtual; + /// Отступ элемента управления + //property Margin: real read InvokeReal(()->element.Margin.Bottom) write Invoke(SetMPB, value); + /// Нижний отступ элемента управления + property BottomMargin: real read InvokeReal(()->element.Margin.Bottom) write Invoke(SetMPB, value); + /// Отступы элемента управления + property Margins: (real,real,real,real) + //read InvokeReal(()->element.Margin.Bottom) + write Invoke(SetMPs, value); + /// Активирован ли элемент управления + property Enabled: boolean read InvokeBoolean(()->element.IsEnabled) write Invoke(SetEP, value); + /// Всплывающая подсказка + property Tooltip: string read Invokestring(()->element.ToolTip as string) write Invoke(SetTTP, value); + end; + + ///!# + /// Базовый класс для панелей + PanelWPF = class(CommonElementWPF) + public + fsize: real := 12; + private + bb: Border; + property p: StackPanel read element as StackPanel; + procedure CreateP(wh: real; d: Dock; c: Color; InternalMargin: real); + begin + bb := new Border(); + bb.Background := new SolidColorBrush(c); + var p := new StackPanel; + element := p; + bb.Child := p; + p.Background := GetBrush(c); + p.Margin := new System.Windows.Thickness(InternalMargin); + + if (d = Dock.Left) or (d = Dock.Right) then + begin + p.Orientation := Orientation.Vertical; + bb.Width := wh; + end + else + begin + p.Orientation := Orientation.Horizontal; + bb.Height := wh; + end; + DockPanel.SetDock(bb, d); + MainDockPanel.children.Insert(0, bb); + //ActivePanel := p; + __SetActivePanelInternal(p); + p.Tag := Self; + end; + procedure SetColorP(c: GColor); + begin + p.Background := GetBrush(c); + bb.Background := p.Background + end; + function GetColorP := (p.Background as SolidColorBrush).Color; + procedure SetTTP(s: string) := p.ToolTip := s; + static procedure SetFSzPP(p: GPanel; value: real); + begin + if value<=0 then exit; + foreach var c: FrameworkElement in p.Children do + SetFSzElement(c,value); + end; + static procedure SetFSzElement(c: FrameworkElement; value: real); + begin + if value<=0 then exit; + if c is GControl then + (c as GControl).FontSize := value + else if c is GTextBlock then + (c as GTextBlock).FontSize := value + else if c is GPanel then + SetFSzPP(c as GPanel,value); + end; + procedure SetFSzP(value: real); + begin + if value<=0 then exit; + fsize := value; + SetFSzPP(Self.p,value); + end; + public + constructor Create(wh: real; d: Dock; c: Color; internalMargin: real); + begin + Invoke(CreateP,wh,d,c,internalMargin); + end; + constructor Create(wh: real; d: Dock; c: Color) := Create(wh,d,c,10); + constructor Create(wh: real := 150; d: Dock := Dock.Left) := Create(wh,d,PanelsColor,10); + /// Цвет + property Color: GColor read Invoke&(GetColorP) write Invoke(SetColorP, value); + /// Ширина внутренней границы + property InternalMargin: real + read InvokeReal(()->p.Margin.Left) + write Invoke(procedure -> p.Margin := new System.Windows.Thickness(internalMargin), value); + /// Всплывающая подсказка + property Tooltip: string read Invokestring(()->p.ToolTip as string) write Invoke(SetTTP, value); + /// Размер шрифта + property FontSize: real read fsize write Invoke(SetFSzP, value); virtual; + /// Имя шрифта + //property FontName: string write Invoke(SetFontNameP, value); virtual; + end; + + /// Класс левой панели + LeftPanelWPF = class(PanelWPF) + public + constructor Create(width: real; c: GColor; internalMargin: real); + begin + inherited Create(width, Dock.Left,c,internalMargin) + end; + constructor Create(width: real; c: GColor) := Create(width,c,10); + constructor Create(width: real := 150) := Create(width,PanelsColor,10); + end; + + /// Класс правой панели + RightPanelWPF = class(PanelWPF) + public + constructor Create(width: real; c: GColor; internalMargin: real); + begin + inherited Create(width, Dock.Right,c,internalMargin) + end; + constructor Create(width: real; c: GColor) := Create(width,c,10); + constructor Create(width: real := 150) := Create(width,PanelsColor,10); + end; + + CommonControlWPF = class(CommonElementWPF) + private + property Control: GControl read element as GControl; + procedure SetFSzP(size: real) := if size > 0 then control.FontSize := size; + procedure SetFontNameP(name: string) := control.FontFamily := new FontFamily(name); + public + /// Размер шрифта + property FontSize: real read InvokeReal(()->control.FontSize) write Invoke(SetFSzP, value); virtual; + /// Имя шрифта + property FontName: string write Invoke(SetFontNameP, value); virtual; + end; + + ///!# + ClickableControlWPF = class(CommonControlWPF) + protected + procedure ClickP(sender: Object; e: RoutedEventArgs); + begin + if Click <> nil then + Click; + end; + public + /// Событие нажатия на элемент управления + Click: procedure; + end; + + StackPanelWPF = class(CommonControlWPF) + private + property sp: StackPanel read element as StackPanel; + procedure CreateP(Orient: Orientation; width,height: real); + begin + element := new StackPanel; + element.Focusable := False; + if width>0 then + element.Width := width; + if height>0 then + element.Height := height; + sp.Orientation := Orient; + __ActivePanelInternal.Children.Add(sp); + _ActivePanel := sp; + end; + procedure SetColorP(c: GColor); + begin + sp.Background := GetBrush(c); + end; + function GetColorP := (sp.Background as SolidColorBrush).Color; + procedure SetTTP(s: string); + begin + sp.ToolTip := s; + end; + public + constructor (Orient: Orientation; width: real := 0; height: real := 0) := Invoke(CreateP,Orient,width,height); + property Color: GColor read Invoke&(GetColorP) write Invoke(SetColorP, value); + end; + + /// Элемент управления Grid + GridWPF = class(CommonElementWPF) + private + property gr: UniformGrid read element as UniformGrid; + procedure CreatePP(rows,columns: integer); // только для добавления как главной панели + begin + element := new UniformGrid(); + gr.Rows := rows; + gr.Columns := columns; + element.Focusable := False; + MainDockPanel.children.RemoveAt(MainDockPanel.children.Count-1); + MainDockPanel.children.Add(gr); + end; + procedure CreateP(rows,columns,InternalMargin: integer); + begin + element := new UniformGrid(); + element.Focusable := False; + gr.Rows := rows; + gr.Columns := columns; + __ActivePanelInternal.Children.Add(gr); + _ActivePanel := gr; + _ActivePanel.Tag := Self; + Self.InternalMargin := InternalMargin; + end; + constructor (i: boolean; rows,columns: integer) := Invoke(CreatePP,rows,columns); // фиктивный первый параметр + public + constructor (rows: integer := 1; columns: integer := 1; InternalMargin: integer := 5) + := Invoke(CreateP,rows,columns,InternalMargin); + property Rows: integer read InvokeInteger(()->gr.Rows) + write Invoke(procedure->if value>0 then gr.Rows := value); + property Columns: integer read InvokeInteger(()->gr.Columns) + write Invoke(procedure->if value>0 then gr.Columns := value); + auto property InternalMargin: real := 5; + end; + + /// Элемент управления "Изображение" + ImageWPF = class(CommonControlWPF) + private + property im: Image read element as Image; + procedure CreatePXY(x,y: real; name: string; width: real := 0); + begin + Init0(new Image(),width,x,y); + im.Source := new BitmapImage(); + im.Source := new BitmapImage(new System.Uri(name,System.UriKind.RelativeOrAbsolute)); + end; + procedure CreateP(name: string) := CreatePXY(-1,-1,name,0); + procedure CreatePP; + begin + element := new Image(); + element.Focusable := False; + MainDockPanel.children.RemoveAt(MainDockPanel.children.Count-1); + MainDockPanel.children.Add(im); + end; + function GetNameP: string; + begin + Result := (im.Source as BitmapImage).UriSource.AbsolutePath + end; + procedure SetNameP(value: string); + begin + im.Source := new BitmapImage(new System.Uri(value,System.UriKind.RelativeOrAbsolute)); + end; + constructor (i: integer) := Invoke(CreatePP); // фиктивный первый параметр + public + constructor (name: string) := Invoke(CreateP,name); + constructor (x,y: real; name: string; width: real := 0) := Invoke(CreatePXY,x,y,name,width); + /// Имя файла изображения + property Name: string read InvokeString(GetNameP) write Invoke(SetNameP,value); + end; + + + /// Элемент управления "Кнопка" + ButtonWPF = class(ClickableControlWPF) + public + property b: GButton read element as GButton; + + procedure CreatePXY(x,y: real; Txt: string; width: real; fontSize: real); + begin + Init0(new GButton,width,x,y); + Text := Txt; + Self.FontSize := fontSize; + b.Click += (o,e) -> if Click <> nil then Click; + end; + procedure CreateP(text: string; fontSize: real) := CreatePXY(-1,-1,text,0,fontSize); + + procedure SetTextP(t: string) := b.Content := t; + public + constructor Create(Txt: string; fontSize: real := 0) := Invoke(CreateP, Txt, fontSize); + constructor Create(x, y: real; Txt: string; width: real := 0; fontSize: real := 0) := Invoke(CreatePXY, x, y, Txt, width, fontSize); + + /// Текст на кнопке + property Text: string read InvokeString(()->b.Content as string) write Invoke(SetTextP, value); + end; + + /// Элемент управления "Текст" + TextBlockWPF = class(CommonElementWPF) + private + property tb: GTextBlock read element as GTextBlock; + + procedure CreatePXY(x, y: real; Txt: string; width: real; fontsize: real); + begin + Init0(new GTextBlock, width, x, y); + //Margin := 3; + Text := Txt; + Self.FontSize := fontSize; + end; + procedure CreateP(text: string; fontSize: real) := CreatePXY(-1,-1,text,0,fontSize); + + procedure SetTextP(t: string) := tb.Text := t; + procedure SetFontSizeP(sz: real) := if sz>0 then tb.FontSize := sz; + procedure SetFontNameP(name: string) := tb.FontFamily := new FontFamily(name); + procedure SetTextWrappingP(value: boolean) := if value then tb.TextWrapping := TextWrapping.Wrap else + tb.TextWrapping := TextWrapping.NoWrap; + public + constructor Create(Txt: string; fontsize: real := 0):= Invoke(CreateP, Txt, fontsize); + constructor Create(x, y: real; Txt: string; width: real := 0; fontSize: real := 0):= Invoke(CreatePXY, x, y, Txt, width, fontSize); + + /// Текст блока текста + property Text: string read InvokeString(()->tb.Text) write Invoke(SetTextP, value); + /// Размер шрифта + property FontSize: real read InvokeReal(()->tb.FontSize) write Invoke(SetFontSizeP, value); virtual; + /// Имя шрифта + property FontName: string write Invoke(SetFontNameP, value); virtual; + /// Включён ли режим переноса слов + property Wrapping: boolean read InvokeBoolean(()->tb.TextWrapping = TextWrapping.Wrap) + write Invoke(SetTextWrappingP, value); virtual; + end; + + /// Элемент управления "Целое число" + IntegerBlockWPF = class(TextBlockWPF) + private + val := 0; + message: string; + procedure CreatePXY(x, y: real; message: string; width: real; initValue: integer := 0; fontSize: real := 0); + begin + inherited CreatePXY(x,y,message + ' ' + initValue, width, fontSize); + Self.message := message; + val := initValue; + end; + procedure CreateP(message: string; initValue: integer := 0; fontSize: real := 0) := CreatePXY(-1,-1,message,0,initValue,fontSize); + public + constructor Create(message: string; initValue: integer := 0; fontSize: real := 0) := Invoke(CreateP, message, initValue, fontSize); + constructor Create(x, y: real; message: string; width: real := 0; initValue: integer := 0; fontSize: real := 0) := Invoke(CreatePXY, x, y, message, width, initValue, fontSize); + + /// Значение целого + property Value: integer read val write begin val := value; Text := message + ' ' + val; end; + static function operator implicit(ib: IntegerBlockWPF) := ib.Value; + static function operator=(ib: IntegerBlockWPF; v: integer) := ib.Value = v; + static function operator=(v: integer; ib: IntegerBlockWPF) := ib.Value = v; + static function operator<>(ib: IntegerBlockWPF; v: integer) := ib.Value <> v; + static function operator<>(v: integer; ib: IntegerBlockWPF) := ib.Value <> v; + static procedure operator+=(ib: IntegerBlockWPF; v: integer); + begin + ib.Value += v; + end; + static procedure operator-=(ib: IntegerBlockWPF; v: integer); + begin + ib.Value -= v; + end; + static procedure operator:=(ib: IntegerBlockWPF; v: integer) := ib.Value := v; + end; + + /// Элемент управления "Вещественное число" + RealBlockWPF = class(TextBlockWPF) + private + val := 0.0; + message: string; + procedure CreatePXY(x, y: real; message: string; width: real; initValue: real := 0; fontSize: real := 0); + begin + inherited CreatePXY(x,y,message + ' ' + initValue.ToString(FracDigits), width, fontSize); + Self.message := message; + val := initValue; + end; + procedure CreateP(message: string; initValue: real := 0; fontSize: real := 0) := CreatePXY(-1,-1,message,0,initValue,fontSize); + public + constructor Create(message: string; initValue: real := 0; fontSize: real := 0) := Invoke(CreateP, message, initValue, fontSize); + constructor Create(x, y: real; message: string; width: real := 0; initValue: real := 0; fontSize: real := 0) := Invoke(CreatePXY, x, y, message, width, initValue, fontSize); + + /// Значение вещественного + property Value: real read val write begin val := value; Text := message + ' ' + val.ToString(FracDigits); end; + /// Количество цифр после десятичной точки + auto property FracDigits: integer := 1; + static function operator implicit(ib: RealBlockWPF) := ib.Value; + static function operator=(ib: RealBlockWPF; v: real) := ib.Value = v; + static function operator=(v: real; ib: RealBlockWPF) := ib.Value = v; + static function operator<>(ib: RealBlockWPF; v: real) := ib.Value <> v; + static function operator<>(v: real; ib: RealBlockWPF) := ib.Value <> v; + static procedure operator+=(rb: RealBlockWPF; v: real); + begin + rb.Value += v; + end; + static procedure operator-=(rb: RealBlockWPF; v: real); + begin + rb.Value -= v; + end; + static procedure operator:=(rb: RealBlockWPF; v: real) := rb.Value := v; + end; + + /// Элемент управления "Текстовое поле" + TextBoxNoTitleWPF = class(CommonControlWPF) + private + property tb: GTextBox read element as GTextBox; + + procedure SetTextP(t: string) := tb.Text := t; + + procedure CreatePXY(x,y: real; txt: string; width: real); + begin + Init0(new GTextBox,width,x,y); + Text := txt; + tb.TextChanged += (o,e) -> if TextChanged <> nil then TextChanged; + element.Focusable := True; + //element.HorizontalAlignment := HorizontalAlignment.Stretch; + end; + procedure CreateP(text: string) := CreatePXY(-1,-1,text,0); + + procedure CreatePP; + begin + element := new TextBox(); + element.Focusable := False; + tb.AcceptsReturn := True; + //tb.TextWrapping := TextWrapping.Wrap; + tb.VerticalScrollBarVisibility := ScrollBarVisibility.Auto; + tb.HorizontalScrollBarVisibility := ScrollBarVisibility.Auto; + MainDockPanel.children.RemoveAt(MainDockPanel.children.Count-1); + MainDockPanel.children.Add(element); + end; + procedure SetReadOnlyP(value: boolean); + begin + element.Focusable := not value; + end; + constructor Create(i: integer) := Invoke(CreatePP); + public + /// Событие изменения текста + TextChanged: procedure; + constructor Create(text: string := '') := Invoke(CreateP, text); + constructor Create(x,y: real; text: string := ''; width: real := 0) := Invoke(CreatePXY, x, y, text, width); + + /// Текст в текстовом поле + property Text: string read InvokeString(()->tb.Text) write Invoke(SetTextP, value); + /// Добавление строки в конец + procedure Print(s: string); + begin + Text += s + ' '; + end; + /// Добавление строки в конец и переход на новую строку + procedure Println(s: string); + begin + Text += s + NewLine; + end; + /// Очистка текста в текстовом поле + procedure Clear := Text := ''; + /// Разрешено ли ручное редактирование текста + property ReadOnly: boolean read InvokeBoolean(()->not element.Focusable) write Invoke(SetReadOnlyP,value); + end; + + ///!# + ControlWithTitleWPF = class(CommonControlWPF) + private + property tb: GTextBlock read (element as StackPanel).Children[0] as TextBlock; + property MainElement: GControl read (element as StackPanel).Children[1] as GControl; + procedure SetTitleP(t: string); + begin + if t = '' then + tb.Visibility := System.Windows.Visibility.Collapsed + else tb.Visibility := System.Windows.Visibility.Visible; + tb.Text := t; + end; + procedure SetTitleVisibilityP(v: boolean); + begin + if v then + tb.Visibility := System.Windows.Visibility.Visible + else tb.Visibility := System.Windows.Visibility.Collapsed; + end; + procedure SetHP(h: real) := MainElement.Height := h; + + function CreateStackPanel(el: FrameworkElement; title: string): StackPanel; + begin + var sp := new StackPanel; + var tb := new TextBlock; + tb.Text := title; + tb.Margin := new Thickness(0,0,0,3); + sp.Children.Add(tb); + if title = '' then + tb.Visibility := System.Windows.Visibility.Collapsed; + sp.Children.Add(el); + Result := sp; + end; + + procedure Init1(el: FrameworkElement; title: string; width: real := 0; x: real := -1; y: real := -1); + begin + var sp := CreateStackPanel(el,title); + Init0(sp,width,x,y); + end; + procedure SetFSzP(size: real); + begin + if size<=0 then + exit; + tb.FontSize := size; + MainElement.FontSize := size; + end; + procedure SetFontNameP(name: string); + begin + tb.FontFamily := new FontFamily(name); + MainElement.FontFamily := new FontFamily(name); + end; + public + /// Заголовок + property Title: string read InvokeString(()->tb.Text) write Invoke(SetTitleP, value); virtual; + /// Видим ли заголовок + property TitleVisible: boolean read InvokeBoolean(()->tb.Visibility <> System.Windows.Visibility.Collapsed) + write Invoke(SetTitleVisibilityP, value); virtual; + /// Высота элемента управления + property Height: real read InvokeReal(()->MainElement.ActualHeight) write Invoke(SetHP, value); override; + /// Размер шрифта + property FontSize: real read InvokeReal(()->MainElement.FontSize) write Invoke(SetFSzP, value); override; + /// Имя шрифта + property FontName: string write Invoke(SetFontNameP, value); override; + end; + + /// Элемент управления "Текстовое поле с заголовком" + TextBoxWPF = class(ControlWithTitleWPF) + private + property tbx: GTextBox read MainElement as TextBox; + + procedure SetTextP(t: string) := tbx.Text := t; + procedure SetMultiLineP(b: boolean) := if b then tbx.TextWrapping := TextWrapping.Wrap else tbx.TextWrapping := TextWrapping.NoWrap; + + procedure CreatePXY(x,y: real; title,txt: string; width: real); + begin + Init1(new TextBox, title, width, x, y); + //tbx.TextWrapping := TextWrapping.Wrap; + tbx.Text := txt; + tbx.TextChanged += (o,e) -> if ValueChanged <> nil then ValueChanged; + end; + procedure CreateAsMainControlP; + begin + element := CreateStackPanel(new TextBox,''); + Wrapping := True; + tbx.TextChanged += (o,e) -> if ValueChanged <> nil then ValueChanged; + MainDockPanel.children.RemoveAt(MainDockPanel.children.Count-1); + MainDockPanel.children.Add(element); + end; + procedure CreateP(title,text: string) := CreatePXY(-1,-1,title,text,0); + constructor Create(i: integer) := Invoke(CreateAsMainControlP); + public + /// Событие "значение изменилось" + ValueChanged: procedure; + constructor Create(title: string := '') := Invoke(CreateP, title, ''); + constructor Create(x,y: real; title: string := ''; width: real := 120) := Invoke(CreatePXY, x, y, title,'', width); + + /// Очистка текста в текстовом поле + procedure Clear := Text := ''; + /// Текст в текстовом поле + property Text: string read InvokeString(()->tbx.Text) write Invoke(SetTextP, value); + /// Включён ли режим переноса слов + property Wrapping: boolean read InvokeBoolean(()->tbx.TextWrapping = TextWrapping.Wrap) write Invoke(SetMultiLineP, value); + end; + + /// Элемент управления "Целое поле" + IntegerBoxWPF = class(TextBoxWPF) + private + function GetValue: integer; + begin + if Trim(Text) = '' then + Result := 0 + else Result := integer.Parse(Text); + Result := Result.Clamp(Minimum,Maximum); + end; + + procedure SetValue(x: integer) := Text := x.Clamp(Minimum,Maximum).ToString; + procedure Rest(min,max:integer); + begin + Invoke(()-> begin + Self.Minimum := min; + Self.Maximum := max; + Value := Minimum; + tbx.MouseWheel += (o, e) -> begin + if e.Delta > 0 then + Value := Value + 1 + else if e.Delta < 0 then + Value := Value - 1 + end; + tbx.KeyDown += (o, e) -> begin + if not ((e.Key >= Key.D0) and (e.Key <= Key.D9)) then + e.Handled := True; + end; + end); + end; + public + constructor Create(title: string := ''; min: integer := 0; max: integer := 10); + begin + inherited Create(title); + Rest(min,max); + end; + constructor Create(x,y: real; title: string; min,max: integer; width: real := 0); + begin + inherited Create(x,y,title,width); + Rest(min,max); + end; + + /// Минимальное значение в тектовом поле + auto property Minimum: integer := 0; + /// Максимальное значение в тектовом поле + auto property Maximum: integer := 100; + /// Текущее значение текстового поля + property Value: integer read GetValue write SetValue; + + static function operator implicit(ib: IntegerBoxWPF) := ib.Value; + static function operator=(ib: IntegerBoxWPF; v: integer) := ib.Value = v; + static function operator=(v: integer; ib: IntegerBoxWPF) := ib.Value = v; + static function operator<>(ib: IntegerBoxWPF; v: integer) := ib.Value <> v; + static function operator<>(v: integer; ib: IntegerBoxWPF) := ib.Value <> v; + static procedure operator:=(ib: IntegerBoxWPF; v: integer) := ib.Value := v; + end; + + /// Элемент управления "Список" + ListBoxWPF = class(ControlWithTitleWPF) + protected + function lb: GListBox := MainElement as GListBox; + procedure CreatePXY(x,y: real; title: string; width,height: real); + begin + Init1(new GListBox,title,width,x,y); + //element.HorizontalAlignment := HorizontalAlignment.Stretch; + Self.Height := height; + lb.SelectionChanged += (o,e) -> if SelectionChanged<>nil then SelectionChanged; + end; + procedure CreateP(title: string; height: real) := CreatePXY(-1,-1,title,0,height); + + procedure AddP(s: string); + begin + var lbi := new ListBoxItem(); + lbi.Content := s; + lb.Items.Add(lbi); + end; + + procedure AddRangeP(ss: sequence of string); + begin + foreach var s in ss do + AddP(s); + end; + + procedure SortP := lb.Items.SortDescriptions.Add(new SortDescription('Content', ListSortDirection.Ascending)); + procedure SortPDescending := lb.Items.SortDescriptions.Add(new SortDescription('Content', ListSortDirection.Descending)); + public + /// Событие, возникающее при изменении текущего выделения + SelectionChanged: procedure; + constructor Create(title: string := ''; height: real := 150):= Invoke(CreateP, title, height); + constructor Create(x,y: real; title: string := ''; width: real := 150; height: real := 150):= Invoke(CreatePXY, x, y, title, width, height); + /// Сортировка строк в списке по возрастанию + procedure Sort := Invoke(SortP); + /// Сортировка строк в списке по убыванию + procedure SortDescending := Invoke(SortPDescending); + /// Добавляет элемент в список + procedure Add(s: string) := Invoke(AddP, s); + /// Добавляет набор элементов в список + procedure AddRange(params ss: array of string) := Invoke(AddRangeP, ss); + /// Количество элементов в списке + property Count: integer read InvokeInteger(()->lb.Items.Count); + /// Индекс выбранного элемента + property SelectedIndex: integer read InvokeInteger(()->lb.SelectedIndex) write Invoke(procedure(t: integer) -> lb.SelectedIndex := t, value); + /// Текст выбранного элемента + property SelectedText: string read InvokeString(()->(lb.SelectedItem as ListBoxItem).Content.ToString) + write Invoke(procedure(t: string) -> (lb.SelectedItem as ListBoxItem).Content := t, value); + end; + + /// Элемент управления "Раскрывающийся список" + ComboBoxWPF = class(ControlWithTitleWPF) + private + property cb: ComboBox read MainElement as ComboBox; + + procedure CreatePXY(x,y: real; title: string; width: real); + begin + Init1(new ComboBox, title, width, x, y); + cb.SelectionChanged += (o,e) -> if SelectionChanged <> nil then SelectionChanged; + end; + procedure CreateP(title: string) := CreatePXY(-1,-1,title,0); + procedure AddP(s: string); + begin + cb.Items.Add(s); + if cb.Items.Count = 1 then + cb.SelectedIndex := 0; + end; + procedure AddRangeP(params ss: array of string); + begin + foreach var s in ss do + AddP(s); + end; + public + /// Событие, возникающее при изменении текущего выделения + SelectionChanged: procedure; + constructor Create(title: string := '') := Invoke(CreateP, title); + constructor Create(x,y: real; title: string := ''; width: real := 120) := Invoke(CreatePXY, x, y, title, width); + + /// Добавляет элемент в список + procedure Add(s: string) := Invoke(AddP, s); + /// Добавляет набор элементов в список + procedure AddRange(params ss: array of string) := Invoke(AddRangeP, ss); + /// Выбранная строка + function SelectedText := InvokeString(()->cb.SelectedItem as string); + /// Индекс выбранной строки + function SelectedIndex := InvokeInteger(()->cb.SelectedIndex); + property Items[i: integer]: string read InvokeString(()->cb.Items[i] as string); default; + end; + + SliderBase = class(ControlWithTitleWPF) + private + titl: string; // часть заголовка без числа + function sl: Slider := MainElement as Slider; + function GetMinimum: real := InvokeReal(()->sl.Minimum); + procedure SetMinimumP(r: real) := sl.Minimum := r; + procedure SetMinimum(r: real) := Invoke(SetMinimumP, r); + function GetMaximum: real := InvokeReal(()->sl.Maximum); + procedure SetMaximumP(r: real) := sl.Maximum := r; + procedure SetMaximum(r: real) := Invoke(SetMaximumP, r); + function GetValue: real := InvokeReal(()->sl.Value); + procedure SetValueP(r: real) := sl.Value := r; + procedure SetValue(r: real) := Invoke(SetValueP, r); + function GetFrequency: real := InvokeReal(()->sl.TickFrequency); + procedure SetFrequencyP(r: real) := sl.TickFrequency := r; + procedure SetFrequency(r: real) := Invoke(SetFrequencyP, r); + private + procedure CreatePXY(x,y: real; title: string; min, max, val, freq: real; width: real); + begin + Init1(new Slider,title,width,x,y); + Remainder(title,min, max, val, freq); + end; + procedure Remainder(tit: string; min, max, val, freq: real); + begin + titl := tit; + sl.ValueChanged += procedure(o, e) -> if ValueChanged <> nil then ValueChanged; + sl.ValueChanged += procedure(o, e) -> if title <> '' then tb.Text := Title + ' ' + sl.Value; + if titl <> '' then tb.Text := Title + ' ' + sl.Value; + sl.TickPlacement := System.Windows.Controls.Primitives.TickPlacement.BottomRight; + sl.Minimum := min; + sl.Maximum := max; + sl.Value := val.Clamp(min,max); + if freq<=0 then + sl.TickFrequency := (max-min)/10 + else sl.TickFrequency := freq; + sl.Foreground := Brushes.Black; + sl.IsSnapToTickEnabled := True; + end; + procedure CreateP(title: string; min, max, val, freq: real) := CreatePXY(-1, -1, title, min, max, val, freq, 0); + procedure SetTitleP1(tit: string); + begin + titl := tit; + SetTitleP(tit +' ' + sl.Value); + end; + public + /// Событие, возникающее при изменении значения + ValueChanged: procedure; + /// Заголовок + property Title: string read InvokeString(()->titl) write Invoke(SetTitleP1, value); override; + end; + + /// Элемент управления "Слайдер" с целыми значениями + SliderWPF = class(SliderBase) + private + procedure CreatePXYI(x,y: real; title: string; min, max, val, freq: integer; width: integer); + begin + Init1(new Slider,title,width,x,y); + if freq<=0 then + freq := (max-min) div 10; + if freq = 0 then + freq := 1; + Remainder(title,min, max, val, freq); + end; + procedure CreatePI(title: string; min, max, val, freq: integer) := CreatePXYI(-1, -1, title, min, max, val, freq, 0); + public + constructor Create(min, max: integer; val: integer := integer.MinValue; freq: integer := 0) + := Invoke(CreatePI, '', min, max, val, freq); + constructor Create(title: string := ''); + begin + Create(title, 0, 10, 0); + end; + constructor Create(title: string; min, max: integer; val: integer := integer.MinValue; freq: integer := 0) + := Invoke(CreatePI, title, min, max, val, freq); + constructor Create(x,y: real; title: string; min, max: integer; width: integer; val: integer := integer.MinValue; freq: integer := 0) + := Invoke(CreatePXYI, x,y,title,min, max, val, freq, width); + /// Минимальное значение + property Minimum: integer read GetMinimum.Round write SetMinimum(value); + /// Максимальное значение + property Maximum: integer read GetMaximum.Round write SetMaximum(value); + /// Текущее значение + property Value: integer read GetValue.Round write SetValue(value); + /// Интервал между делениями + property Frequency: integer read GetFrequency.Round write SetFrequency(value); + end; + + /// Элемент управления "Слайдер" с вещественными значениями + SliderRealWPF = class(SliderBase) + public + constructor Create(min, max: real; val: real := real.MinValue; freq: real := 0) := Invoke(CreateP, '', min, max, val, freq); + constructor Create(title: string := '') := Create(title, 0, 10, 0); + constructor Create(title: string; min, max: real; val: real := real.MinValue; freq: real := 0) := Invoke(CreateP, title, min, max, val, freq); + constructor Create(x,y: real; title: string; min, max: real; width: real; val: real := real.MinValue; freq: real := 0) := Invoke(CreatePXY, x,y,title,min, max, val, freq, width); + /// Минимальное значение + property Minimum: real read GetMinimum write SetMinimum; + /// Максимальное значение + property Maximum: real read GetMaximum write SetMaximum; + /// Текущее значение + property Value: real read GetValue write SetValue; + /// Интервал между делениями + property Frequency: real read GetFrequency write SetFrequency; + end; + + /// Элемент управления "Флажок" + CheckBoxWPF = class(ClickableControlWPF) + private + property cb: CheckBox read element as CheckBox; + protected + procedure CreatePXY(x,y: real; text: string; width: real); + begin + Init0(new CheckBox,width,x,y); + cb.Content := text; + cb.Click += ClickP; + end; + procedure CreateP(text: string) := CreatePXY(-1,-1,text,0); + public + constructor Create(text: string) := Invoke(CreateP, text); + constructor Create(x,y: real; text: string; width: real := 0) := Invoke(CreatePXY, x,y,text,width); + + /// Текст элемента управления + property Text: string read InvokeString(()->cb.Content as string) write Invoke(procedure(t: string) -> cb.Content := t, value); + /// Включен ли флажок + property Checked: boolean read InvokeBoolean(()->cb.IsChecked.Value) write Invoke(procedure(t: boolean) -> cb.IsChecked := t, value); + end; + + /// Элемент управления "Переключатель" + RadioButtonWPF = class(ClickableControlWPF) + private + property rb: RadioButton read element as RadioButton; + protected + procedure CreatePXY(x,y: real; text: string; width: real); + begin + Init0(new RadioButton,width,x,y); + rb.Content := text; + rb.Click += ClickP; + end; + procedure CreateP(text: string) := CreatePXY(-1,-1,text,0); + public + constructor Create(text: string) := Invoke(CreateP, text); + constructor Create(x,y: real; text: string; width: real := 0) := Invoke(CreatePXY, x,y,text,width); + + /// Текст элемента управления + property Text: string read InvokeString(()->rb.Content as string) write Invoke(procedure(t: string) -> rb.Content := t, value); + /// Включена ли радиокнопка + property Checked: boolean read InvokeBoolean(()->rb.IsChecked.Value) write Invoke(procedure(t: boolean) -> rb.IsChecked := t, value); + end; + + /// Элемент управления "Строка статуса" + StatusBarWPF = class(CommonControlWPF) + private + property sb: GStatusBar read element as GStatusBar; + procedure SetTextP(text: string) := (sb.Items[0] as StatusBarItem).Content := text; + procedure SetTextPI(i: integer; text: string) := (sb.Items[i] as StatusBarItem).Content := text; + protected + procedure CreateP(height: real; itemWidth: real); + begin + element := new GStatusBar; + element.Focusable := False; + element.Height := height; + DockPanel.SetDock(sb, Dock.Bottom); + MainDockPanel.children.Insert(0, sb); + + var sbi := new StatusBarItem(); + sbi.Content := ''; + if itemWidth > 0 then + sbi.Width := itemWidth; + sb.Items.Add(sbi); + + // последняя фиктивная панель - для заполнения + sbi := new StatusBarItem(); + sbi.Content := ''; + sb.Items.Add(sbi); + end; + procedure AddItemP(text: string; itemWidth: real); + begin + var sbi := new StatusBarItem(); + sbi.Content := text; + if itemWidth > 0 then + sbi.Width := itemWidth; + sb.Items.Insert(sb.Items.Count-1,sbi); + end; + public + constructor Create(height: real := 24; itemWidth: real := 0) := Invoke(CreateP,height,itemWidth); + /// Добавить текстовое поле указанной ширины к строке статуса + procedure AddText(text: string; itemWidth: real := 0) := Invoke(AddItemP,text,itemWidth); + + /// Текст основного текстового поля в строке статуса + property Text: string read InvokeString(()->(sb.Items[0] as StatusBarItem).Content as string) + write Invoke(SetTextP,value); + /// Текст i-того текстового поля в строке статуса + property ItemText[i: integer]: string read InvokeString(()->(sb.Items[i] as StatusBarItem).Content as string) + write Invoke(SetTextPI,i,value); + end; + + /// Элемент управления "Канва" + CanvasWPF = class(CommonControlWPF) + protected + property can: Canvas read element as Canvas; + procedure CreatePP; + begin + element := new Canvas(); + element.Focusable := False; + MainDockPanel.children.RemoveAt(MainDockPanel.children.Count-1); + MainDockPanel.children.Add(can); + __SetActivePanelInternal(can); + //ActivePanel := can; + end; + constructor (i: integer) := Invoke(CreatePP); // фиктивный первый параметр + procedure SetColorP(c: GColor); + begin + can.Background := GetBrush(c); + end; + function GetColorP := (can.Background as SolidColorBrush).Color; + public + /// Цвет элемента управления + property Color: GColor read Invoke&(GetColorP) write Invoke(SetColorP, value); + end; + +function GetProperties(t1: T): sequence of string; +function GetFields(t1: T): sequence of string; + +type + /// Элемент управления "Список данных" + ListViewWPF = class(CommonControlWPF) + private + gv: GridView; + property lv: ListView read element as ListView; + procedure CreatePP; + begin + element := new ListView(); + element.Focusable := False; + MainDockPanel.children.RemoveAt(MainDockPanel.children.Count-1); + MainDockPanel.children.Add(lv); + gv := new GridView; + lv.View := gv; + end; + function ColumnCountP: integer := gv.Columns.Count; + function RowCountP: integer := lv.Items.Count; + constructor (i: integer); + begin + Invoke(CreatePP); + end; + public + /// Заполнить элемент управления данными + procedure Fill(data: sequence of T); + begin + Invoke(()-> begin + var properties := GetProperties(data.First); + gv.Columns.Clear; + foreach var fld in properties do + begin + var col := new GridViewColumn; + col.Header := fld; + col.Width := 150; + col.DisplayMemberBinding := new System.Windows.Data.Binding(fld); + gv.Columns.Add(col); + end; + lv.ItemsSource := data; + end); + end; + /// Очистить данные + procedure Clear; + begin + Invoke(()-> begin + gv.Columns.Clear; + end); + end; + /// Установить заголовки для данных + procedure SetHeaders(params a: array of string); + begin + Invoke(()-> begin + for var i:=0 to a.Length - 1 do + gv.Columns[i].Header := a[i]; + end); + end; + /// Число столбцов данных + function ColumnCount: integer := InvokeInteger(ColumnCountP); + /// Число строк данных + function RowCount: integer := InvokeInteger(RowCountP); + end; + + ///!# + /// Пункт меню + MenuItemWPF = class + private + mi: MenuItem; + litem := new List; + procedure CreateP(mii: MenuItem; text: string); + begin + mi := mii; + mi.Header := text; + mi.Click += (o,e) -> begin + if Click<>nil then Click; + end; + end; + constructor Create(mi: MenuItem; text: string) := Invoke(CreateP,mi,text); + procedure SetTextP(text: string); + begin + mi.Header := text; + end; + function AddMenuItemP(text: string; p: procedure): MenuItemWPF; + begin + if text='-' then + begin + mi.Items.Add(new Separator); + exit + end; + var mii := new MenuItem; + mii.Header := text; + mi.Items.Add(mii); + mii.Click += (o,e)->if Click<>nil then Click; + Result := new MenuItemWPF(mii,text); + Result.Click := p; + litem.Add(Result); + end; + procedure AddSeparatorP := mi.Items.Add(new Separator); + public + /// Событие выбора пункта меню + Click: procedure; + /// Текст пункта меню + property Text: string read InvokeString(()-> mi.Header as string) write Invoke(SetTextP,text); + /// Набор пунктов меню + property Items[i: integer]: MenuItemWPF read Invoke&(()->litem[i]); default; + /// Добавить пункт подменю + function Add(text: string; p: procedure := nil): MenuItemWPF + := Invoke&(()->AddMenuItemP(text,p)); + + /// Добавить разделитель + procedure AddSeparator := Invoke(AddSeparatorP); + /// Добавить набор пунктов меню + procedure AddRange(params items: array of string); + begin + foreach var it in items do + Add(it); + end; + end; + + /// Элемент управления "Главное меню" + MenuWPF = class(CommonControlWPF) + private + litem := new List; + property m: Menu read element as Menu; + procedure CreatePP; + begin + element := new Menu(); + element.Height := 20; + DockPanel.SetDock(m, Dock.Top); + MainDockPanel.children.Insert(0,element); + end; + function AddMenuItemP(text: string): MenuItemWPF; + begin + var mi := new MenuItem; + mi.Header := text; + m.Items.Add(mi); + Result := new MenuItemWPF(mi,text); + litem.Add(Result); + end; + public + constructor Create := Invoke(CreatePP); + property Items[i: integer]: MenuItemWPF read Invoke&(()->litem[i]); default; + + /// Добавить пункт горизонтального меню + function Add(text: string): MenuItemWPF := Invoke&(()->AddMenuItemP(text)); + /// Добавить набор пунктов меню + procedure AddRange(params items: array of string); + begin + foreach var it in items do + Add(it); + end; + end; + + ///!# + /// Статический класс для создания главных элементов управления + SetMainControl = static class + public + static function AsImage: ImageWPF := new ImageWPF(0); + static function AsCanvas: CanvasWPF := new CanvasWPF(0); + static function AsListView: ListViewWPF := new ListViewWPF(0); + static function AsTextBox: TextBoxNoTitleWPF := new TextBoxNoTitleWPF(0); + static function AsGrid(rows: integer := 1; columns: integer := 1): GridWPF := new GridWPF(true,rows,columns); + end; + + ///!# + /// Базовый класс стандартных окон диалога + FileDialogWPF = class + private + d: Microsoft.Win32.FileDialog; + procedure SetFilterP(value: string) := d.Filter := value; + procedure SetInitialDirectoryP(value: string) := d.InitialDirectory := value; + function ShowDialogP: boolean; + begin + var r := d.ShowDialog; + Result := r.HasValue and r.Value; + end; + public + function ShowDialog: boolean := InvokeBoolean(ShowDialogP); + function FileName: string := InvokeString(()->d.FileName); + property Filter: string read InvokeString(()->d.Filter) write Invoke(SetFilterP,value); + property InitialDirectory: string read InvokeString(()->d.InitialDirectory) write Invoke(SetInitialDirectoryP,value); + end; + + /// Стандартное окно диалога открытия файла + OpenFileDialogWPF = class(FileDialogWPF) + private + procedure CreateP(initDirectory,filter: string); + begin + d := new Microsoft.Win32.OpenFileDialog; + d.InitialDirectory := initDirectory; + d.Filter := filter; + end; + public + constructor Create(initDirectory: string := ''; filter: string := '') := Invoke(CreateP,initDirectory,filter); + end; + + /// Стандартное окно диалога сохранения файла + SaveFileDialogWPF = class(FileDialogWPF) + private + procedure CreateP(initDirectory,filter: string); + begin + d := new Microsoft.Win32.SaveFileDialog; + d.InitialDirectory := initDirectory; + d.Filter := filter; + end; + public + constructor Create(initDirectory: string := ''; filter: string := '') := Invoke(CreateP,initDirectory,filter); + end; + +{-----------------------------------------------------} +// Для каждого контрола - пара функций. +// Функция без координат и ширины рассчитана на создание внутри вертикальной StackPanel (LeftPanel, RightPanel) +// Panel - вспомогательная, нужна только для создания LeftPanel, RightPanel + +/// Элемент управления "Кнопка" +function Button(Txt: string; fontSize: real := 0): ButtonWPF; +/// Элемент управления "Кнопка" с заданными координатами +function Button(x, y: real; Txt: string; width: real := 0; fontSize: real := 0): ButtonWPF; + +/// Элемент управления "Текст" +function TextBlock(Txt: string; fontSize: real := 0): TextBlockWPF; +/// Элемент управления "Текст" с заданными координатами +function TextBlock(x, y: real; Txt: string; width: real := 0; fontSize: real := 0): TextBlockWPF; + +/// Элемент управления "Целое число" +function IntegerBlock(message: string; initValue: integer := 0; fontSize: real := 0): IntegerBlockWPF; +/// Элемент управления "Целое число" с заданными координатами +function IntegerBlock(x, y: real; message: string; width: real := 0; initValue: integer := 0; fontSize: real := 0): IntegerBlockWPF; + +/// Элемент управления "Вещественное число" +function RealBlock(message: string; initValue: real := 0; fontSize: real := 0): RealBlockWPF; +/// Элемент управления "Вещественное число" с заданными координатами +function RealBlock(x, y: real; message: string; width: real := 0; initValue: real := 0; fontSize: real := 0): RealBlockWPF; + +/// Элемент управления "Флажок" +function CheckBox(text: string): CheckBoxWPF; +/// Элемент управления "Флажок" с заданными координатами +function CheckBox(x, y: real; text: string; width: real := 0): CheckBoxWPF; + +/// Элемент управления "Переключатель" +function RadioButton(text: string): RadioButtonWPF; +/// Элемент управления "Переключатель" с заданными координатами +function RadioButton(x, y: real; text: string; width: real := 0): RadioButtonWPF; + + +/// Элемент управления "Текстовое поле с заголовком" +function TextBox(text: string := ''): TextBoxWPF; +/// Элемент управления "Текстовое поле с заголовком" с заданными координатами +function TextBox(x, y: real; text: string := ''; width: real := 0): TextBoxWPF; + +/// Элемент управления "Целое поле" с диапазоном 0..10 +function IntegerBox(title: string): IntegerBoxWPF; +/// Элемент управления "Целое поле" с заданным диапазоном значений +function IntegerBox(title: string; min,max: integer): IntegerBoxWPF; +/// Элемент управления "Целое поле" с заданными координатами +function IntegerBox(x, y: real; title: string; min,max: integer; width: real := 0): IntegerBoxWPF; + +/// Элемент управления "Список" +function ListBox(title: string := ''; height: real := 150): ListBoxWPF; +/// Элемент управления "Список" с заданными координатами +function ListBox(x,y: real; title: string := ''; width: real := 150; height: real := 150): ListBoxWPF; + +/// Элемент управления "Слайдер с вещественными значениями" +function SliderReal(title: string := ''): SliderRealWPF; +/// Элемент управления "Слайдер с вещественными значениями" с заданным диапазоном значений и заголовком +function SliderReal(title: string; min,max: real; val: real := real.MinValue; freq: real := 0): SliderRealWPF; +/// Элемент управления "Слайдер с вещественными значениями" с заданным диапазоном значений +function SliderReal(min, max: real; val: real := real.MaxValue; freq: real := 0): SliderRealWPF; +/// Элемент управления "Слайдер с вещественными значениями" с заданными координатами +function SliderReal(x,y: real; title: string; min,max: real; width: real; val: real := real.MinValue; freq: real := 0): SliderRealWPF; + +/// Элемент управления "Слайдер" +function Slider(title: string := ''): SliderWPF; +/// Элемент управления "Слайдер" с заданным диапазоном значений и заголовком +function Slider(title: string; min,max: integer; val: integer := integer.MinValue; freq: integer := 0): SliderWPF; +/// Элемент управления "Слайдер" с заданным диапазоном значений +function Slider(min, max: integer; val: integer := integer.MinValue; freq: integer := 0): SliderWPF; +/// Элемент управления "Слайдер" с заданными координатами +function Slider(x,y: real; title: string; min,max: integer; width: integer; val: integer := integer.MinValue; freq: integer := 0): SliderWPF; + +/// Элемент управления "Изображение" +function Image(name: string): ImageWPF; +/// Элемент управления "Изображение" с заданными координатами +function Image(x,y: real; name: string; width: real := 0): ImageWPF; + +/// Элемент управления "Раскрывающийся список" +function ComboBox(title: string := ''): ComboBoxWPF; +/// Элемент управления "Раскрывающийся список" с заданными координатами +function ComboBox(x,y: real; title: string := ''; width: real := 120): ComboBoxWPF; + +/// Элемент управления "Главное меню" +function Menu: MenuWPF; + +/// Стандартное окно диалога открытия файла +function OpenFileDialog(initDirectory: string := ''; filter: string := ''): OpenFileDialogWPF; +/// Стандартное окно диалога сохранения файла +function SaveFileDialog(initDirectory: string := ''; filter: string := ''): SaveFileDialogWPF; + +/// Элемент управления "Левая панель" +function LeftPanel(width: real; c: Color; InternalMargin: real := 10): PanelWPF; +/// Элемент управления "Левая панель" +function LeftPanel(width: real := 150): PanelWPF; +/// Элемент управления "Правая панель" +function RightPanel(width: real; c: Color; InternalMargin: real := 10): PanelWPF; +/// Элемент управления "Правая панель" +function RightPanel(width: real := 150): PanelWPF; + +/// Элемент управления "Строка статуса" +function StatusBar(height: real := 24; itemWidth: real := 0): StatusBarWPF; + +/// Пустой блок для задания промежутков между компонентами +procedure EmptyBlock(sz: integer := 16); + +/// Установка активной панели, на которую размещаются элементы управления +procedure SetActivePanel(p: CommonElementWPF); + +/// Толщина границ элемента +function Margins(l,t,r,b: real): (real,real,real,real); + +/// Толщина границ элемента +function Margins(all: real): (real,real,real,real); + +/// Графическое окно +//function Window: WindowType; + +///-- +procedure __InitModule__; +///-- +procedure __FinalizeModule__; + +implementation + +//uses GraphWPF; +uses System.Windows; +uses System.Windows.Controls; +uses System.Windows.Controls.Primitives; +uses System.Windows.Media.Imaging; + +//function Window: WindowType := GraphWPF.Window; + +function Button(Txt: string; fontSize: real): ButtonWPF := ButtonWPF.Create(Txt,fontSize); +function Button(x, y: real; Txt: string; width: real; fontSize: real): ButtonWPF := ButtonWPF.Create(x, y, Txt, width, fontSize); + +function TextBlock(Txt: string; fontSize: real): TextBlockWPF := TextBlockWPF.Create(Txt, fontSize); +function TextBlock(x, y: real; Txt: string; width: real; fontSize: real): TextBlockWPF := TextBlockWPF.Create(x, y, Txt, width, fontSize); + +function IntegerBlock(message: string; initValue: integer; fontSize: real): IntegerBlockWPF := IntegerBlockWPF.Create(message, initValue, fontSize); +function IntegerBlock(x, y: real; message: string; width: real; initValue: integer; fontSize: real): IntegerBlockWPF := IntegerBlockWPF.Create(x,y,message,width,initValue,fontSize); + +function RealBlock(message: string; initValue: real; fontSize: real): RealBlockWPF := RealBlockWPF.Create(message, initValue, fontSize); +function RealBlock(x, y: real; message: string; width: real; initValue: real; fontSize: real): RealBlockWPF := RealBlockWPF.Create(x,y,message,width,initValue,fontSize); + +function CheckBox(text: string): CheckBoxWPF := CheckBoxWPF.Create(text); +function CheckBox(x, y: real; text: string; width: real): CheckBoxWPF := CheckBoxWPF.Create(x,y,text,width); + +function RadioButton(text: string): RadioButtonWPF := RadioButtonWPF.Create(text); +function RadioButton(x, y: real; text: string; width: real): RadioButtonWPF := RadioButtonWPF.Create(x,y,text,width); + +function TextBox(text: string): TextBoxWPF := TextBoxWPF.Create(text); +function TextBox(x, y: real; text: string; width: real): TextBoxWPF := TextBoxWPF.Create(x,y,text,width); + +function IntegerBox(title: string): IntegerBoxWPF := IntegerBoxWPF.Create(title,0,10); +function IntegerBox(title: string; min,max: integer): IntegerBoxWPF := IntegerBoxWPF.Create(title,min,max); +function IntegerBox(x, y: real; title: string; min,max: integer; width: real) := IntegerBoxWPF.Create(x,y,title,min,max,width); + +function ListBox(title: string; height: real): ListBoxWPF := ListBoxWPF.Create(title,height); +function ListBox(x,y: real; title: string; width: real; height: real): ListBoxWPF := ListBoxWPF.Create(x,y,title,width,height); + +function SliderReal(title: string): SliderRealWPF := SliderRealWPF.Create(title,0, 10, 0, 0); +function SliderReal(title: string; min, max, val, freq: real): SliderRealWPF; +begin + if val = real.MinValue then + val := min; + Result := SliderRealWPF.Create(title, min, max, val, freq); +end; +function SliderReal(min, max, val, freq: real): SliderRealWPF := SliderReal('',min, max, val, freq); +function SliderReal(x,y: real; title: string; min,max,width,val,freq: real): SliderRealWPF; +begin + if val = real.MinValue then + val := min; + Result := SliderRealWPF.Create(x, y, title, min, max, width, val, freq); +end; + +function Slider(title: string): SliderWPF := SliderWPF.Create(title); +function Slider(title: string; min, max, val, freq: integer): SliderWPF; +begin + if val = real.MinValue then + val := min; + Result := SliderWPF.Create(title, min, max, val, freq); +end; +function Slider(min, max, val, freq: integer): SliderWPF := Slider('',min, max, val, freq); +function Slider(x,y: real; title: string; min,max,width,val,freq: integer): SliderWPF; +begin + if val = real.MinValue then + val := min; + Result := SliderWPF.Create(x, y, title, min, max, width, val, freq); +end; + +function Image(name: string): ImageWPF := new ImageWPF(name); +function Image(x,y: real; name: string; width: real): ImageWPF := new ImageWPF(x,y,name,width); + +function ComboBox(title: string): ComboBoxWPF := new ComboBoxWPF(title); +function ComboBox(x,y: real; title: string; width: real): ComboBoxWPF := new ComboBoxWPF(x,y,title,width); + +function Menu: MenuWPF := new MenuWPF; + +function OpenFileDialog(initDirectory: string; filter: string) := new OpenFileDialogWPF(initDirectory,filter); +function SaveFileDialog(initDirectory: string; filter: string) := new SaveFileDialogWPF(initDirectory,filter); + +function LeftPanel(width: real; c: Color; internalMargin: real) := new LeftPanelWPF(width,c,internalMargin); +function LeftPanel(width: real): PanelWPF := new LeftPanelWPF(width,PanelsColor,10); + +function RightPanel(width: real; c: Color; internalMargin: real) := new RightPanelWPF(width,c,internalMargin); +function RightPanel(width: real): PanelWPF := new RightPanelWPF(width,PanelsColor,10); + + +function StatusBar(height: real; itemWidth: real): StatusBarWPF := new StatusBarWPF(height,itemWidth); + + +procedure EmptyBlock(sz: integer); +begin + var e := TextBlock(''); + e.Height := sz; + e.Width := sz; +end; + +function GetProperties(t1: T): sequence of string; +begin + var props := t1.GetType.GetProperties(); + Result := props.OrderBy(f->f.CustomAttributes.FirstOrDefault?.ToString ?? 'NoAttr').Select(f->f.Name); +end; + +function GetFields(t1: T): sequence of string; +begin + var flds := t1.GetType.GetFields(); + //var flds := t1.GetType.GetFields(System.Reflection.BindingFlags.Instance or System.Reflection.BindingFlags.Public or System.Reflection.BindingFlags.NonPublic); + Result := flds.OrderBy(f->f.CustomAttributes.FirstOrDefault?.ToString ?? 'NoAttr').Select(f->f.Name); +end; + +type ControlsCannotBeRunWithoutGraphModules = class(System.ApplicationException) end; + +procedure Invoke(d: System.Delegate; params args: array of object); +begin + if app = nil then + raise new ControlsCannotBeRunWithoutGraphModules('Модуль Controls должен испольоваться только совместно с модулями GraphWPF и WPFObjects либо Graph3D'); + GraphWPFBase.Invoke(d, args); +end; + +procedure InvokeP(p: procedure(r: real); r: real); +begin + if app = nil then + raise new ControlsCannotBeRunWithoutGraphModules('Модуль Controls должен испольоваться только совместно с модулями GraphWPF и WPFObjects либо Graph3D'); + GraphWPFBase.Invoke(p,r); +end; + +function Invoke(d: Func0): T; +begin + if app = nil then + raise new ControlsCannotBeRunWithoutGraphModules('Модуль Controls должен испольоваться только совместно с модулями GraphWPF и WPFObjects либо Graph3D'); + Result := T(app.Dispatcher.Invoke(d)); +end; + +procedure __SetActivePanelInternal(p: GPanel); +begin + Invoke(()->begin + _ActivePanel := p; + end); +end; + +procedure SetActivePanel(p: CommonElementWPF); +begin + if p.element is GPanel then + __SetActivePanelInternal(p.element as GPanel) +end; + +procedure SetActivePanelInit; +begin + __SetActivePanelInternal(MainWindow.MainPanel.Children[0] as GPanel); + //ActivePanel := MainWindow.MainPanel.Children[0] as GPanel +end; + +function __ActivePanelInternal: GPanel; +begin + if _ActivePanel = nil then + Invoke(SetActivePanelInit); + Result := _ActivePanel; +end; + +function Margins(l,t,r,b: real): (real,real,real,real) := (l,t,r,b); + +function Margins(all: real): (real,real,real,real) := (all,all,all,all); + +procedure CommonElementWPF.Init0(el: FrameworkElement; width: real; x: real; y: real); +begin + element := el; + element.Focusable := False; + if __ActivePanelInternal is StackPanel(var sp) then + if sp.Orientation = Orientation.Vertical then + element.Margin := new Thickness(0,0,0,GlobalHMargin); + //else element.Margin := new Thickness(0,0,GlobalHMargin,0); + if x<>-1 then + begin + element.SetLeft(x); + element.SetTop(y); + end; + if width>0 then + element.Width := width; + __ActivePanelInternal.Children.Add(element); + if __ActivePanelInternal.Tag is PanelWPF(var pwpf) then + PanelWPF.SetFSzElement(element,pwpf.fsize); + if __ActivePanelInternal.Tag is GridWPF(var grwpf) then + element.Margin := new Thickness(grwpf.InternalMargin); +end; + + +var + ///-- + __initialized := false; + +var + ///-- + __finalized := false; + +///-- +procedure __InitModule__; +begin + if not __initialized then + begin + __initialized := true; + + end; +end; + +///-- +procedure __FinalizeModule__; +begin + if not __finalized then + begin + __finalized := true; + end; +end; + +initialization +finalization +end. \ No newline at end of file diff --git a/TestSuite/CompilationSamples/LightPT.pas b/TestSuite/CompilationSamples/LightPT.pas new file mode 100644 index 000000000..a5e61c853 --- /dev/null +++ b/TestSuite/CompilationSamples/LightPT.pas @@ -0,0 +1,3083 @@ +/// Модуль LightPT автоматической легковесной проверки заданий +unit LightPT; +{$reference System.Net.Http.dll} +{$reference System.Security.dll} + +interface + +uses System.Runtime.InteropServices; + +{==============================================================} +{ Класс для формирования вывода } +{==============================================================} +type + /// Класс для формирования вывода + ObjectList = class + lst := new List; + public + static function New: ObjectList := ObjectList.Create; + procedure Add(o: object) := lst.Add(o); + function AddRange(sq: sequence of integer): ObjectList; begin lst.AddRange(sq.Select(x -> object(x))); Result := Self end; + function AddRange(sq: sequence of real): ObjectList; begin lst.AddRange(sq.Select(x -> object(x))); Result := Self end; + function AddRange(sq: sequence of string): ObjectList; begin lst.AddRange(sq.Select(x -> object(x))); Result := Self end; + function AddRange(sq: sequence of char): ObjectList; begin lst.AddRange(sq.Select(x -> object(x))); Result := Self end; + function AddRange(sq: sequence of boolean): ObjectList; begin lst.AddRange(sq.Select(x -> object(x))); Result := Self end; + function AddRange(sq: sequence of object): ObjectList; begin lst.AddRange(sq); Result := Self end; + function AddRange(sq: sequence of System.Type): ObjectList; begin lst.AddRange(sq.Select(x -> object(x))); Result := Self end; + function AddFill(n: integer; elem: object): ObjectList; begin lst.AddRange(ArrFill(n,elem)); Result := Self end; + function AddArithm(n: integer; a0,step: integer): ObjectList; begin lst.AddRange(ArrGen(n,a0,x->x+step).Select(x -> object(x))); Result := Self end; + function AddArithm(n: integer; a0,step: real): ObjectList; begin lst.AddRange(ArrGen(n,a0,x->x+step).Select(x -> object(x))); Result := Self end; + function AddFib(n: integer): ObjectList; begin lst.AddRange(ArrGen(n,1,1,(x,y)->x+y).Select(x -> object(x))); Result := Self end; + function AddGeom(n: integer; a0,step: integer): ObjectList; begin lst.AddRange(ArrGen(n,a0,x->x*step).Select(x -> object(x))); Result := Self end; + function AddGeom(n: integer; a0,step: real): ObjectList; begin lst.AddRange(ArrGen(n,a0,x->x*step).Select(x -> object(x))); Result := Self end; + end; + +{==================================================================================} +{ Сервисные типы } +{==================================================================================} +type + MessageColorT = (MsgColorGreen, MsgColorRed, MsgColorOrange, MsgColorMagenta, MsgColorGray); + TaskStatus = (NotUnderControl, Solved, IOError, BadSolution, PartialSolution, InitialTask, BadInitialTask, InitialTaskPT4, ErrFix, Demo); // Короткий результат для БД + +{==================================================================================} +{ Переопределенные функций стандартного модуля с заполнением ввода и вывода } +{==================================================================================} +/// Возвращает случайное целое в диапазоне от a до b +function Random(a, b: integer): integer; +/// Возвращает случайное целое в диапазоне от 0 до n-1 +function Random(n: integer): integer; +/// Возвращает случайное вещественное в диапазоне [0..1) +function Random: real; +/// Возвращает случайное вещественное в диапазоне [a,b) +function Random(a, b: real): real; +/// Возвращает случайное вещественное в диапазоне [a,b] c количеством значащих цифр после точки, равным digits +function RandomReal(a, b: real; digits: integer := 1): real; +/// Возвращает случайный символ в диапазоне от a до b +function Random(a, b: char): char; +/// Возвращает случайное целое в диапазоне +function Random(diap: IntRange): integer; +/// Возвращает случайное вещественное в диапазоне +function Random(diap: RealRange): real; +/// Возвращает случайный символ в диапазоне +function Random(diap: CharRange): char; + +/// Возвращает кортеж из двух случайных целых в диапазоне от a до b +function Random2(a, b: integer): (integer, integer); +/// Возвращает кортеж из двух случайных вещественных в диапазоне от a до b +function Random2(a, b: real): (real, real); +/// Возвращает кортеж из двух случайных символов в диапазоне от a до b +function Random2(a, b: char): (char, char); +/// Возвращает кортеж из двух случайных целых в диапазоне +function Random2(diap: IntRange): (integer, integer); +/// Возвращает кортеж из двух случайных символов в диапазоне +function Random2(diap: CharRange): (char, char); +/// Возвращает кортеж из двух случайных вещественных в диапазоне +function Random2(diap: RealRange): (real, real); + +/// Возвращает кортеж из трех случайных целых в диапазоне от a до b +function Random3(a, b: integer): (integer, integer, integer); +/// Возвращает кортеж из трех случайных вещественных в диапазоне от a до b +function Random3(a, b: real): (real, real, real); +/// Возвращает кортеж из трех случайных символов в диапазоне от a до b +function Random3(a, b: char): (char, char, char); +/// Возвращает кортеж из трех случайных целых в диапазоне +function Random3(diap: IntRange): (integer, integer, integer); +/// Возвращает кортеж из трех случайных вещественных в диапазоне +function Random3(diap: RealRange): (real, real, real); +/// Возвращает кортеж из трех случайных символов в диапазоне +function Random3(diap: CharRange): (char, char, char); + +/// Возвращает массив размера n, заполненный случайными целыми значениями в диапазоне от a до b +function ArrRandomInteger(n: integer; a: integer; b: integer): array of integer; +/// Возвращает массив размера n, заполненный случайными целыми значениями в диапазоне от 0 до 100 +function ArrRandomInteger(n: integer): array of integer; +/// Возвращает массив размера n, заполненный случайными вещественными значениями в диапазоне от a до b +function ArrRandomReal(n: integer; a: real; b: real; digits: integer := 1): array of real; + +/// Возвращает массив размера n, заполненный случайными вещественными значениями в диапазоне от 0 до 10 +function ArrRandomReal(n: integer; digits: integer := 1): array of real; + +/// Возвращает двумерный массив размера m x n, заполненный случайными целыми значениями +function MatrRandomInteger(m: integer; n: integer; a: integer; b: integer): array [,] of integer; +/// Возвращает двумерный массив размера m x n, заполненный случайными целыми значениями +function MatrRandomInteger(m: integer; n: integer): array [,] of integer; +/// Возвращает двумерный массив размера m x n, заполненный случайными вещественными значениями +function MatrRandomReal(m: integer; n: integer; a: real; b: real): array [,] of real; +/// Возвращает двумерный массив размера m x n, заполненный случайными вещественными значениями +function MatrRandomReal(m: integer; n: integer): array [,] of real; + +/// Возвращает двумерный массив размера m x n, заполненный элементами gen(i,j) +//function MatrGen(m, n: integer; gen: (integer,integer)->T): array [,] of T; + +/// Выводит приглашение к вводу и возвращает значение типа integer, введенное с клавиатуры +function ReadInteger(prompt: string): integer; +/// Выводит приглашение к вводу и возвращает два значения типа integer, введенные с клавиатуры +function ReadInteger2(prompt: string): (integer, integer); +/// Выводит приглашение к вводу и возвращает значение типа integer, введенное с клавиатуры +function ReadlnInteger(prompt: string): integer; + +/// Выводит приглашение к вводу и возвращает значение типа string, введенное с клавиатуры +function ReadString(prompt: string): string; +/// Выводит приглашение к вводу и возвращает значение типа string, введенное с клавиатуры +function ReadlnString(prompt: string): string; + + +///- procedure Print(a,b,...); +/// Выводит значения a,b,... на экран, после каждого значения выводит пробел +procedure Print(params args: array of object); +///- procedure Println(a,b,...); +/// Выводит значения a,b,... на экран, после каждого значения выводит пробел и переходит на новую строку +procedure Println(params args: array of object); +/// Выводит значение экран и выводит пробел +procedure Print(ob: object); +/// Выводит значение экран и выводит пробел +procedure Print(s: string); +/// Выводит значение экран и выводит пробел +procedure Print(c: char); + +{=========================================================================} +{ Сервисные процедуры } +{=========================================================================} + +// Вывести цветовое сообщение в окно вывода +procedure ColoredMessage(msg: string; color: MessageColorT); + +// Вывести сообщение красным цветом в окно вывода +procedure ColoredMessage(msg: string); + +function ToObjArray(a: sequence of integer): array of object; + +function ToObjArray(a: sequence of real): array of object; + +function ToObjArray(a: sequence of string): array of object; + +function ToObjArray(a: sequence of char): array of object; + +function ToObjArray(a: sequence of boolean): array of object; + + + +{=========================================================================} +{ Основные процедуры для проверки правильности ввода-вывода } +{=========================================================================} + +// Самые часто используемые: CheckInput, CheckOutput, CheckOutputSeq + +/// Проверить типы вводимых данных +procedure CheckInput(a: array of System.Type); +/// Проверить значения при выводе +procedure CheckOutput(params arr: array of object); +/// Проверить значения при выводе. Сообщения ColoredMessage гасить. Нужно для повторных вызовов CheckOutput +procedure CheckOutputSilent(params arr: array of object); + + +/// Проверить, что данные не вводились +procedure CheckInputIsEmpty; + +/// Проверить, что помимо начального ввода других данных не вводилось +procedure CheckInputIsInitial; + +/// Синоним CheckInput +procedure CheckInputTypes(a: array of System.Type); + +/// Проверить количество вводимых данных +procedure CheckInputCount(n: integer); +/// Проверить количество вводимых данных +procedure CheckInput2Count(i: integer); +/// Проверить количество выводимых данных +procedure CheckOutput2Count(i: integer); + +/// Проверить последовательность значений при выводе +procedure CheckOutputSeq(a: sequence of integer); +/// Проверить последовательность значений при выводе +procedure CheckOutputSeq(a: sequence of real); +/// Проверить последовательность значений при выводе +procedure CheckOutputSeq(a: sequence of string); +/// Проверить последовательность значений при выводе +procedure CheckOutputSeq(a: sequence of char); +/// Проверить последовательность значений при выводе +procedure CheckOutputSeq(a: sequence of boolean); +/// Проверить последовательность значений при выводе +procedure CheckOutputSeq(a: sequence of object); +/// Проверить последовательность значений при выводе +procedure CheckOutputSeq(a: sequence of word); +/// Проверить последовательность значений при выводе +procedure CheckOutputSeq(a: ObjectList); + +/// Проверить последовательность значений при выводе. Не выводить сообщения ColoredMessages +procedure CheckOutputSeqSilent(a: sequence of integer); +/// Проверить последовательность значений при выводе. Не выводить сообщения ColoredMessages +procedure CheckOutputSeqSilent(a: sequence of real); +/// Проверить последовательность значений при выводе. Не выводить сообщения ColoredMessages +procedure CheckOutputSeqSilent(a: sequence of string); +/// Проверить последовательность значений при выводе. Не выводить сообщения ColoredMessages +procedure CheckOutputSeqSilent(a: sequence of char); +/// Проверить последовательность значений при выводе. Не выводить сообщения ColoredMessages +procedure CheckOutputSeqSilent(a: sequence of boolean); +/// Проверить последовательность значений при выводе. Не выводить сообщения ColoredMessages +procedure CheckOutputSeqSilent(a: sequence of object); +/// Проверить последовательность значений при выводе. Не выводить сообщения ColoredMessages +procedure CheckOutputSeqSilent(a: sequence of word); +/// Проверить последовательность значений при выводе. Не выводить сообщения ColoredMessages +procedure CheckOutputSeqSilent(a: ObjectList); + +/// Проверить вывод в виде строки +procedure CheckOutputString(str: string); + +/// Сравнить типы выведенных значений с указанными +procedure CompareTypeWithOutput(params a: array of System.Type); + +/// Сравнить два значения +function CompareValues(o1, o2: Object): boolean; + +/// Сравнить два массива +function CompareArrValues(a,lst: array of object): boolean; + +/// Сравнить значения с выводом +function CompareValuesWithOutput(params a: array of object): boolean; + +// Для совместимости +procedure CheckOutputNew(params arr: array of object); +procedure CheckOutputSeqNew(a: sequence of integer); +procedure CheckOutputSeqNew(a: sequence of real); +procedure CheckOutputSeqNew(a: sequence of string); +procedure CheckOutputSeqNew(a: sequence of char); +procedure CheckOutputSeqNew(a: sequence of boolean); +procedure CheckOutputSeqNew(a: sequence of object); +procedure CheckOutputSeqNew(a: sequence of word); +procedure CheckOutputSeqNew(a: ObjectList); + +{============================================================================================} +{ Подпрограммы для проверки начального ввода-вывода, представленного в заготовке задания } +{============================================================================================} + +/// Проверить типы данных начального ввода, начального вывода и ввода. Если ввод Input = nil, то он совпадает с начальным вводом +procedure CheckData(InitialInput: array of System.Type := nil; + InitialOutput: array of System.Type := nil; + Input: array of System.Type := nil); + +procedure CheckInitialIO; +procedure CheckInitialIOIsEmpty; +procedure InitialOutput(a: array of System.Type); +procedure InitialInput(a: array of System.Type); +//procedure CheckInitialOutputValues(params a: array of object); - тут значений быть не должно! +procedure CheckInitialOutput(params a: array of System.Type); +procedure CheckInitialInput(params a: array of System.Type); + +procedure CheckInitialOutputSeq(a: sequence of System.Type); +procedure CheckInitialInputSeq(a: sequence of System.Type); + +procedure CheckInitialIOSeqs(input,output: sequence of System.Type); + +procedure CheckOutputAfterInitial(params arr: array of object); // проверить только то, что после исходного вывода + +procedure CheckOutputAfterInitialSilent(params arr: array of object); + +/// Проверить последовательность значений при выводе после начального вывода +procedure CheckOutputAfterInitialSeq(seq: sequence of integer); +/// Проверить последовательность значений при выводе после начального вывода +procedure CheckOutputAfterInitialSeq(seq: sequence of real); +/// Проверить последовательность значений при выводе после начального вывода +procedure CheckOutputAfterInitialSeq(seq: sequence of string); +/// Проверить последовательность значений при выводе после начального вывода +procedure CheckOutputAfterInitialSeq(seq: sequence of boolean); +/// Проверить последовательность значений при выводе после начального вывода +procedure CheckOutputAfterInitialSeq(seq: sequence of char); +/// Проверить последовательность значений при выводе после начального вывода +procedure CheckOutputAfterInitialSeq(seq: sequence of object); +/// Проверить последовательность значений при выводе после начального вывода +procedure CheckOutputAfterInitialSeq(seq: ObjectList); + +/// Проверить последовательность значений при выводе после начального вывода. Не выводить сообщения ColoredMessages +procedure CheckOutputAfterInitialSeqSilent(seq: sequence of integer); +/// Проверить последовательность значений при выводе после начального вывода. Не выводить сообщения ColoredMessages +procedure CheckOutputAfterInitialSeqSilent(seq: sequence of real); +/// Проверить последовательность значений при выводе после начального вывода. Не выводить сообщения ColoredMessages +procedure CheckOutputAfterInitialSeqSilent(seq: sequence of string); +/// Проверить последовательность значений при выводе после начального вывода. Не выводить сообщения ColoredMessages +procedure CheckOutputAfterInitialSeqSilent(seq: sequence of boolean); +/// Проверить последовательность значений при выводе после начального вывода. Не выводить сообщения ColoredMessages +procedure CheckOutputAfterInitialSeqSilent(seq: sequence of char); +/// Проверить последовательность значений при выводе после начального вывода. Не выводить сообщения ColoredMessages +procedure CheckOutputAfterInitialSeqSilent(seq: sequence of object); +/// Проверить последовательность значений при выводе после начального вывода. Не выводить сообщения ColoredMessages +procedure CheckOutputAfterInitialSeqSilent(seq: ObjectList); + +{=========================================================} +{ Функции для проверки элементов ввода-вывода } +{=========================================================} + +/// i-тый элемент ввода - целое +function IsInt(i: integer): boolean; +/// i-тый элемент ввода - вещественное +function IsRe(i: integer): boolean; +/// i-тый элемент ввода - строка +function IsStr(i: integer): boolean; +/// i-тый элемент ввода - логическое +function IsBoo(i: integer): boolean; +/// i-тый элемент ввода - символ +function IsChr(i: integer): boolean; + +/// i-тый элемент вывода - целое +function OutIsInt(i: integer): boolean; +/// i-тый элемент вывода - вещественное +function OutIsRe(i: integer): boolean; +/// i-тый элемент вывода - строка +function OutIsStr(i: integer): boolean; +/// i-тый элемент вывода - логическое +function OutIsBoo(i: integer): boolean; +/// i-тый элемент вывода - символ +function OutIsChr(i: integer): boolean; + +/// i-тый элемент ввода как целое +function Int(i: integer): integer; +/// i-тый элемент ввода как вещественное +function Re(i: integer): real; +/// i-тый элемент ввода как строка +function Str(i: integer): string; +/// i-тый элемент ввода как логическое +function Boo(i: integer): boolean; +/// i-тый элемент ввода как символ +function Chr(i: integer): char; + +/// i-тый элемент вывода как целое +function OutInt(i: integer): integer; +/// i-тый элемент вывода как вещественное +function OutRe(i: integer): real; +/// i-тый элемент вывода как строка +function OutBoo(i: integer): boolean; +/// i-тый элемент вывода как логическое +function OutChr(i: integer): char; +/// i-тый элемент вывода как символ +function OutStr(i: integer): string; + +/// Следующий элемент ввода как целое +function Int: integer; +/// Следующий элемент ввода как вещественное +function Re: real; +/// Следующий элемент ввода как строка +function Str: string; +/// Следующий элемент ввода как логическое +function Boo: boolean; +/// Следующий элемент ввода как символ +function Chr: char; + +/// Следующие два элемента ввода как целые +function Int2: (integer, integer); +/// Следующие два элемента ввода как вещественные +function Re2: (real, real); + +/// Следующие n элементов ввода как массив целых +function IntArr(n: integer): array of integer; +/// Следующие n элементов ввода как массив вещественных +function ReArr(n: integer): array of real; +/// Следующие n элементов ввода как массив логических +function BooArr(n: integer): array of boolean; +/// Следующие n элементов ввода как массив символов +function ChrArr(n: integer): array of char; +/// Следующие n элементов ввода как массив строк +function StrArr(n: integer): array of string; + +// функции, возвращающие входные и выходные списки, а также их срезы, приведенные к нужному типу + +function InputListAsIntegers: array of integer; +function InputListAsReals: array of real; +function InputListAsBooleans: array of boolean; +function InputListAsChars: array of char; +function InputListAsStrings: array of string; + +function OutputListAsIntegers: array of integer; +function OutputListAsReals: array of real; +function OutputListAsBooleans: array of boolean; +function OutputListAsChars: array of char; +function OutputListAsStrings: array of string; + +function InSliceIntArr(a,b: integer): array of integer; +function InSliceReArr(a,b: integer): array of real; +function InSliceBooArr(a,b: integer): array of boolean; +function InSliceChrArr(a,b: integer): array of char; +function InSliceStrArr(a,b: integer): array of string; + +/// Срез элементов вывода от a до b как массив целых +function OutSliceIntArr(a,b: integer): array of integer; +/// Срез элементов вывода от a до b как массив вещественных +function OutSliceReArr(a,b: integer): array of real; +/// Срез элементов вывода от a до b как массив логических +function OutSliceBooArr(a,b: integer): array of boolean; +/// Срез элементов вывода от a до b как массив символов +function OutSliceChrArr(a,b: integer): array of char; +/// Срез элементов вывода от a до b как массив строк +function OutSliceStrArr(a,b: integer): array of string; + +{=========================================================} +{ Тип TestCell и функции для генерации тестов } +{=========================================================} +type + [StructLayout(LayoutKind.Explicit)] + /// Ячейка генерации данных для тестов + TestCell = class + public + [FieldOffset(0)] + typ: System.Type; + [FieldOffset(8)] + a: integer; + [FieldOffset(12)] + b: integer; + [FieldOffset(8)] + ra: real; + [FieldOffset(16)] + rb: real; + [FieldOffset(24)] + digits: integer; + [FieldOffset(8)] + ca: char; + [FieldOffset(10)] + cb: char; + constructor (typ: System.Type); + begin + Self.typ := typ; + end; + function GenerateData: object; + begin + if typ = typeof(integer) then + Result := Random(a,b) + else if typ = typeof(char) then + Result := Random(ca,cb) + else if typ = typeof(real) then + Result := RandomReal(ra,rb,digits) + else if typ = typeof(boolean) then + Result := Random(2)=0 ? False : True + else Result := nil; + end; + end; + +/// Сгенерировать по последовательности спецификаций в тестовых ячейках список данных для теста +function GenValuesByTestCells(a: sequence of TestCell): List; + +/// Сгенерировать целую тестовую ячейку +function tInt(a: integer := 1; b: integer := 10): TestCell; + +/// Сгенерировать вещественную тестовую ячейку +function tRe(ra: real := 1; rb: Real := 10; digits: integer := 0): TestCell; + +/// Сгенерировать символьную тестовую ячейку +function tChr(ca: char := 'а'; cb: char := 'я'): TestCell; + +/// Сгенерировать логическую тестовую ячейку +function tBoo: TestCell; + + +{=========================================================} +{ Процедуры генерации ошибок } +{=========================================================} + +/// Генерация ошибки неверного количества входных значений +procedure ErrorInputCount(Count, n: integer); + +/// Генерация ошибки неверного количества выходных значений +procedure ErrorOutputCount(Count, n: integer); + +/// Генерация ошибки неверного типа n-того входного значения +procedure ErrorInputType(n: integer; ExpectedType, ActualType: string); + +/// Генерация ошибки неверного типа n-того выходного значения +procedure ErrorOutputType(n: integer; ExpectedType, ActualType: string); + + +{=========================================================} +{ Процедура генерации автоматических тестов } +{=========================================================} + +function AutoTest: integer->(); + +/// Генерация автоматических тестов - повторно вызывается заполнение из основной программы. Не использовать если в основной программе есть Read!!! +procedure GenerateAutoTests(n: integer); + +/// Генерация тестов по описанию тестовых данных +procedure GenerateTests(n: integer; testcells: sequence of TestCell); + +/// Генерация тестов по набору значений тестовых данных +procedure GenerateTests(params a: array of integer); + +/// Генерация тестов по набору значений тестовых данных +procedure GenerateTests(params a: array of real); + +/// Генерация тестов по набору значений тестовых данных +procedure GenerateTests(params a: array of string); + +/// Генерация тестов по набору значений тестовых данных +procedure GenerateTests(params a: array of char); + +/// Генерация тестов по набору значений тестовых данных +procedure GenerateTests(params a: array of boolean); + +/// Генерация тестов по набору кортежей тестовых данных +procedure GenerateTests(params a: array of (T1,T2)); + +/// Генерация тестов по набору кортежей тестовых данных +procedure GenerateTests(params a: array of (T1,T2,T3)); + +{=========================================================} +{ Фильтрация выходного списка } +{=========================================================} +/// Преобразование строк, являющихся целыми, в целые в OutputList +procedure ConvertStringsToNumbersInOutputList; +/// Если в OutputList массивы, вытянуть их в единый список +procedure FlattenOutput; +/// Очистить выходной список от пробелов +procedure ClearOutputListFromSpaces; +/// Отфильтровать в выходном списке только числа +procedure FilterOnlyNumbers; +/// Отфильтровать в выходном списке только числа и логические +procedure FilterOnlyNumbersAndBools; + +var + TaskResult: TaskStatus := NotUnderControl; // Записывается в БД + /// Строка, содержащая вывод. Нужна для проверки решения как многострочной строки + OutputString := new StringBuilder; + /// Список выведенных элементов + OutputList := new List; + /// Список введенных элементов + InputList := new List; + /// Список типов элементов, выведенных в заготовке задания (cRe, cInt и т.д.) + InitialOutputList := new List; + /// Список типов элементов, введенных в заготовке задания + InitialInputList := new List; + /// Ссылка на основную процедуру проверки в модуле Task + CheckTask: procedure(name: string); + /// Погасить сообщения о неверном вводе-выводе если задача содержит только начальный ввод-вывод + CancelMessagesIfInitial := True; + /// Тихий режим - сообщения ColoredMessage гасятся. Нужен для обработки нескольких вызовов CheckOutput + Silent := False; + +/// Целый тип для проверки ввода-вывода +function cInt: System.Type; +/// Вещественный тип для проверки ввода-вывода +function cRe: System.Type; +/// Строковый тип для проверки ввода-вывода +function cStr: System.Type; +/// Логический тип для проверки ввода-вывода +function cBool: System.Type; +/// Символьный тип для проверки ввода-вывода +function cChar: System.Type; + +type + /// Константа для обозначения пустого ввода или вывода + EmptyType = (Empty); + TestModeType = (tmNone, tmTest, tmGenTest, tmAutoTest); + +var + TestCount := 0; + GenerateTestData: integer -> () := nil; + TestMode: TestModeType := tmNone; + TestNumber: integer; + +implementation + +uses __RedirectIOMode; + +uses System.Management; +uses System.Security.Cryptography; +uses System.IO; + +uses System; +uses System.Net.Http; +uses System.Threading.Tasks; + +// Исключения - для вывода сообщения +// TaskResult - для базы данных +// Запоминать исключение в глобальной переменной TaskException - для доп. параметров для БД в формате +// ПодтипИсключения(парам1,...,парамn) +// Эту строку также можно писать в БД как доп параметры TaskResultInfo +// Чем хороши исключения - их можно делать разными с абсолютно разными параметрами + +// Сервисная функция - чтобы можно было вводу, начальному вводу или начальному выводу в CheckData присвоить Empty вместо nil +function operator implicit(Self: EmptyType): array of System.Type; extensionmethod := nil; + +const lightptname = 'lightpt.dat'; + +type + LightPTException = class(Exception) + function Info: string; virtual := 'NoInfo'; + end; + +var + CreateNewLineBeforeMessage := False; + TaskResultInfo: string; // доп. информация о результате. Как правило пуста. Или содержит TaskException.Info. Или содержит для Solved и BadSolution информацию о модуле: Robot, Drawman, PT4 + TaskException: LightPTException := new LightPTException; + + WriteInfoCallBack: procedure (LessonName,TaskName,TaskPlatform: string; result: TaskStatus; AdditionalInfo: string); + + LessonName: string := ''; + TaskNamesMap := new Dictionary; + + ServerAddr := 'https://air.mmcs.sfedu.ru/pascalabc'; + +{=========================================================} +{ Типы, связанные с сетью } +{=========================================================} +type + UserTypeEnum = (None, Student, Teacher, Admin); + ServerAccessProvider = class + private + client: HTTPClient; + public + ServerAddr: string; + auto property ShortFIO: string; + auto property FullFIO: string; + auto property Password: string; + auto property Group: string; + auto property UserType: UserTypeEnum; + constructor (ServerAddr: string); + begin + Self.ServerAddr := ServerAddr; + client := new HttpClient(); + client.Timeout := TimeSpan.FromSeconds(10); + end; + + function SendPostRequest(FullFIO, Password, LessonName, TaskName, TaskPlatform, TaskResult, text, TaskResultInfo: string): Task; + begin + var values := Dict( + ( 'shortFIO', '' ), + ( 'FIO', FullFIO ), + ( 'taskName', TaskName ), + ( 'lessonName', LessonName ), + ( 'taskPlatform', TaskPlatform ), + ( 'taskResult', TaskResult ), + ( 'taskResultInfo', TaskResultInfo ), + ( 'content', text ), + ( 'password', Password ) + ); + var content := new FormUrlEncodedContent(values); + var response := client.PostAsync(ServerAddr + '/add.php', content); + Result := response.Result.Content.ReadAsStringAsync(); + end; + end; + +{=========================================================} +{ Типы исключений при решении } +{=========================================================} +type + InputCountException = class(LightPTException) // Ровно Count + Count: integer; // Count - сколько введено + n: integer; // n - сколько требуется ввести + constructor(Count, n: integer); + begin + Self.Count := Count; + Self.n := n; + TaskResult := IOError; + TaskException := Self; + end; + + function Info: string; override := $'InputCount({Count},{n})'; + end; + InputCount2Exception = class(LightPTException) // Не меньше Count + Count: integer; // Count - сколько введено + i: integer; // i - какой номер требуется ввести (с нуля) + constructor(Count, i: integer); + begin + Self.Count := Count; + Self.i := i; + TaskResult := IOError; + TaskException := Self; + end; + + function Info: string; override := $'InputCount2({Count},{i})'; + end; + + InputCountTest2Exception = class(LightPTException) // Не меньше Count + Count: integer; // Count - сколько введено + i: integer; // i - какой номер требуется ввести (с нуля) + constructor(Count, i: integer); + begin + Self.Count := Count; + Self.i := i; + end; + + function Info: string; override := $'InputCountTest2({Count},{i})'; + end; + + InputTypeException = class(LightPTException) + n: integer; // номер параметра + ExpectedType, ActualType: string; + constructor(n: integer; ExpectedType, ActualType: string); + begin + Self.n := n; + Self.ExpectedType := ExpectedType; + Self.ActualType := ActualType; + TaskResult := IOError; + TaskException := Self; + end; + + function Info: string; override := $'InputType({n},{ExpectedType},{ActualType})'; + end; + + InputTypeTestException = class(LightPTException) + n: integer; // номер параметра + ExpectedType, ActualType: string; + constructor(n: integer; ExpectedType, ActualType: string); + begin + Self.n := n; + Self.ExpectedType := ExpectedType; + Self.ActualType := ActualType; + end; + + function Info: string; override := $'InputTypeTest({n},{ExpectedType},{ActualType})'; + end; + + OutputCountException = class(LightPTException) // Ровно Count + Count: integer; // Count - сколько выведено + n: integer; // n - сколько требуется вывести + constructor(Count, n: integer); + begin + Self.Count := Count; + Self.n := n; + TaskResult := IOError; + TaskException := Self; + end; + + function Info: string; override := $'OutputCount({Count},{n})'; + end; + OutputCount2Exception = class(LightPTException) // Ровно Count + Count: integer; // Count - сколько выведено + i: integer; // n - какой номер требуется вывести + constructor(Count, i: integer); + begin + Self.Count := Count; + Self.i := i; + TaskResult := IOError; + TaskException := Self; + end; + + function Info: string; override := $'Output2Count({Count},{i})'; + end; + OutputTypeException = class(LightPTException) + n: integer; // номер параметра + ExpectedType, ActualType: string; + constructor(n: integer; ExpectedType, ActualType: string); + begin + Self.n := n; + Self.ExpectedType := ExpectedType; + Self.ActualType := ActualType; + TaskResult := IOError; + TaskException := Self; + end; + + function Info: string; override := $'OutputType({n},{ExpectedType},{ActualType})'; + end; + + NotInTestGenModeException = class(LightPTException) + FuncName: string; + constructor (FuncName: string) := Self.Funcname := Funcname; + end; + + NotInTestModeException = class(LightPTException) + FuncName: string; + constructor (FuncName: string) := Self.Funcname := Funcname; + end; + + InputTestCountMismatchException = class(LightPTException); + + InputTestTypesMismatchException = class(LightPTException); + +var + CurPosInInputList := 0; + CurPosInInputListInTestMode := 0; + TaskName := ExtractFileName(System.Environment.GetCommandLineArgs[0]).Replace('.exe', ''); + +{=========================================================} +{ Функции для генерации тестов } +{=========================================================} + +/// Сгенерировать по последовательности спецификаций в тестовых ячейках список данных для теста +function GenValuesByTestCells(a: sequence of TestCell): List; +begin + Result := a.Select(tc -> tc.GenerateData).ToList; +end; + +/// Сгенерировать целую тестовую ячейку +function tInt(a: integer; b: integer): TestCell; +begin + Result := new TestCell(typeof(integer)); + Result.a := a; + Result.b := b; +end; + +/// Сгенерировать вещественную тестовую ячейку +function tRe(ra: real; rb: real; digits: integer): TestCell; +begin + Result := new TestCell(typeof(real)); + Result.ra := ra; + Result.rb := rb; + Result.digits := digits; +end; + +/// Сгенерировать символьную тестовую ячейку +function tChr(ca: char; cb: char): TestCell; +begin + Result := new TestCell(typeof(char)); + Result.ca := ca; + Result.cb := cb; +end; + +/// Сгенерировать логическую тестовую ячейку +function tBoo: TestCell; +begin + Result := new TestCell(typeof(boolean)); +end; + +function operator*(cell: TestCell; n: integer): array of TestCell; extensionmethod; +begin + Result := ArrFill(n,cell) +end; + +function operator*(n: integer; cell: TestCell): array of TestCell; extensionmethod; +begin + Result := ArrFill(n,cell) +end; + +function operator*(cell: System.Type; n: integer): array of System.Type; extensionmethod; +begin + Result := ArrFill(n,cell) +end; + +function operator*(n: integer; cell: System.Type): array of System.Type; extensionmethod; +begin + Result := ArrFill(n,cell) +end; + +{=========================================================} +{ Сервисные функции } +{=========================================================} + +procedure ErrorInputCount(Count, n: integer) := raise new InputCountException(Count,n); + +procedure ErrorOutputCount(Count, n: integer) := raise new OutputCountException(Count,n); + +procedure ErrorInputType(n: integer; ExpectedType, ActualType: string) + := raise new InputTypeException(n,ExpectedType,ActualType); + +procedure ErrorOutputType(n: integer; ExpectedType, ActualType: string) + := raise new OutputTypeException(n,ExpectedType,ActualType); + +function AutoTest: integer->() := testnum -> (TestMode := tmAutoTest); + +procedure GenerateAutoTests(n: integer); +begin + TestCount := n; + GenerateTestData := AutoTest; +end; + +procedure GenerateTests(n: integer; testcells: sequence of TestCell); +begin + // Нужно сравнить типы в InputList и здесь. При несоотверствии бросить исключение + // Это можно делать только здесь - где количество входных данных заранее известно + // В задачах где вначале вводится n, а потом массив из n элементов, это не работает - количество данных меняется от теста нк тесту + var testTypes := testcells.Select(ts -> ts.typ).ToArray; + var inputTypes := InputList.Select(ob -> ob.GetType).ToArray; + if (testTypes.Length <> inputTypes.Length) then + raise new InputTestCountMismatchException; + for var i:=0 to testTypes.Length - 1 do + if (testTypes[i] <> inputTypes[i]) then + raise new InputTestTypesMismatchException; + + TestCount := n; + GenerateTestData := tnum -> begin + InputList := GenValuesByTestCells(testcells); + end; +end; + +var + _isPT, _isRobot, _isDrawman, _isLightPT: boolean; + _IsPTcalculated := False; + _IsLightPTcalculated := False; + _IsRobotcalculated := False; + _IsDrawmancalculated := False; + +/// Является ли задание заданием для задачника PT +function IsPT: boolean; +begin + if _IsPTcalculated then + Result := _isPT + else Result := System.Type.GetType('PT4.PT4') <> nil; + _isPT := Result; + _IsPTcalculated := True; +end; + +/// Является ли задание заданием для Робота +function IsRobot: boolean; +begin + if _IsRobotcalculated then + Result := _isRobot + else Result := System.Type.GetType('RobotField.RobotField') <> nil; + _isRobot := Result; + _IsRobotcalculated := True; +end; + +/// Является ли задание заданием для Чертежника +function IsDrawman: boolean; +begin + if _IsDrawmancalculated then + Result := _isDrawman + else Result := System.Type.GetType('DrawManField.DrawManField') <> nil; + _isDrawman := Result; + _IsDrawmancalculated := True; +end; + +/// Является ли задание заданием для легковесного задачника +function IsLightPT: boolean; +begin + if _IsLightPTcalculated then + Result := _IsLightPT + else Result := not IsPT and not IsRobot and not IsDrawman; + _IsLightPT := Result; + _IsLightPTcalculated := True; +end; + +/// надо ли пополнять список ввода в функциях, используемых для ввода +function NeedAddDataToInputList: boolean := IsLightPT and ((TestMode = tmNone) or (TestMode = tmAutoTest)); + +/// Полный путь к папке auth-файла +function FindAuthDat: string; +begin + var auth := 'auth.dat'; + Result := ''; + // В текущем каталоге + if FileExists(auth) then + Result := ExpandFileName(auth) + // Если нет, в каталоге уровня выше + else if FileExists(System.IO.Path.Combine('..',auth)) then + begin + Result := ExpandFileName(System.IO.Path.Combine('..',auth)) + end + // Если нет, в корневом каталоге сетевого диска - Это не работает на старых Win 10 куда не устанавливается NET 4/7/1 + {else begin + var fullname := ExpandFileName(auth); + var drive := ExtractFileDrive(fullname); + var di := new System.IO.DriveInfo(drive); + if di.DriveType = System.IO.DriveType.Network then + begin + var af := System.IO.Path.Combine(di.RootDirectory.FullName,auth); + if FileExists(af) then + Result := af; + end + end;} +end; + +{=================================================================} +{ Функции для шифрования-дешифрования при записи в auth.dat } +{=================================================================} + +// На некоторых компьютерах давала сбой, поэтому просто возвращает константу +function ProcessorId: string; +begin + {var mbs := new ManagementObjectSearcher('Select ProcessorId From Win32_processor'); + var mbsList := mbs.Get(); + Result := ''; + foreach var mo: ManagementObject in mbsList do + begin + var pId := mo['ProcessorId']; + if pId <> nil then + Result := pId.ToString() + else Result := 'AAAAAAAAAAAAAAAA'; + break; + end;} + Result := 'AAAAAAAAAAAAAAAA'; +end; + +function Encrypt(src: string): array of byte; // записать в файл +begin + var ae := Aes.Create(); + var key := Encoding.UTF8.GetBytes(ProcessorId); + var crypt := ae.CreateEncryptor(key, key); + var ms := new MemoryStream(); + var cs := new CryptoStream(ms, crypt, CryptoStreamMode.Write); + var sw := new StreamWriter(cs); + sw.Write(src); + sw.Close; + cs.Close; + ms.Close; + Result := ms.ToArray; +end; + +function Decrypt(data: array of byte): string; +begin + if data = nil then + begin + Result := ''; + exit + end; + var ae := Aes.Create(); + var key := Encoding.UTF8.GetBytes(ProcessorId); + var crypt := ae.CreateDecryptor(key, key); + var ms := new MemoryStream(data); + var cs := new CryptoStream(ms, crypt, CryptoStreamMode.Read); + var sr := new StreamReader(cs); + var text := sr.ReadToEnd; + sr.Close; + cs.Close; + ms.Close; + Result := text; +end; + +{=========================================================} +{ Функции для проверки ввода-вывода } +{=========================================================} + +function cInt := typeof(integer); +function cRe := typeof(real); +function cStr := typeof(string); +function cBool := typeof(boolean); +function cChar := typeof(char); + + +procedure CheckData(InitialInput, InitialOutput, Input: array of System.Type); +begin + CheckInitialIOSeqs(InitialInput, InitialOutput); + if Input = nil then + CheckInputIsInitial + else CheckInput(Input); +end; + +procedure CheckInitialIO; +begin + if (OutputList.Count = InitialOutputList.Count) and (InputList.Count = InitialInputList.Count) then + TaskResult := InitialTask + else if (InputList.Count < InitialInputList.Count) or (InputList.Count = InitialInputList.Count) and (OutputList.Count < InitialOutputList.Count) then + TaskResult := BadInitialTask; +end; + +procedure CheckInitialIOIsEmpty := CheckInitialIO; + +procedure InitialOutput(a: array of System.Type); +begin + InitialOutputList.Clear; + if a<>nil then + InitialOutputList.AddRange(a); +end; + +procedure InitialInput(a: array of System.Type); +begin + InitialInputList.Clear; + if a<>nil then + InitialInputList.AddRange(a); +end; + +function CompareValues(o1, o2: Object): boolean; +begin + if (o1 is real) and (o2 is real) then + begin + var r1 := real(o1); + var r2 := real(o2); + Result := Abs(r1 - r2) < 0.0001; + exit; + end; + Result := o1.Equals(o2); +end; + +function CompareArrValues(a,lst: array of object): boolean; +begin + Result := True; + if a.Length <> OutputList.Count then + Result := False; + for var i := 0 to a.Length - 1 do + if not CompareValues(a[i], lst[i]) then + begin + Result := False; + exit; + end; +end; + +function CompareValuesWithOutput(params a: array of object): boolean := CompareArrValues(a,OutputList.ToArray); + +{procedure CheckInitialOutputValues(params a: array of object); +begin + if CompareArrValues(a,OutputList.ToArray) then + TaskResult := InitialTask; +end;} + +// По сути отдельные функции - это неправильно. Необходим CheckInitialInputOutput +procedure CheckInitialOutput(params a: array of System.Type); +begin + InitialOutput(a); + CheckInitialIO; +end; + +procedure CheckInitialInput(params a: array of System.Type); +begin + InitialInput(a); + CheckInitialIO; +end; + +procedure CheckInitialOutputSeq(a: sequence of System.Type) := CheckInitialOutput(a.ToArray); + +procedure CheckInitialInputSeq(a: sequence of System.Type) := CheckInitialInput(a.ToArray); + +procedure CheckInitialIOSeqs(input,output: sequence of System.Type); +begin + InitialInput(input?.ToArray); + InitialOutput(output?.ToArray); + CheckInitialIO; +end; + +procedure CheckInputCount(n: integer); +begin + if InputList.Count <> n then + raise new InputCountException(InputList.Count, n) +end; + +procedure CheckInput2Count(i: integer); +begin + if InputList.Count <= i then + raise new InputCount2Exception(InputList.Count, i + 1) +end; + +procedure CheckInputTest2Count(i: integer); +begin + if InputList.Count <= i then + raise new InputCountTest2Exception(InputList.Count, i + 1) +end; + +procedure CheckOutput2Count(i: integer); +begin + if OutputList.Count <= i then + raise new OutputCount2Exception(OutputList.Count, i + 1) +end; + +function IsInt(i: integer) := InputList[i] is integer; +function IsRe(i: integer) := InputList[i] is real; +function IsStr(i: integer) := InputList[i] is string; +function IsBoo(i: integer) := InputList[i] is boolean; +function IsChr(i: integer) := InputList[i] is char; + +function OutIsInt(i: integer) := OutputList[i] is integer; +function OutIsRe(i: integer) := OutputList[i] is real; +function OutIsStr(i: integer) := OutputList[i] is string; +function OutIsBoo(i: integer) := OutputList[i] is boolean; +function OutIsChr(i: integer) := OutputList[i] is char; + + +function Int(i: integer): integer; +begin + CheckInput2Count(i); + if not IsInt(i) then + raise new InputTypeException(i + 1, 'integer', TypeName(InputList[i])); + Result := integer(InputList[i]); +end; + +function Re(i: integer): real; +begin + CheckInput2Count(i); + if not IsRe(i) then + raise new InputTypeException(i + 1, 'real', TypeName(InputList[i])); + Result := real(InputList[i]); +end; + +function Str(i: integer): string; +begin + CheckInput2Count(i); + if not IsStr(i) then + raise new InputTypeException(i + 1, 'string', TypeName(InputList[i])); + Result := string(InputList[i]); +end; + +function Boo(i: integer): boolean; +begin + CheckInput2Count(i); + if not IsBoo(i) then + raise new InputTypeException(i + 1, 'boolean', TypeName(InputList[i])); + Result := boolean(InputList[i]); +end; + +function Chr(i: integer): char; +begin + CheckInput2Count(i); + if not IsChr(i) then + raise new InputTypeException(i + 1, 'char', TypeName(InputList[i])); + Result := char(InputList[i]); +end; + +function IntTest(i: integer): integer; +begin + CheckInputTest2Count(i); + if not IsInt(i) then + raise new InputTypeTestException(i + 1, 'integer', TypeName(InputList[i])); + Result := integer(InputList[i]); +end; + +function ReTest(i: integer): real; +begin + CheckInputTest2Count(i); + if not IsRe(i) then + raise new InputTypeTestException(i + 1, 'real', TypeName(InputList[i])); + Result := real(InputList[i]); +end; + +function StrTest(i: integer): string; +begin + CheckInputTest2Count(i); + if not IsStr(i) then + raise new InputTypeTestException(i + 1, 'string', TypeName(InputList[i])); + Result := string(InputList[i]); +end; + +function BooTest(i: integer): boolean; +begin + CheckInputTest2Count(i); + if not IsBoo(i) then + raise new InputTypeTestException(i + 1, 'boolean', TypeName(InputList[i])); + Result := boolean(InputList[i]); +end; + +function ChrTest(i: integer): char; +begin + CheckInputTest2Count(i); + if not IsChr(i) then + raise new InputTypeTestException(i + 1, 'char', TypeName(InputList[i])); + Result := char(InputList[i]); +end; + +function OutInt(i: integer): integer; +begin + CheckOutput2Count(i); + if not OutIsInt(i) then + raise new OutputTypeException(i + 1, 'integer', TypeName(OutputList[i])); + Result := integer(OutputList[i]); +end; + +function OutRe(i: integer): real; +begin + CheckOutput2Count(i); + if not OutIsRe(i) then + raise new OutputTypeException(i + 1, 'real', TypeName(OutputList[i])); + Result := real(OutputList[i]); +end; + +function OutBoo(i: integer): boolean; +begin + CheckOutput2Count(i); + if not OutIsBoo(i) then + raise new OutputTypeException(i + 1, 'boolean', TypeName(OutputList[i])); + Result := boolean(OutputList[i]); +end; + +function OutChr(i: integer): char; +begin + CheckOutput2Count(i); + if not OutIsChr(i) then + raise new OutputTypeException(i + 1, 'char', TypeName(OutputList[i])); + Result := char(OutputList[i]); +end; + +function OutStr(i: integer): string; +begin + CheckOutput2Count(i); + if not OutIsStr(i) then + raise new OutputTypeException(i + 1, 'string', TypeName(OutputList[i])); + Result := string(OutputList[i]); +end; + +function Int: integer; +begin + Result := Int(CurPosInInputList); + CurPosInInputList += 1; +end; + +function Re: real; +begin + Result := Re(CurPosInInputList); + CurPosInInputList += 1; +end; + +function Str: string; +begin + Result := Str(CurPosInInputList); + CurPosInInputList += 1; +end; + +function Boo: boolean; +begin + Result := Boo(CurPosInInputList); + CurPosInInputList += 1; +end; + +function Chr: char; +begin + Result := Chr(CurPosInInputList); + CurPosInInputList += 1; +end; + +function IntTest: integer; +begin + Result := IntTest(CurPosInInputListInTestMode); + CurPosInInputListInTestMode += 1; +end; + +function ReTest: real; +begin + Result := ReTest(CurPosInInputListInTestMode); + CurPosInInputListInTestMode += 1; +end; + +function StrTest: string; +begin + Result := StrTest(CurPosInInputListInTestMode); + CurPosInInputListInTestMode += 1; +end; + +function BooTest: boolean; +begin + Result := BooTest(CurPosInInputListInTestMode); + CurPosInInputListInTestMode += 1; +end; + +function ChrTest: char; +begin + Result := ChrTest(CurPosInInputListInTestMode); + CurPosInInputListInTestMode += 1; +end; + + +function Int2: (integer, integer) := (Int, Int); + +function Re2: (real, real) := (Re, Re); + +function IntArr(n: integer): array of integer := (1..n).Select(x -> Int).ToArray; +function ReArr(n: integer): array of real := (1..n).Select(x -> Re).ToArray; +function BooArr(n: integer): array of boolean := (1..n).Select(x -> Boo).ToArray; +function ChrArr(n: integer): array of char := (1..n).Select(x -> Chr).ToArray; +function StrArr(n: integer): array of string := (1..n).Select(x -> Str).ToArray; + +// функции, возвращающие входные и выходные списки, а также их срезы, приведенные к нужному типу + +function InputListAsIntegers: array of integer := InputList.Select((x,i) -> Int(i)).ToArray; +function InputListAsReals: array of real := InputList.Select((x,i) -> Re(i)).ToArray; +function InputListAsBooleans: array of boolean := InputList.Select((x,i) -> Boo(i)).ToArray; +function InputListAsChars: array of char := InputList.Select((x,i) -> Chr(i)).ToArray; +function InputListAsStrings: array of string := InputList.Select((x,i) -> Str(i)).ToArray; + +function OutputListAsIntegers: array of integer := OutputList.Select((x,i) -> OutInt(i)).ToArray; +function OutputListAsReals: array of real := OutputList.Select((x,i) -> OutRe(i)).ToArray; +function OutputListAsBooleans: array of boolean := OutputList.Select((x,i) -> OutBoo(i)).ToArray; +function OutputListAsChars: array of char := OutputList.Select((x,i) -> OutChr(i)).ToArray; +function OutputListAsStrings: array of string := OutputList.Select((x,i) -> OutStr(i)).ToArray; + +function InSliceIntArr(a,b: integer): array of integer := (a..b).Select(i->Int(i)).ToArray; +function InSliceReArr(a,b: integer): array of real := (a..b).Select(i->Re(i)).ToArray; +function InSliceBooArr(a,b: integer): array of boolean := (a..b).Select(i->Boo(i)).ToArray; +function InSliceChrArr(a,b: integer): array of char := (a..b).Select(i->Chr(i)).ToArray; +function InSliceStrArr(a,b: integer): array of string := (a..b).Select(i->Str(i)).ToArray; + +function OutSliceIntArr(a,b: integer): array of integer := (a..b).Select(i->OutInt(i)).ToArray; +function OutSliceReArr(a,b: integer): array of real := (a..b).Select(i->OutRe(i)).ToArray; +function OutSliceBooArr(a,b: integer): array of boolean := (a..b).Select(i->OutBoo(i)).ToArray; +function OutSliceChrArr(a,b: integer): array of char := (a..b).Select(i->OutChr(i)).ToArray; +function OutSliceStrArr(a,b: integer): array of string := (a..b).Select(i->OutStr(i)).ToArray; + +function ConvertOne(ob: Object): Object; +begin + Result := ob; + if ob is string then + begin + var s := string(ob); + var ival: integer; + var rval: real; + if s.TryToInteger(ival) then + Result := ival + else if s.TryToReal(rval) then + Result := rval + end +end; + +procedure ConvertStringsToNumbersInOutputList; +begin + for var i:=0 to OutputList.Count - 1 do + OutputList[i] := ConvertOne(OutputList[i]); +end; + +function ToObjArray(a: sequence of integer): array of object := a.Select(x -> object(x)).ToArray; + +function ToObjArray(a: sequence of real): array of object := a.Select(x -> object(x)).ToArray; + +function ToObjArray(a: sequence of string): array of object := a.Select(x -> object(x)).ToArray; + +function ToObjArray(a: sequence of char): array of object := a.Select(x -> object(x)).ToArray; + +function ToObjArray(a: sequence of boolean): array of object := a.Select(x -> object(x)).ToArray; + +function ToObjArray(a: sequence of word): array of object := a.Select(x -> object(x)).ToArray; + + +{============================================} +{ Методы расширения для List } +{============================================} +/// Заполняет InputList в GenerateTestData. Вызывать только в GenerateTestData! +procedure AddTestData(Self: List; data: sequence of integer); extensionmethod; +begin + if TestMode <> tmGenTest then + raise new NotInTestGenModeException('AddTestData'); + Self.AddRange(ToObjArray(data)); +end; + +/// Заполняет InputList в GenerateTestData. Вызывать только в GenerateTestData! +procedure AddTestData(Self: List; data: sequence of real); extensionmethod; +begin + if TestMode <> tmGenTest then + raise new NotInTestGenModeException('AddTestData'); + Self.AddRange(ToObjArray(data)); +end; + +/// Заполняет InputList в GenerateTestData. Вызывать только в GenerateTestData! +procedure AddTestData(Self: List; data: sequence of string); extensionmethod; +begin + if TestMode <> tmGenTest then + raise new NotInTestGenModeException('AddTestData'); + Self.AddRange(ToObjArray(data)); +end; + +/// Заполняет InputList в GenerateTestData. Вызывать только в GenerateTestData! +procedure AddTestData(Self: List; data: sequence of char); extensionmethod; +begin + if TestMode <> tmGenTest then + raise new NotInTestGenModeException('AddTestData'); + Self.AddRange(ToObjArray(data)); +end; + +/// Заполняет InputList в GenerateTestData. Вызывать только в GenerateTestData! +procedure AddTestData(Self: List; data: sequence of boolean); extensionmethod; +begin + if TestMode <> tmGenTest then + raise new NotInTestGenModeException('AddTestData'); + Self.AddRange(ToObjArray(data)); +end; + +/// Заполняет InputList в GenerateTestData. Вызывать только в GenerateTestData! +procedure AddTestData(Self: List; data: sequence of word); extensionmethod; +begin + if TestMode <> tmGenTest then + raise new NotInTestGenModeException('AddTestData'); + Self.AddRange(ToObjArray(data)); +end; + +/// Заполняет InputList в GenerateTestData. Вызывать только в GenerateTestData! +procedure AddTestData(Self: List; data: sequence of object); extensionmethod; +begin + if TestMode <> tmGenTest then + raise new NotInTestGenModeException('AddTestData'); + Self.AddRange(data.ToArray); +end; + + +/// Заполняет InputList в GenerateTestData. Вызывать только в GenerateTestData! +procedure AddTestData(Self: List; data: integer); extensionmethod; +begin + if TestMode <> tmGenTest then + raise new NotInTestGenModeException('AddTestData'); + Self.Add(data); +end; + +/// Заполняет InputList в GenerateTestData. Вызывать только в GenerateTestData! +procedure AddTestData(Self: List; data: real); extensionmethod; +begin + if TestMode <> tmGenTest then + raise new NotInTestGenModeException('AddTestData'); + Self.Add(data); +end; + +/// Заполняет InputList в GenerateTestData. Вызывать только в GenerateTestData! +procedure AddTestData(Self: List; data: string); extensionmethod; +begin + if TestMode <> tmGenTest then + raise new NotInTestGenModeException('AddTestData'); + Self.Add(data); +end; + +/// Заполняет InputList в GenerateTestData. Вызывать только в GenerateTestData! +procedure AddTestData(Self: List; data: char); extensionmethod; +begin + if TestMode <> tmGenTest then + raise new NotInTestGenModeException('AddTestData'); + Self.Add(data); +end; + +/// Заполняет InputList в GenerateTestData. Вызывать только в GenerateTestData! +procedure AddTestData(Self: List; data: boolean); extensionmethod; +begin + if TestMode <> tmGenTest then + raise new NotInTestGenModeException('AddTestData'); + Self.Add(data); +end; + +/// Только для InputList и только во время тестирования!!! TestMode = tmTest! Это внутренний метод - разработчику тестов не вызывать!!! +function ReadTestDataInt(Self: List): integer; extensionmethod; +begin + if TestMode <> tmTest then + raise new NotInTestModeException('ReadTestDataInt'); + Result := IntTest; +end; + +/// Только для InputList и только во время тестирования!!! TestMode = tmTest! Это внутренний метод - разработчику тестов не вызывать!!! +function ReadTestDataReal(Self: List): real; extensionmethod; +begin + if TestMode <> tmTest then + raise new NotInTestModeException('ReadTestDataReal'); + Result := ReTest; +end; + +/// Только для InputList и только во время тестирования!!! TestMode = tmTest! Это внутренний метод - разработчику тестов не вызывать!!! +function ReadTestDataString(Self: List): string; extensionmethod; +begin + if TestMode <> tmTest then + raise new NotInTestModeException('ReadTestDataString'); + Result := StrTest; +end; + +/// Только для InputList и только во время тестирования!!! TestMode = tmTest! Это внутренний метод - разработчику тестов не вызывать!!! +function ReadTestDataChar(Self: List): char; extensionmethod; +begin + if TestMode <> tmTest then + raise new NotInTestModeException('ReadTestDataChar'); + Result := ChrTest; +end; + +/// Только для InputList и только во время тестирования!!! TestMode = tmTest! Это внутренний метод - разработчику тестов не вызывать!!! +function ReadTestDataBoolean(Self: List): boolean; extensionmethod; +begin + if TestMode <> tmTest then + raise new NotInTestModeException('ReadTestDataBoolean'); + Result := BooTest; +end; + +/// Только для InputList и только во время тестирования!!! TestMode = tmTest! Это внутренний метод - разработчику тестов не вызывать!!! +function ReadTestDataIntArr(Self: List; n: integer): array of integer; extensionmethod; +begin + if TestMode <> tmTest then + raise new NotInTestModeException('ReadTestDataIntArr'); + Result := (1..n).Select(x->IntTest).ToArray; +end; + +/// Только для InputList и только во время тестирования!!! TestMode = tmTest! Это внутренний метод - разработчику тестов не вызывать!!! +function ReadTestDataReArr(Self: List; n: integer): array of real; extensionmethod; +begin + if TestMode <> tmTest then + raise new NotInTestModeException('ReadTestDataReArr'); + Result := (1..n).Select(x->ReTest).ToArray; +end; + +/// Только для InputList и только во время тестирования!!! TestMode = tmTest! Это внутренний метод - разработчику тестов не вызывать!!! +function ReadTestDataStrArr(Self: List; n: integer): array of string; extensionmethod; +begin + if TestMode <> tmTest then + raise new NotInTestModeException('ReadTestDataStrArr'); + Result := (1..n).Select(x->StrTest).ToArray; +end; + +/// Только для InputList и только во время тестирования!!! TestMode = tmTest! Это внутренний метод - разработчику тестов не вызывать!!! +function ReadTestDataChrArr(Self: List; n: integer): array of char; extensionmethod; +begin + if TestMode <> tmTest then + raise new NotInTestModeException('ReadTestDataChrArr'); + Result := (1..n).Select(x->ChrTest).ToArray; +end; + +/// Только для InputList и только во время тестирования!!! TestMode = tmTest! Это внутренний метод - разработчику тестов не вызывать!!! +function ReadTestDataBooArr(Self: List; n: integer): array of boolean; extensionmethod; +begin + if TestMode <> tmTest then + raise new NotInTestModeException('ReadTestDataBooArr'); + Result := (1..n).Select(x->BooTest).ToArray; +end; + + +function SliceAsInt(Self: List; a,b: integer): array of integer; extensionmethod + := Self[a:b].Select(x->integer(x)).ToArray; + +function SliceAsReal(Self: List; a,b: integer): array of real; extensionmethod + := Self[a:b].Select(x->real(x)).ToArray; + +function SliceAsString(Self: List; a,b: integer): array of string; extensionmethod + := Self[a:b].Select(x->string(x)).ToArray; + +function SliceAsChar(Self: List; a,b: integer): array of char; extensionmethod + := Self[a:b].Select(x->char(x)).ToArray; + +function SliceAsBoolean(Self: List; a,b: integer): array of boolean; extensionmethod + := Self[a:b].Select(x->boolean(x)).ToArray; + +{=========================================================} +{ Сервисные функции - продолжение } +{=========================================================} +procedure GenerateTests(params a: array of integer); +begin + if InputList.Count <> 1 then + raise new InputTestCountMismatchException; + if InputList[0].GetType <> typeof(integer) then + raise new InputTestTypesMismatchException; + + TestCount := a.Length; + GenerateTestData := tnum -> begin + InputList.AddTestData(a[tnum-1]); + end; +end; + +procedure GenerateTests(params a: array of real); +begin + if InputList.Count <> 1 then + raise new InputTestCountMismatchException; + if InputList[0].GetType <> typeof(real) then + raise new InputTestTypesMismatchException; + + TestCount := a.Length; + GenerateTestData := tnum -> begin + InputList.AddTestData(a[tnum-1]); + end; +end; + +procedure GenerateTests(params a: array of string); +begin + if InputList.Count <> 1 then + raise new InputTestCountMismatchException; + if InputList[0].GetType <> typeof(string) then + raise new InputTestTypesMismatchException; + + TestCount := a.Length; + GenerateTestData := tnum -> begin + InputList.AddTestData(a[tnum-1]); + end; +end; + +procedure GenerateTests(params a: array of char); +begin + if InputList.Count <> 1 then + raise new InputTestCountMismatchException; + if InputList[0].GetType <> typeof(char) then + raise new InputTestTypesMismatchException; + + TestCount := a.Length; + GenerateTestData := tnum -> begin + InputList.AddTestData(a[tnum-1]); + end; +end; + +procedure GenerateTests(params a: array of boolean); +begin + if InputList.Count <> 1 then + raise new InputTestCountMismatchException; + if InputList[0].GetType <> typeof(boolean) then + raise new InputTestTypesMismatchException; + + TestCount := a.Length; + GenerateTestData := tnum -> begin + InputList.AddTestData(a[tnum-1]); + end; +end; + +procedure GenerateTests(params a: array of (T1,T2)); +begin + if InputList.Count <> 2 then + raise new InputTestCountMismatchException; + if InputList[0].GetType <> typeof(T1) then + raise new InputTestTypesMismatchException; + if InputList[1].GetType <> typeof(T2) then + raise new InputTestTypesMismatchException; + + TestCount := a.Length; + GenerateTestData := tnum -> begin + var tt := a[tnum-1]; + InputList.AddTestData(|object(tt[0]),object(tt[1])|); + end; +end; + +procedure GenerateTests(params a: array of (T1,T2,T3)); +begin + if InputList.Count <> 2 then + raise new InputTestCountMismatchException; + if InputList[0].GetType <> typeof(T1) then + raise new InputTestTypesMismatchException; + if InputList[1].GetType <> typeof(T2) then + raise new InputTestTypesMismatchException; + if InputList[2].GetType <> typeof(T3) then + raise new InputTestTypesMismatchException; + + TestCount := a.Length; + GenerateTestData := tnum -> begin + var tt := a[tnum-1]; + InputList.AddTestData(|object(tt[0]),object(tt[1]),object(tt[2])|); + end; +end; + +{=========================================================================} +{ Переопределенные функции PABCSystem с заполнением ввода и вывода } +{=========================================================================} +/// Возвращает случайное целое в диапазоне от a до b +function Random(a, b: integer): integer; +begin + if TestMode = tmTest then + Result := InputList.ReadTestDataInt // считать следующее данное из заполненного в GenTestMode InputList + else Result := PABCSystem.Random(a, b); + + if NeedAddDataToInputList then + InputList.Add(Result); +end; + +/// Возвращает случайное целое в диапазоне от 0 до n-1 +function Random(n: integer): integer; +begin + if TestMode = tmTest then + Result := InputList.ReadTestDataInt + else Result := PABCSystem.Random(n); + if NeedAddDataToInputList then + InputList.Add(Result); +end; + +/// Возвращает случайное вещественное в диапазоне [0..1) +function Random: real; +begin + if TestMode = tmTest then + Result := InputList.ReadTestDataReal + else Result := PABCSystem.Random; + if NeedAddDataToInputList then + InputList.Add(Result); +end; + +/// Возвращает случайное вещественное в диапазоне [a,b) +function Random(a, b: real): real; +begin + if TestMode = tmTest then + Result := InputList.ReadTestDataReal + else Result := PABCSystem.Random(a, b); + if NeedAddDataToInputList then + InputList.Add(Result); +end; + +/// Возвращает случайный символ в диапазоне от a до b +function Random(a, b: char): char; +begin + if TestMode = tmTest then + Result := InputList.ReadTestDataChar + else Result := PABCSystem.Random(a, b); + if NeedAddDataToInputList then + InputList.Add(Result); +end; + +function RandomReal(a, b: real; digits: integer): real; +begin + if TestMode = tmTest then + Result := InputList.ReadTestDataReal + else Result := PABCSystem.RandomReal(a, b, digits); + if NeedAddDataToInputList then + InputList.Add(Result); +end; + +/// Возвращает случайное целое в диапазоне +function Random(diap: IntRange): integer; +begin + if TestMode = tmTest then + Result := InputList.ReadTestDataInt + else Result := PABCSystem.Random(diap); + if NeedAddDataToInputList then + InputList.Add(Result); +end; + +/// Возвращает случайное вещественное в диапазоне +function Random(diap: RealRange): real; +begin + if TestMode = tmTest then + Result := InputList.ReadTestDataReal + else Result := PABCSystem.Random(diap); + if NeedAddDataToInputList then + InputList.Add(Result); +end; + +/// Возвращает случайный символ в диапазоне +function Random(diap: CharRange): char; +begin + if TestMode = tmTest then + Result := InputList.ReadTestDataChar + else Result := PABCSystem.Random(diap); + if NeedAddDataToInputList then + InputList.Add(Result); +end; + +/// Возвращает кортеж из двух случайных целых в диапазоне от a до b +function Random2(a, b: integer): (integer, integer); +begin + Result := (Random(a, b), Random(a, b)); +end; + +/// Возвращает кортеж из двух случайных вещественных в диапазоне от a до b +function Random2(a, b: real): (real, real); +begin + Result := (Random(a, b), Random(a, b)); +end; + +/// Возвращает кортеж из двух случайных символов в диапазоне от a до b +function Random2(a, b: char): (char, char); +begin + Result := (Random(a, b), Random(a, b)); +end; + +/// Возвращает кортеж из двух случайных целых в диапазоне +function Random2(diap: IntRange): (integer, integer); +begin + Result := (Random(diap), Random(diap)); +end; + +/// Возвращает кортеж из двух случайных символов в диапазоне +function Random2(diap: CharRange): (char, char); +begin + Result := (Random(diap), Random(diap)); +end; + +/// Возвращает кортеж из двух случайных вещественных в диапазоне +function Random2(diap: RealRange): (real, real); +begin + Result := (Random(diap), Random(diap)); +end; + +/// Возвращает кортеж из трех случайных целых в диапазоне от a до b +function Random3(a, b: integer): (integer, integer, integer); +begin + Result := (Random(a, b), Random(a, b), Random(a, b)); +end; + +/// Возвращает кортеж из трех случайных вещественных в диапазоне от a до b +function Random3(a, b: real): (real, real, real); +begin + Result := (Random(a, b), Random(a, b), Random(a, b)); +end; + +/// Возвращает кортеж из трех случайных символов в диапазоне от a до b +function Random3(a, b: char): (char, char, char); +begin + Result := (Random(a, b), Random(a, b), Random(a, b)); +end; + +/// Возвращает кортеж из трех случайных целых в диапазоне +function Random3(diap: IntRange): (integer, integer, integer); +begin + Result := (Random(diap), Random(diap), Random(diap)); +end; + +/// Возвращает кортеж из трех случайных вещественных в диапазоне +function Random3(diap: RealRange): (real, real, real); +begin + Result := (Random(diap), Random(diap), Random(diap)); +end; + +/// Возвращает кортеж из трех случайных символов в диапазоне +function Random3(diap: CharRange): (char, char, char); +begin + Result := (Random(diap), Random(diap), Random(diap)); +end; + +/// Возвращает массив размера n, заполненный случайными целыми значениями в диапазоне от a до b +function ArrRandomInteger(n: integer; a: integer; b: integer): array of integer; +begin + // Есть три состояния: + // 1. Вызов в основной программе (первый запуск) - TestMode = tmNone + // 2. Вызов в основной программе (последующие запуски) - TestMode = tmTest + // 3. Вызов в функции GenerateTestData - TestMode = tmGenTest - это только в состоянии TestMode = True + {if GenTest then + begin + Result := PABCSystem.ArrRandomInteger(n, a, b); // приходится вызывать дважды! + exit; + end;} + if TestMode = tmTest then + Result := InputList.ReadTestDataIntArr(n) + else Result := PABCSystem.ArrRandomInteger(n, a, b); + + if NeedAddDataToInputList then // IsLightPT and (TestMode = tmNone) + for var i:=0 to n-1 do + InputList.Add(Result[i]); +end; + +/// Возвращает массив размера n, заполненный случайными целыми значениями в диапазоне от 0 до 100 +function ArrRandomInteger(n: integer): array of integer := ArrRandomInteger(n,0,100); + +/// Возвращает массив размера n, заполненный случайными вещественными значениями в диапазоне от a до b +function ArrRandomReal(n: integer; a: real; b: real; digits: integer): array of real; +begin + if TestMode = tmTest then + Result := InputList.ReadTestDataReArr(n) + else Result := PABCSystem.ArrRandomReal(n, a, b, digits); + + if NeedAddDataToInputList then + for var i:=0 to n-1 do + InputList.Add(Result[i]); +end; + +/// Возвращает массив размера n, заполненный случайными вещественными значениями в диапазоне от 0 до 10 +function ArrRandomReal(n: integer; digits: integer): array of real := ArrRandomReal(n,0,10,digits); + +/// Возвращает двумерный массив размера m x n, заполненный случайными целыми значениями +function MatrRandomInteger(m: integer; n: integer; a: integer; b: integer): array [,] of integer; +begin + if TestMode = tmTest then + Result := Matr(m,n,InputList.ReadTestDataIntArr(m*n)) + else Result := PABCSystem.MatrRandomInteger(m,n,a,b); + + if NeedAddDataToInputList then + foreach var x in Result.ElementsByRow do + InputList.Add(x); +end; + +/// Возвращает двумерный массив размера m x n, заполненный случайными целыми значениями +function MatrRandomInteger(m: integer; n: integer): array [,] of integer := MatrRandomInteger(m,n,0,100); + +/// Возвращает двумерный массив размера m x n, заполненный случайными вещественными значениями +function MatrRandomReal(m: integer; n: integer; a: real; b: real): array [,] of real; +begin + if TestMode = tmTest then + Result := Matr(m,n,InputList.ReadTestDataReArr(m*n)) + else Result := PABCSystem.MatrRandomReal(m,n,a,b); + + if NeedAddDataToInputList then + foreach var x in Result.ElementsByRow do + InputList.Add(x); +end; + +/// Возвращает двумерный массив размера m x n, заполненный случайными вещественными значениями +function MatrRandomReal(m: integer; n: integer): array [,] of real := MatrRandomReal(m,n,0,10); + +/// Выводит приглашение к вводу и возвращает значение типа integer, введенное с клавиатуры +function ReadInteger(prompt: string): integer; +begin + Result := PABCSystem.ReadInteger(prompt); + if IsPT then exit; + OutputList.RemoveAt(OutputList.Count - 1); + OutputList.RemoveAt(OutputList.Count - 1); + CreateNewLineBeforeMessage := False; +end; + +/// Выводит приглашение к вводу и возвращает значение типа integer, введенное с клавиатуры +function ReadlnInteger(prompt: string): integer; +begin + Result := PABCSystem.ReadlnInteger(prompt); + if IsPT then exit; + OutputList.RemoveAt(OutputList.Count - 1); + OutputList.RemoveAt(OutputList.Count - 1); + CreateNewLineBeforeMessage := False; +end; + +/// Выводит приглашение к вводу и возвращает два значения типа integer, введенные с клавиатуры +function ReadInteger2(prompt: string): (integer, integer); +begin + Result := PABCSystem.ReadInteger2(prompt); + if IsPT then exit; + OutputList.RemoveAt(OutputList.Count - 1); + OutputList.RemoveAt(OutputList.Count - 1); + CreateNewLineBeforeMessage := False; +end; + +function ReadString(prompt: string): string; +begin + Result := PABCSystem.ReadString(prompt); + if IsPT then exit; + OutputList.RemoveAt(OutputList.Count - 1); + OutputList.RemoveAt(OutputList.Count - 1); + CreateNewLineBeforeMessage := False; +end; + +function ReadlnString(prompt: string) := ReadString(prompt); + + +///- procedure Print(a,b,...); +/// Выводит значения a,b,... на экран, после каждого значения выводит пробел +procedure Print(params args: array of object); +begin + foreach var ob in args do + begin + PABCSystem.Print(ob); + if not IsPT then + OutputList.RemoveAt(OutputList.Count - 1) + end; + CreateNewLineBeforeMessage := True; +end; + +///- procedure Println(a,b,...); +/// Выводит значения a,b,... на экран, после каждого значения выводит пробел и переходит на новую строку +procedure Println(params args: array of object); +begin + Print(args); + Writeln; + if IsPT then exit; + CreateNewLineBeforeMessage := False; +end; + +/// Выводит значение экран и выводит пробел +procedure Print(ob: object); +begin + PABCSystem.Print(ob); + if IsPT then exit; + OutputList.RemoveAt(OutputList.Count - 1); + CreateNewLineBeforeMessage := True; +end; + +/// Выводит значение экран и выводит пробел +procedure Print(s: string); +begin + PABCSystem.Print(s); + if IsPT then exit; + OutputList.RemoveAt(OutputList.Count - 1); + CreateNewLineBeforeMessage := True; +end; + +/// Выводит значение экран и выводит пробел +procedure Print(c: char); +begin + PABCSystem.Print(object(c)); + if IsPT then exit; + OutputList.RemoveAt(OutputList.Count - 1); + CreateNewLineBeforeMessage := True; +end; + +// конец переопределенных функций с заполнением ввода-вывода + +procedure CompareTypeWithOutput(params a: array of System.Type); +begin + TaskResult := Solved; + var mn := Min(a.Length, OutputList.Count); + for var i := 0 to mn - 1 do + if a[i] <> OutputList[i].GetType then + raise new OutputTypeException(i + 1, TypeToTypeName(a[i]), TypeName(OutputList[i])); + if a.Length <> OutputList.Count then + raise new OutputCountException(OutputList.Count, a.Length); +end; + +/// Не меняет TaskResult если типы правильные +procedure CheckInputTypes(a: array of System.Type); +begin + // Несоответствие количества вводимых параметров + if a.Length <> InputList.Count then + raise new InputCountException(InputList.Count, a.Length); + for var i := 0 to a.Length - 1 do + if a[i] <> InputList[i].GetType then + raise new InputTypeException(i + 1, TypeToTypeName(a[i]), TypeName(InputList[i])); +end; + +/// Синоним CheckInputTypes +procedure CheckInput(a: array of System.Type) := CheckInputTypes(a); +procedure CheckInputIsEmpty := CheckInputTypes(new System.Type[0]); + +procedure CheckInputIsInitial; +begin + CheckInput(InitialInputList.ToArray); +end; + +procedure CheckInput(seq: sequence of System.Type) := CheckInputTypes(seq.ToArray); + +procedure CheckOutputAfterInitialSeq(seq: sequence of integer) := CheckOutputAfterInitial(ToObjArray(seq)); +procedure CheckOutputAfterInitialSeq(seq: sequence of real) := CheckOutputAfterInitial(ToObjArray(seq)); +procedure CheckOutputAfterInitialSeq(seq: sequence of string) := CheckOutputAfterInitial(ToObjArray(seq)); +procedure CheckOutputAfterInitialSeq(seq: sequence of boolean) := CheckOutputAfterInitial(ToObjArray(seq)); +procedure CheckOutputAfterInitialSeq(seq: sequence of char) := CheckOutputAfterInitial(ToObjArray(seq)); +procedure CheckOutputAfterInitialSeq(seq: sequence of object) := CheckOutputAfterInitial(seq.ToArray); +procedure CheckOutputAfterInitialSeq(seq: ObjectList) := CheckOutputAfterInitial(seq.lst.ToArray); + +procedure CheckOutputAfterInitialSeqSilent(seq: sequence of integer); begin Silent := True; CheckOutputAfterInitialSeq(seq); Silent := False; end; +procedure CheckOutputAfterInitialSeqSilent(seq: sequence of real); begin Silent := True; CheckOutputAfterInitialSeq(seq); Silent := False; end; +procedure CheckOutputAfterInitialSeqSilent(seq: sequence of string); begin Silent := True; CheckOutputAfterInitialSeq(seq); Silent := False; end; +procedure CheckOutputAfterInitialSeqSilent(seq: sequence of boolean); begin Silent := True; CheckOutputAfterInitialSeq(seq); Silent := False; end; +procedure CheckOutputAfterInitialSeqSilent(seq: sequence of char); begin Silent := True; CheckOutputAfterInitialSeq(seq); Silent := False; end; +procedure CheckOutputAfterInitialSeqSilent(seq: sequence of object); begin Silent := True; CheckOutputAfterInitialSeq(seq); Silent := False; end; +procedure CheckOutputAfterInitialSeqSilent(seq: ObjectList); begin Silent := True; CheckOutputAfterInitialSeq(seq); Silent := False; end; + + +procedure ClearOutputListFromSpaces; +begin + OutputList := OutputList.Where(s -> (not (s is string)) or ((s as string) <> ' ')).ToList; + OutputList := OutputList.Where(s -> (not (s is char)) or ((char(s)) <> ' ')).ToList; +end; + +procedure FilterOnlyNumbers; +begin + OutputList := OutputList.Where(x -> (x is integer) or (x is real) or (x is int64)).ToList; +end; + +procedure FilterOnlyNumbersAndBools; +begin + OutputList := OutputList.Where(x -> (x is integer) or (x is real) or (x is int64) or (x is boolean)).ToList; +end; + +function MsgColorCode(color: MessageColorT): char; +begin + Result := #65530; // Black + case color of + MsgColorGreen: Result := #65535; + MsgColorRed: Result := #65534; + MsgColorOrange: Result := #65533; + MsgColorMagenta: Result := #65532; + MsgColorGray: Result := #65531; + end; +end; + +procedure ColoredMessage(msg: string; color: MessageColorT); +begin + if Silent then exit; + + if CreateNewLineBeforeMessage then + Console.WriteLine; + Console.WriteLine(MsgColorCode(color) + msg); + CreateNewLineBeforeMessage := False; +end; + +procedure ColoredMessage(msg: string); +begin + if Silent then exit; + if CreateNewLineBeforeMessage then + Console.WriteLine; + Console.WriteLine(MsgColorCode(MsgColorRed) + msg); + CreateNewLineBeforeMessage := False; +end; + +procedure CheckOutputHelper(i0: integer; params arr: array of object); + procedure OutputTestResult; + begin + ColoredMessage($'Основной запуск верный',MsgColorGray); + ColoredMessage($'Ошибочное решение на тесте:',MsgColorOrange); + ColoredMessage($'Тестовые данные : {InputList.JoinToString}',MsgColorGray); + ColoredMessage($'Полученный результат : {OutputList.JoinToString}',MsgColorGray); + if i0 = 0 then + ColoredMessage($'Правильный результат : {arr.JoinToString}',MsgColorGray) + else ColoredMessage($'Правильный результат : {(OutputList[:i0]+arr).JoinToString}',MsgColorGray) + end; + +begin + if (TaskResult = InitialTask) and CancelMessagesIfInitial + or (TaskResult = BadInitialTask) then + exit; + + // Если мы попали сюда, то OutputList.Count >= InitialOutputList.Count + var mn := Min(arr.Length, OutputList.Count - i0); + + for var i := i0 to i0 + mn - 1 do + begin + // Если типы не совпадают + if (arr[i-i0].GetType.Name <> 'RuntimeType') and (arr[i-i0].GetType <> OutputList[i].GetType) or + (arr[i-i0].GetType.Name = 'RuntimeType') and (arr[i-i0] <> OutputList[i].GetType) + then + begin + if TestNumber > 0 then + OutputTestResult + else + begin + if i > InitialOutputList.Count then + ColoredMessage('Часть выведенных данных правильная',MsgColorGray); + end; + raise new OutputTypeException(i + 1, TypeToTypeName(arr[i-i0].GetType), TypeName(OutputList[i])); + end; + // Если значения не совпадают (если задан маркер типа, то проверка значений пропускается) + if (arr[i-i0].GetType.Name <> 'RuntimeType') and not CompareValues(arr[i-i0], OutputList[i]) then + begin + if i >= InitialOutputList.Count then // ? Если первое данное неправильное - всё равно попадаем сюда!!! + begin + if TestNumber > 0 then + OutputTestResult + else + begin + if i > InitialOutputList.Count then + ColoredMessage('Часть выведенных данных правильная',MsgColorGray); + if (i0 = 0) and (arr.Length = 1) then + //ColoredMessage($'Ожидалось значение {arr[i-i0]}, а выведено {OutputList[i]}',MsgColorGray) + else ColoredMessage($'Элемент {i + 1}: ожидалось значение {arr[i-i0]}, а выведено {OutputList[i]}',MsgColorGray); + end; + end; + TaskResult := BadSolution; + exit; + end; + end; + + if arr.Length <> OutputList.Count - i0 then + begin + if TestNumber > 0 then + OutputTestResult + else + if OutputList.Count > 0 then begin + if arr.Length > OutputList.Count - i0 then // выведено меньше чем надо + ColoredMessage('Все выведенные данные правильны',MsgColorGray) + else if arr.Length < OutputList.Count - i0 then // выведено больше чем надо + ColoredMessage('Все необходимые выведенные данные правильны',MsgColorGray); + end; + raise new OutputCountException(OutputList.Count, arr.Length + i0); + end; + TaskResult := Solved; +end; + +// Поправим сообщения об ошибке в соответствии с TestNumber +procedure CheckOutput(params arr: array of object); +begin + CheckOutputHelper(0,arr); +end; + +procedure CheckOutputSilent(params arr: array of object); +begin + Silent := True; + CheckOutput(arr); + Silent := False; +end; + +procedure CheckOutputAfterInitial(params arr: array of object); +begin + CheckOutputHelper(InitialOutputList.Count,arr); +end; + +procedure CheckOutputAfterInitialSilent(params arr: array of object); +begin + Silent := True; + CheckOutputAfterInitial(arr); + Silent := False; +end; + +procedure CheckOutputSeq(a: sequence of integer) := CheckOutput(ToObjArray(a)); +procedure CheckOutputSeq(a: sequence of real) := CheckOutput(ToObjArray(a)); +procedure CheckOutputSeq(a: sequence of string) := CheckOutput(ToObjArray(a)); +procedure CheckOutputSeq(a: sequence of char) := CheckOutput(ToObjArray(a)); +procedure CheckOutputSeq(a: sequence of boolean) := CheckOutput(ToObjArray(a)); +procedure CheckOutputSeq(a: sequence of object) := CheckOutput(a.ToArray); +procedure CheckOutputSeq(a: ObjectList) := CheckOutput(a.lst.ToArray); +procedure CheckOutputSeq(a: sequence of word) := CheckOutputSeq(ToObjArray(a)); + +procedure CheckOutputSeqSilent(a: sequence of integer) := begin Silent := True; CheckOutputSeq(a); Silent := False end; +procedure CheckOutputSeqSilent(a: sequence of real) := begin Silent := True; CheckOutputSeq(a); Silent := False end; +procedure CheckOutputSeqSilent(a: sequence of string) := begin Silent := True; CheckOutputSeq(a); Silent := False end; +procedure CheckOutputSeqSilent(a: sequence of char) := begin Silent := True; CheckOutputSeq(a); Silent := False end; +procedure CheckOutputSeqSilent(a: sequence of boolean) := begin Silent := True; CheckOutputSeq(a); Silent := False end; +procedure CheckOutputSeqSilent(a: sequence of object) := begin Silent := True; CheckOutputSeq(a); Silent := False end; +procedure CheckOutputSeqSilent(a: ObjectList) := begin Silent := True; CheckOutputSeq(a); Silent := False end; +procedure CheckOutputSeqSilent(a: sequence of word) := begin Silent := True; CheckOutputSeq(a); Silent := False end; + +procedure CheckOutputNew(params arr: array of object) := CheckOutput(arr); +procedure CheckOutputSeqNew(a: sequence of integer) := CheckOutputSeq(a); +procedure CheckOutputSeqNew(a: sequence of real) := CheckOutputSeq(a); +procedure CheckOutputSeqNew(a: sequence of string) := CheckOutputSeq(a); +procedure CheckOutputSeqNew(a: sequence of char) := CheckOutputSeq(a); +procedure CheckOutputSeqNew(a: sequence of boolean) := CheckOutputSeq(a); +procedure CheckOutputSeqNew(a: sequence of object) := CheckOutputSeq(a); +procedure CheckOutputSeqNew(a: sequence of word) := CheckOutputSeq(a); +procedure CheckOutputSeqNew(a: ObjectList) := CheckOutputSeq(a); + +procedure CheckOutputString(str: string); + function Char2Str(c: char): string; + begin + if (c = #10) or (c = #13) then + Result := '''ПереходНаНовуюСтроку''' + else Result := '''' + c + ''''; + end; +begin + if (TaskResult = InitialTask) or (TaskResult = BadInitialTask) then + exit; + var ostr := OutputString.ToString; + var mn := Min(str.Length, ostr.Length); + + var ind := -1; + for var i := 1 to mn do + begin + if str[i] <> ostr[i] then + begin + ind := i; + ColoredMessage($'Элемент {i}: ожидался символ {Char2Str(str[i])}, а выведен символ {Char2Str(ostr[i])}',MsgColorGray); + TaskResult := BadSolution; + exit; + end; + end; + if ind = -1 then + ind := mn; + + if str.Length <> ostr.Length then + begin + if (ind = mn) and (ind<>0) then + ColoredMessage('Все выведенные данные правильны',MsgColorGray) + else if ind > 0 then + ColoredMessage('Часть выведенных данных правильная',MsgColorGray); + raise new OutputCountException(ostr.Length, str.Length); + end; + + TaskResult := Solved; +end; + + +type + IntAr = array of integer; + RealAr = array of real; + IntAr2 = array [,] of integer; + RealAr2 = array [,] of real; + +function FlattenElement(x: object): List; +begin + var lst := new List; + if x is IntAr (var iarr) then + lst.AddRange(iarr.Select(x -> object(x))) + else if x is RealAr (var rarr) then + lst.AddRange(rarr.Select(x -> object(x))) + else if x is IntAr2 (var iarr) then + lst.AddRange(iarr.ElementsByRow.Select(x -> object(x))) + else if x is RealAr2 (var rarr) then + lst.AddRange(rarr.ElementsByRow.Select(x -> object(x))) + else if x is List (var larr) then + lst.AddRange(larr.Select(x -> object(x))) + else if x is List (var lrarr) then + lst.AddRange(lrarr.Select(x -> object(x))) + else lst.Add(x); + Result := lst; +end; + +procedure FlattenOutput; +begin + // если в OutputList массивы, вытянуть их в единый список + OutputList := OutputList.SelectMany(x -> FlattenElement(x)).ToList; +end; + +function NValues(n: integer): string; +begin + case n of + 0: Result := n + ' значений'; + 1: Result := n + ' значение'; + 2, 3, 4: Result := n + ' значения'; + 5..100000: Result := n + ' значений'; + end; +end; + +{=========================================================} +{ Итоговые функции для проверки решения } +{=========================================================} + +procedure RobotCheckSolution; +begin + TaskResult := BadSolution; + var t := System.Type.GetType('RobotField.RobotField'); + if t<>nil then + begin + TaskResultInfo := 'Robot'; + var f := t.GetField('RobField',System.Reflection.BindingFlags.Public or System.Reflection.BindingFlags.Static); + var IsSol := f.FieldType.GetMethod('IsSolution'); + var bool := IsSol.Invoke(f.GetValue(nil),nil); + if boolean(bool) then + TaskResult := Solved; + // RobField.TaskName + var RBTaskNameInfo := f.FieldType.GetField('TaskName'); + var v := string(RBTaskNameInfo.GetValue(f.GetValue(nil))); + // Добавлять RB к имени задания если его там нет + if not v.ToLower.StartsWith('rb') then + v := v.Insert(0,'RB'); + TaskName := v; + end; +end; + +procedure DrawmanCheckSolution; +begin + TaskResult := BadSolution; + var t := System.Type.GetType('DrawManField.DrawManField'); + if t<>nil then + begin + TaskResultInfo := 'Drawman'; + var f := t.GetField('DMField',System.Reflection.BindingFlags.Public or System.Reflection.BindingFlags.Static); + var IsSol := f.FieldType.GetMethod('IsSolution'); + var bool := IsSol.Invoke(f.GetValue(nil),nil); + if boolean(bool) then + TaskResult := Solved; + // DMField.TaskName + var DMTaskNameInfo := f.FieldType.GetField('TaskName'); + var v := string(DMTaskNameInfo.GetValue(f.GetValue(nil))); + // Добавлять DM к имени задания если его там нет + if not v.ToLower.StartsWith('dm') then + v := v.Insert(0,'DM'); + TaskName := v; + end; +end; + +// Вызов PT4.PT4.__FinalizeModule__ отражением +procedure PT4CheckSolution; +begin + var t := System.Type.GetType('PT4.PT4'); + if t<>nil then + begin + var meth := t.GetMethod('__FinalizeModule__',System.Reflection.BindingFlags.Public or System.Reflection.BindingFlags.Static); + if meth <> nil then + meth.Invoke(nil,nil); + // + var f := t.GetField('TaskName',System.Reflection.BindingFlags.Public or System.Reflection.BindingFlags.Static); + TaskName := string(f.GetValue(nil)); + end; +end; + +// Вызов PT4.PT4.GetSolutionInfo отражением +function GetSolutionInfoPT4: string; +begin + var t := System.Type.GetType('PT4.PT4'); + if t<>nil then + begin + var meth := t.GetMethod('GetSolutionInfo',System.Reflection.BindingFlags.Public or System.Reflection.BindingFlags.Static); + if meth <> nil then + Result := string(meth.Invoke(nil,nil)) + else Result := ''; + end; +end; + +procedure CalcPT4Result(info: string; var TaskResult: TaskStatus; var TaskResultInfo: string); +// info - строка, возвращаемая GetSolutionInfoPT4 + + function HasSubstr(s_ru, s_en: string): boolean; + begin + result := false; + if Pos(s_ru, info) > 0 then + result := true + else if Pos(s_en, info) > 0 then + result := true + end; + + function TypeNamePT(s: string): string; + begin + result := ''; + case s of + 'логического типа', 'of logical type': + result := 'boolean'; + 'целого типа', 'of integer type': + result := 'integer'; + 'вещественного типа', 'of real-number type': + result := 'real'; + 'символьного типа', 'of character type': + result := 'char'; + 'строкового типа', 'of string type': + result := 'string'; + end; + if result = '' then + if s.startswith('типа') then + result := copy(s, 6, 100) + else if s.startswith('of') then + begin + delete(s, 1, 3); + delete(s, length(s) - 4, 100); + result := s; + end; + end; + + procedure ExtractParts(var p1, p2, p3: string); + begin + var m := Regex.Match(info, 'Для ввода (.*)-го элемента \((.*)\) использована переменная (.*).'); + if m.Success then + begin + p1 := m.Groups[1].Value; + p2 := TypeNamePT(m.Groups[2].Value); + p3 := TypeNamePT(m.Groups[3].Value); + exit; + end; + m := Regex.Match(info, 'A variable (.*) is used for input of data item with the order number (.*) \((.*)\).'); + if m.Success then + begin + p1 := m.Groups[2].Value; + p2 := TypeNamePT(m.Groups[3].Value); + p3 := TypeNamePT(m.Groups[1].Value); + exit; + end; + + m := Regex.Match(info, 'Для вывода (.*)-го элемента \((.*)\) использовано выражение (.*).'); + if m.Success then + begin + p1 := m.Groups[1].Value; + p2 := TypeNamePT(m.Groups[2].Value); + p3 := TypeNamePT(m.Groups[3].Value); + exit; + end; + m := Regex.Match(info, 'An expression (.*) is used for output of data item with the order number (.*) \((.*)\).'); + if m.Success then + begin + p1 := m.Groups[2].Value; + p2 := TypeNamePT(m.Groups[3].Value); + p3 := TypeNamePT(m.Groups[1].Value); + exit; + end; + + m := Regex.Match(info, 'Количество выведенных данных: (.*) \(из (.*)\).'); + if m.Success then + begin + p1 := m.Groups[1].Value; + p2 := m.Groups[2].Value; + p3 := ''; + exit; + end; + m := Regex.Match(info, 'The program has output (.*) data item\(s\) \(the amount of the required items is (.*)\).'); + if m.Success then + begin + p1 := m.Groups[1].Value; + p2 := m.Groups[2].Value; + p3 := ''; + exit; + end; + + m := Regex.Match(info, 'Количество прочитанных данных: (.*) \(из (.*)\).'); + if m.Success then + begin + p1 := m.Groups[1].Value; + p2 := m.Groups[2].Value; + p3 := ''; + exit; + end; + m := Regex.Match(info, 'The program has used (.*) input data item\(s\) \(the amount of the required items is (.*)\).'); + if m.Success then + begin + p1 := m.Groups[1].Value; + p2 := m.Groups[2].Value; + p3 := ''; + exit; + end; + end; + +begin + // Если мы сюда зашли, то TaskResult уже под контролем. Но она и так должна быть TaskStatus.InitialTaskPT4 + TaskResult := TaskStatus.InitialTaskPT4; + TaskResultInfo := 'PT4'; + var p1, p2, p3: string; + if info = '' then + exit; + if HasSubstr('Задание выполнено', 'The task is solved') then + //ColoredMessage('Задание выполнено', MsgColorGreen) + TaskResult := TaskStatus.Solved + else if HasSubstr('Ошибочное решение', 'Wrong solution') then + //ColoredMessage('Неверное решение') + TaskResult := TaskStatus.BadSolution + else if HasSubstr('Неверно указан тип при выводе результатов', 'Invalid type is used for an output data item') then + begin + ExtractParts(p1, p2, p3); + TaskResult := TaskStatus.IOError; + TaskResultInfo := $'OutputType({p1},{p2},{p3})'; + //ColoredMessage($'Ошибка вывода. При выводе {p1}-го элемента типа {p2} выведено значение типа {p3}'); + end + else if HasSubstr('Выведены не все результирующие данные', 'Some data are not output') then + begin + ExtractParts(p1, p2, p3); + TaskResult := TaskStatus.IOError; + TaskResultInfo := $'OutputCount({p1},{p2})'; + //ColoredMessage($'Выведено {p1}, а требуется вывести {p2}', MsgColorOrange); + end + else if HasSubstr('Неверно указан тип при вводе исходных данных', 'Invalid type is used for an input data item') then + begin + ExtractParts(p1, p2, p3); + TaskResult := TaskStatus.IOError; + TaskResultInfo := $'InputType({p1},{p2},{p3})'; + //ColoredMessage($'Ошибка ввода. При вводе {p1}-го элемента типа {p2} использована переменная типа {p3}'); + end + else if HasSubstr('Введены не все требуемые исходные данные', 'Some required data are not input.') then + begin + ExtractParts(p1, p2, p3); + TaskResult := TaskStatus.IOError; + TaskResultInfo := $'InputCount({p1},{p2})'; + //ColoredMessage($'Введено {p1}, а требуется ввести {p2}', MsgColorOrange); + end + else if HasSubstr('Запуск с правильным вводом данных', 'Correct data input') then + begin + TaskResult := TaskStatus.PartialSolution; + //ColoredMessage('Запуск с правильным вводом данных', MsgColorGray) + end; + {else + ColoredMessage('PT4: '+info.Replace(#13#10, ' ').TrimStart().TrimEnd('.',' '));} +end; + +function ConvertTaskName(tn: string): string; +begin + var TName := tn; + // Если есть номер с подчеркиванием в начале, то отбросить его + var ind := TName.IndexOf('_'); + if (ind >= 0) and TName[1].IsDigit then // Значит, в начале - номер, он служит лишь для упорядочения файлов + TName := TName.Remove(0,ind + 1); + if TName.ToLower in TaskNamesMap then + TName := TaskNamesMap[TName.ToLower]; + Result := TName; +end; + +procedure ClearLists; +begin + CurPosInInputList := 0; + CurPosInInputListInTestMode := 0; + OutputString.Clear; + OutputList.Clear; + InputList.Clear; + InitialOutputList.Clear; + InitialInputList.Clear; +end; + +function InitSolveProcPair: (System.Reflection.MethodInfo, System.Reflection.MethodInfo); +begin + // Взял из PT.pas + var asm := System.Reflection.Assembly.GetExecutingAssembly; + var nm := asm.FullName; + Delete(nm, Pos(',', nm), length(nm)); + var prg := asm.GetType(nm+'.Program'); + var solveproc := prg.GetMethod('$Main'); + var initproc := prg.GetMethod('$_InitVariables_'); + if (solveproc = nil) or (initproc = nil) then + foreach var prg0 in asm.GetTypes() do + begin + prg := prg0; + solveproc := prg0.GetMethod('$Main'); + initproc := prg0.GetMethod('$_InitVariables_'); + if (solveproc <> nil) and (initproc <> nil) then + break; + end; + Result := (InitProc,SolveProc); +end; + +procedure CheckMyPT; +begin + if CheckTask = nil then + exit; + var TName := TaskName; + try + TName := ConvertTaskName(TaskName); + TestMode := tmNone; + TestNumber := 0; + CheckTask(TName); // может выдавать сообщения, предваряющие неверное решение, в CheckOutput. + if {not IsPT and not IsRobot and not IsDrawMan and} (TestCount > 0) then // То это LightPT - т.к. только в LightPT TestCount м.б. > 0 + begin + var (InitProc,SolveProc) := InitSolveProcPair; + + if (GenerateTestData <> nil) and (TaskResult = Solved) then + for var i:=1 to TestCount do + begin + TestNumber := i; + ClearLists; + TestMode := tmGenTest; + GenerateTestData(i); + + if TestMode<>tmAutoTest then + TestMode := tmTest; + try + if InitProc<>nil then + InitProc.Invoke(nil,nil); + SolveProc.Invoke(nil,nil); + except + on e: System.Reflection.TargetInvocationException do + raise e.InnerException; + end; + //InputList := InputList; + //OutputList := OutputList; + + CheckTask(TName); + if TaskResult = BadSolution then + break; // хоть один тест неудачный - выходим! + // Подумать над выводом ошибки при тестах + end; + end; + Silent := False; + // Если это задача из задачника, то результат будет NotUnderControl. И дальше необходимо это преобразовывать + case TaskResult of + Solved: ColoredMessage('Задание выполнено', MsgColorGreen); + BadSolution: begin + ColoredMessage('Неверное решение'); + end; + InitialTask: ; + BadInitialTask: ColoredMessage('Вы удалили часть кода - восстановите его!', MsgColorMagenta); + end; + except + // При тестировании тут вряд ли будут ошибки. Но могут + on e: OutputTypeException do + begin + Silent := False; + ColoredMessage($'Ошибка вывода. При выводе {e.n}-го элемента типа {e.ExpectedType} выведено значение типа {e.ActualType}'); + end; + on e: OutputCountException do + begin + Silent := False; + if e.Count = 0 then + ColoredMessage($'Требуется вывести {NValues(e.n)}', MsgColorGray) + else ColoredMessage($'Выведено {NValues(e.Count)}, а требуется вывести {e.n}', MsgColorOrange); + end; + on e: OutputCount2Exception do + begin + Silent := False; + if e.Count = 0 then + ColoredMessage($'Требуется вывести по крайней мере {NValues(e.i)}', MsgColorGray) + else ColoredMessage($'Выведено {NValues(e.Count)}, а требуется вывести по крайней мере {e.i}', MsgColorOrange); + end; + on e: InputTypeException do + begin + Silent := False; + ColoredMessage($'Ошибка ввода. При вводе {e.n}-го элемента типа {e.ExpectedType} использована переменная типа {e.ActualType}'); + end; + on e: InputCountException do + begin + Silent := False; + if e.Count = 0 then + ColoredMessage($'Требуется ввести {NValues(e.n)}', MsgColorGray) + else if e.n <> 0 then + ColoredMessage($'Введено {NValues(e.Count)}, а требуется ввести {e.n}', MsgColorOrange) + else ColoredMessage($'Введено {NValues(e.Count)}, хотя ничего вводить не требуется', MsgColorOrange); + end; + on e: InputCount2Exception do + begin + Silent := False; + if e.Count = 0 then + ColoredMessage($'Требуется ввести по крайней мере {NValues(e.i)}', MsgColorGray) + else ColoredMessage($'Введено {NValues(e.Count)}, а требуется ввести по крайней мере {e.i}', MsgColorOrange); + end; + on e: NotInTestModeException do + begin + Silent := False; + ColoredMessage($'Метод {e.FuncName} может вызываться только в режиме тестирования вне GenerateTestData! Он - внутренний и не предназначен для вызова разработчиком теста!', MsgColorOrange); + end; + on e: NotInTestGenModeException do + begin + Silent := False; + ColoredMessage($'Метод {e.FuncName} может вызываться только в режиме генерации тестов (в GenerateTestData)!', MsgColorOrange); + end; + on e: InputCountTest2Exception do + begin + Silent := False; + ColoredMessage($'Неверно составлен тест! Введено {NValues(e.Count)}, а требуется ввести по крайней мере {e.i}. Возможно, неверно заполнен InputList в GenerateTestData', MsgColorOrange); + end; + on e: InputTypeTestException do + begin + Silent := False; + ColoredMessage($'Неверно составлен тест! При вводе {e.n}-го элемента типа {e.ExpectedType} использована переменная типа {e.ActualType}. Возможно, неверно заполнен InputList в GenerateTestData'); + end; + on e: InputTestCountMismatchException do + begin + Silent := False; + ColoredMessage($'Неверно составлен тест! Несоответствие количества входных данных в тесте и основном запуске. Возможно, неверно заполнен InputList в GenerateTestData'); + end; + on e: InputTestTypesMismatchException do + begin + Silent := False; + ColoredMessage($'Неверно составлен тест! Несоответствие типов входных данных в тесте и основном запуске. Возможно, неверно заполнен InputList в GenerateTestData'); + end; + end; + // Для задачника надо вызывать процедуру __FinalizeModule__ из модуля PT4 jnhf;tybtv, а в модуле PT4 эту процедуру тогда не вызывть + // Для задачника в CheckTaskPT надо сказать, что проверяется задача из задачника. И выводить на экран ничего не надо - только в базу. + TaskResultInfo := TaskException.Info; + + var TaskPlatform := 'LT'; + + // Теперь тщательно проверяем задачник и исполнителей + if IsPT then + begin + PT4CheckSolution; + TName := TaskName; + var info := GetSolutionInfoPT4; + CalcPT4Result(info,TaskResult,TaskResultInfo); + TaskPlatform := 'PT'; + end + else if IsRobot then + begin + RobotCheckSolution; + TName := TaskName; + TaskPlatform := 'RB'; + end + else if IsDrawman then + begin + DrawmanCheckSolution; + TName := TaskName; + TaskPlatform := 'DM'; + end; + // Хотелось бы писать в БД для Робота и др. имя задания в Task + if WriteInfoCallBack<>nil then + WriteInfoCallBack(LessonName,TName,TaskPlatform,TaskResult,TaskResultInfo); +end; + +procedure LoadLightPTInfo; +begin + try + var lines := ReadAllLines(lightptname); + foreach var line in lines do + begin + if line.Trim = '' then + continue; + if LessonName = '' then + LessonName := line.ToWords.First // первое слово + else begin + var (name1,name2) := Regex.Split(line,'->'); + TaskNamesMap[name1.Trim.ToLower] := name2.Trim; + end; + end; + if LessonName = '' then + begin + // Имя текущей папки. Плохо - в lightpt забыли написать имя урока + //var ttt := ExtractFileDir(System.Environment.GetCommandLineArgs[0]); + var ttt := ExpandFileName('.'); + var LastDir := ttt.ToWords(System.IO.Path.DirectorySeparatorChar).LastOrDefault; + // Каталог может содержать пробелы. Брать первое слово + if LastDir<>nil then + LessonName := LastDir.ToWords.First; + end; + except + + end; +end; + +{=========================================================} +{ Процедуры для записи в базы данных } +{=========================================================} + +procedure WriteInfoToRemoteDatabase(auth: string; LessonName, TaskName, TaskPlatform, TaskResult, text, AdditionalInfo: string); +begin + // Считать логин пароль из auth + var data := System.IO.File.ReadAllBytes(auth); + var arr := Decrypt(data).Split(#10); + var login,pass: string; + if arr.Length >= 2 then + begin + login := arr[0]; + pass := arr[1]; + // Теперь как-то записать в БД информацию + var User := new ServerAccessProvider(ServerAddr); + var t2 := User.SendPostRequest(login, pass, LessonName, TaskName, TaskPlatform, TaskResult, text, AdditionalInfo); + var v := t2.Result; + v := v; + if v <> 'Success' then + ColoredMessage('Ошибка сервера: '+v, MsgColorGray); + //Console.WriteLine(v); + end; +end; + +procedure WriteInfoToDatabases(LessonName,TaskName,TaskPlatform: string; TaskResult: TaskStatus; AdditionalInfo: string := ''); +begin + try + System.IO.File.AppendAllText('db.txt', $'{LessonName} {TaskName} {dateTime.Now.ToString(''u'')} {TaskResult.ToString} {AdditionalInfo}' + #10); + except + on e: Exception do + ColoredMessage('Ошибка записи в файл db.txt. Обратитесь к преподавателю',MsgColorGray); + end; + // Разделили ошибки записи в локальную и глобальную базу + try + var auth := FindAuthDat(); // файл авторизации ищется либо в текущей папке либо в папке на уровень выше + var args := System.Environment.GetCommandLineArgs; + if (auth <> '') and (args.Length >= 3) and (args[2].ToLower = 'true') then + begin + var text := ''; + if (TaskResult <> InitialTask) and (args.Length >= 4) then + text := args[3]; + // Есть проблема паузы при плохой сети + WriteInfoToRemoteDatabase(auth,LessonName,TaskName,TaskPlatform,TaskResult.ToString, text, AdditionalInfo); + end + except + on e: System.AggregateException do + begin + foreach var x in e.InnerExceptions do + if x is HTTPRequestException then + ColoredMessage(x.InnerException?.Message??'',MsgColorGray) + else ColoredMessage(x.Message,MsgColorGray); + end; + on e: Exception do + ColoredMessage(e.Message,MsgColorGray); + end; +end; + +{===========================================================} +{ Переопределенные подсистемы ввода и вывода } +{===========================================================} +type + IOLightSystem = class(__ReadSignalOISystem) + public + procedure write(obj: object); override; + begin + if TestMode = tmNone then + inherited write(obj); + OutputString += _ObjectToString(obj); + OutputList += obj; + CreateNewLineBeforeMessage := True; + end; + + procedure writeln; override; + begin + if TestMode = tmNone then + inherited writeln; + OutputString += NewLine; + CreateNewLineBeforeMessage := False; + end; + + function ReadLine: string; override; + begin + if TestMode = tmTest then + Result := InputList.ReadTestDataString + else Result := inherited ReadLine; + + if not NeedAddDataToInputList then exit; + + InputList.Add(Result); + CreateNewLineBeforeMessage := False; + end; + + procedure readln; override; + begin + if TestMode = tmTest then + + else inherited readln; + CreateNewLineBeforeMessage := False; + end; + + procedure read(var x: integer); override; + begin + if TestMode = tmTest then + x := InputList.ReadTestDataInt + else inherited Read(x); + + if not NeedAddDataToInputList then exit; + + InputList.Add(x); + CreateNewLineBeforeMessage := True; + end; + + procedure read(var x: real); override; + begin + if TestMode = tmTest then + x := InputList.ReadTestDataReal + else inherited Read(x); + + if not NeedAddDataToInputList then exit; + + InputList.Add(x); + CreateNewLineBeforeMessage := True; + end; + + procedure read(var x: char); override; + begin + if TestMode = tmTest then + x := InputList.ReadTestDataChar + else inherited Read(x); + + if not NeedAddDataToInputList then exit; + + InputList.Add(x); + CreateNewLineBeforeMessage := True; + end; + + procedure read(var x: string); override; + begin + if TestMode = tmTest then + x := InputList.ReadTestDataString + else inherited Read(x); + + if not NeedAddDataToInputList then exit; + + InputList.Add(x); + CreateNewLineBeforeMessage := True; + end; + + procedure read(var x: byte); override; + begin + if TestMode = tmTest then + x := InputList.ReadTestDataInt + else inherited Read(x); + + if not NeedAddDataToInputList then exit; + + InputList.Add(x); + CreateNewLineBeforeMessage := True; + end; + + procedure read(var x: shortint); override; + begin + if TestMode = tmTest then + x := InputList.ReadTestDataInt + else inherited Read(x); + + if not NeedAddDataToInputList then exit; + + InputList.Add(x); + CreateNewLineBeforeMessage := True; + end; + + procedure read(var x: smallint); override; + begin + if TestMode = tmTest then + x := InputList.ReadTestDataInt + else inherited Read(x); + + if not NeedAddDataToInputList then exit; + + InputList.Add(x); + CreateNewLineBeforeMessage := True; + end; + + procedure read(var x: word); override; + begin + if TestMode = tmTest then + x := InputList.ReadTestDataInt + else inherited Read(x); + + if not NeedAddDataToInputList then exit; + + InputList.Add(x); + CreateNewLineBeforeMessage := True; + end; + + procedure read(var x: longword); override; + begin + if TestMode = tmTest then + x := InputList.ReadTestDataInt + else inherited Read(x); + + if not NeedAddDataToInputList then exit; + + InputList.Add(x); + CreateNewLineBeforeMessage := True; + end; + + procedure read(var x: int64); override; + begin + if TestMode = tmTest then + x := InputList.ReadTestDataInt + else inherited Read(x); + + if not NeedAddDataToInputList then exit; + + InputList.Add(x); + CreateNewLineBeforeMessage := True; + end; + + procedure read(var x: uint64); override; + begin + if TestMode = tmTest then + x := InputList.ReadTestDataInt + else inherited Read(x); + + if not NeedAddDataToInputList then exit; + + InputList.Add(x); + CreateNewLineBeforeMessage := True; + end; + + procedure read(var x: single); override; + begin + if TestMode = tmTest then + x := InputList.ReadTestDataReal + else inherited Read(x); + + if not NeedAddDataToInputList then exit; + + InputList.Add(x); + CreateNewLineBeforeMessage := True; + end; + + procedure read(var x: boolean); override; + begin + if TestMode = tmTest then + x := InputList.ReadTestDataBoolean + else inherited Read(x); + + if not NeedAddDataToInputList then exit; + + InputList.Add(x); + CreateNewLineBeforeMessage := True; + end; + + procedure read(var x: BigInteger); override; + begin + inherited Read(x); + InputList.Add(x); + CreateNewLineBeforeMessage := True; + end; + end; + +initialization + // Если LightPT добавляется в конец uses, то ее секция инициализации вызывается первой + // В этом случае ввод-вывод обязательно переключается, но потом он перекрывается и в основной программе не срабатывает + // Но в CheckPT используется ColoredMessage, которая выводит с помощью Console.WriteLine - ей всё равно + var tn := TypeName(CurrentIOSystem); + if (tn = 'IOStandardSystem') or (tn = '__ReadSignalOISystem') or (tn = 'IOGraphABCSystem') then + CurrentIOSystem := new IOLightSystem; + WriteInfoCallBack := WriteInfoToDatabases; + // Расшифровка LightPT.dat + LoadLightPTInfo; +finalization + CheckMyPT +end. \ No newline at end of file diff --git a/TestSuite/CompilationSamples/NUnitABC.pas b/TestSuite/CompilationSamples/NUnitABC.pas new file mode 100644 index 000000000..62db4591b --- /dev/null +++ b/TestSuite/CompilationSamples/NUnitABC.pas @@ -0,0 +1,71 @@ +unit NUnitABC; + +{$reference nunit.framework.dll} +uses NUnit.Framework; + +procedure InitPABCSystem; +begin + __InitPABCSystem; + System.Console.OutputEncoding := Encoding.GetEncoding(866); +end; + +type + CombinatorialAttribute = NUnit.Framework.CombinatorialAttribute; + PairwiseAttribute = NUnit.Framework.PairwiseAttribute; + IgnoreAttribute = NUnit.Framework.IgnoreAttribute; + OrderAttribute = NUnit.Framework.OrderAttribute; + SetUpAttribute = NUnit.Framework.SetUpAttribute; + TearDownAttribute = NUnit.Framework.TearDownAttribute; + TestAttribute = NUnit.Framework.TestAttribute; + TestCaseAttribute = NUnit.Framework.TestCaseAttribute; + TimeoutAttribute = NUnit.Framework.TimeoutAttribute; + RandomAttribute = NUnit.Framework.RandomAttribute; + RangeAttribute = NUnit.Framework.RangeAttribute; + RepeatAttribute = NUnit.Framework.RepeatAttribute; + TestFixtureAttribute = NUnit.Framework.TestFixtureAttribute; + ValuesAttribute = NUnit.Framework.ValuesAttribute; + + Assert = NUnit.Framework.Assert; + Assume = NUnit.Framework.Assume; + Does = NUnit.Framework.Does; + Has = NUnit.Framework.Has; + &Is = NUnit.Framework.Is; + StringAssert = NUnit.Framework.StringAssert; + Warn = NUnit.Framework.Warn; + + AllOperator = NUnit.Framework.Constraints.AllOperator; + AndOperator = NUnit.Framework.Constraints.AndOperator; + BinaryOperator = NUnit.Framework.Constraints.BinaryOperator; + CollectionOperator = NUnit.Framework.Constraints.CollectionOperator; + Interval = NUnit.Framework.Constraints.Interval; + OrOperator = NUnit.Framework.Constraints.OrOperator; + WithOperator = NUnit.Framework.Constraints.WithOperator; + + Tolerance = NUnit.Framework.Constraints.Tolerance; + + Constraint = NUnit.Framework.Constraints.Constraint; + + AndConstraint = NUnit.Framework.Constraints.AndConstraint; + AnyOfConstraint = NUnit.Framework.Constraints.AnyOfConstraint; + BinaryConstraint = NUnit.Framework.Constraints.BinaryConstraint; + CollectionConstraint = NUnit.Framework.Constraints.CollectionConstraint; + EndsWithConstraint = NUnit.Framework.Constraints.EndsWithConstraint; + EqualConstraint = NUnit.Framework.Constraints.EqualConstraint; + FalseConstraint = NUnit.Framework.Constraints.FalseConstraint; + GreaterThanConstraint = NUnit.Framework.Constraints.GreaterThanConstraint; + GreaterThanOrEqualConstraint = NUnit.Framework.Constraints.GreaterThanOrEqualConstraint; + LessThanConstraint = NUnit.Framework.Constraints.LessThanConstraint; + LessThanOrEqualConstraint = NUnit.Framework.Constraints.LessThanOrEqualConstraint; + NotConstraint = NUnit.Framework.Constraints.NotConstraint; + OrConstraint = NUnit.Framework.Constraints.OrConstraint; + RangeConstraint = NUnit.Framework.Constraints.RangeConstraint; + StartsWithConstraint = NUnit.Framework.Constraints.StartsWithConstraint; + StringConstraint = NUnit.Framework.Constraints.StringConstraint; + SubStringConstraint = NUnit.Framework.Constraints.SubStringConstraint; + TrueConstraint = NUnit.Framework.Constraints.TrueConstraint; + + AssertionException = NUnit.Framework.AssertionException; + +begin + +end. \ No newline at end of file diff --git a/TestSuite/CompilationSamples/PT4Databases.pas b/TestSuite/CompilationSamples/PT4Databases.pas new file mode 100644 index 000000000..dbe3f8767 --- /dev/null +++ b/TestSuite/CompilationSamples/PT4Databases.pas @@ -0,0 +1,509 @@ +unit PT4Databases; +//uses PrintAttributeUnit; + +function PrintAttributeString(a: object): string; forward; +function PrintAttributeString(a: object; fProvider: System.IFormatProvider): string; forward; + +type + Country = auto class + private + _name, _capital: string; + _population: integer; + _continent: string; + public + [PrintAttribute(0, -32)] + property Name: string read _name; + [PrintAttribute(' ', 1, -19)] + property Capital: string read _capital; + [PrintAttribute(3, 13, 'd')] + property Population: integer read _population; + [PrintAttribute(' ', 2, -9)] + property Continent: string read _continent; + end; + + Страна = auto class + private + _name, _capital: string; + _population: integer; + _continent: string; + public + [PrintAttribute(0, -32)] + property Название: string read _name; + [PrintAttribute(' ', 1, -19)] + property Столица: string read _capital; + [PrintAttribute(3, 13, 'd')] + property Население: integer read _population; + [PrintAttribute(' ', 2, -9)] + property Континент: string read _continent; + end; + + + ТипПола = (Муж, Жен); + + Pupil = auto class + private + _name: string; + _gender: ТипПола; + _height: integer; + _cls: integer; + _inSunSchool: boolean; + function getGender: ТипПола := _gender; + public + [PrintAttribute(0, -16)] + property Name: string read _name; + [PrintAttribute(' ', 1, -3)] + property Gender: ТипПола read getGender; + [PrintAttribute(' ', 2, 3, 'd')] + property Height: integer read _height; + [PrintAttribute(' ',3, 2, 'd')] + property Cls: integer read _cls; + [PrintAttribute(' ', 4, -5)] + property InSunSchool: boolean read _inSunSchool; + end; + + Ученик = auto class + private + _name: string; + _gender: ТипПола; + _height: integer; + _cls: integer; + _inSunSchool: boolean; + function getGender: ТипПола := _gender; + public + [PrintAttribute(0, -16)] + property Фамилия: string read _name; + [PrintAttribute(' ', 1, -3)] + property Пол: ТипПола read getGender; + [PrintAttribute(' ', 2, 3, 'd')] + property Рост: integer read _height; + [PrintAttribute(' ',3, 2, 'd')] + property Класс: integer read _cls; + [PrintAttribute(' ', 4, -5)] + property УчитсяВКШ: boolean read _inSunSchool; + end; + +function GenderToТипПола(a: string): ТипПола := a = 'Муж' ? Муж : Жен; +function InSunSchoolToBoolean(a: string): boolean := a = 'Да'; + +type + Fitness = auto class + private + _code, _year, _month, _time: integer; + public +// [PrintAttribute('( Code = ', 0, 2)] +// property Код: integer read _code; + [PrintAttribute('( Code = ', 0, 2)] + property Code: integer read _code; +// [PrintAttribute(' , Year = ', 1, 4)] +// property Год: integer read _year; + [PrintAttribute(' , Year = ', 1, 4)] + property Year: integer read _year; +// [PrintAttribute(' , Month = ', 2, 2)] +// property Месяц: integer read _month; + [PrintAttribute(' , Month = ', 2, 2)] + property Month: integer read _month; +// [PrintAttribute(' , Time = ', 3, 2)] +// property Время: integer read _time; + [PrintAttribute(' , Time = ', 3, 2)] + property Time: integer read _time; + function ToString: string; override; + begin + result := PrintAttributeString(self); + end; + end; + + Abitur = auto class + private + _name: string; + _year: integer; + _school: integer; + public +// [PrintAttribute('( Name = ', 0, -11)] +// property Фамилия: string read _name; + [PrintAttribute('( Name = ', 0, -11)] + property Name: string read _name; +// [PrintAttribute(', Year = ', 1, 4)] +// property Год: integer read _year; + [PrintAttribute(', Year = ', 1, 4)] + property Year: integer read _year; +// [PrintAttribute(' , School = ', 2, 2)] +// property Школа: integer read _school; + [PrintAttribute(' , School = ', 2, 2)] + property School: integer read _school; + function ToString: string; override; + begin + result := PrintAttributeString(self); + end; + end; + + Debtor = auto class + private + _name: string; + _flat: integer; + _debt: real; + public +// [PrintAttribute('( Name = ', 0, -11)] +// property Фамилия: string read _name; + [PrintAttribute('( Name = ', 0, -11)] + property Name: string read _name; +// [PrintAttribute(', Flat = ', 1, 3)] +// property Квартира: integer read _flat; + [PrintAttribute(', Flat = ', 1, 3)] + property Flat: integer read _flat; +// [PrintAttribute(' , Debt = ', 2, 7, 'f2')] +// property Долг: real read _debt; + [PrintAttribute(' , Debt = ', 2, 7, 'f2')] + property Debt: real read _debt; +// [PrintAttribute(' , Entrance = ', 3, 1)] +// property Подъезд: integer read (_flat - 1) div 36 + 1; + [PrintAttribute(' , Entrance = ', 3, 1)] + property Entrance: integer read (_flat - 1) div 36 + 1; +// [PrintAttribute(' , Floor = ', 4, 1)] +// property Этаж: integer read (_flat - 1) mod 36 div 4 + 1; + [PrintAttribute(' , Floor = ', 4, 1)] + property Floor: integer read (_flat - 1) mod 36 div 4 + 1; + function ToString: string; override; + begin + result := PrintAttributeString(self); + end; + end; + +FuelStation = auto class + private + _brand, _price: integer; + _company, _street: string; + public +// [PrintAttribute('( Brand = ', 0, 2)] +// property Марка: integer read _brand; + [PrintAttribute('( Brand = ', 0, 2)] + property Brand: integer read _brand; +// [PrintAttribute(', Price = ', 1, 4)] +// property Цена: integer read _price; + [PrintAttribute(', Price = ', 1, 4)] + property Price: integer read _price; +// [PrintAttribute(', Company = ', 2, -12)] +// property Компания: string read _company; + [PrintAttribute(', Company = ', 2, -12)] + property Company: string read _company; +// [PrintAttribute(', Street = ', 3, -15)] +// property Улица: string read _street; + [PrintAttribute(', Street = ', 3, -15)] + property Street: string read _street; + function ToString: string; override; + begin + result := PrintAttributeString(self); + end; + end; + +PupilExam = auto class + private + _name: string; + _school, _point0, _point1, _point2: integer; +// [PrintAttribute(' , Point : ', 2, 3)] +// property Балл0: integer read _point0; + [PrintAttribute(' , Point : ', 2, 3)] + property Point0: integer read _point0; +// [PrintAttribute(' , ', 3, 3)] +// property Балл1: integer read _point1; + [PrintAttribute(' , ', 3, 3)] + property Point1: integer read _point1; +// [PrintAttribute(' , ', 4, 3)] +// property Балл2: integer read _point2; + [PrintAttribute(' , ', 4, 3)] + property Point2: integer read _point2; + public +// [PrintAttribute('( Name = ', 0, -16)] +// property ФИО: string read _name; + [PrintAttribute('( Name = ', 0, -16)] + property Name: string read _name; +// [PrintAttribute(', School = ', 1, 2)] +// property Школа: integer read _school; + [PrintAttribute(', School = ', 1, 2)] + property School: integer read _school; +// property Балл: array of integer read Arr(_point0, _point1, _point2); + property Point: array of integer read Arr(_point0, _point1, _point2); + function ToString: string; override; + begin + result := PrintAttributeString(self); + end; + end; + +PupilMark = auto class + private + _name: string; + _cls: integer; + _subject: string; + _mark: integer; + public +// [PrintAttribute('( Name = ', 0, -16)] +// property ФИО: string read _name; + [PrintAttribute('( Name = ', 0, -16)] + property Name: string read _name; +// [PrintAttribute(', Cls = ', 1, 2)] +// property Класс: integer read _cls; + [PrintAttribute(', Cls = ', 1, 2)] + property Cls: integer read _cls; +// [PrintAttribute(' , Subject = ', 2, -11)] +// property Предмет: string read _subject; + [PrintAttribute(' , Subject = ', 2, -11)] + property Subject: string read _subject; +// [PrintAttribute(' , Mark = ', 3, 1)] +// property Оценка: integer read _mark; + [PrintAttribute(' , Mark = ', 3, 1)] + property Mark: integer read _mark; + function ToString: string; override; + begin + result := PrintAttributeString(self); + end; + end; + +function ЗаполнитьМассивСтран: array of Страна; +begin + var fname := 'c:\Program files (x86)\PascalABC.NET\Files\Databases\Страны.csv'; + if fname = '' then + raise new System.ApplicationException('Не найден массив стран Databases\Страны.csv'); + Result := ReadLines(fname) + .Select(s->s.ToWords(';')) + .Select(w->new Страна(w[0],w[1],w[2].ToInteger,w[3])).ToArray; +end; + +function GetCountries: array of Country; +begin + var fname := 'c:\Program files (x86)\PascalABC.NET\Files\Databases\Страны.csv'; + if fname = '' then + raise new System.ApplicationException('Не найден массив стран Databases\Страны.csv'); + Result := ReadLines(fname) + .Select(s->s.ToWords(';')) + .Select(w->new Country(w[0],w[1],w[2].ToInteger,w[3])).ToArray; +end; + +function ЗаполнитьМассивУчеников: array of Ученик; +begin + var fname := 'c:\Program files (x86)\PascalABC.NET\Files\Databases\Ученики.csv'; + if fname = '' then + raise new System.ApplicationException('Не найден массив учеников Databases\Ученики.csv'); + Result := ReadLines(fname) + .Select(s->s.ToWords(';')) + .Select(w->new Ученик(w[0],GenderToТипПола(w[2]),w[4].ToInteger,w[1].ToInteger, + InSunschoolToBoolean(w[3]))).ToArray; +end; + +function GetPupils: array of Pupil; +begin + var fname := 'c:\Program files (x86)\PascalABC.NET\Files\Databases\Ученики.csv'; + if fname = '' then + raise new System.ApplicationException('Не найден массив учеников Databases\Ученики.csv'); + Result := ReadLines(fname) + .Select(s->s.ToWords(';')) + .Select(w->new Pupil(w[0],GenderToТипПола(w[2]),w[4].ToInteger,w[1].ToInteger, + InSunschoolToBoolean(w[3]))).ToArray; +end; + +function GetFitness: array of Fitness; +begin + var fname := 'Fitness.tst'; + if not FileExists(fname) then + begin + fname := 'Fitness.txt'; + if not FileExists(fname) then + raise new System.IO.FileNotFoundException('Не найден файл-источник для массива объектов Fitness'); + end; + try + Result := ReadLines(fname) + .Select(s->s.ToWords(',')) + .Select(w->new Fitness(w[0].ToInteger,w[1].ToInteger,w[2].ToInteger,w[3].ToInteger)).ToArray; + except + raise new System.FormatException('Файл-источник для массива объектов Fitness содержит неверные данные'); + end; +end; + +function GetAbiturs: array of Abitur; +begin + var fname := 'Abitur.tst'; + if not FileExists(fname) then + begin + fname := 'Abitur.txt'; + if not FileExists(fname) then + raise new System.IO.FileNotFoundException('Не найден файл-источник для массива объектов Abitur'); + end; + try + Result := ReadLines(fname) + .Select(s->s.ToWords(',')) + .Select(w->new Abitur(w[0],w[1].ToInteger,w[2].ToInteger)).ToArray; + except + raise new System.FormatException('Файл-источник для массива объектов Abitur содержит неверные данные'); + end; +end; + +function GetDebtors: array of Debtor; +begin + var fname := 'Debtor.tst'; + if not FileExists(fname) then + begin + fname := 'Debtor.txt'; + if not FileExists(fname) then + raise new System.IO.FileNotFoundException('Не найден файл-источник для массива объектов Debtor'); + end; + try + Result := ReadLines(fname) + .Select(s->s.ToWords(',')) + .Select(w->new Debtor(w[0],w[1].ToInteger,w[2].ToReal)).ToArray; + except + raise new System.FormatException('Файл-источник для массива объектов Debtor содержит неверные данные'); + end; +end; + +function GetFuelStations: array of FuelStation; +begin + var fname := 'FuelStation.tst'; + if not FileExists(fname) then + begin + fname := 'FuelStation.txt'; + if not FileExists(fname) then + raise new System.IO.FileNotFoundException('Не найден файл-источник для массива объектов FuelStation'); + end; + try + Result := ReadLines(fname) + .Select(s->s.ToWords(',')) + .Select(w->new FuelStation(w[0].ToInteger,w[1].ToInteger,w[2],w[3])).ToArray; + except + raise new System.FormatException('Файл-источник для массива объектов FuelStation содержит неверные данные'); + end; +end; + +function GetPupilExams: array of PupilExam; +begin + var fname := 'PupilExam.tst'; + if not FileExists(fname) then + begin + fname := 'PupilExam.txt'; + if not FileExists(fname) then + raise new System.IO.FileNotFoundException('Не найден файл-источник для массива объектов PupilExam'); + end; + try + Result := ReadLines(fname) + .Select(s->s.ToWords(',')) + .Select(w->new PupilExam(w[0],w[1].ToInteger,w[2].ToInteger,w[3].ToInteger,w[4].ToInteger)).ToArray; + except + raise new System.FormatException('Файл-источник для массива объектов PupilExam содержит неверные данные'); + end; +end; + +function GetPupilMarks: array of PupilMark; +begin + var fname := 'PupilMark.tst'; + if not FileExists(fname) then + begin + fname := 'PupilMark.txt'; + if not FileExists(fname) then + raise new System.IO.FileNotFoundException('Не найден файл-источник для массива объектов PupilMark'); + end; + try + Result := ReadLines(fname) + .Select(s->s.ToWords(',')) + .Select(w->new PupilMark(w[0],w[1].ToInteger,w[2],w[3].ToInteger)).ToArray; + except + raise new System.FormatException('Файл-источник для массива объектов PupilMark содержит неверные данные'); + end; +end; + +function PrintAttributeString(a: object; fProvider: System.IFormatProvider): string; +begin + var t := a.GetType(); + var res := new Dictionary(); + foreach var p in t.GetProperties(System.Reflection.BindingFlags.Public + or System.Reflection.BindingFlags.NonPublic or System.Reflection.BindingFlags.Instance) do + begin + var att := p.GetCustomAttribute(typeof(PrintAttribute), false) as PrintAttribute; + if att = nil then + continue; + var (c, n, w, f) := (att.Comment, att.Num, att.Width, att.Fmt); + var val := ''; + var o := p.GetValue(a, nil); + if (f <> '') and (o is System.IFormattable) then + begin + val := System.IFormattable(o).ToString(f, fProvider); + end + else + begin + val := o.ToString; + end; + if w > 0 then + val := val.PadLeft(w) + else if w < 0 then + val := val.PadRight(-w); + res[n] := c + val; + end; + result := nil; + if res.Keys.Count = 0 then + exit; + result := ''; + foreach var k in res.Keys.OrderBy(e -> e) do + begin + result += res[k]; + end; + var delim := Copy(result, 2, 1); + if result.StartsWith('{') then + result += (delim = ' ') ? ' }' : '}' + else if result.StartsWith('[') then + result += (delim = ' ') ? ' ]' : ']' + else if result.StartsWith('(') then + result += (delim = ' ') ? ' )' : ')' + else if result.StartsWith('''') then + result += (delim = ' ') ? ' ''' : '''' + else if result.StartsWith('"') then + result += (delim = ' ') ? ' "' : '"'; +end; + +function PrintAttributeString(a: object): string; +begin + result := PrintAttributeString(a, nil); +end; + +function ToStr(params a: array of object): string; +begin + result := ''; + var b := false; + foreach var e in a do + begin + if b then + result += ' ' + else + b := true; + if e is real then + result += real(e).ToString(2) + else if e is string then + result += e.ToString() + else if e.GetType.FullName.StartsWith('System.Tuple') then + begin + var b1 := false; + foreach var e1 in e.GetType.GetProperties do + begin + if b1 then + result += ' ' + else + b1 := true; + result += ToStr(Arr(e1.GetValue(e,nil))); + end; + end + else if e is System.Collections.IEnumerable then + begin + var b1 := false; + var e1 := (e as System.Collections.IEnumerable).GetEnumerator; + while e1.MoveNext do + begin + if b1 then + result += ' ' + else + b1 := true; + result += ToStr(Arr(e1.Current)); + end; + end + else + result += e.ToString(); + end; +end; + +begin + +end. \ No newline at end of file diff --git a/TestSuite/CompilationSamples/Speech.pas b/TestSuite/CompilationSamples/Speech.pas new file mode 100644 index 000000000..24067a128 --- /dev/null +++ b/TestSuite/CompilationSamples/Speech.pas @@ -0,0 +1,32 @@ +// Copyright (c) Ivan Bondarev, Stanislav Mikhalkovich (for details please see \doc\copyright.txt) +// This code is distributed under the GNU LGPL (for details please see \doc\license.txt) +{$reference System.Speech.dll} +unit Speech; + +interface + +procedure Speak(s: string); + +procedure SpeakAsync(s: string); + +implementation + +uses System.Speech.Synthesis; + +var ss: SpeechSynthesizer; + +procedure Speak(s: string); +begin + ss.Speak(s) +end; + +procedure SpeakAsync(s: string); +begin + ss.SpeakAsync(s) +end; + +begin + ss := new SpeechSynthesizer; + var voices := ss.GetInstalledVoices; + ss.SelectVoice(voices[0].VoiceInfo.Name) +end. \ No newline at end of file diff --git a/TestSuite/CompilationSamples/Tasks.pas b/TestSuite/CompilationSamples/Tasks.pas new file mode 100644 index 000000000..9fa381d27 --- /dev/null +++ b/TestSuite/CompilationSamples/Tasks.pas @@ -0,0 +1,15 @@ +// Базовый модуль-заглушка. Переопределяется в каталогах решаемых заданий +unit Tasks; + +uses LightPT; + +procedure CheckTaskT(name: string); +begin + TaskResult := NotUnderControl; + +end; + +initialization + CheckTask := CheckTaskT; +finalization +end. \ No newline at end of file diff --git a/TestSuite/CompilationSamples/Tasks1Arr.pas b/TestSuite/CompilationSamples/Tasks1Arr.pas new file mode 100644 index 000000000..5ec92597c --- /dev/null +++ b/TestSuite/CompilationSamples/Tasks1Arr.pas @@ -0,0 +1,258 @@ +unit Tasks1Arr; + +uses LightPT; + +var AllTaskNames: array of string; + +procedure CheckTaskT(name: string); +begin + FlattenOutput; + ClearOutputListFromSpaces; + case name of + 'Arr0': begin + ClearOutputListFromSpaces; + CheckData(Empty); + CheckOutputSeq(Arr(5,4,3,2,1,777,5,4,3,2,1,777)); + end; + 'Arr1': begin + ClearOutputListFromSpaces; + CheckData(Empty); + CheckOutputSeq(Arr(777,1,1,1,777)); + end; + 'Arr2': begin + var n := 5; + ClearOutputListFromSpaces; + CheckData(Input := |cInt|*n); + GenerateTests(10,tInt*n); + var il := IntArr(n); + CheckOutputSeq(il.Select(x->x+1)); + end; + 'Arr3': begin + var n := 5; + ClearOutputListFromSpaces; + CheckData(Input := |cInt|*n); + GenerateTests(10,tInt*n); + var il := IntArr(n); + CheckOutputSeq(il.Select(x->x*2)); + end; + 'Arr4': begin + var n := 10; + ClearOutputListFromSpaces; + CheckData(Input := |cInt|*n); + GenerateTests(10,tInt*n); + var il := IntArr(n); + CheckOutputSeq(il+il.Select(x->x*x)); + end; + 'Arr5': begin + var n := 10; + ClearOutputListFromSpaces; + CheckData(Input := |cInt|*n); + GenerateTests(10,tInt*n); + var il := IntArr(n); + CheckOutputSeq(il+il.Reverse); + end; + 'ArrErr1': begin + TaskResult := TaskStatus.ErrFix + end; + 'ArrErr2': begin + TaskResult := TaskStatus.ErrFix + end; + 'Arr1Sum': begin + var n := 10; + ClearOutputListFromSpaces; + CheckData(Input := |cInt|*n); + GenerateTests(10,tInt*n); + var il := InputListAsIntegers.Select(x->x*0.1); + CheckOutputSeq(il+il.Sum); + end; + 'Arr2Prod': begin + CancelMessagesIfInitial := False; + ClearOutputListFromSpaces; + var n := 8; + CheckData(|cRe|*n, |cRe|*n); + GenerateTests(10,tRe(1,10,1)*n); + var il := ReArr(n).Select(x->x); + CheckOutputAfterInitial(il.Product); + end; + 'Arr1_If': begin + CancelMessagesIfInitial := False; + ClearOutputListFromSpaces; + var n := 10; + CheckData(|cInt|*n, |cInt|*n); + GenerateTests(10,tInt*n); + var il := IntArr(n); + CheckOutputSeq(il+il.Where(x->x.IsEven)); + end; + 'Arr2_If': begin + CancelMessagesIfInitial := False; + ClearOutputListFromSpaces; + var n := 10; + CheckData(|cInt|*n, |cInt|*n); + GenerateTests(10,tInt*n); + var il := IntArr(n); + CheckOutputSeq(il+il.Where((x,i)->i.IsOdd)); + end; + 'Arr0_Count': begin + CancelMessagesIfInitial := False; + ClearOutputListFromSpaces; + var n := 10; + CheckData(|cInt|*n, |cInt|*n); + GenerateTests(10,tInt*n); + var il := IntArr(n); + CheckOutputSeq(il+il.Count(x->x.IsOdd)); + end; + 'Arr1_Sum': begin + ClearOutputListFromSpaces; + var n := InputList.Count; + GenerateTests(10,tInt*n); + var il := InputListAsIntegers.Where(x->x in 3..5).ToArray; + CheckOutputSeq(InputListAsIntegers+il+il.sum); + end; + 'Arr2_Count': begin + ClearOutputListFromSpaces; + var n := InputList.Count; + GenerateTests(10,tInt*n); + var il := InputListAsIntegers; + CheckOutputSeq(il+il.CountOf(2)+il.CountOf(3)+il.CountOf(4)+il.CountOf(5)); + end; + 'Arr1_MinMax': begin + ClearOutputListFromSpaces; + var n := InputList.Count; + GenerateTests(10,tInt*n); + var il := InputListAsIntegers; + CheckOutputSeq(il+il.Min); + end; + 'Arr2_MinMax': begin + ClearOutputListFromSpaces; + var n := InputList.Count; + GenerateTests(10,tInt*n); + var il := InputListAsIntegers; + CheckOutputSeq(il+il.Max); + end; + 'Arr3_MinMax': begin + ClearOutputListFromSpaces; + var n := InputList.Count; + GenerateTests(10,tInt*n); + var il := InputListAsIntegers; + CheckOutputSeq(il+il.IndexMin); + end; + 'ПоискВМассиве': begin + var n := 10; + CheckData(|cInt|*n, |cInt|*n); + GenerateTests(10,tInt*n); + var a := InputListAsIntegers; + CheckOutputAfterInitial(5 in a); + end; + 'ПоискВМассивеСтрок': begin + CheckData(InitialInput := |cStr|, InitialOutput := |cStr|*8); + GenerateTests('Козлов','Серов','Иванова','Петров','Умнова','Хулиганкин','Белова','Ослов'); + var s := Str(0); + var a := Arr('Козлов','Серов','Иванова','Петров','Умнова','Хулиганкин','Белова','Ослов'); + CheckOutputAfterInitial(s in a); + end; + 'Заполнение1': begin + CheckData(Empty); + CheckOutputSeq(Arr(0,1,4,9,16,25,36,49,64,81)); + end; + 'Заполнение2Арифм': begin + CheckData(Empty); + CheckOutputSeq(ArrGen(10,1,x->x+2)); + end; + 'Заполнение3Арифм': begin + CheckData(Empty); + CheckOutputSeq(ArrGen(10,1,x->x+2)); + end; + 'Заполнение4Арифм': begin + CheckData(Empty); + CheckOutputSeq(ArrGen(10,1.0,x->x+0.5)); + end; + 'Заполнение1Геом': begin + CheckData(Empty); + CheckOutputSeq(ArrGen(10,1,x->x*2)); + end; + 'ЗаполнениеЧисламиФибоначчи': begin + CheckData(Empty); + CheckOutputSeq(ArrGen(10,1,1,(x,y)->x+y)); + end; + 'СоседниеЭлементы1': begin + var n := 10; + CheckData(|cInt|*n, |cInt|*n); + GenerateTests(10,tInt*n); + var a := IntArr(n); + var ol := new ObjectList; + ol.AddRange(a.Pairwise.Where(\(x,y)->xt[1])); + CheckOutputAfterInitialSeq(ol); + end; + 'СоседниеЭлементы2': begin + var n := 10; + CheckData(|cInt|*n, |cInt|*n); + GenerateTests(10,tInt*n); + var a := InputListAsIntegers; + var ol := new ObjectList; + ol.AddRange(a); + ol.Add(a.Pairwise.Where(\(x,y)->x begin + var n := Random(5,10); + var a := ArrRandomInteger(n); + InputList.AddTestData(|n|+a); + end; + var a := IntArr(n); + var ares := a.Reverse.ToArray; + CheckOutputAfterInitialSeq(ares); + end; + 'СтрокаКакМассив1': begin + CancelMessagesIfInitial := False; + CheckData(InitialOutput := |cStr|*2); + CheckOutputSeq(Arr('бочка','ночка','дочка','кочка','почка','точка')); + end; + 'СтрокаКакМассив2': begin + CheckOutputSeq(Arr('миг','мир','пир','пар')); + end; + 'СтрокаКакМассив3': begin + CancelMessagesIfInitial := False; + var s := 'на паркете написана абракадабра'; + CheckData(InitialOutput := |cStr|*1); + + var ol := new ObjectList; + ol.Add(s); + ol.Add(s.CountOf('а')); + CheckOutputSeq(ol); + end; + 'СтрокаКакМассив4': begin + CheckOutput(True); + end; + 'СтрокаКакМассив5': begin + CheckOutputSeq(Arr('абракадабра','эбрэкэдэбрэ')); + end; + + + end; +end; + +initialization + CheckTask := CheckTaskT; + AllTaskNames := Arr('Arr0','Arr1','Arr2','Arr3','Arr4','Arr5', + 'ArrErr1','ArrErr2','Arr1Sum','Arr2Prod','Arr1_If','Arr2_If','Arr0_Count','Arr1_Sum','Arr2_Count', + 'Arr1_MinMax','Arr2_MinMax','Arr3_MinMax', + 'ПоискВМассиве','ПоискВМассивеСтрок', + 'Заполнение1','Заполнение2Арифм','Заполнение3Арифм','Заполнение4Арифм','Заполнение1Геом','ЗаполнениеЧисламиФибоначчи', + 'СоседниеЭлементы1','СоседниеЭлементы2', + 'ИнвертированиеМассива1','ИнвертированиеМассива2', + 'СтрокаКакМассив1','СтрокаКакМассив2','СтрокаКакМассив3','СтрокаКакМассив4','СтрокаКакМассив5' ); +finalization +end. \ No newline at end of file diff --git a/TestSuite/CompilationSamples/Tasks1Begin.pas b/TestSuite/CompilationSamples/Tasks1Begin.pas new file mode 100644 index 000000000..ddb5d95f1 --- /dev/null +++ b/TestSuite/CompilationSamples/Tasks1Begin.pas @@ -0,0 +1,235 @@ +unit Tasks1Begin; + +uses LightPT; + +var AllTaskNames: array of string; + +procedure CheckTaskT(name: string); +begin + ClearOutputListFromSpaces; + + case name of + 'Var_1': begin + CheckData(InitialOutput := |cInt|); + CheckOutput(3,32); + end; + 'Var_2': begin + CheckData(InitialOutput := |cInt|*2); + CheckOutput(3,4,20,45); + end; + 'Var_4': begin + CheckData(Input := Empty); + CheckOutput(25,3.14,100,0.75); + end; + 'Var_5': begin + TaskResult := Solved; + end; + 'Var_6': begin + CheckData(Input := Empty); + CompareTypeWithOutput(cStr,cStr,cStr,cStr,cInt,cInt); + end; + 'Calculations1': begin + CheckData(InitialOutput := |cInt|*3); + CheckOutput(35,65,35+65,35*65); + end; + 'Calculations2': begin + CheckData(InitialOutput := |cInt,cInt,cStr,cInt|); + CheckOutput(35,65,cStr,35+65,cStr,35*65); + end; + 'Calculations3': begin + CheckData(InitialOutput := |cStr,cInt,cInt,cInt|); + CheckOutput(cStr,3,4,5,cStr,3+4+5); + end; + 'Calculations4': begin + CheckData(InitialOutput := |cStr,cInt|); + CheckOutput(cStr,253,cStr,253/10,cStr,253/100); + end; + 'Read1': begin + CheckData(InitialInput := |cInt,cInt|); + TestCount := 5; + GenerateTestData := tnum -> begin + var (a,b) := Random2(1,100); + InputList.AddTestData(|a,b|); + end; + CheckOutput(Int(0)+Int(1)); + end; + 'Read2': begin + FilterOnlyNumbersAndBools; + CheckData(Input := |cRe,cRe|); + var S := Re(0)*Re(1); + var P := 2*(Re(0)+Re(1)); + TestCount := 10; + GenerateTests(10, tRe(1,10,digits := 0)*2); + CheckOutputSilent(S,P); // Все сообщения ColoredMessage гасятся + if TaskResult <> Solved then + CheckOutput(P,S); + end; + 'Task1': begin + FilterOnlyNumbersAndBools; + CheckData(Input := |cRe,cRe|); + var S := Re(0)+Re(1); + var P := Re(0)*Re(1); + GenerateTests(10,tRe(1,10,0)*2); // Это когда нет особых случаев + CheckOutputSilent(S,P); // Все сообщения ColoredMessage гасятся + if TaskResult <> Solved then + CheckOutput(P,S); + end; + 'Task2': begin + FilterOnlyNumbersAndBools; + CheckData(Input := |cRe|); + var x := Re(0); + TestCount := 10; + GenerateTestData := tnum -> begin // это когда есть особый случай + var a: real; + if tnum = 5 then + a := RandomReal(1,100,digits := 0) + else a := RandomReal(1,10,digits := 0); + InputList.AddTestData(|a|); + end; + CheckOutput(x*x,x*x*x,x*x*x*x); + end; + 'Intermediate1': begin + CheckData(Input := Empty); + CheckOutput(27); + end; + 'Intermediate2': begin + CheckData(Input := Empty); + CheckOutput(2.5); + end; + 'Swap1': + begin + FilterOnlyNumbers; + CheckData(Input := Empty); + CheckOutput(666.666, 555.555); + end; + 'Swap2': CheckOutput('Иванов', 'Петров', 'Петров', 'Иванов'); + 'AssignAdd1': + begin + FilterOnlyNumbers; + CheckData(InitialOutput := |cInt, cInt|); + CheckOutputSeq(Arr(1..9)); + end; + 'AssignAdd2': + begin + FilterOnlyNumbers; + CheckInitialOutput(cInt, cInt, cInt); + CheckOutput(1, 2, 4, 7, 11, 16, 22, 29, 37, 46); + end; + 'AssignMult': + begin + FilterOnlyNumbers; + CheckInitialOutput(cInt, cInt); + CheckOutput(1, 2, 4, 8, 16, 32, 64, 128, 256, 512, 1024); + end; + 'AssignMultAddGame': + begin + FilterOnlyNumbers; + CheckData(Input := Empty); + if OutputList.Count <> 1 then + begin + ColoredMessage('Вы должны вывести ровно одно значение'); + exit; + end; + TaskResult := TaskStatus.PartialSolution; + if CompareValues(OutputList[0],18) then + exit; + if CompareValues(OutputList[0],33) then + ColoredMessage('Молодец! Теперь получи в переменной a значение 67',MsgColorGray) + else CheckOutput(67); + end; + 'AssignMultAddКруги': + begin + FilterOnlyNumbers; + CheckData(Input := Empty); + CheckOutput(38); + end; + 'Sqrt1': + begin + FilterOnlyNumbers; + CheckData(Input := Empty); + if OutputList.Count <> 1 then + begin + ColoredMessage('Вы должны вывести ровно одно значение'); + exit; + end; + TaskResult := TaskStatus.PartialSolution; + if CompareValues(OutputList[0],Sqrt(2)) then + exit; + if CompareValues(OutputList[0],Sqrt(3)) then + ColoredMessage('Молодец! Теперь получи значение Sqrt(5)',MsgColorGray) + else if CompareValues(OutputList[0],Sqrt(5)) then + ColoredMessage('Молодец! Теперь получи значение Sqrt(7)',MsgColorGray) + else if CompareValues(OutputList[0],Sqrt(7)) then + CheckOutput(Sqrt(7)) // Верно + else CheckOutput(Sqrt(7)) // Неверно + end; + 'Abs_1': + begin + FilterOnlyNumbers; + CheckData(Input := Empty); + // Просто поясняющее сообщение + ColoredMessage('Abs - функция, убирающая знак числа. В математике известна как модуль числа', MsgColorGray); + end; + 'Abs_2_AB': + begin + FilterOnlyNumbers; + CheckData(InitialOutput := |cInt| * 6); + CheckOutput(5,3,2,-1,5,6,7,4,3,9,18,9); + end; + 'SwapProc1': + begin + FilterOnlyNumbers; + CheckData(Input := Empty); + CheckOutput(3,1,7,5,1,3,5,7); + end; + 'SwapProc2': + begin + FilterOnlyNumbers; + CheckData(Input := Empty); + CheckOutput(1,2,3,4,2,1,3,4,2,3,1,4,2,3,4,1); + end; + 'DivMod01': + begin + FilterOnlyNumbers; + CheckData(Input := Empty); + // Просто поясняющее сообщение + ColoredMessage('Перепишите результат в тетрадь', MsgColorGray); + end; + 'DivMod02': + begin + FilterOnlyNumbers; + CheckData(InitialOutput := |cInt|*6); + CheckOutputAfterInitial(3,1,5,1,7,1); + //ColoredMessage('Если x - четно, то x mod 2 = 0', MsgColorGray); + end; + 'DivMod03': + begin + TaskResult := PartialSolution; + FilterOnlyNumbers; + CheckData(Input := Empty); + if OutputList.Count = 6 then + begin + if CompareValues(OutputList[0],37) then + ColoredMessage('Измените значение a на 123', MsgColorGray) + else if CompareValues(OutputList[0],123) then + ColoredMessage('Верно. Проверьте еще значение a = 12345', MsgColorGray) + else if CompareValues(OutputList[0],12345) then + begin + ColoredMessage('Верно!', MsgColorGreen); + TaskResult := Solved; + end; + end; + end; + + end; +end; + +initialization + CheckTask := CheckTaskT; + AllTaskNames := Arr('Var_1','Var_2','Var_4','Var_5','Var_6', + 'Calculations1','Calculations2','Calculations3','Calculations4', + 'Read1','Read2','Task1','Task2','Intermediate1','Intermediate2','Swap1','Swap2', + 'AssignAdd1','AssignAdd2','AssignMult','AssignMultAddGame','AssignMultAddКруги', + 'Sqrt1','Abs_1','Abs_2_AB','SwapProc1','SwapProc2','DivMod01','DivMod02','DivMod03' ); +finalization +end. \ No newline at end of file diff --git a/TestSuite/CompilationSamples/Tasks1BoolIfCase.pas b/TestSuite/CompilationSamples/Tasks1BoolIfCase.pas new file mode 100644 index 000000000..034b3778f --- /dev/null +++ b/TestSuite/CompilationSamples/Tasks1BoolIfCase.pas @@ -0,0 +1,435 @@ +unit Tasks1BoolIfCase; + +uses LightPT; + +var AllTaskNames: array of string; + +procedure CheckTaskT(name: string); +begin + ClearOutputListFromSpaces; + + case name of + 'Types1': begin + FilterOnlyNumbers; + CheckData(Empty); + CheckOutput(cInt,cRe,cStr); + end; + 'Types2': begin + CheckData(Input := |cInt,cRe,cStr|); + CheckOutput(Int(0),Re(1),Str(2)); + end; + 'Types3': begin + CheckData(Empty); + CheckOutput(cInt,cRe,cStr); + end; + 'Boo1': begin + end; + 'Boo2': begin + CheckOutput(False,True); + if TaskResult = BadSolution then + TaskResult := InitialTask + end; + 'Boo3': begin + FilterOnlyNumbersAndBools; + CheckData(Empty); + CheckOutput(54,54 mod 3 = 0,54,54 mod 3 = 5) + end; + 'Boo4': begin + // Задачник + end; + 'Boo5_And_Or': begin + FilterOnlyNumbersAndBools; + CheckData(Empty); + CheckOutput(cBool,cBool); + end; + 'Boo7': begin + FilterOnlyNumbersAndBools; + CheckOutput(True); + //if TaskResult = BadSolution then + // TaskResult := InitialTask + end; + 'If1Пароль': begin + CheckData(InitialInput := |cInt|); + //if int(0)=777 then + CheckOutput('Пароль правильный'); + end; + 'If2Пароль': begin + CheckData(Input := |cInt|); + TestCount := 10; + GenerateTestData := tnum -> begin + var a := Random(1,1000); + if tnum = 5 then + a := 777; + InputList.AddTestData(|a|); + end; + if int(0)=777 then + CheckOutput('Пароль правильный') + else CheckOutput('Попытка взлома системы!'); + end; + 'If3ПроверкаИмени': begin + CheckData(InitialInput := |cStr|); + TestCount := 10; + GenerateTestData := tnum -> begin + var a := Arr('Саша','Петя','Вася','Оля').RandomElement; + if tnum = 5 then + a := 'Саша'; + InputList.AddTestData(|a|); + end; + if Str(0)='Саша' then + CheckOutput('Привет Саша! Я тебя знаю') + else CheckOutput('Я тебя не знаю'); + end; + 'If4Четное': begin + CheckData(InitialInput := |cInt|); + GenerateTests(20,|tInt(1,100)|); + if Int(0) mod 2 = 0 then + CheckOutput(Int(0),'Четное') + else CheckOutput(Int(0),'Нечетное'); + end; + 'If5ЛогинПарольAnd': begin + CancelMessagesIfInitial := False; + CheckData(InitialInput := |cStr,cInt|); + TestCount := 10; + GenerateTestData := tnum -> begin + var a := Arr('Angel','Demon','Ogr').RandomElement; + var p := Arr(777,666,555).RandomElement; + if tnum = 5 then + (a,p) := ('Angel',777); + InputList.AddTestData(|object(a),object(p)|); + end; + if (Str(0) = 'Angel') and (Int(1) = 777) then + CheckOutput('Вход разрешен') + else CheckOutput('Попытка взлома системы!'); + end; + 'If6ЛогинOr': begin + CheckData(InitialInput := |cStr|); + TestCount := 10; + GenerateTestData := tnum -> begin + var a := Arr('Angel','Demon','Alex','John','Olga','Iris').RandomElement; + if tnum = 5 then + a := 'Angel' + else if tnum = 6 then + a := 'Demon'; + InputList.AddTestData(a); + end; + if (Str(0) = 'Angel') or (Str(0) = 'Devil') then + CheckOutput('Вход разрешен') + else CheckOutput('Попытка взлома системы!'); + end; + 'If7Not': begin + FilterOnlyNumbersAndBools; + CheckOutput(True,False); + if TaskResult = BadSolution then + TaskResult := PartialSolution; + end; + 'If8Зима': begin + CheckData(Input := |cInt|); + var m := Int(0); + TestCount := 10; + GenerateTestData := tnum -> begin + var a := Random(1,12); + case tnum of + 5: a := 12; + 6: a := 1; + 7: a := 2; + end; + InputList.AddTestData(a); + end; + CheckOutput(m in |12,1,2|? 'Зима':'Не зима') + end; + 'If8ЧетДвузнач': begin + CheckData(Input := |cInt|); + var x := Int(0); + TestCount := 20; + GenerateTestData := tnum -> begin + var x := Random(5,15); + case tnum of + 5: x := 9; + 6: x := 10; + 7: x := 99; + 8: x := 100; + end; + InputList.AddTestData(x); + end; + var b := x.IsEven and (x in 10..99); + if b then + CheckOutput('Это чётное двузначное') + else CheckOutput(); + end; + 'If9ВДиапазоне': begin + CheckData(Input := |cInt|); + var x := Int(0); + var b := x in 3..5; + TestCount := 20; + GenerateTestData := tnum -> begin + var x := Random(1,5); + case tnum of + 5: x := 2; + 6: x := 3; + 7: x := 5; + 8: x := 6; + end; + InputList.AddTestData(x); + end; + if b then + CheckOutput('экзамен сдан') + else CheckOutput('экзамен не сдан') + end; + 'If9НеВДиапазоне': begin + CheckData(Input := |cInt|); + var H := Int(0); + TestCount := 20; + GenerateTestData := tnum -> begin + var x := Random(100,200); + case tnum of + 5: x := 149; + 6: x := 150; + 7: x := 190; + 8: x := 191; + end; + InputList.AddTestData(x); + end; + + var b := H not in 150..190; + if b then + CheckOutput('Необычный рост') + else CheckOutput('Норма') + end; + 'Minmax_2': begin + CheckData(InitialOutput := |cInt|); + CheckOutputSeq(Arr(3,5,3,5,6,6)); + end; + 'ВложенныеIf2': begin + CheckData(Input := |cStr,cInt|); + TestCount := 10; + GenerateTestData := tnum -> begin + var name := Arr('Alex','Bob','John').RandomElement; + var pass := Arr(555,666,777).RandomElement; + case tnum of + 1: (name,pass) := ('Alex',666); + 2: (name,pass) := ('Alex',777); + 3: (name,pass) := ('Bob',666); + 4: (name,pass) := ('Bob',444); + end; + InputList.AddTestData(name); + InputList.AddTestData(pass); + end; + if (Str(0) = 'Alex') then + if (Int(1) = 666) then + CheckOutput('Вход разрешен') + else CheckOutput('Пароль неверен') + else CheckOutput('Логин неверен'); + end; + 'ЦепочечныеIf1': begin + CheckData(Input := |cInt|); + GenerateTests(20,|tInt(1,4)|); + case Int(0) of + 1: CheckOutput('Зима'); + 2: CheckOutput('Весна'); + 3: CheckOutput('Лето'); + 4: CheckOutput('Осень'); + end; + end; + 'ЦепочечныеIf2': begin + CheckData(Input := |cInt|); + GenerateTests(20,|tInt(2,5)|); + case Int(0) of + 2: CheckOutput('неудовлетворительно'); + 3: CheckOutput('удовлетворительно'); + 4: CheckOutput('хорошо'); + 5: CheckOutput('отлично'); + end; + end; + //'ЦепочечныеIf3': begin end; + 'ЦепочечныеIf4': begin + CheckData(Input := |cStr|); + TestCount := 4; + GenerateTestData := tnum -> begin + var word: string; + case tnum of + 1: word := 'черное'; + 2: word := 'высокий'; + 3: word := 'худой'; + 4: word := 'хорошо'; + end; + // жуткое исключение если в InputList ничего не добавить!!! + InputList.AddTestData(word); + end; + case Str(0) of + 'черное' : CheckOutput('белое'); + 'высокий': begin + CheckOutputSilent('низкий'); + if TaskResult = TaskStatus.BadSolution then + CheckOutput('невысокий'); + end; + 'худой' : begin + CheckOutputSilent('толстый'); + if TaskResult = TaskStatus.BadSolution then + CheckOutputSilent('полный'); + if TaskResult = TaskStatus.BadSolution then + CheckOutput('жирный'); + end; + 'хорошо' : CheckOutput('плохо'); + else CheckOutput(''); + end; + end; + 'ЦепочечныеIf5': begin + CheckData(Input := |cInt|); + //GenerateTests(20,tInt(1,6)*1); + GenerateTests(1,2,3,4,5,6); + // Хотелось бы генерировать неслучайные тесты из некоторого диапазона + // Непонятно, как совмещать несколько параметров + case Int(0) of + 1,5: CheckOutput(1); + 3,4: CheckOutput(2); + 2,6: CheckOutput(3); + end; + end; + 'If0Situations1': begin + CheckData(Input := |cInt|); + GenerateTests(10,tInt(-1,1)*1); + if Int(0)<0 then + CheckOutput('отрицательное') + else if Int(0)=0 then + CheckOutput('равно 0') + else CheckOutput('положительное') + end; + 'Holidays': begin + CheckData(Input := |cInt,cInt|); + var (d,m) := (Int(0),Int(1)); + //GenerateTests(список кортежей) + //GenerateTests(список значений) + GenerateTests((1,1),(23,2),(8,3),(1,5),(9,5),(12,6),(4,11),(12,12),(7,13)); + if (d,m) = (1,1) then + CheckOutput('Новый год') + else if (d,m) = (23,2) then + CheckOutput('День защитника Отечества') + else if (d,m) = (8,3) then + CheckOutput('Международный женский день') + else if (d,m) = (1,5) then + CheckOutput('Первомай') + else if (d,m) = (9,5) then + CheckOutput('День Победы') + else if (d,m) = (12,6) then + CheckOutput('День России') + else if (d,m) = (4,11) then + CheckOutput('День народного единства') + else CheckOutput(''); + end; + 'IfXSituations2': begin + CheckData(Input := |cInt|); + GenerateTests(-2,-1,0,1,2); + if Int(0) < 3 then + CheckOutput('x меньше 3') + else if Int(0) in 3..5 then + CheckOutput('x от 3 до 5') + else if Int(0) > 5 then + CheckOutput('x больше 5') + end; + 'IfDiscriminant': begin + CheckData(Input := |cRe,cRe,cRe|); + GenerateTests(20,tRe(-3,3,digits := 1)*3); + var (a,b,c) := (Re(0),Re(1),Re(2)); + var d := B*B-4*A*C; + if d<0 then + CheckOutput('Корней нет') + else if d=0 then + CheckOutput('Один корень') + else CheckOutput('Два корня') + end; + 'Case1': begin + CheckData(InitialInput := |cInt|); + GenerateTests(1,2,3,4,5,6,7); + case Int(0) of + 1: CheckOutput('Понедельник'); + 2: CheckOutput('Вторник'); + 3: CheckOutput('Среда'); + 4: CheckOutput('Четверг'); + 5: CheckOutput('Пятница'); + 6: CheckOutput('Суббота'); + 7: CheckOutput('Воскресенье'); + end; + end; + 'Case2': begin + CheckData(InitialInput := |cInt|); + GenerateTests(1,2,3,4,5,6); + case Int(0) of + 2: CheckOutput('Двойка'); + 3: CheckOutput('Тройка'); + 4: CheckOutput('Четверка'); + 5: CheckOutput('Пятерка'); + else CheckOutput('Не оценка'); + end; + end; + 'Case3': begin + CheckData(InitialInput := |cInt|); + GenerateTests(1,2,3,4,5,6,7,8,9,10,11,12); + case Int(0) of + 12,1,2: CheckOutput('Зима'); + 3..5: CheckOutput('Весна'); + 6..8: CheckOutput('Лето'); + 9..11: CheckOutput('Осень'); + end; + end; + 'Case4': begin + CheckData(InitialInput := |cInt|); + GenerateTests(1,2,3,4,5,6,7,8,9,10,11,12); + case Int(0) of + 4,6,9,11: CheckOutput(30); + 2: CheckOutput(28); + else CheckOutput(31); + end; + end; + 'Diapason1_Case': begin + CheckData(InitialInput := |cInt|); + GenerateTests(20,tInt(80,230)*1); + case Int(0) of + 80..119: CheckOutput('Карлик'); + 120..149: CheckOutput('Низкий'); + 150..179: CheckOutput('Средний'); + 180..230: CheckOutput('Высокий'); + end; + end; + 'TranslateRobot': begin + CheckData(InitialInput := |cInt|); + GenerateTests('Left','Right','Up','Down'); + case Str(0) of + 'Left': CheckOutput('Влево'); + 'Right': CheckOutput('Вправо'); + 'Up': CheckOutput('Вверх'); + 'Down': CheckOutput('Вниз'); + end; + end; + 'Комнаты': begin + CheckData(InitialInput := |cInt|); + GenerateTests(1,2,3,4,5,6); + case Int(0) of + 1,5: CheckOutput(1); + 3,4: CheckOutput(2); + 2,6: CheckOutput(3); + end; + end; + 'Спецагенты': begin + CheckData(InitialInput := |cStr|); + GenerateTests('Икс','Омега','Игрек','Кси','Бета','Зед','Пси','Вася','Петя','Оля'); + case Str(0) of + 'Икс', 'Омега': CheckOutput(1); + 'Игрек', 'Кси', 'Бета': CheckOutput(2); + 'Зед', 'Пси': CheckOutput(3); + else CheckOutput(999); + end; + end; + end; +end; + +initialization + CheckTask := CheckTaskT; + AllTaskNames := Arr('Types1','Types2','Types3', + 'Boo1','Boo2','Boo3','Boo4','Boo5_And_Or','Boo7', + 'If1Пароль','If2Пароль','If3ПроверкаИмени','If4Четное','If5ЛогинПарольAnd','If6ЛогинOr','If7Not', + 'If8Зима','Зима','If8ЧетДвузнач','If9ВДиапазоне','If9НеВДиапазоне','Minmax_2','ВложенныеIf2', + 'ЦепочечныеIf1','ЦепочечныеIf2','ЦепочечныеIf3','ЦепочечныеIf4','ЦепочечныеIf5', + 'If0Situations1','Holidays','IfXSituations2','IfDiscriminant', + 'Case1','Case2','Case3','Case4','Diapason1_Case','TranslateRobot','Комнаты','Спецагенты'); +finalization +end. \ No newline at end of file diff --git a/TestSuite/CompilationSamples/Tasks1Loops.pas b/TestSuite/CompilationSamples/Tasks1Loops.pas new file mode 100644 index 000000000..91f79360c --- /dev/null +++ b/TestSuite/CompilationSamples/Tasks1Loops.pas @@ -0,0 +1,865 @@ +unit Tasks1Loops; + +uses LightPT; + +var AllTaskNames: array of string; + +procedure CheckTaskT(name: string); +begin + ClearOutputListFromSpaces; + + case name of + 'LoopErr2': begin + TaskResult := ErrFix; + if OutputString.ToString = '*' then + ColoredMessage('Сотри ; после do!',MsgColorGray); + if OutputString.ToString = '*'*50 then + ColoredMessage('Молодец! И помни: нельзя ставить ; после do!',MsgColorGray); + end; + 'LoopErr3': begin + TaskResult := ErrFix; + if OutputList.Count = 11 then + ColoredMessage('Используй begin end для объединения нескольких операторов в один!',MsgColorGray); + if OutputList.Count = 20 then + ColoredMessage('Молодец! Если в цикле - несколько действий, окайми их операторными скобками begin-end',MsgColorGray); + end; + 'Loop_Arithm1': begin + ClearOutputListFromSpaces; + var n := 10; + CheckData(InitialOutput := |cInt|*n); + CheckOutputAfterInitialSeq(ArrGen(n,1,i->i+2)); + end; + 'Loop_Arithm2': begin + ClearOutputListFromSpaces; + CheckData(Input := Empty); + var sq := ObjectList.New.AddArithm(10,19,-2).AddArithm(9,1.1,0.1); + CheckOutputSeq(sq); + end; + 'For1': begin + ClearOutputListFromSpaces; + CheckData(Empty); + TaskResult := InitialTask; + ColoredMessage('Что лучше в данном случае: цикл loop или цикл for?',msgColorGray); + end; + 'For1a': begin + ClearOutputListFromSpaces; + var n := 10; + CheckData(InitialOutput := |cInt|*n); + var sq := ObjectList.New.AddArithm(10,2,2).AddArithm(10,2,2); + CheckOutputSeq(sq); + end; + 'For1b': begin + ClearOutputListFromSpaces; + var n := 10; + CheckData(InitialOutput := |cInt|*n); + var sq := ObjectList.New.AddArithm(10,1,2).AddArithm(10,1,2); + CheckOutputSeq(sq); + end; + 'For1b_step': begin + ClearOutputListFromSpaces; + CheckData(Empty); + var sq := ObjectList.New.AddArithm(10,2,2).AddArithm(10,1,2); + CheckOutputSeq(sq); + end; + 'For1c': begin + ClearOutputListFromSpaces; + CheckData(Empty); + var sq := ObjectList.New.AddArithm(11,15,-1); + CheckOutputSeq(sq); + end; + 'For1d': begin + ClearOutputListFromSpaces; + CheckData(Empty); + var sq := ObjectList.New.AddArithm(10,20,-2); + CheckOutputSeq(sq); + end; + 'For1e': begin + ClearOutputListFromSpaces; + CheckData(Empty); + var sq := ObjectList.New.AddArithm(10,5,5).AddArithm(7,40,-4); + CheckOutputSeq(sq); + end; + 'For1f': begin + ClearOutputListFromSpaces; + CheckData(Empty); + var sq := ObjectList.New.AddArithm(9,1.9,-0.1).AddArithm(9,1.9,-0.1); + CheckOutputSeq(sq); + end; + 'ForErr1': begin + TaskResult := ErrFix; // Задание на исправление ошибок + ColoredMessage('Всегда описывайте переменную i в заголовке цикла for',msgColorGray); + end; + 'ForErr2': begin + TaskResult := ErrFix; + var a := OutputString.ToString.ToWords(NewLine); + ColoredMessage('Описывайте переменную i в заголовке цикла for: for var i',msgColorGray); + if a.Length < 2 then + ColoredMessage('Между циклами необходимо вызвать команду Println перехода на новую строку',msgColorRed); + end; + 'ForErr3': begin + TaskResult := ErrFix; + ColoredMessage('Запомните: операторы не могут писаться до begin основной программы',msgColorGray); + end; + 'ForErr4': begin + CheckData(Empty); + var sq := ObjectList.New.AddArithm(11,15,-1); + CheckOutputSeq(sq); + end; + 'ForErr5': begin + CheckData(Empty); + //CheckInitialOutputValues('*'); + CheckOutputSeq(ArrFill(50,'*')); + end; + 'ForErr6': begin + TaskResult := ErrFix; + ColoredMessage('Если в цикле выполняется два и более действий, окаймите их begin end',msgColorGray); + end; + 'ForErr7': begin + TaskResult := ErrFix; + ColoredMessage('В данном случае лучше использовать цикл loop',msgColorGray); + end; + 'Tabl1': begin + CheckData(InitialOutput := |cInt|*20); + var sq := (1..10).SelectMany(x -> |x,x*x,x*x*x|); + CheckOutputSeq(sq); + end; + 'Tabl2': begin + CheckData(Empty); + var sq := (1..10).SelectMany(x -> |object(x),object(sqrt(x))|); // приводим к object поскольку типы разные + CheckOutputSeq(sq); + end; + 'Tabl4': begin + CheckData(Empty); + var sq := PartitionPoints(1.1,1.9,8).SelectMany(x -> |x,x*x|); + CheckOutputSeq(sq); + end; + 'Sum1': begin + // Частичные решения не проработаны. Они крайне редки конечно + TaskResult := PartialSolution; // Решение состоит в последовательном решении нескольких родственных задач + FilterOnlyNumbers; + //CheckInitialOutputValues(55); + if (OutputList.Count = 1) and OutIsInt(0) then + begin + var a := OutInt(0); + if a=4905 then + ColoredMessage('Отлично! Теперь найдите сумму квадратов всех двузначных чисел', MsgColorGray) + else if a=328065 then + TaskResult := Solved; + end; + end; + 'Sum1a': begin + FilterOnlyNumbers; + CheckData(Input := |cInt|*2); + var (a,b) := (Int(0),Int(1)); + TestCount := 10; + GenerateTestData := tnum -> begin + var (a,b) := Random2(1..20); + if a>b then Swap(a,b); + InputList.AddTestData(|a,b|); + end; + CheckOutput((a..b).Sum); + end; + 'Sum2': begin + FilterOnlyNumbers; + CheckData(Empty); + CheckOutput((11..99).Step(2).Sum); + end; + 'Sum3': begin + FilterOnlyNumbers; + CheckData(Empty); + CheckOutput((1..9).Select(x->x*0.1+1.0).Sum); + end; + 'Sum4': begin + FilterOnlyNumbers; + CheckData(Empty); + CheckOutput((1..9).Select(x->1/x).Sum); + end; + 'Prod1': begin + TaskResult := PartialSolution; + FilterOnlyNumbers; + if CompareValuesWithOutput(3*3*3*3*3*3*3) then + ColoredMessage('Вычислите 4 в степени 6', MsgColorGray) + else if CompareValuesWithOutput(4*4*4*4*4*4) then + ColoredMessage('Вычислите 5 в степени 5', MsgColorGray) + else if CompareValuesWithOutput(5*5*5*5*5) then + TaskResult := Solved + else if not CompareValuesWithOutput(2*2*2*2*2) then + TaskResult := BadSolution + end; + 'Prod2_Power': begin + FilterOnlyNumbers; + CheckData(Empty); + CheckOutput(2**3,3**7,4**6,5**5); + end; + 'Prod3_Fact': begin + FilterOnlyNumbers; + CheckData(Empty); + CheckOutput(2*3*4*5*6*7,2*3*4*5*6*7*8,2*3*4*5*6*7*8*9*10); + end; + 'Geom1': begin + FilterOnlyNumbers; + CheckData(InitialOutput := |cInt|*11); + var sq := ObjectList.New.AddGeom(15,1,3); + CheckOutputAfterInitialSeq(sq); + end; + 'Geom2': begin + FilterOnlyNumbers; + CheckData(Empty); + var sq := ObjectList.New.AddGeom(11,1,10); + sq.Add(integer.MaxValue); + if OutputList.Count = 11 then + ColoredMessage('Выведите integer.MaxValue - самое большое целое типа integer',MsgColorMagenta); + CheckOutputSeqNew(sq); + end; + 'Geom3': begin + FilterOnlyNumbers; + CheckData(Empty); + var sq := ObjectList.New.AddGeom(20,1.0,10.0); + sq.Add(real.MaxValue); + if OutputList.Count = 20 then + ColoredMessage('Выведите real.MaxValue - самое большое целое типа real',MsgColorMagenta); + CheckOutputSeqNew(sq); + end; + 'Geom4': begin + FilterOnlyNumbers; + CheckData(Empty); + var sq := ObjectList.New.AddGeom(8,1.0,0.999); + CheckOutputSeq(sq); + end; + 'Loop_If_1': begin + FilterOnlyNumbersAndBools; + var n := 10; + CheckData(InitialInput := |cInt|*n); + GenerateTests(10,tInt(1,100)*n); + + var a := IntArr(n); + CheckOutputSeq(a.Where(x->x.IsEven)); + end; + 'Loop_If_2': begin + var n := 10; + CheckData(Input := |cInt|*n); + TestCount := 10; + GenerateTestData := tnum -> begin + var x := ArrRandomInteger(n,1,100); + x[0] := 1; + x[2] := -1; + x[3] := 9; + x[4] := 10; + x[5] := 99; + x[6] := 100; + InputList.AddTestData(x); + end; + var lst := new ObjectList; + for var i:=0 to n-1 do + if Int(i) in 10..99 then + lst.Add(Int(i)); + CheckOutputSeq(lst); + end; + 'Loop_If_2a': begin + var n := 10; + CheckData(Input := |cInt|*n); + GenerateTests(20,tInt(1,100)*n); + var lst := new ObjectList; + for var i:=0 to n-1 do + if Int(i).Divs(3) and Int(i).NotDivs(5) then + lst.Add(Int(i)); + CheckOutputSeq(lst); + end; + 'Loop_If_3': begin + FilterOnlyNumbersAndBools; + var n := 10; + CheckData(Input := |cInt|*n); + var lst := new ObjectList; + GenerateTests(10,tInt(1,100)*n); + for var i:=1 to n do + if i.IsEven then + lst.Add(Int(i-1)); + CheckOutputSeq(lst); + end; + 'Loop_If_4': begin + FilterOnlyNumbersAndBools; + var n := 10; + CheckData(Input := |cInt|*n); + GenerateTests(10,tInt(1,100)*n); + var lst := new ObjectList; + for var i:=0 to n-1 do + if Int(i).IsEven then + lst.Add(i+1); + CheckOutputSeq(lst); + end; + 'Loop_If_5_Count': begin + var n := 10; + CheckData(Input := |cInt|*n); + GenerateTests(10,tInt(1,100)*n); + var c := 0; + for var i:=0 to n-1 do + if Int(i).IsEven then + c += 1; + CheckOutput(c); + end; + 'Loop_If_7_Count': begin + FilterOnlyNumbersAndBools; + var n := 10; + CheckData(Input := |cInt|*n); + GenerateTests(10,tInt(1,6)*n); + var c := 0; + for var i:=0 to n-1 do + if Int(i) in 2..5 then + c += 1; + CheckOutput(c); + end; + 'Loop_If_8_Count': begin + FilterOnlyNumbersAndBools; + var n := 10; + CheckData(Input := |cInt|*n); + var c := 0; + GenerateTests(10,tInt(1,10)*n); + for var i:=0 to n-1 do + if Int(i) not in 2..5 then + c += 1; + CheckOutput(c); + end; + 'Loop_If_9_Count': begin + FilterOnlyNumbersAndBools; + var n := 10; + CheckData(Input := |cInt|*n); + GenerateTests(10,tInt(1,100)*n); + var c := 0; + for var i:=0 to n-1 do + if (Int(i) in 10..99) and Int(i).IsOdd then + c += 1; + CheckOutput(c); + end; + 'Loop_If_1_Sum': begin + FilterOnlyNumbersAndBools; + var n := 10; + CheckData(Input := |cInt|*n); + GenerateTests(10,tInt(1,10)*n); + var s := 0; + for var i:=0 to n-1 do + if Int(i)<5 then + s += Int(i); + CheckOutput(s); + end; + 'Loop_If_2_Sum': begin + FilterOnlyNumbersAndBools; + var N := Int(0); + CheckData(Input := |cInt|*(N+1)); + GenerateTests(10,tInt(1,10)*n); + var s := 0; + for var i:=1 to N do + if Int(i).IsEven then + s += Int(i); + CheckOutput(s); + end; + 'Зацикливание2': begin + FilterOnlyNumbers; + CheckOutputSeq(1..9); + if TaskResult = Solved then + ColoredMessage('Не ставьте ; после do!'); + end; + 'Wh1': begin + FilterOnlyNumbers; + CheckData(InitialOutput := |cInt|*18); + + CheckOutputSeq(Arr(1..9)*3); + end; + 'Wh2': begin + FilterOnlyNumbers; + CheckData(Empty); + CheckOutputSeq(ArrGen(10,1,x->x+2)); + end; + 'Wh3': begin + FilterOnlyNumbers; + CheckData(Empty); + CheckOutputSeq(ArrGen(45,99,x->x-2)); + end; + 'Дюймы1': begin + FilterOnlyNumbers; + CheckData(Empty); + CheckOutputSeq(ArrGen(7,17.49,x->x-2.51)); + end; + 'Дюймы2': begin + FilterOnlyNumbers; + CheckData(Empty); + CheckOutput(7); + end; + 'Дюймы3': begin + FilterOnlyNumbers; + CheckData(Input := cRe * 2); + GenerateTests(10,tRe(2,10,1)*2); + CheckOutput(Trunc(Re(0)/Re(1))); + end; + 'Дюймы4': begin + FilterOnlyNumbers; + CheckData(Input := cRe * 2); + CheckData(Input := cRe * 2); + CheckOutput(Re(0) - Trunc(Re(0)/Re(1))); + end; + 'Sum1W': begin + FilterOnlyNumbers; + CheckData(InitialOutput := |cInt|); + CheckOutput(165,165); + end; + 'Sum2W': begin + FilterOnlyNumbers; + CheckData(InitialOutput := |cInt|); + CheckOutput(385,385); + end; + 'Sum3W': begin + FilterOnlyNumbers; + CheckData(Empty); + CheckOutput(1035); + end; + 'Умножение1': begin + FilterOnlyNumbers; + CheckData(Empty); + CheckOutputSeq(ArrGen(14,1,x->x*2)); + end; + 'Умножение2': begin + FilterOnlyNumbers; + CheckData(Empty); + CheckOutput(11); + end; + 'Деление1': begin + FilterOnlyNumbers; + CheckData(Empty); + CheckOutputSeq(ArrGen(6,26.5,x->x/2)); + end; + 'Деление2': begin + FilterOnlyNumbers; + CheckInitialOutputSeq(Arr(cInt)*0); + CheckOutput(7); + end; + 'Digits': begin + FilterOnlyNumbers; + CheckData(Empty); + CheckOutput(4,3,5,2,6,1,7); + end; + 'Bank_ForLeaders': begin + FilterOnlyNumbers; + CheckData(Empty); + CheckOutputSeq(ArrGen(9,109000.0,x->x*1.09)); + end; + 'Digits1': begin + FilterOnlyNumbers; + CheckData(InitialInput := |cInt|); + GenerateTests(2,23,345,4567,56789,678901,7890123); + var c := Abs(Int(0)); + var res := c.ToString.Select(cc->cc.ToDigit).Count; + CheckOutput(res); + end; + 'Digits2': begin + FilterOnlyNumbers; + CheckData(InitialInput := |cInt|); + GenerateTests(2,23,345,4567,56789,678901,7890123); + var c := Abs(Int(0)); + var res := c.ToString.Select(cc->cc.ToDigit).Sum; + CheckOutput(res); + end; + 'Digits3': begin + FilterOnlyNumbers; + CheckData(InitialInput := |cInt|); + GenerateTests(2,23,345,4567,56789,678901,7890123); + var c := Abs(Int(0)); + var res := c.ToString.Select(cc->cc.ToDigit).Count(x->x.IsEven); + CheckOutput(res); + end; + 'Digits4': begin + FilterOnlyNumbers; + CheckData(InitialInput := |cInt|); + GenerateTests(2,23,345,4567,56789,678901,7890123); + var c := Abs(Int(0)); + var res := c.ToString.Select(cc->cc.ToDigit).Where(x->x.IsOdd).Sum; + CheckOutput(res); + end; + 'Digits5': begin + FilterOnlyNumbers; + CheckData(InitialInput := |cInt|); + GenerateTests(1,23,345,4567,56789,678901,7890123); + var c := Abs(Int(0)); + var res := c.ToString.First.ToDigit; + CheckOutput(res); + end; + 'BinNumSystem': begin + FilterOnlyNumbers; + CheckData(InitialInput := |cInt|); + GenerateTests(23,14,481); + var x := Int(0); + var L := new List; + while x<>0 do + begin + L.Add(x mod 2); + x := x div 2; + end; + CheckOutputSeq(L.ToArray); + end; + 'BinNumSystem2': begin + FilterOnlyNumbers; + CheckData(InitialInput := |cInt|); + GenerateTests(23,14,255); + var x := Int(0); + var L := new List; + while x<>0 do + begin + L.Add(x mod 2); + x := x div 2; + end; + CheckOutput(L.Count(x->x=1)); + end; + 'Difficult_Power2': begin + FilterOnlyNumbersAndBools; + CheckData(InitialInput := |cInt|); + GenerateTests(23,14,256,16); + var x := Int(0); + while x mod 2 = 0 do + x := x div 2; + CheckOutput(x = 1); + end; + 'Min1': begin + CheckData(InitialInput := |cRe|*2); + Generatetests(10,tRe(1,100)*2); + CheckOutput(Min(Re(0),Re(1)),Max(Re(0),Re(1))); + end; + 'Min2': begin + CheckData(InitialInput := |cRe|*2); + Generatetests(10,tRe(1,100)*2); + CheckOutput(Min(Re(0),Re(1))); + end; + 'Min3': begin + CheckData(InitialInput := |cRe|*3); + Generatetests(10,tRe(1,100)*2); + CheckOutput(Min(Re(0),Re(1),Re(2))); + end; + 'SeriesMin2': begin + var n := 10; + CheckData(Input := |cInt|*n); + GenerateTests(10,tInt(1,100)*n); + CheckOutput(InputListAsIntegers.Max - InputListAsIntegers.Min) + end; + 'Break1': begin + var n := 10; + CheckData(Input := |cInt|*n); + GenerateTests(20,tInt(1,10)*n); + CheckOutput(3 in InputListAsIntegers); + end; + 'Break2': begin + TestCount := 3; + GenerateTestData := tnum -> begin + case tnum of + 1: InputList.AddTestData(|1,2,8,4,5,6,7,1,2,9|); + 2: InputList.AddTestData(|1,1,3|); + 3: InputList.AddTestData(|7,6,4,3|); + end; + end; + var n := 10; + var f := false; + for var i:=0 to n-1 do + begin + var x := Int(i); + if x = 3 then + begin + f := True; + break; + end; + end; + CheckOutput(f) + end; + 'Break3': begin + var n := 10; + TestCount := 3; + GenerateTestData := tnum -> begin + case tnum of + 1: InputList.AddTestData(|1,2,3,4,5,6,7,1,2,3|); + 2: InputList.AddTestData(|1,1,9|); + 3: InputList.AddTestData(|7,6,8|); + end; + end; + var f := 0; + for var i:=0 to n-1 do + begin + var x := Int(i); + if x >= 8 then + begin + f := x; + break; + end; + end; + CheckOutput(f) + end; + 'Break4': begin + CheckData(Input := |cInt|); + GenerateTests(123,1023,134,11110); + var x := Int(0); + var h := False; + while x<>0 do + begin + var c := x mod 10; + if c = 0 then + begin + h := True; + break + end; + x := x div 10; + end; + CheckOutput(h) + end; + 'BreakIntheMiddle1': begin + var i := 0; + var c := 0; + repeat + var x := Int(i); + i += 1; + if x = 0 then + break; + if x < 5 then + c += 1; + until False; + TestCount := 10; + GenerateTestData := tnum -> begin + var n := Random(7,12); + var a := ArrRandomInteger(n,1,10); + a[^1] := 0; + InputList.AddTestData(a); + end; + CheckOutput(c) + end; + 'BreakIntheMiddle2': begin + var i := 0; + var c := 0; + repeat + var x := Int(i); + i += 1; + if x = 0 then + break; + c += x; + until False; + TestCount := 10; + GenerateTestData := tnum -> begin + var n := Random(7,12); + var a := ArrRandomInteger(n,1,10); + a[^1] := 0; + InputList.AddTestData(a); + end; + CheckOutput(c) + end; + 'Divisors': begin + CheckData(Input := |cInt|); + GenerateTests(72,234,17,2); + var x := Int(0); + var L := new List; + for var i:=2 to x-1 do + if x mod i = 0 then + L.Add(i); + CheckOutputSeq(L); + end; + 'SimpleNumbers': begin + CheckData(Input := |cInt|); + GenerateTests(72,234,17,2); + var x := Int(0); + var L := new List; + for var i:=2 to x-1 do + if x mod i = 0 then + L.Add(i); + CheckOutput(L.Count = 0); + end; + 'сс1': begin + CheckOutputString((9*'*'+#13#10) * 5); + end; + 'сс2': begin + CheckOutputString(9*'1'+#13#10 + 9*'2'+#13#10 + 9*'3'+#13#10 + 9*'4'+#13#10 + 9*'5'+#13#10) + end; + 'сс3': begin + CheckOutputString(5*('123456789'+#13#10)); + end; + 'сс4': begin + CheckOutputString('012345'+#13#10 + '123456'+#13#10 + '234567'+#13#10 + '345678'+#13#10 + '456789'+#13#10 ); + end; + 'сс5': begin + CheckOutputString('12345'+#13#10 + '246810'+#13#10 + '3691215'+#13#10 + '48121620'+#13#10 + '510152025'+#13#10 ); + end; + 'сс6': begin + CheckOutputString(' 1 2 3 4 5'+#13#10 + ' 2 4 6 8 10'+#13#10 + ' 3 6 9 12 15'+#13#10 + ' 4 8 12 16 20'+#13#10 + ' 5 10 15 20 25'+#13#10 ); + end; + 'сс7': begin + var sb := new StringBuilder; + for var i:=1 to 19 do + begin + for var j:=1 to 19 do + sb.Append($'{(i*j),4}'); + sb.Append(#13#10); + end; + CheckOutputString(sb.ToString); + end; + 'сс8': begin + var sb := new StringBuilder; + for var i:=1 to 5 do + begin + for var j:=1 to 5 do + sb.Append($'({i},{j}) '); + sb.Append(#13#10); + end; + CheckOutputString(sb.ToString); + end; + 'ссi1': begin + var sb := new StringBuilder; + for var i:=1 to 5 do + begin + for var j:=1 to i do + sb.Append('*'); + sb.Append(#13#10); + end; + CheckOutputString(sb.ToString); + end; + 'ссi2': begin + var sb := new StringBuilder; + for var i:=1 to 5 do + begin + for var j:=1 to 2*i do + sb.Append('*'); + sb.Append(#13#10); + end; + CheckOutputString(sb.ToString); + end; + 'ссi3': begin + var sb := new StringBuilder; + for var i:=1 to 5 do + begin + for var j:=1 to 2*i-1 do + sb.Append('*'); + sb.Append(#13#10); + end; + CheckOutputString(sb.ToString); + end; + 'ссi4': begin + var sb := new StringBuilder; + for var i:=1 to 5 do + begin + for var j:=1 to 6-i do + sb.Append('*'); + sb.Append(#13#10); + end; + CheckOutputString(sb.ToString); + end; + 'ссi5': begin + var sb := new StringBuilder; + for var i:=1 to 5 do + begin + for var j:=1 to i do + sb.Append(i); + sb.Append(#13#10); + end; + CheckOutputString(sb.ToString); + end; + 'ссi6': begin + var sb := new StringBuilder; + for var i:=1 to 5 do + begin + for var j:=1 to i do + sb.Append(j); + sb.Append(#13#10); + end; + CheckOutputString(sb.ToString); + end; + 'Combinations': begin + ClearOutputListFromSpaces; + CheckData(Empty); + var lst := ObjectList.New; + for var c := 'a' to 'z' do + for var i := 0 to 9 do + begin + lst.Add(c); + lst.Add(i); + end; + CheckOutputSeq(lst); + end; + 'Primes': begin + FilterOnlyNumbersAndBools; + CheckData(Empty); + var lst := ObjectList.New; + for var n := 2 to 1000 do + begin + var IsPrime := True; + for var i:=2 to Round(Sqrt(n)) do + if n mod i = 0 then + begin + IsPrime := False; + break; + end; + if IsPrime then + lst.Add(n); + end; + CheckOutputSeq(lst); + end; + 'Счастливые билеты': begin + FilterOnlyNumbersAndBools; + CheckData(Empty); + CheckOutputNew(55252); + end; + '1_ПрямоугольныеТреугольники': begin + FilterOnlyNumbers; + CheckData(Empty); + var lst := ObjectList.New; + for var a:=1 to 20 do + for var b:=1 to 20 do + for var c:=1 to 20 do + if (a*a + b*b = c*c) and (a PartialSolution then + exit; + + CheckOutputSeq(InputList); + end; + 'Arr5','Arr6': begin + // Проверка того что введено и выведено 10 значений, что ввод совпадает с выводом и что вывод в диапазоне от 2 до 5 + // Что плохо - все Check неявно меняют TaskResult, а здесь надо еще и явно + FilterOnlyNumbersAndBools; + var n := 10; + CheckData(|cInt|*n, |cInt|*n); + + TaskResult := PartialSolution; // потому что если просто запустить - будет InitialSolution + + CheckOutputSeq(InputList); + // Дополнительная проверка + if TaskResult = Solved then + begin + // проверим на диапазон от 2 до 5 + var a := IntArr(n); + if a.Any(x->x not in 2..5) then + begin + TaskResult := BadSolution; + ColoredMessage('Результирующие данные должны быть от 2 до 5',MsgColorGray); + exit; + end; + end; + end; + 'Arr_Sum0': begin + // Это паттерн: вводится n, а потом вводится n элементов массива + FilterOnlyNumbersAndBools; + var n := Int; + CheckInput(|cInt| + n*|cInt|); + var a := IntArr(n); + CheckOutput(a.Sum) + end; + 'Arr_Sum1','Arr_Sum2': begin + FilterOnlyNumbersAndBools; + // Это всё надо. Начальный ввод - 10 целых, весь ввод - тоже + var n := 10; + CheckData(|cInt|*n, |cInt|*(n+1), |cInt|*n); + + var a := IntArr(n); + var p := integer(a.Product); + CheckOutputAfterInitial(p) + end; + 'Arr_Sum3': begin + FilterOnlyNumbersAndBools; + var n := 10; + CheckData(|cInt|*n, |cInt|*(n+1), |cInt|*n); + + var a := IntArr(n); + CheckOutputAfterInitial(a.Product) + end; + 'Arr_Sum4': begin + FilterOnlyNumbersAndBools; + var n := 10; + CheckData(|cInt|*n, |cInt|*n, |cInt|*n); + + var a := IntArr(n); + var ave := a.Average; + CheckOutputAfterInitialSeq(|ave|*2) + end; + 'Arr_CountA1': begin + FilterOnlyNumbersAndBools; + var n := 10; + CheckData(|cInt|*n, |cInt|*n, |cInt|*n); + GenerateTests(10,tInt * n); + var a := IntArr(n); + CheckOutputAfterInitial(a.CountOf(3)); + end; + 'Arr_CountA2': begin + ClearOutputListFromSpaces; // Кроме чисел тут строки + var n := 10; + CheckData(|cInt|*n, |cInt|*n, |cInt|*n); + GenerateTests(10,tInt * n); + + var lst := ObjectList.New; + var a := IntArr(n); + var cnt4 := a.CountOf(4); + var cnt5 := a.CountOf(5); + + case cnt4.CompareTo(cnt5) of + 1: lst.Add('четвёрок больше'); + 0: lst.Add('одинаково'); + -1: lst.Add('пятёрок больше'); + end; + CheckOutputAfterInitialSeq(lst); + end; + 'Arr_Replace1': begin + FilterOnlyNumbersAndBools; + var n := 10; + CheckData(|cInt|*n, |cInt|*n, |cInt|*n); + GenerateTests(10,tInt * n); + + var arr := IntArr(n); + arr.Replace(2,3); + CheckOutputAfterInitialSeq(arr); + end; + 'Arr_Replace2': begin + FilterOnlyNumbersAndBools; + var n := 10; + CheckData(|cInt|*n, |cInt|*n, |cInt|*n); + GenerateTests(10,tInt * n); + + var arr := IntArr(n); + arr.Replace(2,22); + arr.Replace(5,55); + arr.Replace(22,5); + arr.Replace(55,2); + CheckOutputAfterInitialSeq(arr); + end; + 'Arr_Find1': begin + FilterOnlyNumbersAndBools; + var n := 5; + CheckData(|cInt|*n, |cInt|*n, |cInt|*n); + GenerateTests(10,tInt * n); + + var a := IntArr(n); + var has2 := 2 in a; + CheckOutputAfterInitial(has2); + end; + 'Arr_Find2': begin + FilterOnlyNumbersAndBools; + var n := 5; + CheckData(|cInt|*n, |cInt|*n, |cInt|*n); + TestCount := 10; + GenerateTestData := tnum -> begin + var a := ArrRandomInteger(n,2,5); + if tnum = 2 then + a := ArrFill(n,1); + InputList.AddTestData(a); + end; + + var a := IntArr(n); + var haseven := a.FindIndex(x -> x.IsEven) <> -1; + CheckOutputAfterInitial(haseven); + end; + 'Arr_Find3': begin + FilterOnlyNumbersAndBools; + var n := 5; + CheckData(|cInt|*n, |cInt|*n, |cInt|*n); + TestCount := 10; + GenerateTestData := tnum -> begin + var a := ArrRandomInteger(n,1,99); + if tnum = 2 then + a := ArrRandomInteger(n,1,30) + else if tnum = 3 then + a := ArrRandomInteger(n,51,99); + InputList.AddTestData(a); + end; + + var a := IntArr(n); + var haseven := a.ToArray.FindIndex(x -> x in 40..50) <> -1; + CheckOutputAfterInitial(haseven); + end; + + 'Arr_Find4': begin + FilterOnlyNumbersAndBools; + var n := 3; + CheckData(|cInt|*n, |cInt|*n); + TestCount := 10; + GenerateTestData := tnum -> begin + var a := ArrRandomInteger(n,2,5); + if tnum = 2 then + a := ArrFill(n,11); + InputList.AddTestData(a); + end; + + var a := IntArr(n); + var allodd := a.All(x -> x.IsOdd); + CheckOutputAfterInitial(allodd); + end; + 'Arr_Index1': begin + FilterOnlyNumbersAndBools; + var n := 10; + CheckData(|cInt|*n, |cInt|*n); + TestCount := 10; + GenerateTestData := tnum -> begin + var a := ArrRandomInteger(n,2,5); + if tnum = 2 then + a := ArrFill(n,5); + InputList.AddTestData(a); + end; + + var a := IntArr(n); + var ind := a.FindIndex(x -> x = 2); + CheckOutputAfterInitial(ind); + end; + 'Arr_Index2': begin + FilterOnlyNumbersAndBools; + var n := 10; + CheckData(|cInt|*n, |cInt|*n); + TestCount := 10; + GenerateTestData := tnum -> begin + var a := ArrRandomInteger(n,2,5); + if tnum = 2 then + a := ArrFill(n,4); + InputList.AddTestData(a); + end; + + var a := IntArr(n); + var ind := a.FindLastIndex(x -> x = 5); + CheckOutputAfterInitial(ind); + end; + 'Arr_Index2a': begin + FilterOnlyNumbersAndBools; + var n := 10; + CheckData(|cInt|*n, |cInt|*n); + GenerateTests(10,tInt * n); + var a := IntArr(n); + var ind2 := a.IndexOf(2); + var ind5 := a.IndexOf(5); + CheckOutputAfterInitialSeq(|ind2,ind5|); + end; + 'Arr_Index3': begin + FilterOnlyNumbersAndBools; + var n := 20; + CheckData(|cInt|*n, |cInt|*n); + TestCount := 10; + GenerateTestData := tnum -> begin + var a := ArrRandomInteger(n,2,5); + a[^2] := 2; + a[^1] := 5; + InputList.AddTestData(a); + end; + + var arr := IntArr(n); + var ind2 := arr.IndexOf(2); + var ind5 := arr.IndexOf(5); + Swap(arr[ind2],arr[ind5]); + CheckOutputAfterInitialSeq(arr); + end; + 'Arr_Index4': begin + FilterOnlyNumbersAndBools; + var n := 30; + CheckData(|cInt|*n, |cInt|*n); + GenerateTests(10,tInt * n); + var arr := IntArr(n); + var ind := arr.IndexOf(2); + ind := arr.IndexOf(2,ind + 1); + CheckOutputAfterInitial(ind); + end; + + 'Arr_MinMax1': begin + FilterOnlyNumbersAndBools; + var n := 10; + CheckData(InitialOutput := |cInt|*n); + + var a := OutSliceIntArr(0,n-1); + var min := a.Min; + CheckOutputAfterInitial(min); + end; + 'Arr_MinMax2': begin + FilterOnlyNumbersAndBools; + var n := 10; + CheckData(|cInt|*n, |cInt|*n); + GenerateTests(10,tInt * n); + + var a := IntArr(n); + var max := a.Max; + CheckOutputAfterInitial(max); + end; + 'Arr_MinMax3': begin + FilterOnlyNumbersAndBools; + var n := 10; + CheckData(|cInt|*n, |cInt|*n); + GenerateTests(10,tInt * n); + + var a := IntArr(n); + CheckOutputAfterInitial(a.Min); + end; + 'Arr_MinMax4': begin + FilterOnlyNumbersAndBools; + var n := 10; + CheckData(|cInt|*n, |cInt|*n); + GenerateTests(10,tInt * n); + + var a := IntArr(n); + CheckOutputAfterInitialSeq(|a.Min,a.Max|); + end; + + 'Arr_Neighbors1': begin + FilterOnlyNumbersAndBools; + var n := 20; + CheckData(|cInt|*n, |cInt|*n); + GenerateTests(10, tInt*n); + + var a := IntArr(n); + var cnt := 0; + for var i := 0 to n-2 do + if (a[i] = 2) and (a[i+1] = 5) then + cnt += 1; + CheckOutputAfterInitial(cnt); + end; + 'Arr_MinMaxInd1': begin + var n := 10; + CheckData(|cInt|*n, |cInt|*n); + GenerateAutoTests(10); + + var a := IntArr(n); + CheckOutputAfterInitial(a.IndexMax,a.IndexMax); + end; + 'Arr_MinMaxInd2': begin + var n := 10; + CheckData(|cInt|*n, |cInt|*n); + GenerateAutoTests(10); + + var a := IntArr(n); + var acopy := Copy(a); + var indmax := a.IndexMax; + var indmin := a.IndexMin; + Swap(a[indmax],a[indmin]); + CheckOutputSeq(acopy + a); + end; + + 'Arr_Fill1': begin + FilterOnlyNumbersAndBools; + CheckData(Input := nil); + + CheckOutputSeq(ArrFill(10,1)); + end; + 'Arr_Fill2': begin + FilterOnlyNumbersAndBools; + CheckData(Input := nil); + + CheckOutputSeq(ArrFill(10,1)); + end; + 'Заполнение1','ЗаполнениеЛямбда1': begin + FilterOnlyNumbersAndBools; + CheckData(Input := Empty); + CheckOutputSeq(ArrGen(10,i->i*i)); + end; + 'Заполнение2','ЗаполнениеЛямбда2': begin + FilterOnlyNumbersAndBools; + CheckData(Input := Empty); + CheckOutputSeq(ArrGen(10,1,i->i+2)); + end; + 'ЗаполнениеПоПред1','ЗаполнениеПоПред2': begin + FilterOnlyNumbersAndBools; + CheckData(Input := Empty); + CheckOutputSeq(ArrGen(10,5,i->i+5)); + end; + 'ЗаполнениеГеом1','ЗаполнениеГеом2': begin + FilterOnlyNumbersAndBools; + CheckData(Input := Empty); + CheckOutputSeq(ArrGen(10,1,i->i*2)); + end; + 'ЗаполнениеСумма1': begin + FilterOnlyNumbersAndBools; + CheckData(Input := Empty); + CheckOutput(ArrGen(10,5,i->i+5).Sum); + end; + 'ЗаполнениеСумма2': begin + FilterOnlyNumbersAndBools; + CheckData(Input := Empty); + CheckOutput(ArrGen(10,1,i->i*2).Sum); + end; + + // 'Arr_Transf1' 'Arr_Transf1a' 'Arr_Transf2' 'Arr_Transf3' 'Arr_Transf4' 'Arr_Transf5' 'Arr_Transf7' 'Arr_Transf8' 'Arr_Transf9'- задачник + 'Arr_Transf6': begin + FilterOnlyNumbersAndBools; + var n := 10; + CheckData(|cInt|*n, |cInt|*n); + GenerateTests(10, tInt * n); + + var a := IntArr(n); + foreach var i in a.Indices do + if i.IsOdd then + a[i] := 0; + CheckOutputAfterInitialSeq(a); + end; + + 'Arr_Reverse1','Arr_Reverse2': begin + var n := 10; + CheckData(|cInt|*n, |cInt|*n); + GenerateTests(10, tInt * n); + + var a := IntArr(n); + CheckOutputAfterInitialSeq(a.Reverse); + end; + 'Arr_Reverse3': begin + var n := 10; + CheckData(|cInt|*n, |cInt|*n); + GenerateTests(10, tInt * n); + + var a := IntArr(n); + for var i:= 0 to n div 2 - 1 do + Swap(a[i],a[i + n div 2]); + CheckOutputAfterInitialSeq(a); + end; + + 'Arr_Reverse3a': begin + var n := 10; + CheckData(|cInt|*n, |cInt|*n); + + var out := IntArr(n); + var out0 := Copy(out); + Reverse(out, 0, 5); + Reverse(out, 5, 5); + CheckOutputSeq(out0 + out); + end; + + 'Arr_Count1','Arr_Count2': begin + var n := 10; + CheckData(|cInt|*n, |cInt|*n); + GenerateTests(10, tInt * n); + + var a := IntArr(n); + CheckOutputAfterInitial(a.Count(x -> x.IsEven)); + end; + 'Arr_Count3': begin + var n := 10; + CheckData(|cInt|*n, |cInt|*n); + GenerateTests(10, tInt * n); + + var a := IntArr(n); + CheckOutputAfterInitial(a.CountOf(3),a.CountOf(4),a.CountOf(5)); + end; + 'Arr_Count4': begin + var n := 30; + CheckData(|cInt|*n, |cInt|*n); + GenerateTests(10, tInt * n); + + var a := IntArr(n); + CheckOutputAfterInitialSeq(|a.CountOf(a.Min),a.CountOf(a.Max)|); + end; + + 'Arr_FindIndex1': begin + var n := 10; + CheckData(|cInt|*n, |cInt|*n); + GenerateTests(10, tInt * n); + + var a := IntArr(n); + CheckOutputAfterInitialSeq(|a.FindIndex(x-> x.IsOdd),a.FindLastIndex(x-> x.IsOdd)|); + end; + 'Arr_FindIndex2': begin + var n := 10; + CheckData(|cInt|*n, |cInt|*n); + GenerateTests(10, tInt * n); + + var a := IntArr(n); + var i1 := a.FindIndex(x -> x.IsEven); + var i2 := a.FindLastIndex(x -> x.IsOdd); + Swap(a[i1],a[i2]); + CheckOutputAfterInitialSeq(a); + end; + + 'Arr_Filter1': begin + var n := 10; + CheckData(|cInt|*n, |cInt|*n); + GenerateTests(10, tInt(1,100) * n); + + var a := IntArr(n); + CheckOutputAfterInitialSeq(a.Where(x->x<50)); + end; + 'Arr_GenFilter1': begin + CheckData(Input := Empty); + var a := ArrGen(50,1,x->x+2); + CheckOutputSeq(a.Where(x->x mod 7 = 0)); + end; + 'Arr_GenFilter2': begin + var n := 40; + CheckData(InitialOutput := |cInt|*n); + var a := ArrGen(40,1,1,(x,y)->x+y); + CheckOutputAfterInitialSeq(a.Where(x->x mod 5 = 0)); + end; + + 'Arr_Op1': begin + CheckData(Empty); + var a := |1,2,3|*5; + var b := |0| * 6 + |1| * 6; + var c := |1,2,3|*3 + |4,5,6|*3; + var d := |1| * 5 + |2| * 5 + |1| * 5 + |2| * 5; + CheckOutputSeq(a+b+c+d); + end; + + 'Arr_Slice1': begin + FilterOnlyNumbersAndBools; + var n := 10; + CheckData(InitialOutput := |cInt| * n); + var a := Arr(0..9); + CheckOutputSeq(a + a[2:6] + a[:4] + a[2:]); + end; + 'Arr_Slice2': begin + FilterOnlyNumbersAndBools; + var n := 10; + CheckData(InitialOutput := |cInt| * n); + var a := Arr(0..9); + CheckOutputSeq(a + a[:2] + a[5:] + a[1:^1]); + end; + 'Arr_Slice3': begin + FilterOnlyNumbersAndBools; + var n := 10; + CheckData(InitialOutput := |cInt| * n + |cInt| * 2); + var a := Arr(0..9); + CheckOutputSeq(a + |9| + |8| + |7| + a[^2:] + a[1:^1]) + end; + 'Arr_Slice7': begin + FilterOnlyNumbersAndBools; + var n := 10; + CheckData(InitialOutput := |cInt| * n); + var a := Arr(0..9); + CheckOutputSeq(a + a[4::-1] + a[9::-2]) + end; + 'Arr_Slice10': begin + FilterOnlyNumbersAndBools; + CheckData(Input := Empty); + var a := |6,2,4,3,6,1,7,8,2,4|; + CheckOutput(a[:5].Sum); + end; + 'Arr_Slice11': begin + FilterOnlyNumbersAndBools; + CheckData(Input := Empty); + var a := |6,2,4,3,6,1,7,8,2,4|; + CheckOutput(a[5:].Min); + end; + 'Arr_Slice12': begin + FilterOnlyNumbersAndBools; + CheckData(Input := Empty); + var a := |6,2,4,3,6,1,7,8,2,4|; + CheckOutput(a[::2].Average); + end; + + 'Arr_InsDel1': begin + FilterOnlyNumbersAndBools; + var n := 10; + var a := Arr(0..9); + CheckData(InitialOutput := |cInt| * n); + CheckOutputSeq(a + a[:5] + a[6:]); + end; + 'Arr_InsDel2': begin + FilterOnlyNumbersAndBools; + var n := 10; + var a := Arr(0..9); + CheckData(InitialOutput := |cInt| * n); + CheckOutputSeq(a + a[:5] + |333| + a[5:]); + end; + 'Arr_InsDel3': begin + FilterOnlyNumbersAndBools; + var n := 10; + var a := Arr(0..9); + CheckData(InitialOutput := |cInt| * n); + CheckOutputSeq(a + a[:1] + |555| + a[1:^1] + |555| + a[^1:]); + end; + + 'Arr_Shift1': begin + FilterOnlyNumbersAndBools; + var n := 10; + var a := Arr(0..9); + CheckData(InitialOutput := |cInt| * n); + CheckOutputSeq(a + a[1:] + |0|); + end; + 'Arr_Shift2': begin + FilterOnlyNumbersAndBools; + var n := 10; + var a := Arr(0..9); + CheckData(InitialOutput := |cInt| * n); + CheckOutputSeq(a + |0| + a[:^1]); + end; + + 'List1': begin + ClearOutputListFromSpaces; + CheckData(InitialOutput := |cInt|); + CheckOutput('Иванов','Петров','Сидоров'); + end; + 'List2': begin + FilterOnlyNumbersAndBools; + CheckData(Input := Empty); + CheckOutput(11,2,13,4,15); + end; + 'List3': begin + FilterOnlyNumbersAndBools; + CheckData(Input := Empty); + CheckOutput(1,3,5,7); + end; + 'List4': begin + FilterOnlyNumbersAndBools; + CheckData(Input := Empty); + CheckOutputSeq((1..7).Select(x->x*x)); + end; + 'List5': begin + FilterOnlyNumbersAndBools; + var n := 10; + CheckData(|cInt|*n, |cInt|*n); + GenerateAutoTests(10); + + var a := IntArr(n); + CheckOutputAfterInitialSeq(a.Where(x->x.IsEven)); + end; + 'List6': begin + FilterOnlyNumbersAndBools; + var n := 10; + CheckData(|cInt|*n, |cInt|*n); + GenerateAutoTests(10); + + var a := IntArr(n); + CheckOutputAfterInitialSeq(a.Where(x->x.IsEven)+a.Where(x->x.IsOdd)); + end; + 'List6a': begin + FilterOnlyNumbersAndBools; + CheckData(InitialInput := |cInt|*3); + GenerateAutoTests(10); + + var a := IntArr(3); + CheckOutputSeq(|1,3,5|+a); + end; + 'List6b': begin + FilterOnlyNumbersAndBools; + CheckData(Input := Empty); + CheckOutputSeq(|1,3,5,2,4,6,9,8,7|); + end; + 'List7': begin + FilterOnlyNumbersAndBools; + var n := 20; + CheckData(|cInt|*n, |cInt|*n); + GenerateAutoTests(5); + var a := IntArr(10); + var b := IntArr(10); + CheckOutputAfterInitialSeq(a.Interleave(b)); + end; + 'List8': begin + FilterOnlyNumbersAndBools; + var n := 10; + CheckData(InitialOutput := |cInt|*n); + var a := OutSliceIntArr(0,n-1); + var b := a.ToList; + b.Insert(2,555); + CheckOutputSeq(a+b); + end; + 'List9': begin + FilterOnlyNumbersAndBools; + var n := 10; + CheckData(InitialOutput := |cInt|*n); + var a := OutSliceIntArr(0,n-1); + var b := a.ToList; + if b.Count>0 then + b.RemoveAt(2); + CheckOutputSeq(a+b); + end; + 'List9a': begin + FilterOnlyNumbersAndBools; + CheckData(Input := Empty); + CheckOutputSeq((1..10)); + end; + 'List9b': begin + FilterOnlyNumbersAndBools; + var n := 10; + CheckData(InitialInput := |cInt|*n); + var a := IntArr(n); + CheckOutputSeq(a); + end; + + 'Sort1': begin + FilterOnlyNumbersAndBools; + var n := 10; + CheckData(|cInt|*n, |cInt|*n); + GenerateAutoTests(5); + var a := IntArr(n); + CheckOutputSeq(a+a.Sorted); + end; + 'Sort2': begin + FilterOnlyNumbersAndBools; + var n := 10; + CheckData(|cInt|*n, |cInt|*n); + GenerateAutoTests(5); + var a := IntArr(n); + CheckOutputSeq(a+a.SortedDescending); + end; + 'Sort3': begin + FilterOnlyNumbersAndBools; + var n := 9; + CheckData(InitialOutput := |cInt|*n); + + var a := OutSliceIntArr(0,n-1); + CheckOutputSeq(a + a.Sorted); + end; + 'BubbleSort': begin + FilterOnlyNumbersAndBools; + var n := 10; + CheckData(InitialOutput := |cInt|*n); + + var a := OutSliceIntArr(0,n-1); + var b := Copy(a); + for var j:=n-1 downto 1 do + if b[j-1] > b[j] then + Swap(b[j-1], b[j]); + CheckOutputSeq(a + b); + end; + 'BubbleSort2': begin + FilterOnlyNumbersAndBools; + var n := 9; + CheckData(InitialOutput := |cInt|*n); + + var a := OutSliceIntArr(0,n-1); + CheckOutputSeq(a+a.Sorted); + end; + end; +end; + +initialization + CheckTask := CheckTaskT; + AllTaskNames := Arr('Arr1','Arr2','Arr3','Arr4','Arr5','Arr6', + 'Arr_Sum0','Arr_Sum1','Arr_Sum2','Arr_Sum3','Arr_Sum4','Arr_CountA1','Arr_CountA2', + 'Arr_Replace1','Arr_Replace2','Arr_Find1','Arr_Find2','Arr_Find3','Arr_Find4', + 'Arr_Index1','Arr_Index2','Arr_Index2a','Arr_Index3','Arr_Index4', + 'Arr_MinMax1','Arr_MinMax2','Arr_MinMax3','Arr_MinMax4','Arr_Neighbors1','Arr_MinMaxInd1','Arr_MinMaxInd2', + 'Arr_Fill1','Arr_Fill2','Заполнение1','ЗаполнениеЛямбда1','Заполнение2','ЗаполнениеЛямбда2', + 'ЗаполнениеПоПред1','ЗаполнениеПоПред2','ЗаполнениеГеом1','ЗаполнениеГеом2','ЗаполнениеСумма1','ЗаполнениеСумма2', + 'Arr_Transf1','Arr_Transf1a','Arr_Transf2','Arr_Transf3','Arr_Transf4','Arr_Transf5','Arr_Transf7', + 'Arr_Transf8','Arr_Transf9','Arr_Transf6', + 'Arr_Reverse1','Arr_Reverse2','Arr_Reverse3','Arr_Reverse3a', + 'Arr_Count1','Arr_Count2','Arr_Count3','Arr_Count4', + 'Arr_FindIndex1','Arr_FindIndex2', + 'Arr_Filter1','Arr_GenFilter1','Arr_GenFilter2', + 'Arr_Op1', + 'Arr_Slice1','Arr_Slice2','Arr_Slice3','Arr_Slice7','Arr_Slice10','Arr_Slice11','Arr_Slice12', + 'Arr_InsDel1','Arr_InsDel2','Arr_InsDel3', + 'Arr_Shift1','Arr_Shift2', + 'List1','List2','List3','List4','List5','List6','List6a','List6b','List7','List8','List9','List9a','List9b', + 'Sort1','Sort2','Sort3', + 'BubbleSort','BubbleSort2'); +finalization +end. \ No newline at end of file diff --git a/TestSuite/CompilationSamples/TasksMatr.pas b/TestSuite/CompilationSamples/TasksMatr.pas new file mode 100644 index 000000000..303d4ce8f --- /dev/null +++ b/TestSuite/CompilationSamples/TasksMatr.pas @@ -0,0 +1,105 @@ +unit TasksMatr; + +uses LightPT; + +var AllTaskNames: array of string; + +procedure CheckTaskT(name: string); +begin + FlattenOutput; // Во всех задачах на массивы + ClearOutputListFromSpaces; // Это чтобы a.Print работал. По идее, надо писать всегда. Яне знаю задач, где пробелы в ответе + + case name of + 'ДвумерныеМассивы1': begin + ConvertStringsToNumbersInOutputList; + //FilterOnlyNumbersAndBools; + CheckOutputSeq(|5,4,5,5,2,4,3,3,5,3,5,4|); + end; + 'ДвумерныеМассивы2': begin + // Преобразовать в 6 целых по строкам + ConvertStringsToNumbersInOutputList; + CheckOutputSeq(|5,4,5,5,2,4,3,3,5,3,5,4|); + end; + 'ДвумерныеМассивы3': begin + ConvertStringsToNumbersInOutputList; + CheckData(Input := |cInt|*12); + CheckOutputSeq(InputList); + end; + 'Заполн1_Формула','Заполн2_Matr': begin + ConvertStringsToNumbersInOutputList; + CheckData(Input := Empty); + + var ob := new ObjectList; + for var i:=0 to 8 do + for var j:=0 to 8 do + ob.Add((i+1)*(j+1)); + CheckOutputSeq(ob); + end; + 'Заполн3_Шахм': begin + ConvertStringsToNumbersInOutputList; + CheckData(Input := Empty); + + var ob := new ObjectList; + for var i:=0 to 8 do + for var j:=0 to 8 do + if (i + j).IsEven then + ob.Add(1) + else ob.Add(0); + CheckOutputSeq(ob); + end; + 'SumInMatr': begin + ConvertStringsToNumbersInOutputList; + var n := 12; + CheckData(InitialInput := |cInt|*n, InitialOutput := |cInt|*n); + var res := IntArr(n).Sum; + CheckOutputAfterInitial(res); + end; + 'MaxInMatr': begin + ConvertStringsToNumbersInOutputList; + var n := 12; + CheckData(|cInt|*n, |cInt|*n); + var res := IntArr(n).Max; + CheckOutputAfterInitial(res); + end; + 'СтрокаСтолбец1','СтрокаСтолбец3': begin + ConvertStringsToNumbersInOutputList; + var n := 54; + CheckData(|cInt|*n, |cInt|*n); + + var m := MatrByRow(6,9,IntArr(n)); + CheckOutputAfterInitialSeq(m.Row(2)); + end; + 'СтрокаСтолбец2','СтрокаСтолбец4': begin + ConvertStringsToNumbersInOutputList; + var n := 54; + CheckData(|cInt|*n, |cInt|*n); + + var m := MatrByRow(6,9,IntArr(n)); + CheckOutputAfterInitialSeq(m.Col(8)); + end; + 'MaxInRow': begin + ConvertStringsToNumbersInOutputList; + var n := 54; + CheckData(|cInt|*n, |cInt|*n); + + var m := MatrByRow(6,9,IntArr(n)); + CheckOutputAfterInitial(m.Row(0).Max,m.Row(5).Min,m.Col(4).Average); + end; + 'CountInRowsCols': begin + ConvertStringsToNumbersInOutputList; + var n := 54; + CheckData(|cInt|*n, |cInt|*n); + GenerateTests(10, tInt(1,5) * n); + + var m := MatrByRow(6,9,IntArr(n)); + CheckOutputAfterInitial(m.Row(1).CountOf(2), m.Col(2).Count(x->x.IsOdd)); + end; end; +end; + +initialization + CheckTask := CheckTaskT; + AllTaskNames := Arr('ДвумерныеМассивы1','ДвумерныеМассивы2','ДвумерныеМассивы3', + 'Заполн1_Формула','Заполн2_Matr','Заполн3_Шахм','SumInMatr','MaxInMatr', + 'СтрокаСтолбец1','СтрокаСтолбец3','СтрокаСтолбец2','СтрокаСтолбец4','MaxInRow','CountInRowsCols' ); +finalization +end. \ No newline at end of file diff --git a/TestSuite/CompilationSamples/TasksStr.pas b/TestSuite/CompilationSamples/TasksStr.pas new file mode 100644 index 000000000..2492a3f13 --- /dev/null +++ b/TestSuite/CompilationSamples/TasksStr.pas @@ -0,0 +1,356 @@ +unit TasksStr; + +uses LightPT; + +var AllTaskNames: array of string; + +procedure CheckTaskT(name: string); +begin + FlattenOutput; + ClearOutputListFromSpaces; + + case name of + 'Char1': begin + CheckData(Input := Empty); + var a := Arr(word(48), word(100), word(68), word(1102), word(8594)); + CheckOutputSeq(a); + end; + 'Char2': begin + CheckData(Input := Empty); + var a := Arr(Chr(169), Chr(931), Chr(960), Chr(1105), Chr(8551), Chr(8734), Chr(8776), Chr(8986), Chr(9327), Chr(9775), Chr(9917), Chr(10054)); + CheckOutputSeq(a); + end; + 'CharTable': begin + CheckData(Input := Empty); + var obj := new ObjectList; + for var i:=32 to 1200 do + begin + Obj.Add(i); obj.Add(Chr(i)); + end; + CheckOutputSeq(obj); + end; + 'CharPredSucc': begin + CheckData(Input := |cChar|); + GenerateTests('b','c','2','y'); + var c := LightPT.Chr(0); + CheckOutput(Pred(c),Succ(c)); + end; + 'CharIs': begin + CheckData(Input := |cChar|); + GenerateTests('b','X','2','ю'); + var c := LightPT.Chr(0); + CheckOutputSeq(Arr(c.IsLetter, c.IsDigit, c.IsLower, c.IsUpper)); + end; + 'CharRange1': begin + CheckData(Input := Empty); + CheckOutputSeq(Arr('0'..'9')+Arr('a'..'z')+Arr('а'..'я')); + end; + 'CharRange2': begin + CheckData(Input := |cChar|); + GenerateTests('a','V','z','Ю','д','1'); + var c := LightPT.Chr(0); + CheckOutput(c in 'a'..'z'); + end; + 'CharRange3': begin + CheckData(Input := |cChar|); + GenerateTests('a','V','ю','A','1','Z'); + var c := LightPT.Chr(0); + CheckOutput(c in 'A'..'Z'); + end; + 'CharRange4': begin + CheckData(Input := |cChar|); + GenerateTests('a','V','z','A','1','Ю'); + var c := LightPT.Chr(0); + CheckOutput(c.ToLower in 'a'..'z'); + end; + 'CharTransform': begin + CheckData(Input := |cChar|); + var c := LightPT.Chr(0); + GenerateTests('a','V','z','A','1','Ю'); + if c.IsLower then + c := c.ToUpper + else if c.IsUpper then + c := c.ToLower; + CheckOutput(c); + end; + 'Strings1': begin + CheckData(Input := Empty); + CheckOutputSeq('трос'.ToCharArray); + end; + 'Strings2': begin + CheckData(Input := Empty); + CheckOutputSeq('сорт'.ToCharArray); + end; + 'Strings2a': begin + CheckData(Input := Empty); + CheckOutputSeq(Arr('грозы','осы','ложки','кошки')); + end; + 'Strings3': begin + CheckData(Input := Empty); + CheckOutputSeq(Arr('миг', 'мир', 'пир', 'пар')); + end; + 'Strings4': begin + CheckData(Input := Empty); + var hs := HSet('кошка','мышка','комик','комок','ножка','ножик','коржик','камыш'); + var hs1 := OutputListAsStrings.ToHashSet; + if (hs*hs1).Count >= 5 then + TaskResult := Solved + else begin + TaskResult := PartialSolution; + ColoredMessage($'Выведите еще по крайней мере {5-(hs*hs1).Count} правильных слов',MessageColorT.MsgColorGray) + end; + end; + 'Strings5': begin + CheckData(Input := Empty); + CheckOutputSeq(Arr('********************', '010101010101010101010101010101')); + end; + 'Strings6': begin + CheckData(Input := Empty); + CheckOutputSeq(Arr('кросс', 'атолл', 'Гримм', 'быстрее')); + end; + 'String13': begin + ClearOutputListFromSpaces; + CheckData(Input := Empty); + CheckOutput(9); + end; + 'String15': begin + ClearOutputListFromSpaces; + CheckData(Input := |cStr|); + var s := Str(0); + CheckOutput(s.Count(c -> c.IsLetter and c.IsLower)); + end; + 'String16': begin + ClearOutputListFromSpaces; + CheckData(Input := |cStr|); + GenerateTests('HeLLo','привет','ИНФОРМАТИКА'); + var s := Str(0); + CheckOutput(s.ToLower); + end; + 'StrCode': begin + CheckData(Input := Empty); + CheckOutputSeq(Arr('рсйгжу', 'сткдзф', 'тулеих')); + end; + 'StrDeCode': begin + CheckData(Input := Empty); + CheckOutput('мы великие взломщики шифров'); + end; + 'StrCountAlg': begin + CheckData(Input := Empty); + CheckOutputSeq(Arr(3,5,2)); + end; + 'StrGenerate1': begin + CheckData(Input := Empty); + CheckOutput('abcdefghijklmnopqrstuvwxyz'); + end; + 'StrGenerate2': begin + CheckData(Input := Empty); + CheckOutput('каждый охотник желает знать где сидит фазан'); + end; + 'StrCount': begin + ClearOutputListFromSpaces; + CheckData(Input := Empty); + CheckOutput(14,15); + end; + 'StrCountOf': begin + ClearOutputListFromSpaces; + CheckData(Input := Empty); + CheckOutput(3,5,2); + end; + 'StrCreate1': begin + ClearOutputListFromSpaces; + CheckData(Input := Empty); + CheckOutput('abcdefghijklmnopqrstuvwxyz'); + end; + 'StrCreate2': begin + ClearOutputListFromSpaces; + CheckData(Input := Empty); + CheckOutput('каждый охотник желает знать где сидит фазан'); + end; + 'StrWhere1': begin + ClearOutputListFromSpaces; + CheckData(Input := Empty); + CheckOutputSeq(Arr('каждый охотник желает знать где сидит фазан','буря мглою небо кроет вихри снежные крутя')); + end; + 'StrWhere2': begin + ClearOutputListFromSpaces; + CheckData(Input := Empty); + CheckOutputSeq(Arr('1223113221113','12112571191460')); + end; + 'StrSelect1': begin + ClearOutputListFromSpaces; + CheckData(Input := Empty); + CheckOutputSeq(Arr('вфсѐ!ндмпя!ожвп!лспжу!гйцсй!тожзоьж!лсфуѐ')); + end; + 'StrSelect2': begin + ClearOutputListFromSpaces; + CheckData(Input := Empty); + var a := Arr(1082,1072,1078,1076,1099,1081,32,1086,1093,1086,1090,1085,1080,1082,32,1078,1077,1083,1072,1077,1090,32,1079,1085,1072,1090,1100,32,1075,1076,1077,32,1089,1080,1076,1080,1090,32,1092,1072,1079,1072,1085 ); + var a1 := a.Select(x->word(x)); + CheckOutputSeq(a1); + end; + 'StrMinMax': begin + ClearOutputListFromSpaces; + CheckData(Input := Empty); + CheckOutputSeq(Arr('а','ё')); + end; + 'StrWhereSelect': begin + ClearOutputListFromSpaces; + CheckData(Input := Empty); + CheckOutput(23); + end; + 'StrAllAny1': begin + ClearOutputListFromSpaces; + CheckData(Input := Empty); + CheckOutput(True,False); + end; + 'StrAllAny2': begin + ClearOutputListFromSpaces; + CheckData(Input := Empty); + CheckOutput(True,False); + end; + 'StrEachCount1': begin + ClearOutputListFromSpaces; + CheckData(Input := Empty); + var res := 'The grass is always greener on the other side of the fence'.EachCount; + var ob := new ObjectList; + foreach var x in res.ToArray do + ob.Add(x); + CheckOutputSeq(ob); + end; + 'StrEachCount2': begin + ClearOutputListFromSpaces; + CheckData(Input := Empty); + var res := 'L1o24st tim437364e is nev567e9r fo089874u89nd041342 ag8432ai6897'.EachCount; + var ob := new ObjectList; + foreach var x in res.ToArray do + if x.Key.IsDigit then + ob.Add(x); + CheckOutputSeq(ob); + end; + 'StrOrder1': begin + ClearOutputListFromSpaces; + CheckData(Input := Empty); + CheckOutput(' adefgilmnorstuv'); + end; + 'StrOrder2': begin + ClearOutputListFromSpaces; + CheckData(Input := Empty); + CheckOutput('0','1','3','5','8'); + end; + 'ToWords1': begin + ClearOutputListFromSpaces; + CheckData(Input := Empty); + CheckOutput('головой жак звонарь как однажды сломал фонарь'); + end; + 'ToWords2': begin + ClearOutputListFromSpaces; + CheckData(Input := Empty); + CheckOutput('как жак сломал фонарь однажды звонарь головой'); + end; + 'ToWordsWhere1': begin + ClearOutputListFromSpaces; + CheckData(Input := Empty); + CheckOutput('косой кривоногий косой косой косой косой'); + end; + 'Pos1': begin + ClearOutputListFromSpaces; + CheckData(Input := Empty); + CheckOutputSeq(Arr(2,9)); + end; + 'Pos2': begin + ClearOutputListFromSpaces; + CheckData(Input := Empty); + CheckOutputSeq(Arr(7)); + end; + 'Delete1': begin + CheckData(Input := Empty); + CheckOutput('информатика'); + end; + 'Delete2': begin + CheckData(Input := Empty); + CheckOutput('программирование'); + end; + 'Delete3': begin + CheckData(Input := Empty); + CheckOutput('алгоритм'); + end; + 'Insert1': begin + CheckData(Input := Empty); + CheckOutput('Петр Первый был первым русским императором'); + end; + 'Insert2': begin + CheckData(Input := Empty); + CheckOutput('Петр первый был великим русским императором'); + end; + 'StrChange1': begin + CheckData(Input := Empty); + CheckOutput('красный коричневый желтый зеленый бирюзовый синий фиолетовый'); + end; + 'StrChange2': begin + CheckData(Input := Empty); + CheckOutput('Алекс у Мелиссы украл кораллы, а Мелисса у Алекса украла кларнет'); + end; + 'StrBorder0': begin + CheckData(Input := Empty); + CheckOutput('наклонный жирный подчеркнутый жирный жирный подчеркнутый'); + end; + 'StrBorder1': begin + CheckData(Input := Empty); + CheckOutput('наклонный жирный подчеркнутый жирный жирный подчеркнутый'); + end; + 'StrSlice1': begin + CheckData(Input := Empty); + CheckOutputSeq(Arr('Pascal','ABC','NET')); + end; + 'StrSlice2': begin + CheckData(Input := Empty); + CheckOutputSeq(Arr('клад зарыт на юго западе', 'клад зарыт на юго западе')); + end; + 'StrSlice4': begin + CheckData(Input := Empty); + CheckOutputSeq(Arr('mydocument', 'docx', 'picture', 'jpg')); + end; + 'Str_Number0': begin + CheckData(Input := Empty); + CheckOutput('оценка1', 'балл2', 'окно3'); + end; + 'Str_Number03': begin + CheckData(Input := Empty); + ClearOutputListFromSpaces; + CheckOutput(386); + end; + 'Str_Number04': begin + ClearOutputListFromSpaces; + CheckData(Input := |cInt|); + GenerateTests(2,34,567,67890); + var n := Int(0); + CheckOutput(n.ToString.Select(s->s.ToDigit).Sum); + end; + 'Str_Number05': begin + ClearOutputListFromSpaces; + CheckData(Input := Empty); + CheckOutput(31.6666666666667,27.0,42.0); + end; + 'Str_Number06': begin + ClearOutputListFromSpaces; + CheckData(Input := Empty); + CheckOutput(420); + end; + end; +end; + +initialization + CheckTask := CheckTaskT; + AllTaskNames := Arr('Char1','Char2','CharTable','CharPredSucc','CharIs', + 'CharRange1','CharRange2','CharRange3','CharRange4','CharTransform', + 'Strings1','Strings2','Strings2a','Strings3','Strings4','Strings5','Strings6','String13','String15','String16', + 'StrCode','StrDeCode','StrCountAlg','StrGenerate1','StrGenerate2','StrCount','StrCountOf', + 'StrCreate1','StrCreate2','StrWhere1','StrWhere2','StrSelect1','StrSelect2', + 'StrMinMax','StrWhereSelect','StrAllAny1','StrAllAny2','StrEachCount1','StrEachCount2', + 'StrOrder1','StrOrder2','ToWords1','ToWords2','ToWordsWhere1', + 'Pos1','Pos2','Delete1','Delete2','Delete3','Insert1','Insert2', + 'StrChange1','StrChange2','StrBorder0','StrBorder1', + 'StrSlice1','StrSlice2','StrSlice4', + 'Str_Number0','Str_Number03','Str_Number04','Str_Number05','Str_Number06' ); +finalization +end. \ No newline at end of file diff --git a/TestSuite/CompilationSamples/Turtle.pas b/TestSuite/CompilationSamples/Turtle.pas new file mode 100644 index 000000000..83d531e26 --- /dev/null +++ b/TestSuite/CompilationSamples/Turtle.pas @@ -0,0 +1,52 @@ +/// Исполнитель Черепаха +unit Turtle; + +uses GraphWPF; + +type Colors = GraphWPF.Colors; + +var + tp: Point; + a: real := 0; + dr := False; + +/// Поворачивает Черепаху на угол da по часовой стрелке +procedure Turn(da: real); +begin + a += da; +end; + +/// Продвигает Черепаху вперёд на расстояние r +procedure Forw(r: real); +begin + tp += r * Vect(Cos(DegToRad(a)),Sin(DegToRad(a))); + if dr then + LineTo(tp.X,tp.Y) + else MoveTo(tp.X,tp.Y) +end; + +/// Опускает хвост Черепахи +procedure Down := dr := True; + +/// Поднимает хвост Черепахи +procedure Up := dr := False; + +/// Устанавливает ширину линии +procedure SetWidth(w: real) := Pen.Width := w; + +/// Устанавливает цвет линии +procedure SetColor(c: GColor) := Pen.Color := c; + +/// Перемещает Черепаху в точку (x,y) +procedure ToPoint(x,y: real); +begin + tp := Pnt(x,y); + MoveTo(tp.X,tp.Y); +end; + +begin + //tp := Pnt(Window.Width / 2, Window.Height / 2); + tp := Pnt(400,300); + Pen.RoundCap := True; + MoveTo(tp.X,tp.Y); +end. \ No newline at end of file diff --git a/TestSuite/CompilationSamples/TurtleWPF.pas b/TestSuite/CompilationSamples/TurtleWPF.pas new file mode 100644 index 000000000..c96482858 --- /dev/null +++ b/TestSuite/CompilationSamples/TurtleWPF.pas @@ -0,0 +1,272 @@ +unit TurtleWPF; + +interface + +uses GraphWPF; + +/// Передвигает Черепаху вперёд на расстояние r +procedure Forw(r: real); + +/// Передвигает Черепаху назад на расстояние r +procedure Back(r: real); + +/// Поворачивает Черепаху на угол da по часовой стрелке +procedure Turn(da: real); + +/// Поворачивает Черепаху на угол da влево +procedure TurnLeft(da: real); + +/// Поворачивает Черепаху на угол da вправо +procedure TurnRight(da: real); + +/// Возвращает случайный цвет +function RandomColor: Color; + +/// Возвращает цвет по красной, зеленой и синей составляющей (в диапазоне 0..255) +function RGB(r,g,b: byte): Color; + +/// Устанавливает скорость черепашки (от 1 до 10) +procedure SetSpeed(sp: integer); + +/// Прячет Черепаху +procedure Hide; + +/// Показывает Черепаху +procedure Show; + +/// Опускает перо Черепахи +procedure Down; + +/// Поднимает перо Черепахи +procedure Up; + +/// Устанавливает ширину линии +procedure SetWidth(w: real); + +/// Устанавливает цвет линии +procedure SetColor(c: GColor); + +/// Перемещает Черепаху в точку (x,y) +procedure MoveTo(x,y: real); + +/// Сохраняет изображение, нарисованное Черепахой, в файл fname (например, 'a.png') +procedure Save(fname: string); + +type Colors = GraphWPF.Colors; + +{type turtle = static class + /// Передвигает Черепаху вперёд на расстояние r + static procedure Forw(r: real) := TurtleWPF.Forw(r); + /// Поворачивает Черепаху на угол da по часовой стрелке + static procedure Turn(da: real) := TurtleWPF.Turn(da); + /// Возвращает случайный цвет + static function RandomColor: Color := TurtleWPF.RandomColor; + /// Возвращает цвет по красной, зеленой и синей составляющей (в диапазоне 0..255) + static function RGB(r,g,b: byte): Color := TurtleWPF.RGB(r,g,b); + /// Устанавливает скорость черепашки (от 1 до 10) + static procedure SetSpeed(sp: integer) := TurtleWPF.SetSpeed(sp); + /// Прячет Черепаху + static procedure Hide := TurtleWPF.Hide; + /// Показывает Черепаху + static procedure Show := TurtleWPF.Show; + /// Опускает перо Черепахи + static procedure Down := TurtleWPF.Down; + /// Поднимает перо Черепахи + static procedure Up := TurtleWPF.Up; + /// Устанавливает ширину линии + static procedure SetWidth(w: real) := TurtleWPF.SetWidth(w); + /// Устанавливает цвет линии + static procedure SetColor(c: GColor) := TurtleWPF.SetColor(c); + /// Перемещает Черепаху в точку (x,y) + static procedure MoveTo(x,y: real) := TurtleWPF.MoveTo(x,y); + /// Сохраняет изображение, нарисованное Черепахой, в файл fname (например, 'a.png') + static procedure Save(fname: string) := TurtleWPF.Save(fname); +end;} + +implementation + +{$resource 'turtle.png'} + +uses WPFObjects,GraphWPFBase; +uses System.Windows.Media.Animation; +uses System.Windows.Media; +uses System.Windows.Media.Imaging; + +var + TurtleX: real := 400; + TurtleY: real := 300; + w := 24; // размер изображения Черепахи + +type + TurtleHelper = class(PictureWPF) + private + function CreateBitmapImageFromResource(resourcename: string): BitmapImage; + begin + var bi := new BitmapImage(); + bi.BeginInit(); + bi.StreamSource := GetResourceStream(resourcename); + bi.EndInit(); + Result := bi; + end; + procedure InitObFromResource(x,y,w,h: real; fname: string); + begin + var b := CreateBitmapImageFromResource(fname); + Rest(x,y,w,h,b); + end; + procedure AnimMoveByPE(a,b,sec: real); + begin + var v := CreateVisual; + var p := Center; + var (x,y) := (transl.X,transl.Y); + var ax := new DoubleAnimation(a + x, System.TimeSpan.FromSeconds(sec)); + var ay := new DoubleAnimation(b + y, System.TimeSpan.FromSeconds(sec)); + ax.FillBehavior := FillBehavior.Stop; + ay.FillBehavior := FillBehavior.Stop; + var transl1 := transl; + ax.Completed += (o,e) -> begin + DrawOnVisual(v,dc->dc.DrawLine(GraphWPF.Pen.PenConstruct,p,Pnt(p.X + a,p.Y + b))); + transl1.X := x + a; // transl - ошибка с лямбдами! + end; + ay.Completed += (o,e) -> begin + transl1.Y := y + b; + end; + ax.CurrentTimeInvalidated += (o,e) -> + DrawOnVisual(v,dc->dc.DrawLine(GraphWPF.Pen.PenConstruct,p,Pnt(Center.X,Center.Y))); + transl.BeginAnimation(TranslateTransform.XProperty, ax, HandoffBehavior.Compose); + transl.BeginAnimation(TranslateTransform.YProperty, ay, HandoffBehavior.Compose); + end; + public + constructor (x,y,w,h: real; fname: string) := Invoke(InitObFromResource,x,y,w,h,fname); + procedure AnimMoveByE(a,b,sec: real); + begin + Invoke(AnimMoveByPE,a,b,sec); + Sleep(Round(sec*1000 + 50)); // 50 мс - За это время анимация должна закончиться + end; + procedure AnimRotateE(a,sec: real); + begin + AnimRotate(a,sec); + Sleep(Round(sec*1000 + 50)); + end; + end; + +var t: TurtleHelper; + +var + a: real := 0; + dr := False; + speed := 10; + Window := GraphWPF.Window; + +function RandomColor := GraphWPF.RandomColor; +function RGB(r,g,b: byte) := GraphWPF.RGB(r, g, b); + +var sl := 30; + +procedure SetSpeed(sp: integer); +begin + speed := sp.Clamp(1,10); + if sp > 10 then + sl := 0 + else sl := 30; +end; + +procedure Hide; +begin + t.Visible := False; +end; + +procedure Show; +begin + t.Visible := True; +end; + +/// Поворачивает Черепаху на угол da по часовой стрелке +procedure Turn(da: real); +begin + a += da; + if speed = 10 then + begin + t.Rotate(da); + Sleep(sl); + end + else + begin + if dr then + t.AnimRotateE(da,Abs(da/(60*speed))) + else + begin + t.AnimRotate(da,Abs(da/(60*speed))); + Sleep(Round(Abs(da/(60*speed))*1000)+50); + end; + end; +end; + +procedure TurnLeft(da: real) := Turn(-da); + +procedure TurnRight(da: real) := Turn(da); + +/// Продвигает Черепаху вперёд на расстояние r +procedure Forw(r: real); +begin + var v := r * Vect(Cos(DegToRad(a)),Sin(DegToRad(a))); + var (a,b) := (v.X,v.Y); + TurtleX += a; + TurtleY += b; + if (speed = 10) or (r < 20) then + begin + if dr then + GraphWPF.LineTo(TurtleX,TurtleY) + else GraphWPF.MoveTo(TurtleX,TurtleY); + t.MoveBy(a,b); + Sleep(sl); + end + else + begin + if dr then + begin + t.AnimMoveByE(a,b,r/(50*speed)); // 450 в секунду при скорости 9 + GraphWPF.MoveTo(TurtleX,TurtleY); + end + else + begin + t.AnimMoveBy(a,b,r/(50*speed)); + Sleep(Round(r/(50*speed)*1000)+50); + GraphWPF.MoveTo(TurtleX,TurtleY); + end; + end; +end; + +procedure Back(r: real) := Forw(-r); + +/// Опускает хвост Черепахи +procedure Down := dr := True; + +/// Поднимает хвост Черепахи +procedure Up := dr := False; + +/// Устанавливает ширину линии +procedure SetWidth(w: real) := GraphWPF.Pen.Width := w; + +/// Устанавливает цвет линии +procedure SetColor(c: GColor) := GraphWPF.Pen.Color := c; + +/// Перемещает Черепаху в точку (x,y) +procedure MoveTo(x,y: real); +begin + TurtleX := x; + TurtleY := y; + GraphWPF.MoveTo(x,y); + t.Center := Pnt(x,y); +end; + +procedure Save(fname: string) := Window.Save(fname); + + +begin + Window.Title := 'Исполнитель Черепаха WPF'; + + t := new TurtleHelper(TurtleX-w/2,TurtleY-w/2,w,w,'turtle.png'); + //Pen.RoundCap := True; + MoveTo(TurtleX,TurtleY); + a -= 90; +end. \ No newline at end of file diff --git a/TestSuite/CompilationSamples/TwoPanelsWindow.pas b/TestSuite/CompilationSamples/TwoPanelsWindow.pas new file mode 100644 index 000000000..186d9578e --- /dev/null +++ b/TestSuite/CompilationSamples/TwoPanelsWindow.pas @@ -0,0 +1,109 @@ +unit TwoPanelsWindow; + +{$reference 'PresentationFramework.dll'} +{$reference 'WindowsBase.dll'} +{$reference 'PresentationCore.dll'} + +{$apptype windows} + +uses System.Windows.Controls; +uses System.Windows; +uses System.Windows.Data; +uses System.Reflection; +uses System.Collections.ObjectModel; + + +var app := new Application(); +var MainWindow := new Window; + +procedure InitWPF; +begin + MainWindow.Title := 'WPF'; + MainWindow.WindowStartupLocation := WindowStartupLocation.CenterScreen; + MainWindow.Width := 800; + MainWindow.Height := 600; + MainWindow.Show; +end; + +function GetProperties(t1: T): sequence of string; +begin + var props := t1.GetType.GetProperties; + Result := props.OrderBy(f->f.CustomAttributes.FirstOrDefault?.ToString ?? 'NoAttr').Select(f->f.Name); +end; + +var + LeftPanel: StackPanel; + RightPanel: DockPanel; + +procedure Init(); +begin + var dp := new DockPanel; + MainWindow.Content := dp; + + LeftPanel := new StackPanel(); + LeftPanel.Width := 150; + dp.Children.Add(LeftPanel); + + RightPanel := new DockPanel(); + dp.Children.Add(RightPanel); +end; + +type + ///!# + Button = class + private + btn := new System.Windows.Controls.Button; + procedure p; + begin + if Click<>nil then + Click; + end; + public + Click: procedure; + constructor (Content: string); + begin + LeftPanel.Children.Add(btn); + btn.HorizontalAlignment := HorizontalAlignment.Stretch; + btn.Margin := new Thickness(5); + btn.Content := Content; + btn.Click += procedure (sender: object; args: RoutedEventArgs) -> + begin + p; + end; + end; + end; + + ///!# + ListView = class + private + lv := new System.Windows.Controls.ListView; + public + constructor (); + begin + var gv := new GridView; + lv.View := gv; + RightPanel.Children.Add(lv); + end; + procedure Отобразить(data: sequence of T); + begin + var gv := lv.View as GridView; + var properties := GetProperties(data.First); + gv.Columns.Clear; + foreach var fld in properties do + begin + var col := new GridViewColumn; + col.Header := fld; + col.Width := 150; + col.DisplayMemberBinding := new Binding(fld); + gv.Columns.Add(col); + end; + lv.ItemsSource := data.Skip(1); + end; + end; + +initialization + InitWPF; + Init; +finalization + app.Run(); +end. \ No newline at end of file diff --git a/TestSuite/CompilationSamples/XLSX.pas b/TestSuite/CompilationSamples/XLSX.pas new file mode 100644 index 000000000..6459da698 --- /dev/null +++ b/TestSuite/CompilationSamples/XLSX.pas @@ -0,0 +1,290 @@ +unit XLSX; + +interface + +type + exCellBorder = class + IsLeft, IsRight, IsBottom, IsTop, IsDiagonal: boolean; + end; + + exCell = class + constructor(sheet: array of array of exCell; row, col: integer); + begin + _sheet := sheet; + Self.row := row; + Self.col := col; + end; + + private + row, col: integer; + _sheet: array of array of exCell; + function getBorders: (boolean, boolean, boolean, boolean);// (left,top,right,bottom) + begin + var left := Border.IsLeft or (col > 0) and _sheet[row, col - 1].Border.IsRight; + var top := Border.IsTop or (row > 0) and _sheet[row - 1, col].Border.IsBottom; + var right := Border.IsRight or (col + 1 < _sheet.First.Length) + and (_sheet[row, col + 1].Border <> nil) and _sheet[row, col + 1].Border.IsLeft; + var bottom := Border.IsBottom or (row + 1 < _sheet.Length) + and _sheet[row + 1, col].Border.IsTop; + Result := (left, top, right, bottom); + end; + + public + Border: exCellBorder; + Value: string; + property AsInt: integer read Value.ToInteger; + property Index: (integer, integer) read (row, col); + property Sheet: array of array of exCell read _sheet; + property Borders: (boolean, boolean, boolean, boolean) read getBorders; + end; + +function ReadXLSX(fileName: string): Dictionary; +function ReadXLSXAsCells(fileName: string; sheetNum: integer := 0): array of array of exCell; +function ReadXLSXAsInts(fileName: string; sheetNum: integer := 0): array of array of integer; +function ToDate(Self: string): DateTime; + +implementation + +{$reference System.IO.Compression.dll} +{$reference System.IO.Compression.FileSystem.dll} +{$reference System.Xml.dll} + +uses System.IO.Compression; +uses System.Xml,sf; + +var + numFmt, numBrd: List; + brdStyles: List; + arxiv: System.IO.Compression.ZipArchive; + shStr := new List; + DateTypeId := |14, 15, 16, 17, 22, 27, 30, 36, 50, 55, 57|.ToHS; + +function ToDate(Self: string): DateTime; +begin + Result := DateTime.Parse(Self); +end; + +function ToCR(Self: string): (integer, integer); extensionmethod; // 'AA7' -> (6,26) +begin + var clm := 0; + var row := 0; + foreach var c in Self do + if c in 'A'..'Z' then + clm := clm * 26 + (c - 'A' + 1) + else + row := row * 10 + (c - '0'); + Result := (row - 1, clm - 1); +end; + +function Load(path: string): XmlElement; +begin + if arxiv.Entries.Any(e -> (e as ZipArchiveEntry).FullName = path) then begin + var stream := arxiv.GetEntry(path).Open; + var doc := new XmlDocument(); + doc.Load(stream); + Result := doc.DocumentElement; + end; +end; + +function SheetRange(elms: XmlElement): ((int, int), (int, int)); +begin + var LU, RD: (int, int); + var dim := elms.Item['dimension']; + if dim = nil then begin // собираем габариты таблицы + var (l, u) := (maxint, maxint); + var (r, d) := (-1, -1); + foreach var node: XmlNode in elms.Item['sheetData'].ChildNodes do + begin + foreach var cell: XmlNode in node.ChildNodes do + begin + var (i, j) := cell.Attributes.GetNamedItem('r').Value.ToCR; + l := min(l, i); + u := min(u, j); + r := max(r, i); + d := max(d, j); + end + end; + LU := (l, u); + RD := (r, d); + end else begin // готовые габариты из таблицы + var ref := dim.GetAttribute('ref'); + if ':' in ref then + (LU, RD) := ref.Split(':').Sel(s -> s.ToCR) + else begin + RD := ref.ToCR; + LU := RD; + end; + end; + Result := (LU, RD); +end; + +function LoadSheet(path: string): array of array of string; +begin + var elms := Load(path); + var (LU, RD) := SheetRange(elms); + + var (w, h) := (RD[1] - LU[1] + 1, RD[0] - LU[0] + 1); + var sheet: array of array of string; + if (w < 0) or (h < 0) then + setLength(sheet, 0) + else begin + setLength(sheet, h); + for var i := 0 to h - 1 do sheet[i] := new string[w]; + + foreach var node: XmlNode in elms.Item['sheetData'].ChildNodes do + begin + foreach var cell: XmlNode in node.ChildNodes do + begin + var (i, j) := cell.Attributes.GetNamedItem('r').Value.ToCR; + i -= LU[0]; + j -= LU[1]; + var typ := cell.Attributes.GetNamedItem('t'); + var st := cell.Attributes.GetNamedItem('s'); + var shared := false; + if (typ <> nil) and (typ.Value = 's') then + shared := true; + var value := ''; + foreach var vl: XmlNode in cell.ChildNodes do + if vl.Name = 'v' then value := vl.InnerText; + if shared then + sheet[i, j] := shStr[value.ToInteger] + else if (st <> nil) and (numFmt[st.Value.ToI] in DateTypeId) then + sheet[i, j] := (new DateTime(1900, 1, 1)).AddDays(value.ToI - 2).ToString('dd.MM.yyyy') + else + sheet[i, j] := value; + end; + end; + end; + Result := sheet; +end; + +function LoadSheetAsCells(path: string): array of array of exCell; +begin + var elms := Load(path); + var (LU, RD) := SheetRange(elms); + + var (w, h) := (RD[1] - LU[1] + 1, RD[0] - LU[0] + 1); + var sheet: array of array of exCell; + if (w < 0) or (h < 0) then + setLength(sheet, 0) + else begin + setLength(sheet, h); + for var i := 0 to h - 1 do sheet[i] := new exCell[w]; + + foreach var node: XmlNode in elms.Item['sheetData'].ChildNodes do + begin + foreach var cell: XmlNode in node.ChildNodes do + begin + var (i, j) := cell.Attributes.GetNamedItem('r').Value.ToCR; + i -= LU[0]; + j -= LU[1]; + var typ := cell.Attributes.GetNamedItem('t'); + var st := cell.Attributes.GetNamedItem('s'); + var shared := false; + if (typ <> nil) and (typ.Value = 's') then + shared := true; + + var value := ''; + foreach var vl: XmlNode in cell.ChildNodes do + if vl.Name = 'v' then + value := vl.InnerText; + + var cellValue := new exCell(sheet, i, j); + sheet[i, j] := cellValue; + if st <> nil then + cellValue.Border := brdStyles[numBrd[st.Value.ToI]]; + + if shared then + cellValue.Value := shStr[value.ToInteger] + else if (st <> nil) and (numFmt[st.Value.ToI] in DateTypeId) then + cellValue.Value := (new DateTime(1900, 1, 1)).AddDays(value.ToI - 2).ToString('dd.MM.yyyy') + else + cellValue.Value := value; + end; + end; + end; + Result := sheet; +end; + +function ReadXLSXAsCells(fileName: string; sheetNum: integer): array of array of exCell; +begin + arxiv := ZipFile.OpenRead(fileName); + + // общие строки + var elms := Load('xl/sharedStrings.xml'); + if elms <> nil then + foreach var node: XmlNode in elms.ChildNodes do + shStr.Add(node.Item['t'].InnerText.Trim); + + // бордюры + elms := Load('xl/styles.xml'); + brdStyles := new List; + foreach var node: XmlNode in elms.Item['borders'].ChildNodes do + begin + var brd := new exCellBorder; + brd.IsLeft := node.Item['left'].Attributes.Count > 0; + brd.IsRight := node.Item['right'].Attributes.Count > 0; + brd.IsTop := node.Item['top'].Attributes.Count > 0; + brd.IsBottom := node.Item['bottom'].Attributes.Count > 0; + brd.IsDiagonal := node.Item['diagonal'].Attributes.Count > 0; + brdStyles.Add(brd); + end; + + // стили + numFmt := new List; + numBrd := new List; + foreach var node: XmlNode in elms.Item['cellXfs'].ChildNodes do + begin + numFmt.Add(node.Attributes.GetNamedItem('numFmtId').Value.ToI); + numBrd.Add(node.Attributes.GetNamedItem('borderId').Value.ToI); + end; + + elms := Load('xl/workbook.xml'); + foreach var node: XmlNode in elms.Item['sheets'].ChildNodes do + begin + var name := node.Attributes.GetNamedItem('name').Value; + var attrs := new List; + foreach var attr: XmlAttribute in node.Attributes do + attrs.Add(attr.Name); + var sheetId := node.Attributes.GetNamedItem('r:id').Value[4:]; + Result := LoadSheetAsCells($'xl/worksheets/sheet{sheetId}.xml'); + sheetNum -= 1; + if sheetNum = 0 then + break; + end; +end; + +function ReadXLSX(fileName: string): Dictionary; +begin + arxiv := ZipFile.OpenRead(fileName); + + // общие строки + var elms := Load('xl/sharedStrings.xml'); + if elms <> nil then + foreach var node: XmlNode in elms.ChildNodes do + shStr.Add(node.Item['t'].InnerText.Trim); + + // стили + elms := Load('xl/styles.xml'); + numFmt := new List; + foreach var node: XmlNode in elms.Item['cellXfs'].ChildNodes do + numFmt.Add(node.Attributes.GetNamedItem('numFmtId').Value.ToI); + + elms := Load('xl/workbook.xml'); + Result := new Dictionary; + foreach var node: XmlNode in elms.Item['sheets'].ChildNodes do + begin + var name := node.Attributes.GetNamedItem('name').Value; + var attrs := new List; + foreach var attr: XmlAttribute in node.Attributes do + attrs.Add(attr.Name); + var sheetId := node.Attributes.GetNamedItem('r:id').Value[4:]; + Result[name] := LoadSheet($'xl/worksheets/sheet{sheetId}.xml'); + end; +end; + + +function ReadXLSXAsInts(fileName: string; sheetNum: integer) +:= ReadXLSX(fileName).Values.Skip(sheetNum).First.Select(r -> r.Select(c -> c.ToInteger).ToArray).ToArray; + +end. \ No newline at end of file diff --git a/TestSuite/CompilationSamples/xPT4MakerNetX.pas b/TestSuite/CompilationSamples/xPT4MakerNetX.pas new file mode 100644 index 000000000..6125c6bed --- /dev/null +++ b/TestSuite/CompilationSamples/xPT4MakerNetX.pas @@ -0,0 +1,1692 @@ +{$reference System.Windows.Forms.dll} + +/// Конструктор учебных заданий для задачника Programming Taskbook. +/// Версия 1.9 от 26.03.2023 (С) М. Э. Абрамян, 2016-2023. +/// Все компоненты конструктора могут вызываться либо как классовые методы класса pt, +/// либо как обычные константы и процедуры. +unit xPT4MakerNetX; + +interface + +const + OptionAllLanguages = 1; // группа доступна для всех языков + OptionPascalLanguages = 2; // группа доступна для всех реализаций Паскаля + OptionNETLanguages = 4; // группа доступна для всех NET-языков + OptionUseAddition = 8; // группа доступна только при наличии файла дополнений + OptionHideExamples = 16; // не отображать раздел с примером верного решения + +/// Процедура, с которой должно начинаться определение нового задания. +/// Должна вызываться в процедуре с именем, начинающемся с текста Task. +/// Параметр topic определяет имя подгруппы и является необязательным. +/// Параметр tasktext содержит формулировку задания; отдельные строки +/// формулировки должны разделяться символами #13, #10 или #13#10. +procedure NewTask(topic, tasktext: string); + + +/// Процедура, с которой должно начинаться определение нового задания. +/// Должна вызываться в процедуре с именем, начинающемся с текста Task. +/// Параметр tasktext содержит формулировку задания; отдельные строки +/// формулировки должны разделяться символами #13, #10 или #13#10. +procedure NewTask(tasktext: string); + + +/// Добавляет комментарий в новой строке раздела исходных даннных. +procedure DataComm(comm: string); + +/// Добавляет данные и комментарии в новой строке раздела исходных даннных. +procedure Data(comm: string; a: object); + +/// Добавляет данные и комментарии в новой строке раздела исходных даннных. +procedure Data(comm1: string; a1: object; comm2: string); + +/// Добавляет данные и комментарии в новой строке раздела исходных даннных. +procedure Data(comm1: string; a1: object; comm2: string; a2: object); + +/// Добавляет данные и комментарии в новой строке раздела исходных даннных. +procedure Data(comm1: string; a1: object; comm2: string; a2: object; comm3: string); + +/// Добавляет данные и комментарии в новой строке раздела исходных даннных. +procedure Data(comm1: string; a1: object; comm2: string; a2: object; comm3: string; a3: object); + +/// Добавляет последовательность логических данных в раздел исходных данных. +procedure Data(seq: sequence of boolean); + +/// Добавляет последовательность целых чисел в раздел исходных данных. +procedure Data(seq: sequence of integer); + +/// Добавляет последовательность вещественных чисел в раздел исходных данных. +procedure Data(seq: sequence of real); + +/// Добавляет последовательность символов в раздел исходных данных. +procedure Data(seq: sequence of char); + +/// Добавляет последовательность строк в раздел исходных данных. +procedure Data(seq: sequence of string); + +/// Добавляет комментарий в новой строке раздела результатов. +procedure ResComm(comm: string); + +/// Добавляет данные и комментарии в новой строке раздела результатов. +procedure Res(comm: string; a: object); + +/// Добавляет данные и комментарии в новой строке раздела результатов. +procedure Res(comm1: string; a1: object; comm2: string); + +/// Добавляет данные и комментарии в новой строке раздела результатов. +procedure Res(comm1: string; a1: object; comm2: string; a2: object); + +/// Добавляет данные и комментарии в новой строке раздела результатов. +procedure Res(comm1: string; a1: object; comm2: string; a2: object; comm3: string); + +/// Добавляет данные и комментарии в новой строке раздела результатов. +procedure Res(comm1: string; a1: object; comm2: string; a2: object; comm3: string; a3: object); + +/// Добавляет последовательность логических данных в раздел результатов. +procedure Res(seq: sequence of boolean); + +/// Добавляет последовательность целых чисел в раздел результатов. +procedure Res(seq: sequence of integer); + +/// Добавляет последовательность вещественных чисел в раздел результатов. +procedure Res(seq: sequence of real); + +/// Добавляет последовательность символов в раздел результатов. +procedure Res(seq: sequence of char); + +/// Добавляет последовательность строк в раздел результатов. +procedure Res(seq: sequence of string); + +/// Задает минимальную ширину поля вывода для числовых данных +/// (числа выравниваются по правому краю поля вывода, +/// т.е. при необходимости дополняются слева пробелами). +/// Если n не лежит в диапазоне 0..10, то вызов процедуры игнорируется. +/// По умолчанию минимальная ширина поля вывода полагается равной 0. +procedure SetWidth(n: integer); + +/// Задает формат отображения вещественных чисел: +/// с фиксированной точкой и n дробными знаками при n > 0, +/// с плавающей точкой и n дробными знаками при n < 0, +/// с плавающей точкой и 6 дробными знаками при n = 0. +/// Если n по модулю превосходит 10, то вызов процедуры игнорируется. +/// По умолчанию устанавливается формат с фиксированной точкой +/// и 2 дробными знаками. +procedure SetPrecision(n: integer); + +/// Задает количество тестовых запусков, выполняемых +/// для проверки правильности программы (от 2 до 10). +/// По умолчанию число тестовых запусков полагается равным 5. +procedure SetTestCount(n: integer); + +/// Задает минимально необходимое количество элементов +/// исходных данных, которое требуется ввести для правильного +/// решения задачи в случае текущего набора исходных данных. +/// При отсутствии процедуры предполагается, +/// что для правильного решения надо ввести все исходные данные. +procedure SetRequiredDataCount(n: integer); + +/// Возвращает номер текущего тестового запуска +/// (запуски нумеруются от 1). +function CurrentTest: integer; + +/// Генерирует случайное целое число в диапазоне от M до N включительно. +/// Если M >= N, то возвращает M. +function Random(M, N: integer): integer; + +/// Генерирует случайное вещественное число на промежутке [A, B). +/// Если промежуток [A, B) пуст, то возвращает A. +function Random(A, B: real): real; + +/// Генерирует случайное вещественное число на промежутке [A, B) +/// с одним дробным знаком и случайной добавкой порядка 1e-7. +/// Если промежуток [A, B) пуст, то возвращает A, округленное +/// до одного дробного знака и снабженное добавкой порядка 1e-7. +function Random1(A, B: real): real; + +/// Генерирует случайное вещественное число на промежутке [A, B) +/// с двумя дробными знаками и случайной добавкой порядка 1e-7. +/// Если промежуток [A, B) пуст, то возвращает A, округленное +/// до двух дробных знаков и снабженное добавкой порядка 1e-7. +function Random2(A, B: real): real; + +/// Генерирует случайную строку длины len, состоящую +/// из цифр и строчных (т.е. маленьких) латинских букв. +function RandomName(len: integer): string; + +/// Создает новую группу с кратким описанием GroupDescription, +/// информацией об авторе GroupAuthor и набором необязательных опций, объединяемых операцией or. +/// Имя группы определяется по имени библиотеки (путем отбрасывания префикса xPT4 +/// и возможных суффиксов _ru или _en). +/// В группу включаются задания, определенные в процедурах, имена которых начинаются с текста Task. +/// Процедура NewGroup должна быть вызвана в процедуре inittaskgroup без параметров, которую +/// необходимо описать в библиотеке с группой заданий (все буквы в имени inittaskgroup - строчные). +procedure NewGroup(GroupDescription, GroupAuthor: string; Options: integer := 0); + +/// Создает новую группу с кратким описанием GroupDescription, английским описанием GroupEnDescription, +/// информацией об авторе GroupAuthor и набором необязательных опций, объединяемых операцией or. +/// Имя группы определяется по имени библиотеки (путем отбрасывания префикса PT4 +/// и возможных суффиксов _ru или _en). +/// В группу включаются задания, определенные в процедурах, имена которых начинаются с текста Task. +/// Процедура NewGroup должна быть вызвана в процедуре inittaskgroup без параметров, которую +/// необходимо описать в библиотеке с группой заданий (все буквы в имени inittaskgroup - строчные). +procedure NewGroup(GroupDescription, GroupEnDescription, GroupAuthor: string; Options: integer := 0); + +/// Обеспечивает регистрацию созданной группы в электронном задачнике. +/// Процедура ActivateNET(S) должна быть вызвана в процедуре activate(S: string), +/// которую необходимо описать в библиотеке с группой заданий (все буквы в имени activate - строчные). +procedure ActivateNET(S: string); + +/// Импортирует в создаваемую группу существующее задание +/// из группы GroupName с номером TaskNumber. Должна вызываться +/// в процедуре с именем, начинающемся с текста Task. +procedure UseTask(GroupName: string; TaskNumber: integer); + +/// Импортирует в создаваемую группу существующее задание +/// из группы GroupName с номером TaskNumber. Должна вызываться +/// в процедуре с именем, начинающемся с текста Task. +procedure UseTask(GroupName: string; TaskNumber: integer; TopicDescription: string); + +/// Возвращает массив из 116 русских слов. +function GetWords: array of string; +/// Возвращает массив из 116 английских слов. +function GetEnWords: array of string; +/// Возвращает массив из 61 русского предложения. +function GetSentences: array of string; +/// Возвращает массив из 61 английского предложения. +function GetEnSentences: array of string; +/// Возвращает массив из 85 русских многострочных текстов. +/// Строки текста разделяются символами #13#10. +/// В конце текста символы #13#10 отсутствуют. +function GetTexts: array of string; +/// Возвращает массив из 85 английских многострочных текстов. +/// Строки текста разделяются символами #13#10. +/// В конце текста символы #13#10 отсутствуют. +function GetEnTexts: array of string; + +/// Возвращает случайное русское слово из массива, +/// входящего в конструктор учебных заданий. +function RandomWord: string; +/// Возвращает случайное английское слово из массива, +/// входящего в конструктор учебных заданий. +function RandomEnWord: string; +/// Возвращает случайное русское предложение из массива, +/// входящего в конструктор учебных заданий. +function RandomSentence: string; +/// Возвращает случайное английское предложение из массива, +/// входящего в конструктор учебных заданий. +function RandomEnSentence: string; +/// Возвращает случайный русский многострочный текст из массива, +/// входящего в конструктор учебных заданий. +/// Строки текста разделяются символами #13#10. +/// В конце текста символы #13#10 отсутствуют. +function RandomText: string; +/// Возвращает случайный английский многострочный текст из массива, +/// входящего в конструктор учебных заданий. +/// Строки текста разделяются символами #13#10. +/// В конце текста символы #13#10 отсутствуют. +function RandomEnText: string; + + +/// Добавляет в задание исходный файл целых чисел +/// с именем FileName и отображает его содержимое +/// в разделе исходных данных. +procedure DataFileInteger(FileName: string); +/// Добавляет в задание исходный файл вещественных чисел +/// с именем FileName и отображает его содержимое +/// в разделе исходных данных. +procedure DataFileReal(FileName: string); +/// Добавляет в задание исходный символьный файл +/// с именем FileName и отображает его содержимое +/// в разделе исходных данных. Символы должны +/// храниться в файле в однобайтной кодировке. +procedure DataFileChar(FileName: string); +/// Добавляет в задание исходный строковый файл +/// с элементами типа ShortString и именем FileName +/// и отображает его содержимое в разделе исходных данных. +/// Длина элементов файла не должна превосходить 70 символов. +/// Строки должны храниться в файле в однобайтной кодировке. +procedure DataFileString(FileName: string); +/// Добавляет в задание исходный текстовый файл +/// с именем FileName и отображает его содержимое +/// в разделе исходных данных. Длина каждой строки +/// текстового файла не должна превосходить 70 символов. +/// Текст должен храниться в файле в однобайтной кодировке. +procedure DataText(FileName: string; LineCount: integer := 4); + +/// Добавляет в задание результирующий файл целых чисел +/// с именем FileName и отображает его содержимое в разделе результатов. +procedure ResFileInteger(FileName: string); +/// Добавляет в задание результирующий файл вещественных чисел +/// с именем FileName и отображает его содержимое в разделе результатов. +procedure ResFileReal(FileName: string); +/// Добавляет в задание результирующий символьный файл +/// с именем FileName и отображает его содержимое в разделе результатов. +/// Символы должны храниться в файле в однобайтной кодировке. +procedure ResFileChar(FileName: string); +/// Добавляет в задание результирующий строковый файл +/// с элементами типа ShortString и именем FileName +/// и отображает его содержимое в разделе результатов. +/// Длина элементов файла не должна превосходить 70 символов. +/// Строки должны храниться в файле в однобайтной кодировке. +procedure ResFileString(FileName: string); +/// Добавляет в задание результирующий текстовый файл +/// с именем FileName и отображает его содержимое в разделе результатов. +/// Длина каждой строки текстового файла не должна превосходить 70 символов. +/// Текст должен храниться в файле в однобайтной кодировке. +procedure ResText(FileName: string; LineCount: integer := 5); + +type pt = class + private + constructor Create; + begin + end; + public +/// Дополнительная опция для процедуры NewGroup: +/// группа доступна для всех языков. + class function OptionAllLanguages: integer; + begin + result := xPT4MakerNetX.OptionAllLanguages; + end; +/// Дополнительная опция для процедуры NewGroup: +/// группа доступна для всех реализаций языка Pascal. + class function OptionPascalLanguages: integer; + begin + result := xPT4MakerNetX.OptionPascalLanguages; + end; +/// Дополнительная опция для процедуры NewGroup: +/// группа доступна для всех NET-языков. + class function OptionNETLanguages: integer; + begin + result := xPT4MakerNetX.OptionNETLanguages; + end; +/// Дополнительная опция для процедуры NewGroup: +/// группа доступна только при наличии связанного с ней файла дополнений. + class function OptionUseAddition: integer; + begin + result := xPT4MakerNetX.OptionUseAddition; + end; +/// Дополнительная опция для процедуры NewGroup: +/// в заданиях данной группы не будет отображаться пример верного решения. + class function OptionHideExamples: integer; + begin + result := xPT4MakerNetX.OptionHideExamples; + end; +/// Процедура, с которой должно начинаться определение нового задания. +/// Должна вызываться в процедуре с именем, начинающемся с текста Task. +/// Параметр topic определяет имя подгруппы (является необязательным). +/// Параметр tasktext содержит формулировку задания; отдельные строки +/// формулировки должны разделяться символами #13, #10 или #13#10. +class procedure NewTask(topic, tasktext: string); +begin + xPT4MakerNetX.NewTask(topic, tasktext); +end; + +/// Процедура, с которой должно начинаться определение нового задания. +/// Должна вызываться в процедуре с именем, начинающемся с текста Task. +/// Параметр tasktext содержит формулировку задания; отдельные строки +/// формулировки должны разделяться символами #13, #10 или #13#10. +class procedure NewTask(tasktext: string); +begin + xPT4MakerNetX.NewTask(tasktext); +end; + +/// Добавляет комментарий в новой строке раздела исходных даннных. +class procedure DataComm(comm: string); +begin + xPT4MakerNetX.DataComm(comm); +end; +/// Добавляет данные и комментарии в новой строке раздела исходных даннных. +class procedure Data(comm: string; a: object); +begin + xPT4MakerNetX.Data(comm, a); +end; +/// Добавляет данные и комментарии в новой строке раздела исходных даннных. +class procedure Data(comm1: string; a1: object; comm2: string); +begin + xPT4MakerNetX.Data(comm1, a1, comm2); +end; +/// Добавляет данные и комментарии в новой строке раздела исходных даннных. +class procedure Data(comm1: string; a1: object; comm2: string; a2: object); +begin + xPT4MakerNetX.Data(comm1, a1, comm2, a2); +end; +/// Добавляет данные и комментарии в новой строке раздела исходных даннных. +class procedure Data(comm1: string; a1: object; comm2: string; a2: object; comm3: string); +begin + xPT4MakerNetX.Data(comm1, a1, comm2, a2, comm3); +end; +/// Добавляет данные и комментарии в новой строке раздела исходных даннных. +class procedure Data(comm1: string; a1: object; comm2: string; a2: object; comm3: string; a3: object); +begin + xPT4MakerNetX.Data(comm1, a1, comm2, a2, comm3, a3); +end; +/// Добавляет последовательность логических данных в раздел исходных данных. +class procedure Data(seq: sequence of boolean); +begin + xPT4MakerNetX.Data(seq); +end; +/// Добавляет последовательность целых чисел в раздел исходных данных. +class procedure Data(seq: sequence of integer); +begin + xPT4MakerNetX.Data(seq); +end; +/// Добавляет последовательность вещественных чисел в раздел исходных данных. +class procedure Data(seq: sequence of real); +begin + xPT4MakerNetX.Data(seq); +end; +/// Добавляет последовательность символов в раздел исходных данных. +class procedure Data(seq: sequence of char); +begin + xPT4MakerNetX.Data(seq); +end; +/// Добавляет последовательность строк в раздел исходных данных. +class procedure Data(seq: sequence of string); +begin + xPT4MakerNetX.Data(seq); +end; + +/// Добавляет комментарий в новой строке раздела результатов. +class procedure ResComm(comm: string); +begin + xPT4MakerNetX.ResComm(comm); +end; +/// Добавляет данные и комментарии в новой строке раздела результатов. +class procedure Res(comm: string; a: object); +begin + xPT4MakerNetX.Res(comm, a); +end; +/// Добавляет данные и комментарии в новой строке раздела результатов. +class procedure Res(comm1: string; a1: object; comm2: string); +begin + xPT4MakerNetX.Res(comm1, a1, comm2); +end; +/// Добавляет данные и комментарии в новой строке раздела результатов. +class procedure Res(comm1: string; a1: object; comm2: string; a2: object); +begin + xPT4MakerNetX.Res(comm1, a1, comm2, a2); +end; +/// Добавляет данные и комментарии в новой строке раздела результатов. +class procedure Res(comm1: string; a1: object; comm2: string; a2: object; comm3: string); +begin + xPT4MakerNetX.Res(comm1, a1, comm2, a2, comm3); +end; +/// Добавляет данные и комментарии в новой строке раздела результатов. +class procedure Res(comm1: string; a1: object; comm2: string; a2: object; comm3: string; a3: object); +begin + xPT4MakerNetX.Res(comm1, a1, comm2, a2, comm3, a3); +end; +/// Добавляет последовательность логических данных в раздел результатов. +class procedure Res(seq: sequence of boolean); +begin + xPT4MakerNetX.Res(seq); +end; +/// Добавляет последовательность целых чисел в раздел результатов. +class procedure Res(seq: sequence of integer); +begin + xPT4MakerNetX.Res(seq); +end; +/// Добавляет последовательность вещественных чисел в раздел результатов. +class procedure Res(seq: sequence of real); +begin + xPT4MakerNetX.Res(seq); +end; +/// Добавляет последовательность символов в раздел результатов. +class procedure Res(seq: sequence of char); +begin + xPT4MakerNetX.Res(seq); +end; +/// Добавляет последовательность строк в раздел результатов. +class procedure Res(seq: sequence of string); +begin + xPT4MakerNetX.Res(seq); +end; + +/// Задает минимальную ширину поля вывода для числовых данных +/// (числа выравниваются по правому краю поля вывода, +/// т.е. при необходимости дополняются слева пробелами). +/// Если n не лежит в диапазоне 0..10, то вызов процедуры игнорируется. +/// По умолчанию минимальная ширина поля вывода полагается равной 0. +class procedure SetWidth(n: integer); +begin + xPT4MakerNetX.SetWidth(n); +end; +/// Задает формат отображения вещественных чисел: +/// с фиксированной точкой и n дробными знаками при n > 0, +/// с плавающей точкой и n дробными знаками при n < 0, +/// с плавающей точкой и 6 дробными знаками при n = 0. +/// Если n по модулю превосходит 10, то вызов процедуры игнорируется. +/// По умолчанию устанавливается формат с фиксированной точкой +/// и 2 дробными знаками. +class procedure SetPrecision(n: integer); +begin + xPT4MakerNetX.SetPrecision(n); +end; +/// Задает количество тестовых запусков, выполняемых +/// для проверки правильности программы (от 2 до 10). +/// По умолчанию число тестовых запусков полагается равным 5. +class procedure SetTestCount(n: integer); +begin + xPT4MakerNetX.SetTestCount(n); +end; +/// Задает минимально необходимое количество элементов +/// исходных данных, которое требуется ввести для правильного +/// решения задачи в случае текущего набора исходных данных. +/// При отсутствии процедуры предполагается, +/// что для правильного решения надо ввести все исходные данные. +class procedure SetRequiredDataCount(n: integer); +begin + xPT4MakerNetX.SetRequiredDataCount(n); +end; +/// Возвращает номер текущего тестового запуска +/// (запуски нумеруются от 1). +class function CurrentTest: integer; +begin + result := xPT4MakerNetX.CurrentTest; +end; + +/// Генерирует случайное целое число в диапазоне от M до N включительно. +/// Если M >= N, то возвращает M. +class function Random(M, N: integer): integer; +begin + result := xPT4MakerNetX.Random(M, N); +end; +/// Генерирует случайное вещественное число на промежутке [A, B). +/// Если промежуток [A, B) пуст, то возвращает A. +class function Random(A, B: real): real; +begin + result := xPT4MakerNetX.Random(A, B); +end; +/// Генерирует случайное вещественное число на промежутке [A, B) +/// с одним дробным знаком и случайной добавкой порядка 1e-7. +/// Если промежуток [A, B) пуст, то возвращает A, округленное +/// до одного дробного знака и снабженное добавкой порядка 1e-7. +class function Random1(A, B: real): real; +begin + result := xPT4MakerNetX.Random1(A, B); +end; +/// Генерирует случайное вещественное число на промежутке [A, B) +/// с двумя дробными знаками и случайной добавкой порядка 1e-7. +/// Если промежуток [A, B) пуст, то возвращает A, округленное +/// до двух дробных знаков и снабженное добавкой порядка 1e-7. +class function Random2(A, B: real): real; +begin + result := xPT4MakerNetX.Random2(A, B); +end; +/// Генерирует случайную строку длины len, состоящую +/// из цифр и строчных (т.е. маленьких) латинских букв. +class function RandomName(len: integer): string; +begin + result := xPT4MakerNetX.RandomName(len); +end; + +/// Создает новую группу с кратким описанием GroupDescription, +/// информацией об авторе GroupAuthor и набором необязательных опций, объединяемых операцией or. +/// Имя группы определяется по имени библиотеки (путем отбрасывания префикса xPT4 +/// и возможных суффиксов _ru или _en). +/// В группу включаются задания, определенные в процедурах, имена которых начинаются с текста Task. +/// Процедура NewGroup должна быть вызвана в процедуре inittaskgroup без параметров, которую +/// необходимо описать в библиотеке с группой заданий (все буквы в имени inittaskgroup - строчные). +class procedure NewGroup(GroupDescription, GroupAuthor: string; Options: integer := 0); +begin + xPT4MakerNetX.NewGroup(GroupDescription, GroupAuthor, Options); +end; +/// Создает новую группу с кратким описанием GroupDescription, английским описанием GroupEnDescription, +/// информацией об авторе GroupAuthor и набором необязательных опций, объединяемых операцией or. +/// Имя группы определяется по имени библиотеки (путем отбрасывания префикса PT4 +/// и возможных суффиксов _ru или _en). +/// В группу включаются задания, определенные в процедурах, имена которых начинаются с текста Task. +/// Процедура NewGroup должна быть вызвана в процедуре inittaskgroup без параметров, которую +/// необходимо описать в библиотеке с группой заданий (все буквы в имени inittaskgroup - строчные). +class procedure NewGroup(GroupDescription, GroupEnDescription, GroupAuthor: string; Options: integer := 0); +begin + xPT4MakerNetX.NewGroup(GroupDescription, GroupEnDescription, GroupAuthor, Options); +end; +/// Обеспечивает регистрацию созданной группы в электронном задачнике. +/// Процедура ActivateNET(S) должна быть вызвана в процедуре activate(S: string), +/// которую необходимо описать в библиотеке с группой заданий (все буквы в имени activate - строчные). +class procedure ActivateNET(S: string); +begin + xPT4MakerNetX.ActivateNET(S); +end; +/// Импортирует в создаваемую группу существующее задание +/// из группы GroupName с номером TaskNumber. Должна вызываться +/// в процедуре с именем, начинающемся с текста Task. +class procedure UseTask(GroupName: string; TaskNumber: integer); +begin + xPT4MakerNetX.UseTask(GroupName, TaskNumber); +end; +/// Импортирует в создаваемую группу существующее задание +/// из группы GroupName с номером TaskNumber. Должна вызываться +/// в процедуре с именем, начинающемся с текста Task. +class procedure UseTask(GroupName: string; TaskNumber: integer; TopicDescription: string); +begin + xPT4MakerNetX.UseTask(GroupName, TaskNumber, TopicDescription); +end; +/// Возвращает массив из 116 русских слов. +class function GetWords: array of string; +begin + result := xPT4MakerNetX.GetWords; +end; +/// Возвращает массив из 116 английских слов. +class function GetEnWords: array of string; +begin + result := xPT4MakerNetX.GetEnWords; +end; +/// Возвращает массив из 61 русского предложения. +class function GetSentences: array of string; +begin + result := xPT4MakerNetX.GetSentences; +end; +/// Возвращает массив из 61 английского предложения. +class function GetEnSentences: array of string; +begin + result := xPT4MakerNetX.GetEnSentences; +end; +/// Возвращает массив из 85 русских многострочных текстов. +/// Строки текста разделяются символами #13#10. +/// В конце текста символы #13#10 отсутствуют. +class function GetTexts: array of string; +begin + result := xPT4MakerNetX.GetTexts; +end; +/// Возвращает массив из 85 английских многострочных текстов. +/// Строки текста разделяются символами #13#10. +/// В конце текста символы #13#10 отсутствуют. +class function GetEnTexts: array of string; +begin + result := xPT4MakerNetX.GetEnTexts; +end; +/// Возвращает случайное русское слово из массива, +/// входящего в конструктор учебных заданий. +class function RandomWord: string; +begin + result := xPT4MakerNetX.RandomWord; +end; +/// Возвращает случайное английское слово из массива, +/// входящего в конструктор учебных заданий. +class function RandomEnWord: string; +begin + result := xPT4MakerNetX.RandomEnWord; +end; +/// Возвращает случайное русское предложение из массива, +/// входящего в конструктор учебных заданий. +class function RandomSentence: string; +begin + result := xPT4MakerNetX.RandomSentence; +end; +/// Возвращает случайное английское предложение из массива, +/// входящего в конструктор учебных заданий. +class function RandomEnSentence: string; +begin + result := xPT4MakerNetX.RandomEnSentence; +end; +/// Возвращает случайный русский многострочный текст из массива, +/// входящего в конструктор учебных заданий. +/// Строки текста разделяются символами #13#10. +/// В конце текста символы #13#10 отсутствуют. +class function RandomText: string; +begin + result := xPT4MakerNetX.RandomText; +end; +/// Возвращает случайный английский многострочный текст из массива, +/// входящего в конструктор учебных заданий. +/// Строки текста разделяются символами #13#10. +/// В конце текста символы #13#10 отсутствуют. +class function RandomEnText: string; +begin + result := xPT4MakerNetX.RandomEnText; +end; + +/// Добавляет в задание исходный файл целых чисел +/// с именем FileName и отображает его содержимое +/// в разделе исходных данных. +class procedure DataFileInteger(FileName: string); +begin + xPT4MakerNetX.DataFileInteger(FileName); +end; +/// Добавляет в задание исходный файл вещественных чисел +/// с именем FileName и отображает его содержимое +/// в разделе исходных данных. +class procedure DataFileReal(FileName: string); +begin + xPT4MakerNetX.DataFileReal(FileName); +end; +/// Добавляет в задание исходный символьный файл +/// с именем FileName и отображает его содержимое +/// в разделе исходных данных. Символы должны +/// храниться в файле в однобайтной кодировке. +class procedure DataFileChar(FileName: string); +begin + xPT4MakerNetX.DataFileChar(FileName); +end; +/// Добавляет в задание исходный строковый файл +/// с элементами типа ShortString и именем FileName +/// и отображает его содержимое в разделе исходных данных. +/// Длина элементов файла не должна превосходить 70 символов. +/// Строки должны храниться в файле в однобайтной кодировке. +class procedure DataFileString(FileName: string); +begin + xPT4MakerNetX.DataFileString(FileName); +end; +/// Добавляет в задание исходный текстовый файл +/// с именем FileName и отображает его содержимое +/// в разделе исходных данных. Длина каждой строки +/// текстового файла не должна превосходить 70 символов. +/// Текст должен храниться в файле в однобайтной кодировке. +class procedure DataText(FileName: string; LineCount: integer := 4); +begin + xPT4MakerNetX.DataText(FileName); +end; + +/// Добавляет в задание результирующий файл целых чисел +/// с именем FileName и отображает его содержимое в разделе результатов. +class procedure ResFileInteger(FileName: string); +begin + xPT4MakerNetX.ResFileInteger(FileName); +end; +/// Добавляет в задание результирующий файл вещественных чисел +/// с именем FileName и отображает его содержимое в разделе результатов. +class procedure ResFileReal(FileName: string); +begin + xPT4MakerNetX.ResFileReal(FileName); +end; +/// Добавляет в задание результирующий символьный файл +/// с именем FileName и отображает его содержимое в разделе результатов. +/// Символы должны храниться в файле в однобайтной кодировке. +class procedure ResFileChar(FileName: string); +begin + xPT4MakerNetX.ResFileChar(FileName); +end; +/// Добавляет в задание результирующий строковый файл +/// с элементами типа ShortString и именем FileName +/// и отображает его содержимое в разделе результатов. +/// Длина элементов файла не должна превосходить 70 символов. +/// Строки должны храниться в файле в однобайтной кодировке. +class procedure ResFileString(FileName: string); +begin + xPT4MakerNetX.ResFileString(FileName); +end; +/// Добавляет в задание результирующий текстовый файл +/// с именем FileName и отображает его содержимое в разделе результатов. +/// Длина каждой строки текстового файла не должна превосходить 70 символов. +/// Текст должен храниться в файле в однобайтной кодировке. +class procedure ResText(FileName: string; LineCount: integer := 5); +begin + xPT4MakerNetX.ResText(FileName); +end; +end; + + +implementation +{$reference system.windows.forms.dll} +uses System.Reflection, xPT4TaskMakerNET, System.Windows.Forms, System; + +const + alphabet = '0123456789abcdefghijklmnopqrstuvwxyz'; + ErrMes1 = 'Error: Раздел размером более 5 строк не может содержать файловые данные.'; + ErrMes2 = 'Error: При наличии файловых данных раздел не может содержать более 5 строк.'; + ErrMes3 = 'Error: Количество исходных данных превысило 200.'; + ErrMes4 = 'Error: Количество результирующих данных превысило 200.'; + ErrMes5 = 'Error: При определении задания первой должна вызываться процедура NewTask.'; + ErrMes6 = 'Error: При определении задания не указаны исходные данные.'; + ErrMes7 = 'Error: При определении задания не указаны результирующие данные.'; + +var + yd, yr, ye, nd, nr, pr, wd: integer; + nt, ut, fd, fr: boolean; + fmt: string; + tasks := new List(100); + +procedure Show(s: string); +begin + MessageBox.Show(s, 'Error', MessageBoxButtons.OK, MessageBoxIcon.Error); +end; + +function ErrorMessage(s: string): string; +begin + result := Copy(s + new string(' ', 100), 1, 78); +end; + +procedure ErrorInfo(s: string); +begin + xPT4TaskMakerNET.TaskText('\B'+ErrorMessage(s)+'\b', 0, ye); + ye := ye + 1; + if ye > 5 then ye := 0; +end; + +function CheckTT: boolean; +begin + result := ut; + if not nt then + begin + NewTask(''); + ErrorInfo(ErrMes5); + end; +end; + +function RandomName(len: integer): string; +begin + result := ArrRandom(len, 1, alphabet.Length) + .Select(e -> alphabet[e]).JoinIntoString(''); +end; + +procedure SetPrecision(n: integer); +begin + if CheckTT then exit; + if abs(n) > 10 then exit; + pr := n; + if n < 0 then + begin + fmt := 'e' + IntToStr(-n); + n := 0; + end + else if n = 0 then + fmt := 'e6' + else + fmt := 'f' + IntToStr(n); + xPT4TaskMakerNET.SetPrecision(n); +end; + +procedure SetWidth(n: integer); +begin + if (n >= 0) and (n <= 20) then + wd := n; +end; + +procedure NewTask(topic, tasktext: string); +begin + if nt then exit; + xPT4TaskMakerNET.CreateTask(topic); + xPT4TaskMakerNET.TaskText(tasktext); + nt := true; // вызвана процедура NewTask + ut := false; // было подключено существующее задание (процедурой UseTask) + ye := 1; // текущий номер строки для вывода сообщения об ошибке + yd := 0; // текущий номер строки в разделе исходных данных + yr := 0; // текущий номер строки в разделе результатов + nd := 0; // количество элементов исходных данных + nr := 0; // количество элементов результирующих данных + fd := false; // наличие файловых данных в разделе исходных данных + fr := false; // наличие файловых данных в разделе результатов + pr := 2; // текущая точность вывода вещественных данных + fmt := 'f2'; // текущий формат вывода вещественных данных + wd := 0; // текущая ширина поля вывода для чисел +end; + +function wreal(w: integer; x: real): integer; +begin + result := w; + if w = 0 then + begin + result := Format('{0,0:' + fmt + '}', x).Length; + if (pr <= 0) and (x >= 0) then + result := result + 1; + end; +end; + +function winteger(w: integer; x: integer): integer; +begin + result := w; + if w = 0 then + result := IntToStr(x).Length; +end; + +procedure NewTask(tasktext: string); +begin + NewTask('', tasktext); +end; + +procedure Data(s: string; a: object; x, y, w: integer); +begin + if (y > 5) and fd then + begin + ErrorInfo(ErrMes2); + exit; + end; + inc(nd); + if nd > 200 then + begin + ErrorInfo(ErrMes3); + exit; + end; + if a is boolean then + DataB(s, boolean(a), x, y) + else if a is integer then + DataN(s, integer(a), x, y, winteger(w, integer(a))) + else if a is real then + DataR(s, real(a), x, y, wreal(w, real(a))) + else if a is char then + DataC(s, char(a), x, y) + else if a is string then + DataS(s, string(a), x, y) + else + DataComment(Copy(s + '!WrongType:' + a.GetType.Name, 1, 38), x, y); +end; + +procedure Res(s: string; a: object; x, y, w: integer); +begin + if (y > 5) and fr then + begin + ErrorInfo(ErrMes2); + exit; + end; + inc(nr); + if nr > 200 then + begin + ErrorInfo(ErrMes4); + exit; + end; + if a is boolean then + ResultB(s, boolean(a), x, y) + else if a is integer then + ResultN(s, integer(a), x, y, winteger(w, integer(a))) + else if a is real then + ResultR(s, real(a), x, y, wreal(w, real(a))) + else if a is char then + ResultC(s, char(a), x, y) + else if a is string then + ResultS(s, string(a), x, y) + else + ResultComment(Copy(s + '!WrongType:' + a.GetType.Name, 1, 38), x, y); +end; + +procedure DataComm(comm: string); +begin + if CheckTT then exit; + inc(yd); + DataComment(comm, 0, yd); +end; + +procedure Data(comm: string; a: object); +begin + if CheckTT then exit; + inc(yd); + Data(comm, a, 0, yd, wd); +end; + +procedure Data(comm1: string; a1: object; comm2: string); +begin + if CheckTT then exit; + inc(yd); + Data(comm1, a1, xLeft, yd, wd); + DataComment(comm2, xRight, yd); +end; + +procedure Data(comm1: string; a1: object; comm2: string; a2: object); +begin + if CheckTT then exit; + inc(yd); + Data(comm1, a1, xLeft, yd, wd); + Data(comm2, a2, xRight, yd, wd); +end; + +procedure Data(comm1: string; a1: object; comm2: string; a2: object; comm3: string); +begin + if CheckTT then exit; + inc(yd); + Data(comm1, a1, xLeft, yd, wd); + Data(comm2, a2, 0, yd, wd); + DataComment(comm3, xRight, yd); +end; + +procedure Data(comm1: string; a1: object; comm2: string; a2: object; comm3: string; a3: object); +begin + if CheckTT then exit; + inc(yd); + Data(comm1, a1, xLeft, yd, wd); + Data(comm2, a2, 0, yd, wd); + Data(comm3, a3, xRight, yd, wd); +end; + +procedure Data(seq: sequence of boolean); +begin + if CheckTT then exit; + var n := seq.Count; + if n = 0 then exit; + inc(yd); + var w := 5; + var wmax := 80 div (w + 2); + if n > wmax then + n := wmax; + var i := 0; + foreach var e in seq do + begin + inc(i); + if i > wmax then + begin + inc(yd); + i := 1; + end; + Data('', e, Center(i, n, w, 2), yd, w); + end; +end; + +procedure Data(seq: sequence of integer); +begin + if CheckTT then exit; + var n := seq.Count; + if n = 0 then exit; + inc(yd); + var w := wd; + if w = 0 then + w := seq.Select(e -> IntToStr(e)).Max(e -> e.Length); + var wmax := 80 div (w + 2); + if n > wmax then + n := wmax; + var i := 0; + foreach var e in seq do + begin + inc(i); + if i > wmax then + begin + inc(yd); + i := 1; + end; + Data('', e, Center(i, n, w, 2), yd, w); + end; +end; + +procedure Data(seq: sequence of real); +begin + if CheckTT then exit; + var n := seq.Count; + if n = 0 then exit; + inc(yd); + var w := wd; + if w = 0 then + w := seq.Select(e -> wreal(0, e)(*Format('{0,0:'+fmt+'}', e)*)).Max; + var wmax := 80 div (w + 2); + if n > wmax then + n := wmax; + var i := 0; + foreach var e in seq do + begin + inc(i); + if i > wmax then + begin + inc(yd); + i := 1; + end; + Data('', e, Center(i, n, w, 2), yd, w); + end; +end; + +procedure Data(seq: sequence of char); +begin + if CheckTT then exit; + var n := seq.Count; + if n = 0 then exit; + inc(yd); + var w := 3; + var wmax := 80 div (w + 2); + if n > wmax then + n := wmax; + var i := 0; + foreach var e in seq do + begin + inc(i); + if i > wmax then + begin + inc(yd); + i := 1; + end; + Data('', e, Center(i, n, w, 2), yd, w); + end; +end; + +procedure Data(seq: sequence of string); +begin + if CheckTT then exit; + var n := seq.Count; + if n = 0 then exit; + inc(yd); + var w := seq.Max(e -> e.Length) + 2; + var wmax := 80 div (w + 2); + if n > wmax then + n := wmax; + var i := 0; + foreach var e in seq do + begin + inc(i); + if i > wmax then + begin + inc(yd); + i := 1; + end; + Data('', e, Center(i, n, w, 2), yd, w); + end; +end; + +procedure ResComm(comm: string); +begin + if CheckTT then exit; + inc(yr); + ResultComment(comm, 0, yr); +end; + +procedure Res(comm: string; a: object); +begin + if CheckTT then exit; + inc(yr); + Res(comm, a, 0, yr, wd); +end; + +procedure Res(comm1: string; a1: object; comm2: string); +begin + if CheckTT then exit; + inc(yr); + Res(comm1, a1, xLeft, yr, wd); + ResultComment(comm2, xRight, yr); +end; + +procedure Res(comm1: string; a1: object; comm2: string; a2: object); +begin + if CheckTT then exit; + inc(yr); + Res(comm1, a1, xLeft, yr, wd); + Res(comm2, a2, xRight, yr, wd); +end; + +procedure Res(comm1: string; a1: object; comm2: string; a2: object; comm3: string); +begin + if CheckTT then exit; + inc(yr); + Res(comm1, a1, xLeft, yr, wd); + Res(comm2, a2, 0, yr, wd); + ResultComment(comm3, xRight, yr); +end; + +procedure Res(comm1: string; a1: object; comm2: string; a2: object; comm3: string; a3: object); +begin + if CheckTT then exit; + inc(yr); + Res(comm1, a1, xLeft, yr, wd); + Res(comm2, a2, 0, yr, wd); + Res(comm3, a3, xRight, yr, wd); +end; + +procedure Res(seq: sequence of boolean); +begin + if CheckTT then exit; + var n := seq.Count; + if n = 0 then exit; + inc(yr); + var w := 5; + var wmax := 80 div (w + 2); + if n > wmax then + n := wmax; + var i := 0; + foreach var e in seq do + begin + inc(i); + if i > wmax then + begin + inc(yr); + i := 1; + end; + Res('', e, Center(i, n, w, 2), yr, w); + end; +end; + +procedure Res(seq: sequence of integer); +begin + if CheckTT then exit; + var n := seq.Count; + if n = 0 then exit; + inc(yr); + var w := wd; + if w = 0 then + w := seq.Select(e -> IntToStr(e)).Max(e -> e.Length); + var wmax := 80 div (w + 2); + if n > wmax then + n := wmax; + var i := 0; + foreach var e in seq do + begin + inc(i); + if i > wmax then + begin + inc(yr); + i := 1; + end; + Res('', e, Center(i, n, w, 2), yr, w); + end; +end; + +procedure Res(seq: sequence of real); +begin + if CheckTT then exit; + var n := seq.Count; + if n = 0 then exit; + inc(yr); + var w := wd; + if w = 0 then + w := seq.Select(e -> wreal(0, e)).Max; + var wmax := 80 div (w + 2); + if n > wmax then + n := wmax; + var i := 0; + foreach var e in seq do + begin + inc(i); + if i > wmax then + begin + inc(yr); + i := 1; + end; + Res('', e, Center(i, n, w, 2), yr, w); + end; +end; + +procedure Res(seq: sequence of char); +begin + if CheckTT then exit; + var n := seq.Count; + if n = 0 then exit; + inc(yr); + var w := 3; + var wmax := 80 div (w + 2); + if n > wmax then + n := wmax; + var i := 0; + foreach var e in seq do + begin + inc(i); + if i > wmax then + begin + inc(yr); + i := 1; + end; + Res('', e, Center(i, n, w, 2), yr, w); + end; +end; + +procedure Res(seq: sequence of string); +begin + if CheckTT then exit; + var n := seq.Count; + if n = 0 then exit; + inc(yr); + var w := seq.Max(e -> e.Length) + 2; + var wmax := 80 div (w + 2); + if n > wmax then + n := wmax; + var i := 0; + foreach var e in seq do + begin + inc(i); + if i > wmax then + begin + inc(yr); + i := 1; + end; + Res('', e, Center(i, n, w, 2), yr, w); + end; +end; + + +procedure ActivateNET(S: string); +begin + xPT4TaskMakerNET.ActivateNET(S); +end; + +procedure RunTask(num: integer); +var ut0: boolean; +begin + try + try + if (num > 0) and (num <= tasks.Count) then + tasks[num - 1].Invoke(nil, nil); + finally + nt := false; + ut0 := ut; + ut := false; + end; + except + on e: TargetInvocationException do + begin + ErrorInfo('Error ' + + e.InnerException.GetType.Name + ': ' + + e.InnerException.message); + end; + end; + if ut0 then exit; + if (nd = 0) and not fd then + DataS('\B'+Copy(ErrorMessage(ErrMes6),1,76)+'\b', '', 1, 1); + if (nr = 0) and not fr then + ResultS('\B'+Copy(ErrorMessage(ErrMes7),1,76)+'\b', '', 1, 1); +end; + +function GetGroupName(assname: string; var libname: string): string; +begin + libname := copy(assname, 1, pos(',', assname)-1); + result := libname; + var p := pos('_', libname); + if p > 0 then + delete(result, p, 100); // удаление суффикса, определяющего язык интерфейса + delete(result, 1, 4); // удаление префикса xPT4 +end; + +function AcceptedLanguage(opt: integer): boolean; +begin + var lang := CurrentLanguage; + result := (lang = lgPascalABCNET) + or (opt and OptionAllLanguages = OptionAllLanguages) + or (lang and lgNET <> 0) and (opt and OptionNETLanguages = OptionNETLanguages) + or (lang and lgPascal = lgPascal) and (opt and OptionPascalLanguages = OptionPascalLanguages); +end; + +procedure NewGroup(GroupDescription, GroupAuthor: string; Options: integer); +begin + NewGroup(GroupDescription, '', GroupAuthor, Options); +end; + +procedure NewGroup(GroupDescription, GroupEnDescription, GroupAuthor: string; Options: integer); +begin + if not AcceptedLanguage(Options) then + exit; // недопустимый текущий язык + var ass := Assembly.GetCallingAssembly; + var LibName := ''; + var GroupName := GetGroupName(ass.FullName, LibName); + tasks.Clear; + var GroupKey := 'GK'; + foreach var e in ass.GetType(LibName + '.' + LibName).GetMethods.OrderBy(e -> e.Name.ToUpper) do //2018.08 + if e.Name.ToUpper.StartsWith('TASK') then + begin + tasks.Add(e); + GroupKey := GroupKey + Copy(e.Name, 5, 100); + end; + if tasks.Count = 0 then + begin + Show('Группа ' + GroupName + ' не содержит заданий'#13#10+ + '(имена процедур с заданиями должны начинаться с текста "Task").'); + exit; + end; + if tasks.Count > 999 then + begin + Show('Группа ' + GroupName + ' содержит более 999 заданий.'); + exit; + end; + GroupKey := Copy(GroupKey, 1, 30); + if Options and OptionUseAddition = OptionUseAddition then + GroupKey := GroupKey + '#UseAddition#'; + if Options and OptionHideExamples = OptionHideExamples then + GroupKey := GroupKey + '#HideExamples#'; + if GroupEnDescription.Trim <> '' then + GroupKey := GroupKey + '#EnTopic<' + GroupEnDescription.Trim + '>#'; + CreateGroup(GroupName, GroupDescription, GroupAuthor, + GroupKey, tasks.Count, RunTask); +end; + + +procedure SetTestCount(n: integer); +begin + if CheckTT then exit; + xPT4TaskMakerNET.SetTestCount(n); +end; + +procedure SetRequiredDataCount(n: integer); +begin + if CheckTT then exit; + xPT4TaskMakerNET.SetRequiredDataCount(n); +end; + +function Random(M, N: integer): integer; +begin + result := xPT4TaskMakerNET.RandomN(M, N); +end; + +function Random(A, B: real): real; +begin + result := xPT4TaskMakerNET.RandomR(A, B); +end; + +function Random1(A, B: real): real; +begin + result := Random(Round(a*10), Round(b*10)) / 10 + + Random * 1.0e-7; +end; + +function Random2(A, B: real): real; +begin + result := Random(Round(a*100), Round(b*100)) / 100 + + Random * 1.0e-7; +end; + +function CurrentTest: integer; +begin + if CheckTT then exit; + result := xPT4TaskMakerNET.CurrentTest; +end; + +procedure UseTask(GroupName: string; TaskNumber: integer); +begin + if ut then exit; + xPT4TaskMakerNET.UseTask(GroupName, TaskNumber); + ut := true; +end; + +procedure UseTask(GroupName: string; TaskNumber: integer; TopicDescription: string); +begin + if ut then exit; + xPT4TaskMakerNET.UseTask(GroupName, TaskNumber, TopicDescription); + ut := true; +end; + +function GetWords: array of string; +begin + Result := ArrGen(WordCount, i -> WordSample(i)); +end; + +function RandomWord: string; +begin + Result := WordSample(RandomN(0, WordCount - 1)); +end; + +function GetEnWords: array of string; +begin + Result := ArrGen(EnWordCount, i -> EnWordSample(i)); +end; + +function RandomEnWord: string; +begin + Result := EnWordSample(RandomN(0, EnWordCount - 1)); +end; + +function GetSentences: array of string; +begin + Result := ArrGen(SentenceCount, i -> SentenceSample(i)); +end; + +function RandomSentence: string; +begin + Result := SentenceSample(RandomN(0, SentenceCount - 1)); +end; + +function GetEnSentences: array of string; +begin + Result := ArrGen(EnSentenceCount, i -> EnSentenceSample(i)); +end; + +function RandomEnSentence: string; +begin + Result := EnSentenceSample(RandomN(0, EnSentenceCount - 1)); +end; + +function GetTexts: array of string; +begin + Result := ArrGen(TextCount, i -> TextSample(i)); +end; + +function RandomText: string; +begin + Result := TextSample(RandomN(0, TextCount - 1)); +end; + +function GetEnTexts: array of string; +begin + Result := ArrGen(EnTextCount, i -> EnTextSample(i)); +end; + +function RandomEnText: string; +begin + Result := EnTextSample(RandomN(0, EnTextCount - 1)); +end; + +procedure DataFileInteger(FileName: string); +begin + if CheckTT then exit; + inc(yd); + if yd > 5 then + begin + DataComm('\B'+ErrorMessage(ErrMes1)+'\b'); + exit; + end; + var w := 0; + try + var f: file of integer; + Reset(f, FileName); + while not EOF(f) do + begin + var a: integer; + read(f, a); + var s := IntToStr(a); + if s.Length > w then + w := s.Length; + end; + Close(f); + except + on ex: Exception do + begin + DataComm('\B'+ErrorMessage('FileError(' + FileName + '): ' + ex.Message)+'\b'); + exit; + end; + end; + fd := true; + DataFileN(FileName, yd, w + 2); +end; + +procedure DataFileReal(FileName: string); +begin + if CheckTT then exit; + inc(yd); + if yd > 5 then + begin + DataComm('\B'+ErrorMessage(ErrMes1)+'\b'); + exit; + end; + var w := 0; + try + var f: file of real; + Reset(f, FileName); + while not EOF(f) do + begin + var a: real; + read(f, a); + var s := wreal(0, a); + if s > w then + w := s; + end; + Close(f); + except + on ex: Exception do + begin + DataComm('\B'+ErrorMessage('FileError(' + FileName + '): ' + ex.Message)+'\b'); + exit; + end; + end; + fd := true; + DataFileR(FileName, yd, w + 2); +end; + +procedure DataFileChar(FileName: string); +begin + if CheckTT then exit; + inc(yd); + if yd > 5 then + begin + DataComm('\B'+ErrorMessage(ErrMes1)+'\b'); + exit; + end; + fd := true; + DataFileC(FileName, yd, 5); +end; + +procedure DataFileString(FileName: string); +begin + + if CheckTT then exit; + inc(yd); + if yd > 5 then + begin + DataComm('\B'+ErrorMessage(ErrMes1)+'\b'); + exit; + end; + var w := 0; + try + var f: file of ShortString; + Reset(f, FileName); + while not EOF(f) do + begin + var a: ShortString; + read(f, a); + if Length(a) > w then + w := Length(a); + end; + Close(f); + except + on ex: Exception do + begin + DataComm('\B'+ErrorMessage('FileError(' + FileName + '): ' + ex.Message)+'\b'); + exit; + end; + end; + fd := true; + DataFileS(FileName, yd, w + 4); + +end; + +procedure DataText(FileName: string; LineCount: integer); +begin + if CheckTT then exit; + inc(yd); + if yd > 5 then + begin + DataComm('\B'+ErrorMessage(ErrMes1)+'\b'); + exit; + end; + fd := true; + var yd2 := yd + LineCount - 1; + if yd2 > 5 then yd2 := 5; + DataFileT(FileName, yd, yd2); + yd := yd2; +end; + +procedure ResFileInteger(FileName: string); +begin + if CheckTT then exit; + inc(yr); + if yr > 5 then + begin + ResComm('\B'+ErrorMessage(ErrMes1)+'\b'); + exit; + end; + var w := 0; + try + var f: file of integer; + Reset(f, FileName); + while not EOF(f) do + begin + var a: integer; + read(f, a); + var s := IntToStr(a); + if s.Length > w then + w := s.Length; + end; + Close(f); + except + on ex: Exception do + begin + ResComm('\B'+ErrorMessage('FileError(' + FileName + '): ' + ex.Message)+'\b'); + exit; + end; + end; + fr := true; + ResultFileN(FileName, yr, w + 2); +end; + +procedure ResFileReal(FileName: string); +begin + if CheckTT then exit; + ResComm(fmt); + inc(yr); + if yr > 5 then + begin + ResComm('\B'+ErrorMessage(ErrMes1)+'\b'); + exit; + end; + var w := 0; + try + var f: file of real; + Reset(f, FileName); + while not EOF(f) do + begin + var a: real; + read(f, a); + var s := wreal(0, a); + if s > w then + w := s; + end; + Close(f); + except + on ex: Exception do + begin + ResComm('\B'+ErrorMessage('FileError(' + FileName + '): ' + ex.Message)+'\b'); + exit; + end; + end; + fr := true; + ResultFileR(FileName, yr, w + 2); +end; + +procedure ResFileChar(FileName: string); +begin + if CheckTT then exit; + inc(yr); + if yr > 5 then + begin + ResComm('\B'+ErrorMessage(ErrMes1)+'\b'); + exit; + end; + fr := true; + ResultFileC(FileName, yr, 5); +end; + +procedure ResFileString(FileName: string); +begin + if CheckTT then exit; + inc(yr); + if yr > 5 then + begin + ResComm('\B'+ErrorMessage(ErrMes1)+'\b'); + exit; + end; + var w := 0; + try + var f: file of ShortString; + Reset(f, FileName); + while not EOF(f) do + begin + var a: ShortString; + read(f, a); + if Length(a) > w then + w := Length(a); + end; + Close(f); + except + on ex: Exception do + begin + ResComm('\B'+ErrorMessage('FileError(' + FileName + '): ' + ex.Message)+'\b'); + exit; + end; + end; + fr := true; + ResultFileS(FileName, yr, w + 4); +end; + +procedure ResText(FileName: string; LineCount: integer); +begin + if CheckTT then exit; + inc(yr); + if yr > 5 then + begin + ResComm('\B'+ErrorMessage(ErrMes1)+'\b'); + exit; + end; + fr := true; + var yr2 := yr + LineCount - 1; + if yr2 > 5 then yr2 := 5; + ResultFileT(FileName, yr, yr2); + yr := yr2; +end; + +end. \ No newline at end of file diff --git a/TestSuite/CompilationSamples/xPT4TaskMakerNET.pas b/TestSuite/CompilationSamples/xPT4TaskMakerNET.pas new file mode 100644 index 000000000..98151f0e9 --- /dev/null +++ b/TestSuite/CompilationSamples/xPT4TaskMakerNET.pas @@ -0,0 +1,1233 @@ +{$reference System.Windows.Forms.dll} + +/// Конструктор для электронного задачника Programming Taskbook 4.23 + +unit xPT4TaskMakerNET; + +//------------------------------------------------------------------------------ +// Конструктор для электронного задачника Programming Taskbook 4.23 +//------------------------------------------------------------------------------ +// Модуль для создания NET-библиотек с группами заданий в системе PascalABC.NET +// +// Copyright (c) 2013-2023 М.Э.Абрамян +// Электронный задачник Programming Taskbook Copyright (c) М.Э.Абрамян,1998-2023 +//------------------------------------------------------------------------------ + + +interface + +const + + xCenter = 0; + xLeft = 100; + xRight = 200; + + SampleError = '#ERROR?'; + MaxLineCount = 50; + + lgPascal = $0000001; + lgPascalABCNET = $0000401; + lgPascalNET = $0000400; + lgPascalABCNET_flag + = $0000400; // добавлено в версии 4.14 + lgVB = $0000002; + lgCPP = $0000004; + lg1C = $0000040; + lgPython = $0000080; + lgPython3 = $1000080; // добавлено в версии 4.14 + lgPython3_flag = $1000000; // добавлено в версии 4.14 + lgCS = $0000100; + lgVBNET = $0000200; + lgJava = $0010000; // добавлено в версии 4.11 + lgRuby = $0020000; // добавлено в версии 4.12 + lgWithPointers = $000003D; + lgWithObjects = $0FFFF80; // изменено в версии 4.22 + lgNET = $000FF00; + lgAll = $0FFFFFF; // изменено в версии 4.10 + lgFS = $0000800; // добавлено в версии 4.19 + lgJulia = $0040000; // добавлено в версии 4.22 + lgC = $0000008; // добавлено в версии 4.23 + +type + +/// Процедурный тип, используемый при создании групп заданий + TInitTaskProc = procedure(N: integer); + +/// Указатель на узел динамической структуры + PNode = ^TNode; + +/// Узел динамической структуры + TNode = record + Data: integer; + Next: PNode; + Prev: PNode; + Left: PNode; + Right: PNode; + Parent: PNode; + end; + +/// Добавляет к задачнику новую группу заданий с указанными характеристиками +procedure CreateGroup(GroupName, GroupDescription, GroupAuthor, GroupKey: string; + TaskCount: integer; InitTaskProc: TInitTaskProc); + +/// Добавляет к создаваемой группе задание из другой группы +procedure UseTask(GroupName: string; TaskNumber: integer); + +/// Добавляет к создаваемой группе задание из другой группы +procedure UseTask(GroupName: string; TaskNumber: integer; TopicDescription: string); // добавлено в версии 4.19 + +/// Должна указываться первой при определении нового задания +procedure CreateTask(SubgroupName: string); overload; + + +/// Должна указываться первой при определении нового задания +procedure CreateTask; overload; + +/// Должна указываться первой при определении нового задания +/// (вариант для параллельного режима задачника) +procedure CreateTask(SubgroupName: string; var ProcessCount: integer); overload; + +/// Должна указываться первой при определении нового задания +/// (вариант для параллельного режима задачника) +procedure CreateTask(var ProcessCount: integer); overload; + +/// Позволяет определить текущий язык программирования, выбранный для задачника +/// Возвращает значения, связанные с константами lgXXX +function CurrentLanguage: integer; + +/// Возвращает двухбуквенную строку с описанием текущей локали +/// (в даной версии возвращается либо 'ru', либо 'en') +function CurrentLocale: string; + +/// Возвращает номер текущей версии задачника в формате 'd.dd' +/// (для версий, меньших 4.10, возвращает '4.00') +function CurrentVersion: string; // добавлено в версии 4.10 + +//----------------------------------------------------------------------------- + +/// Добавляет к формулировке задания строку +procedure TaskText(S: string; X, Y: integer); + +/// Определяет все строки формулировки задания +/// (в параметре S отдельные строки формулировки +/// должны разделяться символами #13, #10 или парой #13#10; +/// начальные и конечные пробелы в строках удаляются, +/// пустые строки в формулировку не включаются) +procedure TaskText(S: string); // добавлено в версии 4.11 + +//----------------------------------------------------------------------------- + +/// Добавляет к исходным данным элемент логического типа с комментарием +procedure DataB(Cmt: string; B: boolean; X, Y: integer); + +/// Добавляет к исходным данным элемент логического типа +procedure DataB(B: boolean; X, Y: integer); // добавлено в версии 4.11 + +/// Добавляет к исходным данным целочисленный элемент с комментарием +procedure DataN(Cmt: string; N: integer; X, Y, W: integer); + +/// Добавляет к исходным данным целочисленный элемент +procedure DataN(N: integer; X, Y, W: integer); // добавлено в версии 4.11 + +/// Добавляет к исходным данным два целочисленных элемента с общим комментарием +procedure DataN2(Cmt: string; N1, N2: integer; X, Y, W: integer); + +/// Добавляет к исходным данным два целочисленных элемента +procedure DataN2(N1, N2: integer; X, Y, W: integer); // добавлено в версии 4.11 + +/// Добавляет к исходным данным три целочисленных элемента с общим комментарием +procedure DataN3(Cmt: string; N1, N2, N3: integer; X, Y, W: integer); + +/// Добавляет к исходным данным три целочисленных элемента +procedure DataN3(N1, N2, N3: integer; X, Y, W: integer); // добавлено в версии 4.11 + +/// Добавляет к исходным данным вещественный элемент с комментарием +procedure DataR(Cmt: string; R: real; X, Y, W: integer); + +/// Добавляет к исходным данным вещественный элемент +procedure DataR(R: real; X, Y, W: integer); // добавлено в версии 4.11 + +/// Добавляет к исходным данным два вещественных элемента с общим комментарием +procedure DataR2(Cmt: string; R1, R2: real; X, Y, W: integer); + +/// Добавляет к исходным данным два вещественных элемента +procedure DataR2(R1, R2: real; X, Y, W: integer); // добавлено в версии 4.11 + +/// Добавляет к исходным данным три вещественных элемента с общим комментарием +procedure DataR3(Cmt: string; R1, R2, R3: real; X, Y, W: integer); + +/// Добавляет к исходным данным три вещественных элемента +procedure DataR3(R1, R2, R3: real; X, Y, W: integer); // добавлено в версии 4.11 + +/// Добавляет к исходным данным символьный элемент с комментарием +procedure DataC(Cmt: string; C: char; X, Y: integer); + +/// Добавляет к исходным данным символьный элемент +procedure DataC(C: char; X, Y: integer); // добавлено в версии 4.11 + +/// Добавляет к исходным данным строковый элемент с комментарием +procedure DataS(Cmt: string; S: string; X, Y: integer); + +/// Добавляет к исходным данным строковый элемент +procedure DataS(S: string; X, Y: integer); // добавлено в версии 4.11 + +/// Добавляет к исходным данным элемент типа PNode с комментарием +procedure DataP(Cmt: string; NP: integer; X, Y: integer); + +/// Добавляет к исходным данным элемент типа PNode +procedure DataP(NP: integer; X, Y: integer); // добавлено в версии 4.11 + +/// Добавляет комментарий в область исходных данных +procedure DataComment(Cmt: string; X, Y: integer); + +//----------------------------------------------------------------------------- + +/// Добавляет к результирующим данным элемент логического типа с комментарием +procedure ResultB(Cmt: string; B: boolean; X, Y: integer); + +/// Добавляет к результирующим данным элемент логического типа +procedure ResultB(B: boolean; X, Y: integer); // добавлено в версии 4.11 + +/// Добавляет к результирующим данным целочисленный элемент с комментарием +procedure ResultN(Cmt: string; N: integer; X, Y, W: integer); + +/// Добавляет к результирующим данным целочисленный элемент +procedure ResultN(N: integer; X, Y, W: integer); // добавлено в версии 4.11 + +/// Добавляет к результирующим данным два целочисленных элемента с общим комментарием +procedure ResultN2(Cmt: string; N1, N2: integer; X, Y, W: integer); + +/// Добавляет к результирующим данным два целочисленных элемента +procedure ResultN2(N1, N2: integer; X, Y, W: integer); // добавлено в версии 4.11 + +/// Добавляет к результирующим данным три целочисленных элемента с общим комментарием +procedure ResultN3(Cmt: string; N1, N2, N3: integer; X, Y, W: integer); + +/// Добавляет к результирующим данным три целочисленных элемента +procedure ResultN3(N1, N2, N3: integer; X, Y, W: integer); // добавлено в версии 4.11 + +/// Добавляет к результирующим данным вещественный элемент с комментарием +procedure ResultR(Cmt: string; R: real; X, Y, W: integer); + +/// Добавляет к результирующим данным вещественный элемент +procedure ResultR(R: real; X, Y, W: integer); // добавлено в версии 4.11 + +/// Добавляет к результирующим данным два вещественных элемента с общим комментарием +procedure ResultR2(Cmt: string; R1, R2: real; X, Y, W: integer); + +/// Добавляет к результирующим данным два вещественных элемента +procedure ResultR2(R1, R2: real; X, Y, W: integer); // добавлено в версии 4.11 + +/// Добавляет к результирующим данным три вещественных элемента с общим комментарием +procedure ResultR3(Cmt: string; R1, R2, R3: real; X, Y, W: integer); + +/// Добавляет к результирующим данным три вещественных элемента +procedure ResultR3(R1, R2, R3: real; X, Y, W: integer); // добавлено в версии 4.11 + +/// Добавляет к результирующим данным символьный элемент с комментарием +procedure ResultC(Cmt: string; C: char; X, Y: integer); + +/// Добавляет к результирующим данным символьный элемент +procedure ResultC(C: char; X, Y: integer); // добавлено в версии 4.11 + +/// Добавляет к результирующим данным строковый элемент с комментарием +procedure ResultS(Cmt: string; S: string; X, Y: integer); + +/// Добавляет к результирующим данным строковый элемент +procedure ResultS(S: string; X, Y: integer); // добавлено в версии 4.11 + +/// Добавляет к результирующим данным элемент типа PNode с комментарием +procedure ResultP(Cmt: string; NP: integer; X, Y: integer); + +/// Добавляет к результирующим данным элемент типа PNode +procedure ResultP(NP: integer; X, Y: integer); // добавлено в версии 4.11 + +/// Добавляет комментарий в область результирующих данных +procedure ResultComment(Cmt: string; X, Y: integer); + +//----------------------------------------------------------------------------- + +/// Задает число дробных знаков при отображении вещественных чисел +procedure SetPrecision(N: integer); + +/// Задает число исходных данных, минимально необходимое +/// для нахождения правильных результирующих данных +procedure SetRequiredDataCount(N: integer); + +/// Задает число тестовых испытаний (от 2 до 9), при успешном +/// прохождении которых задание будет считаться выполненным +procedure SetTestCount(N: integer); + +/// Возвращает горизонтальную координату, начиная с которой следует выводить I-й элемент из набора, +/// содержащего N элементов, при условии, что ширина каждого элемента равна W, а между элементами +/// надо указывать B пробелов (элементы нумеруются от 1) +function Center(I, N, W, B: integer): integer; + +/// Возвращает случайное целое число, лежащее +/// в диапазоне от M до N включительно. Если указанный +/// диапазон пуст, то возвращает M. +function RandomN(M, N: integer): integer; // добавлено в версии 4.11 + +/// Возвращает случайное вещественное число, лежащее +/// на полуинтервале [A, B). Если указанный полуинтервал +/// пуст, то возвращает A. +function RandomR(A, B: real): real; // добавлено в версии 4.11 + +/// Возвращает порядковый номер текущего тестового запуска +/// (учитываются только успешные тестовые запуски). Если ранее успешных +/// запусков не было, то возвращает 1. Если задание уже выполнено +/// или запущено в демонстрационном режиме, то возвращает 0. +/// При использовании предыдущих версий задачника (до 4.10 включительно) +/// всегда возвращает 0. +function CurrentTest: integer; // добавлено в версии 4.11 + +//----------------------------------------------------------------------------- + +/// Добавляет к исходным данным двоичный файл с целочисленными элементами (file of integer) +procedure DataFileN(FileName: string; Y, W: integer); + +/// Добавляет к исходным данным двоичный файл с вещественными элементами (file of real) +procedure DataFileR(FileName: string; Y, W: integer); + +/// Добавляет к исходным данным двоичный файл с символьными элементами (file of char) +procedure DataFileC(FileName: string; Y, W: integer); + +/// Добавляет к исходным данным двоичный файл со строковыми элементами (file of ShortString) +procedure DataFileS(FileName: string; Y, W: integer); + +/// Добавляет к исходным данным текстовый файл +procedure DataFileT(FileName: string; Y1, Y2: integer); + +//----------------------------------------------------------------------------- + +/// Добавляет к результирующим данным двоичный файл с целочисленными элементами (file of integer) +procedure ResultFileN(FileName: string; Y, W: integer); + +/// Добавляет к результирующим данным двоичный файл с вещественными элементами (file of real) +procedure ResultFileR(FileName: string; Y, W: integer); + +/// Добавляет к результирующим данным двоичный файл с символьными элементами (file of char) +procedure ResultFileC(FileName: string; Y, W: integer); + +/// Добавляет к результирующим данным двоичный файл со строковыми элементами (file of ShortString) +procedure ResultFileS(FileName: string; Y, W: integer); + +/// Добавляет к результирующим данным текстовый файл +procedure ResultFileT(FileName: string; Y1, Y2: integer); + +//----------------------------------------------------------------------------- + +/// Связывает номер NP с указателем P +procedure SetPointer(NP: integer; P: PNode); + +/// Добавляет к исходным данным линейную динамическую структуру +procedure DataList(NP: integer; X, Y: integer); + +/// Добавляет к результирующим данным линейную динамическую структуру +procedure ResultList(NP: integer; X, Y: integer); + +/// Добавляет к исходным данным бинарное дерево +procedure DataBinTree(NP: integer; X, Y1, Y2: integer); + +/// Добавляет к результирующим данным бинарное дерево +procedure ResultBinTree(NP: integer; X, Y1, Y2: integer); + +/// Добавляет к исходным данным дерево общего вида +procedure DataTree(NP: integer; X, Y1, Y2: integer); + +/// Добавляет к результирующим данным дерево общего вида +procedure ResultTree(NP: integer; X, Y1, Y2: integer); + +/// Отображает в текущей динамической структуре указатель с номером NP +procedure ShowPointer(NP: integer); + +/// Помечает в текущей результирующей динамической структуре указатель, требующий создания +procedure SetNewNode(NNode: integer); + +/// Помечает в текущей исходной динамической структуре указатель, требующий удаления +procedure SetDisposedNode(NNode: integer); + +//----------------------------------------------------------------------------- + +/// Возвращает количество слов-образцов для языка, соответствующего текущей локали +function WordCount: integer; //116 + +/// Возвращает количество предложений-образцов для языка, соответствующего текущей локали +function SentenceCount: integer; //61 + +/// Возвращает количество текстов-образцов для языка, соответствующего текущей локали +function TextCount: integer; //85 + +/// Возвращает слово-образец с номером N (нумерация от 0) для языка, соответствующего текущей локали +function WordSample(N: integer): string; + +/// Возвращает предложение-образец с номером N (нумерация от 0) для языка, соответствующего текущей локали +function SentenceSample(N: integer): string; + +/// Возвращает текст-образец с номером N (нумерация от 0) для языка, соответствующего текущей локали, +/// между строками текста располагаются символы #13#10, в конце текста эти символы отсутствуют, +/// число строк не превышает MaxLineCount, между абзацами текста помещается одна пустая строка +function TextSample(N: integer): string; + +//----------------------------------------------------------------------------- + +/// Возвращает количество английских слов-образцов +function EnWordCount: integer; //116 + +/// Возвращает количество английских предложений-образцов +function EnSentenceCount: integer; //61 + +/// Возвращает количество английских текстов-образцов +function EnTextCount: integer; //85 + +/// Возвращает английское слово-образец с номером N (нумерация от 0) +function EnWordSample(N: integer): string; + +/// Возвращает английское предложение-образец с номером N (нумерация от 0) +function EnSentenceSample(N: integer): string; + +/// Возвращает английский текст-образец с номером N (нумерация от 0), +/// между строками текста располагаются символы #13#10, в конце текста эти символы отсутствуют, +/// число строк не превышает MaxLineCount, между абзацами текста помещается одна пустая строка +function EnTextSample(N: integer): string; + +//----------------------------------------------------------------------------- + +/// Добавляет строку комментария к текущей группе или подгруппе заданий +procedure CommentText(S: string); + +/// Добавляет комментарий из другой группы заданий (или ее подгруппы, +/// если ее второй параметр не является пустой строкой) +procedure UseComment(GroupName, SubgroupName: string); overload; + +/// Добавляет комментарий из другой группы заданий +procedure UseComment(GroupName: string); overload; + +/// Устанавливает режим добавления комментария к подгруппе заданий +procedure Subgroup(SubgroupName: string); + +//----------------------------------------------------------------------------- + +/// Процедура, обеспечивающая отображение динамических структур данных +/// в "объектном стиле" при выполнении заданий в среде PascalABC.NET +/// (при использовании других сред не выполняет никаких действий) +procedure SetObjectStyle; + +//----------------------------------------------------------------------------- + +/// Процедура для внутреннего использования; она должна быть вызвана +/// из процедуры с именем activate (с маленькой буквы) в любой +/// библиотеке NET с группой заданий (процедура activate имеет +/// тот же строковый параметр S, что и процедура ActivateNET) +procedure ActivateNET(S: string); + +//----------------------------------------------------------------------------- + +/// Устанавливает текущий процесс для последующей передачи ему данных +/// числовых типов (при выполнении задания в параллельном режиме) +procedure SetProcess(ProcessRank: integer); + +//----------------------------------------------------------------------------- + +implementation + +uses System.Runtime.InteropServices, System.Text; + +function LoadLibrary(FileName: string): integer; + external 'kernel32.dll' Name 'LoadLibrary'; + +function GetProcAddress(handle: integer; ProcName: string): System.IntPtr; + external 'kernel32.dll' Name 'GetProcAddress'; + +function FreeLibrary(handle: integer): boolean; + external 'kernel32.dll' Name 'FreeLibrary'; + +function MessageBox(hWnd: integer; lpText, lpCaption: string; uType: integer): Integer; + external 'user32.dll' Name 'MessageBoxA'; + +type TTaskText = procedure (s: string); + TCreateGroup = procedure (GroupName: string; InitTaskProc: TInitTaskProc); + +type + TNFunc = function : integer; + TNFuncN4 = function (N1, N2, N3, N4: integer): integer; + TProcSb = procedure (S: StringBuilder); + TProcNSb = procedure (N: integer; S: StringBuilder); + TProc = procedure; + TProcS = procedure (S: array of byte); + TProcSCN2 = procedure (S: array of byte; C: Char; N1, N2: integer); + TProcSN = procedure (S: array of byte; N: integer); + TProcSN2 = procedure (S: array of byte; N1, N2: integer); + TProcSN3 = procedure (S: array of byte; N1, N2, N3: integer); + TProcSN4 = procedure (S: array of byte; N1, N2, N3, N4: integer); + TProcSN5 = procedure (S: array of byte; N1, N2, N3, N4, N5: integer); + TProcSN6 = procedure (S: array of byte; N1, N2, N3, N4, N5, N6: integer); + TProcSRN3 = procedure (S: array of byte; R: real; N1, N2, N3: integer); + TProcSR2N3 = procedure (S: array of byte; R1, R2: real; N1, N2, N3: integer); + TProcSR3N3 = procedure (S: array of byte; R1, R2, R3: real; N1, N2, N3: integer); + TProcS2 = procedure (S1, S2: array of byte); + TProcS2N2 = procedure (S1, S2: array of byte; N1, N2: integer); + TProcS4NP = procedure (S1, S2, S3, S4: array of byte; N: integer; P: TInitTaskProc); + TProcN = procedure (N: integer); + TProcNP = procedure (N: integer; P: pointer); + TProcN3 = procedure (N1, N2, N3: integer); + TProcN4 = procedure (N1, N2, N3, N4: integer); + TProcSvN = procedure (S: array of byte; var N: integer); + TProcSNS = procedure (S1: array of byte; N: integer; S2: array of byte); + +var + creategroup_: TProcS4NP; + usetask_: TProcSN; + createtask_: TProcS; + currentlanguage_: TNFunc; + currentlocale_: TProcSb; + tasktext_: TProcSN2; + datab_, resultb_: TProcSN3; + datan_, resultn_: TProcSN4; + datan2_, resultn2_: TProcSN5; + datan3_, resultn3_: TProcSN6; + datar_, resultr_: TProcSRN3; + datar2_, resultr2_: TProcSR2N3; + datar3_, resultr3_: TProcSR3N3; + datac_, resultc_: TProcSCN2; + datas_, results_: TProcS2N2; + datap_, resultp_: TProcSN3; + datacomment_, resultcomment_: TProcSN2; + setprecision_, settestcount_, setrequireddatacount_: TProcN; + center_: TNFuncN4; + datafilen_, datafiler_, datafilec_, datafiles_, datafilet_: TProcSN2; + resultfilen_, resultfiler_, resultfilec_, resultfiles_, resultfilet_: TProcSN2; + setpointer_: TProcNP; + datalist_, resultlist_: TProcN3; + databintree_, datatree_, resultbintree_, resulttree_: TProcN4; + showpointer_, setnewnode_, setdisposednode_: TProcN; + wordcount_, sentencecount_, textcount_: TNFunc; + enwordcount_, ensentencecount_, entextcount_: TNFunc; + wordsample_, sentencesample_, textsample_: TProcNSb; + enwordsample_, ensentencesample_, entextsample_: TProcNSb; + commenttext_: TProcS; + usecomment_: TProcS2; + subgroup_{, registergroup_}: TProcS; // удалено в версии 4.11 + setobjectstyle_: TProc; + createtask2_: TProcSvN; + setprocess_: TProcN; + currentversion_: TProcSb; // добавлено в версии 4.10 + currenttest_: TNFunc; // добавлено в версии 4.11 + usetaskex_: TProcSNS; // добавлено в версии 4.19 + + FHandle: integer; + +function ToBytes(s: string): array of byte; +begin + var utf8 := Encoding.Unicode; + var ansi := Encoding.GetEncoding(1251); + result := Encoding.Convert(utf8, ansi, utf8.GetBytes(S)); +end; + +procedure ActivateNET(S: string); +begin + FHandle := LoadLibrary(S); + creategroup_ := TProcS4NP(Marshal.GetDelegateForFunctionPointer(GetProcAddress(FHandle, 'creategroup'), typeof(TProcS4NP))); + usetask_ := TProcSN(Marshal.GetDelegateForFunctionPointer(GetProcAddress(FHandle, 'usetask'), typeof(TProcSN))); + createtask_ := TProcS(Marshal.GetDelegateForFunctionPointer(GetProcAddress(FHandle, 'createtask'), typeof(TProcS))); + currentlanguage_ := TNFunc(Marshal.GetDelegateForFunctionPointer(GetProcAddress(FHandle, 'currentlanguage'), typeof(TNFunc))); + currentlocale_ := TProcSb(Marshal.GetDelegateForFunctionPointer(GetProcAddress(FHandle, 'currentlocale2'), typeof(TProcSb))); + tasktext_ := TProcSN2(Marshal.GetDelegateForFunctionPointer(GetProcAddress(FHandle, 'tasktext'), typeof(TProcSN2))); + datab_ := TProcSN3(Marshal.GetDelegateForFunctionPointer(GetProcAddress(FHandle, 'datab'), typeof(TProcSN3))); + datan_ := TProcSN4(Marshal.GetDelegateForFunctionPointer(GetProcAddress(FHandle, 'datan'), typeof(TProcSN4))); + datan2_ := TProcSN5(Marshal.GetDelegateForFunctionPointer(GetProcAddress(FHandle, 'datan2'), typeof(TProcSN5))); + datan3_ := TProcSN6(Marshal.GetDelegateForFunctionPointer(GetProcAddress(FHandle, 'datan3'), typeof(TProcSN6))); + datar_ := TProcSRN3(Marshal.GetDelegateForFunctionPointer(GetProcAddress(FHandle, 'datar'), typeof(TProcSRN3))); + datar2_ := TProcSR2N3(Marshal.GetDelegateForFunctionPointer(GetProcAddress(FHandle, 'datar2'), typeof(TProcSR2N3))); + datar3_ := TProcSR3N3(Marshal.GetDelegateForFunctionPointer(GetProcAddress(FHandle, 'datar3'), typeof(TProcSR3N3))); + datac_ := TProcSCN2(Marshal.GetDelegateForFunctionPointer(GetProcAddress(FHandle, 'datac'), typeof(TProcSCN2))); + datas_ := TProcS2N2(Marshal.GetDelegateForFunctionPointer(GetProcAddress(FHandle, 'datas'), typeof(TProcS2N2))); + datap_ := TProcSN3(Marshal.GetDelegateForFunctionPointer(GetProcAddress(FHandle, 'datap'), typeof(TProcSN3))); + datacomment_ := TProcSN2(Marshal.GetDelegateForFunctionPointer(GetProcAddress(FHandle, 'datacomment'), typeof(TProcSN2))); + resultb_ := TProcSN3(Marshal.GetDelegateForFunctionPointer(GetProcAddress(FHandle, 'resultb'), typeof(TProcSN3))); + resultn_ := TProcSN4(Marshal.GetDelegateForFunctionPointer(GetProcAddress(FHandle, 'resultn'), typeof(TProcSN4))); + resultn2_ := TProcSN5(Marshal.GetDelegateForFunctionPointer(GetProcAddress(FHandle, 'resultn2'), typeof(TProcSN5))); + resultn3_ := TProcSN6(Marshal.GetDelegateForFunctionPointer(GetProcAddress(FHandle, 'resultn3'), typeof(TProcSN6))); + resultr_ := TProcSRN3(Marshal.GetDelegateForFunctionPointer(GetProcAddress(FHandle, 'resultr'), typeof(TProcSRN3))); + resultr2_ := TProcSR2N3(Marshal.GetDelegateForFunctionPointer(GetProcAddress(FHandle, 'resultr2'), typeof(TProcSR2N3))); + resultr3_ := TProcSR3N3(Marshal.GetDelegateForFunctionPointer(GetProcAddress(FHandle, 'resultr3'), typeof(TProcSR3N3))); + resultc_ := TProcSCN2(Marshal.GetDelegateForFunctionPointer(GetProcAddress(FHandle, 'resultc'), typeof(TProcSCN2))); + results_ := TProcS2N2(Marshal.GetDelegateForFunctionPointer(GetProcAddress(FHandle, 'results'), typeof(TProcS2N2))); + resultp_ := TProcSN3(Marshal.GetDelegateForFunctionPointer(GetProcAddress(FHandle, 'resultp'), typeof(TProcSN3))); + resultcomment_ := TProcSN2(Marshal.GetDelegateForFunctionPointer(GetProcAddress(FHandle, 'resultcomment'), typeof(TProcSN2))); + setprecision_ := TProcN(Marshal.GetDelegateForFunctionPointer(GetProcAddress(FHandle, 'setprecision'), typeof(TProcN))); + settestcount_ := TProcN(Marshal.GetDelegateForFunctionPointer(GetProcAddress(FHandle, 'settestcount'), typeof(TProcN))); + setrequireddatacount_ := TProcN(Marshal.GetDelegateForFunctionPointer(GetProcAddress(FHandle, 'setrequireddatacount'), typeof(TProcN))); + center_ := TNFuncN4(Marshal.GetDelegateForFunctionPointer(GetProcAddress(FHandle, 'center'), typeof(TNFuncN4))); + datafilen_ := TProcSN2(Marshal.GetDelegateForFunctionPointer(GetProcAddress(FHandle, 'datafilen'), typeof(TProcSN2))); + datafiler_ := TProcSN2(Marshal.GetDelegateForFunctionPointer(GetProcAddress(FHandle, 'datafiler'), typeof(TProcSN2))); + datafilec_ := TProcSN2(Marshal.GetDelegateForFunctionPointer(GetProcAddress(FHandle, 'datafilec'), typeof(TProcSN2))); + datafiles_ := TProcSN2(Marshal.GetDelegateForFunctionPointer(GetProcAddress(FHandle, 'datafiles'), typeof(TProcSN2))); + datafilet_ := TProcSN2(Marshal.GetDelegateForFunctionPointer(GetProcAddress(FHandle, 'datafilet'), typeof(TProcSN2))); + resultfilen_ := TProcSN2(Marshal.GetDelegateForFunctionPointer(GetProcAddress(FHandle, 'resultfilen'), typeof(TProcSN2))); + resultfiler_ := TProcSN2(Marshal.GetDelegateForFunctionPointer(GetProcAddress(FHandle, 'resultfiler'), typeof(TProcSN2))); + resultfilec_ := TProcSN2(Marshal.GetDelegateForFunctionPointer(GetProcAddress(FHandle, 'resultfilec'), typeof(TProcSN2))); + resultfiles_ := TProcSN2(Marshal.GetDelegateForFunctionPointer(GetProcAddress(FHandle, 'resultfiles'), typeof(TProcSN2))); + resultfilet_ := TProcSN2(Marshal.GetDelegateForFunctionPointer(GetProcAddress(FHandle, 'resultfilet'), typeof(TProcSN2))); + setpointer_ := TProcNP(Marshal.GetDelegateForFunctionPointer(GetProcAddress(FHandle, 'setpointer'), typeof(TProcNP))); + datalist_ := TProcN3(Marshal.GetDelegateForFunctionPointer(GetProcAddress(FHandle, 'datalist'), typeof(TProcN3))); + resultlist_ := TProcN3(Marshal.GetDelegateForFunctionPointer(GetProcAddress(FHandle, 'resultlist'), typeof(TProcN3))); + databintree_ := TProcN4(Marshal.GetDelegateForFunctionPointer(GetProcAddress(FHandle, 'databintree'), typeof(TProcN4))); + datatree_ := TProcN4(Marshal.GetDelegateForFunctionPointer(GetProcAddress(FHandle, 'datatree'), typeof(TProcN4))); + resultbintree_ := TProcN4(Marshal.GetDelegateForFunctionPointer(GetProcAddress(FHandle, 'resultbintree'), typeof(TProcN4))); + resulttree_ := TProcN4(Marshal.GetDelegateForFunctionPointer(GetProcAddress(FHandle, 'resulttree'), typeof(TProcN4))); + showpointer_ := TProcN(Marshal.GetDelegateForFunctionPointer(GetProcAddress(FHandle, 'showpointer'), typeof(TProcN))); + setnewnode_ := TProcN(Marshal.GetDelegateForFunctionPointer(GetProcAddress(FHandle, 'setnewnode'), typeof(TProcN))); + setdisposednode_ := TProcN(Marshal.GetDelegateForFunctionPointer(GetProcAddress(FHandle, 'setdisposednode'), typeof(TProcN))); + wordcount_ := TNFunc(Marshal.GetDelegateForFunctionPointer(GetProcAddress(FHandle, 'wordcount'), typeof(TNFunc))); + sentencecount_ := TNFunc(Marshal.GetDelegateForFunctionPointer(GetProcAddress(FHandle, 'sentencecount'), typeof(TNFunc))); + textcount_ := TNFunc(Marshal.GetDelegateForFunctionPointer(GetProcAddress(FHandle, 'textcount'), typeof(TNFunc))); + wordsample_ := TProcNSb(Marshal.GetDelegateForFunctionPointer(GetProcAddress(FHandle, 'wordsample2'), typeof(TProcNSb))); + sentencesample_ := TProcNSb(Marshal.GetDelegateForFunctionPointer(GetProcAddress(FHandle, 'sentencesample2'), typeof(TProcNSb))); + textsample_ := TProcNSb(Marshal.GetDelegateForFunctionPointer(GetProcAddress(FHandle, 'textsample2'), typeof(TProcNSb))); + enwordcount_ := TNFunc(Marshal.GetDelegateForFunctionPointer(GetProcAddress(FHandle, 'enwordcount'), typeof(TNFunc))); + ensentencecount_ := TNFunc(Marshal.GetDelegateForFunctionPointer(GetProcAddress(FHandle, 'ensentencecount'), typeof(TNFunc))); + entextcount_ := TNFunc(Marshal.GetDelegateForFunctionPointer(GetProcAddress(FHandle, 'entextcount'), typeof(TNFunc))); + enwordsample_ := TProcNSb(Marshal.GetDelegateForFunctionPointer(GetProcAddress(FHandle, 'enwordsample2'), typeof(TProcNSb))); + ensentencesample_ := TProcNSb(Marshal.GetDelegateForFunctionPointer(GetProcAddress(FHandle, 'ensentencesample2'), typeof(TProcNSb))); + entextsample_ := TProcNSb(Marshal.GetDelegateForFunctionPointer(GetProcAddress(FHandle, 'entextsample2'), typeof(TProcNSb))); + commenttext_ := TProcS(Marshal.GetDelegateForFunctionPointer(GetProcAddress(FHandle, 'commenttext'), typeof(TProcS))); + usecomment_ := TProcS2(Marshal.GetDelegateForFunctionPointer(GetProcAddress(FHandle, 'usecomment'), typeof(TProcS2))); + subgroup_ := TProcS(Marshal.GetDelegateForFunctionPointer(GetProcAddress(FHandle, 'subgroup'), typeof(TProcS))); +// registergroup_ := TProcS(Marshal.GetDelegateForFunctionPointer(GetProcAddress(FHandle, 'registergroup'), typeof(TProcS))); + setobjectstyle_ := TProc(Marshal.GetDelegateForFunctionPointer(GetProcAddress(FHandle, 'setobjectstyle'), typeof(TProc))); + createtask2_ := TProcSvN(Marshal.GetDelegateForFunctionPointer(GetProcAddress(FHandle, 'createtask2'), typeof(TProcSvN))); + setprocess_ := TProcN(Marshal.GetDelegateForFunctionPointer(GetProcAddress(FHandle, 'setprocess'), typeof(TProcN))); + currentversion_ := TProcSb(Marshal.GetDelegateForFunctionPointer(GetProcAddress(FHandle, 'currentversion2'), typeof(TProcSb))); // добавлено в версии 4.10 + currenttest_ := TNFunc(Marshal.GetDelegateForFunctionPointer(GetProcAddress(FHandle, 'curt'), typeof(TNFunc))); // добавлено в версии 4.11 + usetaskex_ := TProcSNS(Marshal.GetDelegateForFunctionPointer(GetProcAddress(FHandle, 'usetaskex'), typeof(TProcSNS))); // добавлено в версии 4.19 + +end; + +//============================================================================= + +var p: TInitTaskProc := nil; + +procedure CreateGroup(GroupName, GroupDescription, GroupAuthor, GroupKey: string; + TaskCount: integer; InitTaskProc: TInitTaskProc); +begin + p := InitTaskProc; + creategroup_(ToBytes(GroupName), ToBytes(GroupDescription), ToBytes(GroupAuthor), + ToBytes(GroupKey), TaskCount, p); +end; + +procedure UseTask(GroupName: string; TaskNumber: integer); +begin + usetask_(ToBytes(GroupName), TaskNumber); +end; + +procedure UseTask(GroupName: string; TaskNumber: integer; TopicDescription: string); +begin + if usetaskex_ <> nil then + usetaskex_(ToBytes(GroupName), TaskNumber, ToBytes(TopicDescription)) + else + usetask_(ToBytes(GroupName), TaskNumber); +end; + +procedure CreateTask(SubgroupName: string); +begin + createtask_(ToBytes(SubgroupName)); +end; + +procedure CreateTask; +begin + CreateTask(''); +end; + + + + + + + + + + +function CurrentLanguage: integer; +begin + result := currentlanguage_; +end; + +function CurrentLocale: string; +begin + var S := new StringBuilder(100); + currentlocale_(S); + result := S.ToString; +end; + +procedure TaskText(S: string; X, Y: integer); +begin + tasktext_(ToBytes(S), X, Y); +end; + +procedure TaskText(S: string); +var + p1, p2: array[1..205] of integer; + n, i, k, l: integer; + m: set of char; +begin + n := 0; + m := [#13, #10]; + l := Length(S); + i := 1; + while i <= l do + begin + if not (S[i] in m) and ((i = 1) or (S[i-1] in m)) + and (n < 205) then + begin + while (i <= l) and (S[i] = ' ') do + Inc(i); + if (i <= l) and not (S[i] in m) then + begin + Inc(n); + p1[n] := i; + end; + end; + if i > l then break; + if not (S[i] in m) and ((i = l) or (S[i+1] in m)) then + begin + k := i; + if S[k] = ' ' then + begin + while S[k] = ' ' do + Dec(k); + if (S[k] = '\') and ((k = 1) or (S[k-1] <> '\')) then + Inc(k); + end; + p2[n] := k - p1[n] + 1; + if n = 205 then break; + end; + Inc(i); + end; + case n of + 0: ; + 1: tasktext(Copy(S, p1[1], p2[1]), 0, 3); + 2: for i := 1 to n do + tasktext(Copy(S, p1[i], p2[i]), 0, 2*i); + 3, 4: + for i := 1 to n do + tasktext(Copy(S, p1[i], p2[i]), 0, i+1); + else + begin + for i := 1 to 5 do + tasktext(Copy(S, p1[i], p2[i]), 0, i); + for i := 6 to n do + tasktext(Copy(S, p1[i], p2[i]), 0, 0); + end; + end; +end; + +function BtoN(B: boolean): integer; +begin + if B then + result := 1 + else + result := 0; +end; + +procedure DataB (Cmt: string; B: boolean; X, Y: integer); +begin + datab_(ToBytes(Cmt), BtoN(B), X, Y); +end; + +procedure DataB (B: boolean; X, Y: integer); +begin + datab_(ToBytes(''), BtoN(B), X, Y); +end; + +procedure DataN (Cmt: string; N: integer; X, Y, W: integer); +begin + datan_(ToBytes(Cmt), N, X, Y, W); +end; + +procedure DataN (N: integer; X, Y, W: integer); +begin + datan_(ToBytes(''), N, X, Y, W); +end; + +procedure DataN2(Cmt: string; N1, N2: integer; X, Y, W: integer); +begin + datan2_(ToBytes(Cmt), N1, N2, X, Y, W); +end; + +procedure DataN2(N1, N2: integer; X, Y, W: integer); +begin + datan2_(ToBytes(''), N1, N2, X, Y, W); +end; + +procedure DataN3(Cmt: string; N1, N2, N3: integer; X, Y, W: integer); +begin + datan3_(ToBytes(Cmt), N1, N2, N3, X, Y, W); +end; + +procedure DataN3(N1, N2, N3: integer; X, Y, W: integer); +begin + datan3_(ToBytes(''), N1, N2, N3, X, Y, W); +end; + +procedure DataR(Cmt: string; R: real; X, Y, W: integer); +begin + datar_(ToBytes(Cmt), R, X, Y, W); +end; + +procedure DataR(R: real; X, Y, W: integer); +begin + datar_(ToBytes(''), R, X, Y, W); +end; + +procedure DataR2(Cmt: string; R1, R2: real; X, Y, W: integer); +begin + datar2_(ToBytes(Cmt), R1, R2, X, Y, W); +end; + +procedure DataR2(R1, R2: real; X, Y, W: integer); +begin + datar2_(ToBytes(''), R1, R2, X, Y, W); +end; + +procedure DataR3(Cmt: string; R1, R2, R3: real; X, Y, W: integer); +begin + datar3_(ToBytes(Cmt), R1, R2, R3, X, Y, W); +end; + +procedure DataR3(R1, R2, R3: real; X, Y, W: integer); +begin + datar3_(ToBytes(''), R1, R2, R3, X, Y, W); +end; + +procedure DataC(Cmt: string; C: char; X, Y: integer); +begin + datac_(ToBytes(Cmt), C, X, Y); +end; + +procedure DataC(C: char; X, Y: integer); +begin + datac_(ToBytes(''), C, X, Y); +end; + +procedure DataS(Cmt: string; S: string; X, Y: integer); +begin + datas_(ToBytes(Cmt), ToBytes(S), X, Y); +end; + +procedure DataS(S: string; X, Y: integer); +begin + datas_(ToBytes(''), ToBytes(S), X, Y); +end; + +procedure DataP(Cmt: string; NP: integer; X, Y: integer); +begin + datap_ (ToBytes(Cmt), NP, X, Y); +end; + +procedure DataP(NP: integer; X, Y: integer); +begin + datap_ (ToBytes(''), NP, X, Y); +end; + +procedure DataComment(Cmt: string; X, Y: integer); +begin + datacomment_(ToBytes(Cmt), X, Y); +end; + +procedure ResultB(Cmt: string; B: boolean; X, Y: integer); +begin + resultb_(ToBytes(Cmt), BtoN(B), X, Y); +end; + +procedure ResultB(B: boolean; X, Y: integer); +begin + resultb_(ToBytes(''), BtoN(B), X, Y); +end; + +procedure ResultN(Cmt: string; N: integer; X, Y, W: integer); +begin + resultn_(ToBytes(Cmt), N, X, Y, W); +end; + +procedure ResultN(N: integer; X, Y, W: integer); +begin + resultn_(ToBytes(''), N, X, Y, W); +end; + +procedure ResultN2(Cmt: string; N1, N2: integer; X, Y, W: integer); +begin + resultn2_(ToBytes(Cmt), N1, N2, X, Y, W); +end; + +procedure ResultN2(N1, N2: integer; X, Y, W: integer); +begin + resultn2_(ToBytes(''), N1, N2, X, Y, W); +end; + +procedure ResultN3(Cmt: string; N1, N2, N3: integer; X, Y, W: integer); +begin + resultn3_(ToBytes(Cmt), N1, N2, N3, X, Y, W); +end; + +procedure ResultN3(N1, N2, N3: integer; X, Y, W: integer); +begin + resultn3_(ToBytes(''), N1, N2, N3, X, Y, W); +end; + +procedure ResultR(Cmt: string; R: real; X, Y, W: integer); +begin + resultr_(ToBytes(Cmt), R, X, Y, W); +end; + +procedure ResultR(R: real; X, Y, W: integer); +begin + resultr_(ToBytes(''), R, X, Y, W); +end; + +procedure ResultR2(Cmt: string; R1, R2: real; X, Y, W: integer); +begin + resultr2_(ToBytes(Cmt), R1, R2, X, Y, W); +end; + +procedure ResultR2(R1, R2: real; X, Y, W: integer); +begin + resultr2_(ToBytes(''), R1, R2, X, Y, W); +end; + +procedure ResultR3(Cmt: string; R1, R2, R3: real; X, Y, W: integer); +begin + resultr3_(ToBytes(Cmt), R1, R2, R3, X, Y, W); +end; + +procedure ResultR3(R1, R2, R3: real; X, Y, W: integer); +begin + resultr3_(ToBytes(''), R1, R2, R3, X, Y, W); +end; + +procedure ResultC(Cmt: string; C: char; X, Y: integer); +begin + resultc_(ToBytes(Cmt), C, X, Y); +end; + +procedure ResultC(C: char; X, Y: integer); +begin + resultc_(ToBytes(''), C, X, Y); +end; + +procedure ResultS(Cmt: string; S: string; X, Y: integer); +begin + results_(ToBytes(Cmt), ToBytes(S), X, Y); +end; + +procedure ResultS(S: string; X, Y: integer); +begin + results_(ToBytes(''), ToBytes(S), X, Y); +end; + +procedure ResultP(Cmt: string; NP: integer; X, Y: integer); +begin + resultp_(ToBytes(Cmt), NP, X, Y); +end; + +procedure ResultP(NP: integer; X, Y: integer); +begin + resultp_(ToBytes(''), NP, X, Y); +end; + +procedure ResultComment(Cmt: string; X, Y: integer); +begin + resultcomment_(ToBytes(Cmt), X, Y); +end; + +procedure SetPrecision(N: integer); +begin + setprecision_(N); +end; + +procedure SetTestCount(N: integer); +begin + settestcount_(N); +end; + +procedure SetRequiredDataCount(N: integer); +begin + setrequireddatacount_(N); +end; + +function Center(I, N, W, B: integer): integer; +begin + result := center_(I, N, W, B); +end; + +procedure DataFileN(FileName: string; Y, W: integer); +begin + datafilen_(ToBytes(FileName), Y, W); +end; + +procedure DataFileR(FileName: string; Y, W: integer); +begin + datafiler_(ToBytes(FileName), Y, W); +end; + +procedure DataFileC(FileName: string; Y, W: integer); +begin + datafilec_(ToBytes(FileName), Y, W); +end; + +procedure DataFileS(FileName: string; Y, W: integer); +begin + datafiles_(ToBytes(FileName), Y, W); +end; + +procedure DataFileT(FileName: string; Y1, Y2: integer); +begin + datafilet_(ToBytes(FileName), Y1, Y2); +end; + +procedure ResultFileN(FileName: string; Y, W: integer); +begin + resultfilen_(ToBytes(FileName), Y, W); +end; + +procedure ResultFileR(FileName: string; Y, W: integer); +begin + resultfiler_(ToBytes(FileName), Y, W); +end; + +procedure ResultFileC(FileName: string; Y, W: integer); +begin + resultfilec_(ToBytes(FileName), Y, W); +end; + +procedure ResultFileS(FileName: string; Y, W: integer); +begin + resultfiles_(ToBytes(FileName), Y, W); +end; + +procedure ResultFileT(FileName: string; Y1, Y2: integer); +begin + resultfilet_(ToBytes(FileName), Y1, Y2); +end; + +procedure SetPointer(NP: integer; P: PNode); +begin + setpointer_(NP, P); +end; + +procedure DataList(NP: integer; X, Y: integer); +begin + datalist_(NP, X, Y); +end; + +procedure ResultList(NP: integer; X, Y: integer); +begin + resultlist_(NP, X, Y); +end; + +procedure DataBinTree(NP: integer; X, Y1, Y2: integer); +begin + databintree_(NP, X, Y1, Y2); +end; + +procedure ResultBinTree(NP: integer; X, Y1, Y2: integer); +begin + resultbintree_(NP, X, Y1, Y2); +end; + +procedure DataTree(NP: integer; X, Y1, Y2: integer); +begin + datatree_(NP, X, Y1, Y2); +end; + +procedure ResultTree(NP: integer; X, Y1, Y2: integer); +begin + resulttree_(NP, X, Y1, Y2); +end; + +procedure ShowPointer(NP: integer); +begin + showpointer_(NP); +end; + +procedure SetNewNode(NNode: integer); +begin + setnewnode_(NNode); +end; + +procedure SetDisposedNode(NNode: integer); +begin + setdisposednode_(NNode); +end; + +function WordCount: integer; +begin + result := wordcount_; +end; + +function SentenceCount: integer; +begin + result := sentencecount_; +end; + +function TextCount: integer; +begin + result := textcount_; +end; + +function WordSample(n: integer): string; +begin + var S := new StringBuilder(20); //max=11 + wordsample_(n, S); + result := S.ToString; +end; + +function SentenceSample(n: integer): string; +begin + var S := new StringBuilder(100); //max=76 + sentencesample_(n, S); + result := S.ToString; +end; + +function TextSample(n: integer): string; +begin + var S := new StringBuilder(1100); //max=1076 + textsample_(n, S); + result := S.ToString; +end; + +function EnWordCount: integer; +begin + result := enwordcount_; +end; + +function EnSentenceCount: integer; +begin + result := ensentencecount_; +end; + +function EnTextCount: integer; +begin + result := entextcount_; +end; + +function EnWordSample(n: integer): string; +begin + var S := new StringBuilder(20); //max=14 + enwordsample_(n, S); + result := S.ToString; +end; + +function EnSentenceSample(n: integer): string; +begin + var S := new StringBuilder(100); //max=76 + ensentencesample_(n, S); + result := S.ToString; +end; + +function EnTextSample(n: integer): string; +begin + var S := new StringBuilder(1100); //max=1009 + entextsample_(n, S); + result := S.ToString; +end; + +procedure CommentText(S: string); +begin + commenttext_(ToBytes(S)); +end; + +procedure UseComment(GroupName, SubgroupName: string); +begin + usecomment_(ToBytes(GroupName), ToBytes(SubgroupName)); +end; + +procedure UseComment(GroupName: string); +begin + UseComment(GroupName, ''); +end; + +procedure Subgroup(SubgroupName: string); +begin + subgroup_(ToBytes(SubgroupName)); +end; + +procedure SetObjectStyle; +begin + setobjectstyle_; +end; + +{ // удалено в версии 4.11 +procedure RegisterGroup(UnitName: string); +begin + registergroup_(PChar(UnitName)); +end; +} + +procedure ShowError(S1, S2: string); +begin + MessageBox(0, S1+#13#10'is not found '+ + 'in the PT4 library.'#13#10'You should update '+ + 'the Programming Taskbook to '+S2+' version.', + 'PT4TaskMaker Error', 16); +end; + +procedure CreateTask(SubgroupName: string; var ProcessCount: integer); +begin + if createtask2_ <> nil then + createtask2_(ToBytes(SubgroupName), ProcessCount) + else + ShowError('The CreateTask procedure with ProcessCount parameter', '4.9'); +end; + +procedure CreateTask(var ProcessCount: integer); +begin + CreateTask('', ProcessCount); +end; + +procedure SetProcess(ProcessRank: integer); +begin + if setprocess_ <> nil then + setprocess_(ProcessRank); +end; + +function CurrentVersion: string; +begin + result := '4.00'; + if currentversion_ <> nil then + begin + var S := new StringBuilder(100); + currentversion_(S); + result := S.ToString; + end; +end; + +function CurrentTest: integer; +begin + result := 0; + if currenttest_ <> nil then + result := currenttest_; +end; + +function RandomN(M, N: integer): integer; +begin + result := M; + if M < N then + result := Random(N-M+1) + M; +end; + +function RandomR(A, B: real): real; +begin + result := A; + if A < B then + result := Random * (B-A) + A; +end; + +initialization + +finalization + + FreeLibrary(FHandle); + +end. + diff --git a/TestSuite/CompilationSamples/Мозаика.pas b/TestSuite/CompilationSamples/Мозаика.pas new file mode 100644 index 000000000..612948bd6 --- /dev/null +++ b/TestSuite/CompilationSamples/Мозаика.pas @@ -0,0 +1,477 @@ +unit Мозаика; + +interface + +uses GraphWPF; + +var Window := GraphWPF.Window; + +procedure п; + +procedure к; +procedure кк1; +procedure кк2; +procedure кк3; +procedure кк4; +procedure кт1; +procedure кт2; +procedure кт3; +procedure кт4; + +procedure ко; +procedure кок1; +procedure кок2; +procedure кок3; +procedure кок4; +procedure кот1; +procedure кот2; +procedure кот3; +procedure кот4; + +procedure ж; +procedure жк1; +procedure жк2; +procedure жк3; +procedure жк4; +procedure жт1; +procedure жт2; +procedure жт3; +procedure жт4; + +procedure г; +procedure гк1; +procedure гк2; +procedure гк3; +procedure гк4; +procedure гт1; +procedure гт2; +procedure гт3; +procedure гт4; + +procedure ч; +procedure чк1; +procedure чк2; +procedure чк3; +procedure чк4; +procedure чт1; +procedure чт2; +procedure чт3; +procedure чт4; + +procedure б; +procedure бт1; +procedure бт2; +procedure бт3; +procedure бт4; +procedure бк1; +procedure бк2; +procedure бк3; +procedure бк4; + +procedure з; +procedure зт1; +procedure зт2; +procedure зт3; +procedure зт4; +procedure зк1; +procedure зк2; +procedure зк3; +procedure зк4; + +procedure с; +procedure ст1; +procedure ст2; +procedure ст3; +procedure ст4; +procedure ск1; +procedure ск2; +procedure ск3; +procedure ск4; + +procedure се; +procedure сет1; +procedure сет2; +procedure сет3; +procedure сет4; +procedure сек1; +procedure сек2; +procedure сек3; +procedure сек4; + +procedure о; +procedure от1; +procedure от2; +procedure от3; +procedure от4; +procedure ок1; +procedure ок2; +procedure ок3; +procedure ок4; + +procedure р; +procedure рт1; +procedure рт2; +procedure рт3; +procedure рт4; +procedure рк1; +procedure рк2; +procedure рк3; +procedure рк4; + +procedure ф; +procedure фт1; +procedure фт2; +procedure фт3; +procedure фт4; +procedure фк1; +procedure фк2; +procedure фк3; +procedure фк4; + +procedure Ряд(p: procedure); +procedure НарисоватьРяд(p: procedure); + +implementation + +var + w := 50; + z := 2; + x := 1; + y := 1; + +procedure Draw(x, y: integer) := Rectangle(x * w, y * w, w - z, w - z); + +procedure D(c: Color); +begin + Brush.Color := c; + Draw(x, y); + x += 1; +end; + +procedure Ц1(c: Color); +begin + Brush.Color := c; + Pie(x * w + w - z,y * w + w - z,w-z,90,180); + x += 1; +end; +procedure Ц2(c: Color); +begin + Brush.Color := c; + Pie(x * w,y * w + w - z,w-z,0,90); + x += 1; +end; +procedure Ц3(c: Color); +begin + Brush.Color := c; + Pie(x * w,y * w,w-z,270,360); + x += 1; +end; +procedure Ц4(c: Color); +begin + Brush.Color := c; + Pie(x * w + w - z,y * w,w-z,180,270); + x += 1; +end; +procedure Тр1(c: Color); +begin + Brush.Color := c; + Polygon(Arr(Pnt(x * w + w - z,y * w + w - z),Pnt(x * w + w - z,y * w),Pnt(x * w,y * w + w - z))); + x += 1; +end; +procedure Тр2(c: Color); +begin + Brush.Color := c; + Polygon(Arr(Pnt(x * w,y * w + w - z),Pnt(x * w,y * w),Pnt(x * w + w - z,y * w + w - z))); + x += 1; +end; +procedure Тр3(c: Color); +begin + Brush.Color := c; + Polygon(Arr(Pnt(x * w,y * w),Pnt(x * w + w - z,y * w),Pnt(x * w,y * w + w - z))); + x += 1; +end; +procedure Тр4(c: Color); +begin + Brush.Color := c; + Polygon(Arr(Pnt(x * w + w - z,y * w),Pnt(x * w,y * w),Pnt(x * w + w - z,y * w + w - z))); + x += 1; +end; + +//------ Соответствие цветов +var КрасныйЦвет := Colors.Red; +var ОранжевыйЦвет := RGB(255,127,$00); +var ЖелтыйЦвет := Colors.Yellow; +var ЗеленыйЦвет := RGB($00,$99,$00); +var ГолубойЦвет := RGB($61,$c3,$ff); +var СинийЦвет := RGB(0,0,255); +var ФиолетовыйЦвет := RGB($94,$00,$d3); + +var РозовыйЦвет := Colors.Magenta; +var КоричневыйЦвет := RGB($96,$4B,$00); +var СерыйЦвет := Colors.Gray; +var БелыйЦвет := Colors.White; +var ЧерныйЦвет := Colors.Black; + +//---------------- + +procedure Пусто := x += 1; + +procedure НовыйРяд := (x, y) := (1, y + 1); + +procedure Серый := D(СерыйЦвет); +procedure СерыйЦКруг1 := Ц1(Colors.Gray); +procedure СерыйЦКруг2 := Ц2(СерыйЦвет); +procedure СерыйЦКруг3 := Ц3(СерыйЦвет); +procedure СерыйЦКруг4 := Ц4(СерыйЦвет); +procedure СерыйТр1 := Тр1(СерыйЦвет); +procedure СерыйТр2 := Тр2(СерыйЦвет); +procedure СерыйТр3 := Тр3(СерыйЦвет); +procedure СерыйТр4 := Тр4(СерыйЦвет); + +procedure Оранжевый := D(ОранжевыйЦвет); +procedure ОранжевыйЦКруг1 := Ц1(ОранжевыйЦвет); +procedure ОранжевыйЦКруг2 := Ц2(ОранжевыйЦвет); +procedure ОранжевыйЦКруг3 := Ц3(ОранжевыйЦвет); +procedure ОранжевыйЦКруг4 := Ц4(ОранжевыйЦвет); +procedure ОранжевыйТр1 := Тр1(ОранжевыйЦвет); +procedure ОранжевыйТр2 := Тр2(ОранжевыйЦвет); +procedure ОранжевыйТр3 := Тр3(ОранжевыйЦвет); +procedure ОранжевыйТр4 := Тр4(ОранжевыйЦвет); + +procedure Коричневый := D(КоричневыйЦвет); +procedure КоричневыйЦКруг1 := Ц1(КоричневыйЦвет); +procedure КоричневыйЦКруг2 := Ц2(КоричневыйЦвет); +procedure КоричневыйЦКруг3 := Ц3(КоричневыйЦвет); +procedure КоричневыйЦКруг4 := Ц4(КоричневыйЦвет); +procedure КоричневыйТр1 := Тр1(КоричневыйЦвет); +procedure КоричневыйТр2 := Тр2(КоричневыйЦвет); +procedure КоричневыйТр3 := Тр3(КоричневыйЦвет); +procedure КоричневыйТр4 := Тр4(КоричневыйЦвет); + +procedure Белый := D(БелыйЦвет); +procedure БелыйЦКруг1 := Ц1(БелыйЦвет); +procedure БелыйЦКруг2 := Ц2(БелыйЦвет); +procedure БелыйЦКруг3 := Ц3(БелыйЦвет); +procedure БелыйЦКруг4 := Ц4(БелыйЦвет); +procedure БелыйТр1 := Тр1(БелыйЦвет); +procedure БелыйТр2 := Тр2(БелыйЦвет); +procedure БелыйТр3 := Тр3(БелыйЦвет); +procedure БелыйТр4 := Тр4(БелыйЦвет); + +procedure Синий := D(СинийЦвет); +procedure СинийЦКруг1 := Ц1(СинийЦвет); +procedure СинийЦКруг2 := Ц2(СинийЦвет); +procedure СинийЦКруг3 := Ц3(СинийЦвет); +procedure СинийЦКруг4 := Ц4(СинийЦвет); +procedure СинийТр1 := Тр1(СинийЦвет); +procedure СинийТр2 := Тр2(СинийЦвет); +procedure СинийТр3 := Тр3(СинийЦвет); +procedure СинийТр4 := Тр4(СинийЦвет); + +procedure Фиолетовый := D(ФиолетовыйЦвет); +procedure ФиолетовыйЦКруг1 := Ц1(ФиолетовыйЦвет); +procedure ФиолетовыйЦКруг2 := Ц2(ФиолетовыйЦвет); +procedure ФиолетовыйЦКруг3 := Ц3(ФиолетовыйЦвет); +procedure ФиолетовыйЦКруг4 := Ц4(ФиолетовыйЦвет); +procedure ФиолетовыйТр1 := Тр1(ФиолетовыйЦвет); +procedure ФиолетовыйТр2 := Тр2(ФиолетовыйЦвет); +procedure ФиолетовыйТр3 := Тр3(ФиолетовыйЦвет); +procedure ФиолетовыйТр4 := Тр4(ФиолетовыйЦвет); + +procedure Красный := D(КрасныйЦвет); +procedure КрасныйЦКруг1 := Ц1(КрасныйЦвет); +procedure КрасныйЦКруг2 := Ц2(КрасныйЦвет); +procedure КрасныйЦКруг3 := Ц3(КрасныйЦвет); +procedure КрасныйЦКруг4 := Ц4(КрасныйЦвет); +procedure КрасныйТр1 := Тр1(КрасныйЦвет); +procedure КрасныйТр2 := Тр2(КрасныйЦвет); +procedure КрасныйТр3 := Тр3(КрасныйЦвет); +procedure КрасныйТр4 := Тр4(КрасныйЦвет); + +procedure Черный := D(ЧерныйЦвет); +procedure Чёрный := D(ЧерныйЦвет); +procedure ЧерныйТр1 := Тр1(ЧерныйЦвет); +procedure ЧерныйТр2 := Тр2(ЧерныйЦвет); +procedure ЧерныйТр3 := Тр3(ЧерныйЦвет); +procedure ЧерныйТр4 := Тр4(ЧерныйЦвет); +procedure ЧерныйЦКруг1 := Ц1(ЧерныйЦвет); +procedure ЧерныйЦКруг2 := Ц2(ЧерныйЦвет); +procedure ЧерныйЦКруг3 := Ц3(ЧерныйЦвет); +procedure ЧерныйЦКруг4 := Ц4(ЧерныйЦвет); +procedure ЧёрныйЦКруг1 := Ц1(ЧерныйЦвет); +procedure ЧёрныйЦКруг2 := Ц2(ЧерныйЦвет); +procedure ЧёрныйЦКруг3 := Ц3(ЧерныйЦвет); +procedure ЧёрныйЦКруг4 := Ц4(ЧерныйЦвет); + +procedure Зелёный := D(ЗеленыйЦвет); +procedure ЗелёныйЦКруг1 := Ц1(ЗеленыйЦвет); +procedure ЗелёныйЦКруг2 := Ц2(ЗеленыйЦвет); +procedure ЗелёныйЦКруг3 := Ц3(ЗеленыйЦвет); +procedure ЗелёныйЦКруг4 := Ц4(ЗеленыйЦвет); +procedure ЗелёныйТр1 := Тр1(ЗеленыйЦвет); +procedure ЗелёныйТр2 := Тр2(ЗеленыйЦвет); +procedure ЗелёныйТр3 := Тр3(ЗеленыйЦвет); +procedure ЗелёныйТр4 := Тр4(ЗеленыйЦвет); + +procedure Голубой := D(ГолубойЦвет); +procedure ГолубойЦКруг1 := Ц1(ГолубойЦвет); +procedure ГолубойЦКруг2 := Ц2(ГолубойЦвет); +procedure ГолубойЦКруг3 := Ц3(ГолубойЦвет); +procedure ГолубойЦКруг4 := Ц4(ГолубойЦвет); +procedure ГолубойТр1 := Тр1(ГолубойЦвет); +procedure ГолубойТр2 := Тр2(ГолубойЦвет); +procedure ГолубойТр3 := Тр3(ГолубойЦвет); +procedure ГолубойТр4 := Тр4(ГолубойЦвет); + +procedure Розовый := D(РозовыйЦвет); +procedure РозовыйЦКруг1 := Ц1(РозовыйЦвет); +procedure РозовыйЦКруг2 := Ц2(РозовыйЦвет); +procedure РозовыйЦКруг3 := Ц3(РозовыйЦвет); +procedure РозовыйЦКруг4 := Ц4(РозовыйЦвет); +procedure РозовыйТр1 := Тр1(РозовыйЦвет); +procedure РозовыйТр2 := Тр2(РозовыйЦвет); +procedure РозовыйТр3 := Тр3(РозовыйЦвет); +procedure РозовыйТр4 := Тр4(РозовыйЦвет); + +procedure Желтый := D(ЖелтыйЦвет); +procedure Жёлтый := D(ЖелтыйЦвет); +procedure ЖелтыйЦКруг1 := Ц1(ЖелтыйЦвет); +procedure ЖелтыйЦКруг2 := Ц2(ЖелтыйЦвет); +procedure ЖелтыйЦКруг3 := Ц3(ЖелтыйЦвет); +procedure ЖелтыйЦКруг4 := Ц4(ЖелтыйЦвет); +procedure ЖелтыйТр1 := Тр1(ЖелтыйЦвет); +procedure ЖелтыйТр2 := Тр2(ЖелтыйЦвет); +procedure ЖелтыйТр3 := Тр3(ЖелтыйЦвет); +procedure ЖелтыйТр4 := Тр4(ЖелтыйЦвет); + +procedure п := пусто; + +procedure к := красный; +procedure кк1 := красныйцкруг1; +procedure кк2 := красныйцкруг2; +procedure кк3 := красныйцкруг3; +procedure кк4 := красныйцкруг4; +procedure кт1 := красныйТр1; +procedure кт2 := красныйТр2; +procedure кт3 := красныйТр3; +procedure кт4 := красныйТр4; + +procedure ко := коричневый; +procedure кок1 := коричневыйцкруг1; +procedure кок2 := коричневыйцкруг2; +procedure кок3 := коричневыйцкруг3; +procedure кок4 := коричневыйцкруг4; +procedure кот1 := коричневыйТр1; +procedure кот2 := коричневыйТр2; +procedure кот3 := коричневыйТр3; +procedure кот4 := коричневыйТр4; + +procedure ж := желтый; +procedure жк1 := желтыйцкруг1; +procedure жк2 := желтыйцкруг2; +procedure жк3 := желтыйцкруг3; +procedure жк4 := желтыйцкруг4; +procedure жт1 := желтыйТр1; +procedure жт2 := желтыйТр2; +procedure жт3 := желтыйТр3; +procedure жт4 := желтыйТр4; + +procedure г := голубой; +procedure гк1 := Голубойцкруг1; +procedure гк2 := Голубойцкруг2; +procedure гк3 := Голубойцкруг3; +procedure гк4 := Голубойцкруг4; +procedure гт1 := ГолубойТр1; +procedure гт2 := ГолубойТр2; +procedure гт3 := ГолубойТр3; +procedure гт4 := ГолубойТр4; + +procedure ч := черный; +procedure Чк1 := ЧЕРНыйцкруг1; +procedure Чк2 := ЧЕРНыйцкруг2; +procedure Чк3 := ЧЕРНыйцкруг3; +procedure Чк4 := ЧЕРНыйцкруг4; +procedure Чт1 := ЧЕРНыйТр1; +procedure Чт2 := ЧЕРНыйТр2; +procedure Чт3 := ЧЕРНыйТр3; +procedure Чт4 := ЧЕРНыйТр4; + +procedure б := белый; +procedure бт1 := белыйТр1; +procedure бт2 := белыйТр2; +procedure бт3 := белыйТр3; +procedure бт4 := белыйТр4; +procedure Бк1 := белыйцкруг1; +procedure Бк2 := белыйцкруг2; +procedure Бк3 := белыйцкруг3; +procedure Бк4 := белыйцкруг4; + +procedure з := зелёный; +procedure зт1 := зелёныйТр1; +procedure зт2 := зелёныйТр2; +procedure зт3 := зелёныйТр3; +procedure зт4 := зелёныйТр4; +procedure зк1 := зелёныйцкруг1; +procedure зк2 := зелёныйцкруг2; +procedure зк3 := зелёныйцкруг3; +procedure зк4 := зелёныйцкруг4; + +procedure с := синий; +procedure ст1 := синийТр1; +procedure ст2 := синийТр2; +procedure ст3 := синийТр3; +procedure ст4 := синийТр4; +procedure ск1 := синийцкруг1; +procedure ск2 := синийцкруг2; +procedure ск3 := синийцкруг3; +procedure ск4 := синийцкруг4; + +procedure се := серый; +procedure сет1 := серыйТр1; +procedure сет2 := серыйТр2; +procedure сет3 := серыйТр3; +procedure сет4 := серыйТр4; +procedure сек1 := серыйцкруг1; +procedure сек2 := серыйцкруг2; +procedure сек3 := серыйцкруг3; +procedure сек4 := серыйцкруг4; + +procedure о := оранжевый; +procedure от1 := оранжевыйТр1; +procedure от2 := оранжевыйТр2; +procedure от3 := оранжевыйТр3; +procedure от4 := оранжевыйТр4; +procedure ок1 := оранжевыйцкруг1; +procedure ок2 := оранжевыйцкруг2; +procedure ок3 := оранжевыйцкруг3; +procedure ок4 := оранжевыйцкруг4; + +procedure Р := розовый; +procedure Рт1 := розовыйТр1; +procedure Рт2 := розовыйТр2; +procedure Рт3 := розовыйТр3; +procedure Рт4 := розовыйТр4; +procedure Рк1 := розовыйцкруг1; +procedure Рк2 := розовыйцкруг2; +procedure Рк3 := розовыйцкруг3; +procedure Рк4 := розовыйцкруг4; + +procedure ф := фиолетовый; +procedure фт1 := фиолетовыйТр1; +procedure фт2 := фиолетовыйТр2; +procedure фт3 := фиолетовыйТр3; +procedure фт4 := фиолетовыйТр4; +procedure фк1 := фиолетовыйцкруг1; +procedure фк2 := фиолетовыйцкруг2; +procedure фк3 := фиолетовыйцкруг3; +procedure фк4 := фиолетовыйцкруг4; + +procedure Run(p: procedure) := p; + +procedure НарисоватьРяд(p: procedure) := Run(p + НовыйРяд); +procedure Ряд(p: procedure) := (p + НовыйРяд); + +begin + SetStandardCoords(1 / 1.25, 0.5, 0.5); + pen.Width := 1 / 1.25; +end. \ No newline at end of file diff --git a/TestSuite/CompilationSamples/МозаикаABC.pas b/TestSuite/CompilationSamples/МозаикаABC.pas new file mode 100644 index 000000000..b58b2e694 --- /dev/null +++ b/TestSuite/CompilationSamples/МозаикаABC.pas @@ -0,0 +1,478 @@ +unit МозаикаABC; + +interface + +uses GraphABC; + +var Window := GraphABC.Window; + +procedure п; + +procedure к; +procedure кк1; +procedure кк2; +procedure кк3; +procedure кк4; +procedure кт1; +procedure кт2; +procedure кт3; +procedure кт4; + +procedure ко; +procedure кок1; +procedure кок2; +procedure кок3; +procedure кок4; +procedure кот1; +procedure кот2; +procedure кот3; +procedure кот4; + +procedure ж; +procedure жк1; +procedure жк2; +procedure жк3; +procedure жк4; +procedure жт1; +procedure жт2; +procedure жт3; +procedure жт4; + +procedure г; +procedure гк1; +procedure гк2; +procedure гк3; +procedure гк4; +procedure гт1; +procedure гт2; +procedure гт3; +procedure гт4; + +procedure ч; +procedure чк1; +procedure чк2; +procedure чк3; +procedure чк4; +procedure чт1; +procedure чт2; +procedure чт3; +procedure чт4; + +procedure б; +procedure бт1; +procedure бт2; +procedure бт3; +procedure бт4; +procedure бк1; +procedure бк2; +procedure бк3; +procedure бк4; + +procedure з; +procedure зт1; +procedure зт2; +procedure зт3; +procedure зт4; +procedure зк1; +procedure зк2; +procedure зк3; +procedure зк4; + +procedure с; +procedure ст1; +procedure ст2; +procedure ст3; +procedure ст4; +procedure ск1; +procedure ск2; +procedure ск3; +procedure ск4; + +procedure се; +procedure сет1; +procedure сет2; +procedure сет3; +procedure сет4; +procedure сек1; +procedure сек2; +procedure сек3; +procedure сек4; + +procedure о; +procedure от1; +procedure от2; +procedure от3; +procedure от4; +procedure ок1; +procedure ок2; +procedure ок3; +procedure ок4; + +procedure р; +procedure рт1; +procedure рт2; +procedure рт3; +procedure рт4; +procedure рк1; +procedure рк2; +procedure рк3; +procedure рк4; + +procedure ф; +procedure фт1; +procedure фт2; +procedure фт3; +procedure фт4; +procedure фк1; +procedure фк2; +procedure фк3; +procedure фк4; + +procedure Ряд(p: procedure); +procedure НарисоватьРяд(p: procedure); + +implementation + +var + w := 50; + z := 2; + x := 1; + y := 1; + +procedure Draw(x, y: integer) := Rectangle(x * w, y * w, w - z, w - z); + +procedure D(c: Color); +begin + Brush.Color := c; + Draw(x, y); + x += 1; +end; + +procedure Ц1(c: Color); +begin + Brush.Color := c; + Pie(x * w + w - z,y * w + w - z,w-z,90,180); + x += 1; +end; +procedure Ц2(c: Color); +begin + Brush.Color := c; + Pie(x * w,y * w + w - z,w-z,0,90); + x += 1; +end; +procedure Ц3(c: Color); +begin + Brush.Color := c; + Pie(x * w,y * w,w-z,270,360); + x += 1; +end; +procedure Ц4(c: Color); +begin + Brush.Color := c; + Pie(x * w + w - z,y * w,w-z,180,270); + x += 1; +end; +procedure Тр1(c: Color); +begin + Brush.Color := c; + Polygon(Arr(Pnt(x * w + w - z,y * w + w - z),Pnt(x * w + w - z,y * w),Pnt(x * w,y * w + w - z))); + x += 1; +end; +procedure Тр2(c: Color); +begin + Brush.Color := c; + Polygon(Arr(Pnt(x * w,y * w + w - z),Pnt(x * w,y * w),Pnt(x * w + w - z,y * w + w - z))); + x += 1; +end; +procedure Тр3(c: Color); +begin + Brush.Color := c; + Polygon(Arr(Pnt(x * w,y * w),Pnt(x * w + w - z,y * w),Pnt(x * w,y * w + w - z))); + x += 1; +end; +procedure Тр4(c: Color); +begin + Brush.Color := c; + Polygon(Arr(Pnt(x * w + w - z,y * w),Pnt(x * w,y * w),Pnt(x * w + w - z,y * w + w - z))); + x += 1; +end; + +//------ Соответствие цветов +var КрасныйЦвет := Color.Red; +var ОранжевыйЦвет := RGB(255,127,$00); +var ЖелтыйЦвет := Color.Yellow; +var ЗеленыйЦвет := RGB($00,$99,$00); +var ГолубойЦвет := RGB($61,$c3,$ff); +var СинийЦвет := RGB(0,0,255); +var ФиолетовыйЦвет := RGB($94,$00,$d3); + +var РозовыйЦвет := Color.Magenta; +var КоричневыйЦвет := RGB($96,$4B,$00); +var СерыйЦвет := Color.Gray; +var БелыйЦвет := Color.White; +var ЧерныйЦвет := Color.Black; + +//---------------- + +procedure Пусто := x += 1; + +procedure НовыйРяд := (x, y) := (1, y + 1); + +procedure Серый := D(СерыйЦвет); +procedure СерыйЦКруг1 := Ц1(СерыйЦвет); +procedure СерыйЦКруг2 := Ц2(СерыйЦвет); +procedure СерыйЦКруг3 := Ц3(СерыйЦвет); +procedure СерыйЦКруг4 := Ц4(СерыйЦвет); +procedure СерыйТр1 := Тр1(СерыйЦвет); +procedure СерыйТр2 := Тр2(СерыйЦвет); +procedure СерыйТр3 := Тр3(СерыйЦвет); +procedure СерыйТр4 := Тр4(СерыйЦвет); + +procedure Оранжевый := D(ОранжевыйЦвет); +procedure ОранжевыйЦКруг1 := Ц1(ОранжевыйЦвет); +procedure ОранжевыйЦКруг2 := Ц2(ОранжевыйЦвет); +procedure ОранжевыйЦКруг3 := Ц3(ОранжевыйЦвет); +procedure ОранжевыйЦКруг4 := Ц4(ОранжевыйЦвет); +procedure ОранжевыйТр1 := Тр1(ОранжевыйЦвет); +procedure ОранжевыйТр2 := Тр2(ОранжевыйЦвет); +procedure ОранжевыйТр3 := Тр3(ОранжевыйЦвет); +procedure ОранжевыйТр4 := Тр4(ОранжевыйЦвет); + +procedure Коричневый := D(КоричневыйЦвет); +procedure КоричневыйЦКруг1 := Ц1(КоричневыйЦвет); +procedure КоричневыйЦКруг2 := Ц2(КоричневыйЦвет); +procedure КоричневыйЦКруг3 := Ц3(КоричневыйЦвет); +procedure КоричневыйЦКруг4 := Ц4(КоричневыйЦвет); +procedure КоричневыйТр1 := Тр1(КоричневыйЦвет); +procedure КоричневыйТр2 := Тр2(КоричневыйЦвет); +procedure КоричневыйТр3 := Тр3(КоричневыйЦвет); +procedure КоричневыйТр4 := Тр4(КоричневыйЦвет); + +procedure Белый := D(БелыйЦвет); +procedure БелыйЦКруг1 := Ц1(БелыйЦвет); +procedure БелыйЦКруг2 := Ц2(БелыйЦвет); +procedure БелыйЦКруг3 := Ц3(БелыйЦвет); +procedure БелыйЦКруг4 := Ц4(БелыйЦвет); +procedure БелыйТр1 := Тр1(БелыйЦвет); +procedure БелыйТр2 := Тр2(БелыйЦвет); +procedure БелыйТр3 := Тр3(БелыйЦвет); +procedure БелыйТр4 := Тр4(БелыйЦвет); + +procedure Синий := D(СинийЦвет); +procedure СинийЦКруг1 := Ц1(СинийЦвет); +procedure СинийЦКруг2 := Ц2(СинийЦвет); +procedure СинийЦКруг3 := Ц3(СинийЦвет); +procedure СинийЦКруг4 := Ц4(СинийЦвет); +procedure СинийТр1 := Тр1(СинийЦвет); +procedure СинийТр2 := Тр2(СинийЦвет); +procedure СинийТр3 := Тр3(СинийЦвет); +procedure СинийТр4 := Тр4(СинийЦвет); + +procedure Фиолетовый := D(ФиолетовыйЦвет); +procedure ФиолетовыйЦКруг1 := Ц1(ФиолетовыйЦвет); +procedure ФиолетовыйЦКруг2 := Ц2(ФиолетовыйЦвет); +procedure ФиолетовыйЦКруг3 := Ц3(ФиолетовыйЦвет); +procedure ФиолетовыйЦКруг4 := Ц4(ФиолетовыйЦвет); +procedure ФиолетовыйТр1 := Тр1(ФиолетовыйЦвет); +procedure ФиолетовыйТр2 := Тр2(ФиолетовыйЦвет); +procedure ФиолетовыйТр3 := Тр3(ФиолетовыйЦвет); +procedure ФиолетовыйТр4 := Тр4(ФиолетовыйЦвет); + +procedure Красный := D(КрасныйЦвет); +procedure КрасныйЦКруг1 := Ц1(КрасныйЦвет); +procedure КрасныйЦКруг2 := Ц2(КрасныйЦвет); +procedure КрасныйЦКруг3 := Ц3(КрасныйЦвет); +procedure КрасныйЦКруг4 := Ц4(КрасныйЦвет); +procedure КрасныйТр1 := Тр1(КрасныйЦвет); +procedure КрасныйТр2 := Тр2(КрасныйЦвет); +procedure КрасныйТр3 := Тр3(КрасныйЦвет); +procedure КрасныйТр4 := Тр4(КрасныйЦвет); + +procedure Черный := D(ЧерныйЦвет); +procedure Чёрный := D(ЧерныйЦвет); +procedure ЧерныйТр1 := Тр1(ЧерныйЦвет); +procedure ЧерныйТр2 := Тр2(ЧерныйЦвет); +procedure ЧерныйТр3 := Тр3(ЧерныйЦвет); +procedure ЧерныйТр4 := Тр4(ЧерныйЦвет); +procedure ЧерныйЦКруг1 := Ц1(ЧерныйЦвет); +procedure ЧерныйЦКруг2 := Ц2(ЧерныйЦвет); +procedure ЧерныйЦКруг3 := Ц3(ЧерныйЦвет); +procedure ЧерныйЦКруг4 := Ц4(ЧерныйЦвет); +procedure ЧёрныйЦКруг1 := Ц1(ЧерныйЦвет); +procedure ЧёрныйЦКруг2 := Ц2(ЧерныйЦвет); +procedure ЧёрныйЦКруг3 := Ц3(ЧерныйЦвет); +procedure ЧёрныйЦКруг4 := Ц4(ЧерныйЦвет); + +procedure Зелёный := D(ЗеленыйЦвет); +procedure ЗелёныйЦКруг1 := Ц1(ЗеленыйЦвет); +procedure ЗелёныйЦКруг2 := Ц2(ЗеленыйЦвет); +procedure ЗелёныйЦКруг3 := Ц3(ЗеленыйЦвет); +procedure ЗелёныйЦКруг4 := Ц4(ЗеленыйЦвет); +procedure ЗелёныйТр1 := Тр1(ЗеленыйЦвет); +procedure ЗелёныйТр2 := Тр2(ЗеленыйЦвет); +procedure ЗелёныйТр3 := Тр3(ЗеленыйЦвет); +procedure ЗелёныйТр4 := Тр4(ЗеленыйЦвет); + +procedure Голубой := D(ГолубойЦвет); +procedure ГолубойЦКруг1 := Ц1(ГолубойЦвет); +procedure ГолубойЦКруг2 := Ц2(ГолубойЦвет); +procedure ГолубойЦКруг3 := Ц3(ГолубойЦвет); +procedure ГолубойЦКруг4 := Ц4(ГолубойЦвет); +procedure ГолубойТр1 := Тр1(ГолубойЦвет); +procedure ГолубойТр2 := Тр2(ГолубойЦвет); +procedure ГолубойТр3 := Тр3(ГолубойЦвет); +procedure ГолубойТр4 := Тр4(ГолубойЦвет); + +procedure Розовый := D(РозовыйЦвет); +procedure РозовыйЦКруг1 := Ц1(РозовыйЦвет); +procedure РозовыйЦКруг2 := Ц2(РозовыйЦвет); +procedure РозовыйЦКруг3 := Ц3(РозовыйЦвет); +procedure РозовыйЦКруг4 := Ц4(РозовыйЦвет); +procedure РозовыйТр1 := Тр1(РозовыйЦвет); +procedure РозовыйТр2 := Тр2(РозовыйЦвет); +procedure РозовыйТр3 := Тр3(РозовыйЦвет); +procedure РозовыйТр4 := Тр4(РозовыйЦвет); + +procedure Желтый := D(ЖелтыйЦвет); +procedure Жёлтый := D(ЖелтыйЦвет); +procedure ЖелтыйЦКруг1 := Ц1(ЖелтыйЦвет); +procedure ЖелтыйЦКруг2 := Ц2(ЖелтыйЦвет); +procedure ЖелтыйЦКруг3 := Ц3(ЖелтыйЦвет); +procedure ЖелтыйЦКруг4 := Ц4(ЖелтыйЦвет); +procedure ЖелтыйТр1 := Тр1(ЖелтыйЦвет); +procedure ЖелтыйТр2 := Тр2(ЖелтыйЦвет); +procedure ЖелтыйТр3 := Тр3(ЖелтыйЦвет); +procedure ЖелтыйТр4 := Тр4(ЖелтыйЦвет); + +procedure п := пусто; + +procedure к := красный; +procedure кк1 := красныйцкруг1; +procedure кк2 := красныйцкруг2; +procedure кк3 := красныйцкруг3; +procedure кк4 := красныйцкруг4; +procedure кт1 := красныйТр1; +procedure кт2 := красныйТр2; +procedure кт3 := красныйТр3; +procedure кт4 := красныйТр4; + +procedure ко := коричневый; +procedure кок1 := коричневыйцкруг1; +procedure кок2 := коричневыйцкруг2; +procedure кок3 := коричневыйцкруг3; +procedure кок4 := коричневыйцкруг4; +procedure кот1 := коричневыйТр1; +procedure кот2 := коричневыйТр2; +procedure кот3 := коричневыйТр3; +procedure кот4 := коричневыйТр4; + +procedure ж := желтый; +procedure жк1 := желтыйцкруг1; +procedure жк2 := желтыйцкруг2; +procedure жк3 := желтыйцкруг3; +procedure жк4 := желтыйцкруг4; +procedure жт1 := желтыйТр1; +procedure жт2 := желтыйТр2; +procedure жт3 := желтыйТр3; +procedure жт4 := желтыйТр4; + +procedure г := голубой; +procedure гк1 := Голубойцкруг1; +procedure гк2 := Голубойцкруг2; +procedure гк3 := Голубойцкруг3; +procedure гк4 := Голубойцкруг4; +procedure гт1 := ГолубойТр1; +procedure гт2 := ГолубойТр2; +procedure гт3 := ГолубойТр3; +procedure гт4 := ГолубойТр4; + +procedure ч := черный; +procedure Чк1 := ЧЕРНыйцкруг1; +procedure Чк2 := ЧЕРНыйцкруг2; +procedure Чк3 := ЧЕРНыйцкруг3; +procedure Чк4 := ЧЕРНыйцкруг4; +procedure Чт1 := ЧЕРНыйТр1; +procedure Чт2 := ЧЕРНыйТр2; +procedure Чт3 := ЧЕРНыйТр3; +procedure Чт4 := ЧЕРНыйТр4; + +procedure б := белый; +procedure бт1 := белыйТр1; +procedure бт2 := белыйТр2; +procedure бт3 := белыйТр3; +procedure бт4 := белыйТр4; +procedure Бк1 := белыйцкруг1; +procedure Бк2 := белыйцкруг2; +procedure Бк3 := белыйцкруг3; +procedure Бк4 := белыйцкруг4; + +procedure з := зелёный; +procedure зт1 := зелёныйТр1; +procedure зт2 := зелёныйТр2; +procedure зт3 := зелёныйТр3; +procedure зт4 := зелёныйТр4; +procedure зк1 := зелёныйцкруг1; +procedure зк2 := зелёныйцкруг2; +procedure зк3 := зелёныйцкруг3; +procedure зк4 := зелёныйцкруг4; + +procedure с := синий; +procedure ст1 := синийТр1; +procedure ст2 := синийТр2; +procedure ст3 := синийТр3; +procedure ст4 := синийТр4; +procedure ск1 := синийцкруг1; +procedure ск2 := синийцкруг2; +procedure ск3 := синийцкруг3; +procedure ск4 := синийцкруг4; + +procedure се := серый; +procedure сет1 := серыйТр1; +procedure сет2 := серыйТр2; +procedure сет3 := серыйТр3; +procedure сет4 := серыйТр4; +procedure сек1 := серыйцкруг1; +procedure сек2 := серыйцкруг2; +procedure сек3 := серыйцкруг3; +procedure сек4 := серыйцкруг4; + +procedure о := оранжевый; +procedure от1 := оранжевыйТр1; +procedure от2 := оранжевыйТр2; +procedure от3 := оранжевыйТр3; +procedure от4 := оранжевыйТр4; +procedure ок1 := оранжевыйцкруг1; +procedure ок2 := оранжевыйцкруг2; +procedure ок3 := оранжевыйцкруг3; +procedure ок4 := оранжевыйцкруг4; + +procedure Р := розовый; +procedure Рт1 := розовыйТр1; +procedure Рт2 := розовыйТр2; +procedure Рт3 := розовыйТр3; +procedure Рт4 := розовыйТр4; +procedure Рк1 := розовыйцкруг1; +procedure Рк2 := розовыйцкруг2; +procedure Рк3 := розовыйцкруг3; +procedure Рк4 := розовыйцкруг4; + +procedure ф := фиолетовый; +procedure фт1 := фиолетовыйТр1; +procedure фт2 := фиолетовыйТр2; +procedure фт3 := фиолетовыйТр3; +procedure фт4 := фиолетовыйТр4; +procedure фк1 := фиолетовыйцкруг1; +procedure фк2 := фиолетовыйцкруг2; +procedure фк3 := фиолетовыйцкруг3; +procedure фк4 := фиолетовыйцкруг4; + +procedure Run(p: procedure) := p; + +procedure НарисоватьРяд(p: procedure) := Run(p + НовыйРяд); +procedure Ряд(p: procedure) := (p + НовыйРяд); + +begin + Window.SetSize(1024,768); + //SetStandardCoords(1 / 1.25, 0.5, 0.5); + //pen.Width := 1 / 1.25; +end. \ No newline at end of file diff --git a/Utils/NodesGeneratorNew/NodesGenerator_old/bin/Debug/NodesGenerator.pdb b/Utils/NodesGeneratorNew/NodesGenerator_old/bin/Debug/NodesGenerator.pdb deleted file mode 100644 index 3987b1ca5587edfdcf37ee7511441205f6f791f1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 142848 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

yVo(*F%?r9T__x-R!v<_OwHwfjfG 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 diff --git a/Utils/NodesGeneratorNew/Scintilla/ScintillaNET.pdb b/Utils/NodesGeneratorNew/Scintilla/ScintillaNET.pdb deleted file mode 100644 index 8dd2a279fb6154d53f377b2d6f4840d80997c381..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1181184 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 z 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

9N$)n;`H$@GvTEk=>+9%TQ`!Ss( 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

p5f!&JQyuI0<%ePhPne}b82Clv@p*3>VzU6b* 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

>= s4c#-'WYE<]F.1K!)>6RˆB43i<[{lw,' ذzNfϷ^Gzkťoy6KӃ$hhFnI-4<=a$Mo`u[_qendstream -endobj -1065 0 obj << -/Type /Page -/Contents 1066 0 R -/Resources 1064 0 R -/MediaBox [0 0 595.276 841.89] -/Parent 1042 0 R ->> endobj -1049 0 obj << -/Type /XObject -/Subtype /Form -/FormType 1 -/PTEX.FileName (PDFs/FSAn2.pdf) -/PTEX.PageNumber 1 -/PTEX.InfoDict 1072 0 R -/Matrix [1.00000000 0.00000000 0.00000000 1.00000000 0.00000000 0.00000000] -/BBox [121.15700000 501.70600000 492.69800000 666.40800000] -/Resources << -/ColorSpace << -/CS0 1073 0 R ->>/Font << /TT0 1074 0 R/TT1 1075 0 R>> -/ProcSet [ /PDF /Text ] -/ExtGState << -/GS0 1076 0 R ->>>> -/Length 840 -/Filter /FlateDecode ->> -stream -HVn@ +(3ru+zpeeCl'Ҵ_rxk#َ@`(GȇDƉ`g-e"2^))&ggŒq@;3e1K>WD - R2p\A 3i1hsA1h#I#Rո* ml6ݴLΊf>v1LQh0q2 _D:|\,YFp^Trj2y'f plem J+R."ejA/t#?~B:}=ޱ^%i#?1N܊*AB[SI S#$xdiƍq-V'ZyqcX_khT^guPܷŞbw.:!5CP| `ts⍇Ǜv?rbgxG3[ hF隘ٟ֢`<^oUCynv>=QV+(A+ǑZwfXϸ#etendstream -endobj -1072 0 obj -<< -/CreationDate (D:20080804134124+10'00') -/Author (john) -/Creator (Acrobat PDFMaker 8.1 for Visio) -/Producer (Acrobat Distiller 8.1.0 \(Windows\)) -/ModDate (D:20080804134201+10'00') -/Company (Queensland University of Technology) -/Title () ->> -endobj -1073 0 obj -[/ICCBased 1077 0 R] -endobj -1074 0 obj -<< -/Subtype /TrueType -/FontDescriptor 1078 0 R -/LastChar 120 -/Widths [ 278 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 722 722 0 611 0 0 0 0 0 0 833 722 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 556 0 500 556 556 0 556 556 222 0 0 222 0 556 556 556 0 333 500 278 556 0 0 500] -/BaseFont /ArialMT -/FirstChar 32 -/Encoding /WinAnsiEncoding -/Type /Font ->> -endobj -1075 0 obj -<< -/Subtype /TrueType -/FontDescriptor 1079 0 R -/LastChar 121 -/Widths [ 278 0 0 0 0 0 0 0 0 0 0 0 0 0 278 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 722 0 667 0 0 0 0 0 0 0 0 722 0 0 0 0 667 0 0 0 0 0 0 0 0 0 0 0 0 0 556 556 500 556 556 0 0 0 222 0 0 222 833 556 556 556 556 333 500 278 556 500 0 500 500] -/BaseFont /Arial-ItalicMT -/FirstChar 32 -/Encoding /WinAnsiEncoding -/Type /Font ->> -endobj -1076 0 obj -<< -/OPM 1 -/OP false -/op false -/Type /ExtGState -/SA false -/SM 0.02 ->> -endobj -1077 0 obj -<< -/Length 2598 -/Filter /FlateDecode -/N 3 -/Alternate /DeviceRGB ->> -stream -hޜwTTϽwz0z.0. Qf Ml@DEHb!(`HPb0dFJ|yyǽgs{.$O./ 'z8WGбx0Y驾A@$/7z HeOOҬT_lN:K"N3"$F/JPrb[䥟}Qd[Sl1x{#bG\NoX3I[ql2$ 8xtrp/8 pCfq.Knjm͠{r28?.)ɩL^6g,qm"[Z[Z~Q7%" -3R`̊j[~: w!$E}kyhyRm333: }=#vʉe -tqX)I)B>== <8Xȉ9yP:8p΍Lg kk Ѐ$t!0V87`ɀ2A. -@JPA#h'@8 .: ``a!2D!UH 2 dA>P ECqB**Z:]B=h~L2  5pN:|ó@ QC !H,G6 H9R ]H/r Aw( Q(OTJCm@*QGQ-(j MF+ 6h/*t:].G7Зw7 Xa<1:L1s3bXyeb~19 vGĩp+5qy^ oó|= ?'Htv`Ba3BDxHxE$Չ"XAP44077&9$An0;T2421t.54ld+s;# V]=iY9FgM֚k&=%Ō:nc1gcbcfX.}lGv{c)LŖN퉛w/p+/<j$.$%&㒣OdxTԂԑ4i3|o~C:&S@L u[Uo3C3OfIgwdO|;W-wsz 17jl8c͉̈́3+{%lKWr[ $ -llGmnacOkE&EEY׾2⫅;K,KhtiN=e²{^-_V^Oo§s]?TWީrjVQ=w}`嚢zԶiו8>k׍ - E  [ly邟~_Y53rW򯎼^{7so}x>|쇊z>yz -endstream -endobj -1078 0 obj -<< -/StemV 88 -/FontName /ArialMT -/FontStretch /Normal -/FontWeight 400 -/Flags 32 -/Descent -211 -/FontBBox [ -665 -325 2000 1006] -/Ascent 905 -/FontFamily (Arial) -/CapHeight 718 -/XHeight 515 -/Type /FontDescriptor -/ItalicAngle 0 ->> -endobj -1079 0 obj -<< -/StemV 85.863 -/FontName /Arial-ItalicMT -/FontStretch /Normal -/FontWeight 400 -/Flags 96 -/Descent -211 -/FontBBox [ -517 -325 1082 998] -/Ascent 905 -/FontFamily (Arial) -/CapHeight 718 -/XHeight 515 -/Type /FontDescriptor -/ItalicAngle -15 ->> -endobj -1067 0 obj << -/D [1065 0 R /XYZ 125.858 740.998 null] ->> endobj -711 0 obj << -/D [1065 0 R /XYZ 188.3 711.29 null] ->> endobj -1068 0 obj << -/D [1065 0 R /XYZ 125.858 393.501 null] ->> endobj -1064 0 obj << -/Font << /F42 510 0 R /F32 500 0 R /F34 502 0 R /F8 1057 0 R /F14 1060 0 R /F11 792 0 R /F43 512 0 R /F7 1071 0 R >> -/XObject << /Im7 1049 0 R >> -/ProcSet [ /PDF /Text ] ->> endobj -1082 0 obj << -/Length 3636 -/Filter /FlateDecode ->> -stream -xڭَ}bX*O#7>xZGZUstzƎ]U坪.J)MsU  œ֑᳍Bere] j 'Mս#ǐp scf|GS!e-Cm5D۾=V\K'gAz)]: tfXAZ\;U2DW@* -?OļF*;8 Clog=NM.hTDkr[xr^ItpCʦ҉PșAQ P QiFCT˧1շ -x 4^G`5 -d:FD NGUe2y:\=̹R7+ vs+*hE㍙C)/ 6:>^CڂTiTJ,!-5V)OI \a0M L<ٷ=b\ w*{@n435;wDakfr{諸CC%ʦѸwIc&x/z%/ ͥ3 haa/uk+Bq;uszszGdI;Wn(J{,Q߲ -^nŸ`xw)&TY}Ogq);X8Iq{h%wc/Ѕ)֦ +nV}4uFJ;8YmҜT} M()_+TDy3yc3}Ur)|M % phx;'hY:Ppɜ`"h8N֕s0ir%TA9]1r/G$[֓\ (q9?W]"GϩmqQHZFa>?7TBI\ -8n8JGu@`$P>itdFFQES{nuV5mp({&qy5o=tci0O}0*tW%e9F'-jtDX0yh"o^}͚p9!S5*", GںNY:,\e-=qFΙnf,>KV(a/aj0 46H$ ͉c326ܻǾXj{#.j), 2 M+j%ތo?:JL #&eyH@RAprx?I5- ԝ}djVZֶ0JB "}ZPG,d,f i yZ.@ZdUMyҋ%?n䰠ܬ0FHͮ F<:|ֹrFQv8<&ca˯G5m"p"GPQڮN#s[:8? - 1?X, @9my-y g)!^ -qGƤh"eqT >ٓn0 d^ţ0*ˢ.^KRv,˫oQzݵŸk*$,߄ !r}upkb>R%t,r|}L`1dvLf%XƗjɑ> endobj -1085 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [168.391 212.456 180.346 223.424] -/Subtype /Link -/A << /S /GoTo /D (figure.25) >> ->> endobj -1083 0 obj << -/D [1081 0 R /XYZ 125.858 740.998 null] ->> endobj -1084 0 obj << -/D [1081 0 R /XYZ 125.858 299.111 null] ->> endobj -1080 0 obj << -/Font << /F42 510 0 R /F32 500 0 R /F11 792 0 R /F8 1057 0 R /F14 1060 0 R /F34 502 0 R /F56 730 0 R /F53 751 0 R /F43 512 0 R >> -/ProcSet [ /PDF /Text ] ->> endobj -1088 0 obj << -/Length 3507 -/Filter /FlateDecode ->> -stream -x\[6~_a+5#^E-6mw3ؗX걦4P3 n %;>^|8t?L-9)KWoW2_^lUR폙Xoh"\f曯&zMu߾yWoydsN -Qc+SJHU. e(Ef"|z_2jʒp|"=j&_7ٻꛮon:C{pV7C}ᇵγvӀ@"}}&Q9XLeG'=/ Qt 3nzj 徻 V9eBb"\z_{E5M=XC pY1wIC  cȂ@6L0#$fNIK.$ ^ihRhAJ -b "-8i9CYX`%,HHJ '#<'D*H0J/p%%j4eҮ)G̀骿YW2V)$HJ+) 4C!^$ &y~eIIl )IB2|^f)L O0N`VR#—D'kskVS;YCMv qQʂSXCD3Q. -h*`DaI+ +K0DXR% -KH5 w`FVZЕ /X0{` M^golipyb{#\KM,[nx ua |N IԅYs@ޱK!/?(ԧ.b/̱7F7 ^gI6{lIABrp9)I㾹i5K`O%AA% -*( C%BJ\AP\<t> QR0h^R"ht>M^fN K']O$Џ_ -p }lB0$\.) ƠyGP' SmKQJ%` O>7 ,ɤyқt>%ld Z)K;&,‚C% ,ֈpakFYyY-jJx̬z$}df5)D$I1ӄO -BݗB`Y} tV|""\Wb>%P{i -+r^X2ÚYuRմ{{r'Ii:|{n"d:zA`@4}_Ho*E>#irz\e?΋|^}Vpk(l%ZzfSAYo*;>@ǦvQvioOm8,)Iiy:!ơ浧}BG bopk\! +G]!wm+wNq`K}VdQ0HԜ!0Eowz[;wy[e2W3+?~1?\u3QPM9iB3߶9T0TeRiLf蠹c3{i ->4K~vpW{Y}o'3C^mU/:ĵQl} 9p~۝+wԡvϙ~=Uޞ1%ƅ&$6J -KJ KLI%x%8NbʼndeԲK0@( w1d2Ip -#㈡Nm0S8R8I^$Z?$%s˼'Esbe2D2J,2,2DY -ʂöR@%٢$ 8XA4Kh>,R#7 -:O]_ o o\Fb<-7ISI.k拠flfʞǒ#矟or7\u֕,4oUgDVP5;)Fp`?M#Jxqcmc&lhR, 2E$S'=1kH=R$^"Dh݁6 .LmJ]~0y J >Phwն]-Qz.kneC+7f{tjD>sU&=><μu.ft0Skk?E7~gQfC,dՐ$|b3|䟡=O/Ԭʊ_dKt!Cm?Dʾ6oiaNu):-2m(p>u[6Ze]-LLSS@藕 Br':QW}4iCt F*)'b,` $>>:endstream -endobj -1087 0 obj << -/Type /Page -/Contents 1088 0 R -/Resources 1086 0 R -/MediaBox [0 0 595.276 841.89] -/Parent 1042 0 R ->> endobj -1089 0 obj << -/D [1087 0 R /XYZ 125.858 740.998 null] ->> endobj -712 0 obj << -/D [1087 0 R /XYZ 236.564 711.265 null] ->> endobj -713 0 obj << -/D [1087 0 R /XYZ 270.068 361.925 null] ->> endobj -1086 0 obj << -/Font << /F42 510 0 R /F32 500 0 R /F34 502 0 R /F43 512 0 R /F56 730 0 R >> -/ProcSet [ /PDF /Text ] ->> endobj -1092 0 obj << -/Length 2842 -/Filter /FlateDecode ->> -stream -xڕY[~X): -#y0)tr<8<@2=[30D+-})Q&~YE?WLDdd3ۧϻ}Ɨ -㇏?ۛwl(,.`ZīxqNfhkA꫰,4>bۧPS)`w(ǓaYcɓy2ckxm%'ia^zZ}ˮt.v4tnx;j{"IE0giٴC -} J<Ӳp҃`hWrHSAz=օgsE{K"v2P6FۍȦ'trx'zZ&5ј4:<98NwXAp5YA+0G*sܩc3 8~/'^9Mj |6@֯Ւ);T|haˮ¥z8MK'Y:*4q:0Nh=8*B 7f0`%a}QM8!r847-*NEA>k/)Wtxכ AEaeGۻ-3u[bM0 UQLKG - C>>g9І; c0̗]G궊xBȝ챳g pSy| -jJHE {plzpZeݍ=vr_ChqTn6Oʙz帩~$f]3r?N6Wk0\9G1}jTui2t)đwyȅ4eBjtQ("$B?7OΩ!&TalQ*l -oJza~qX9q& -#q/U5fGfgWR -)!Pg_IE}?FdѸi8- ܻٛí>*E+nA#%ji R *W r -?0٫?τ/Zߞ9a "wয়'B+D,l{%q*mLL)n`4P+ -*dVJXȔ2)F8?T‡}wCLphq^Pc7f .!#jKiM9/'1hيѶ͖gz.Nn^R?My Hx6j!~ -X LH&?tcj#s`JE;'Xk-t7C_Z837G _Ģ;tXKI¶)v=vK1TXU'b|=w[9bM(vC1ǥ}O't2.c ` f~BeЁr'BKm)Ũ4gR\a93&!ET /ekeQkZL4I&E\\p ʜiJ6ySO- gvQPbEp%Dx;@-gDYfN?endstream -endobj -1091 0 obj << -/Type /Page -/Contents 1092 0 R -/Resources 1090 0 R -/MediaBox [0 0 595.276 841.89] -/Parent 1095 0 R ->> endobj -1093 0 obj << -/D [1091 0 R /XYZ 125.858 740.998 null] ->> endobj -1094 0 obj << -/D [1091 0 R /XYZ 125.858 647.001 null] ->> endobj -114 0 obj << -/D [1091 0 R /XYZ 125.858 439.958 null] ->> endobj -118 0 obj << -/D [1091 0 R /XYZ 125.858 361.338 null] ->> endobj -1090 0 obj << -/Font << /F42 510 0 R /F32 500 0 R /F43 512 0 R /F34 502 0 R /F56 730 0 R >> -/ProcSet [ /PDF /Text ] ->> endobj -1098 0 obj << -/Length 2604 -/Filter /FlateDecode ->> -stream -xڵZKﯘC w.EAwm؇ #ohi!j-3C" ,"Y"9c<%*UwYBI=Џo2_޼!w9ɥ{8.&z8KR>}eS{}qh~?`N!ɒلB7FT7"2@ȮH20Jx>(V t2m3^tW mg[e4yg^lK5Sa^('̹Im$j#Tr?YPݔ{H2#\/Q2N8h>9g$E3Tӭ!pZXnA$oeDp|,2d3bͤLfsg`Bo9zފ37뾵mY^;mX5eulw ųZA$KKNZ4/1D(/]k(HW5 m#D=_Z`ǐƗUJ8sjyr&,HyrD.(pJzD/01&)|GF&NXS sf3$if ;=Fs3vc024']^y7mέIcmQ/׽9vIW5(9 $N*QR 2 Kv&`~E=&k;Md Rfm",_)t3 2N(MnjeD dӡ6$/V%(X0OZz^O>.Ed) m}9UDVu&yx)SX1'7I7?* -lqqpaF*;ϔrli -u)5 m"';'A[Òa#/7n1F出jlH8i'洆-ۈJOF$x'Di2`PGTX>fb8`=Jys;3`AB}uFH8$Pr$m牓Y$J[ccpeqVIW۽f`Y.nZeGYY$Xh=cE\Hf} ?Wj $M ,G1҃m{ˉW.pv(Z}.Y3p^P=UC]&fiv TS=9WZo7q́da^ k/I?0 ?*S*Mwt * QGI<`;H& l'iЌ8`]yr(\{!%m`5F8:mtJqm,um=us d EWloee"*9SZ9Y莠m-5BB 9|IcUݷvN&< Mܙpmثevƈ?Mx`D/ KXC=Ee5, -TWYըXYwYTj+p۩A)I)@h;%"%gY&oG e> endobj -1099 0 obj << -/D [1097 0 R /XYZ 125.858 740.998 null] ->> endobj -1096 0 obj << -/Font << /F42 510 0 R /F32 500 0 R /F43 512 0 R /F56 730 0 R /F34 502 0 R >> -/ProcSet [ /PDF /Text ] ->> endobj -1102 0 obj << -/Length 2653 -/Filter /FlateDecode ->> -stream -xڭZm~bXy^.H^p`2"K$goE"a?Fp晇3һe1.2+No< ";'{$ {xL;EǏ[m3l)?}/{srI*$hqo= D8sD2l d7,MaQB( SmKM^{˦֕fp:>f@ό1#1a"JdG*XYOZVm۴V6qK7ӥ]UֶߩS^elX4-w^5XZ=I3l3Тg̢gnt_MO*Z9cf]UL, -9lؖUu_=?>8ߴ/FpKq5вk̢kff^*5 3dU3'3, $@/$W$?ԭdZYIq[meA}q}٧Oͥ -[,aDpG@a_t x f+21@pp$F׳(%H߃yv<p ]mlƛxoU3ͽE. q?y5e}hz4r,6 .u̷L{;X n r W}5^M2MOHX<&L@DʖOMW:SG{nw,Ifq2(#2yBH2?`xeD҆Q -`+,cm|ScJ-c ZƎYƎ-b>'%逩YJ"( d& #<0C]%,вցm ` xr*ni5rA-flsR'XX̓s%z*UN^MG~ayC;Q0`-XJeRGW d06d}뽥`c0zH=`p2(`8JY7p[G9B- Q4ZLʺ$UHddRNIs -Xyw;\: >!qOWk*OKeFA<@us*߄KۤfwUY4m%X.=F" -h|ݘ8 3D+[Dn"g'@kv2M?"ش_Ry}+v5xk0+O`jڱŞ~|N d8ỲYvnǬQ)т-?݇Pw=¿IHJ..S&ƏlNfbXofI 1:$Ć&ލbÿ̐ c -_tgoU^]?5tL8w!:7, +!~qH[ -P_S,$E&a- -[頾=\Դ2uDN3'>0#V^Nfoе{L pNT&Qg"3" Z6NMf K@y+LY @!'%q\ ncPkybF[:2f?nrj7s+*73O+&)Ş2endstream -endobj -1101 0 obj << -/Type /Page -/Contents 1102 0 R -/Resources 1100 0 R -/MediaBox [0 0 595.276 841.89] -/Parent 1095 0 R ->> endobj -1103 0 obj << -/D [1101 0 R /XYZ 125.858 740.998 null] ->> endobj -1100 0 obj << -/Font << /F42 510 0 R /F32 500 0 R /F43 512 0 R /F11 792 0 R /F34 502 0 R /F56 730 0 R /F14 1060 0 R >> -/ProcSet [ /PDF /Text ] ->> endobj -1106 0 obj << -/Length 2847 -/Filter /FlateDecode ->> -stream -xZm_Rrʌ~($Ed)HaAf`_~n`䔓Na~7/ HH&wUtwo_Ŗh_} w)I%\lt_}'8<}@E{Of}L}a? dSwRz{?reJL7gW}PXGkϳ=P(,&lg؅'Kۦ["y'ۦhi"!VT%""M0 -h! UJGPJWɉ*PbFZxJG3ΥE -nB^_Wm Ƣab..pv+j H"w,M8_XobZp4 -x iD$lz^ .f0O׾׮M/ \Ys8*Zk-]W>9tz3g^Fa95P5~68$ Ʉ(k7 -s=,cmX'\O{vYq<4+&訷0q6#~XIol7ݏD蝀Yy U^"RE \t/p!u~#pN&u+VQQ=|.{i"هXDz.ؘ9}0K|Ymv&>qFX p@I1D=~ #m͊,DPpoH<$Ǟ ,IVd}K J]|2у[7?ܳ*VSp-4Jʉ9kN`-Vc옒fvB# T%1?a*2Y)>g&_'DjKW#a1(l)KMF9tW7Oa8, A! &K;c"[08zkCyc*Κ=g cO&V? DWtĄN=L fd -leHy?jqė7R5pȹέn]C"}S@GtD- ~ScBn ,|]P]) -Enh2x J"Qm5)wd3~>rʽtp"h*t&l1l~qϭ/~k -s͋@vC_kLm&Rc_'xD7h R5ݶu/1mcVt&$,ٔ,0 @[!DD/d)\ss5]*M nrcK+*(}ggTFEN+Vx576\mF ê/XWfas6&lvH^Dt@\][ l\h/:X/c("!b<Џ M9)"Q"yN4^Go`> endobj -1107 0 obj << -/D [1105 0 R /XYZ 125.858 740.998 null] ->> endobj -1104 0 obj << -/Font << /F42 510 0 R /F32 500 0 R /F43 512 0 R /F56 730 0 R /F34 502 0 R >> -/ProcSet [ /PDF /Text ] ->> endobj -1110 0 obj << -/Length 2823 -/Filter /FlateDecode ->> -stream -xZݏ۸_/EC)RzwMQ@=P٦m! g(SCQS+b/2"7]cQ*${O|]!4{6zս8W&yg -^߿{_$3Ini{nByD"-D "2`0NTŅdA+X7+GO519mmKJV_& w-.fDkD, )&TB*".^̸UBd<_700ƭ>8x.ON0b)%Ii6'NziD[1E2׿,lMSw}{|^A}@w? -bVFl$mh='3:V[ u2 O)XH,v-Bul;>"C>SI-<͌bBSyg ^{QGbm0(L+Co4e=pgƉPRfŐy@1H*+߹0+C6qKUGa5\Chb>eϡШtE}܄si4h\w -W8N-dQUuݙhW#죸:Uz62agMBnHԕA ݾy+w=N2,do: s -z l]q^$HsxZo;xSciK'qmOuTAROzFmD-xF~$A K!ækph<T0"ig(J³{驠q;!)n\4 wms m@)eʧ Dȗ_Rh,igfq y@ͦ55rECm]wW5<,@A' ʀRgoӸtx/"ldU8cx,>g* Ne}>/ҧCSr7ܼ'Vo1ȑ/KZrP1p%5q5$Y,b(njiOv}ppT$Pݺ]m"T"ZzPdzt90DUTvF >2G:'%s,'`i.)X#au PEУ4!d|YNl1kwe QcuzK. LŸGǁS1Q =: ~r~|]_rFoK-d׉?q*{z)iu0|!I'PDh_61wߖ7&BGSBӟN?nfu!ts͚kr@}^ѡPWq=-;蹓<1_\0={nshzow"E~R<|~<&Ddѩan";M(|M_GF\Do ,X,#endstream -endobj -1109 0 obj << -/Type /Page -/Contents 1110 0 R -/Resources 1108 0 R -/MediaBox [0 0 595.276 841.89] -/Parent 1095 0 R ->> endobj -1111 0 obj << -/D [1109 0 R /XYZ 125.858 740.998 null] ->> endobj -122 0 obj << -/D [1109 0 R /XYZ 125.858 514.059 null] ->> endobj -1108 0 obj << -/Font << /F42 510 0 R /F32 500 0 R /F43 512 0 R /F56 730 0 R /F34 502 0 R >> -/ProcSet [ /PDF /Text ] ->> endobj -1114 0 obj << -/Length 3044 -/Filter /FlateDecode ->> -stream -xڭێ}BR1 gH'pM[4@JSKB 9\r7jX̹h¿h)&$qdY9^#l} =o.V,Ȭ?,.?}/o_}~i:H AX!ݻf٫8 lpNBI$6T6WHD\v2}"y!l6(m[vѶX9FhU0 $ 7$A(x{: -e#z=Ypf&*3Tsm T 3㛎r%o~Ku#ʼng}#gcFn56(H{"G8O# ӡn x7?TEx^@KÕh(O=70i2)Sy{B y*˥5 KKXvǡ-Ns ;&zQ£{@/꾃ݿ=Jv2(kY׷ Xꓜ,=.T$9A3Q6#hRY5&)5aYʊXqC/kQ<1 -]\\[q 4Pq"o|Pn^=m۴8"nm9CW<{;u&B />P8KY:b$TUDNǾl5>ݱ- 9qt}^=9'BOx(M V:3 -GQ3~ -N*]g y Kgf?̙>.i| a/GfA0K 7z30&m_?XB9NLsqST:E]jwh :\`I~V(N- &ǡg' [v$Me$T (2"?-jxM3 rGOk9rh'h"\hd}?Ϋѵ~Ih2`Jc#|*{|2Ͷ/Ny=ݶ6H,P`sS -p*)Мn-u_7mU<,CъyH!xH|+xU܏r  NEuk@[y]G|Zq,Q%f|![$ki݀]V@ -V{+/?;W4,Q8s$BUpfE4 v`vȏ_rq& ̨q~5E40~?a,A8ke(c*g~Y#eMfP|)~~oo{CIwb#xScU#ҹcjpbR,KX?U3"Ҭ#&|fb<)NIlATR;K2JG!J25VADlyzj! V!w)#dG^2Bί%V;@ .ӂ|Ų'y"'˼XeA|F!f0t@9w8IDB#'h) n Ka[#*]8yL2)2kУ#qFP>w n,Ɠw:v[|zC ^> wat0_P2Uw>E w޻>~$`- --0 %wΠV'ƙܚb&2_ -j hTݵ.[ЈʢAНrae^G %3^f\fc쇾)y+LzH;Cj -f4OS0VkiJ d(ktLAvoZ !QϾr[mcZc[wَ{|Ch,0b&Z g<Q Bĭ/. Qx罃MTbGR B+,=>RLu"g؜dS: ꘀENj}uA?B¡Wu .!󗕣l֝Rr)j#Xa͗ņ+G`(kW`Hԣ1@*0 S+ 3y|BAIIz`O%K " O,l8=鿢 -{b8z[7P+jb R(ܕ1YPKA@;(ܸk+gGX"rצ3߂D} 廒\z_sngB׎1KWOQyeo!p|%񖪵+qwařKɸ|!Y1c?hP$™?pg-endstream -endobj -1113 0 obj << -/Type /Page -/Contents 1114 0 R -/Resources 1112 0 R -/MediaBox [0 0 595.276 841.89] -/Parent 1095 0 R ->> endobj -1115 0 obj << -/D [1113 0 R /XYZ 125.858 740.998 null] ->> endobj -1116 0 obj << -/D [1113 0 R /XYZ 125.858 580.342 null] ->> endobj -126 0 obj << -/D [1113 0 R /XYZ 125.858 276.941 null] ->> endobj -130 0 obj << -/D [1113 0 R /XYZ 125.858 176.749 null] ->> endobj -1112 0 obj << -/Font << /F42 510 0 R /F32 500 0 R /F43 512 0 R /F56 730 0 R /F34 502 0 R /F11 792 0 R /F7 1071 0 R /F52 1119 0 R /F24 1122 0 R >> -/ProcSet [ /PDF /Text ] ->> endobj -1125 0 obj << -/Length 2821 -/Filter /FlateDecode ->> -stream -xڥZm_!0*ц]i4 Sh;Hb;{gvf`9.gm3,-'DċH{"I[=L4k7{E"P-nnnv.Zz|ϗެ٥N@k\d0A̪gi깂$<=y~bedЬζM^4e7YMfKޕs-yO@s@ɵ" w2vv]"|/`]%V*Z~*E#`-?]JmEwyz{[j bE"D7Fx<1ñx`X%BEQqn!mZYu x':,SZY-M˪M 58"-:I8|P1k<^;Cz,QpݤM%kჷ0js3l !#T }.n xQa ӂ/>h(\kjN`xb 3/~pd<_DW;%v<}q#0(Rr⠂0$=Ķ1I2.4^䘨0Jx0C1dNJl9B!X_|7<=F0DĞ)ItW2ϒ,u@RI`$rrn?qb7pmi^ۑZK3xn㈔DZ2QZld(Tw؈ 9i8)˩H]xɌ7' .JCVyZ4-wTxˑ5c')șU4?Ώj2^6~wJB>/_1N*Y뚆=aWJXv S=[?;pEU5n_6 H`\6 JT7UZք~X-ߘ0>0ha~o!IQl? t ?rt.8ՉQ @2 }fn%V6`_?٩(a-(XC>H{}Nit#f HC kM֛Uf䱅 o !DSU'1WbWx&OqTùPJ~򻼱:yd >&N]"CE0)r|? &7)y9كO+}VxPm35'8@y]^S̐jn4U 2hs$}[~& Fc+tL%FT{,+^)Ǭ23 LφMĦPχرRv13V歱-cu6)I-;Ey^y00;q`c I"eyrV㰛U782_\lFKBhwU:C -:@%"a7Vicn>K_|Kt66 mɯ|> hM*GvCy7k8I%,Nqt߇9m\6K ð; jKf^^Sy:XS(ZI-=w$O?+wacTx-LsIYVHЋ6%6i3ޕX xĀ Cp`HՆ"5O4{2 -Qˇ8wfV6ʆT"Բ%[Wp -$XQbDH)+\ VX';is^kgLlhxB(Bn0.1֬sぢESf(v#:MbӝƘҴїCfٙ1;3 hzb1Jh;zp*1Gix/q3g)p>A1E` 9Dgm`Q5Mӥ[ *1Eh?Eecߋ–˜k6%4uz@KfR(弴Sm{n7e}ѥÞODP=C5_vk͓P1~y ]T#뮼/ܾn|@~TXҷΗc*3$s{le[<4f 4 5m7;szuV.{T%TOH/>dN^ ѓs\J#2& }#bFfѵ1A1OO_bF O4˜z>@ iL\ >2#qӧ' E3PC: -3MhWG`:> endobj -1126 0 obj << -/D [1124 0 R /XYZ 125.858 740.998 null] ->> endobj -1123 0 obj << -/Font << /F42 510 0 R /F32 500 0 R /F34 502 0 R /F56 730 0 R /F53 751 0 R >> -/ProcSet [ /PDF /Text ] ->> endobj -1130 0 obj << -/Length 3744 -/Filter /FlateDecode ->> -stream -x\YsF~ׯ`,&MU[I]k[e"! 0Y{QT*`gYY*XċRbs7pĒͺCל.T$[\^]n-jM0\7?WoV.5< "@s.\@HUьcS2 Tiq?uZSΗ.MN8+Wi XdnZw'YWnCF`z  -$fg >05!B"OPtY\/[֠f jy}Q՚MMo}"0IiL;lEIi^[XʴIYg>)&R"+ک*QTY,˼0Ƃ}LEv 2CtS-oJuyԦ;1eZLO4$hum;K#5@ OzNd=#'\Tyv; * aEcGADTX $Db:Ӑq$kAӁ9u%Εp-6hc:v``z_}L}:S$,:ju0xK4$`3Fj,Żb ?\%a@Z.Ŕ_W+t² hQ4QLRY5bc9T=,5:v7) X=cC@P N t}Y%50ujȶCP8cX"IQS$߇" wQX.1+p[#1uRaڧC0AzKʀx+t`KD@8;Æ1qkDa -nGqoihMA@<8?TK=`iRz$9z)XBٗg`w~e~mZ?@s4ϟO x:@ׂ jږ"آm/R ̓C1z]YP$r@XRC6O$nPMĒuBG=abb?3|exI@whp*f,o\  _Z`e y؇dݟ精EH 63Xј>}S0JœE8=4^WR=پRC#cO|Nh X8ލ$*X,6GFŋ} {W쐑Kp!y1+1p5q Lx#5 -2GSܷ(aB$c"KCQҠcadW*T/:ơxeRRjs!Sȋb X΅iG!m~ZZ3|`Jz}h2\;".rs'玥A[}[U1>kN3w|2t`{[fuc2D ѹ^=* J0 ;N -3Rh$TȞ&l΀ ;Vyii8bS aF& mtNߕ5USayiJDnO۞2້8kE=9+-SɜBD a=tf Yܻ]6iaaԗ=+QDtjd**43`9Ɯ!;|G7`dO!eB ѯK[|w9ZZ ;~G9dWf<)Mg-l|Ɓ253%q=@u|bD泓QKT`Jz'/82G>Uf(W7Qq -kG;`ԝ`Wh=D2o"hHf#I+9>MoVgsf=Vh^z6{Vj'7+S,g-au*jӸ.NQ׼Mړy6n.ϯP94{rKT88Z`W(^1lf9S"`a4^xt$ސy$p4:߽HwyK5!_ta`mޞ׻^OWLbxbf#^~Y{m"ƻfv0j%=!vŞfg Ⲩ W+UW F ]FȻȜ~հ { ?v-9my9`t&v;b]:C/ jv*7%+@tsG; jE|j 4砶eAOљ} 5H@ Xs?C`guQ6.,`$[>k|J -ı\M\*tTI!SߚJERp Wl#~ֶ!nWh˦L bg>~RtY+-baO͝fUK]ݻrC.f$a W@)@kD򟵣]w' %w_M(4괪6Td9`&|Qooum%$ii -pUgdĊzf_Λw"7 -֎&mߚWiUꗲµ>4^XI&Vr|tfo&$(O- V9wLBL'S`TզEd'oIz^ X?ROeK-o]NWlc/"_L@0`E]-1H[[9u.VO犝*ܞQ, )◦SǨlb9@`*р<55pwK0\ GZU Ƌ]jMƾ(n]l;4q9N~1 oc\y'~;SVq_3kNT߮pΰljх,v%407O)_ \Ɠ1(ܦ X&t)3HU8j.uJAi<;de./FknrRq6X6@xl*{ PEñ=GH m-]q!. "pK,?gyڕ7[K p[3 #.endstream -endobj -1129 0 obj << -/Type /Page -/Contents 1130 0 R -/Resources 1128 0 R -/MediaBox [0 0 595.276 841.89] -/Parent 1127 0 R -/Annots [ 1132 0 R 1136 0 R ] ->> endobj -1132 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [303.84 619.29 315.795 630.233] -/Subtype /Link -/A << /S /GoTo /D (figure.27) >> ->> endobj -1136 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [305.374 191.322 311.352 203.843] -/Subtype /Link -/A << /S /GoTo /D (Hfootnote.8) >> ->> endobj -1131 0 obj << -/D [1129 0 R /XYZ 125.858 740.998 null] ->> endobj -714 0 obj << -/D [1129 0 R /XYZ 248.2 582.924 null] ->> endobj -1133 0 obj << -/D [1129 0 R /XYZ 125.858 253.456 null] ->> endobj -1137 0 obj << -/D [1129 0 R /XYZ 140.204 139.255 null] ->> endobj -1128 0 obj << -/Font << /F42 510 0 R /F32 500 0 R /F34 502 0 R /F56 730 0 R /F53 751 0 R /F43 512 0 R /F79 1135 0 R >> -/ProcSet [ /PDF /Text ] ->> endobj -1140 0 obj << -/Length 2511 -/Filter /FlateDecode ->> -stream -xڥY۶B͌Tc!ċt:N|gNSGT{wH,.BGIdiv }:Y ^I1RC, -Fwu6 -7qq0e$ƭ4zpNBPT|ZVN"6Wghr-q2 _'y*E[D$uzUUO3jf r˹`QudD=ϙѭ*HX.7U!]<Xo#v -JZtMbe;2eB730. ZSt Վjy5n&3:W$'s2]t8"̟n! O…q"ޮt਺0ޒ0`Rx^W=vWN9!#Lp!&;g"~?,3 s -(݆4 &O&Wu=jp6ixN[dwluᶯYjL -nLYg5jZCˢu3g68,&ip60-FY}6,9<^z w4 @G^= - :DŽCcU*{V}3'ڗ]3C~{ss?!~2>~'`SK RX"$D7)? ⧯O|2Q6vab "&th4 -‰sx`AڇPC?ТtWds|mkg/<{.\E]qקw8@%ܢꏏ[,?k ^v"VtRtRquH50eP  ްG&̙S4a$r솙HLS@:Hu @f``glɊ͌'Xmn=h+kj@8jrWsͫ~vNN{ -,A !_q}@ۆ@Χvp8܅=$h}3I\]f!%"Wg2wcf7i\w -;\{{ w+mpC 'l5?.WR͌O -zEOMb'Onj തO\L0bd4ΉӲyX'܋6MMb1",e}#!+V_”$lMCs>w.zJ }ܹ`T9T߾<.EM="{`˞N! ?91s4|\P8xIsޠxs# gY.yLƤ) xO,ioh;<{Pt7q TYlࣼ &dG, EQ-[JFRΟ<ńFrS!Q"v`=QxWyOر2iHW9'kj38 ^?$>dendstream -endobj -1139 0 obj << -/Type /Page -/Contents 1140 0 R -/Resources 1138 0 R -/MediaBox [0 0 595.276 841.89] -/Parent 1127 0 R -/Annots [ 1142 0 R 1143 0 R ] ->> endobj -1142 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [303.332 691.021 315.287 701.989] -/Subtype /Link -/A << /S /GoTo /D (figure.19) >> ->> endobj -1143 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [378.866 409.716 390.821 420.66] -/Subtype /Link -/A << /S /GoTo /D (figure.27) >> ->> endobj -1141 0 obj << -/D [1139 0 R /XYZ 125.858 740.998 null] ->> endobj -134 0 obj << -/D [1139 0 R /XYZ 125.858 467.25 null] ->> endobj -138 0 obj << -/D [1139 0 R /XYZ 125.858 312.521 null] ->> endobj -1138 0 obj << -/Font << /F42 510 0 R /F32 500 0 R /F34 502 0 R /F56 730 0 R /F79 1135 0 R /F43 512 0 R /F47 642 0 R >> -/ProcSet [ /PDF /Text ] ->> endobj -1146 0 obj << -/Length 3413 -/Filter /FlateDecode ->> -stream -x۲D|'>[ - -yбe[[2{G,ᒇE{,Rf],Ewիśo>{zRQS"Wmm&{J4S0VE. sEHž-mFJN>( ϋKit/JUkTvB#a]״wծ(4@q4&jcw$Lt$d\ITh_^gk.q$tvSTn-wsG eҫ0ш:" 2,H$LEұbEb$03'cgzsbt<=bio6kתX_ڀT.z4607ZG4Fˊ# hj@m(|U ʏMM7ArA -6SEZ8VKpEp3pY-Fg+5VADZTO2TϫUV/$$ҳq$7XFI5d!{hT,C%rP#ƂV-yMi\u6w\Dby56 DH W}ʐ?N;1&{GU0݃@nSs"v@l* g!7 ]Cwe;7 07ANB ?˫?,1owٳ/ca N>2qM6o -0UeSU) A-C7tIҌ~6(Z1V -z.*h#=󉏱GY('Zhnj$d@|7_\<YБrOi&%imhe 0i^ w#`oIqRV٩A C Wթ^y_`-@ߓ>"܇RH8!e;+i{qF]?7!RB@zWe<#2(U?!*I$!3-cc(m{x󆆏~OƄpR:VaϻǬJ߱: -$] -A:kmDFvPf^?KW+2RĦKz^44=,h#$_\Dkj~u8Z:-_pXu9|f‡v!0 t}("( y-U T^e{C2fj: H!ҁ%rPrzuv~gOB.mwzQ |CS$LGZiYY_M^6E[:a?h>$7 -ț=. |Um7hP/cAq+_)ˊoy/DME a 'uDzFƀE|h]4xU48o՞2h9BA1hx6x-V9@49 Fx_gTcY b0cCT\?2 VNMK<`w ZyFkAcYigDZ`{-{39i#=wa^ؒU S}vp3GyU0( ]hs[NTCZL%#SC2i$u9`\!פ5-.Вi-Y=q5VZ`-DbD021`)v@rl`'t)3) _KPXPn3v5dеO̟#'NvTnj9Stx&tj2bN0gbE٩YьW%O|p~Zǵ ǮjcUL\PPx-/X5<觝dh38a`ާ1}i!OQܧ3jE! 6(-/ C-r}-Q&?dC* mE. t -?CjB&ĭd+ο -43hfBߑ;WH -0:oOkiM`up -']>NuةGpNppSՇ^έ\x`|s/VzX H^0ҫǚsw/uLʩ -pco2d -[[|D 4s6&t2W4*zj];Q}(BA۟Vİ"J`fEIc+VygoUuE̗hR;np# #0}Ek1aǂnH`"'pgט -҈ @t2N*"V~<)]\=7g^s$J)X~ |C F .<"/9 .hCDĭVA: -ic\/C)o)9HU]o|3A68;f[~ ɖ0qW TeX秋_XOgϣGǡōi{K!(_8ˀ}z' -DƦ6t+ V0}܅Uǜ:3X{HX5VVS) Ht0c+woj?)chOTu p+G‰dgx·j8`'JE^v[0M"yBo|пHo~Kۏ73Q/ԗl f+KyæmKtKGW<~' JxPhv.wtDڤTHm8pBg? ~Kg0{3CatoG@ԫxB!]*1d>$r:9ZQ -վE$+ DG z5Ӟ`RdeMN,ۄK@RUoI(hh/)2//#km`i_H7b),M +@xC2m7*f_x!tgeUvL l&Q0t'zqwPJ-Œ#Re˸-K⅍챏za!$𒿭D6?k5 .]ߨ8A9H9c*u5UD=B=OO\9Lj:W Dud8Hɔs|yi&{3' 03 闿BL -@ -#HSoE (oҠ#8\a;ahz:Aˤp \$t 3ĔYa2^ADul+X3 UIbCC1A'ӰJBt0◚,:VӗS7 ¦L.Tk%*a˞UsHXs|D 0ec˟@ǃЛ-"qfw@ kvń `Yh]Sqb(+oV.b\Ώ;!' _ecU GuQfR <B e -.Z< EAcn1 m #s␓5QYEGP& J6 AE -@]%ozJ+a&0U8-endstream -endobj -1150 0 obj << -/Type /Page -/Contents 1151 0 R -/Resources 1149 0 R -/MediaBox [0 0 595.276 841.89] -/Parent 1127 0 R ->> endobj -1152 0 obj << -/D [1150 0 R /XYZ 125.858 740.998 null] ->> endobj -146 0 obj << -/D [1150 0 R /XYZ 125.858 174.707 null] ->> endobj -1149 0 obj << -/Font << /F42 510 0 R /F32 500 0 R /F56 730 0 R /F34 502 0 R /F43 512 0 R >> -/ProcSet [ /PDF /Text ] ->> endobj -1155 0 obj << -/Length 3468 -/Filter /FlateDecode ->> -stream -xڥZ{ܶߟbʢH4ة T)֊Iw gkY9qb?aQJTgY }H0lDϯ=}Ug\]]?zz# nśOWRI)DeNP)RhQ3V ih{a[Bo<1 ؼǛH|eN|滎R_dֶIIb/U4 0tD^"qCW/ddQ*tD~Rτ?JՀf'2rW~P?$.>}ڧ yˇ-ݖN75tl_f@ИWs7`ؗL6Yptۆm(B{yMj28 7`jpyk~/BנzOܖ6@_@c{V߳S:ԋƒС A>]¹ >0j|<`.M -?oJ0  Cq!#3y$l_fd 'uPw#/^0#[S 0D" rcD]$!ׯEg/pˏ~NcgEj_wUu4 gLb'WQRrQtwLЄM|I]y`N|Y$JXi$bZ$>j#* c؟pdb68lfi"tqoqdsna' !{L}"[9U^f_"͝uZ@UMO4H~j]7X&vq=-ᄕbAW%g},a`?ݽ hYw+H 9v}iG='X߳`A7ޱ M=/ݱa0g{<`<?ȕz8HGd.\_nv@p űr?,T}%wB(aL0(A1܍ߣ4"EZ3wj=ʥva* )ТZm''2ntNoء5:) zUJ!S QTd7`;*3A"VN6@G )WG.[E^wG' -Yz^(n]T}\wucÙi m٫=տ Z>|O{kRXuMa+-1,vdwa7Yqn8 3M2,>Y3փ -wTiKFJ<Ȭθc/ Un Gd;e%H8E'#r ?G&:~ 0,S"3c[؂u/Gݟ"ApA,aЏ!$ A>DTM`}ZwE?Ì7tYZ8YmCw-cföߑ;\ܹ,XvQ`|$(H.AAHMhQB~(@ -Ff@>/>LXrlfKGz39^zZbق#"?ߠT߭JVSN+.H5YlƹUDd]LE=]MB7s0acNĜI Zj׆mHob9Ca`h=їuAy(zhPwq=!2fǠ;9M8󅂿ѝ>Ted+O .f0-F(j#Q-\:D? BlUp9MB/bVjJBlz,jC3ӐclR,Gs1/TKyƥN|n )/&?tKi̥8/piXr'WkP.q7a/ E}jVr%V~}mӯʼn $B^Ùs%Øf ! ai|ptyZe? -Gfa>9|koÝ.>/$],7K%J endstream -endobj -1154 0 obj << -/Type /Page -/Contents 1155 0 R -/Resources 1153 0 R -/MediaBox [0 0 595.276 841.89] -/Parent 1127 0 R -/Annots [ 1157 0 R ] ->> endobj -1157 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [236.517 477.299 248.472 488.267] -/Subtype /Link -/A << /S /GoTo /D (figure.29) >> ->> endobj -1156 0 obj << -/D [1154 0 R /XYZ 125.858 740.998 null] ->> endobj -150 0 obj << -/D [1154 0 R /XYZ 125.858 403.201 null] ->> endobj -154 0 obj << -/D [1154 0 R /XYZ 125.858 376.848 null] ->> endobj -158 0 obj << -/D [1154 0 R /XYZ 125.858 294.308 null] ->> endobj -1153 0 obj << -/Font << /F42 510 0 R /F32 500 0 R /F56 730 0 R /F34 502 0 R /F53 751 0 R /F43 512 0 R >> -/ProcSet [ /PDF /Text ] ->> endobj -1160 0 obj << -/Length 3944 -/Filter /FlateDecode ->> -stream -xr`C*sTrͮ%W^ *{b}֊C,tF$LfH&*Y:f)IlFn?ŒFQ47?| qI,R DWo:BD4€ FL X"qNba$TiJ8s`,;bd4gKNM^Kjmon._xR( k"ei a*_P9|(4Frv\xJqB>İ#࿮~9+a1IM}{u}#]sԂ2ĥ"eF#QXͧ`I',;{HqAbDŽ㑒jv+b5p♇i)R,̑jڬ3"Acb w'ĕz)NI  -t/o|hDTqLBPmnD<*b &9@$yT`ݳn+\ -\9,h>J CZJO `PDf|R9uZ098C ]{o64ޣQ$ D^wL+x`M+}SEnd>N&mRY PNxB#~A>d%/"."ҙ߄twp.H QxDtqkJWa;x.cߣɁ J u̡lt$Vg20>S: - $4~O~%P_G|_!Bh]_!DGll_Л]N?5F)EgLޥo]P2N∇Ͷ OqK s,u[n=: ^"diHI[|qP"`A$h~cW4|*;UV( h C7h= {?di@@d6^qc?VDE[wƓS&wOPTYsUnmw3:mM4ElkUfVuΛߌY(%WW2fzzT]e\fpCtqkۖOẄ́_tmALtf,)oWmjq99`<|V60_gzGoe=5Vո']0t0a|zzK]^z HarRN SL a.C2OWg< ؙYk٪P>".D "BO\OU3ǦTC޴U̻N 0́(n0^hBwdyB qX&R|Doi=#/))~v^hYy!efoB2J8䖉q0AfyϷ!GîxPI-gQGU"NCl9=d'BGY R" -[weO=jںˈD2 ssù%b9ȎS`yWyG}}|W-h4'1tVcY_,]t^ʭCrw#-mNP׍WyGQW—Y47FAƮqhа"}VgЌyҌ7}ߪG[p(Q泭eyrM#zt]YlG4T &*rʼGsʊmv=aG[?.qlm$LVJf,GHKXU2XՖy2_P΂1KO -j:"\v֚ѽ]8 -9o`B#Hny>ņ\J[:/-vO̅]fm10\G[@e0 @/W'Ŏqp,L6ߑm-xRIطoUۆfYӲe^ -hc7f@xxlzsnj*J`BO!p0#у Ff)c6} i*8,[3(5F7q1À QUSQm,|VņE -, aw[`~ipJ\5V )S$e%sv-Snxh%P(5RcN\ߏhhFaa'}W - ! Aļ*rt"ƈ{x9+&B:3LN8J"~ķ9,QQuhbmNkZo0B?m۬Ǽg3.8Z- <-—} w`V@ם%~@Puu$ΧYQۦ?ɀqz7smSmGܩWyʶr~}6 ZdT'Ǝm< ے( -'&P$1p#tѶ,fc*-u}qwh-h -݂طf>2\ֹڼݨgY4`4 ⺨U}:5Mwpb(vޟE[> endobj -1162 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [417.253 216.241 429.208 227.21] -/Subtype /Link -/A << /S /GoTo /D (figure.13) >> ->> endobj -1163 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [334.683 156.465 340.661 168.986] -/Subtype /Link -/A << /S /GoTo /D (Hfootnote.9) >> ->> endobj -1161 0 obj << -/D [1159 0 R /XYZ 125.858 740.998 null] ->> endobj -716 0 obj << -/D [1159 0 R /XYZ 249.355 711.265 null] ->> endobj -162 0 obj << -/D [1159 0 R /XYZ 125.858 319.768 null] ->> endobj -1164 0 obj << -/D [1159 0 R /XYZ 140.204 151.07 null] ->> endobj -1158 0 obj << -/Font << /F42 510 0 R /F32 500 0 R /F34 502 0 R /F56 730 0 R /F53 751 0 R /F43 512 0 R >> -/ProcSet [ /PDF /Text ] ->> endobj -1168 0 obj << -/Length 3151 -/Filter /FlateDecode ->> -stream -xڕZݏ۸_Ns%MkmQں%WeVr-!9b&gU^-$&y7FžlOoٷu\ۧ;DOF$IY=?}!K4.с<o~x.ϊ:΋= %Ell-&Nw>o5ۦ=lѯܰ&Ҍ{x>eqm XŅÃɣXin44;ƍMaэvMItn٠7D[QO~B-mAL'f:ϙm erV@nUӞ:jͣb@;8t8ZpsF8kGzZ?$:?R© O 2z?t~ó"TE]DUSUȏi{P`* I1`*fѽ -7#8tM9{X"$ ifGF8J}{T8>(˾e84};/OImz_=s[qeݳcz0"%Y`&Nɝ2!Nn|R&9,[~HNK$7w}bJ*U80U֮"QAp}wӵUQ@*\}OܷaYN|p2J qt7ܡk%صZAE1{~3`[ -~[?:ˮߑV4rmCA3sŒufluC3pnWfUW:=4fp&򊿹/;y0PLjc}C^W:Ve_ ;U^+g+Ɔ+\GVE|T|gqSΗȜdq:?|yߝ*wWvreE|MREi]p'x aVnfc{`Ev^ `[?4v՟kbEIڮTy uy_vtoE!=i'ٷYg!2,lz쎬#* Gt+]}{qߋ U=4uF8>4My}NxQԄ6QF{887!Fc̔}: fO`LE$zCC'>Fkl^=o}KgӸ*%1Ghߵ -3 V\jkuL%M_ = 9uI929=ݼ zdSKTZnmZEkJhv 7L)+_4,M^`D__4#;x!ntHN gf4ŦX$G9=FR0 R7lހ,1Ep2Qs{q9ʳ)WFH&9[4%^f'^ DJ˦եNdUSr-SE)sW۠4]l &u^Eao6P,ZH*BK,PvfuINr5{3[!m`hJFܲ㖅YV)ԘP_W]$乃Uśt`H0!i=$Z%6 džV#U F],J5c^لj)ld6ab*7˴ш]*8!F&c -Έ~=>[-,m)I :t0gS.?vܠ̓*82bɕ͠Gqe"dYVV;.}7ބxnH,d9SuUSʏKkQ=U߶Xvܠ̔ƞ_=N/o3;oaGi\y3{uٵԤ6yrؓw -w,%V'Bdetk7[̼c -&AN{=!?tapb35#;ea!@صQP~nDHH5Κ6hiEk"~J#8i -㱅"G{llzC/ B fi$H,SJsZeI7W6.+ح*BCuDߊB_&M1v4V]viL(fm;fe|kh:iB"M@r.\K5<,ʹhA*Y<CP#'!' 蘱^ΪQoׯZad3TW}GAyK@^V%,F?`Q[Y(I=F[zm 1s 1 8$'s -^fM{:GFEJC7C$KsN6W[B6AB?J ȷo'xNe~;g &,D{-[;TT~.ި]pZ k=pƴ %V5Nʅ*]H!iR?GHiYFdAuU/(,?7&N:/Z۴atOZwVz*bb}B")$N22v]?dM[tn5J-FUp֥4;J%IW{mA@?9y!]ʝ4PLݬ7\>J# da+Of/[蹞,Ĝs!WC.ZNZҕ4{U)Pa6[QqmcS܌yL}n# eQɼ5%ov> endobj -1170 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [416.746 612.565 431.192 623.509] -/Subtype /Link -/A << /S /GoTo /D (subsection.4.2) >> ->> endobj -1171 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [253.787 256.525 265.743 267.469] -/Subtype /Link -/A << /S /GoTo /D (section.16) >> ->> endobj -1169 0 obj << -/D [1167 0 R /XYZ 125.858 740.998 null] ->> endobj -166 0 obj << -/D [1167 0 R /XYZ 125.858 716.092 null] ->> endobj -170 0 obj << -/D [1167 0 R /XYZ 125.858 551.17 null] ->> endobj -174 0 obj << -/D [1167 0 R /XYZ 125.858 242.951 null] ->> endobj -1166 0 obj << -/Font << /F42 510 0 R /F32 500 0 R /F43 512 0 R /F34 502 0 R /F47 642 0 R >> -/ProcSet [ /PDF /Text ] ->> endobj -1174 0 obj << -/Length 3266 -/Filter /FlateDecode ->> -stream -xڭZێ6} 20fHAM3 A$y%]YJrz_u!eRg:cba՝NH.1RdYzW_ɻGhzJ.[g;ëޘ.Y߂dUR7F?ox7z2Lk-B8 Rø3_,+X0n|vU] lpmeAq:QA3뫶v2ש2-d]>j eadhN#ׯy¦Ҡyk;D!AjW;鞪% %-EQ1( 1n?W_EJ$q:4VHzȢhbZ*7ͳVIl17&';lu{ec \|8w *λN"P,L歲Bm3OVC[jN}[,y\}L4ՉWK( ]N #[DB`&E)r~s)=fMa@4E㼲0&J^`ZdF$1n,¢)ql --}ore㉈#ǼFɫqQMɭ2d5 "YY~\i}0aa~}xuS[*ɦ`4;!8|Ṕc U '5mO?ơ!TuծAӥŤF$iQ@߈BoP,摇mz|g)Z8sNoWbDmWN,u޻3!}Q")PU.cS {i1(Ϫ:ݪH -̼̺͈P5YN7U37~ THpJya9tv H,iQ.UA0JqNB7p @SڎmC[cJcB*Ǐ!qyW1"cMW=\$ҭ[@D9D$SU0'wCBeVat ]{|\nlI5"d|TLC$=FCEw&!X`e/eV&R7B1ۣ}뤓uMF0KDB/0BT:@ԏ0ԋܨ: 7b| -^ -UCwFND Uz]MS@ž8a~6 5=\Dmwg?ٺFap2)hnCA8`y#moq! D:G%fjL$>VD$H4=igF,%l>AHy#-nbR3peufqڳCv૮v` _MZȽRaX#Vᘆ!v4h2;q[#o:\ˠNU H3Y#42Xtnhw[.'6HU/|2\W&uBD`P2)eEw n&NsN\wSג4 7mNP51`7m)<\':].F9)99jiۗ0 :h?M&w:֩ c!.Gzlyit6&3j/9"nhfѮ2%q <In@Er9>Igxܝ1z^=RTGL*I\r iK8דּ7nWT2gK2ʥjSd"Bi +eHu2G,-e pe(&`xAZ}9F!%NwZھho4oђӹ\Q-}:BL9@^A UܾIÊDҝ:rlyopdh"4&Fendstream -endobj -1173 0 obj << -/Type /Page -/Contents 1174 0 R -/Resources 1172 0 R -/MediaBox [0 0 595.276 841.89] -/Parent 1165 0 R ->> endobj -1175 0 obj << -/D [1173 0 R /XYZ 125.858 740.998 null] ->> endobj -1176 0 obj << -/D [1173 0 R /XYZ 125.858 697.377 null] ->> endobj -1177 0 obj << -/D [1173 0 R /XYZ 125.858 568.97 null] ->> endobj -178 0 obj << -/D [1173 0 R /XYZ 125.858 423.247 null] ->> endobj -182 0 obj << -/D [1173 0 R /XYZ 125.858 280.892 null] ->> endobj -1172 0 obj << -/Font << /F42 510 0 R /F32 500 0 R /F43 512 0 R /F34 502 0 R /F56 730 0 R /F7 1071 0 R /F47 642 0 R >> -/ProcSet [ /PDF /Text ] ->> endobj -1180 0 obj << -/Length 921 -/Filter /FlateDecode ->> -stream -xڍV]o8}ϯ7*Zv*οkI2eԌh>" -,b\\Q&))<74j`H`7% -Rhmv+Mo%)?%ƛ/ɷ͇7ŋcB{ɹQm| f#RgRM/0@Bf?CPhLt$*`Jh -T5 e;pĈdD kC=&ϙE*'%b>R!#{8$ˢtA> endobj -1181 0 obj << -/D [1179 0 R /XYZ 125.858 740.998 null] ->> endobj -186 0 obj << -/D [1179 0 R /XYZ 125.858 716.092 null] ->> endobj -190 0 obj << -/D [1179 0 R /XYZ 125.858 622.901 null] ->> endobj -1178 0 obj << -/Font << /F42 510 0 R /F32 500 0 R /F43 512 0 R /F34 502 0 R /F14 1060 0 R /F56 730 0 R >> -/ProcSet [ /PDF /Text ] ->> endobj -1184 0 obj << -/Length 2639 -/Filter /FlateDecode ->> -stream -xڵYKϯ'Xu~`x'@'H8TD,E$"%z/.VUW}jM?*yo27.Ý$@Ok)D$Hlb%J~aeB$iYqFi6)ɛS!U^Qُ[ѻw$}bf((}p=gv.v"k)tVq1Ht{ʆ}۵C}9xb.sKE&{DtBGU'(-?% OۖDQ:;ֽ ǗnݎgW綮#bE,qb~_VJhM=) tDJ֯9Ʊj\%v0缯Er70cz"V@Gz1E=b}=Ɋ pJCLAPe5:<ɷ/ -;`[~ ]i @,!< o〾#6iagiLؒȄJ,[xbl,(KҴNe0'.c 9?t.,K0gێui9ocP^t0$$_7q,_eQдSovUu{V>ҫG۹2lw\RӺ𲍗H N8`{cd!JD2w(,| l6oQ]K,* ICjM"KB+ڿSl0^g~$+o6϶ip@Β.}Cj,TlUC| -K/dԓOKT r$wDB,#/q#q&8x-WT e›P\켪`Yp3T;6 47URI"ͤDAU3#FR8>v{?77 hTv~k$QGjD-R/Ia$Na'Uc \S@;au8?nNEhl@JJKUg#W,۲zlW*Hqfi ;S35 ݭ4:,yɌޝYt^<,\qS^bZmUeqhk 'q59'h EŲhݛ v)Y -XX[K1z ɹ O:]eBR9%:'To9K-iI "b!l]]WCk2/Xo>_D^O㻟3  ?ۭy6 9*?0Ԝ oS>u!6 W}6oQJƜ\*Qϴ[%RҢ]1^KZJ -47{&Y_N6a]#,=MݝXBDR$0E._sח~_Kf}G:jXGz1>\yk-i5X k Cs A +8ҋ0GߑOɻ?7vX̬h9Z\,\Н[n63KaUka{7Zʕ-&#MDhQ - 5P2uΈ?2AMCnj}(4Ynד%/Tq>49~"$ +SΓ㫯nY̅1V-B !4._?,h"{\Ć+0p[~Z1Vut'T6|vaLU^u@p[3}c3 -MJɒϘ,-f%e矻Wx6^%r}CkmoufϢ~b:41L1PA#-|4d4Eͼ4sj1[_i'kuJ͟ZH:ˑH[F Ǜ(~/> endobj -1186 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [297.982 427.036 304.955 437.98] -/Subtype /Link -/A << /S /GoTo /D (section.9) >> ->> endobj -1187 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [194.659 252.959 204.124 263.467] -/Subtype /Link -/A << /S /GoTo /D (Hfootnote.10) >> ->> endobj -1185 0 obj << -/D [1183 0 R /XYZ 125.858 740.998 null] ->> endobj -194 0 obj << -/D [1183 0 R /XYZ 125.858 716.092 null] ->> endobj -198 0 obj << -/D [1183 0 R /XYZ 125.858 663.568 null] ->> endobj -202 0 obj << -/D [1183 0 R /XYZ 125.858 636.609 null] ->> endobj -206 0 obj << -/D [1183 0 R /XYZ 125.858 566.264 null] ->> endobj -210 0 obj << -/D [1183 0 R /XYZ 125.858 401.507 null] ->> endobj -214 0 obj << -/D [1183 0 R /XYZ 125.858 296.525 null] ->> endobj -1188 0 obj << -/D [1183 0 R /XYZ 140.204 152.934 null] ->> endobj -1182 0 obj << -/Font << /F32 500 0 R /F43 512 0 R /F34 502 0 R /F56 730 0 R >> -/ProcSet [ /PDF /Text ] ->> endobj -1191 0 obj << -/Length 2320 -/Filter /FlateDecode ->> -stream -xڵZݏ6_aPTbV(<\ u{P٦m!Jrw]3)KCyX͗f8N|G'Dbs$,w޿dfifяW?l$ -&u|oOLg}o錅/s݇]p <|ȑüՅG 䢺n0$a׏e֗Vj_}YEW}}p ]s|ou!jA/ˢIєSzJs"[ZVh׬RoUUyZX APy(.YRFi맬1܂e#n:<>ϲZ]Z{s2hWD#'4 "q]]$8Fh9,8`wrb-+"Hy@M8& 23XdOFѐIu(?b)kt,82N ODe$.*ۄDᤥq95"TJI7}.sv|JwާKy0sy2/5 4^Vg,Ϛ MZ5weW Hw=g4K9德) J֨]jĞ\F/L ۑR˕+x߷n:TwH$N"ٲM)*Kh<"yO+bV79b;m1r\z/+Fa?4'bn8Ұk @Fם IĂ c&;xPm /N3\UN9=c'H%#DוhsGF[-E[Y䢍y^7/k&iΕs2- -IЁȥosuVcWu+pjO qbђE`jz\#m- 2{kX\n(e6}3㫺ff{4""1h~A{Z@ 3T| lFyFKpOo(p\F\MlF$NBu9%.6( bŒܗM#Wwv.⡢᾵hg"~4 ن}۩ =40/O$Rnr o(4W5 C܊B]޺']VvjVu(v{H޲j)VrٕFodV*XAs65]nz -aH㋽ bW -M$5"HDfXRNHW?5ey"){<֍ܽI=Qu-䪩1K/i;ɇM oD>nj+zK򬽎7&C3n6D>nj+zKɎK7ET ؍-Xg‰ A8P889 2 -G -N@IAlAPQ6$$aK!w ZZ`Ta@as* ;XXO_8"Q,ӁF>p"3mFaiy]WzPl2,+@*Y'\V!rn*\{^ivjK =Mtiz9\M1riqgL[\5wmAp{wM6rvsfqGy Sx:<5-pPͽxIc$bz/ʼnOz~a˒;f\b7߀D$gkM[nB<H$}Zխ6YGCJBBiu -ĝ@$gӚ|kybtэ;h{ZL\eS"lŭIVDEn"v&gJ%TOejDؑPm#8C`7[Q(w tep\P1~"/q?h΂83E&$dAfv&~X:rSLAqª?6\lFG2 iA[XۦXfCL}}:eaNe Bs5lQ|wyzazA7 -=;sr8M<M%O~_P;N~)n *rT'+endstream -endobj -1190 0 obj << -/Type /Page -/Contents 1191 0 R -/Resources 1189 0 R -/MediaBox [0 0 595.276 841.89] -/Parent 1165 0 R ->> endobj -1192 0 obj << -/D [1190 0 R /XYZ 125.858 740.998 null] ->> endobj -218 0 obj << -/D [1190 0 R /XYZ 125.858 716.092 null] ->> endobj -222 0 obj << -/D [1190 0 R /XYZ 125.858 484.14 null] ->> endobj -1189 0 obj << -/Font << /F42 510 0 R /F32 500 0 R /F43 512 0 R /F56 730 0 R /F34 502 0 R >> -/ProcSet [ /PDF /Text ] ->> endobj -1195 0 obj << -/Length 2149 -/Filter /FlateDecode ->> -stream -xڭYݏ@QTN)1}jwͦ!hܼ4^!dm?/^_zp83 o2L8*xY,6U9^aO4"fwl$nv Fb,˒ݷo)Yro};qI8PzeaB".UqR\"n&&҉("^䟶4Oj]M=<9vcnqrp?ˡZT)H8bt~B$mצze73<Ǭ,M+78kwsU}GO!2h=H}pô $Bb$9RO'nT3o%٤$FmI|24w+ #O۝ >\X=2 L0ӈDlKFy/0,5'DyNgGvK]eUUG|]9CsjolWU 4WUdDLp?`NA;s\ w7l\d rw{YFCV*9E4{F8 -/ϡĔ7_&~+Kw /(U# ^([G8Vz:>$ (K9!pJ/IOᑗԏ,KUJvŬ=_i- 0VNNp03L -ת+|CleYKJ905a&iz2/"O gw>!uDR3e/&Yg?ۙL5֑ئ ,\iѠf@MCվVhz̷WGu7d rXx^Ņ8)!ʄ_V="₭=nY)|2~Ibl ocUP8՞jfa!zyVc$C suĐsm`Pd[Lʦyr2@z,'M\9ASaƩ~Ce2)ETwma;7r>cu` -kƌ 6c}Ra]Yf,-pcҎK/?H(b L`|n*|s: 1F!q9a.Aܿ &- >\lu/1$zt+U3̴v{DŽ3jӜ3!D"Hb$9pȄۜ}0LfᄏhԿ8Dޘ o{6 |Uć<^Q -]6 F9+ -}/B_Frf,9JpnB:~lO@׷WD2=L}yEko.]nn9ݜC.׫[OFwh3 -]#$#0w> endobj -1196 0 obj << -/D [1194 0 R /XYZ 125.858 740.998 null] ->> endobj -226 0 obj << -/D [1194 0 R /XYZ 125.858 716.092 null] ->> endobj -230 0 obj << -/D [1194 0 R /XYZ 125.858 351.893 null] ->> endobj -1193 0 obj << -/Font << /F42 510 0 R /F32 500 0 R /F43 512 0 R /F34 502 0 R /F56 730 0 R >> -/ProcSet [ /PDF /Text ] ->> endobj -1200 0 obj << -/Length 2838 -/Filter /FlateDecode ->> -stream -xڍYY۸~_r*gx[Y'Vj -$a$J_nt"Gwj`R jt"$_dE/6(fYoc(DBj)oJJv ߾{꧗oH1Fdq$E7a/qZ$-s]3] - ~]XF[9ve]DÁݪhK/eE_Ah翀D{׸3JGqjܶ=dOA*TJIZWf:ud5U+niVD:"*, /]yt<تr ,˟~,{XF]mxM]mK>s,3{wլaw4kOǮ%*He,H z -1ERѤÞͦ~bgQ1Yӫ`&ܖH-ooZvxY!ݽ[{~.FDVI1|ؗ^0[gy{˃A#*a|Li:1֯{{aaUVr -]ǜ5=m5sF-E3[-oCߖ_I f,XS)L^WBYB!zD(;VLUhTW|u)D[)>,t <M ^ X2i#M"+aM2Ip0x).DD{ged.t:-s`b-ƺHz-qFסLIs8%O+tgd1Lr`W!(ebcqnhDh.58rufUbDNEu*F\Z߻om5wW7#%r\Tߓ4S@YΥ^[ydL[64I o[.E*J:Zvˢ,3z9WG -Okzc3l`C%YHN)渄J̻19=E!I4hS!jяzgԥLs߆?sAM*´ UAS=ޚ,"]^d!gD'BX$:l+1 JǪh <ޢobϮq>xAzEϭly>5饠+xb/ر9n5s9cbUvAؖ%F w"ydr5 7JCE.Cm:GMo5H#ԕB-0s[ dt^Q@)yj[y>zBI2mpQ$h7C1_CQR`MKu5#QzpBi}a@Yb΄(]DžhtKB-yymiA#H`%rg`!{іH8q[ӓ j9d }?cVA`[sZ>qyn}2ލ/ -1Ͻ 56׋x15:8ux·E?Ǔu2gқRA;sQlDq,NMUd"OMk>A&|I|bڶ =QQg@=B4HsG{ _os=8I Ow,(u;QQS$0 ٗ[a\V+S u^Pguh0*x7̺,j?ņ˝)o39kc'WSJ!{y)t|5"Oʹz| - -)4:gu z9eDjBz |vTԴS2F㲂>ʣ5H\f5Aԡ~Yِy:-rWٮow+ÿ) 5F%s?ʅ˗Ob ?Ha|c)TQ,7d~xG.D.(l]+OocEl`:YJ__`~+σϺÐj/{U.T<@!~:HCJw!3X AX{*diG `P " -pL~ar!Ղ3)tޙi2Y@g -F$endstream -endobj -1199 0 obj << -/Type /Page -/Contents 1200 0 R -/Resources 1198 0 R -/MediaBox [0 0 595.276 841.89] -/Parent 1197 0 R -/Annots [ 1202 0 R 1203 0 R ] ->> endobj -1202 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [271.231 619.29 280.696 631.81] -/Subtype /Link -/A << /S /GoTo /D (Hfootnote.11) >> ->> endobj -1203 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [385.963 511.509 392.937 522.453] -/Subtype /Link -/A << /S /GoTo /D (section.9) >> ->> endobj -1201 0 obj << -/D [1199 0 R /XYZ 125.858 740.998 null] ->> endobj -234 0 obj << -/D [1199 0 R /XYZ 125.858 605.812 null] ->> endobj -238 0 obj << -/D [1199 0 R /XYZ 125.858 408.446 null] ->> endobj -1204 0 obj << -/D [1199 0 R /XYZ 140.204 129.79 null] ->> endobj -1198 0 obj << -/Font << /F42 510 0 R /F32 500 0 R /F34 502 0 R /F43 512 0 R /F56 730 0 R >> -/ProcSet [ /PDF /Text ] ->> endobj -1207 0 obj << -/Length 3204 -/Filter /FlateDecode ->> -stream -xZݏ6߿/5oRShse8֮֒3(Kn<53ق?`\HJ.6+W]@4蟷W_^KHnvniWkF)]j]޼zo~xz"" Ff W)^vHYucDfhМ2@ʓ>O -`j Bn^X^=DpPZ>||E[_$|G+49l@M3'%6Kz=]lAWՏebaCuDj^+i2@ö7?SEu af%O&RϪq(H2졆#h z oSošWc_s&3gL%2lvWocYU~MFVL-Bk'?t86?wԐYS_˔4.Cq̫/ O}M%ƛ28Q=%Q~(vP2Ba1,ŶmNM[ز1C )e[=kN@FAvwu(%a>c?f!Rk8^Oqf/8rN9NOS -E fXGKnCޞgGH`Q `>/;Ϣx=(s#/xOH+>FTWvd,DßvÊuscyyˆ]ؙ`2 0M]~7m||}\1!@C0m-FHA% IQTȦi?1\ZJzPd姱.x?z -Hޏr&=.([kp=(;e3F;Y*aBj'N3ec!^N,D >m/لhyE cfY]qOaNdd?v" NOZp~9 CeUgJy:nSS{Sl "(4 @{S!iPH(Sˢ#:nKW 4f*f?̢_x.ކMlN*F,9(a'|c[[>yy(f=83+!Ì - %K] r8puHN \\Z֐K3 2.8;opuRͮ?uy<%J.h-`rC}'PsF1=8U=UQjXj]Hf\2 KA>o!82@iǭ_,|s|1t aTdDq, -bsx (X3LAb?Iy28 -iڧA@{ c=HG9{'rhPI"a7ZG1+ӌ@I9QGDB}$m93 3YBfR\Ĉ ZȪ(7nwW3j}%Bbҳ P#cn/vQ9/; /!sSĕ.^?T{83ĭ&X"̩hR])q lNuyR!, P -X^j(a9@3/@uǤh`/n Լ{s'TP`[?jаY#MMt>4&v}&YLu/2_ _p$,({=2F49ô1H3\`G-~# -BBC2g_!\ e_@=9KԢiX;F#ͼH8PHD"1ϛGWP1$Dr:p!| {Fad<RKPjSK|b=?.s,cLJc*ӗwXii@$ -{p,5tK)suRKW)¬&@AׁoB .FjX7ޕ(۝QЗt[txar+*-Sٴ3U9f}H4B֘AGvsW_lԺ&(<ї8X?D#+^4Ŧ&9fbCmxҚC"~ԡ˖w0HNA)!hS1 JeQvv0Wt"Tbs1#XxNV#x Ki/SXnC;fK#nuH '5Kl$e=I-LHi_YWf_M641M3|.zE&ޔ; D7a5N5<d縉!􀆔N]0'BW/.qH^_" _#!@HK 1k\`˿Ր !Իnbz$۪z7h$Vgɰ&~X$WzpF7.͘8PljCu@m)"m ޒBf(ZG{[rX- -x@ͅmvyXpT E1=ghܿLRHpYS]?pjNy5>{ښV`y֜_fGc}qM&Z͋g.) -$F -Q1B}1b^ZITV JJ%"n\Vu TKo+~e7N94&OC 3U`ϱga`bs:}Hmy,|ҽ4x "9m6EܝP]Vu~jYdg=}!1vmxÝendstream -endobj -1206 0 obj << -/Type /Page -/Contents 1207 0 R -/Resources 1205 0 R -/MediaBox [0 0 595.276 841.89] -/Parent 1197 0 R -/Annots [ 1209 0 R 1210 0 R ] ->> endobj -1209 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [228.9 577.259 250.818 587.814] -/Subtype /Link -/A << /S /GoTo /D (subsubsection.9.2.5) >> ->> endobj -1210 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [260.799 541.005 272.754 551.974] -/Subtype /Link -/A << /S /GoTo /D (figure.30) >> ->> endobj -1208 0 obj << -/D [1206 0 R /XYZ 125.858 740.998 null] ->> endobj -242 0 obj << -/D [1206 0 R /XYZ 125.858 631.331 null] ->> endobj -717 0 obj << -/D [1206 0 R /XYZ 243.448 525.825 null] ->> endobj -1205 0 obj << -/Font << /F42 510 0 R /F32 500 0 R /F56 730 0 R /F11 792 0 R /F34 502 0 R /F52 1119 0 R /F43 512 0 R /F53 751 0 R >> -/ProcSet [ /PDF /Text ] ->> endobj -1213 0 obj << -/Length 2764 -/Filter /FlateDecode ->> -stream -xڵZ۸@q|)tK{hfZ[B}rApo:]%*fYWK?D4Wo+Xf~?ct{7<_>_ޭqӛ2"d@ݯSK}e2MvR,W "믤Mp%46+OcD\ir0K#4i:f#iSq\SB2tB^Mkbەu3]0/<S޶$& 8?FGlL2I mO-~Vu_Y4 zkХiT H9RKPc[Fx¡`_ZC@pg>Zb0W[hځ2J۶fu ͺsEj:̎2H'oӨ!"7Ƙ -[}V?/f .MKoK}$[_KG%NQ8:eqW:V+fy&M@3w_8&l'Cf5',P 8ta{= TP tP%TW5-aY3qgeg={O֕O R,/g\"D/]m}`?T3>r1I -K+?I7߮7}Puga' ƣ,Km\vm}iES}"sBQJ1F`P.}`PzImYki\vҷv@ƪ ڷveh!'yab4ã@ -ZbT5oBO2g)IsY; e\w쨤C]=U8cn 精4㗆\N/-Pܶ8ee-G!͂[iى ;ї=-G?Aבo&P -bBoo!jOSK-Uya+˞.iOюMe _I"VL>u(uQM1g*Cˢk4l@R S%K9gpS._S @kmF@UEߵn"NLS TT`@(&R76_(7L-r%X4d*m7#6;6p/DsOpHMC@Iz ' ' `E6RҬ'ΣQ"g&nM$?ĸmni!xÞw^Ƹ (>s;̾Ui^"Gߵ߽$(endstream -endobj -1212 0 obj << -/Type /Page -/Contents 1213 0 R -/Resources 1211 0 R -/MediaBox [0 0 595.276 841.89] -/Parent 1197 0 R ->> endobj -1214 0 obj << -/D [1212 0 R /XYZ 125.858 740.998 null] ->> endobj -246 0 obj << -/D [1212 0 R /XYZ 125.858 574.587 null] ->> endobj -250 0 obj << -/D [1212 0 R /XYZ 125.858 360.326 null] ->> endobj -1211 0 obj << -/Font << /F42 510 0 R /F32 500 0 R /F56 730 0 R /F34 502 0 R /F43 512 0 R /F53 751 0 R >> -/ProcSet [ /PDF /Text ] ->> endobj -1217 0 obj << -/Length 2344 -/Filter /FlateDecode ->> -stream -xڍY[~_ᗠ2V$R)EwSM>5*˴-D\])37R],&p. uMMb?M~g.؜a/BaY݌Ow~&DoA㿼l ݩ8?<ÇIZiù?Α݇%Jr?NU@Z`FB}/F5n/v+ )g9, KEA\Z5ԌDZSRkE!ɿF3rĿ" `:uu+h{_9/b7SCQb%ҸH7J]o[c1lXvH)"ʮB2=ȝ*Yz(mtb+t*M+V+H{p1 ~¤~9J|h(#/~{QW!XA6,#Xό[޺^Bk @FJ:|EyBޙaP\jyZ}]:K[HpY7l,A`8E9+HVCbjc^w,BU(/NT2XYp@μ'iEdT7KpT=NOH5r>?ڵ?jGyAd-GiT)`|ΗYf-d9'",k E`ܫ`V7U<3nAJQ~ -sҟQ)z4L$?jkWt͋]FkܗʼnC/2TW*PP>)S|ή;ް8r mY7IH7`rLiEB?t5'07wT$dK+]PȊXkbR 8fB}j:\*!K۱W&lE˞1"X Rc8ҳ*d&keC "T'N۱ SSYf ,F3]l;㐐NT2K~(A^ :LEkn-7@~i.VWD:)`2]{;/XEp #@gzj+Ss#qFHqaE3\# Jmlrad!YYyCs,/Y5ЈrsGn~H@N])>"=E=u!@=-vЂڵ&-x;bI ~5W84f&1&Qv)^29'=*%]4[:~*֣}kqB qii8"|0"LG'aJ~x.ďUދ޿ϯP|^>*=JH'L.7߬GЎͱ^ʫ :=%'sF^#fx<;endstream -endobj -1216 0 obj << -/Type /Page -/Contents 1217 0 R -/Resources 1215 0 R -/MediaBox [0 0 595.276 841.89] -/Parent 1197 0 R -/Annots [ 1219 0 R 1220 0 R ] ->> endobj -1219 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [295.999 672.341 310.445 683.284] -/Subtype /Link -/A << /S /GoTo /D (subsection.2.1) >> ->> endobj -1220 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [157.24 530.911 169.195 539.838] -/Subtype /Link -/A << /S /GoTo /D (section.15) >> ->> endobj -1218 0 obj << -/D [1216 0 R /XYZ 125.858 740.998 null] ->> endobj -254 0 obj << -/D [1216 0 R /XYZ 125.858 716.092 null] ->> endobj -258 0 obj << -/D [1216 0 R /XYZ 125.858 493.427 null] ->> endobj -262 0 obj << -/D [1216 0 R /XYZ 125.858 472.673 null] ->> endobj -266 0 obj << -/D [1216 0 R /XYZ 125.858 198.383 null] ->> endobj -1215 0 obj << -/Font << /F42 510 0 R /F32 500 0 R /F43 512 0 R /F34 502 0 R /F56 730 0 R >> -/ProcSet [ /PDF /Text ] ->> endobj -1223 0 obj << -/Length 2246 -/Filter /FlateDecode ->> -stream -xYmo6_/kV$E;.mŢwI?u "3Z[r%٠Xzw"|_pQf&12(v>}}=*ЬFD_\|:eZ.nݬr8n\}CWo.?|k9"di^Hqqy˒)W$Z w ̸Hb2eˆ^7, Hn*aFE - 9y]YWң)@/ek;T{]kmqt^۞xHD.VIniƴZ4(盲D4b݊+ŔЋU$Oߎ%YM`L65B,V -X1}RQV,j"{8ϓNF96VD AQZ% >o6IƑ -͕th߀i24iQO?i~v=eN٫ 'b"^?v,> $!vl#ƖDgY3%gs^g-wegWC1%Xi%#p3YVk[u -͋tۺ9~{vƳ\4^ -ljxCmȯܗ6l([XB|E %z&oU5=[ SUYݿCGSt~QN'fLY}U W6ͤ :V_?B?jijgInFN.PӍJBd M4aB3y(\ӁqyUW,dsHd1%17/κm]Es>z p_e)8L}N3m$ѿb~3T?X -(o!'92Ll`yb3Ldt,.'Ýt/O]@g$g]2a*D=3 }7B#a$8=G)i -v2nj;}͢-ԃL;RcrBPmiԃcI A.E6CX{&*l;-ft [Yp @[Pl<`g4 統^wjNоH)ڰloKۺ~5I}, H B^_\=rG|rfbJx[~p"y囙RCℓ'J $@6m!l- Ńh:PV>8_}:pwh=  v)L^ەuܗ"@5 0 -U0>|kD<1 ?9pQٚIºhI>3gl.j& S5]WjVDl`~RNp P KY;ד_%7xZ$M. -F`?mq2܏N1,5п\cXŷ2xqx-v\6¿o//1;3qGmDx:yzշ` ll AxU=dݣ[6>JtA\`ٳ㨷7'?÷ 4endstream -endobj -1222 0 obj << -/Type /Page -/Contents 1223 0 R -/Resources 1221 0 R -/MediaBox [0 0 595.276 841.89] -/Parent 1197 0 R -/Annots [ 1225 0 R ] ->> endobj -1225 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [458.61 518.247 468.075 530.768] -/Subtype /Link -/A << /S /GoTo /D (Hfootnote.12) >> ->> endobj -1224 0 obj << -/D [1222 0 R /XYZ 125.858 740.998 null] ->> endobj -270 0 obj << -/D [1222 0 R /XYZ 125.858 397.276 null] ->> endobj -1226 0 obj << -/D [1222 0 R /XYZ 140.204 129.79 null] ->> endobj -1221 0 obj << -/Font << /F42 510 0 R /F32 500 0 R /F34 502 0 R /F56 730 0 R /F43 512 0 R /F53 751 0 R >> -/ProcSet [ /PDF /Text ] ->> endobj -1229 0 obj << -/Length 3134 -/Filter /FlateDecode ->> -stream -xڵ]oݿB@J'fr FC 4EYQBRsגȻZ~rvwvvgzOt`$+)?MU~RGzseƭL}s(X~ G/YoRʻ&0ʻ?y}:` зQ -X㊫W-Q&N?I[3#7\"WžR:>ȋ[6zOc볶gP۲/ʮ?A4*sc:~d\P9`0Y1C -bːL˄-ցޗx PN& u~j \(? T]W~!ph˜?#uYu*:΀^UU8/})ˁZ{CFI⽆u6Uk XDGdȋ*EL czhXQ~le&94XNJ2Yx)&'.`į]u^5fyyy:p"{J8"O|ˬc FsH촠.bArMK:#mF8j6^[>{]ij8դЁEo7uuX%9O#A22ˁW ׀hb˱tS5ƋAE`cgVgej &Mm=GX\?#|,!(Pp8U}y!8AwkB2o&9Fd`ijWkfFlnE↵ mw!{ -Q)n咆?/:ue^pp}*ПG2)6qjN'9 >"_XW|9>i-M-e6C2*<θ Iu3>v H0` &M&־V؁B0B+>1] XPMM1ثE?(k[7%LNL&zHOB5s0M()LZF4Md4-" bp ڀLZ#(*7MXQ+9ȡ#z &G*Ӏj:&t.0iȈ^e*$MC}daNVQqԥTl]P0CB^g^M텵ڱCz2ʀ{fB٦+Y+jbE\̌`^8KP1je^֏hyj։@,,eti2sBu$6}%qFܫe*6=`2Nvv(4|;qʉb?,NH@Pվ'vI\Fn¤PiAw{b na ~v!`Hs :դ1%1~\J#phw`1[`C -()ǃ=ǏTWismRD\a{X)I/,.Ƈ8e} DFge||v׀XuM ?}5]w7Sy0sD@b)$"e陨rc\G>%=yJ16)x0=CrnɽC1:'t́;VߺyO φV1uȷ֔}> _dC+(h>t=zaFNGFC׺T3.o )x&PYީUCQbI: 9YާP >7-;k휹uc%T(z {:i+/H"3cEn ^W ->#Ɖȿ`D^t 2鬒2b'1{XÖJZl> endobj -1231 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [239.859 595.379 249.324 607.9] -/Subtype /Link -/A << /S /GoTo /D (Hfootnote.13) >> ->> endobj -1232 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [392.685 523.648 399.659 534.592] -/Subtype /Link -/A << /S /GoTo /D (section.9) >> ->> endobj -1230 0 obj << -/D [1228 0 R /XYZ 125.858 740.998 null] ->> endobj -274 0 obj << -/D [1228 0 R /XYZ 125.858 510.074 null] ->> endobj -1233 0 obj << -/D [1228 0 R /XYZ 140.204 163.29 null] ->> endobj -1227 0 obj << -/Font << /F42 510 0 R /F32 500 0 R /F56 730 0 R /F34 502 0 R /F43 512 0 R /F53 751 0 R >> -/ProcSet [ /PDF /Text ] ->> endobj -1237 0 obj << -/Length 2357 -/Filter /FlateDecode ->> -stream -xڕY} -CȰ !0{=6K@6?-N=nvreݱ,Guu=+ng4xs8(Ǝ[ |mE2SgI9#6pq@ܠ49q Ī iSpv"?j!1&MmIYFUŦ[݃N~Mwz\.Jjg! hV?r1Te4]߳}U`V3_?łgҨ<t73=,2r5?s4^{;(-`(%K_r+ Z4E .i5&{aNw$ R9ƨMt[d?W5ã)j /\LԿ2|–< -(&Rjz^dKU,d©(u>B#!HΌ7Qܰ׍T],4icc}/ªey6(y;vԂnᴛOu! | &FM2 Qu\R^{T(-uv]{dR5Wt8vO>wu Ǥ*_n7h 6Q6C)r6x4z%Mhf~Q tܖfml6@,ROF60')"0s[(wp\s7Zs[6+"9 Mn^WC- T-M$Ƙ?JgovT-wdždK:NRL®2M %$o>޷|ՓcGe[{9[&!jWV$]ΰ3r( C<~˯|z?JX;A W8rڂ9=oؘ鮦$b:WOz~0?+ D^JT^ ؕײ,%4תُj{4r?tHaYtB%(\T}:(4Bͺ{/4ASS +.Da rP]Y5ubJƅ\kazo,fOo<B;B [ۙ46el6vD1I?9[an'~Ԟ>y%jFX8S1v@bsfʚ0=i@m_(pr Rȇ(|`K6ی%mߍ1=zp-l_zԪ1ߪ,FM ' ATX0vL/48<9M;d ,]ؖ~^dM}6Vendstream -endobj -1236 0 obj << -/Type /Page -/Contents 1237 0 R -/Resources 1235 0 R -/MediaBox [0 0 595.276 841.89] -/Parent 1234 0 R ->> endobj -1238 0 obj << -/D [1236 0 R /XYZ 125.858 740.998 null] ->> endobj -278 0 obj << -/D [1236 0 R /XYZ 125.858 538.164 null] ->> endobj -282 0 obj << -/D [1236 0 R /XYZ 125.858 397.317 null] ->> endobj -286 0 obj << -/D [1236 0 R /XYZ 125.858 289.223 null] ->> endobj -290 0 obj << -/D [1236 0 R /XYZ 125.858 260.216 null] ->> endobj -294 0 obj << -/D [1236 0 R /XYZ 125.858 179.958 null] ->> endobj -1235 0 obj << -/Font << /F42 510 0 R /F32 500 0 R /F56 730 0 R /F34 502 0 R /F43 512 0 R /F53 751 0 R >> -/ProcSet [ /PDF /Text ] ->> endobj -1241 0 obj << -/Length 2949 -/Filter /FlateDecode ->> -stream -x[ݏ6_zۘ巤E4Njmlk!M?R"%. `o>e3 -lƸ"g(j0 ,E0/7/NYA --f7wB7̋ί_}ZpE7o^㛫_ow"" ,`]fƋW7=/RD,~΄]bjxa[^q:?vf曲5 >/رﶫ.Smk?~M®wWbmwݺZ6Xaϡ,e7 -X(,I*Sq.cPNjTľdBzST]THq0)U)7 Ib.xm) kfDVY!`b6L)eXF|^4`sej38lMնhg`o)ava},UbWÄ_MTX.X?.}jmnPD5ϝYhMu)QDe2AHB0*/̥85VFAFBV`۶o{a'4pPxF8hL6{1U:-9)Dmw[R=lisae;)aՁow] ϷF,l|﫦쌾Z(&篻#XahMe `h)r!LBʈ'~kmANhxR$$ˋg⫤ x&1 xtLЕoKBku`!^+)H03!6^ VX0-tgRE xȲgL w Vn7zQ `̶*<ܶ#)x,}UXQoUUY䅯ۺXH {ğ#i M r}m (λ[º@ՌvZ;Ch/@jZFsaؗZFmWWI[ utS-x[rj'qcnpt_7gL뾞D_D![Z@ú-SrBdc1˜l?MGG0Ʈ~&P2#dDڳ|"`dqjN$"> mEH(!i1Ni:}*DhvZD1] ue , Sp:JֺMiR\9̭ĭLnnɤ횜m w .|vh@n-?`n޸xMյ1n,^{~2HՁdp~Y!t^ҶZ0$S>DiJ Q8ZJUbs\.1-̱8z>[KH7"eac%_E wf,gኟ.LnTpy~F z4SQk棾Pm]oi]Km-qV;4~ -G凱qW1U0Ky%Qy,@EFJ\aM$Hd\e|&rmkef&ۺm}̔ y2٧ F}aⷣ;f(we9)r]2PSہ!۳u@\{u*z/rk(RqM"Z?"T,],d[ܚ6RNv/="e2ziD1GIʴy%sJi .Rs,;BQ>%לJ=QxL6"Tهݴ&)J }5KfKٟjV@9TQP$\_y_*\} -t9|Pz'' >2e!V#g5q[ 7ُlDŽƥ$OzXd"BsY4A2\&k%*0tR{rOX7M-40ʦ4ʇһjǞVN3Z1 hvLęMSĵ"o?i0.2d5l}jndȒ1eu,G''sҶ:EΉTs C$“?:Ӷؕ[[[<7یfkv ÄHe0`q*s <:n::nzU۝A%C;, .GBx>׮I3E^=b{äӶ朷s7Z-i{jlcSl`S,.sG,f0uO jO<r2 䗩V.:\KC(UݾnY _4ㆌ dqÙ~q`xm+ᱲySuLdv mNծnMbft0taL 0#TjVr_ӒNS3mLAH\L: m~Yh;j)h WChcj mL)h$yڊڀf ژ -`ȆG-DB޼O4W42㐉{dF6sD& M_'8FB45jƇ[O@DoߤgHPD(> endobj -1242 0 obj << -/D [1240 0 R /XYZ 125.858 740.998 null] ->> endobj -298 0 obj << -/D [1240 0 R /XYZ 125.858 524.562 null] ->> endobj -302 0 obj << -/D [1240 0 R /XYZ 125.858 313.86 null] ->> endobj -1239 0 obj << -/Font << /F42 510 0 R /F32 500 0 R /F11 792 0 R /F43 512 0 R /F7 1071 0 R /F56 730 0 R /F34 502 0 R /F14 1060 0 R >> -/ProcSet [ /PDF /Text ] ->> endobj -1245 0 obj << -/Length 3427 -/Filter /FlateDecode ->> -stream -xks~P*:iNɣIqf -XN|woR8ӎ=w{޽p#&BF,I93&7g|r S 20g/h91jr,t~jgs>z_:ɈO_W߾?\ -VQJD5BpѱaQlNa K$AGW?H`#RjBĻ5%A O nܚ:q``l۬.[Tfzs.jnyd~oZ$ӯEݤ=La[G,Qɳ[ݷq{ -9<@wke iEǣpPm6wl;pľwçNTXl:ķ7~?<EvPr7lKZ{a% ;rssbF;7iGg0// UmNdġTOdOCsSÄ)մۑDڌx\"{B<@ca3lHU pĭaB3iƁ-ChE6 L3Bĵ̅ kbas+C 4J~P}}>b,߬IK0ce ӂ U@ɖu$}) ; F8 FuT7ߝH WʇD8*p&,+`GiUPQSokT7y~'er $ux?=f5: `) H=\gTh]&07zgtxh C:y5#*|9,)~oJ/uh \cxRb~@ !G~aߎ:oBӪ%5c}ȇAR~c#1#~V~`crv<@!JϳT !Tz^ MvO~HE/\""%RPCgҦZJV5ϕԥjOΏBXmɁ0ҞfR=,\3FyX.`4c1/ɳX.f{ 6(1Y^l^d? 8Ktrmᑙl΄}"]}/#񵺠Kv"}oTF ¨{0 ЫDiW8L!2Ɂ'01O4{Ԑi]=ku @{gH."^١a/8G@Hn1K<6+cmyyۮfg{%WAi>{Zp (_üDt^uj9&拎:,X޳S@> C?TڿĈaM-U&F!x%endstream -endobj -1244 0 obj << -/Type /Page -/Contents 1245 0 R -/Resources 1243 0 R -/MediaBox [0 0 595.276 841.89] -/Parent 1234 0 R -/Annots [ 1247 0 R ] ->> endobj -1247 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [136.488 145.539 145.953 156.082] -/Subtype /Link -/A << /S /GoTo /D (Hfootnote.14) >> ->> endobj -1246 0 obj << -/D [1244 0 R /XYZ 125.858 740.998 null] ->> endobj -306 0 obj << -/D [1244 0 R /XYZ 125.858 253.084 null] ->> endobj -310 0 obj << -/D [1244 0 R /XYZ 125.858 234.693 null] ->> endobj -1248 0 obj << -/D [1244 0 R /XYZ 140.204 140.144 null] ->> endobj -1243 0 obj << -/Font << /F42 510 0 R /F32 500 0 R /F14 1060 0 R /F11 792 0 R /F56 730 0 R /F34 502 0 R /F43 512 0 R /F8 1057 0 R >> -/ProcSet [ /PDF /Text ] ->> endobj -1251 0 obj << -/Length 2995 -/Filter /FlateDecode ->> -stream -xZmo6"/%Z˲%cnW[3ctƞ=MǗ%[~KE -b[)ȇ}␥ȏo‹L}[+Gso"e7w3F7۟ts0 >\6WQ?ǏFx\L))\2eL0B(5}_\y]uņ'C J;s/=ft9eMWCeϚ,YK7m},=yhXdUY.)A:+BYp,M#vۂEgbKFbv{;fF8 7< ǍLKᑮH4yߖBF!yAIߐNPv%1z՛zs%xljigf -hkSL%"NdtiaׇMu-#Seu:[ΨCq`"iu%A֔%=Ucє1~o0;w`fs[l.7{j7HMO;2 99! pBD -'DpG_Vxz5K3[Mj8'j?TUsҌ:C@aƾJYv;_',)s/3;Ċ .뜧bRI;ݛ-weײUDkhݸb}j޸]!B4<>kffVvhtͼRH[; }$3@npKZ7dE{}ʼr_`^25HEm%[{Dv4O՜-_ϱzި 'tQRYTӵTЖ;H$gv%vVyoQ@tRhS<ІXx.ӘE)dE^)XdnzʺbW77@ZtkurL(t,G[eB3t$xT 1 1^G=֌六-5iZE7-tuT] o VPsÕnVmoMKPwi.0@>Cy~nʍqu։aOǂnph:b00jAbK 6` 83M2-L7m,Eub IGL<,֮/@x,ήمp*/N *]dưSi-T04"b[:q m6O=DНIflĵ/52Ѩ%I1wt=Gi@`jTZhlٚpjTw$\eP-/Y#qH -܈vro݂leJjM`Mv!ܶ]ٝ;8< I=&Cbo(c3ơ·:>لP =1ںi)r5eW$1  . jrUM&NXrMʹV`7/z[h}𑢏P MW "MⰯIUjmiER2T e(N)s2Gi xw1~LE}{E+fv%-xܺrц.6u`ً: uH]o^+ {}U'awj$JMҖs|_[b buE9VXeX{[uqj.1Uah~tP7[ҺT4?e Rxnm$n)A$!b۬Yd)G?sMpjvyJV>:q gV]p JӗxUKH#g(}Yuj1$]; o''P$\:e@s=hl9[{=cStIV4VX\V*> Y;g;1㕜 zgXGTn::v r#ᓝ9}#,Gb0"v_nZU:c9ߜ/J1MBr߸W9gA]f@2y*B ^->NOdNN y{r_P*XsuO@!(qQ?qHdKFakK◕܇0&0kDD1jda: ލٮ'v 8ޏ4==ЧL3ÕELkz%_+=/|@@U&ӎEendstream -endobj -1250 0 obj << -/Type /Page -/Contents 1251 0 R -/Resources 1249 0 R -/MediaBox [0 0 595.276 841.89] -/Parent 1234 0 R ->> endobj -1252 0 obj << -/D [1250 0 R /XYZ 125.858 740.998 null] ->> endobj -314 0 obj << -/D [1250 0 R /XYZ 125.858 465.678 null] ->> endobj -1249 0 obj << -/Font << /F42 510 0 R /F32 500 0 R /F56 730 0 R /F34 502 0 R /F11 792 0 R /F53 751 0 R /F43 512 0 R /F14 1060 0 R >> -/ProcSet [ /PDF /Text ] ->> endobj -1255 0 obj << -/Length 2945 -/Filter /FlateDecode ->> -stream -xڕZYo~6K!}?>\[E):}q~on&Ytq?)W%9PY5aoōr0.v -U؏0ӞP L_iСpvb.] em?0BitP}6!0 -"6Â)8W;qyXssoW+7 nپVq0z!8O] XW=ͱLS vKRpeu-KU|JE1]cX>&I{ !aߢ 1 ˁD {_DǢ7K(*0ͱq۞JbrC=6< v|[L3]47-;<ܝ9 mKx@a}SL TWbRv2 -vhlᰦ`"pJTwhxN@0˔;s1ddC-Mo-!d|dPdM`xQrkgmzRaǷ+p ?#/[ɮ@@6$Ec5^>jB=Fz ./tXhzAgw]48.<T v4{`I F$j1a4*L<]QP;+a=!lbzЮpjÏ`zBwVTd>iSt;)xx=E6o{J0{O{Ǐ?gr{(&Xׂ`{Yȷ:ozsh -c!^ИdRI -qbk`~0O`̭!ㅾ;◊@{8lbl{v9B R' +҇R/rK]zEYŦ{(w&J9WHLg)$~CSBEj3 z4wZXgQ;8^0V(mᛲ+jIXF",b`S 9FG#4ظǎ`)ӆx$#h/<0` EIh^X9*@b.-HUNkQ0͐ -kwk*ʢ'Zna3@ B-JҤ|-EOa(7b7QL1Jb!le0qW&8{b<ˮF1m*3DX7]G "h - -LkxKڐx#l꫎ pf-d V(uƴԡC "ǩAhpeA}cdbF S%WM2u钺2 VS2&?|zLtL;sA-M4eҡp t' Јs@/]-JEwv%ny[`8^P AZ툅51ZX-Au~rhfɷ*ǔA*Fh<$ԺA}[E߈GћČޠ$?i1rd˒b{8+gA"A#b,"DJgdh$2/=<4s6};Ѽ^ܟOX%,]NO3H0d|8MF~#(=FhB/t5 !z>HSI`ET;ҝ3pTynQjvƎ5侘ɵ\{uV,]r%Ym2n I4Y[VAcDo\ܤXڴ^8Ŧrȍ5f8CETSZ~A;./-eKKrc8!W!A[ډ6;TMovS.r:YKݜ"(uI(w -6CT~-|z&@1ə -&Nf}Y%; ЎhlKvO$|UT/;MU9;H6d 88?L7vaU#BvCiN5endstream -endobj -1254 0 obj << -/Type /Page -/Contents 1255 0 R -/Resources 1253 0 R -/MediaBox [0 0 595.276 841.89] -/Parent 1234 0 R ->> endobj -1256 0 obj << -/D [1254 0 R /XYZ 125.858 740.998 null] ->> endobj -318 0 obj << -/D [1254 0 R /XYZ 125.858 716.092 null] ->> endobj -322 0 obj << -/D [1254 0 R /XYZ 125.858 551.17 null] ->> endobj -1253 0 obj << -/Font << /F42 510 0 R /F32 500 0 R /F43 512 0 R /F34 502 0 R /F56 730 0 R /F14 1060 0 R >> -/ProcSet [ /PDF /Text ] ->> endobj -1259 0 obj << -/Length 3155 -/Filter /FlateDecode ->> -stream -xڍYY~_@<xVdg KV؈$ \g6>U]<ίj-?q+dȒ05gi~S?Gx`B7ky4RFŇM |˛~_ ys^MvQJXp.by0EG) u=j#\Ko`uoo /9'r!v}rv*79̨XJeC2bi-P* :S+oLm0RY^|0tǦu)޽yX(5S' 2IɈq̘~*۬}΁GhSk]0ڷ'Jd')pDOt1tWw54@8CF, 'D6̴W,Ѱ>ĉ~Y6NY.ڭG]_NS[TC'ӣ -!6q|Ntx<{eS{sĠq-^tYxV3'm_f+,D -΃; ~?V%^=@#6Gp(',R,,Pjz@)0f;F bZ΀CҨ<1E!ө8Gs\G3'S\uqm[0%אi5OqDC#EKg~Dlr̞vVȿBSj(Y°U|]wj\EȞƏFgqf"67v٬;[d5dc 6+eUtU:)] V^ʃջ;!rYAZ>%j; $5ݒ)|O3Ň^Gҥ=UٿP*4Mm=eCIe֗bh[l3?؛sGÛRzGe2Pc<$&a0(cZ -P{\}(q2|kl+Ԫp(80A㥜)᫃lyZۿr쳎96k1,D>aENzkα?]Op[TXo/̖([+@W$tZ[0W+f  -շټ2 Þj ֻ';|m'Γ60\&Is-OyO(PTS5^ )FB$v Oq|&;VOHp9+LsQ<ʿl <Qsr=4^ʹ'Guv~+7>(~P&x._clEXMjL'T$S,!d<BZ -ZDBt&Hږ%0LE#hjM1 w>WtO~t3 ϯ ҆p3B_O\s=gK3uJJFQD<,7qL@;Ue:B0).@=U1@OJ1?+eendstream -endobj -1258 0 obj << -/Type /Page -/Contents 1259 0 R -/Resources 1257 0 R -/MediaBox [0 0 595.276 841.89] -/Parent 1265 0 R -/Annots [ 1261 0 R 1262 0 R 1263 0 R ] ->> endobj -1261 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [299.915 624.52 309.38 637.041] -/Subtype /Link -/A << /S /GoTo /D (Hfootnote.15) >> ->> endobj -1262 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [211.496 335.291 223.441 344.257] -/Subtype /Link -/A << /S /GoTo /D (part.3) >> ->> endobj -1263 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [346.538 309.403 368.456 320.347] -/Subtype /Link -/A << /S /GoTo /D (subsubsection.8.3.6) >> ->> endobj -1260 0 obj << -/D [1258 0 R /XYZ 125.858 740.998 null] ->> endobj -326 0 obj << -/D [1258 0 R /XYZ 125.858 716.092 null] ->> endobj -330 0 obj << -/D [1258 0 R /XYZ 125.858 296.001 null] ->> endobj -1264 0 obj << -/D [1258 0 R /XYZ 140.204 148.719 null] ->> endobj -1257 0 obj << -/Font << /F42 510 0 R /F32 500 0 R /F43 512 0 R /F34 502 0 R /F56 730 0 R /F53 751 0 R >> -/ProcSet [ /PDF /Text ] ->> endobj -1268 0 obj << -/Length 3119 -/Filter /FlateDecode ->> -stream -xZm۸_8p23")RRq8 l=pY-bkBmgM3!EfC +R93>*J*# -S\Y*ʲZ힥Wxg,e4g/^gWwgݮMdX4M?_yfT{7q;2~+xwⵎZ<+A<\8m90|T+?\+=UjT[Jث:c!Ӥ>"`BX2} 4Y i7ttP @;)g*K!KͺozJ [<:Ǿ^Ó*uk켯X}u^ћ}5 evհU(Rrn`\^$y48pk ,/>Ev3PԤT PƲ @lùݲ,Mw8dgH5)FZumP&DAjRZ틺+l UΤªn m?>Pq^ B -N錿LJP#qxiF(ZV -˟oR y=U{BhYx=ѹ%r=9f"S2L"<~Q:ڵ7gB)@ߣqgKxaSJUƕS!a^̩Ry~Mw&B^)ZWE6R /!/MEjBFD{+~#$dq=A$g K<[Z; NL-(Mq*B)4!T/hp9?-q Øۤ$ov'z426r G1ǰ/@W&нKs(~-.q -88s"c;̩чm#{R <u͒2Ι/i -؋n*X>GQ' GTqjCۍ%SN+̦k -tժ@6-tpR7*.X3L&,!g&&,B3U%A#%ą!'}5uQ0c/3DіM~_qA9 @СxIPM@GeX$X&,+R0Q1^(Ly_ ItDD֐x(COcCmg0!@yܲ[m1_295BXx^7>Ʋ4J|3KZ_W f0_ ñ?T62U(L}C=^$Ԏa!51uM֘mMIpjh8]rNQ(C(RR-2߰G|3S]Q>e6l<Á?>|âoBDgKLԴBRn0 -嘞i`uyv奆*ԧ;=lq¦;xYdK=91fwr0Li&W60ΗX`.:Z vxmy>;sHVtEŪ M(W%/ $/3Ex)Ux;2mh.0'by\$,szxoD.FD ^Π)'kzUa-3\׍_i&~/xc\ - %b`ptW$m΅*T_)Æ_Ke4JE Q^/܃Ot~G!mCմW}cF8GJ F4{bYlU+}:W * -AsۺGIe\Ƌ;GZ/( M`2UsoOT=7;u+qI6M^'Kz̓]ٕu)k/UA~ʘᖢe*3َ(qAefDYV1G|ۛ 'Fd& 'h̓+y?rLn -/ -DNT#8S 00:jL܎QmlH64pзiFbRwDp]ﻦt _gtC|׶4+8 uBowEeg օKvyu)36 xr)KK}\D1I{}tR}}$v89w4M8{IHH^"ӳҙ+G/ uendstream -endobj -1267 0 obj << -/Type /Page -/Contents 1268 0 R -/Resources 1266 0 R -/MediaBox [0 0 595.276 841.89] -/Parent 1265 0 R ->> endobj -1269 0 obj << -/D [1267 0 R /XYZ 125.858 740.998 null] ->> endobj -334 0 obj << -/D [1267 0 R /XYZ 125.858 716.092 null] ->> endobj -338 0 obj << -/D [1267 0 R /XYZ 125.858 431.718 null] ->> endobj -342 0 obj << -/D [1267 0 R /XYZ 125.858 325.516 null] ->> endobj -346 0 obj << -/D [1267 0 R /XYZ 125.858 296.51 null] ->> endobj -350 0 obj << -/D [1267 0 R /XYZ 125.858 276.324 null] ->> endobj -354 0 obj << -/D [1267 0 R /XYZ 125.858 195.529 null] ->> endobj -1266 0 obj << -/Font << /F42 510 0 R /F32 500 0 R /F43 512 0 R /F34 502 0 R /F56 730 0 R /F7 1071 0 R >> -/ProcSet [ /PDF /Text ] ->> endobj -1272 0 obj << -/Length 2724 -/Filter /FlateDecode ->> -stream -xڭYݏ۸_GX3HQlb.h(^d[h%Wow3upX`I!9/Z+F"Uj&X`oo$l#zGRz<=f+ Xݧ6_+}<ƒ/4nï|o?*o3u -mLo>l.&tasyR8> -zA:5̟JN. nbǦ~^]?婣^u'5jEs*!Z b%S5>|WZBsqWj)2^ Uk rd@kW]5]#G5L^R_ț7 HA{#9뱪[Ϥ`%zI(TnIy`B6h>j^б(u9] ܂CLQnYUYǙ\`JbgCyC9ԻdzLw(E1lMQrbO4Ob vзT(:2wܢFg'bӓ'0lf%6N`saq@.}ĀiZL.G A:б˾ H G -}^/-Р@e -(AZߣ  .M(.\N.'+'ࠠssY-q1䐻|Q/Mt6(,8/ZzU47∵[Q &@ R,*1 ;څ,&EՏT1z(u \Xez2 ˨^^W%WgNbZbz8W` 7g83ƧLMq:wBl+Ȗ Szo굶],\ 3` a+$]uZ=ȁzPBn'AzHJzԴ@* ->2cV5=zPb# ^}DWPh5wBO[…tɻ#&QFb$&^J/dDm5lׂ @ :РPk{A(3j #S'܁W|G9B͇OE@9|3rRE:Z=k:9NPe4DDS&pHm`{ W8"^-!{:nxT/lw}P2^UF_,A=$mx9}^ds7?oˑ@OLendstream -endobj -1271 0 obj << -/Type /Page -/Contents 1272 0 R -/Resources 1270 0 R -/MediaBox [0 0 595.276 841.89] -/Parent 1265 0 R ->> endobj -1273 0 obj << -/D [1271 0 R /XYZ 125.858 740.998 null] ->> endobj -358 0 obj << -/D [1271 0 R /XYZ 125.858 677.752 null] ->> endobj -362 0 obj << -/D [1271 0 R /XYZ 125.858 596.987 null] ->> endobj -366 0 obj << -/D [1271 0 R /XYZ 125.858 540.132 null] ->> endobj -370 0 obj << -/D [1271 0 R /XYZ 125.858 473.364 null] ->> endobj -374 0 obj << -/D [1271 0 R /XYZ 125.858 378.621 null] ->> endobj -378 0 obj << -/D [1271 0 R /XYZ 125.858 236.068 null] ->> endobj -1270 0 obj << -/Font << /F42 510 0 R /F32 500 0 R /F56 730 0 R /F43 512 0 R /F34 502 0 R /F14 1060 0 R /F8 1057 0 R >> -/ProcSet [ /PDF /Text ] ->> endobj -1276 0 obj << -/Length 3151 -/Filter /FlateDecode ->> -stream -xڭZm6bE>Ԍz@65p ~\[,ޯ)S/!@̗ѐ>|8\~?~ͅfήS<Ϯǫz]_q'2@ՋYLf[՚qݽ}OPy۟ͭk\Wrۻ_|',U9LIcz$䪼lU@X\q¸p/aΝy8WXQ+#5?LMeCK2jjCM]_m]ٗMM"}CERƝ6Ճ˕_rLl7mMPT|N}x(:ke =UHJ':N})ˡNr"gBrf3@qx͆ -2XIo= #BaE]UJGEEƋelNe`Z3V]v }bgoV\GSACRΤۈ~9Mw 5hs'nN -ł$X:zsYؔ1Kmw+:G$ SYoMe'WԽk=CPjT~@{0tBHuT_'!8̡ɮa 0 $ZLs{. }-F/:vzn3Ov1℩K0o:ă0ZߤsJmlfNef[TLԎO4߿c[+xYen=E.,Lm039jeLki @&TopRg@ 粽@P 闌vyQn T=xLd?J.ݖaILuFj9o{#;/D9m-n ";"tR_ƥv Zc,iU7Osb3vbΆ=p -rA8hrX@ٟ-Z%ɘ`j G`1@=|v\f{s>o8K`<< 䘣,*`v1ltps|CYB]mp'0v8Ybϰ:<%À8 _Vȳgbom7' ; !X-S3.Z~2 -0_t ^fr <c[mֈ`iw"E_:TH}ÓD@zY*"a_U*ağg^ 5w9ϔYc5pl*'I@-;S=9t\^@DxTբ8DH.(%٦u|:אn9S*`Xq%Xm2Y&L]e㾷>'L54f7@RR@3R6X&ptVҐ@iBFЙ#rFC]1x>ۧΜL%쑪 -\\+$g|3}fJ.z"608A|_"aP\/ҺD̲uYBI -БwvIA.,/ie ({I=hS^ -aV Yki>:1X*G:h9H>Nէ'ӱ66g7{s{yYRp/D: h\p4a5`2s>#u =XWgS'G1Dh8ܐ #w"YT#s.)69TH -Nm>~q.6,,k(> ܸb> 铤!ĵFw-聢=qkCrp* Ja -{ c['PUU*UG7>*lgt/']a^k"V.Ni^k3ȥ9;fvTqB* ޾CDOuQ͆O2!O3'3tNhb5e.|){`ꭡѾxB۽3s: -qk&Q|GM/E\k}v|HSӉe= dbnn<Os)B_l? ӥiL;Lp oQ<Zp{z0+ڝS5t/:|~/#uٔ礰<^ѨqGeC3uipMID,wSNbԗ=\=wu{j+fZ|jXP55YT,yR>X}!K$r0NA`Ң}ٍ\y3 -0JU96lO-v:$&'=I‘sf/R'3Q̤GeݕqTOw`wN@#6wҴC.cþwɔc-Aiendstream -endobj -1275 0 obj << -/Type /Page -/Contents 1276 0 R -/Resources 1274 0 R -/MediaBox [0 0 595.276 841.89] -/Parent 1265 0 R ->> endobj -1277 0 obj << -/D [1275 0 R /XYZ 125.858 740.998 null] ->> endobj -382 0 obj << -/D [1275 0 R /XYZ 125.858 554.921 null] ->> endobj -386 0 obj << -/D [1275 0 R /XYZ 125.858 509.716 null] ->> endobj -390 0 obj << -/D [1275 0 R /XYZ 125.858 488.767 null] ->> endobj -394 0 obj << -/D [1275 0 R /XYZ 125.858 396.017 null] ->> endobj -398 0 obj << -/D [1275 0 R /XYZ 125.858 207.465 null] ->> endobj -1274 0 obj << -/Font << /F42 510 0 R /F32 500 0 R /F34 502 0 R /F56 730 0 R /F43 512 0 R /F47 642 0 R /F11 792 0 R /F53 751 0 R >> -/ProcSet [ /PDF /Text ] ->> endobj -1280 0 obj << -/Length 2474 -/Filter /FlateDecode ->> -stream -xZKoFW<~ٻKʮ,q %G뷪rH1rw4Qd,b\TF nYgcz}!&HŒQJ?Xr9=]x]\:»~=eBPfq3Y&zxF^1K)4Mƪr0Q8n:[ݹvwY.S<͚5Wu.ڢv<>Zes.Q*R0*ARSݛ)IHjBDn6n(Ƃm*_0FJ+WC)<$s$PQ08ZiNgJyE5r;dRwwĐ?}}ěמG`>ƾ,cZ -j]- Ul|tHkmшӝU6Gu֬'BTP&am[0Rx!!c HII@ zQ0 JOe5LÜg -<0o w*8Ϫb_fC> g4Ot=. n3-# S(SE} -a2̈́7oi)ŷ|M6o6o\ۥ!%qӭuB6EP *9sFI4&*`y gpF}=3`xr0*a*{;+DH*vyQvv -18`()D69z2Xc>XF\'3C - -> 0!}ar=ϳps{ }xgQ(=G^g)aa~"9hfO;Yr>龺?^ԼU&R,g0ˋ7K8ɁYNv_zL,sB8oWxwʭ/fNɽΞz>+x "x|YȝLN#dI-d:竰'ililIz16Z山oU46Yg7y(ӄHĝa؆.[/40 w<[]:!T j$[[$7; -&e:YٹGwȤN!xzE`}hf;nC zrW^kn\uiljEQ=3۷j$FktXEXJ*G_Z>,PXWÖuʒc[NXWCZ(|Ǫ b.]Qו'_qM 3 э6,s@p4K:8C7h VqppBBP̆(>@ƳAA@uuZgU8詺[r=6o@GJk}ŗQ|wTES"*\/hp&1p@;#z }mDԓ4Qr: ɸʹ4)?"pu y H`u6?-.뛥OSFNE$UupJzIJaB.}U;t aZ -02}`—πKm? yi`@2_Y" - K<`EQb2z#Twj$tBb|uo( 0Nq9)(<|ODR*!ƹӞ%Nݺ;8_՞"hnoܳݲh9kOuoCu>jB?*Ht| KvGʞ@fD Ae]\1%wm!c j`] !?'`Jlֺ7ߒg^ IK;;LC!ьs~/} endstream -endobj -1279 0 obj << -/Type /Page -/Contents 1280 0 R -/Resources 1278 0 R -/MediaBox [0 0 595.276 841.89] -/Parent 1265 0 R -/Annots [ 1282 0 R ] ->> endobj -1282 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [153.8 655.155 165.755 666.099] -/Subtype /Link -/A << /S /GoTo /D (figure.31) >> ->> endobj -1281 0 obj << -/D [1279 0 R /XYZ 125.858 740.998 null] ->> endobj -718 0 obj << -/D [1279 0 R /XYZ 214.576 639.394 null] ->> endobj -402 0 obj << -/D [1279 0 R /XYZ 125.858 346.901 null] ->> endobj -406 0 obj << -/D [1279 0 R /XYZ 125.858 328.218 null] ->> endobj -1278 0 obj << -/Font << /F42 510 0 R /F32 500 0 R /F34 502 0 R /F56 730 0 R /F43 512 0 R /F47 642 0 R >> -/ProcSet [ /PDF /Text ] ->> endobj -1285 0 obj << -/Length 2162 -/Filter /FlateDecode ->> -stream -xXYo~_@^`+^:A&@@Lh:z[*p) yW%w)ɝTV&eYt[I&G臻w߿jW2ӻ|tW=?ǻYJaMuB;i6 O3!Ut# ^4EO"#;^QvDsV}gEh)t7{iTK럈sԥʲ FЖ䧾&0 8ǿ]JsaϩM/EheQi|E&-Ij>G?c%éq~4|$`@G7UM0<@5@DirwmLh~xg&G8:ξ`[KYCQ}mcD%o^lER1po0 8ct۸G>2j⊛w 43AS{mHeطpP¯?jC?MpPGB|K%lfupKmi@XrLJIܡ@&_0m}fa#Lst&kb7Fae? -?yjh( --\?&(߱?z}>%V7E|?bdA $qr66ùC<+q>dD3ьnbF~8ښHS gylF+X`_GTVE\b4Ng@)Д8`hp04wJ-= -`bJDgp(=t6Ri;rnÃ?w0B|p4%mV -R(sae!?@ &VA_ -aeD*3q:E? לpX(4߯5]e -Y/ -Z'^/MMliEa=Ū-ųu7`*}(> =?0Sn% -OP=ڞV> ]n6=#-9#4p\uD&,~wȔ<:ࣵ=hrt'=omlFpm6M)-^> endobj -1286 0 obj << -/D [1284 0 R /XYZ 125.858 740.998 null] ->> endobj -410 0 obj << -/D [1284 0 R /XYZ 125.858 716.092 null] ->> endobj -414 0 obj << -/D [1284 0 R /XYZ 125.858 663.568 null] ->> endobj -418 0 obj << -/D [1284 0 R /XYZ 125.858 371.743 null] ->> endobj -1287 0 obj << -/D [1284 0 R /XYZ 125.858 305.995 null] ->> endobj -1288 0 obj << -/D [1284 0 R /XYZ 125.858 236.879 null] ->> endobj -1289 0 obj << -/D [1284 0 R /XYZ 125.858 167.763 null] ->> endobj -1283 0 obj << -/Font << /F32 500 0 R /F43 512 0 R /F34 502 0 R /F56 730 0 R /F47 642 0 R >> -/ProcSet [ /PDF /Text ] ->> endobj -1292 0 obj << -/Length 1971 -/Filter /FlateDecode ->> -stream -xXK6QF#-)cMyqC,ӶYr3SOk3$̓+r%KdKd_$ǝ0ݿUꥑZm7mv)׮B8סp|cϛ_7߿VJ)/R7 -96Aza>)幕S-)"O>wZ -';藇^ xiZ~8Q@g-CGW.@:"f]T瞗ᗼwW떶TkԼ}G1WKs/֮'t<*cQ4js+/QHzipes5=y]uYQ"p}KgʭB@v,J4nݺrÎ -껽zӗ[vRXŤFm}4VT;L+C]?rDS=tO伯ELf-PFcao%m_vq. OjFF:1I`h}s}.Ć3þޛK u u,?~ɢZTnݸz6, Gd-޺b:c؏$dGyW5`"}/  ; .=gDObD~DY)D-l`PEԘEbQNU3:)dHijB$X[gڄ4Ґ20R"!T,/DB 5ҙ{\} E:Ȭ -N(x0bMJ"iXU8Lcp/D"|͌7et{2@+Y&pxw[Z~̚,Gَ؋ʥ|u9If&'41m/&8wS:Lg^ʲF=^ -dglkGpf15>arn/8= r8"/W  f)?J,Wf-l9ӳ`d4 ; dՉ5_AitmU V}hB?f[J~xI.Ԃ!L~bA)٤9rPG 6Y)^:%P?+<wJO%'ɿYy16 - Zvbq{[ʬ߷S,DL*hӨaeAM<<ÉT_C\M GjVntϴ@DW;WP8c-m -ہO-§%lTe1𪛂ë~g>QW$KF BӱIn5Kx[ڡON)n┴]<` ̵•~ڳ΋1"1A{"dHA" /ù.4 $gjom>c}W`S\̶n Da5%WhGs`hxo< $pǓ#!q l/cTHmwŞOH{MlL -1L",MhL78HSk(&`-ʎdhX@W'vGo SD6W̲& -~cb&!wG)J|x0'rxJ[ѳj_Zߟ%VQ\dVFA|C=/fQ!hv6C$(x]y -Mqq^!XR~(M0zkTzAxSGV4/y/g= 7$h[ᓜij7T~]& -5}>vl -) -q3޵{Y ~Vq=S#7 K-ȹ6߱ۏA -F't>Sρ5q7uKsz([tMRէ3cgq\~LIϺ.눟ӏq*ʋߠTؤ _Ӂendstream -endobj -1291 0 obj << -/Type /Page -/Contents 1292 0 R -/Resources 1290 0 R -/MediaBox [0 0 595.276 841.89] -/Parent 1302 0 R -/Annots [ 1295 0 R ] ->> endobj -1295 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [254.414 636.475 273.842 647.444] -/Subtype /Link -/A << /S /GoTo /D (subsection.12.5) >> ->> endobj -1293 0 obj << -/D [1291 0 R /XYZ 125.858 740.998 null] ->> endobj -1294 0 obj << -/D [1291 0 R /XYZ 125.858 697.377 null] ->> endobj -1296 0 obj << -/D [1291 0 R /XYZ 125.858 604.351 null] ->> endobj -1297 0 obj << -/D [1291 0 R /XYZ 125.858 537.078 null] ->> endobj -1298 0 obj << -/D [1291 0 R /XYZ 125.858 467.962 null] ->> endobj -1299 0 obj << -/D [1291 0 R /XYZ 125.858 422.757 null] ->> endobj -1300 0 obj << -/D [1291 0 R /XYZ 125.858 365.596 null] ->> endobj -422 0 obj << -/D [1291 0 R /XYZ 125.858 325.143 null] ->> endobj -1301 0 obj << -/D [1291 0 R /XYZ 125.858 175.709 null] ->> endobj -1290 0 obj << -/Font << /F42 510 0 R /F32 500 0 R /F43 512 0 R /F34 502 0 R /F56 730 0 R /F47 642 0 R >> -/ProcSet [ /PDF /Text ] ->> endobj -1305 0 obj << -/Length 2270 -/Filter /FlateDecode ->> -stream -xڭXKs8WhWz!ս2ƒzl& @=lw[I>|܆'RE"mbBe鶨6~H L0issg6YOW=~Idϟn}>Po?><|olHLAͧQg"e+*s~pH9Lk ,Q)WZep6>1o˝mi=5έ=E[~n6]k^Ӊʺ8 iL+}W1 -eqd嚶^ nH)(rM}$s0VF/?rgSضsӒS`ŊOtpW7UYòuthЪi1߫ $~r7#om};@H+up'tjt®"a/{lC5Ɖ{q'q]Dkpif[zAE'N '>9Hn9}#$b'4}MSOygoSk^6Nj7Ǿf׀5_\nT9n^J{/xsw` 0Tx<+=-;¿cX|zPw <:R mbvy`2lc6j(?g&a,/d$%J2_FDa(\+q -.=/A6U7ў+ -D$ڧǏתDHn@"e -cI/$mB`zBp3Ca{ -!4wLm<Ɉ0dBqnǀbLcNx{J`L {X'u\|̿~~DlZD2[2Ldhž(L<7u}ci]2V4ڳ%Vvrv<ťg)o6S'zyCSB3DV d,(Y/P:c%K" Z@vf=+b`γed;SJu&`m)b Mݼ -BXD1pRۿ5/I2 TF{,adn5B5Bp[;FzeK3\Y<.TcZF4yO<14<>)daZ+UސYל#+r_41 @JHK1ui*ZwR{oE*#1/XTL#qI -Liȝc[G M V (f3@c@:DHµ%;%WV;r?w"Kpk`{O_4 וPoC:eаX:pfY.*g&\F*̵x%|V#*en &:KDej#u"L> endobj -1311 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [174.116 429.517 193.544 440.072] -/Subtype /Link -/A << /S /GoTo /D (subsection.12.2) >> ->> endobj -1312 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [420.706 373.238 430.171 385.758] -/Subtype /Link -/A << /S /GoTo /D (Hfootnote.16) >> ->> endobj -1313 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [298.722 349.327 310.677 360.271] -/Subtype /Link -/A << /S /GoTo /D (figure.32) >> ->> endobj -1314 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [403.224 349.327 410.198 360.271] -/Subtype /Link -/A << /S /GoTo /D (figure.9) >> ->> endobj -1315 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [440.931 349.327 446.241 360.271] -/Subtype /Link -/A << /S /GoTo /D (part.1) >> ->> endobj -1306 0 obj << -/D [1304 0 R /XYZ 125.858 740.998 null] ->> endobj -1307 0 obj << -/D [1304 0 R /XYZ 125.858 697.377 null] ->> endobj -1308 0 obj << -/D [1304 0 R /XYZ 125.858 628.261 null] ->> endobj -1309 0 obj << -/D [1304 0 R /XYZ 125.858 547.19 null] ->> endobj -1310 0 obj << -/D [1304 0 R /XYZ 125.858 491.873 null] ->> endobj -426 0 obj << -/D [1304 0 R /XYZ 125.858 414.822 null] ->> endobj -719 0 obj << -/D [1304 0 R /XYZ 235.214 333.567 null] ->> endobj -1316 0 obj << -/D [1304 0 R /XYZ 140.204 151.296 null] ->> endobj -1303 0 obj << -/Font << /F42 510 0 R /F32 500 0 R /F43 512 0 R /F47 642 0 R /F34 502 0 R >> -/XObject << /Im2 852 0 R >> -/ProcSet [ /PDF /Text ] ->> endobj -1319 0 obj << -/Length 2965 -/Filter /FlateDecode ->> -stream -xڭێۺ}o1#OM[4[ES Z^ %G~}FYhApH>UzM(]%a,]`uKﯴl4 ]6 4%J˿cHO嘞O1I~($ ,1 D fwgٔ4ʼVs h.`>KP>գSTb)H=u0E,s@4X[z!(qփti& Z9'nAh "\fs|԰y]1| Ԕ4Dsmjuc -CϙaZ U?^ 뢂vg"xq8zjy(ϹqL"1>c,W&e)t0Ya|zP꒡ןS ݘb16G V0pdVHi6 !U͓y / ->/éiwLn~lm*ɲҁV>G޺PPw Rtxa$K*!}- JqQs>;*9 sCo|l ,J̝O}%<y֤0% |֥D֑%S_$Z^B~>A9u$H- ޢ -{t}%WcZ,"anxA[UnLU .|.h/u=qI>+ݴU]}4k_l'y]8G-Xk-.hଣYSK]C% AAE`lO@C m2 *s_(~c0YoB wq@<9_f7mYXT^/}4XT7` 8N?o*iMI[ܟFQalrb2?> endobj -1321 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [236.677 702.976 248.633 713.92] -/Subtype /Link -/A << /S /GoTo /D (figure.33) >> ->> endobj -1322 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [176.511 691.021 188.466 701.964] -/Subtype /Link -/A << /S /GoTo /D (figure.10) >> ->> endobj -1323 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [219.529 691.021 224.839 701.964] -/Subtype /Link -/A << /S /GoTo /D (part.1) >> ->> endobj -1320 0 obj << -/D [1318 0 R /XYZ 125.858 740.998 null] ->> endobj -720 0 obj << -/D [1318 0 R /XYZ 240.748 675.26 null] ->> endobj -430 0 obj << -/D [1318 0 R /XYZ 125.858 416.178 null] ->> endobj -1317 0 obj << -/Font << /F42 510 0 R /F32 500 0 R /F34 502 0 R /F56 730 0 R /F43 512 0 R /F8 1057 0 R /F11 792 0 R >> -/XObject << /Im3 853 0 R >> -/ProcSet [ /PDF /Text ] ->> endobj -1326 0 obj << -/Length 3174 -/Filter /FlateDecode ->> -stream -xڵ]o~]HISr..n3Zs}g8CZɛ,~=70SMDag7MtS߽$pkoѷoz7yky_z}ڈx(6}w_wmXA7?~K2LFonFdJWukdH"qOX:);3= }CI,fG)UU]SG] Uaxxh/Aè-oF2"̕EqDv%EI2[p8҄χFqhm5y|xmǔ Hy"L/ tlQ[6 ܜn0U] /juGip יZA/OeQ! -f,gwZMCg8e tO] -C,re$E?q %,Npd 2d<(89JF -[k$ڼH7uiC -oVoI.Es9I2hi4M< f0YTN{q2оǤV}8\nQStm{sq=ٙ*{ҟ ,+ZB*H=i8BLi`]]n>6gD[YhMO,$d`OGT3/U{d+:_& j a;j*KD^5wZef"y;L䖊8@*@kA/)ͷ!Rմgp,9o& QKz8wnpvƑmYstKwq~"۠[k~DC!H,)sH\~M^hhӏL -K$,T9ĹSGEF5@1>=}zAڏاcy]4wiE`fn 42',T͎}%CSPuu)s˃֘JgEu(:5}R,1s˂Zc_Z#k -Om,;M*)C1;^37R"srq57+ʁ͍3@eP $mw#s%GK2Wo\=3[(/Z| -8u_ \cByUn5G:rsOtrYpl FeǛGY՞\03Q(#PuՔ;8е5wF䗹D" tvÊ-xEHcdzEۤK`Qme*^Un!2[mQOܗ  R/ ];ZF_rFhOM|suGPbO;~N kS_RB*BM\eB*Je^f @@Y -B@Hp{.$AEz8mhS"uz۪6Иe eό ljmX>kMp&Q6ISX)"2&Ua`3PA4IV$aIsPϺe$2RЮlꆥ@5'[L,E,8(گ<^eo$7Xe;4!cU>[XX~I -O>WJ8mZ)P+.{ml)\cޢ""ur?U{u;v_yDx,┹clihiiؾPJ #;JLSLƈCN^EEm,"uDMשhuKVW )<ͷ Wte-sWRpҹjӮC]£); r?SYΒ6ݹY DcbLwjHSk)]c6.q<8o2`CF:7428H.520wx"c0j'9O]D(u - `f,YUÁ[Do3QH ?yji XrVLW )~ -eſ P?K0&8?endstream -endobj -1325 0 obj << -/Type /Page -/Contents 1326 0 R -/Resources 1324 0 R -/MediaBox [0 0 595.276 841.89] -/Parent 1302 0 R -/Annots [ 1328 0 R ] ->> endobj -1328 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [431.48 414.682 443.436 425.626] -/Subtype /Link -/A << /S /GoTo /D (figure.32) >> ->> endobj -1327 0 obj << -/D [1325 0 R /XYZ 125.858 740.998 null] ->> endobj -434 0 obj << -/D [1325 0 R /XYZ 125.858 593.76 null] ->> endobj -1324 0 obj << -/Font << /F42 510 0 R /F32 500 0 R /F34 502 0 R /F43 512 0 R /F56 730 0 R /F11 792 0 R /F52 1119 0 R /F51 1331 0 R >> -/ProcSet [ /PDF /Text ] ->> endobj -1334 0 obj << -/Length 3685 -/Filter /FlateDecode ->> -stream -xڥَ}b^l6^g^nIԈD<<3<$j|64Y m+Z|7wouD0/km,1no& gq.ko(lXŁ6l8bSmsч+˼n.wQi??I]O&Mʭj[3:PPڽ,'kW~Gk$:b\ebFLGxYD>)cC.: /0&vDx+ cC΂01W:ıkZmRrp2L@/VePW讜AC~2x>g_pȤ&M;YzqlZ- 6hݎ5WA~ᱭث#!"Tk K -W;w(<.]-xP͢^f:BV;\{N%ȎPDEƑ&} O-eڱK ,S)l\[TA8':abcvt=@~rh[*jق]p\UU? -ji^j$x{e﷾N3 Lr%dwk e"x28q+CáBy;o,6<]56l"%&O{V*"<uқQkX"pզE_ [ m`uzpu}۹XF{ɱ؀\.DXExSp[m'\ or~t[0&3'ב Lf^q3ԟa?y;csVb 艂F ܳO lv&׼t\3=YCfQ7ҐkaŒ~& tL"AG{+ )nVi9"EB"UA+"5&@Rg74ʃ~rȂ}bR &s*|(`e -k=:NSiN⍫3|(E;q._qr25۲!wGۜXϠ9 J%< CE# E#ҙ -Kh<5׳.G1Z3w^V $;kR -f|RJ䂁TU&m7ww3  e2d\XjUWd< - ZMQK ?"ɉ`4fV -_0c$:qpId{L1UlHG5|O6o~Rjm(ʼn}+C8g_u3}gEM^8vPu -"$Ų#xxT4g 1>Au0 Q#.CLڇm~N 0lS`y' -R-Ǒ]\h{v'VְM4aQY!õgh8bz@Z<[i6AyiJ[ FKdC~  m -tqdq;[Gv -[ /Ug}9"ȏ3Q !_p%B~ԵynN b/=4^f )5vD:g$S ,%4v'bubYzVSzi3r}HM zTptuI0S rBafJ]806819rN@垓~:I`pIJ^p]4 2[ڴX6=YґmbxGJJƅ^f 4*+Df~ {Qp+iH;wRΖJ60jhaF"=(Qc5S72^*9aWj;.h%/ zy-ef%P8aff`sޛ6ȼbg&C|{#Y@lM ,H F`޹/28rTϣ<Y+q]wUWrZbGgo:vP!TSNSŶ˂2[W'I/iY٫w-ZT4Lћ_Rb0.fzoyԧ.0M\͚ J,rjZK6]j|HR3kBԨU7(Hn.޷M Vْʼn(1%y -;Ed7^uѳ# G 鮪"H-ʤ|B)%#qGc"7fGJPA/&?Y]?dBLI(^ -e~Y}&If1ho qb厱#jW烏]g}F<7<&PܗESj{ht3TC3ҟÐ-SoJpԕ`>52t(+DΆt^l|,̂£axdPеc:wŰFy?9 -[31$CuMIR~?hs0E?-$l" MOοS8%s_f[(I2~Guw7n` >n7T0懛7M }?&qgL/ń+ Rm̡χLG' {lҬA'̛ܕ@PEbU1]lCP%Oɟ ǻTI[}b'׺uA wBRS+Iը@ȅ~&8<|=>PP !fPls'WrVzKI C=WPuڧx_/3[y|18 ,uY%55 ˄檚sr#V;ugնh6]mĴ:֋S4ɼȥ$ҋoOC6(c#'70$z O覼T5R} L;4zx#A T8! hGendstream -endobj -1333 0 obj << -/Type /Page -/Contents 1334 0 R -/Resources 1332 0 R -/MediaBox [0 0 595.276 841.89] -/Parent 1302 0 R -/Annots [ 1336 0 R 1338 0 R 1339 0 R ] ->> endobj -1336 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [458.61 684.296 468.075 696.817] -/Subtype /Link -/A << /S /GoTo /D (Hfootnote.17) >> ->> endobj -1338 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [151.244 435.998 163.199 446.967] -/Subtype /Link -/A << /S /GoTo /D (figure.33) >> ->> endobj -1339 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [166.924 244.715 176.388 257.236] -/Subtype /Link -/A << /S /GoTo /D (Hfootnote.18) >> ->> endobj -1335 0 obj << -/D [1333 0 R /XYZ 125.858 740.998 null] ->> endobj -438 0 obj << -/D [1333 0 R /XYZ 125.858 716.092 null] ->> endobj -1337 0 obj << -/D [1333 0 R /XYZ 125.858 472.989 null] ->> endobj -1340 0 obj << -/D [1333 0 R /XYZ 140.204 167.912 null] ->> endobj -1341 0 obj << -/D [1333 0 R /XYZ 140.204 139.255 null] ->> endobj -1332 0 obj << -/Font << /F42 510 0 R /F32 500 0 R /F43 512 0 R /F34 502 0 R /F8 1057 0 R /F11 792 0 R /F56 730 0 R /F14 1060 0 R >> -/ProcSet [ /PDF /Text ] ->> endobj -1344 0 obj << -/Length 3246 -/Filter /FlateDecode ->> -stream -xڍZKsFWHm0fAl{pR[[= DaM*~Eqy4fzzuM8I02S^7Vi^~ٛ,wswco& ͗_߽??}o|{7Y9QGWf$ $ʯ\ ،ˋiU}.t7Prc_ߚp=^󃴚zC )/ n.1q"?MUJOecn 8&i'gͦ=7C{,;<#tJο]~VGasQ9?9U Of''`Kn勽!*gȕl)Zr:RȥF-`P1eIҡJk2I;B&C/k} -`OT1M;.@TC5-3*dG7#4/ײ|9^7{W33j6jXHaT5=,ݼ}<Æsi -W}_!0H; *TPБKu1j ?5_~j+e@Ǐ^s(!g}1_zH>ŏНgbd9'u|^2l?gL3B|\MN^*f/gqLމa8b(s)f-$MUAX\-Hĩ@W!gHIJ,$ȁB)c\~/B<rX#TC^,d4}{ |''(,vc]?1>VTE9Bp @> endobj -1345 0 obj << -/D [1343 0 R /XYZ 125.858 740.998 null] ->> endobj -442 0 obj << -/D [1343 0 R /XYZ 125.858 421.694 null] ->> endobj -1342 0 obj << -/Font << /F42 510 0 R /F32 500 0 R /F34 502 0 R /F56 730 0 R /F43 512 0 R >> -/ProcSet [ /PDF /Text ] ->> endobj -1348 0 obj << -/Length 3482 -/Filter /FlateDecode ->> -stream -x˒6>_I`h"E$>L\@'3LHìTs朝>77",#̲7/h9s%j~=B~\Rp~~b) ܿ~w_/ߨKˆ uqn3:q$nrf_ui7O -0r<X3kBd=.3K]`u #%҃^0gL]- y%FNzI-ۦح_k;GmNMBwcbph:jZ=Ͷh55E -B́,fjM{1Z͔2sR+/Z ,AAh-5E^._6Д ͅ5&Z)pnOo]5)SVEVPXq1f5d<΁AY9 dg>[ܷ7)h0FFp׉,MQ;w​Fz#,#ϱ%P4)m8Yo:J~"R&)$1Z8鄼5EN1-NPLK,KݐOް6?eřё,-Dc?A~³[;'[ /yH8'S"0t]s -ƥzФq8ˑ|M!RLA}p% hXУ7 LZ'A~.ߓh` Uz:OoMZ*ux(SಷsK -|Mۧۓ!EI-\Pn< -]q碄-ɮaPM0l0ytd -.=̧ Tr;y6f9UaLU_Yẗdzu QBf=t*Lӄ5qj@5QktN9k-:v|nj1{lLM8Dfh$UC@c촉' -c\,0zFi߾ZapR:9ʫT>LeS')q&!Z_UM硙QAOPh, Oqn 0H5mRzƪ`{<ﯹmOwΉ^CgvX.T0nդ8"$sDoa#iOʻQB|}9 _r/L_(II=;IX*};IqK/B6Wy?<{>$&JB+Ȫݴr?1mO?EvolPst}E $) $X}4߀=\{<[RA.&Q:.GeR"x kQ; Q6.d#zjY炟z.p) Q%!nx^t],߆'wM?}W.(H/rӲ}F׫ O=x'^b1ya-h5(e4!ۯ XV}["޽V4Md$He;aPyր6ԒK`a[l50q_5My |?Ū[uO6NEk`hRnJ6[HzpX8@W}! Ϗ -|CW K\I',=6bJm|6`2eCw5{P#@4~hBފajSR0=5#8i^4—lk *jb?IǦ- uw L}j ذW%d_*Tv U:%fqP5G?+ ״tSMU\ex T谻Dy8 ) -b&Ff7&Xm}AwmxI :7mr;]9Vm90ZD2ޡkŃVCb} -x7"h̢TMojwĈ:釀w':\$TCh~}u@^mUřvDWnvU?,n(;3Cw1@ erqtb;R3KɎm_ < [+zmM4v%݋u+2*) g>[GAqq98?륽 άst"%m Ap=湖\0{EITtiiE8h"bh>c|^AC0]MZ4j'fGEՉXRׁ4ZCڨ^w._np3KG|%s9Aۅ+pEv!ံ 2U9\| -0&2&ӫ͟P;O3hǰЅ%-X}IM\A7Lxe . )0gGt8(Jco"gpЉ41o6XwFCRHaL}.7#y>ᑟe?aΚ-TDܾcD5B])eI\JMSdu%Y64e\GteP> endobj -1350 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [300.251 702.976 309.716 715.497] -/Subtype /Link -/A << /S /GoTo /D (Hfootnote.19) >> ->> endobj -1351 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [425.518 667.11 437.473 678.054] -/Subtype /Link -/A << /S /GoTo /D (figure.34) >> ->> endobj -1349 0 obj << -/D [1347 0 R /XYZ 125.858 740.998 null] ->> endobj -721 0 obj << -/D [1347 0 R /XYZ 254.516 651.325 null] ->> endobj -446 0 obj << -/D [1347 0 R /XYZ 125.858 370.787 null] ->> endobj -1352 0 obj << -/D [1347 0 R /XYZ 140.204 140.485 null] ->> endobj -1346 0 obj << -/Font << /F42 510 0 R /F32 500 0 R /F34 502 0 R /F56 730 0 R /F53 751 0 R /F43 512 0 R >> -/ProcSet [ /PDF /Text ] ->> endobj -1356 0 obj << -/Length 2880 -/Filter /FlateDecode ->> -stream -x]F}Q5af`-8ԕ=y@Ie{@xCj\'WR"U"IUvWx˝d ~|uVH^='v{R7}w=7*~{?~Z(H-qC/J`dQZ3VI!Ubm!c=WsB/-ɡ.oawL+KҬ[0`Bu;8NH#J"jjVuGbDǴaX'*Ce75DЍ" C71-wc]T2I8>.c2k^:RcN5ԏy=x n`\vpW:9\bt^J,6t='(r; -vPm -mK 5iO#Ps,BX2\d!V<3imBO7'ѽ# -Vua A4;UN7*zLy/T ̀ցdn I5Kh|@fzEAUja-aw+\PF.qE?T -CbhʍMMtgLM& sr!"oƽI5#@nA[څ#[6`e 7@ XwmvEM>G>Ǻ :dٹi -^ M7PQWT~m` =Yo8CP5-[dRl0w1+| ؼe*{]7\ <":T? ^t?_PMS[ĢU,2G'ښ==[IꚔ`Я7E-NT%9;,e\TmRv% CVK,~.H#D=XЁ;*v۱~u WDQ߁6ʧ K1qm4^ЪOY -Xn1{dwuIw$c;K%G4RMK(= ^w r.6ZdV.j`n`Y7)R`Z~fP-aVmu?5')5#cb"kDBt!W_Q<WQH6 >*4E&Ұ-DTLWùC2}p5͕iڀϸ3X!vO\3ƽ:3EdpcD d @~4{|qHm\!F z^C֒O n}%_(p?Y]C - X J0WNs׸W`@06?~S}!du -}yw W_!ar}Jb1WQ82B$0uP1́p׉ -(V ^6tb%$c7mYdUH_]6* jڵjBx| j <4iG~>KnΔ0~ aGL'܂0ςLGHDH5J`[(Է눩>@6Se -k -PYs0rId'&ZGidEI+"$yWnJP]L2B`,M9EɮI"C>VH,Y,"~pRH_'c/"iwc3zGO',"97Ad݇yjbO145Rg|y^,$}$y;>CMXW(O.beoUE gQG> K[iRî>#η c/pM[Y!dn,pphmCQC_^d~M򆲁DujIYAj/v"'—oޱ)8,]iЗ:#u68zF^82㳥Jdq =Paz-Ae;6~l^ù/$c6CQˇ/1m^Z\'訕ilgs< 4uO>m]1i14^^`C3}8*v&+7vV*v*|½>Sn9s(~~Y{-Ʌ |=ߥRpľÖ\=)Vۙ~b*Cjp1Z޸ڎtp 7-a۱Z&)n5BN$SjrvM,A}nxhf0{'Ior`m j,B3-l6RmO;#\tfcdI tnz p@[q#̢Xɕ) A)#z| w&N 5rFvm -33!yMmMHl{{ܬueL1.30ݔ[1|8ZnT< !Wl6su=R!^TvZicKC> =!¾O3t5cT8B~0xH"k΍)PFCim0to, N'.L1@ P@mI2q;&ئR^L-`"E/cY+INR;nAL1.E!{Vܚ3@z II]U~?m!8endstream -endobj -1355 0 obj << -/Type /Page -/Contents 1356 0 R -/Resources 1354 0 R -/MediaBox [0 0 595.276 841.89] -/Parent 1353 0 R -/Annots [ 1358 0 R 1359 0 R 1360 0 R ] ->> endobj -1358 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [258.786 443.848 270.741 454.816] -/Subtype /Link -/A << /S /GoTo /D (figure.35) >> ->> endobj -1359 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [374.971 198.956 386.926 209.9] -/Subtype /Link -/A << /S /GoTo /D (figure.36) >> ->> endobj -1360 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [153.365 187.001 160.339 197.945] -/Subtype /Link -/A << /S /GoTo /D (figure.6) >> ->> endobj -1357 0 obj << -/D [1355 0 R /XYZ 125.858 740.998 null] ->> endobj -450 0 obj << -/D [1355 0 R /XYZ 125.858 520.909 null] ->> endobj -722 0 obj << -/D [1355 0 R /XYZ 257.116 428.062 null] ->> endobj -454 0 obj << -/D [1355 0 R /XYZ 125.858 173.427 null] ->> endobj -1354 0 obj << -/Font << /F42 510 0 R /F32 500 0 R /F34 502 0 R /F43 512 0 R /F56 730 0 R /F53 751 0 R >> -/ProcSet [ /PDF /Text ] ->> endobj -1363 0 obj << -/Length 3405 -/Filter /FlateDecode ->> -stream -x[mjg_$JjC6 Kn~HTk˻j\}g!7sws!4=!g!bX 4NWIY_O_^ :@H2i=[ -v1_om~(QJ$,> -%u@XL*Y&bfIE%Zmu1"?pA_}Sع*V|ߕUAk4 thݻo6*Y"-IEP۩T`Yưh<ƕe2SYpf*W =5~ڃWW)XLdJIX?V9{g58h-+F>I֩CL$J1RXqKڠ/mƂuL9l,$Ljd)6 .>~\¤L($ޚ)1mהսmm$_Hׇ!jOwR -GkFqMg%h{olx]?ۢg"5D#w[> 8VMUIkZZ:mx@c984<( A2Sw,w}_$MW ge%Li=2N+1Y-_ta@a>5ADD*UjCT0EpN&lOKұ=ܒ⏳}C.:o(UD -Tq,rc<Mj!`x2`v Ӹ"&IIE@qCe:=1YQMn.A|"A?LDZ3v9;Qy9))Su2ASEh6Z쁄82'3D X d>vP7g>v{r8$1m~UzgR@p=ȋ˖=-?f46a58{8k]'şIb>?q2@9XϢoa2b{bW{h9 'q~27^ <2;A-?3?,SGZ֋Ks1 uKq2>;B-" jbi :¡d$$K4udA#!SJ<%4U0iG;Ƿ>̑8e2K?i #Cve4Zo(q0%= !R҆evf2wvʼneu]Cؖb}D<[}WXlW`1YĢXS -xW%Bex`soJ}o m:Z <m{hꍄd,gt$;#=АS޶;pؘTơj5^"tXj5AX-imTmyw,yM^uEvhGU%Kʳm{u0ȧ[[XD/,( cFWm~(]z8]ܺ(Ag]ao$IGXhmUopt)l]Qbؠ'ʎˡSWNJaGg,4٤`v2|%}".nVJ! nKED}ϑЍ+-O`LIsmeǯw -9wCI B+,xf-j"LH<)\ 3?KD) #S2`0tF3e9;E:2p)!EϜu4x'ቒL؞NǾ] -M0LF+/&AXҖmr`H.܅vu}bQ`?ACiycETKn~[/a4 qNЁEd!s@kлߗ|(wO,K^5I Ѷz㽈Ij:%R+J[]ca&PWYSGgWNIJSќf"UoYc0whKPIS(|z?>$~W:=cqQ oav_#ydeuQ =JOҮO|ơ[%B.ZK>Y hmZ"Gl,S:(iLWNy0|,pmX2˪niH?E%¢GZݘV VCw-5&Q~w']g"6jOⱨ:ĥ59Li 2gL fOP8@|*/sH[N92>&Nfyi'=B&;kdO0z33zҡ& 90ˌ>d10iil⍿vmt *ZIXY fRi;Qfb2 Od&'7E{>K\u\_ 8wػeDrD7l/`y<"A"!;v0-Z)*S)fD,"r)L<[3qO?~4~DZ xLjP1R1b=ݶ%0m}wɔRǼl6q/ Z`f/00VOendstream -endobj -1362 0 obj << -/Type /Page -/Contents 1363 0 R -/Resources 1361 0 R -/MediaBox [0 0 595.276 841.89] -/Parent 1353 0 R ->> endobj -1364 0 obj << -/D [1362 0 R /XYZ 125.858 740.998 null] ->> endobj -723 0 obj << -/D [1362 0 R /XYZ 253.096 711.29 null] ->> endobj -1365 0 obj << -/D [1362 0 R /XYZ 125.858 447.814 null] ->> endobj -1366 0 obj << -/D [1362 0 R /XYZ 125.858 290.035 null] ->> endobj -458 0 obj << -/D [1362 0 R /XYZ 125.858 164.769 null] ->> endobj -1361 0 obj << -/Font << /F42 510 0 R /F32 500 0 R /F34 502 0 R /F56 730 0 R /F43 512 0 R /F47 642 0 R /F14 1060 0 R /F8 1057 0 R >> -/ProcSet [ /PDF /Text ] ->> endobj -1369 0 obj << -/Length 1830 -/Filter /FlateDecode ->> -stream -xڍXA6-$$4پ$Ωc٦9ь0ج烄4Ҍf4r,\,!^`ׇEB/ޮQ΀ť&38 ͆FDݹCعw*wVa-BbGe=ʼn1gx  ULz]`v8(R:t&(s׵%ԩ;N3tbk}=jpno=1<}x*ie'ª}ұRwR"zJmH+m)=)qJK)},]4SXH-w/bJeMp%EWfJ znpN>Y ᲧCL|7WK`m `r9ԛ[aelda3zrlXIY,ŀpѲ9IP,&ƟL/7\m`clW6=2/"-mO&HX\D65rs%0t)`W$hQqK|C[} Hf>XYuJfxfag+|,Js}FB򙗹gwy>6I泱6%xCɣ vj4Չ]ev"wq03 vT4,M4-dDl۞q}뤸rx߱p? -pU#`$S5`>79iny^[!2S"= $yZ`⨆Z KS _NpzDq|C/M( /tc`Ŋd{|*~yo X _g;$†Cgf.ۤp;زGA@-xwg7vij1.jX8Ls*jVkr_8Q{TV,۞j_7R*xY7V/Zhͼd[bBCRhm xb\SPuQBVWXC,f~Gm>sƯ@T|\PW ԫٿp?$#?endstream -endobj -1368 0 obj << -/Type /Page -/Contents 1369 0 R -/Resources 1367 0 R -/MediaBox [0 0 595.276 841.89] -/Parent 1353 0 R -/Annots [ 1371 0 R 1372 0 R 1373 0 R ] ->> endobj -1371 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [312.923 613.661 324.879 624.605] -/Subtype /Link -/A << /S /GoTo /D (figure.37) >> ->> endobj -1372 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [436.288 613.661 448.243 624.605] -/Subtype /Link -/A << /S /GoTo /D (figure.13) >> ->> endobj -1373 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [441.352 350.647 460.779 361.591] -/Subtype /Link -/A << /S /GoTo /D (subsection.12.5) >> ->> endobj -1370 0 obj << -/D [1368 0 R /XYZ 125.858 740.998 null] ->> endobj -724 0 obj << -/D [1368 0 R /XYZ 261.086 711.29 null] ->> endobj -1367 0 obj << -/Font << /F42 510 0 R /F32 500 0 R /F56 730 0 R /F34 502 0 R >> -/XObject << /Im4 888 0 R >> -/ProcSet [ /PDF /Text ] ->> endobj -1376 0 obj << -/Length 183 -/Filter /FlateDecode ->> -stream -x} -@ {p1w6N8H[A)c[m)*)}z}P\9-yGtѣ,Y `lx]tj_}>cqhy84V:&5nT[Ojһ% /Mmm ky.lBv?];LO[Hendstream -endobj -1375 0 obj << -/Type /Page -/Contents 1376 0 R -/Resources 1374 0 R -/MediaBox [0 0 595.276 841.89] -/Parent 1353 0 R ->> endobj -1377 0 obj << -/D [1375 0 R /XYZ 125.858 740.998 null] ->> endobj -462 0 obj << -/D [1375 0 R /XYZ 125.858 716.092 null] ->> endobj -1374 0 obj << -/Font << /F32 500 0 R /F43 512 0 R >> -/ProcSet [ /PDF /Text ] ->> endobj -1380 0 obj << -/Length 2627 -/Filter /FlateDecode ->> -stream -xZێ}2*yL j[VIT(YWO_r8hJ8ɽAEB~X2ʮOQyYMhi4V-:Z_6'K -&x;—YȕYHxZτԴi'H LH Xm۬Ztl]R JKMΓ2OmRSMv{==˳[r0֪JI)3mP$;@\ۤžN. p?67:)Ы[gb9bMYYt ɔCwGAдItwl;Zt1{)6+^Kכ7.m"@KDk<<1[̛x׾k\aۈ9j @]5DD^'D,ϩuNC.y@1N>j!J1<#bzj]ܧ#>4=@QL;[Кw2;PcEHg402Ѓ:$_T^Ь%s"B-$IUGو] -B3dV;࡝q~]ܣ6_" } xꬼ\Yy6+d7{Z~'~5wxόӦ1|hT ڤ=zhyh|tPA !.n4%f"cAƐ].5 p=\ĬD͘BA4.RAs!! dNV"~4A uACֺ0)л'zNeSٸ_ DmCƶJT,?`Ge%8] -^~,CM!%yE$mZjVxtV RIc8/i6[# 5oX;/^t>$^թ ~b@s!QƇ?*~'o8 FXB`z_>O 8ʼn #P6bO/V(,`V yjypH]_r-G:U5ڹPݑa+T;/#%% UyMGCe>) ً:dސ~AYP1H:#c*]Z[@d+|Frƒh^jS3q<9E&ܟqe%yh:b̪s:F+sAqO φp2l7e[?RȩIK>i)L)6QZM/> endobj -1382 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [345.839 464.528 357.794 475.472] -/Subtype /Link -/A << /S /GoTo /D (section.15) >> ->> endobj -1383 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [332.149 294.929 354.067 307.303] -/Subtype /Link -/A << /S /GoTo /D (subsubsection.8.3.6) >> ->> endobj -1381 0 obj << -/D [1379 0 R /XYZ 125.858 740.998 null] ->> endobj -466 0 obj << -/D [1379 0 R /XYZ 125.858 716.092 null] ->> endobj -470 0 obj << -/D [1379 0 R /XYZ 125.858 692.898 null] ->> endobj -1378 0 obj << -/Font << /F42 510 0 R /F32 500 0 R /F43 512 0 R /F56 730 0 R /F34 502 0 R >> -/ProcSet [ /PDF /Text ] ->> endobj -1386 0 obj << -/Length 2851 -/Filter /FlateDecode ->> -stream -x[o6b>:@Gk=}w^Wq2S?f#Eٖ_f ؑ%"eHRʇ|E ^EgZǫ_=ܒ[CwJ4ӡ\Ol\sZ7һzח;鰓RHiR\|RfA-W3qLXѯCƊ"WS}XߦedЫ+xRޟ&%쓒igo;K^9^bDhb^,).qM֦ZȻ2BQutU%(zYU[إe uzWl-6|_DFPϦZhcMbRp/oӊ3RM62ner8V -,Xškc UL|%Xɑ~W[ gL>ZRi&>//;u-2D>𢖥BD0 7~(\xIB%Y @5RvܾZ6ZOH@z~V\Ex"QpGgZ8,8iIaYE9[ tM $L,SU/VeBӚׯ7~P+Wv]'z< 6;jOYK_ U*ϕR/1$ (L-1В2t[ :ܾZ/~(d@@#,bbHuSƮhdRQf}}DK04A`\ӳ ?䶟^((2o'UڎpF^^X9fW̡JJVDh6`[& y?i m-nvI (ߎ߁]3ߗŁm\cS/& $6H 2F!PH)Ũǵ豨!3Zɾ)7 PG9HvԠS&hᦧ8to_.)` 3afCT vKk?oc -x]<]4ݞyHYzcWh3[|4 ,:\l:dܫ0nN ;k=g!~kn,LuڜUš*&9BqVx[%7Sy}ƻ*{0 d2kZvCs;i7kv-#b {aso}@JM֦;ŀXx{܊np2(kIx͵`t4dD5B(,/N^;aIB$#(TO*&ҏaỵyK3oPh8_R^{hL 2d_ooYk8~[JC$yn>xXڶY:liyqr[Q ڰs.tH8{EyHDz-:*G=+4pjeR KF%G`X.8Ћ~0yZ|:b2߯ CcY#%OJh'mDJ=9U-r 'πf. KZ>@n*o%:,bۜ?ru3?,O:k2ˌjZ2t2UufOfLh]l=SXIKc9r5|^4 {TlO1M=8Ih? -@ -z{}s"z~gr5pI6ƾͭ# بK8\Q!6O4wQn!l*{0:ͺ1|"N6f"bab㥝6&M=jtћ7 $-^82fQӤ|@{dSdSz!{if4WT -!xX ϺGu:%kv"$bq8pcop6,JvpswUotTܱu5ll&ٔX^ hqX^D]^8 Ίձi#+0ShҮ҂_3qt #C=EݐB3cw1E9ϢݢNi7xm/qk{hGac> endobj -1387 0 obj << -/D [1385 0 R /XYZ 125.858 740.998 null] ->> endobj -474 0 obj << -/D [1385 0 R /XYZ 125.858 716.092 null] ->> endobj -1384 0 obj << -/Font << /F42 510 0 R /F32 500 0 R /F43 512 0 R /F34 502 0 R /F56 730 0 R /F14 1060 0 R /F29 1390 0 R >> -/ProcSet [ /PDF /Text ] ->> endobj -1394 0 obj << -/Length 2825 -/Filter /FlateDecode ->> -stream -x\ێ۶} TxӥogIN&Lm46=bK$gfg"(e+P h^\{sS?G(p/7W46׌,btqutcþ/s{o_yVkj
BNRYVZ@JBWiABW5ˠW6XiSnE1~t!S3k+Ideo5+Iġd''- ވL/-K E_h@tc -Y$HY\qޔ%a~^9=yѓ -!'!f4 -m!hZ#Oxj#[ hByk"'et&nXSUӬDb[ɖdg*xWRB3Qf Wt_yr8R$zˮy?|sPj܇8Y,?p9M;A>ʙMW[B6z<lx+0`\D% ߚI6;$SH+DQX"YW+h,uۤkyN]\r ( sn;K`lD ./p~O. Ype5DB`h<1yb$ALzyjsQ1W:<ˍ]kᡬtE3MڀؒuJHד+whXg x*G6C N  @cgJIc?56ԓOl}qkV;uph.*$I`IHbci/ (#KsPVNY 9Krj/(bVH0\Xa2C9f aIl,(L SG/5bOͣBl~䴯K2,4yA5f/_G/I$bT|hdT#X܋j Pqg.@:PXmfI{X1[uu&I%+, -'EW& egyiHӠG/Dd";Xm$@YU.4:sƳL mVL,5)5̛BþF3R{im|{PZ>sKi"t&R,p)q?TRY~SSõR m@&gBJih(4";4ycK_q7x)gV 29U!LrVtnV>5{&m׹=Ntzף kI? r:Ox2$Ju2#AݵCw󜺳S9P6%'d/˫K}}!Mt*bP]lAȔVxd*r!^D -q8?$<2)(m UrR,锬ۍE/4hM'.ZY`9bb,nŌd%ps`ӨZp@3{~ -DLqS5(yHcKr7&d㦧+!D҇dJ\8OLtjbW }{}:8x0=clp/6קVc<wnSo+unD]pu']Rd=dA̡2 0j`+k0٧H($VgX8,n\ϩTRIz$ Y溽s!EMtbДSSe!]nucp8~VMS}"OqV,5ϩ$˼ZycD /E{9mc毺2s "D(NY uSVF=CEitH3x`m7usͶ]mDM:.;ﴪ;Kʼn@N\]1sk(.y.>1)J!?pe:i -uf.҃!iΩU y4-ȣiG1ʪ8/*mSZA,*\mjDwӊNj%뿙Q_a;*&ˤy8kk܏BUub PFendstream -endobj -1393 0 obj << -/Type /Page -/Contents 1394 0 R -/Resources 1392 0 R -/MediaBox [0 0 595.276 841.89] -/Parent 1391 0 R ->> endobj -1395 0 obj << -/D [1393 0 R /XYZ 125.858 740.998 null] ->> endobj -478 0 obj << -/D [1393 0 R /XYZ 125.858 716.092 null] ->> endobj -482 0 obj << -/D [1393 0 R /XYZ 125.858 692.898 null] ->> endobj -486 0 obj << -/D [1393 0 R /XYZ 125.858 503.599 null] ->> endobj -1392 0 obj << -/Font << /F42 510 0 R /F32 500 0 R /F43 512 0 R /F47 642 0 R /F56 730 0 R /F34 502 0 R >> -/ProcSet [ /PDF /Text ] ->> endobj -1398 0 obj << -/Length 1357 -/Filter /FlateDecode ->> -stream -x͙]sF++f?a]\;dmf\` L$Pq~}ϲ-ص3/Á<{X ?*9FA v;T!:f -:zéc(K|A0뫫>T`ް#O:} -Ƒ˫wQ‘ -]4j c!Btc;KM&Z守$I'h7B+# xIo_Y -9 -$'.þ>} -0bp0ƈ1Jj{3yw.JU`2C.=<"̃@x!k2L'}D.SJ=`_@at>J%(Gtd;@& / d -dB {2΀:o#& Ub&UXKìC --N#|Y;y =Z <i#6Fmj:s hLL.R]E1I<'n=un 卭gH> =2ph/v_{~t -;~*KqD7l,*lA„S%i,l^uH: z"xD#70꽷szN<(p([3z˗a2fk&Z!4dfDNw`a|DQpW hd'ZK&U=@xPi :S2MV13hjeG]Ej 6(+hv\Z5h-׌%5(WSANe.ʰKɿg4W+$3Ֆ6J,, B<(6,²GC\*KfOEx CtY]Gj{6DRj,L-#,8[>N=~ AVOXűp}MEE/ ,hf]6<3&D͎P[hBejiP;]Qc7 it5馁ZOC7Zb[ oӵ \TM>:jl}%շ̄V˲2J'q0-GmuH7 zh]GɪNԪ(Xlc,+~>'!N_~wYz+NԒ=p>R}0wBXHc=D֛mY?sBkӥOE >"B)kLdd/Έi#nR(Ϡp~}N[y.㍪>ڼYQJtXI%Qy䴉'ԯ2ˬ҂x\ n$ JMg'D]/ endstream -endobj -1397 0 obj << -/Type /Page -/Contents 1398 0 R -/Resources 1396 0 R -/MediaBox [0 0 595.276 841.89] -/Parent 1391 0 R ->> endobj -1399 0 obj << -/D [1397 0 R /XYZ 125.858 740.998 null] ->> endobj -1400 0 obj << -/D [1397 0 R /XYZ 125.858 696.971 null] ->> endobj -1396 0 obj << -/Font << /F42 510 0 R /F32 500 0 R /F43 512 0 R /F56 730 0 R /F34 502 0 R >> -/ProcSet [ /PDF /Text ] ->> endobj -1403 0 obj << -/Length 2134 -/Filter /FlateDecode ->> -stream -xYێ6}@.izfgz; 4&^ @Ymml+ət~HJuqz&0WUdSUQc3T4 %%qma)f΢3bk1[n -?LR?\]=>YyyoߋBegܽ["JZ4sZDH}ՄƜx4:J9gQ`_|GvI5P:[pN2O)bêWKΙ - nޙ؟~"ooY17*|U3m `;jl=i[*gq{]km &Ls 7H|`\.j:{|ğisZ6wMk.8XD|Bp -WH 9ZXvαrHn_.щ$(4I..Ѱ$`x6nMv.`%~05J>e@ Ơ{0XWnGp~,E?Il10yǍ08*^:-Tjnʿ͕ -%!*PϦ~.N\AjFuf.t$S4s ^4_v1?{ժe-grj5YM?# -=gpcW#K揥kSWI5|& s 0C`i{uOvl\E{ۄ˴cRVX%X -)"ap#aS9FC%ˢ:ak{ X2BxSf6tzK)^e9>;U>v;} 2ad/ 1yU}~I-ܶb{}DŽ0*&a_=bS9b 9O9 vb?JH(=ԎK{kSr_NX5% -@=44E$UUAͦbKYa{9.єޚnսU879z.OF~`ҟ%Y 4'NS`11gVh;7x1X]'㸳@r-l{wrÚ0XǤ5jL=YQ-t<9uBʷҷ$W-gi/$ -r ۲$4GJ#UvC@0j_;FlΕ1y?2\9R~[h+!ehcQCȣCH_b$ua?Np)RNhj*8Yn#ȫ]@/h`40kKUyKFH=/:Z;`WWO,f w<+ּgj%gnǀ¡%A֓S)8~y8t$Ez5h:T2xc#T Z0-b6^)Ja! dcVCӠEID5}T3I6-&ߘ:{|%h=Iq]ĊMasSX+͡i9۹)1Z="54X7yqh]%K$(7[tx2qűFS~9d2_UA#.]FhWKKyoy~(:ps[Ä QXp0ʿ HduH,Y㐴h/xlZSx]ѨhQؠ62qP7#cA8`ۈ(cDHcBU50,M}*yZ7 孧8$˱FAFz?endstream -endobj -1402 0 obj << -/Type /Page -/Contents 1403 0 R -/Resources 1401 0 R -/MediaBox [0 0 595.276 841.89] -/Parent 1391 0 R -/Annots [ 1405 0 R ] ->> endobj -1405 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [303.151 489.626 310.125 501.999] -/Subtype /Link -/A << /S /GoTo /D (figure.1) >> ->> endobj -1404 0 obj << -/D [1402 0 R /XYZ 125.858 740.998 null] ->> endobj -490 0 obj << -/D [1402 0 R /XYZ 125.858 716.092 null] ->> endobj -1401 0 obj << -/Font << /F42 510 0 R /F32 500 0 R /F43 512 0 R /F34 502 0 R >> -/ProcSet [ /PDF /Text ] ->> endobj -1408 0 obj << -/Length 2300 -/Filter /FlateDecode ->> -stream -x[Y~[(ڰ2KvP-0E*$OuClI[EQMVu_UY W3BEjl߅5nPFDžuAB],$(Y_?3: Q&fHr:{\;xȗy}zs$E$eE(,şcI$s]  xgh@‹}Xb H)GLM+~ < p^Ь7`S -E۵qOnV&"M4\ |PǑ91!4΍^^5Е>g:OP8 -} -?gD.kNnФOYQ(;I5rbWzRy j [}ڤ[1Ӑ}ILj| "7,`v<2'GY\u96*~y%egp;V m-Po?_*[0ƪJh08B%=:c }cC!%LEC)97K!czs*/D)'g3dH7ie$tBF=c+3̫9nR.Rؙ]X4U ;_R]ܥ1P.u3Xڢt`Nj㰼1@i]VC o\Ӊ\G)ga/ytƈƋnd[ pi-ڴږh./GEqV2FɠBqW7Ӻz=c#P)z_\#%:t"`-0ծb4(ӞLx5ğOׂ=ۺ!Hl\$VRPQ<愇MOe9g<(ʟ|"\"%oA.~4b8*"D&!d4*`q3259l<2P\dmk=pMqaYM|a`bYW`%b(L-Pkm+4+[@%dCo(ր5=<}]@Ķ x#bkoc+t}d7oEƽ8 -Ol[V$ ,5a4b3 oa'Lϡ/'Y8FFo MͻL=}sAƳ}E8f̤itm:}ІֲZuH$)UQnm -M3L&BH|]3E4Ңwuxp{_r2f J_Syt6&g,?E>5 Y)oW::SJ364o)E"΋i dg$VF"(4/~ʮ-vҀL`ee(x}xWA-Nx~I!. 2H15vjv#JcKwLyGYu71↽!ԏh 8~d]爝 \NyčkΦ*yD?ϥ=pZ/Ӭ w&ApnB~hf測+Ĉk -y˕$Ӄ΍9[9+K=3gX^]TΞ|᧿{Q -%} +fbGNj$#j#F:β. ] :ǞS͞ZmxE=Lwٜ3&ϋ&Vߙ?91(/3ޫ NKse hm)M{¶`Huxϓ;hYݞkyzE՜1rBpH{8f,Co$C{>;5>8do(&9vy .v#c!W朄o1NTf2",b"B\DZ0endstream -endobj -1407 0 obj << -/Type /Page -/Contents 1408 0 R -/Resources 1406 0 R -/MediaBox [0 0 595.276 841.89] -/Parent 1391 0 R -/Annots [ 1411 0 R 1412 0 R 1413 0 R 1414 0 R 1415 0 R 1416 0 R 1417 0 R 1418 0 R 1419 0 R 1420 0 R 1421 0 R 1422 0 R 1423 0 R 1424 0 R 1425 0 R 1426 0 R 1427 0 R 1428 0 R 1429 0 R 1430 0 R 1431 0 R 1432 0 R 1433 0 R 1434 0 R 1435 0 R 1436 0 R 1437 0 R 1438 0 R 1439 0 R 1440 0 R 1441 0 R 1442 0 R 1443 0 R 1444 0 R 1445 0 R 1446 0 R 1447 0 R 1448 0 R 1449 0 R 1450 0 R 1451 0 R 1452 0 R 1453 0 R 1454 0 R 1455 0 R 1456 0 R 1457 0 R 1458 0 R 1459 0 R 1460 0 R 1461 0 R 1462 0 R 1463 0 R 1464 0 R 1465 0 R 1466 0 R 1467 0 R 1468 0 R 1469 0 R 1470 0 R 1471 0 R 1472 0 R 1473 0 R 1474 0 R 1475 0 R 1476 0 R 1477 0 R 1478 0 R 1479 0 R 1480 0 R 1481 0 R 1482 0 R 1483 0 R 1484 0 R 1485 0 R 1486 0 R 1487 0 R 1488 0 R 1489 0 R 1490 0 R 1491 0 R 1492 0 R 1493 0 R 1494 0 R 1495 0 R 1496 0 R 1497 0 R 1498 0 R 1499 0 R 1500 0 R 1501 0 R 1502 0 R ] ->> endobj -1411 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [244.413 667.877 251.387 678.138] -/Subtype /Link -/A << /S /GoTo /D (page.8) >> ->> endobj -1412 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [254.376 667.877 266.331 678.138] -/Subtype /Link -/A << /S /GoTo /D (page.10) >> ->> endobj -1413 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [269.32 667.877 281.275 678.138] -/Subtype /Link -/A << /S /GoTo /D (page.30) >> ->> endobj -1414 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [269.32 655.17 281.275 666.114] -/Subtype /Link -/A << /S /GoTo /D (page.19) >> ->> endobj -1415 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [269.32 643.215 281.275 654.158] -/Subtype /Link -/A << /S /GoTo /D (page.67) >> ->> endobj -1416 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [269.32 621.297 281.275 632.241] -/Subtype /Link -/A << /S /GoTo /D (page.32) >> ->> endobj -1417 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [254.376 609.342 266.331 620.285] -/Subtype /Link -/A << /S /GoTo /D (page.20) >> ->> endobj -1418 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [269.32 609.342 281.275 620.285] -/Subtype /Link -/A << /S /GoTo /D (page.27) >> ->> endobj -1419 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [239.432 598.139 251.387 608.4] -/Subtype /Link -/A << /S /GoTo /D (page.11) >> ->> endobj -1420 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [254.376 598.139 266.331 608.4] -/Subtype /Link -/A << /S /GoTo /D (page.70) >> ->> endobj -1421 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [269.32 598.139 281.275 608.4] -/Subtype /Link -/A << /S /GoTo /D (page.85) >> ->> endobj -1422 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [269.32 585.431 281.275 596.375] -/Subtype /Link -/A << /S /GoTo /D (page.88) >> ->> endobj -1423 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [269.32 573.576 281.275 584.445] -/Subtype /Link -/A << /S /GoTo /D (page.23) >> ->> endobj -1424 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [269.32 561.521 281.275 572.465] -/Subtype /Link -/A << /S /GoTo /D (page.52) >> ->> endobj -1425 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [269.32 549.566 281.275 560.51] -/Subtype /Link -/A << /S /GoTo /D (page.72) >> ->> endobj -1426 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [269.32 525.655 281.275 536.669] -/Subtype /Link -/A << /S /GoTo /D (page.16) >> ->> endobj -1427 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [269.32 491.782 281.275 502.726] -/Subtype /Link -/A << /S /GoTo /D (page.67) >> ->> endobj -1428 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [269.32 479.827 281.275 490.771] -/Subtype /Link -/A << /S /GoTo /D (page.76) >> ->> endobj -1429 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [269.32 467.872 281.275 478.816] -/Subtype /Link -/A << /S /GoTo /D (page.57) >> ->> endobj -1430 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [254.376 455.917 266.331 466.931] -/Subtype /Link -/A << /S /GoTo /D (page.12) >> ->> endobj -1431 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [269.32 455.917 281.275 466.931] -/Subtype /Link -/A << /S /GoTo /D (page.33) >> ->> endobj -1432 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [269.32 443.962 281.275 454.906] -/Subtype /Link -/A << /S /GoTo /D (page.79) >> ->> endobj -1433 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [269.32 432.007 281.275 442.95] -/Subtype /Link -/A << /S /GoTo /D (page.78) >> ->> endobj -1434 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [269.32 420.051 281.275 430.995] -/Subtype /Link -/A << /S /GoTo /D (page.56) >> ->> endobj -1435 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [269.32 408.096 281.275 419.04] -/Subtype /Link -/A << /S /GoTo /D (page.72) >> ->> endobj -1436 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [269.32 396.141 281.275 407.085] -/Subtype /Link -/A << /S /GoTo /D (page.46) >> ->> endobj -1437 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [269.32 384.186 281.275 395.13] -/Subtype /Link -/A << /S /GoTo /D (page.25) >> ->> endobj -1438 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [274.301 372.231 281.275 383.175] -/Subtype /Link -/A << /S /GoTo /D (page.6) >> ->> endobj -1439 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [269.32 360.276 281.275 371.219] -/Subtype /Link -/A << /S /GoTo /D (page.33) >> ->> endobj -1440 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [269.32 350.338 281.275 359.264] -/Subtype /Link -/A << /S /GoTo /D (page.68) >> ->> endobj -1441 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [269.32 338.383 281.275 347.309] -/Subtype /Link -/A << /S /GoTo /D (page.68) >> ->> endobj -1442 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [269.32 324.41 281.275 335.354] -/Subtype /Link -/A << /S /GoTo /D (page.68) >> ->> endobj -1443 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [269.32 312.455 281.275 323.399] -/Subtype /Link -/A << /S /GoTo /D (page.68) >> ->> endobj -1444 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [269.32 302.517 281.275 311.444] -/Subtype /Link -/A << /S /GoTo /D (page.51) >> ->> endobj -1445 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [269.32 288.545 281.275 299.488] -/Subtype /Link -/A << /S /GoTo /D (page.52) >> ->> endobj -1446 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [269.32 278.527 281.275 287.533] -/Subtype /Link -/A << /S /GoTo /D (page.69) >> ->> endobj -1447 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [269.32 256.689 281.275 265.615] -/Subtype /Link -/A << /S /GoTo /D (page.54) >> ->> endobj -1448 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [269.32 244.734 281.275 253.66] -/Subtype /Link -/A << /S /GoTo /D (page.58) >> ->> endobj -1449 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [269.32 230.761 281.275 241.705] -/Subtype /Link -/A << /S /GoTo /D (page.59) >> ->> endobj -1450 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [269.32 220.824 281.275 229.75] -/Subtype /Link -/A << /S /GoTo /D (page.58) >> ->> endobj -1451 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [269.32 207.603 281.275 217.795] -/Subtype /Link -/A << /S /GoTo /D (page.67) >> ->> endobj -1452 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [269.32 186.911 281.275 195.877] -/Subtype /Link -/A << /S /GoTo /D (page.71) >> ->> endobj -1453 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [269.32 172.978 281.275 183.922] -/Subtype /Link -/A << /S /GoTo /D (page.42) >> ->> endobj -1454 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [269.32 163.04 281.275 171.967] -/Subtype /Link -/A << /S /GoTo /D (page.68) >> ->> endobj -1455 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [244.413 125.909 251.387 136.126] -/Subtype /Link -/A << /S /GoTo /D (page.9) >> ->> endobj -1456 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [254.376 125.909 266.331 136.126] -/Subtype /Link -/A << /S /GoTo /D (page.24) >> ->> endobj -1457 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [269.32 125.909 281.275 136.126] -/Subtype /Link -/A << /S /GoTo /D (page.51) >> ->> endobj -1458 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [458.61 667.125 470.565 678.069] -/Subtype /Link -/A << /S /GoTo /D (page.53) >> ->> endobj -1459 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [458.61 655.17 470.565 666.114] -/Subtype /Link -/A << /S /GoTo /D (page.32) >> ->> endobj -1460 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [458.61 643.215 470.565 654.158] -/Subtype /Link -/A << /S /GoTo /D (page.26) >> ->> endobj -1461 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [458.61 621.297 470.565 632.241] -/Subtype /Link -/A << /S /GoTo /D (page.81) >> ->> endobj -1462 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [433.704 610.094 440.678 620.285] -/Subtype /Link -/A << /S /GoTo /D (page.6) >> ->> endobj -1463 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [443.666 610.094 455.621 620.285] -/Subtype /Link -/A << /S /GoTo /D (page.12) >> ->> endobj -1464 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [458.61 610.094 470.565 620.285] -/Subtype /Link -/A << /S /GoTo /D (page.20) >> ->> endobj -1465 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [448.648 574.228 455.621 584.49] -/Subtype /Link -/A << /S /GoTo /D (page.6) >> ->> endobj -1466 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [458.61 574.228 470.565 584.49] -/Subtype /Link -/A << /S /GoTo /D (page.17) >> ->> endobj -1467 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [458.61 561.521 470.565 572.465] -/Subtype /Link -/A << /S /GoTo /D (page.13) >> ->> endobj -1468 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [443.666 539.703 455.621 550.617] -/Subtype /Link -/A << /S /GoTo /D (page.18) >> ->> endobj -1469 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [458.61 539.703 470.565 550.617] -/Subtype /Link -/A << /S /GoTo /D (page.82) >> ->> endobj -1470 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [458.61 527.648 470.565 538.592] -/Subtype /Link -/A << /S /GoTo /D (page.37) >> ->> endobj -1471 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [443.666 515.693 455.621 526.637] -/Subtype /Link -/A << /S /GoTo /D (page.53) >> ->> endobj -1472 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [458.61 515.693 470.565 526.637] -/Subtype /Link -/A << /S /GoTo /D (page.71) >> ->> endobj -1473 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [458.61 503.738 470.565 514.681] -/Subtype /Link -/A << /S /GoTo /D (page.84) >> ->> endobj -1474 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [458.61 491.782 470.565 502.796] -/Subtype /Link -/A << /S /GoTo /D (page.12) >> ->> endobj -1475 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [458.61 479.827 470.565 490.771] -/Subtype /Link -/A << /S /GoTo /D (page.26) >> ->> endobj -1476 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [458.61 467.872 470.565 478.816] -/Subtype /Link -/A << /S /GoTo /D (page.86) >> ->> endobj -1477 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [458.61 455.917 470.565 466.861] -/Subtype /Link -/A << /S /GoTo /D (page.27) >> ->> endobj -1478 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [458.61 443.962 470.565 454.906] -/Subtype /Link -/A << /S /GoTo /D (page.86) >> ->> endobj -1479 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [458.61 432.007 470.565 442.95] -/Subtype /Link -/A << /S /GoTo /D (page.14) >> ->> endobj -1480 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [458.61 420.051 470.565 430.995] -/Subtype /Link -/A << /S /GoTo /D (page.14) >> ->> endobj -1481 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [458.61 408.096 470.565 419.04] -/Subtype /Link -/A << /S /GoTo /D (page.26) >> ->> endobj -1482 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [458.61 396.141 470.565 407.085] -/Subtype /Link -/A << /S /GoTo /D (page.16) >> ->> endobj -1483 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [458.61 384.186 470.565 395.13] -/Subtype /Link -/A << /S /GoTo /D (page.41) >> ->> endobj -1484 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [463.592 372.231 470.565 383.175] -/Subtype /Link -/A << /S /GoTo /D (page.6) >> ->> endobj -1485 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [458.61 362.293 470.565 371.219] -/Subtype /Link -/A << /S /GoTo /D (page.28) >> ->> endobj -1486 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [458.61 348.32 470.565 359.264] -/Subtype /Link -/A << /S /GoTo /D (page.27) >> ->> endobj -1487 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [458.61 326.502 470.565 337.371] -/Subtype /Link -/A << /S /GoTo /D (page.57) >> ->> endobj -1488 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [458.61 316.425 470.565 325.416] -/Subtype /Link -/A << /S /GoTo /D (page.11) >> ->> endobj -1489 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [458.61 302.492 470.565 313.436] -/Subtype /Link -/A << /S /GoTo /D (page.47) >> ->> endobj -1490 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [443.666 291.289 455.621 301.551] -/Subtype /Link -/A << /S /GoTo /D (page.56) >> ->> endobj -1491 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [458.61 291.289 470.565 301.551] -/Subtype /Link -/A << /S /GoTo /D (page.60) >> ->> endobj -1492 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [458.61 278.582 470.565 289.526] -/Subtype /Link -/A << /S /GoTo /D (page.69) >> ->> endobj -1493 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [458.61 266.627 470.565 277.571] -/Subtype /Link -/A << /S /GoTo /D (page.51) >> ->> endobj -1494 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [458.61 244.709 470.565 255.653] -/Subtype /Link -/A << /S /GoTo /D (page.45) >> ->> endobj -1495 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [458.61 222.791 470.565 233.735] -/Subtype /Link -/A << /S /GoTo /D (page.56) >> ->> endobj -1496 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [458.61 212.774 470.565 221.78] -/Subtype /Link -/A << /S /GoTo /D (page.69) >> ->> endobj -1497 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [458.61 190.931 470.565 199.887] -/Subtype /Link -/A << /S /GoTo /D (page.25) >> ->> endobj -1498 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [458.61 176.963 470.565 187.907] -/Subtype /Link -/A << /S /GoTo /D (page.22) >> ->> endobj -1499 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [458.61 165.008 470.565 175.952] -/Subtype /Link -/A << /S /GoTo /D (page.22) >> ->> endobj -1500 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [458.61 155.07 470.565 163.996] -/Subtype /Link -/A << /S /GoTo /D (page.23) >> ->> endobj -1501 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [458.61 141.098 470.565 152.041] -/Subtype /Link -/A << /S /GoTo /D (page.28) >> ->> endobj -1502 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [458.61 119.18 470.565 130.123] -/Subtype /Link -/A << /S /GoTo /D (page.54) >> ->> endobj -1409 0 obj << -/D [1407 0 R /XYZ 125.858 740.998 null] ->> endobj -1410 0 obj << -/D [1407 0 R /XYZ 125.858 680.241 null] ->> endobj -1406 0 obj << -/Font << /F43 512 0 R /F34 502 0 R /F32 500 0 R >> -/ProcSet [ /PDF /Text ] ->> endobj -1505 0 obj << -/Length 2035 -/Filter /FlateDecode ->> -stream -x[KsFWRqL*J$Je+ɁEئ] 1]= 7=u#%x WKPZ&ZG?,1h77gd#-v6ǟ7?}= Fi ȌX|w3,ȄЏbrcf&[6UH8 -T&-ILJ9q=LʵqΗ]wxÃ998xXlL,{#&o$*lyzP!Xt5!r]A TRzrX%+[5T$.h7:OOTGϤXN9/Dxޤ>9>MU8/ 'zwYX#EHa0V|{_PcWza6"2,|5i2_e6BY]IRai>{5Ǹ4ci#E0kMOIQ2VxZGGb~h⁽k@:{;[́};er#||h %j3oF5yΚ8g-(@}kK6m.z~*c;O6Ƥvcb]СBLI -옐ySŜDv#z2Vs:ޤ]| zXh1M2J<ηEx(ϼ{ HAh z`"~ ! a8ڧ0$O -Im&0 ->v' -PJ) ʥM&~5QC15pZFB&E]֍ Ggwl"̦wM\Oy/#\w|,mϤU:ͥJqd.1uq.Մ<}d<3Y%dڝT-Z@r,͎о}B S[ - պX.-Ÿ6r͂@[xuR7W8gJqc6 -,o7#Kn)zqjWAʦMԇ=%Tn$tҾ~s2Mq G[H` - 6‘y3Q_MM/|McWգYDӝ)+%1zHwmr[oRE4F?gC zYCm.qo+BN: m|0&HlFendstream -endobj -1504 0 obj << -/Type /Page -/Contents 1505 0 R -/Resources 1503 0 R -/MediaBox [0 0 595.276 841.89] -/Parent 1391 0 R -/Annots [ 1507 0 R 1508 0 R 1509 0 R 1510 0 R 1511 0 R 1512 0 R 1513 0 R 1514 0 R 1515 0 R 1516 0 R 1517 0 R 1518 0 R 1519 0 R 1520 0 R 1521 0 R 1522 0 R 1523 0 R 1524 0 R 1525 0 R 1526 0 R 1527 0 R 1528 0 R 1529 0 R 1530 0 R 1531 0 R 1532 0 R 1533 0 R 1534 0 R 1535 0 R 1536 0 R 1537 0 R 1538 0 R 1539 0 R 1540 0 R 1541 0 R 1542 0 R 1543 0 R 1544 0 R 1545 0 R 1546 0 R 1547 0 R 1548 0 R 1549 0 R 1550 0 R 1551 0 R 1552 0 R 1553 0 R 1554 0 R 1555 0 R 1556 0 R 1557 0 R 1558 0 R 1559 0 R 1560 0 R 1561 0 R 1562 0 R 1563 0 R 1564 0 R 1565 0 R 1566 0 R 1567 0 R 1568 0 R 1569 0 R 1570 0 R 1571 0 R 1572 0 R 1573 0 R 1574 0 R 1575 0 R 1576 0 R 1577 0 R 1578 0 R 1579 0 R 1580 0 R 1581 0 R 1582 0 R 1583 0 R 1584 0 R 1585 0 R 1586 0 R 1587 0 R 1588 0 R 1589 0 R 1590 0 R 1591 0 R 1592 0 R 1593 0 R 1594 0 R 1595 0 R 1596 0 R 1597 0 R 1598 0 R ] ->> endobj -1507 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [259.357 702.976 266.331 713.92] -/Subtype /Link -/A << /S /GoTo /D (page.6) >> ->> endobj -1508 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [269.32 702.976 281.275 713.92] -/Subtype /Link -/A << /S /GoTo /D (page.18) >> ->> endobj -1509 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [254.376 691.021 266.331 701.964] -/Subtype /Link -/A << /S /GoTo /D (page.42) >> ->> endobj -1510 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [269.32 691.021 281.275 701.964] -/Subtype /Link -/A << /S /GoTo /D (page.70) >> ->> endobj -1511 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [269.32 657.148 281.275 668.091] -/Subtype /Link -/A << /S /GoTo /D (page.67) >> ->> endobj -1512 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [269.32 647.21 281.275 656.136] -/Subtype /Link -/A << /S /GoTo /D (page.66) >> ->> endobj -1513 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [269.32 633.237 281.275 644.181] -/Subtype /Link -/A << /S /GoTo /D (page.66) >> ->> endobj -1514 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [269.32 623.3 281.275 632.226] -/Subtype /Link -/A << /S /GoTo /D (page.64) >> ->> endobj -1515 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [269.32 609.327 281.275 620.271] -/Subtype /Link -/A << /S /GoTo /D (page.65) >> ->> endobj -1516 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [269.32 597.372 281.275 608.316] -/Subtype /Link -/A << /S /GoTo /D (page.65) >> ->> endobj -1517 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [269.32 585.417 281.275 596.36] -/Subtype /Link -/A << /S /GoTo /D (page.66) >> ->> endobj -1518 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [269.32 573.461 281.275 584.405] -/Subtype /Link -/A << /S /GoTo /D (page.62) >> ->> endobj -1519 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [269.32 561.506 281.275 572.45] -/Subtype /Link -/A << /S /GoTo /D (page.63) >> ->> endobj -1520 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [269.32 549.551 281.275 560.495] -/Subtype /Link -/A << /S /GoTo /D (page.63) >> ->> endobj -1521 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [269.32 537.596 281.275 548.54] -/Subtype /Link -/A << /S /GoTo /D (page.64) >> ->> endobj -1522 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [269.32 525.641 281.275 536.585] -/Subtype /Link -/A << /S /GoTo /D (page.55) >> ->> endobj -1523 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [269.32 513.686 281.275 524.699] -/Subtype /Link -/A << /S /GoTo /D (page.61) >> ->> endobj -1524 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [269.32 501.73 281.275 512.674] -/Subtype /Link -/A << /S /GoTo /D (page.60) >> ->> endobj -1525 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [269.32 491.713 281.275 500.719] -/Subtype /Link -/A << /S /GoTo /D (page.59) >> ->> endobj -1526 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [269.32 479.838 281.275 488.764] -/Subtype /Link -/A << /S /GoTo /D (page.62) >> ->> endobj -1527 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [269.32 465.865 281.275 476.809] -/Subtype /Link -/A << /S /GoTo /D (page.60) >> ->> endobj -1528 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [269.32 453.91 281.275 464.854] -/Subtype /Link -/A << /S /GoTo /D (page.60) >> ->> endobj -1529 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [229.47 432.744 236.443 443.006] -/Subtype /Link -/A << /S /GoTo /D (page.9) >> ->> endobj -1530 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [239.432 432.744 251.387 443.006] -/Subtype /Link -/A << /S /GoTo /D (page.10) >> ->> endobj -1531 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [254.376 432.744 266.331 443.006] -/Subtype /Link -/A << /S /GoTo /D (page.25) >> ->> endobj -1532 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [269.32 432.744 281.275 443.006] -/Subtype /Link -/A << /S /GoTo /D (page.27) >> ->> endobj -1533 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [259.357 420.136 266.331 431.05] -/Subtype /Link -/A << /S /GoTo /D (page.9) >> ->> endobj -1534 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [269.32 420.136 281.275 431.05] -/Subtype /Link -/A << /S /GoTo /D (page.18) >> ->> endobj -1535 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [254.376 408.082 266.331 419.025] -/Subtype /Link -/A << /S /GoTo /D (page.22) >> ->> endobj -1536 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [269.32 408.082 281.275 419.025] -/Subtype /Link -/A << /S /GoTo /D (page.42) >> ->> endobj -1537 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [269.32 398.169 281.275 407.07] -/Subtype /Link -/A << /S /GoTo /D (page.17) >> ->> endobj -1538 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [269.32 384.171 281.275 395.115] -/Subtype /Link -/A << /S /GoTo /D (page.85) >> ->> endobj -1539 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [269.32 374.234 281.275 383.16] -/Subtype /Link -/A << /S /GoTo /D (page.61) >> ->> endobj -1540 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [254.376 360.361 266.331 371.23] -/Subtype /Link -/A << /S /GoTo /D (page.27) >> ->> endobj -1541 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [269.32 360.361 281.275 371.23] -/Subtype /Link -/A << /S /GoTo /D (page.30) >> ->> endobj -1542 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [254.376 348.306 266.331 359.319] -/Subtype /Link -/A << /S /GoTo /D (page.16) >> ->> endobj -1543 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [269.32 348.306 281.275 359.319] -/Subtype /Link -/A << /S /GoTo /D (page.32) >> ->> endobj -1544 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [254.376 336.351 266.331 347.364] -/Subtype /Link -/A << /S /GoTo /D (page.30) >> ->> endobj -1545 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [269.32 336.351 281.275 347.364] -/Subtype /Link -/A << /S /GoTo /D (page.70) >> ->> endobj -1546 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [244.413 325.148 251.387 335.409] -/Subtype /Link -/A << /S /GoTo /D (page.6) >> ->> endobj -1547 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [254.376 325.148 266.331 335.409] -/Subtype /Link -/A << /S /GoTo /D (page.24) >> ->> endobj -1548 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [269.32 325.148 281.275 335.409] -/Subtype /Link -/A << /S /GoTo /D (page.55) >> ->> endobj -1549 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [269.32 313.192 281.275 323.384] -/Subtype /Link -/A << /S /GoTo /D (page.63) >> ->> endobj -1550 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [254.376 277.327 266.331 287.519] -/Subtype /Link -/A << /S /GoTo /D (page.55) >> ->> endobj -1551 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [269.32 277.327 281.275 287.519] -/Subtype /Link -/A << /S /GoTo /D (page.60) >> ->> endobj -1552 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [269.32 264.62 281.275 275.563] -/Subtype /Link -/A << /S /GoTo /D (page.80) >> ->> endobj -1553 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [269.32 252.664 281.275 263.608] -/Subtype /Link -/A << /S /GoTo /D (page.45) >> ->> endobj -1554 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [269.32 240.709 281.275 251.653] -/Subtype /Link -/A << /S /GoTo /D (page.20) >> ->> endobj -1555 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [274.301 218.791 281.275 229.735] -/Subtype /Link -/A << /S /GoTo /D (page.6) >> ->> endobj -1556 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [269.32 208.879 281.275 217.78] -/Subtype /Link -/A << /S /GoTo /D (page.24) >> ->> endobj -1557 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [269.32 194.881 281.275 205.825] -/Subtype /Link -/A << /S /GoTo /D (page.31) >> ->> endobj -1558 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [269.32 182.926 281.275 193.895] -/Subtype /Link -/A << /S /GoTo /D (page.31) >> ->> endobj -1559 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [224.488 161.008 236.443 172.022] -/Subtype /Link -/A << /S /GoTo /D (page.19) >> ->> endobj -1560 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [239.432 161.008 251.387 172.022] -/Subtype /Link -/A << /S /GoTo /D (page.72) >> ->> endobj -1561 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [254.376 161.008 266.331 172.022] -/Subtype /Link -/A << /S /GoTo /D (page.77) >> ->> endobj -1562 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [269.32 161.008 281.275 172.022] -/Subtype /Link -/A << /S /GoTo /D (page.79) >> ->> endobj -1563 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [254.376 151.07 266.331 159.997] -/Subtype /Link -/A << /S /GoTo /D (page.72) >> ->> endobj -1564 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [269.32 151.07 281.275 159.997] -/Subtype /Link -/A << /S /GoTo /D (page.82) >> ->> endobj -1565 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [269.32 137.098 281.275 148.042] -/Subtype /Link -/A << /S /GoTo /D (page.72) >> ->> endobj -1566 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [269.32 127.16 281.275 136.156] -/Subtype /Link -/A << /S /GoTo /D (page.16) >> ->> endobj -1567 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [458.61 704.993 470.565 713.92] -/Subtype /Link -/A << /S /GoTo /D (page.62) >> ->> endobj -1568 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [458.61 691.021 470.565 701.964] -/Subtype /Link -/A << /S /GoTo /D (page.57) >> ->> endobj -1569 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [458.61 679.065 470.565 690.009] -/Subtype /Link -/A << /S /GoTo /D (page.54) >> ->> endobj -1570 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [458.61 657.148 470.565 668.091] -/Subtype /Link -/A << /S /GoTo /D (page.55) >> ->> endobj -1571 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [458.61 635.23 470.565 646.174] -/Subtype /Link -/A << /S /GoTo /D (page.42) >> ->> endobj -1572 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [458.61 615.29 470.565 624.256] -/Subtype /Link -/A << /S /GoTo /D (page.70) >> ->> endobj -1573 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [458.61 601.456 470.565 612.37] -/Subtype /Link -/A << /S /GoTo /D (page.69) >> ->> endobj -1574 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [448.648 589.501 455.621 600.415] -/Subtype /Link -/A << /S /GoTo /D (page.8) >> ->> endobj -1575 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [458.61 589.501 470.565 600.415] -/Subtype /Link -/A << /S /GoTo /D (page.51) >> ->> endobj -1576 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [428.722 577.546 440.678 588.46] -/Subtype /Link -/A << /S /GoTo /D (page.11) >> ->> endobj -1577 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [443.666 577.546 455.621 588.46] -/Subtype /Link -/A << /S /GoTo /D (page.69) >> ->> endobj -1578 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [458.61 577.546 470.565 588.46] -/Subtype /Link -/A << /S /GoTo /D (page.85) >> ->> endobj -1579 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [448.648 565.591 455.621 576.505] -/Subtype /Link -/A << /S /GoTo /D (page.8) >> ->> endobj -1580 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [458.61 565.591 470.565 576.505] -/Subtype /Link -/A << /S /GoTo /D (page.30) >> ->> endobj -1581 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [458.61 553.636 470.565 564.55] -/Subtype /Link -/A << /S /GoTo /D (page.69) >> ->> endobj -1582 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [433.704 541.681 440.678 552.595] -/Subtype /Link -/A << /S /GoTo /D (page.8) >> ->> endobj -1583 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [443.666 541.681 455.621 552.595] -/Subtype /Link -/A << /S /GoTo /D (page.30) >> ->> endobj -1584 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [458.61 541.681 470.565 552.595] -/Subtype /Link -/A << /S /GoTo /D (page.31) >> ->> endobj -1585 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [433.704 529.725 440.678 540.639] -/Subtype /Link -/A << /S /GoTo /D (page.8) >> ->> endobj -1586 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [443.666 529.725 455.621 540.639] -/Subtype /Link -/A << /S /GoTo /D (page.30) >> ->> endobj -1587 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [458.61 529.725 470.565 540.639] -/Subtype /Link -/A << /S /GoTo /D (page.31) >> ->> endobj -1588 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [458.61 517.77 470.565 528.614] -/Subtype /Link -/A << /S /GoTo /D (page.11) >> ->> endobj -1589 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [443.666 505.815 455.621 516.659] -/Subtype /Link -/A << /S /GoTo /D (page.30) >> ->> endobj -1590 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [458.61 505.815 470.565 516.659] -/Subtype /Link -/A << /S /GoTo /D (page.42) >> ->> endobj -1591 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [458.61 493.86 470.565 504.774] -/Subtype /Link -/A << /S /GoTo /D (page.69) >> ->> endobj -1592 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [443.666 481.905 455.621 492.774] -/Subtype /Link -/A << /S /GoTo /D (page.30) >> ->> endobj -1593 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [458.61 481.905 470.565 492.774] -/Subtype /Link -/A << /S /GoTo /D (page.42) >> ->> endobj -1594 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [428.722 469.95 440.678 480.864] -/Subtype /Link -/A << /S /GoTo /D (page.10) >> ->> endobj -1595 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [443.666 469.95 455.621 480.864] -/Subtype /Link -/A << /S /GoTo /D (page.68) >> ->> endobj -1596 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [458.61 469.95 470.565 480.864] -/Subtype /Link -/A << /S /GoTo /D (page.85) >> ->> endobj -1597 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [448.648 457.994 455.621 468.908] -/Subtype /Link -/A << /S /GoTo /D (page.9) >> ->> endobj -1598 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [458.61 457.994 470.565 468.908] -/Subtype /Link -/A << /S /GoTo /D (page.22) >> ->> endobj -1506 0 obj << -/D [1504 0 R /XYZ 125.858 740.998 null] ->> endobj -1503 0 obj << -/Font << /F42 510 0 R /F32 500 0 R /F43 512 0 R /F34 502 0 R /F56 730 0 R >> -/ProcSet [ /PDF /Text ] ->> endobj -1389 0 obj << -/Length1 773 -/Length2 889 -/Length3 532 -/Length 1450 -/Filter /FlateDecode ->> -stream -xiPG ,\DCT'1C&)"D3rSp )a05lb $E$8`Yn I14TL& -xÃNfmk'.E)PO/ F<.0b'!$Zh|>;`hKfT&`qn={8hs5L}ꂃ6>8C)`#uj1w+JjN4vtgflY3ȼG-zX.th˟ѡ1Hi) GJMvyuB; -ďj6prIqYQFُԙ8Wy`O`O";~?rQI!b2pHUb $;)/7M{:4EG}F6Tk-(:_VZ3ko`PX{nsͼmiuOE( ltsY[ָViW(/ʎQy]HM~WNjNf8auDt᳇O)#¶7m1IJO+UQªz2%ϯL[P ̾o:ԳmahqWtY%:|wk\j8XЍ*{\+kTƸd)]ig,eu<$E x_8{N렪3UX ;M!ƍ{"uja/8&V q0l%+/;z^FsF, G^ֱ[ۺng;CK -6SDolx0۲uhft-Z|$#dՒE.Z%W  -~=|/=|fVðgߩ-_f/b K+0f3Odendstream -endobj -1390 0 obj << -/Type /Font -/Subtype /Type1 -/Encoding 1599 0 R -/FirstChar 122 -/LastChar 122 -/Widths 1600 0 R -/BaseFont /YEQPDS+CMSY8 -/FontDescriptor 1388 0 R ->> endobj -1388 0 obj << -/Ascent 750 -/CapHeight 683 -/Descent -194 -/FontName /YEQPDS+CMSY8 -/ItalicAngle -14 -/StemV 89 -/XHeight 431 -/FontBBox [-30 -955 1185 779] -/Flags 4 -/CharSet (/daggerdbl) -/FontFile 1389 0 R ->> endobj -1600 0 obj -[472 ] -endobj -1599 0 obj << -/Type /Encoding -/Differences [ 0 /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/daggerdbl/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef] ->> endobj -1330 0 obj << -/Length1 786 -/Length2 1209 -/Length3 532 -/Length 1784 -/Filter /FlateDecode ->> -stream -xR}ޕ~Sw -1f1x2,3:s8fd!&ljDITJT^j] -ՍVQlt{?y_s|{y??К'·8&fҙWL:B0$Cp2O li:på -s7&I`Bd1B(ą,SE`Dq0& lb3뇏qEr'*&HS4iH"C@)6~89 &7L-$'3 IT;KrL_\xޚ/,B䒅,_E0`CH'0!4aLۜ;6(dd6tI6璘<0!.B0:DB b$&@0ү e@F q2L;BX6KͣAWW;35L7R*ߤuT@!RV]hy{GoKP4>bI$k}dI2DN)^U23l:ݣWohOi(kRm&Vg0XehM 24ڪjtEY =#$c7+[T,1uZ^pɐ᳨wiË5'-_uͨ^ -:3 VIZueZK3A]eYJQoDio<5i+Ʒ?v^|U)Ǥ%`NcѪB !uRR*nӻ;J;W49#x q1NUz<˱xO#.S4GCSRL"KJmRu>]U=2"QM 7Yo~Sry/mr ^4L5=έ5ufXrkLnTK!خe3BD©U. +']u}[4GAǰ%5Rq&WHǕ?}АRfq\7{Nl-[_tJR~}cWz-ooiOb,(fMk̈́/YD ;oR:_&3MTT(ۤjɆ·!؋M'ēwTv?|(0Dp DsK.endstream -endobj -1331 0 obj << -/Type /Font -/Subtype /Type1 -/Encoding 1601 0 R -/FirstChar 40 -/LastChar 41 -/Widths 1602 0 R -/BaseFont /AHEEDI+CMR9 -/FontDescriptor 1329 0 R ->> endobj -1329 0 obj << -/Ascent 694 -/CapHeight 683 -/Descent -194 -/FontName /AHEEDI+CMR9 -/ItalicAngle 0 -/StemV 74 -/XHeight 431 -/FontBBox [-39 -250 1036 750] -/Flags 4 -/CharSet (/parenleft/parenright) -/FontFile 1330 0 R ->> endobj -1602 0 obj -[400 400 ] -endobj -1601 0 obj << -/Type /Encoding -/Differences [ 0 /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/parenleft/parenright/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef] ->> endobj -1603 0 obj << -/Type /Encoding -/Differences [ 0 /.notdef/dotaccent/fi/fl/fraction/hungarumlaut/Lslash/lslash/ogonek/ring/.notdef/breve/minus/.notdef/Zcaron/zcaron/caron/dotlessi/dotlessj/ff/ffi/ffl/notequal/infinity/lessequal/greaterequal/partialdiff/summation/product/pi/grave/quotesingle/space/exclam/quotedbl/numbersign/dollar/percent/ampersand/quoteright/parenleft/parenright/asterisk/plus/comma/hyphen/period/slash/zero/one/two/three/four/five/six/seven/eight/nine/colon/semicolon/less/equal/greater/question/at/A/B/C/D/E/F/G/H/I/J/K/L/M/N/O/P/Q/R/S/T/U/V/W/X/Y/Z/bracketleft/backslash/bracketright/asciicircum/underscore/quoteleft/a/b/c/d/e/f/g/h/i/j/k/l/m/n/o/p/q/r/s/t/u/v/w/x/y/z/braceleft/bar/braceright/asciitilde/.notdef/Euro/integral/quotesinglbase/florin/quotedblbase/ellipsis/dagger/daggerdbl/circumflex/perthousand/Scaron/guilsinglleft/OE/Omega/radical/approxequal/.notdef/.notdef/.notdef/quotedblleft/quotedblright/bullet/endash/emdash/tilde/trademark/scaron/guilsinglright/oe/Delta/lozenge/Ydieresis/.notdef/exclamdown/cent/sterling/currency/yen/brokenbar/section/dieresis/copyright/ordfeminine/guillemotleft/logicalnot/hyphen/registered/macron/degree/plusminus/twosuperior/threesuperior/acute/mu/paragraph/periodcentered/cedilla/onesuperior/ordmasculine/guillemotright/onequarter/onehalf/threequarters/questiondown/Agrave/Aacute/Acircumflex/Atilde/Adieresis/Aring/AE/Ccedilla/Egrave/Eacute/Ecircumflex/Edieresis/Igrave/Iacute/Icircumflex/Idieresis/Eth/Ntilde/Ograve/Oacute/Ocircumflex/Otilde/Odieresis/multiply/Oslash/Ugrave/Uacute/Ucircumflex/Udieresis/Yacute/Thorn/germandbls/agrave/aacute/acircumflex/atilde/adieresis/aring/ae/ccedilla/egrave/eacute/ecircumflex/edieresis/igrave/iacute/icircumflex/idieresis/eth/ntilde/ograve/oacute/ocircumflex/otilde/odieresis/divide/oslash/ugrave/uacute/ucircumflex/udieresis/yacute/thorn/ydieresis] ->> endobj -1135 0 obj << -/Type /Font -/Subtype /Type1 -/Encoding 1603 0 R -/BaseFont /Courier-BoldOblique ->> endobj -1121 0 obj << -/Length1 773 -/Length2 1212 -/Length3 532 -/Length 1786 -/Filter /FlateDecode ->> -stream -xR{<_9ig)9[q Qڌwf^fw.0#dUܖɥmm$m"֪E"sľt:s}}>?Ӎ+ (~;Z.)}Ey}Eu?-)'wYo8YEލ9%͎6*9H6Eq$ak։;7ƭ[=q|кMg o[3LUZG7S>%v3ՊgwF>a;C-L6SNvk3l(t%~6lˏę~P__zZƌ~ggnWrO6X(+~"IP[u:50/$M> endobj -1120 0 obj << -/Ascent 694 -/CapHeight 683 -/Descent -194 -/FontName /NXMXSU+CMR6 -/ItalicAngle 0 -/StemV 83 -/XHeight 431 -/FontBBox [-20 -250 1193 750] -/Flags 4 -/CharSet (/one/two) -/FontFile 1121 0 R ->> endobj -1605 0 obj -[611 611 ] -endobj -1604 0 obj << -/Type /Encoding -/Differences [ 0 /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/one/two/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef] ->> endobj -1118 0 obj << -/Length1 825 -/Length2 2210 -/Length3 532 -/Length 2810 -/Filter /FlateDecode ->> -stream -xRy<E)!"Yz7KXB&`좉QٚETBB",I\Րdm([*dK{{{|yRwvӷ"33q8 XB-,0h -LLP -mD"-`7̢:w+ȢtGi -1HlXQld@l2! -b#?d.*d՘: $Adb -7bjK:h?@P!`И\p 2Ȣ*fÁd -+aFPs -{%$;S8À?W kA}9 l{~^*L9L)^Ű?"%85BacY6tLH@` -D0B'A$lh@gp[A1a?qhch#C?'!_ \x 7HA( аz)G @B%,Hub]`Ht`">StJ51 -0^T`l3Ve;6%%{r]'{!9txsa+f)yn1"siY13+&z4g8yJbE^>}"d@t滋TpHq[FՇrJo:^KLrpk̗$:AmXfnl;7S ԋG2ZjKZfu#̷zdSCճR5[7K*ͬK 2k:|/SwsB%9w\j;U& kK\>W7*.x㛦܌]ƆDgt<ѿl Sɽ.l y]Ol%70bUL܍\~Z fFXə/ՂuGODž^zh0pqꥎ - yaI؝=KyC;iwn.rVJ7ν:۱`HliƇ^N1-]Zj_vR=p>w2RcG]#2P -Y߂M'=eZ&zOnI9"m╦T^VCo)5Dib)X+z:ﻟiCLb —|ݲzWfTx"IҲʡݎk _WȤ5ӟ_տaK[IuVL99Z7akuX-N!Μ2B{TO,))lTեq|2}%hؕ{yMOzK":9_׮,_Q9~6G1,d_vyeGs>{{\b"K(Bw5bSH˫9gᐠqUB YQr79xe9>Zmsf$P|1[yb1?fmiU >9/>Y5@inxie!U>aӄѾ5{Hɦ!dtO$T=עoKgH+Tv/[Tt+ps&=D g.^t -Ϧ-X -I~ b݆؜"翇+M̨=85r.sR$pC+#Ϻ(>ְpBtikGh73^3g+ʴ&ϟObcuJOXd oXc9O*+YKL`{Z>2r+܉My+5|0zarfِ -gF!ƛnJWI4j۲%uG֣'j]i<1-\)jy[o 3 u2)tdDEз ~swGܘvN<[[: sڵxQ )˺y!kt r3"aw+s8EG ,%kKd_h+,.^7ogeu/QH|=RVm(%}ۭXITą ⅺuQ5Z^WZ/tmN/LzfGӟ2ګtŝ|}`~ă#C.Qn/hUD=x@oK1Uޕ l=;DL -@s4+ʏ %шdu+{nCxEйnEhGJg B¤q߹i*m;f>"&$}喧V~ۆ ;ik-FDLf=4Wt!iz*K {%OzDUꬫGVȣLZ1 _Kv|1y8w 2CziD -IuLNʮV8|nܮ&TzHii5hpeb&ãg.;ZzJ"Ӧggfˤo։c{:*^M, 8ÔŸXٝ\vݴT A2k&~Sx|ѧ4|PޓbwH) '(A6n I-FeU/򬩽V\$WS ;G {y`C/Ͼc''1 -9oy{|&&\B?>RH-Rc+SsfQD y$Sx:4Vǚ>Ōt!V3[dR۸ߠ -X -Aendstream -endobj -1119 0 obj << -/Type /Font -/Subtype /Type1 -/Encoding 1606 0 R -/FirstChar 78 -/LastChar 118 -/Widths 1607 0 R -/BaseFont /JGIRWH+CMMI9 -/FontDescriptor 1117 0 R ->> endobj -1117 0 obj << -/Ascent 694 -/CapHeight 683 -/Descent -194 -/FontName /JGIRWH+CMMI9 -/ItalicAngle -14 -/StemV 74 -/XHeight 431 -/FontBBox [-29 -250 1075 750] -/Flags 4 -/CharSet (/N/S/X/p/v) -/FontFile 1118 0 R ->> endobj -1607 0 obj -[822 0 0 0 0 628 0 0 0 0 849 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 516 0 0 0 0 0 499 ] -endobj -1606 0 obj << -/Type /Encoding -/Differences [ 0 /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/N/.notdef/.notdef/.notdef/.notdef/S/.notdef/.notdef/.notdef/.notdef/X/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/p/.notdef/.notdef/.notdef/.notdef/.notdef/v/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef] ->> endobj -1070 0 obj << -/Length1 773 -/Length2 1203 -/Length3 532 -/Length 1774 -/Filter /FlateDecode ->> -stream -xRiXSWQ#j"&$DJ4*l!ɽn AAi AjTde֢"** -. E ӧ̯y?=-y":D}iEQdՕx2\ήt2` x Rvs$)D0>,\B0I@H$H  \ `4燍ĢC'NJDI)7iy("<(gAL@0AA"A"d!5`b.`''C Nbcx #H[hmނSPVvkη90m&[t;Ic<,D$D|}jQ ` 8R>8;I IpND-IsIqP+c*8a)<󝼼PudI$2Q?8Q 7Z HspMX$l~>XO$p.u~(Igi/]b}o.|M[¦˔z#KF,RfV&+"31XHr2aJɬQuju75|8zvӶ'?YjmO;!w1쯫:[K,ɡdZזֹp"6>slěK/ǟU'(ѳiC#zts' ;p-'aӛ~;q(Q Ľ,;U@*v{5| -OYVܾÒ*jۉ - Æ&Q.F 5 rS,?9?5V5"1y׎#u!Dx6nRo}{<4y-ЛKg2)1쳼_tT.y*/zȄZʼP`wFʰpԐx]QޘQhG.fDV_v֨ken"?J* l.lؖ&=͕vn<0gݖqUl -^M'WԯWq |C//|w4e^rݲ"٣!tҁ#9ٮqъLe6ZO/+wn凋C.mҲDEXnT~YzkN/j>+'s_}_6vV%hQ@[KlłfK [g['EkOWOŬdTx:Sj[X[{(iϖǂ6۝A]¹7U&2zuS&Lx2iҩ5+3]$iB|8-ٍzSQ۞K'E/Z+h9j1vаfL+oXQz> endobj -1069 0 obj << -/Ascent 694 -/CapHeight 683 -/Descent -194 -/FontName /SQMLIV+CMR7 -/ItalicAngle 0 -/StemV 79 -/XHeight 431 -/FontBBox [-27 -250 1122 750] -/Flags 4 -/CharSet (/one/two) -/FontFile 1070 0 R ->> endobj -1609 0 obj -[569 569 ] -endobj -1608 0 obj << -/Type /Encoding -/Differences [ 0 /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/one/two/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef] ->> endobj -1059 0 obj << -/Length1 953 -/Length2 1888 -/Length3 532 -/Length 2546 -/Filter /FlateDecode ->> -stream -xVk<eB%!yJdfq]mŘygy1 -T*6d.j+RIl2nesWTr+ Ow=WOȚ 0[W/?  ==[HbCL؎XshMX4ol<D e{VLkȂ$p%CADdd5xVD`$Ȋ)HP 2i@*rLL@VH/I0a:Tʍ)7DoHk.'1 :ca,IYT8WqY'6a0H4" .HqPJGk8SKٷ&gkiqk; ޼p@^1cK, h4F(z?}fX< X$BtAb\0-*DT& V4b@0'r]"CgC0 @!WWLEdCvQp -ф +}קD8)$ dQBkݷarc)ACLLqx"8G_b?a@v~@ }LYRX %W7[n<[}DzhW^ UjT9*L6;ȺqdXzee|W/^be/#'XtķR&lKnQ0قJCn!rKiaH - =ƬtO Eo?8;~\='*''3F4h4w4&55\v BZ .(8cժ?&&ueBR;>h~9 :T2~5nS(ZVڭU"ʩ\Pzj2ҸpCLFG`" aY"7M ~:'6vmR!(Ip_RLffUUpǠ{)9QšoG+.%9Y(\yM %y>FȻW} Ī@7 a*Qu5߆ZGWŻxt1cĘxO>2>{Y.CQ;磖[Vml\ˬ7Fd8tԕ085W0e$qW|uZ;j*̳[̭$yC!vZ׋m+(GҠm'Ÿd?{Hk(wugʈOxmlG"!S>5.{Dh[k*E{>־My6]SAVΝM }/ɍ:tt"Dt*n?RbDߏMߟr7}xD·%a WDi=_vTdW;pȫU|eYykq|e+6NZ2#~q%QfB<%wt$?|unI+ Y짪ƝS&v`ƶMmn~,)L^ -&^9sc,֝lpCiItkR/wM}EV,o\?xBv-JN13<ɯSR"z-BT_/]n(#o똨Ձ7SӂM+M.iayQfazv|2 +JGOV6xT٧Y h2_.œ2&MO_A]fꌌPܖ˽w}8阗:3e8XFC,J / -…(t[H&WT~o/=έ߼_tc}:WSz/=FbtP|!ϋkU^­D^ -|K(/ϟVvVIuAJ' ۤ7qVPKv喺A拭sq^mƇmuV_#@לKMSsQ޶3?ܐz{7_@Qٺ?6q!Gͫ7];B/j\zedi2i9D8VqS>8 3Tjj/O/ 5ե,/&ቄQk4v׶/:#8ח5*yW> endobj -1058 0 obj << -/Ascent 750 -/CapHeight 683 -/Descent -194 -/FontName /NYEXAR+CMSY10 -/ItalicAngle -14 -/StemV 85 -/XHeight 431 -/FontBBox [-29 -960 1116 775] -/Flags 4 -/CharSet (/minus/multiply/circlecopyrt/ceilingleft/ceilingright/braceleft/braceright/bar/daggerdbl) -/FontFile 1059 0 R ->> endobj -1611 0 obj -[778 0 778 0 0 0 0 0 0 0 0 0 0 1000 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 444 444 500 500 0 0 278 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 444 ] -endobj -1610 0 obj << -/Type /Encoding -/Differences [ 0 /minus/.notdef/multiply/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/circlecopyrt/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/ceilingleft/ceilingright/braceleft/braceright/.notdef/.notdef/bar/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/daggerdbl/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef] ->> endobj -1056 0 obj << -/Length1 957 -/Length2 3407 -/Length3 532 -/Length 4077 -/Filter /FlateDecode ->> -stream -xRy<OF#t62zs.'1=Z^(UH}Z9,} -0%eI$"@"%  -`phO5 IZ Oh(uHJ?蟌"D4v#fb545D &cjɃdoBJ`|P>o ԩ:?Q]PԲ@ jW^ah=Eے~N>a7 uh4 -4>GG{VduoH;_hX:-vtNU><üObkŀJwZy_&~|Ӏ9[Q[G6h^NUd]*}ZޅIaN{߇*؋q15 -–yqS~YS/B=e&;od8lʉjR|/}rAkNi{aWEp" o-{Q\@>}UAxS٦V[}1edʼnGMk[߳) =Ə8u${,y19y}6nF_w[> -T?cڿu\WؑUfI5JQHIr.iWreF MYnLY٘!sn6dSəXc<ӞL+ߪ#۝[ȕawmoȻqb#ۼyp)Y"?3$rD͉ CFɅOBxkfZO~Y<>U .q)O@v}![Ⱦ㋟U:kgG|Y0fm/jT]Ҹ=&~]i sP{kV<|ď)ʛļ=`aZZ&{/F - T'Y9Zý⣨4iؗ9Tl -T-v**$=!t +4$)DQږqcH1lQut$ Cjv2 qu]t1)̢^kE#iq=ZGs9Gh0rݣYZAix]cPKRm0*S[ TWM*2otnȐ5Xxn|L =" 탹ȽOz$nXl=x3f}nOvU2qګalF~Żv]5wwX6V^CViԓ"^0GDfLKRѓ<+-[rk}8Ȯl,c/= IE,f,zF|G>-^υKx_ ѵȮN ~?rK (8=`uU"gic fթko2ep%}cGu=bӱ3 -96nA7eB2z<9tʦWCS=BZk[llNqwT)j( 1XIN$-0|'of߁r1Xcz 9_XZmQb2=aypvPw%|KRW],Vpӑ] I5<ZC"A1"~!Ҷ[#Gp6~mo9զ/WRޯꏳS+Ojz$Kd6Rr := -|V 2.ÞX}]G}-5.F`>ch rboI -V -TnTF#dbXfq*?%➨(O1CiS9bTƈzu ^(l5Mk(I%'8pW}9`;W[}3fN:\팾sSOϔt^r#be"":<&Bnؖ]5 f9 P MƩk`2S9ӍZ}0Y.>'_yS(ֳyE蔙^#R}^\IIf%)\`Zd)mUNA+ >zW%. (~=Coѵ S5Wciœ8A'xF)~ջ1BE"LE˓=vs -d Jy[n.$ؾi8A51Y {?Ah;{yȥ,d+[vZhʫx -%Y?*(Vh+W+·kÈnVJe&M5[K.(s{G\/3Hfw.M;Y9]E)p3d ۽7M<&a9~XJggW2IdSU{RcCVM_%k7+6Td2UgnFGj\ 5RT:K@zu oIHYj'9NXR!P'W9XUka_!#6[•QQ|9ccg}7Op0}߬`7ǹ@E,gD ǏU-9h4f,f|Tqm.MKV_%́pV;Zcy/s -}<Bko<-R:`{qc#[ {/*|iWf - 㐫,е dS49dn-s\1븗>Mt樑zzmN_`u65+8ެNgپ_ Ն}lE~K3j$Uðҫ0U |.pMPt:Z}˲xn<#m* r&euI}!ܯfptN++?齢'?E#$x_%endstream -endobj -1057 0 obj << -/Type /Font -/Subtype /Type1 -/Encoding 1612 0 R -/FirstChar 19 -/LastChar 111 -/Widths 1613 0 R -/BaseFont /IKIAIW+CMR10 -/FontDescriptor 1055 0 R ->> endobj -1055 0 obj << -/Ascent 694 -/CapHeight 683 -/Descent -194 -/FontName /IKIAIW+CMR10 -/ItalicAngle 0 -/StemV 69 -/XHeight 431 -/FontBBox [-251 -250 1009 969] -/Flags 4 -/CharSet (/acute/parenleft/parenright/one/two/three/four/five/six/g/l/o) -/FontFile 1056 0 R ->> endobj -1613 0 obj -[500 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 389 389 0 0 0 0 0 0 0 500 500 500 500 500 500 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 500 0 0 0 0 278 0 0 500 ] -endobj -1612 0 obj << -/Type /Encoding -/Differences [ 0 /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/acute/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/parenleft/parenright/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/one/two/three/four/five/six/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/g/.notdef/.notdef/.notdef/.notdef/l/.notdef/.notdef/o/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef] ->> endobj -791 0 obj << -/Length1 1034 -/Length2 4746 -/Length3 532 -/Length 5461 -/Filter /FlateDecode ->> -stream -xTg<\NID7C-zK2̌!w!Ѣ5j;9͹x{ϳz^kɮ/ oU($.P()'"ch JB | InIH9Eagy~%H-8D5N>b=y'' -.b@AR!!a@;˓: quW ĸMܿmx6h`ڒB@ [Wqur҆#H?3HgW,6 Tc@+Qu, a-s!A?x -E`[ Q6wo]]SU]wP@a yY R&tJ/Ʊꃰts}2'7 w,g"Z[{c 0ϐu2} b7'`ef";qZĈhQ a5Cdj6_uCW9 v9-Tg2{WVךD[Jhՠ{=.C"EO%ohLrbߌJfZH1Z(C#ŀKۅךe<>tu_J1 :k =$.%HTm -]57tfaJnM]^N=e[X8SW-oQbš+0) !»y^߷DXJ}_`rVL9 Wu%Vn3@Ow!$]Kߔia|C!*po -)n=t=:' -$"Su_GYhGźlSiN9I}:{2E&#:uMʂ~.]C5ygxDZMBU l}wmˇ$E|UwHƞzM~ƚQZG<*{(ĸ!6@h{T`bFy :(>l~݈6;bͭK-Cz)g?6r^okM+5X"OyfiYGdVur.CY%ߛ5=Q}m+D>̽~;7oX"ۑu Lp2Cٕ,>ysL9*+Vj,Zap -%SHMס}}읍m,2.Ѩn*QD&7yfd7R#<y` ue:| n䪗!K5Dp&E2-"BYyfPǾгe*k#?'#5sJ B8/^MPw8K{*Z,b+z#mwݚvs)6W#ixZJt˞'Wb>Q4W+y->򒈱6=[_p -T#?<- }y3cMJ꣬ RjBPUMcz -§*5Ů(p;ˤúU>fK*U)|LXSQD쇗Q8b%.FɅO_uq7SrQ*xuM~rm` A?9Tt6k?g8Wgr`ʚ/YIC^qc(*#EG$1n]澢#=H \"9^{HKEӘ[iWUY`sFPx0kAo7)EV3pz#|܅d3˗z ˯k8 L.:/2e͂|}oql[zh~5 \[ q޷(i[߳]$RH,xvݒ19չ~LҊSZ=k г/z0=34<\.ӻ/?mY:ݐni~x6:ϡ=+2ip6bsP1tGqӅWF|i9tA ꊎwV#) Ώ"(`oN 靺&|?).Sxe8FөrD6ר&5t([t bigvQt)cdI&?7Q]Y{{cDZ7u|z #$xIm,'Dzա̎ky!YZ)+Q׼|#x@O hlƤЭ^!:]^,V9m[~UEFG'pu=\Cύ":^pp.!EM<8H$z=.p7&i’ΠY-&B-"_3I46<נtiCO+>kd5 -VUdz K4OZW0Qު+Mͫfւ__a5{M[*Q Z_]r36˄V%7\p3 kӕ @9~iHX+;̫wk؟ϨѸ7ϩM(gT!dVc Yghsb Lר oS1һM@{ug6O}Ϳ3K}a7@@b`hP u Y꛳;p%=-VODr+x?-JGx-Aʵ!zErqV&`@ ǘ3W9_MOas{=]3{m ir]l1Iӛ\.'3JG'"awN|nכJ>/ :7^Ob#VATV[b9}w=u0scY~e^&6n$! =QIMh}(l.}u#)Y/zIy/ʃHg= pPM!PImސlY]C<ŁKTC5S3zϰ6|bF21nJdoϔ27%b$U~|ʠ犿&s+mu |PiT2 pD-F@+}-'SԵνH|/y$g:k -ݘwjxDT}+^ۑy=稵zZ_[3r]NCkq)U^|5YXYK9uN\p툈p7E:_݉.4hy:\^+:ɱ^|j݄f dU4f=م0TqYaOh2OuUN=.3*zOj2X~4!o,Ob2ҔfP7iAOgnqTFjQI#|NzsIr; r)2P}p򔃰ĖD9F$g`i 4zW{ \nbcw`ԅ[q0"N E#G 5endstream -endobj -792 0 obj << -/Type /Font -/Subtype /Type1 -/Encoding 1614 0 R -/FirstChar 15 -/LastChar 118 -/Widths 1615 0 R -/BaseFont /PPYBGP+CMMI10 -/FontDescriptor 790 0 R ->> endobj -790 0 obj << -/Ascent 694 -/CapHeight 683 -/Descent -194 -/FontName /PPYBGP+CMMI10 -/ItalicAngle -14 -/StemV 72 -/XHeight 431 -/FontBBox [-32 -250 1048 750] -/Flags 4 -/CharSet (/epsilon1/iota/period/greater/E/M/N/R/S/U/X/a/b/d/h/n/p/v) -/FontFile 791 0 R ->> endobj -1615 0 obj -[406 0 0 0 354 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 278 0 0 0 778 0 0 0 0 0 0 738 0 0 0 0 0 0 0 970 803 0 0 0 759 613 0 683 0 0 828 0 0 0 0 0 0 0 0 529 429 0 520 0 0 0 576 0 0 0 0 0 600 0 503 0 0 0 0 0 485 ] -endobj -1614 0 obj << -/Type /Encoding -/Differences [ 0 /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/epsilon1/.notdef/.notdef/.notdef/iota/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/period/.notdef/.notdef/.notdef/greater/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/E/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/M/N/.notdef/.notdef/.notdef/R/S/.notdef/U/.notdef/.notdef/X/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/a/b/.notdef/d/.notdef/.notdef/.notdef/h/.notdef/.notdef/.notdef/.notdef/.notdef/n/.notdef/p/.notdef/.notdef/.notdef/.notdef/.notdef/v/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef] ->> endobj -750 0 obj << -/Length1 797 -/Length2 912 -/Length3 532 -/Length 1485 -/Filter /FlateDecode ->> -stream -xRiTW)AA#L 4AD8yc&38 KEQRUK(ZŅV!jz:|߽\rQQ!B"*Dx..~,8gcLyH}bx=KjroR/I -:Ȓ8F[ -uF @  `Ll$<s@5$RjHDb;( FShr0Z$yPx4:7L HPL+0#)[O B@B-dn 0崆"~L S $9|)PcTChŘ^QE!sSÔIs }56fĒ) "j$׻g8C%^cYLCRb `ѰHH3q 0&cjE@b1RPboocxG__&%27@QO/ J 'FD $x1, im{WIc@Sm\U+D7m5?u,m+I"$En⎊6ګc񩛬٣...ٹ7jC䴰%F*g{ -s,\4)ahq7zWMV#'˛k >9 Qlx+MS^t"2nĕNӡx6Eg[<Ԑx`kL7CYU<F9{ªcGC>N@=uaQɱɶ&u#l_}pe{I-)GEþvYp#5lwYǝ2Dfr`c?<[:Q5/Q&~EA2M1=1mjbqW5 <:!r}y\:Nlj s~Q `V C_?!Sc9FZ_@Lendstream -endobj -751 0 obj << -/Type /Font -/Subtype /Type1 -/Encoding 1616 0 R -/FirstChar 102 -/LastChar 103 -/Widths 1617 0 R -/BaseFont /ZTYMHJ+CMSY9 -/FontDescriptor 749 0 R ->> endobj -749 0 obj << -/Ascent 750 -/CapHeight 683 -/Descent -194 -/FontName /ZTYMHJ+CMSY9 -/ItalicAngle -14 -/StemV 87 -/XHeight 431 -/FontBBox [-30 -958 1146 777] -/Flags 4 -/CharSet (/braceleft/braceright) -/FontFile 750 0 R ->> endobj -1617 0 obj -[514 514 ] -endobj -1616 0 obj << -/Type /Encoding -/Differences [ 0 /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/braceleft/braceright/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef] ->> endobj -730 0 obj << -/Type /Font -/Subtype /Type1 -/Encoding 1603 0 R -/BaseFont /Courier ->> endobj -642 0 obj << -/Type /Font -/Subtype /Type1 -/Encoding 1603 0 R -/BaseFont /Times-BoldItalic ->> endobj -512 0 obj << -/Type /Font -/Subtype /Type1 -/Encoding 1603 0 R -/BaseFont /Times-Bold ->> endobj -509 0 obj << -/Length1 1663 -/Length2 11205 -/Length3 532 -/Length 12101 -/Filter /FlateDecode ->> -stream -xweTZ%wkwBp%݃{pwd73_tS{WծSk5*P։`ac RQcP9>b@C' ;[qC' /@hXY,<<<1;{wG 3s'& Z0rwG$@hmgouTN@5.*'#641H:~x-r@[`j054`- @7c_.z=  m>zd5v6+ ;}ܰ})ف@ƎNV%qt27tdؙ~43v}0^'C [ `b6tw; gf@p:XA쿺u `Z2"~p;}pY"05+2v&s: f# C;[kw I@2 "MzВ -6ώ|,C[ǞZ4ֆK)_okI&d[ix9Z$-܀&JNSC돦mW5:Z[?f[[?.ɿ0)Jj)AcY8 Q '5w{ 4L?Raeߐ gyC'G 73#33_q/0v&Ma h+3?\ΎSʿ~@aiΘ/25#ͩ -'g`L\r ؾV-?ϯ®75l2n}uGvw ۚ3xЛ;mn7I9X3|Vn+'1eV6G{?2)51Xmu`U?);/wc)\)# yFc -Ɗ\j?~Q%7߶ tïjy:ѽ+4sbj¬t(]`+~MI':,+Eg!j$ifܙ>Ѐ'a -tuۦ# %0Ů5>}w> ;ǖ1>EΗ*>feD-4"ZL.1#GIdVŷ 6qI -pO˅ !>3b7RgugcHAhkOQam5eϗsA 7ל#ys,CB]fW}I}QNm #ͣQkWJNȉ(O< , *T)8G-4sN>1<[5)RSo5ս$ߜq?o#K\0,-J@ ZTLG=3J֩HEΨ=Vcִ0ٓ3HZ?Ւ*ǓW9?E]iNI^*yuY Fle^^|%nS_2)oWX5h9( Zajem6ax- yat~ЎV^EJAa"!E(LA$g_AV^Ac_)V&?B?_!o:֟} -`S0) -RYauLr\=6"oqBİ!V2?IBJ O"u-_"WP\4#J=sYZKztOmшy}-Lvet5 E;q^]>ͬA61`{AƆ<m>]ʺ& 80W."WT!nkl};`Cj -ޕnbaäJZ Ԧȋ1lD<ݭlj>p|KV[v/e|=ǗQ=ᤇ_Dݮȯ_}+F$*SyIBT7$6}wk+aye`/}E$6/%5 -QĞה!J5KRa)9yawGz#C/ N:&<&!ʮ-촩ks@, pֵTiچǵ\.X#Ğ;!3/SSGwa#h<4(#4S6w.N-'dV]LU}_AiU5mbK1 V38'b,j`zjAQՉ{ 7|$eC,5O?I5Aq DEmf*;aY8s쯹xćt=xCOO75g\jE lcLx dhѠqMÛ>-_6S%MBFVY~X{r+ ShS~Djbq~If${qnGMz:"3X~ )p<*>A̙ve}ea|Lv%)ˇ]UHH0(z#lFo"|67,T.maD[j oSHgBDXزSABt/<@=+(#TG0S Ll"&Kxzɋ@VA4++YuT܎yό. >-oB[DK}ʹ̿;[W ^?`:en2uzzI)Q=ߏ*yY8<I:|DS]*qBfmMs -iyIk׶Ln럙Bb,n _Y2#JrƃCn<@g BD,j95iW2DEHy?*~"(Y[L֣5I_)9 8C<:rA4T^?bی!8׹Dv5^z=)u@!lzg ?4iDJoRz+ѱ47TtIY4R{%p7Sk1EQJIJ @cHtvj$i+# -YPQZP,UTOݽw`5 / 232ub5vaPtP(w [t>O3#ly7Ov~1[PDC 3nɐx8bVGF 4cÊNn80E.S6(`ə˥`DmjS#v$.^«oGclYМPDտH)3fI5@p7. Ȳpe=>r -HE\΂6\>U-A~۞P ҢgtcWpL L ] /3YI,;ae`.2E@J 7Nu3gO9bE`E~l/MIF=܉d-7 -P5r>%3 B0Qћ5P$T`FbeF)AHuakMs/V5]WB8DneMApIL=3$$8=br*1=Ű'Z+{FCtRv8*q$1~1HaVRx0 W\WV|h7X:醝?hU;2?ZU;Ugv(LAM7ugAk(ah$a=\Uo?&bMU2\ԎrhSPFa D54o(ztO䱺n8!ˈ'0[X>ټbYE^ A|y5LkRWFZ]]9Z .ZL!~PtYW5w Zu{Ir^n{ ķЯ6:uPɡEui,ZP̵j }VU,tJ?}Br -oȄ+?wX1`fb1K˽1e4NG* zz?0?hC ӔQeF癶9wFcL't}%хf=D$@D:xĻPBI=Q+ʙZvV 2Hf-Oϯ=8/>'ؗ A`0oß+-%uD]\g)}Hnot -R{T'*#3w2嗜E4Pލl9+gX3cb2gO>9ʮIyG 6f*]!*1?&ah{{ٳo_u|!(a q8sy 2kDL3+,ROy)0XBlU+`_~ 5I~_1қhpNb_mr~R%P- fWXR#F.+5h+ &F$сݛb3E9ؾѬk[,ϥ2G3*n ֞9Z>oXᐚi;"Xk|҂-iE095T/7:v;=CL-J`93@F#>.H z]'vz%CU08"%syq3Ɉ)ѤY9bTRzЩgLhj}*{Rrj^>nS[Mce0-_ҩ}.ew?5RoSq9}ky%/ۚylW 5Gţ`^^Qr /#נ>fI#^F59%NM\4#h g}ޚ䦊BBY o6MW%V1avbw xrk !w#,zV+ S._rٞl_xczLд^V cuSM; LPydq6*m^kPNr/Kp3Xsfw'x8 S)vy>t%ty5{i15sqacX ?E/?3`ތ[IA g4BM;?~h`F>̉ -dc4{(]_lR&m -La">*)^a踀8=M[=c٧&X$M,yzKmQ͡ZGt>lz.7݂ocCm_^r$wKh -ŭk7']s?ؖ%yʅzۮ6׳yx5P}\~2_ˏ"Ֆn\kh pq`=¹J5$U1)$Mm^?l|rGE+%J< x qhyPVPgj6#ʌ}Gi MB崘i8KH:9~[MHDbgIӴ@ ?J8S}I5}Sb.;SM̂8h+7ԍAwVPTR9d4'IЎΌƏ7= nIz 9IFRy5~RY:Ӝ)1;~Ee.ot-Rxu UEX+qx&֤LJs fiu@-d5VtRRB4OOxVvO)[N'OyL8p5Z.uB1+-ɢT 1QBH E21g[A*h u\ )ƃr&*)֨ij`K6Ǧ͊yPeL,RwPNCj̽coDR(TxlʖK hdv;iDSzXiDB+F43֬# -']3o.7o>qLޜ{ }s1ZFJ//͓;[6ɩxv!ǺYUs -u*qP!DOF/|c׽8> &VVAVh1{Z? -47pUݘ܋cRH 8ZmOrXVej U̹]]xϸXj<卮r .dp -FSO@+s+6.*Bv~~xkH`/Y*<g:u[3#r\ΩJrܝ\09ZXZliҽJ-Ia >O}\mOa&PvFݰAB*4aPN-3?ќgab/ OGcwEb1Gհ^k7-!z^QМkȳA QRJrLa E2KovEج [h -~m4jގ5pY%| 1dY.$ޫ㨐/1)$˨ŇH9cb|m$~UP^{V:]]c2`P&g;IC.ϊCv{3ݛꌽK+!ߢ}AI ` Լ.A%6 ɢ0ᛵJ֭&'ۮr;7Im˞=$Lf١RxxGCWQ309iň W9GjCɔ 'qJ5ĢY4FEWNP{0|AڣϧO|R+;b^;sV;lcl,`p8ٗðX_PJX^7"29ʺ:g#hؘQ:KݹRl)ϔ;J^<%|Y|{jԫ7[?8T9T2uS~/Ef VAY#W1`0` 23 ZM)Z%W{"K(N -DB>ꝶgV:,D'w pr|>r֢kr\2-x'&TF;Key+3m&W0L?ϦK ي8WFkQϳm?n|P85iSHTlr*J{2;,Ԑe/3=-vz5$#IIEU0LK"XOgՒn/'foJ4ro{'#Htk]ŋ -Q=-!׹O[^l~nuS^xM"F )evyo bpπartXBl[jnN\5|Vc^X!9M+ A^;TŎr 8fmqU‰4Cc"u߆ER7Ѭ͓7xdrl|!Hj݃xׁPAo+ xo)[WIv|Z\hψIJ %&~&SA7(fdNȥj8ob^+Kbض &5._t|O(nCCnGgGkK{b4 FR;ao=)e s -4t3p pC =gG*v2kAfNdf4Ј՛x`/C:kBfWiDn\mY~2yX2*d!/> A{N"Y2EKg=w%\C/YeTSe5 -g1wendstream -endobj -510 0 obj << -/Type /Font -/Subtype /Type1 -/Encoding 1603 0 R -/FirstChar 48 -/LastChar 89 -/Widths 1618 0 R -/BaseFont /OFJXTO+NimbusRomNo9L-Regu-Slant_167 -/FontDescriptor 508 0 R ->> endobj -508 0 obj << -/Ascent 678 -/CapHeight 651 -/Descent -216 -/FontName /OFJXTO+NimbusRomNo9L-Regu-Slant_167 -/ItalicAngle -9 -/StemV 85 -/XHeight 450 -/FontBBox [-168 -281 1000 924] -/Flags 4 -/CharSet (/zero/one/two/three/four/five/six/seven/eight/nine/colon/A/B/C/D/E/F/G/H/I/K/L/M/N/O/P/R/S/T/U/V/W/X/Y) -/FontFile 509 0 R ->> endobj -1618 0 obj -[500 500 500 500 500 500 500 500 500 500 278 0 0 0 0 0 0 722 667 667 722 611 556 722 722 333 0 722 611 889 722 722 556 0 667 556 611 722 722 944 722 722 ] -endobj -502 0 obj << -/Type /Font -/Subtype /Type1 -/Encoding 1603 0 R -/BaseFont /Times-Italic ->> endobj -500 0 obj << -/Type /Font -/Subtype /Type1 -/Encoding 1603 0 R -/BaseFont /Times-Roman ->> endobj -503 0 obj << -/Type /Pages -/Count 6 -/Parent 1619 0 R -/Kids [494 0 R 505 0 R 556 0 R 603 0 R 647 0 R 726 0 R] ->> endobj -741 0 obj << -/Type /Pages -/Count 6 -/Parent 1619 0 R -/Kids [735 0 R 743 0 R 757 0 R 778 0 R 787 0 R 800 0 R] ->> endobj -821 0 obj << -/Type /Pages -/Count 6 -/Parent 1619 0 R -/Kids [810 0 R 823 0 R 837 0 R 855 0 R 879 0 R 884 0 R] ->> endobj -898 0 obj << -/Type /Pages -/Count 6 -/Parent 1619 0 R -/Kids [890 0 R 908 0 R 918 0 R 968 0 R 978 0 R 987 0 R] ->> endobj -1001 0 obj << -/Type /Pages -/Count 6 -/Parent 1619 0 R -/Kids [994 0 R 1003 0 R 1010 0 R 1014 0 R 1022 0 R 1032 0 R] ->> endobj -1042 0 obj << -/Type /Pages -/Count 6 -/Parent 1619 0 R -/Kids [1037 0 R 1044 0 R 1051 0 R 1065 0 R 1081 0 R 1087 0 R] ->> endobj -1095 0 obj << -/Type /Pages -/Count 6 -/Parent 1620 0 R -/Kids [1091 0 R 1097 0 R 1101 0 R 1105 0 R 1109 0 R 1113 0 R] ->> endobj -1127 0 obj << -/Type /Pages -/Count 6 -/Parent 1620 0 R -/Kids [1124 0 R 1129 0 R 1139 0 R 1145 0 R 1150 0 R 1154 0 R] ->> endobj -1165 0 obj << -/Type /Pages -/Count 6 -/Parent 1620 0 R -/Kids [1159 0 R 1167 0 R 1173 0 R 1179 0 R 1183 0 R 1190 0 R] ->> endobj -1197 0 obj << -/Type /Pages -/Count 6 -/Parent 1620 0 R -/Kids [1194 0 R 1199 0 R 1206 0 R 1212 0 R 1216 0 R 1222 0 R] ->> endobj -1234 0 obj << -/Type /Pages -/Count 6 -/Parent 1620 0 R -/Kids [1228 0 R 1236 0 R 1240 0 R 1244 0 R 1250 0 R 1254 0 R] ->> endobj -1265 0 obj << -/Type /Pages -/Count 6 -/Parent 1620 0 R -/Kids [1258 0 R 1267 0 R 1271 0 R 1275 0 R 1279 0 R 1284 0 R] ->> endobj -1302 0 obj << -/Type /Pages -/Count 6 -/Parent 1621 0 R -/Kids [1291 0 R 1304 0 R 1318 0 R 1325 0 R 1333 0 R 1343 0 R] ->> endobj -1353 0 obj << -/Type /Pages -/Count 6 -/Parent 1621 0 R -/Kids [1347 0 R 1355 0 R 1362 0 R 1368 0 R 1375 0 R 1379 0 R] ->> endobj -1391 0 obj << -/Type /Pages -/Count 6 -/Parent 1621 0 R -/Kids [1385 0 R 1393 0 R 1397 0 R 1402 0 R 1407 0 R 1504 0 R] ->> endobj -1619 0 obj << -/Type /Pages -/Count 36 -/Parent 1622 0 R -/Kids [503 0 R 741 0 R 821 0 R 898 0 R 1001 0 R 1042 0 R] ->> endobj -1620 0 obj << -/Type /Pages -/Count 36 -/Parent 1622 0 R -/Kids [1095 0 R 1127 0 R 1165 0 R 1197 0 R 1234 0 R 1265 0 R] ->> endobj -1621 0 obj << -/Type /Pages -/Count 18 -/Parent 1622 0 R -/Kids [1302 0 R 1353 0 R 1391 0 R] ->> endobj -1622 0 obj << -/Type /Pages -/Count 90 -/Kids [1619 0 R 1620 0 R 1621 0 R] ->> endobj -1623 0 obj << -/Type /Outlines -/First 7 0 R -/Last 463 0 R -/Count 4 ->> endobj -491 0 obj << -/Title 492 0 R -/A 489 0 R -/Parent 463 0 R -/Prev 479 0 R ->> endobj -487 0 obj << -/Title 488 0 R -/A 485 0 R -/Parent 479 0 R -/Prev 483 0 R ->> endobj -483 0 obj << -/Title 484 0 R -/A 481 0 R -/Parent 479 0 R -/Next 487 0 R ->> endobj -479 0 obj << -/Title 480 0 R -/A 477 0 R -/Parent 463 0 R -/Prev 467 0 R -/Next 491 0 R -/First 483 0 R -/Last 487 0 R -/Count -2 ->> endobj -475 0 obj << -/Title 476 0 R -/A 473 0 R -/Parent 467 0 R -/Prev 471 0 R ->> endobj -471 0 obj << -/Title 472 0 R -/A 469 0 R -/Parent 467 0 R -/Next 475 0 R ->> endobj -467 0 obj << -/Title 468 0 R -/A 465 0 R -/Parent 463 0 R -/Next 479 0 R -/First 471 0 R -/Last 475 0 R -/Count -2 ->> endobj -463 0 obj << -/Title 464 0 R -/A 461 0 R -/Parent 1623 0 R -/Prev 411 0 R -/First 467 0 R -/Last 491 0 R -/Count -3 ->> endobj -459 0 obj << -/Title 460 0 R -/A 457 0 R -/Parent 451 0 R -/Prev 455 0 R ->> endobj -455 0 obj << -/Title 456 0 R -/A 453 0 R -/Parent 451 0 R -/Next 459 0 R ->> endobj -451 0 obj << -/Title 452 0 R -/A 449 0 R -/Parent 411 0 R -/Prev 427 0 R -/First 455 0 R -/Last 459 0 R -/Count -2 ->> endobj -447 0 obj << -/Title 448 0 R -/A 445 0 R -/Parent 427 0 R -/Prev 443 0 R ->> endobj -443 0 obj << -/Title 444 0 R -/A 441 0 R -/Parent 427 0 R -/Prev 439 0 R -/Next 447 0 R ->> endobj -439 0 obj << -/Title 440 0 R -/A 437 0 R -/Parent 427 0 R -/Prev 435 0 R -/Next 443 0 R ->> endobj -435 0 obj << -/Title 436 0 R -/A 433 0 R -/Parent 427 0 R -/Prev 431 0 R -/Next 439 0 R ->> endobj -431 0 obj << -/Title 432 0 R -/A 429 0 R -/Parent 427 0 R -/Next 435 0 R ->> endobj -427 0 obj << -/Title 428 0 R -/A 425 0 R -/Parent 411 0 R -/Prev 415 0 R -/Next 451 0 R -/First 431 0 R -/Last 447 0 R -/Count -5 ->> endobj -423 0 obj << -/Title 424 0 R -/A 421 0 R -/Parent 415 0 R -/Prev 419 0 R ->> endobj -419 0 obj << -/Title 420 0 R -/A 417 0 R -/Parent 415 0 R -/Next 423 0 R ->> endobj -415 0 obj << -/Title 416 0 R -/A 413 0 R -/Parent 411 0 R -/Next 427 0 R -/First 419 0 R -/Last 423 0 R -/Count -2 ->> endobj -411 0 obj << -/Title 412 0 R -/A 409 0 R -/Parent 1623 0 R -/Prev 195 0 R -/Next 463 0 R -/First 415 0 R -/Last 451 0 R -/Count -3 ->> endobj -407 0 obj << -/Title 408 0 R -/A 405 0 R -/Parent 403 0 R ->> endobj -403 0 obj << -/Title 404 0 R -/A 401 0 R -/Parent 343 0 R -/Prev 399 0 R -/First 407 0 R -/Last 407 0 R -/Count -1 ->> endobj -399 0 obj << -/Title 400 0 R -/A 397 0 R -/Parent 343 0 R -/Prev 387 0 R -/Next 403 0 R ->> endobj -395 0 obj << -/Title 396 0 R -/A 393 0 R -/Parent 387 0 R -/Prev 391 0 R ->> endobj -391 0 obj << -/Title 392 0 R -/A 389 0 R -/Parent 387 0 R -/Next 395 0 R ->> endobj -387 0 obj << -/Title 388 0 R -/A 385 0 R -/Parent 343 0 R -/Prev 371 0 R -/Next 399 0 R -/First 391 0 R -/Last 395 0 R -/Count -2 ->> endobj -383 0 obj << -/Title 384 0 R -/A 381 0 R -/Parent 371 0 R -/Prev 379 0 R ->> endobj -379 0 obj << -/Title 380 0 R -/A 377 0 R -/Parent 371 0 R -/Prev 375 0 R -/Next 383 0 R ->> endobj -375 0 obj << -/Title 376 0 R -/A 373 0 R -/Parent 371 0 R -/Next 379 0 R ->> endobj -371 0 obj << -/Title 372 0 R -/A 369 0 R -/Parent 343 0 R -/Prev 347 0 R -/Next 387 0 R -/First 375 0 R -/Last 383 0 R -/Count -3 ->> endobj -367 0 obj << -/Title 368 0 R -/A 365 0 R -/Parent 347 0 R -/Prev 363 0 R ->> endobj -363 0 obj << -/Title 364 0 R -/A 361 0 R -/Parent 347 0 R -/Prev 359 0 R -/Next 367 0 R ->> endobj -359 0 obj << -/Title 360 0 R -/A 357 0 R -/Parent 347 0 R -/Prev 355 0 R -/Next 363 0 R ->> endobj -355 0 obj << -/Title 356 0 R -/A 353 0 R -/Parent 347 0 R -/Prev 351 0 R -/Next 359 0 R ->> endobj -351 0 obj << -/Title 352 0 R -/A 349 0 R -/Parent 347 0 R -/Next 355 0 R ->> endobj -347 0 obj << -/Title 348 0 R -/A 345 0 R -/Parent 343 0 R -/Next 371 0 R -/First 351 0 R -/Last 367 0 R -/Count -5 ->> endobj -343 0 obj << -/Title 344 0 R -/A 341 0 R -/Parent 195 0 R -/Prev 287 0 R -/First 347 0 R -/Last 403 0 R -/Count -5 ->> endobj -339 0 obj << -/Title 340 0 R -/A 337 0 R -/Parent 307 0 R -/Prev 335 0 R ->> endobj -335 0 obj << -/Title 336 0 R -/A 333 0 R -/Parent 307 0 R -/Prev 331 0 R -/Next 339 0 R ->> endobj -331 0 obj << -/Title 332 0 R -/A 329 0 R -/Parent 307 0 R -/Prev 327 0 R -/Next 335 0 R ->> endobj -327 0 obj << -/Title 328 0 R -/A 325 0 R -/Parent 307 0 R -/Prev 323 0 R -/Next 331 0 R ->> endobj -323 0 obj << -/Title 324 0 R -/A 321 0 R -/Parent 307 0 R -/Prev 319 0 R -/Next 327 0 R ->> endobj -319 0 obj << -/Title 320 0 R -/A 317 0 R -/Parent 307 0 R -/Prev 315 0 R -/Next 323 0 R ->> endobj -315 0 obj << -/Title 316 0 R -/A 313 0 R -/Parent 307 0 R -/Prev 311 0 R -/Next 319 0 R ->> endobj -311 0 obj << -/Title 312 0 R -/A 309 0 R -/Parent 307 0 R -/Next 315 0 R ->> endobj -307 0 obj << -/Title 308 0 R -/A 305 0 R -/Parent 287 0 R -/Prev 291 0 R -/First 311 0 R -/Last 339 0 R -/Count -8 ->> endobj -303 0 obj << -/Title 304 0 R -/A 301 0 R -/Parent 291 0 R -/Prev 299 0 R ->> endobj -299 0 obj << -/Title 300 0 R -/A 297 0 R -/Parent 291 0 R -/Prev 295 0 R -/Next 303 0 R ->> endobj -295 0 obj << -/Title 296 0 R -/A 293 0 R -/Parent 291 0 R -/Next 299 0 R ->> endobj -291 0 obj << -/Title 292 0 R -/A 289 0 R -/Parent 287 0 R -/Next 307 0 R -/First 295 0 R -/Last 303 0 R -/Count -3 ->> endobj -287 0 obj << -/Title 288 0 R -/A 285 0 R -/Parent 195 0 R -/Prev 199 0 R -/Next 343 0 R -/First 291 0 R -/Last 307 0 R -/Count -2 ->> endobj -283 0 obj << -/Title 284 0 R -/A 281 0 R -/Parent 199 0 R -/Prev 259 0 R ->> endobj -279 0 obj << -/Title 280 0 R -/A 277 0 R -/Parent 259 0 R -/Prev 275 0 R ->> endobj -275 0 obj << -/Title 276 0 R -/A 273 0 R -/Parent 259 0 R -/Prev 271 0 R -/Next 279 0 R ->> endobj -271 0 obj << -/Title 272 0 R -/A 269 0 R -/Parent 259 0 R -/Prev 267 0 R -/Next 275 0 R ->> endobj -267 0 obj << -/Title 268 0 R -/A 265 0 R -/Parent 259 0 R -/Prev 263 0 R -/Next 271 0 R ->> endobj -263 0 obj << -/Title 264 0 R -/A 261 0 R -/Parent 259 0 R -/Next 267 0 R ->> endobj -259 0 obj << -/Title 260 0 R -/A 257 0 R -/Parent 199 0 R -/Prev 219 0 R -/Next 283 0 R -/First 263 0 R -/Last 279 0 R -/Count -5 ->> endobj -255 0 obj << -/Title 256 0 R -/A 253 0 R -/Parent 219 0 R -/Prev 251 0 R ->> endobj -251 0 obj << -/Title 252 0 R -/A 249 0 R -/Parent 219 0 R -/Prev 247 0 R -/Next 255 0 R ->> endobj -247 0 obj << -/Title 248 0 R -/A 245 0 R -/Parent 219 0 R -/Prev 243 0 R -/Next 251 0 R ->> endobj -243 0 obj << -/Title 244 0 R -/A 241 0 R -/Parent 219 0 R -/Prev 239 0 R -/Next 247 0 R ->> endobj -239 0 obj << -/Title 240 0 R -/A 237 0 R -/Parent 219 0 R -/Prev 235 0 R -/Next 243 0 R ->> endobj -235 0 obj << -/Title 236 0 R -/A 233 0 R -/Parent 219 0 R -/Prev 231 0 R -/Next 239 0 R ->> endobj -231 0 obj << -/Title 232 0 R -/A 229 0 R -/Parent 219 0 R -/Prev 227 0 R -/Next 235 0 R ->> endobj -227 0 obj << -/Title 228 0 R -/A 225 0 R -/Parent 219 0 R -/Prev 223 0 R -/Next 231 0 R ->> endobj -223 0 obj << -/Title 224 0 R -/A 221 0 R -/Parent 219 0 R -/Next 227 0 R ->> endobj -219 0 obj << -/Title 220 0 R -/A 217 0 R -/Parent 199 0 R -/Prev 215 0 R -/Next 259 0 R -/First 223 0 R -/Last 255 0 R -/Count -9 ->> endobj -215 0 obj << -/Title 216 0 R -/A 213 0 R -/Parent 199 0 R -/Prev 203 0 R -/Next 219 0 R ->> endobj -211 0 obj << -/Title 212 0 R -/A 209 0 R -/Parent 203 0 R -/Prev 207 0 R ->> endobj -207 0 obj << -/Title 208 0 R -/A 205 0 R -/Parent 203 0 R -/Next 211 0 R ->> endobj -203 0 obj << -/Title 204 0 R -/A 201 0 R -/Parent 199 0 R -/Next 215 0 R -/First 207 0 R -/Last 211 0 R -/Count -2 ->> endobj -199 0 obj << -/Title 200 0 R -/A 197 0 R -/Parent 195 0 R -/Next 287 0 R -/First 203 0 R -/Last 283 0 R -/Count -5 ->> endobj -195 0 obj << -/Title 196 0 R -/A 193 0 R -/Parent 1623 0 R -/Prev 7 0 R -/Next 411 0 R -/First 199 0 R -/Last 343 0 R -/Count -3 ->> endobj -191 0 obj << -/Title 192 0 R -/A 189 0 R -/Parent 151 0 R -/Prev 187 0 R ->> endobj -187 0 obj << -/Title 188 0 R -/A 185 0 R -/Parent 151 0 R -/Prev 183 0 R -/Next 191 0 R ->> endobj -183 0 obj << -/Title 184 0 R -/A 181 0 R -/Parent 151 0 R -/Prev 179 0 R -/Next 187 0 R ->> endobj -179 0 obj << -/Title 180 0 R -/A 177 0 R -/Parent 151 0 R -/Prev 175 0 R -/Next 183 0 R ->> endobj -175 0 obj << -/Title 176 0 R -/A 173 0 R -/Parent 151 0 R -/Prev 155 0 R -/Next 179 0 R ->> endobj -171 0 obj << -/Title 172 0 R -/A 169 0 R -/Parent 155 0 R -/Prev 167 0 R ->> endobj -167 0 obj << -/Title 168 0 R -/A 165 0 R -/Parent 155 0 R -/Prev 163 0 R -/Next 171 0 R ->> endobj -163 0 obj << -/Title 164 0 R -/A 161 0 R -/Parent 155 0 R -/Prev 159 0 R -/Next 167 0 R ->> endobj -159 0 obj << -/Title 160 0 R -/A 157 0 R -/Parent 155 0 R -/Next 163 0 R ->> endobj -155 0 obj << -/Title 156 0 R -/A 153 0 R -/Parent 151 0 R -/Next 175 0 R -/First 159 0 R -/Last 171 0 R -/Count -4 ->> endobj -151 0 obj << -/Title 152 0 R -/A 149 0 R -/Parent 7 0 R -/Prev 127 0 R -/First 155 0 R -/Last 191 0 R -/Count -6 ->> endobj -147 0 obj << -/Title 148 0 R -/A 145 0 R -/Parent 127 0 R -/Prev 143 0 R ->> endobj -143 0 obj << -/Title 144 0 R -/A 141 0 R -/Parent 127 0 R -/Prev 139 0 R -/Next 147 0 R ->> endobj -139 0 obj << -/Title 140 0 R -/A 137 0 R -/Parent 127 0 R -/Prev 135 0 R -/Next 143 0 R ->> endobj -135 0 obj << -/Title 136 0 R -/A 133 0 R -/Parent 127 0 R -/Prev 131 0 R -/Next 139 0 R ->> endobj -131 0 obj << -/Title 132 0 R -/A 129 0 R -/Parent 127 0 R -/Next 135 0 R ->> endobj -127 0 obj << -/Title 128 0 R -/A 125 0 R -/Parent 7 0 R -/Prev 115 0 R -/Next 151 0 R -/First 131 0 R -/Last 147 0 R -/Count -5 ->> endobj -123 0 obj << -/Title 124 0 R -/A 121 0 R -/Parent 115 0 R -/Prev 119 0 R ->> endobj -119 0 obj << -/Title 120 0 R -/A 117 0 R -/Parent 115 0 R -/Next 123 0 R ->> endobj -115 0 obj << -/Title 116 0 R -/A 113 0 R -/Parent 7 0 R -/Prev 79 0 R -/Next 127 0 R -/First 119 0 R -/Last 123 0 R -/Count -2 ->> endobj -111 0 obj << -/Title 112 0 R -/A 109 0 R -/Parent 79 0 R -/Prev 107 0 R ->> endobj -107 0 obj << -/Title 108 0 R -/A 105 0 R -/Parent 79 0 R -/Prev 95 0 R -/Next 111 0 R ->> endobj -103 0 obj << -/Title 104 0 R -/A 101 0 R -/Parent 95 0 R -/Prev 99 0 R ->> endobj -99 0 obj << -/Title 100 0 R -/A 97 0 R -/Parent 95 0 R -/Next 103 0 R ->> endobj -95 0 obj << -/Title 96 0 R -/A 93 0 R -/Parent 79 0 R -/Prev 91 0 R -/Next 107 0 R -/First 99 0 R -/Last 103 0 R -/Count -2 ->> endobj -91 0 obj << -/Title 92 0 R -/A 89 0 R -/Parent 79 0 R -/Prev 87 0 R -/Next 95 0 R ->> endobj -87 0 obj << -/Title 88 0 R -/A 85 0 R -/Parent 79 0 R -/Prev 83 0 R -/Next 91 0 R ->> endobj -83 0 obj << -/Title 84 0 R -/A 81 0 R -/Parent 79 0 R -/Next 87 0 R ->> endobj -79 0 obj << -/Title 80 0 R -/A 77 0 R -/Parent 7 0 R -/Prev 35 0 R -/Next 115 0 R -/First 83 0 R -/Last 111 0 R -/Count -6 ->> endobj -75 0 obj << -/Title 76 0 R -/A 73 0 R -/Parent 35 0 R -/Prev 67 0 R ->> endobj -71 0 obj << -/Title 72 0 R -/A 69 0 R -/Parent 67 0 R ->> endobj -67 0 obj << -/Title 68 0 R -/A 65 0 R -/Parent 35 0 R -/Prev 63 0 R -/Next 75 0 R -/First 71 0 R -/Last 71 0 R -/Count -1 ->> endobj -63 0 obj << -/Title 64 0 R -/A 61 0 R -/Parent 35 0 R -/Prev 59 0 R -/Next 67 0 R ->> endobj -59 0 obj << -/Title 60 0 R -/A 57 0 R -/Parent 35 0 R -/Prev 55 0 R -/Next 63 0 R ->> endobj -55 0 obj << -/Title 56 0 R -/A 53 0 R -/Parent 35 0 R -/Prev 51 0 R -/Next 59 0 R ->> endobj -51 0 obj << -/Title 52 0 R -/A 49 0 R -/Parent 35 0 R -/Prev 47 0 R -/Next 55 0 R ->> endobj -47 0 obj << -/Title 48 0 R -/A 45 0 R -/Parent 35 0 R -/Prev 43 0 R -/Next 51 0 R ->> endobj -43 0 obj << -/Title 44 0 R -/A 41 0 R -/Parent 35 0 R -/Prev 39 0 R -/Next 47 0 R ->> endobj -39 0 obj << -/Title 40 0 R -/A 37 0 R -/Parent 35 0 R -/Next 43 0 R ->> endobj -35 0 obj << -/Title 36 0 R -/A 33 0 R -/Parent 7 0 R -/Prev 27 0 R -/Next 79 0 R -/First 39 0 R -/Last 75 0 R -/Count -9 ->> endobj -31 0 obj << -/Title 32 0 R -/A 29 0 R -/Parent 27 0 R ->> endobj -27 0 obj << -/Title 28 0 R -/A 25 0 R -/Parent 7 0 R -/Prev 11 0 R -/Next 35 0 R -/First 31 0 R -/Last 31 0 R -/Count -1 ->> endobj -23 0 obj << -/Title 24 0 R -/A 21 0 R -/Parent 19 0 R ->> endobj -19 0 obj << -/Title 20 0 R -/A 17 0 R -/Parent 11 0 R -/Prev 15 0 R -/First 23 0 R -/Last 23 0 R -/Count -1 ->> endobj -15 0 obj << -/Title 16 0 R -/A 13 0 R -/Parent 11 0 R -/Next 19 0 R ->> endobj -11 0 obj << -/Title 12 0 R -/A 9 0 R -/Parent 7 0 R -/Next 27 0 R -/First 15 0 R -/Last 19 0 R -/Count -2 ->> endobj -7 0 obj << -/Title 8 0 R -/A 5 0 R -/Parent 1623 0 R -/Next 195 0 R -/First 11 0 R -/Last 151 0 R -/Count -7 ->> endobj -1624 0 obj << -/Names [(Doc-Start) 498 0 R (Hfootnote.1) 797 0 R (Hfootnote.10) 1188 0 R (Hfootnote.11) 1204 0 R (Hfootnote.12) 1226 0 R (Hfootnote.13) 1233 0 R (Hfootnote.14) 1248 0 R (Hfootnote.15) 1264 0 R (Hfootnote.16) 1316 0 R (Hfootnote.17) 1340 0 R (Hfootnote.18) 1341 0 R (Hfootnote.19) 1352 0 R (Hfootnote.2) 798 0 R (Hfootnote.3) 914 0 R (Hfootnote.4) 976 0 R (Hfootnote.5) 1020 0 R (Hfootnote.6) 1030 0 R (Hfootnote.7) 1048 0 R (Hfootnote.8) 1137 0 R (Hfootnote.9) 1164 0 R (figure.1) 688 0 R (figure.10) 697 0 R (figure.11) 698 0 R (figure.12) 699 0 R (figure.13) 700 0 R (figure.14) 701 0 R (figure.15) 702 0 R (figure.16) 703 0 R (figure.17) 704 0 R (figure.18) 705 0 R (figure.19) 706 0 R (figure.2) 689 0 R (figure.20) 707 0 R (figure.21) 708 0 R (figure.22) 709 0 R (figure.23) 710 0 R (figure.24) 711 0 R (figure.25) 712 0 R (figure.26) 713 0 R (figure.27) 714 0 R (figure.28) 715 0 R (figure.29) 716 0 R (figure.3) 690 0 R (figure.30) 717 0 R (figure.31) 718 0 R (figure.32) 719 0 R (figure.33) 720 0 R (figure.34) 721 0 R (figure.35) 722 0 R (figure.36) 723 0 R (figure.37) 724 0 R (figure.4) 691 0 R (figure.5) 692 0 R (figure.6) 693 0 R (figure.7) 694 0 R (figure.8) 695 0 R (figure.9) 696 0 R (page.1) 497 0 R (page.10) 780 0 R (page.11) 789 0 R (page.12) 802 0 R (page.13) 812 0 R (page.14) 825 0 R (page.15) 839 0 R (page.16) 857 0 R (page.17) 881 0 R (page.18) 886 0 R (page.19) 892 0 R (page.2) 507 0 R (page.20) 910 0 R (page.21) 920 0 R (page.22) 970 0 R (page.23) 980 0 R (page.24) 989 0 R (page.25) 996 0 R (page.26) 1005 0 R (page.27) 1012 0 R (page.28) 1016 0 R (page.29) 1024 0 R (page.3) 558 0 R (page.30) 1034 0 R (page.31) 1039 0 R (page.32) 1046 0 R (page.33) 1053 0 R (page.34) 1067 0 R (page.35) 1083 0 R (page.36) 1089 0 R (page.37) 1093 0 R (page.38) 1099 0 R (page.39) 1103 0 R (page.4) 605 0 R (page.40) 1107 0 R (page.41) 1111 0 R (page.42) 1115 0 R (page.43) 1126 0 R (page.44) 1131 0 R (page.45) 1141 0 R (page.46) 1147 0 R (page.47) 1152 0 R (page.48) 1156 0 R (page.49) 1161 0 R (page.5) 649 0 R (page.50) 1169 0 R (page.51) 1175 0 R (page.52) 1181 0 R (page.53) 1185 0 R (page.54) 1192 0 R (page.55) 1196 0 R (page.56) 1201 0 R (page.57) 1208 0 R (page.58) 1214 0 R (page.59) 1218 0 R (page.6) 728 0 R (page.60) 1224 0 R (page.61) 1230 0 R (page.62) 1238 0 R (page.63) 1242 0 R (page.64) 1246 0 R (page.65) 1252 0 R (page.66) 1256 0 R (page.67) 1260 0 R (page.68) 1269 0 R (page.69) 1273 0 R (page.7) 737 0 R (page.70) 1277 0 R (page.71) 1281 0 R (page.72) 1286 0 R (page.73) 1293 0 R (page.74) 1306 0 R (page.75) 1320 0 R (page.76) 1327 0 R (page.77) 1335 0 R (page.78) 1345 0 R (page.79) 1349 0 R (page.8) 745 0 R (page.80) 1357 0 R (page.81) 1364 0 R (page.82) 1370 0 R (page.83) 1377 0 R (page.84) 1381 0 R (page.85) 1387 0 R (page.86) 1395 0 R (page.87) 1399 0 R (page.88) 1404 0 R (page.89) 1409 0 R (page.9) 759 0 R (page.90) 1506 0 R (part.1) 6 0 R (part.2) 194 0 R (part.3) 410 0 R (part.4) 462 0 R (section*.1) 513 0 R (section*.10) 814 0 R (section*.11) 815 0 R (section*.12) 816 0 R (section*.13) 817 0 R (section*.14) 819 0 R (section*.15) 820 0 R (section*.16) 826 0 R (section*.17) 827 0 R (section*.18) 828 0 R (section*.19) 830 0 R (section*.2) 650 0 R (section*.20) 831 0 R (section*.21) 832 0 R (section*.22) 833 0 R (section*.23) 834 0 R (section*.24) 835 0 R (section*.25) 840 0 R (section*.26) 841 0 R (section*.27) 842 0 R (section*.28) 843 0 R (section*.29) 844 0 R (section*.3) 747 0 R (section*.30) 845 0 R (section*.31) 847 0 R (section*.32) 849 0 R (section*.33) 851 0 R (section*.34) 858 0 R (section*.35) 859 0 R (section*.36) 893 0 R (section*.37) 911 0 R (section*.38) 921 0 R (section*.39) 924 0 R (section*.4) 784 0 R (section*.40) 974 0 R (section*.41) 982 0 R (section*.42) 984 0 R (section*.43) 991 0 R (section*.44) 997 0 R (section*.45) 998 0 R (section*.46) 1006 0 R (section*.47) 1007 0 R (section*.48) 1008 0 R (section*.49) 1027 0 R (section*.5) 803 0 R (section*.50) 1028 0 R (section*.51) 1029 0 R (section*.52) 1054 0 R (section*.53) 1061 0 R (section*.54) 1068 0 R (section*.55) 1084 0 R (section*.56) 1094 0 R (section*.57) 1116 0 R (section*.58) 1133 0 R (section*.59) 1176 0 R (section*.6) 805 0 R (section*.60) 1177 0 R (section*.61) 1287 0 R (section*.62) 1288 0 R (section*.63) 1289 0 R (section*.64) 1294 0 R (section*.65) 1296 0 R (section*.66) 1297 0 R (section*.67) 1298 0 R (section*.68) 1299 0 R (section*.69) 1300 0 R (section*.7) 807 0 R (section*.70) 1301 0 R (section*.71) 1307 0 R (section*.72) 1308 0 R (section*.73) 1309 0 R (section*.74) 1310 0 R (section*.75) 1337 0 R (section*.76) 1365 0 R (section*.77) 1366 0 R (section*.78) 1400 0 R (section*.79) 1410 0 R (section*.8) 808 0 R (section*.9) 813 0 R (section.1) 10 0 R (section.10) 342 0 R (section.11) 414 0 R (section.12) 426 0 R (section.13) 450 0 R (section.14) 466 0 R (section.15) 478 0 R (section.16) 490 0 R (section.2) 26 0 R (section.3) 34 0 R (section.4) 78 0 R (section.5) 114 0 R (section.6) 126 0 R (section.7) 150 0 R (section.8) 198 0 R (section.9) 286 0 R (subsection.1.1) 14 0 R (subsection.1.2) 18 0 R (subsection.10.1) 346 0 R (subsection.10.2) 370 0 R (subsection.10.3) 386 0 R (subsection.10.4) 398 0 R (subsection.10.5) 402 0 R (subsection.11.1) 418 0 R (subsection.11.2) 422 0 R (subsection.12.1) 430 0 R (subsection.12.2) 434 0 R (subsection.12.3) 438 0 R (subsection.12.4) 442 0 R (subsection.12.5) 446 0 R (subsection.13.1) 454 0 R (subsection.13.2) 458 0 R (subsection.14.1) 470 0 R (subsection.14.2) 474 0 R (subsection.15.1) 482 0 R (subsection.15.2) 486 0 R (subsection.2.1) 30 0 R (subsection.3.1) 38 0 R (subsection.3.2) 42 0 R (subsection.3.3) 46 0 R (subsection.3.4) 50 0 R (subsection.3.5) 54 0 R (subsection.3.6) 58 0 R (subsection.3.7) 62 0 R (subsection.3.8) 66 0 R (subsection.3.9) 74 0 R (subsection.4.1) 82 0 R (subsection.4.2) 86 0 R (subsection.4.3) 90 0 R (subsection.4.4) 94 0 R (subsection.4.5) 106 0 R (subsection.4.6) 110 0 R (subsection.5.1) 118 0 R (subsection.5.2) 122 0 R (subsection.6.1) 130 0 R (subsection.6.2) 134 0 R (subsection.6.3) 138 0 R (subsection.6.4) 142 0 R (subsection.6.5) 146 0 R (subsection.7.1) 154 0 R (subsection.7.2) 174 0 R (subsection.7.3) 178 0 R (subsection.7.4) 182 0 R (subsection.7.5) 186 0 R (subsection.7.6) 190 0 R (subsection.8.1) 202 0 R (subsection.8.2) 214 0 R (subsection.8.3) 218 0 R (subsection.8.4) 258 0 R (subsection.8.5) 282 0 R (subsection.9.1) 290 0 R (subsection.9.2) 306 0 R (subsubsection.1.2.1) 22 0 R (subsubsection.10.1.1) 350 0 R (subsubsection.10.1.2) 354 0 R (subsubsection.10.1.3) 358 0 R (subsubsection.10.1.4) 362 0 R (subsubsection.10.1.5) 366 0 R (subsubsection.10.2.1) 374 0 R (subsubsection.10.2.2) 378 0 R (subsubsection.10.2.3) 382 0 R (subsubsection.10.3.1) 390 0 R (subsubsection.10.3.2) 394 0 R (subsubsection.10.5.1) 406 0 R (subsubsection.3.8.1) 70 0 R (subsubsection.4.4.1) 98 0 R (subsubsection.4.4.2) 102 0 R (subsubsection.7.1.1) 158 0 R (subsubsection.7.1.2) 162 0 R (subsubsection.7.1.3) 166 0 R (subsubsection.7.1.4) 170 0 R (subsubsection.8.1.1) 206 0 R (subsubsection.8.1.2) 210 0 R (subsubsection.8.3.1) 222 0 R (subsubsection.8.3.2) 226 0 R (subsubsection.8.3.3) 230 0 R (subsubsection.8.3.4) 234 0 R (subsubsection.8.3.5) 238 0 R (subsubsection.8.3.6) 242 0 R (subsubsection.8.3.7) 246 0 R (subsubsection.8.3.8) 250 0 R (subsubsection.8.3.9) 254 0 R (subsubsection.8.4.1) 262 0 R (subsubsection.8.4.2) 266 0 R (subsubsection.8.4.3) 270 0 R (subsubsection.8.4.4) 274 0 R (subsubsection.8.4.5) 278 0 R (subsubsection.9.1.1) 294 0 R (subsubsection.9.1.2) 298 0 R (subsubsection.9.1.3) 302 0 R (subsubsection.9.2.1) 310 0 R (subsubsection.9.2.2) 314 0 R (subsubsection.9.2.3) 318 0 R (subsubsection.9.2.4) 322 0 R (subsubsection.9.2.5) 326 0 R (subsubsection.9.2.6) 330 0 R (subsubsection.9.2.7) 334 0 R (subsubsection.9.2.8) 338 0 R] -/Limits [(Doc-Start) (subsubsection.9.2.8)] ->> endobj -1625 0 obj << -/Kids [1624 0 R] ->> endobj -1626 0 obj << -/Dests 1625 0 R ->> endobj -1627 0 obj << -/Type /Catalog -/Pages 1622 0 R -/Outlines 1623 0 R -/Names 1626 0 R -/PageMode /UseOutlines -/OpenAction 493 0 R -/PTEX.Fullbanner (This is pdfTeX, Version 3.141592-1.11b) ->> endobj -1628 0 obj << -/Author()/Title()/Subject()/Creator(LaTeX with hyperref package)/Producer(pdfeTeX-1.11b)/Keywords() -/CreationDate (D:20100418173909+10'00') ->> endobj -xref -0 1629 -0000000001 65535 f -0000000002 00000 f -0000000003 00000 f -0000000004 00000 f -0000000499 00000 f -0000000009 00000 n -0000054028 00000 n -0000549861 00000 n -0000000051 00000 n -0000000092 00000 n -0000054088 00000 n -0000549752 00000 n -0000000137 00000 n -0000000164 00000 n -0000054149 00000 n -0000549678 00000 n -0000000215 00000 n -0000000247 00000 n -0000058329 00000 n -0000549567 00000 n -0000000298 00000 n -0000000331 00000 n -0000084621 00000 n -0000549506 00000 n -0000000387 00000 n -0000000430 00000 n -0000088176 00000 n -0000549383 00000 n -0000000476 00000 n -0000000514 00000 n -0000088236 00000 n -0000549322 00000 n -0000000565 00000 n -0000000597 00000 n -0000111277 00000 n -0000549199 00000 n -0000000643 00000 n -0000000683 00000 n -0000111338 00000 n -0000549125 00000 n -0000000734 00000 n -0000000779 00000 n -0000114938 00000 n -0000549038 00000 n -0000000830 00000 n -0000000865 00000 n -0000119133 00000 n -0000548951 00000 n -0000000916 00000 n -0000000966 00000 n -0000134164 00000 n -0000548864 00000 n -0000001017 00000 n -0000001055 00000 n -0000193705 00000 n -0000548777 00000 n -0000001106 00000 n -0000001147 00000 n -0000202281 00000 n -0000548690 00000 n -0000001198 00000 n -0000001232 00000 n -0000210260 00000 n -0000548603 00000 n -0000001283 00000 n -0000001318 00000 n -0000213922 00000 n -0000548479 00000 n -0000001369 00000 n -0000001413 00000 n -0000213984 00000 n -0000548418 00000 n -0000001469 00000 n -0000001499 00000 n -0000214046 00000 n -0000548344 00000 n -0000001550 00000 n -0000001608 00000 n -0000218721 00000 n -0000548219 00000 n -0000001654 00000 n -0000001688 00000 n -0000218783 00000 n -0000548145 00000 n -0000001739 00000 n -0000001778 00000 n -0000218908 00000 n -0000548058 00000 n -0000001829 00000 n -0000001883 00000 n -0000226991 00000 n -0000547971 00000 n -0000001934 00000 n -0000001978 00000 n -0000227116 00000 n -0000547845 00000 n -0000002029 00000 n -0000002073 00000 n -0000231348 00000 n -0000547769 00000 n -0000002129 00000 n -0000002174 00000 n -0000231410 00000 n -0000547692 00000 n -0000002231 00000 n -0000002275 00000 n -0000235378 00000 n -0000547601 00000 n -0000002327 00000 n -0000002371 00000 n -0000239450 00000 n -0000547523 00000 n -0000002423 00000 n -0000002471 00000 n -0000260258 00000 n -0000547394 00000 n -0000002518 00000 n -0000002557 00000 n -0000260321 00000 n -0000547315 00000 n -0000002609 00000 n -0000002635 00000 n -0000272910 00000 n -0000547236 00000 n -0000002687 00000 n -0000002715 00000 n -0000276474 00000 n -0000547106 00000 n -0000002762 00000 n -0000002790 00000 n -0000276537 00000 n -0000547027 00000 n -0000002842 00000 n -0000002875 00000 n -0000287796 00000 n -0000546934 00000 n -0000002927 00000 n -0000002976 00000 n -0000287858 00000 n -0000546841 00000 n -0000003028 00000 n -0000003064 00000 n -0000291989 00000 n -0000546748 00000 n -0000003116 00000 n -0000003157 00000 n -0000295469 00000 n -0000546669 00000 n -0000003209 00000 n -0000003249 00000 n -0000299567 00000 n -0000546553 00000 n -0000003296 00000 n -0000003321 00000 n -0000299630 00000 n -0000546435 00000 n -0000003373 00000 n -0000003419 00000 n -0000299693 00000 n -0000546356 00000 n -0000003476 00000 n -0000003514 00000 n -0000304506 00000 n -0000546263 00000 n -0000003571 00000 n -0000003628 00000 n -0000308531 00000 n -0000546170 00000 n -0000003685 00000 n -0000003749 00000 n -0000308594 00000 n -0000546091 00000 n -0000003806 00000 n -0000003847 00000 n -0000308656 00000 n -0000545998 00000 n -0000003899 00000 n -0000003939 00000 n -0000312505 00000 n -0000545905 00000 n -0000003991 00000 n -0000004040 00000 n -0000312568 00000 n -0000545812 00000 n -0000004092 00000 n -0000004128 00000 n -0000313971 00000 n -0000545719 00000 n -0000004180 00000 n -0000004209 00000 n -0000314034 00000 n -0000545640 00000 n -0000004261 00000 n -0000004292 00000 n -0000317481 00000 n -0000545509 00000 n -0000004336 00000 n -0000004377 00000 n -0000317544 00000 n -0000545391 00000 n -0000004424 00000 n -0000004458 00000 n -0000317607 00000 n -0000545273 00000 n -0000004510 00000 n -0000004552 00000 n -0000317670 00000 n -0000545194 00000 n -0000004609 00000 n -0000004650 00000 n -0000317733 00000 n -0000545115 00000 n -0000004707 00000 n -0000004744 00000 n -0000317796 00000 n -0000545022 00000 n -0000004796 00000 n -0000004830 00000 n -0000320623 00000 n -0000544890 00000 n -0000004882 00000 n -0000004925 00000 n -0000320686 00000 n -0000544811 00000 n -0000004982 00000 n -0000005034 00000 n -0000323290 00000 n -0000544718 00000 n -0000005091 00000 n -0000005145 00000 n -0000323353 00000 n -0000544625 00000 n -0000005202 00000 n -0000005250 00000 n -0000326984 00000 n -0000544532 00000 n -0000005307 00000 n -0000005355 00000 n -0000327047 00000 n -0000544439 00000 n -0000005412 00000 n -0000005469 00000 n -0000331114 00000 n -0000544346 00000 n -0000005526 00000 n -0000005582 00000 n -0000334437 00000 n -0000544253 00000 n -0000005639 00000 n -0000005695 00000 n -0000334500 00000 n -0000544160 00000 n -0000005752 00000 n -0000005807 00000 n -0000337654 00000 n -0000544081 00000 n -0000005864 00000 n -0000005903 00000 n -0000337717 00000 n -0000543949 00000 n -0000005955 00000 n -0000005992 00000 n -0000337780 00000 n -0000543870 00000 n -0000006049 00000 n -0000006097 00000 n -0000337843 00000 n -0000543777 00000 n -0000006154 00000 n -0000006205 00000 n -0000340721 00000 n -0000543684 00000 n -0000006262 00000 n -0000006293 00000 n -0000344724 00000 n -0000543591 00000 n -0000006350 00000 n -0000006387 00000 n -0000347613 00000 n -0000543512 00000 n -0000006444 00000 n -0000006493 00000 n -0000347676 00000 n -0000543433 00000 n -0000006545 00000 n -0000006586 00000 n -0000347739 00000 n -0000543301 00000 n -0000006633 00000 n -0000006672 00000 n -0000347802 00000 n -0000543183 00000 n -0000006724 00000 n -0000006785 00000 n -0000347865 00000 n -0000543104 00000 n -0000006842 00000 n -0000006873 00000 n -0000351283 00000 n -0000543011 00000 n -0000006930 00000 n -0000006969 00000 n -0000351346 00000 n -0000542932 00000 n -0000007026 00000 n -0000007064 00000 n -0000355445 00000 n -0000542814 00000 n -0000007116 00000 n -0000007160 00000 n -0000355508 00000 n -0000542735 00000 n -0000007217 00000 n -0000007258 00000 n -0000359063 00000 n -0000542642 00000 n -0000007315 00000 n -0000007374 00000 n -0000362504 00000 n -0000542549 00000 n -0000007431 00000 n -0000007466 00000 n -0000362567 00000 n -0000542456 00000 n -0000007523 00000 n -0000007560 00000 n -0000366697 00000 n -0000542363 00000 n -0000007617 00000 n -0000007663 00000 n -0000366760 00000 n -0000542270 00000 n -0000007720 00000 n -0000007761 00000 n -0000370412 00000 n -0000542177 00000 n -0000007818 00000 n -0000007853 00000 n -0000370475 00000 n -0000542098 00000 n -0000007910 00000 n -0000007948 00000 n -0000370538 00000 n -0000541980 00000 n -0000007996 00000 n -0000008051 00000 n -0000370601 00000 n -0000541862 00000 n -0000008104 00000 n -0000008155 00000 n -0000370663 00000 n -0000541783 00000 n -0000008213 00000 n -0000008252 00000 n -0000370726 00000 n -0000541690 00000 n -0000008310 00000 n -0000008349 00000 n -0000373919 00000 n -0000541597 00000 n -0000008407 00000 n -0000008445 00000 n -0000373982 00000 n -0000541504 00000 n -0000008503 00000 n -0000008542 00000 n -0000374045 00000 n -0000541425 00000 n -0000008600 00000 n -0000008638 00000 n -0000374108 00000 n -0000541293 00000 n -0000008691 00000 n -0000008738 00000 n -0000374171 00000 n -0000541214 00000 n -0000008796 00000 n -0000008847 00000 n -0000374234 00000 n -0000541121 00000 n -0000008905 00000 n -0000008942 00000 n -0000377868 00000 n -0000541042 00000 n -0000009000 00000 n -0000009037 00000 n -0000377931 00000 n -0000540910 00000 n -0000009090 00000 n -0000009138 00000 n -0000377994 00000 n -0000540831 00000 n -0000009196 00000 n -0000009232 00000 n -0000378057 00000 n -0000540752 00000 n -0000009290 00000 n -0000009334 00000 n -0000378120 00000 n -0000540659 00000 n -0000009387 00000 n -0000009432 00000 n -0000381324 00000 n -0000540541 00000 n -0000009485 00000 n -0000009526 00000 n -0000381387 00000 n -0000540476 00000 n -0000009584 00000 n -0000009619 00000 n -0000384018 00000 n -0000540343 00000 n -0000009663 00000 n -0000009700 00000 n -0000384081 00000 n -0000540225 00000 n -0000009748 00000 n -0000009776 00000 n -0000384144 00000 n -0000540146 00000 n -0000009829 00000 n -0000009883 00000 n -0000387327 00000 n -0000540067 00000 n -0000009936 00000 n -0000009994 00000 n -0000391212 00000 n -0000539935 00000 n -0000010042 00000 n -0000010081 00000 n -0000395344 00000 n -0000539856 00000 n -0000010134 00000 n -0000010172 00000 n -0000399201 00000 n -0000539763 00000 n -0000010225 00000 n -0000010293 00000 n -0000403885 00000 n -0000539670 00000 n -0000010346 00000 n -0000010387 00000 n -0000407819 00000 n -0000539577 00000 n -0000010440 00000 n -0000010515 00000 n -0000412158 00000 n -0000539498 00000 n -0000010568 00000 n -0000010619 00000 n -0000416066 00000 n -0000539380 00000 n -0000010667 00000 n -0000010700 00000 n -0000416192 00000 n -0000539301 00000 n -0000010753 00000 n -0000010793 00000 n -0000420256 00000 n -0000539222 00000 n -0000010846 00000 n -0000010884 00000 n -0000423739 00000 n -0000539103 00000 n -0000010928 00000 n -0000010961 00000 n -0000427130 00000 n -0000538985 00000 n -0000011009 00000 n -0000011047 00000 n -0000427193 00000 n -0000538906 00000 n -0000011100 00000 n -0000011136 00000 n -0000430500 00000 n -0000538827 00000 n -0000011189 00000 n -0000011232 00000 n -0000433809 00000 n -0000538695 00000 n -0000011280 00000 n -0000011325 00000 n -0000433872 00000 n -0000538616 00000 n -0000011378 00000 n -0000011417 00000 n -0000433935 00000 n -0000538537 00000 n -0000011470 00000 n -0000011505 00000 n -0000438525 00000 n -0000538458 00000 n -0000011553 00000 n -0000011601 00000 n -0000013082 00000 n -0000013325 00000 n -0000011653 00000 n -0000013201 00000 n -0000013263 00000 n -0000000501 00000 f -0000536014 00000 n -0000000511 00000 f -0000535920 00000 n -0000536107 00000 n -0000022756 00000 n -0000015766 00000 n -0000013410 00000 n -0000022632 00000 n -0000535425 00000 n -0000523017 00000 n -0000535240 00000 n -0000000641 00000 f -0000522925 00000 n -0000022694 00000 n -0000016225 00000 n -0000016373 00000 n -0000016523 00000 n -0000016680 00000 n -0000016836 00000 n -0000016997 00000 n -0000017149 00000 n -0000017306 00000 n -0000017458 00000 n -0000017615 00000 n -0000017772 00000 n -0000017929 00000 n -0000018085 00000 n -0000018242 00000 n -0000018397 00000 n -0000018554 00000 n -0000018711 00000 n -0000018871 00000 n -0000019028 00000 n -0000019180 00000 n -0000019336 00000 n -0000019493 00000 n -0000019650 00000 n -0000019806 00000 n -0000019967 00000 n -0000020127 00000 n -0000020284 00000 n -0000020440 00000 n -0000020592 00000 n -0000020749 00000 n -0000020905 00000 n -0000021057 00000 n -0000021214 00000 n -0000021371 00000 n -0000021528 00000 n -0000021685 00000 n -0000021841 00000 n -0000021993 00000 n -0000022150 00000 n -0000022310 00000 n -0000022471 00000 n -0000032578 00000 n -0000025214 00000 n -0000022867 00000 n -0000032516 00000 n -0000025689 00000 n -0000025849 00000 n -0000026006 00000 n -0000026163 00000 n -0000026319 00000 n -0000026476 00000 n -0000026631 00000 n -0000026780 00000 n -0000026932 00000 n -0000027087 00000 n -0000027248 00000 n -0000027409 00000 n -0000027565 00000 n -0000027722 00000 n -0000027882 00000 n -0000028043 00000 n -0000028204 00000 n -0000028365 00000 n -0000028526 00000 n -0000028687 00000 n -0000028848 00000 n -0000029009 00000 n -0000029169 00000 n -0000029326 00000 n -0000029487 00000 n -0000029648 00000 n -0000029809 00000 n -0000029970 00000 n -0000030130 00000 n -0000030286 00000 n -0000030438 00000 n -0000030594 00000 n -0000030755 00000 n -0000030915 00000 n -0000031076 00000 n -0000031233 00000 n -0000031394 00000 n -0000031555 00000 n -0000031716 00000 n -0000031877 00000 n -0000032038 00000 n -0000032199 00000 n -0000032359 00000 n -0000041328 00000 n -0000034851 00000 n -0000032689 00000 n -0000041266 00000 n -0000035286 00000 n -0000035439 00000 n -0000035597 00000 n -0000035759 00000 n -0000035920 00000 n -0000036082 00000 n -0000036242 00000 n -0000036404 00000 n -0000036561 00000 n -0000036723 00000 n -0000036885 00000 n -0000037047 00000 n -0000037205 00000 n -0000037367 00000 n -0000037529 00000 n -0000037687 00000 n -0000037845 00000 n -0000038007 00000 n -0000038156 00000 n -0000038309 00000 n -0000038466 00000 n -0000038623 00000 n -0000038775 00000 n -0000038932 00000 n -0000039090 00000 n -0000039248 00000 n -0000039406 00000 n -0000039562 00000 n -0000039715 00000 n -0000039873 00000 n -0000040031 00000 n -0000040179 00000 n -0000040332 00000 n -0000040490 00000 n -0000040648 00000 n -0000000729 00000 f -0000522827 00000 n -0000040801 00000 n -0000040957 00000 n -0000041114 00000 n -0000050118 00000 n -0000043967 00000 n -0000041452 00000 n -0000049994 00000 n -0000050056 00000 n -0000044394 00000 n -0000044545 00000 n -0000044695 00000 n -0000044846 00000 n -0000044997 00000 n -0000045148 00000 n -0000045298 00000 n -0000045449 00000 n -0000045600 00000 n -0000045751 00000 n -0000045903 00000 n -0000046055 00000 n -0000046207 00000 n -0000046358 00000 n -0000046510 00000 n -0000046661 00000 n -0000046813 00000 n -0000046964 00000 n -0000047116 00000 n -0000047267 00000 n -0000047418 00000 n -0000047569 00000 n -0000047720 00000 n -0000047872 00000 n -0000048023 00000 n -0000048175 00000 n -0000048327 00000 n -0000048479 00000 n -0000048630 00000 n -0000048782 00000 n -0000048934 00000 n -0000049085 00000 n -0000049237 00000 n -0000049389 00000 n -0000049541 00000 n -0000049692 00000 n -0000049843 00000 n -0000058205 00000 n -0000058267 00000 n -0000063182 00000 n -0000074610 00000 n -0000079051 00000 n -0000079112 00000 n -0000084560 00000 n -0000084682 00000 n -0000111399 00000 n -0000111461 00000 n -0000114999 00000 n -0000119194 00000 n -0000129558 00000 n -0000188834 00000 n -0000188896 00000 n -0000198098 00000 n -0000198221 00000 n -0000202220 00000 n -0000206609 00000 n -0000206793 00000 n -0000218845 00000 n -0000227053 00000 n -0000231473 00000 n -0000248420 00000 n -0000256833 00000 n -0000256896 00000 n -0000284341 00000 n -0000291927 00000 n -0000304443 00000 n -0000331177 00000 n -0000381261 00000 n -0000391275 00000 n -0000395282 00000 n -0000412095 00000 n -0000416129 00000 n -0000420066 00000 n -0000423086 00000 n -0000054210 00000 n -0000053355 00000 n -0000050229 00000 n -0000053966 00000 n -0000001134 00000 f -0000522738 00000 n -0000053510 00000 n -0000053667 00000 n -0000053815 00000 n -0000058390 00000 n -0000057530 00000 n -0000054321 00000 n -0000058143 00000 n -0000057685 00000 n -0000057835 00000 n -0000057986 00000 n -0000536225 00000 n -0000063243 00000 n -0000062120 00000 n -0000058514 00000 n -0000063058 00000 n -0000062291 00000 n -0000063120 00000 n -0000062448 00000 n -0000520379 00000 n -0000518611 00000 n -0000520215 00000 n -0000062598 00000 n -0000062749 00000 n -0000062901 00000 n -0000066283 00000 n -0000074672 00000 n -0000066128 00000 n -0000063380 00000 n -0000074548 00000 n -0000074092 00000 n -0000074242 00000 n -0000074397 00000 n -0000067781 00000 n -0000068041 00000 n -0000068078 00000 n -0000068464 00000 n -0000068829 00000 n -0000069215 00000 n -0000069603 00000 n -0000070003 00000 n -0000070089 00000 n -0000072788 00000 n -0000073048 00000 n -0000073291 00000 n -0000073540 00000 n -0000073822 00000 n -0000079236 00000 n -0000078225 00000 n -0000074811 00000 n -0000078989 00000 n -0000078388 00000 n -0000078537 00000 n -0000078688 00000 n -0000079174 00000 n -0000078839 00000 n -0000084868 00000 n -0000083716 00000 n -0000079386 00000 n -0000084498 00000 n -0000516071 00000 n -0000510325 00000 n -0000515907 00000 n -0000083879 00000 n -0000084032 00000 n -0000084186 00000 n -0000084347 00000 n -0000084744 00000 n -0000084806 00000 n -0000088545 00000 n -0000087653 00000 n -0000085018 00000 n -0000088114 00000 n -0000088297 00000 n -0000087800 00000 n -0000088359 00000 n -0000087957 00000 n -0000088421 00000 n -0000088483 00000 n -0000091508 00000 n -0000090717 00000 n -0000088669 00000 n -0000091012 00000 n -0000091074 00000 n -0000091136 00000 n -0000091198 00000 n -0000091260 00000 n -0000091322 00000 n -0000090856 00000 n -0000091384 00000 n -0000091446 00000 n -0000536343 00000 n -0000094373 00000 n -0000093460 00000 n -0000091632 00000 n -0000093754 00000 n -0000093816 00000 n -0000093878 00000 n -0000093940 00000 n -0000093599 00000 n -0000094002 00000 n -0000094063 00000 n -0000094125 00000 n -0000094187 00000 n -0000094249 00000 n -0000094311 00000 n -0000097907 00000 n -0000096665 00000 n -0000094497 00000 n -0000097289 00000 n -0000097351 00000 n -0000097412 00000 n -0000097474 00000 n -0000097536 00000 n -0000097597 00000 n -0000097659 00000 n -0000096820 00000 n -0000097721 00000 n -0000096977 00000 n -0000097783 00000 n -0000097133 00000 n -0000097845 00000 n -0000099879 00000 n -0000105260 00000 n -0000111523 00000 n -0000099732 00000 n -0000098031 00000 n -0000111092 00000 n -0000111154 00000 n -0000111215 00000 n -0000110791 00000 n -0000110942 00000 n -0000100923 00000 n -0000101183 00000 n -0000101220 00000 n -0000101587 00000 n -0000101977 00000 n -0000102063 00000 n -0000104762 00000 n -0000105005 00000 n -0000106440 00000 n -0000106700 00000 n -0000106737 00000 n -0000107116 00000 n -0000107508 00000 n -0000107594 00000 n -0000110293 00000 n -0000110536 00000 n -0000115060 00000 n -0000114585 00000 n -0000111675 00000 n -0000114876 00000 n -0000114724 00000 n -0000119256 00000 n -0000118780 00000 n -0000115197 00000 n -0000119071 00000 n -0000118919 00000 n -0000123095 00000 n -0000129620 00000 n -0000122932 00000 n -0000119380 00000 n -0000129434 00000 n -0000129496 00000 n -0000128829 00000 n -0000128981 00000 n -0000129132 00000 n -0000129283 00000 n -0000536461 00000 n -0000124488 00000 n -0000124748 00000 n -0000124785 00000 n -0000125146 00000 n -0000125546 00000 n -0000125632 00000 n -0000128331 00000 n -0000128574 00000 n -0000134287 00000 n -0000133584 00000 n -0000129772 00000 n -0000134040 00000 n -0000134102 00000 n -0000133731 00000 n -0000133885 00000 n -0000134225 00000 n -0000137022 00000 n -0000162715 00000 n -0000189020 00000 n -0000136875 00000 n -0000134411 00000 n -0000188710 00000 n -0000188772 00000 n -0000188407 00000 n -0000188558 00000 n -0000188958 00000 n -0000138172 00000 n -0000138432 00000 n -0000139099 00000 n -0000139136 00000 n -0000139184 00000 n -0000139615 00000 n -0000140222 00000 n -0000140380 00000 n -0000140528 00000 n -0000140614 00000 n -0000143313 00000 n -0000144019 00000 n -0000144283 00000 n -0000144526 00000 n -0000144769 00000 n -0000145058 00000 n -0000145291 00000 n -0000145581 00000 n -0000145872 00000 n -0000146142 00000 n -0000155065 00000 n -0000163870 00000 n -0000164130 00000 n -0000164797 00000 n -0000164834 00000 n -0000164882 00000 n -0000165313 00000 n -0000165916 00000 n -0000166074 00000 n -0000166222 00000 n -0000166308 00000 n -0000169007 00000 n -0000169713 00000 n -0000169977 00000 n -0000170220 00000 n -0000170463 00000 n -0000170752 00000 n -0000170985 00000 n -0000171275 00000 n -0000171566 00000 n -0000171836 00000 n -0000180758 00000 n -0000193889 00000 n -0000192873 00000 n -0000189185 00000 n -0000193643 00000 n -0000193036 00000 n -0000193185 00000 n -0000193337 00000 n -0000193765 00000 n -0000193491 00000 n -0000193827 00000 n -0000198344 00000 n -0000197427 00000 n -0000194013 00000 n -0000198036 00000 n -0000197582 00000 n -0000198159 00000 n -0000197733 00000 n -0000198282 00000 n -0000197884 00000 n -0000202404 00000 n -0000201709 00000 n -0000198481 00000 n -0000202158 00000 n -0000201856 00000 n -0000202342 00000 n -0000202007 00000 n -0000206855 00000 n -0000206096 00000 n -0000202541 00000 n -0000206547 00000 n -0000206669 00000 n -0000206731 00000 n -0000206245 00000 n -0000206395 00000 n -0000536579 00000 n -0000210513 00000 n -0000210073 00000 n -0000207005 00000 n -0000210196 00000 n -0000210321 00000 n -0000210385 00000 n -0000210449 00000 n -0000214108 00000 n -0000213735 00000 n -0000210638 00000 n -0000213858 00000 n -0000219034 00000 n -0000218024 00000 n -0000214246 00000 n -0000218657 00000 n -0000218186 00000 n -0000218349 00000 n -0000218502 00000 n -0000218970 00000 n -0000223123 00000 n -0000222334 00000 n -0000219172 00000 n -0000222803 00000 n -0000222487 00000 n -0000222648 00000 n -0000222867 00000 n -0000222931 00000 n -0000222995 00000 n -0000223059 00000 n -0000227178 00000 n -0000226631 00000 n -0000223261 00000 n -0000226927 00000 n -0000226775 00000 n -0000231535 00000 n -0000230821 00000 n -0000227316 00000 n -0000231284 00000 n -0000230974 00000 n -0000231132 00000 n -0000536703 00000 n -0000235505 00000 n -0000235017 00000 n -0000231686 00000 n -0000235314 00000 n -0000235161 00000 n -0000235441 00000 n -0000242672 00000 n -0000239640 00000 n -0000238928 00000 n -0000235643 00000 n -0000239386 00000 n -0000239513 00000 n -0000507763 00000 n -0000503400 00000 n -0000507598 00000 n -0000500703 00000 n -0000497871 00000 n -0000500538 00000 n -0000239576 00000 n -0000239081 00000 n -0000239234 00000 n -0000248544 00000 n -0000242549 00000 n -0000239792 00000 n -0000248356 00000 n -0000248480 00000 n -0000495539 00000 n -0000493481 00000 n -0000495376 00000 n -0000243980 00000 n -0000244241 00000 n -0000244280 00000 n -0000244667 00000 n -0000245069 00000 n -0000245156 00000 n -0000247856 00000 n -0000248100 00000 n -0000252880 00000 n -0000252455 00000 n -0000248738 00000 n -0000252752 00000 n -0000252816 00000 n -0000252599 00000 n -0000256959 00000 n -0000256646 00000 n -0000253058 00000 n -0000256769 00000 n -0000260384 00000 n -0000260007 00000 n -0000257084 00000 n -0000260130 00000 n -0000260194 00000 n -0000536828 00000 n -0000263381 00000 n -0000263194 00000 n -0000260509 00000 n -0000263317 00000 n -0000266427 00000 n -0000266240 00000 n -0000263506 00000 n -0000266363 00000 n -0000269694 00000 n -0000269507 00000 n -0000266579 00000 n -0000269630 00000 n -0000272973 00000 n -0000272723 00000 n -0000269819 00000 n -0000272846 00000 n -0000276600 00000 n -0000276223 00000 n -0000273098 00000 n -0000276346 00000 n -0000276410 00000 n -0000491082 00000 n -0000487986 00000 n -0000490917 00000 n -0000485654 00000 n -0000483584 00000 n -0000485491 00000 n -0000279868 00000 n -0000279681 00000 n -0000276779 00000 n -0000279804 00000 n -0000536953 00000 n -0000284530 00000 n -0000283818 00000 n -0000279993 00000 n -0000284277 00000 n -0000283971 00000 n -0000284402 00000 n -0000000000 00000 f -0000483482 00000 n -0000284122 00000 n -0000284466 00000 n -0000287921 00000 n -0000287274 00000 n -0000284682 00000 n -0000287732 00000 n -0000287427 00000 n -0000287580 00000 n -0000292052 00000 n -0000291567 00000 n -0000288073 00000 n -0000291863 00000 n -0000291711 00000 n -0000295532 00000 n -0000295282 00000 n -0000292190 00000 n -0000295405 00000 n -0000299756 00000 n -0000299206 00000 n -0000295657 00000 n -0000299503 00000 n -0000299350 00000 n -0000304632 00000 n -0000303919 00000 n -0000299894 00000 n -0000304379 00000 n -0000304072 00000 n -0000304224 00000 n -0000304569 00000 n -0000537078 00000 n -0000308719 00000 n -0000308002 00000 n -0000304770 00000 n -0000308467 00000 n -0000308155 00000 n -0000308313 00000 n -0000312631 00000 n -0000312191 00000 n -0000308844 00000 n -0000312314 00000 n -0000312378 00000 n -0000312442 00000 n -0000314097 00000 n -0000313784 00000 n -0000312782 00000 n -0000313907 00000 n -0000317923 00000 n -0000316956 00000 n -0000314236 00000 n -0000317417 00000 n -0000317109 00000 n -0000317261 00000 n -0000317859 00000 n -0000320748 00000 n -0000320436 00000 n -0000318035 00000 n -0000320559 00000 n -0000323416 00000 n -0000323103 00000 n -0000320873 00000 n -0000323226 00000 n -0000537203 00000 n -0000327173 00000 n -0000326460 00000 n -0000323541 00000 n -0000326920 00000 n -0000326613 00000 n -0000326767 00000 n -0000327110 00000 n -0000331240 00000 n -0000330583 00000 n -0000327298 00000 n -0000331050 00000 n -0000330736 00000 n -0000330897 00000 n -0000334563 00000 n -0000334250 00000 n -0000331405 00000 n -0000334373 00000 n -0000337906 00000 n -0000337126 00000 n -0000334701 00000 n -0000337590 00000 n -0000337279 00000 n -0000337437 00000 n -0000340847 00000 n -0000340358 00000 n -0000338031 00000 n -0000340657 00000 n -0000340502 00000 n -0000340784 00000 n -0000344850 00000 n -0000344200 00000 n -0000340985 00000 n -0000344660 00000 n -0000344353 00000 n -0000344507 00000 n -0000344787 00000 n -0000537328 00000 n -0000347928 00000 n -0000347426 00000 n -0000344988 00000 n -0000347549 00000 n -0000351408 00000 n -0000351096 00000 n -0000348066 00000 n -0000351219 00000 n -0000355635 00000 n -0000355081 00000 n -0000351573 00000 n -0000355381 00000 n -0000355225 00000 n -0000355571 00000 n -0000359126 00000 n -0000358876 00000 n -0000355800 00000 n -0000358999 00000 n -0000362629 00000 n -0000362317 00000 n -0000359291 00000 n -0000362440 00000 n -0000366887 00000 n -0000366004 00000 n -0000362768 00000 n -0000366633 00000 n -0000366166 00000 n -0000366320 00000 n -0000366470 00000 n -0000366823 00000 n -0000537453 00000 n -0000370789 00000 n -0000370225 00000 n -0000367025 00000 n -0000370348 00000 n -0000374297 00000 n -0000373732 00000 n -0000370927 00000 n -0000373855 00000 n -0000378183 00000 n -0000377681 00000 n -0000374449 00000 n -0000377804 00000 n -0000381450 00000 n -0000380902 00000 n -0000378347 00000 n -0000381197 00000 n -0000381046 00000 n -0000384399 00000 n -0000383831 00000 n -0000381588 00000 n -0000383954 00000 n -0000384207 00000 n -0000384271 00000 n -0000384335 00000 n -0000387454 00000 n -0000386576 00000 n -0000384524 00000 n -0000386879 00000 n -0000386943 00000 n -0000386720 00000 n -0000387007 00000 n -0000387071 00000 n -0000387135 00000 n -0000387199 00000 n -0000387263 00000 n -0000387390 00000 n -0000537578 00000 n -0000391402 00000 n -0000389943 00000 n -0000387592 00000 n -0000390893 00000 n -0000390957 00000 n -0000391021 00000 n -0000391085 00000 n -0000391148 00000 n -0000390123 00000 n -0000390282 00000 n -0000390438 00000 n -0000390591 00000 n -0000390743 00000 n -0000391338 00000 n -0000395407 00000 n -0000394601 00000 n -0000391555 00000 n -0000395218 00000 n -0000394763 00000 n -0000394915 00000 n -0000395068 00000 n -0000399263 00000 n -0000398841 00000 n -0000395586 00000 n -0000399137 00000 n -0000398985 00000 n -0000479257 00000 n -0000477189 00000 n -0000479094 00000 n -0000404140 00000 n -0000403195 00000 n -0000399429 00000 n -0000403821 00000 n -0000403357 00000 n -0000403948 00000 n -0000403512 00000 n -0000403665 00000 n -0000404012 00000 n -0000404076 00000 n -0000407882 00000 n -0000407632 00000 n -0000404305 00000 n -0000407755 00000 n -0000412285 00000 n -0000411570 00000 n -0000408007 00000 n -0000412031 00000 n -0000411723 00000 n -0000411879 00000 n -0000412221 00000 n -0000537703 00000 n -0000416255 00000 n -0000415384 00000 n -0000412423 00000 n -0000416002 00000 n -0000415546 00000 n -0000415699 00000 n -0000415850 00000 n -0000420319 00000 n -0000419879 00000 n -0000416393 00000 n -0000420002 00000 n -0000420128 00000 n -0000420192 00000 n -0000423148 00000 n -0000422395 00000 n -0000420484 00000 n -0000423022 00000 n -0000422557 00000 n -0000422710 00000 n -0000422863 00000 n -0000423802 00000 n -0000423552 00000 n -0000423288 00000 n -0000423675 00000 n -0000427256 00000 n -0000426596 00000 n -0000423888 00000 n -0000427066 00000 n -0000426749 00000 n -0000426903 00000 n -0000430563 00000 n -0000430313 00000 n -0000427381 00000 n -0000430436 00000 n -0000474846 00000 n -0000473110 00000 n -0000474680 00000 n -0000537828 00000 n -0000433998 00000 n -0000433622 00000 n -0000430716 00000 n -0000433745 00000 n -0000435825 00000 n -0000435574 00000 n -0000434136 00000 n -0000435697 00000 n -0000435761 00000 n -0000438588 00000 n -0000438165 00000 n -0000435950 00000 n -0000438461 00000 n -0000438309 00000 n -0000455957 00000 n -0000441081 00000 n -0000438700 00000 n -0000455829 00000 n -0000455893 00000 n -0000442044 00000 n -0000442194 00000 n -0000442345 00000 n -0000442495 00000 n -0000442644 00000 n -0000442794 00000 n -0000442944 00000 n -0000443095 00000 n -0000443245 00000 n -0000443394 00000 n -0000443543 00000 n -0000443691 00000 n -0000443841 00000 n -0000443991 00000 n -0000444141 00000 n -0000444290 00000 n -0000444440 00000 n -0000444590 00000 n -0000444740 00000 n -0000444890 00000 n -0000445041 00000 n -0000445191 00000 n -0000445341 00000 n -0000445490 00000 n -0000445640 00000 n -0000445789 00000 n -0000445939 00000 n -0000446088 00000 n -0000446238 00000 n -0000446388 00000 n -0000446538 00000 n -0000446688 00000 n -0000446837 00000 n -0000446987 00000 n -0000447137 00000 n -0000447287 00000 n -0000447437 00000 n -0000447587 00000 n -0000447736 00000 n -0000447886 00000 n -0000448035 00000 n -0000448185 00000 n -0000448335 00000 n -0000448485 00000 n -0000448634 00000 n -0000448784 00000 n -0000448935 00000 n -0000449085 00000 n -0000449235 00000 n -0000449384 00000 n -0000449534 00000 n -0000449684 00000 n -0000449834 00000 n -0000449985 00000 n -0000450135 00000 n -0000450284 00000 n -0000450433 00000 n -0000450583 00000 n -0000450734 00000 n -0000450884 00000 n -0000451034 00000 n -0000451185 00000 n -0000451335 00000 n -0000451485 00000 n -0000451635 00000 n -0000451785 00000 n -0000451935 00000 n -0000452085 00000 n -0000452235 00000 n -0000452384 00000 n -0000452534 00000 n -0000452683 00000 n -0000452833 00000 n -0000452982 00000 n -0000453132 00000 n -0000453282 00000 n -0000453431 00000 n -0000453581 00000 n -0000453731 00000 n -0000453881 00000 n -0000454032 00000 n -0000454182 00000 n -0000454332 00000 n -0000454482 00000 n -0000454632 00000 n -0000454782 00000 n -0000454931 00000 n -0000455081 00000 n -0000455231 00000 n -0000455381 00000 n -0000455530 00000 n -0000455680 00000 n -0000472985 00000 n -0000458172 00000 n -0000456056 00000 n -0000472921 00000 n -0000459135 00000 n -0000459284 00000 n -0000459433 00000 n -0000459584 00000 n -0000459734 00000 n -0000459884 00000 n -0000460033 00000 n -0000460183 00000 n -0000460331 00000 n -0000460481 00000 n -0000460631 00000 n -0000460780 00000 n -0000460930 00000 n -0000461079 00000 n -0000461229 00000 n -0000461378 00000 n -0000461528 00000 n -0000461678 00000 n -0000461827 00000 n -0000461977 00000 n -0000462127 00000 n -0000462277 00000 n -0000462426 00000 n -0000462575 00000 n -0000462726 00000 n -0000462877 00000 n -0000463027 00000 n -0000463176 00000 n -0000463325 00000 n -0000463476 00000 n -0000463626 00000 n -0000463775 00000 n -0000463925 00000 n -0000464074 00000 n -0000464224 00000 n -0000464373 00000 n -0000464524 00000 n -0000464674 00000 n -0000464825 00000 n -0000464975 00000 n -0000465125 00000 n -0000465276 00000 n -0000465426 00000 n -0000465576 00000 n -0000465727 00000 n -0000465877 00000 n -0000466026 00000 n -0000466176 00000 n -0000466326 00000 n -0000466476 00000 n -0000466625 00000 n -0000466775 00000 n -0000466925 00000 n -0000467076 00000 n -0000467227 00000 n -0000467378 00000 n -0000467528 00000 n -0000467678 00000 n -0000467827 00000 n -0000467977 00000 n -0000468126 00000 n -0000468275 00000 n -0000468425 00000 n -0000468575 00000 n -0000468725 00000 n -0000468874 00000 n -0000469023 00000 n -0000469172 00000 n -0000469322 00000 n -0000469472 00000 n -0000469622 00000 n -0000469772 00000 n -0000469921 00000 n -0000470071 00000 n -0000470221 00000 n -0000470370 00000 n -0000470520 00000 n -0000470671 00000 n -0000470821 00000 n -0000470971 00000 n -0000471122 00000 n -0000471272 00000 n -0000471421 00000 n -0000471572 00000 n -0000471722 00000 n -0000471871 00000 n -0000472022 00000 n -0000472172 00000 n -0000472322 00000 n -0000472472 00000 n -0000472621 00000 n -0000472771 00000 n -0000475080 00000 n -0000475055 00000 n -0000479503 00000 n -0000479474 00000 n -0000481615 00000 n -0000485887 00000 n -0000485858 00000 n -0000491404 00000 n -0000491291 00000 n -0000495772 00000 n -0000495743 00000 n -0000501277 00000 n -0000500991 00000 n -0000508253 00000 n -0000508022 00000 n -0000516591 00000 n -0000516326 00000 n -0000520626 00000 n -0000520597 00000 n -0000535747 00000 n -0000537953 00000 n -0000538075 00000 n -0000538201 00000 n -0000538300 00000 n -0000538382 00000 n -0000549973 00000 n -0000557862 00000 n -0000557903 00000 n -0000557943 00000 n -0000558135 00000 n -trailer -<< -/Size 1629 -/Root 1627 0 R -/Info 1628 0 R -/ID [ ] ->> -startxref -558299 -%%EOF diff --git a/Grammars/Oberon10Independent (by Juliet)/GPLex_GPPG/Doc/gppg.pdf b/Grammars/Oberon10Independent (by Juliet)/GPLex_GPPG/Doc/gppg.pdf deleted file mode 100644 index a127aaf41..000000000 --- a/Grammars/Oberon10Independent (by Juliet)/GPLex_GPPG/Doc/gppg.pdf +++ /dev/null @@ -1,6156 +0,0 @@ -%PDF-1.4 -5 0 obj -<< /S /GoTo /D (section.1) >> -endobj -8 0 obj -(Overview) -endobj -9 0 obj -<< /S /GoTo /D (subsection.1.1) >> -endobj -12 0 obj -(Installing GPPG) -endobj -13 0 obj -<< /S /GoTo /D (subsection.1.2) >> -endobj -16 0 obj -(Running GPPG) -endobj -17 0 obj -<< /S /GoTo /D (subsection.1.3) >> -endobj -20 0 obj -(Using GPPG Parsers) -endobj -21 0 obj -<< /S /GoTo /D (subsection.1.4) >> -endobj -24 0 obj -(Outputs) -endobj -25 0 obj -<< /S /GoTo /D (subsection.1.5) >> -endobj -28 0 obj -(Scanner Interface) -endobj -29 0 obj -<< /S /GoTo /D (subsection.1.6) >> -endobj -32 0 obj -(Instantiating the Parser Object) -endobj -33 0 obj -<< /S /GoTo /D (subsection.1.7) >> -endobj -36 0 obj -(Using GPPG Parsers with Non-LEX Scanners) -endobj -37 0 obj -<< /S /GoTo /D (section.2) >> -endobj -40 0 obj -(Input Grammar) -endobj -41 0 obj -<< /S /GoTo /D (subsection.2.1) >> -endobj -44 0 obj -(Input Grammar Structure) -endobj -45 0 obj -<< /S /GoTo /D (subsection.2.2) >> -endobj -48 0 obj -(Declarations) -endobj -49 0 obj -<< /S /GoTo /D (subsubsection.2.2.1) >> -endobj -52 0 obj -(Declaring Tokens) -endobj -53 0 obj -<< /S /GoTo /D (subsubsection.2.2.2) >> -endobj -56 0 obj -(Token Precedence) -endobj -57 0 obj -<< /S /GoTo /D (subsubsection.2.2.3) >> -endobj -60 0 obj -(Declaring Non-Terminal Symbol Types) -endobj -61 0 obj -<< /S /GoTo /D (subsection.2.3) >> -endobj -64 0 obj -(Extensions to the Declaration Grammar) -endobj -65 0 obj -<< /S /GoTo /D (subsubsection.2.3.1) >> -endobj -68 0 obj -(Declaring an Output Filepath) -endobj -69 0 obj -<< /S /GoTo /D (subsubsection.2.3.2) >> -endobj -72 0 obj -(Creating a Token Definitions File) -endobj -73 0 obj -<< /S /GoTo /D (subsubsection.2.3.3) >> -endobj -76 0 obj -(Choosing the Namespace ---) -endobj -77 0 obj -<< /S /GoTo /D (subsubsection.2.3.4) >> -endobj -80 0 obj -(Naming Types) -endobj -81 0 obj -<< /S /GoTo /D (subsubsection.2.3.5) >> -endobj -84 0 obj -(Defining a Semantic Value Type) -endobj -85 0 obj -<< /S /GoTo /D (subsubsection.2.3.6) >> -endobj -88 0 obj -(Choosing the Semantic Value Type Name ---) -endobj -89 0 obj -<< /S /GoTo /D (subsubsection.2.3.7) >> -endobj -92 0 obj -(Choosing the Location Type Name ---) -endobj -93 0 obj -<< /S /GoTo /D (subsubsection.2.3.8) >> -endobj -96 0 obj -(Partial Types) -endobj -97 0 obj -<< /S /GoTo /D (subsubsection.2.3.9) >> -endobj -100 0 obj -(Using Declarations ---) -endobj -101 0 obj -<< /S /GoTo /D (subsubsection.2.3.10) >> -endobj -104 0 obj -(Colorizing Scanners and maxParseToken) -endobj -105 0 obj -<< /S /GoTo /D (subsubsection.2.3.11) >> -endobj -108 0 obj -(Colorizing Scanners and Managed Babel) -endobj -109 0 obj -<< /S /GoTo /D (subsection.2.4) >> -endobj -112 0 obj -(Production Rules) -endobj -113 0 obj -<< /S /GoTo /D (subsubsection.2.4.1) >> -endobj -116 0 obj -(Semantic Action Syntax) -endobj -117 0 obj -<< /S /GoTo /D (subsubsection.2.4.2) >> -endobj -120 0 obj -(Controlling Precedence) -endobj -121 0 obj -<< /S /GoTo /D (subsubsection.2.4.3) >> -endobj -124 0 obj -(Mid-Rule Actions) -endobj -125 0 obj -<< /S /GoTo /D (subsubsection.2.4.4) >> -endobj -128 0 obj -(Right-Hand-Side Syntax) -endobj -129 0 obj -<< /S /GoTo /D (subsection.2.5) >> -endobj -132 0 obj -(Semantic Actions) -endobj -133 0 obj -<< /S /GoTo /D (subsubsection.2.5.1) >> -endobj -136 0 obj -(Default Semantic Action) -endobj -137 0 obj -<< /S /GoTo /D (subsection.2.6) >> -endobj -140 0 obj -(Location Tracking) -endobj -141 0 obj -<< /S /GoTo /D (subsubsection.2.6.1) >> -endobj -144 0 obj -(Location Actions) -endobj -145 0 obj -<< /S /GoTo /D (subsubsection.2.6.2) >> -endobj -148 0 obj -(Default Location Type) -endobj -149 0 obj -<< /S /GoTo /D (subsubsection.2.6.3) >> -endobj -152 0 obj -(Supplying a Different Location Type) -endobj -153 0 obj -<< /S /GoTo /D (subsubsection.2.6.4) >> -endobj -156 0 obj -(Special Behavior for Empty Productions) -endobj -157 0 obj -<< /S /GoTo /D (section.3) >> -endobj -160 0 obj -(Errors, Diagnostics and Warnings) -endobj -161 0 obj -<< /S /GoTo /D (subsection.3.1) >> -endobj -164 0 obj -(Error Messages) -endobj -165 0 obj -<< /S /GoTo /D (subsubsection.3.1.1) >> -endobj -168 0 obj -(Non-Terminating Diagnostics) -endobj -169 0 obj -<< /S /GoTo /D (subsection.3.2) >> -endobj -172 0 obj -(Warning Messages) -endobj -173 0 obj -<< /S /GoTo /D (subsection.3.3) >> -endobj -176 0 obj -(Non-Terminating Grammars) -endobj -177 0 obj -<< /S /GoTo /D (subsection.3.4) >> -endobj -180 0 obj -(Parser Conflict Messages) -endobj -181 0 obj -<< /S /GoTo /D (subsubsection.3.4.1) >> -endobj -184 0 obj -(Reduce/Reduce Conflicts) -endobj -185 0 obj -<< /S /GoTo /D (subsubsection.3.4.2) >> -endobj -188 0 obj -(Shift/Reduce Conflicts) -endobj -189 0 obj -<< /S /GoTo /D (subsection.3.5) >> -endobj -192 0 obj -(Conflict Diagnostics) -endobj -193 0 obj -<< /S /GoTo /D (subsubsection.3.5.1) >> -endobj -196 0 obj -(The Report Option) -endobj -197 0 obj -<< /S /GoTo /D (section.4) >> -endobj -200 0 obj -(Error Handling in GPPG Parsers) -endobj -201 0 obj -<< /S /GoTo /D (subsection.4.1) >> -endobj -204 0 obj -(Parser Action) -endobj -205 0 obj -<< /S /GoTo /D (subsection.4.2) >> -endobj -208 0 obj -(Overriding the Default Error Handling) -endobj -209 0 obj -<< /S /GoTo /D (section.5) >> -endobj -212 0 obj -(Advanced Topics) -endobj -213 0 obj -<< /S /GoTo /D (subsection.5.1) >> -endobj -216 0 obj -(Runtime Shift-Reduce Engine) -endobj -217 0 obj -<< /S /GoTo /D (subsubsection.5.1.1) >> -endobj -220 0 obj -(Using the Runtime DLL) -endobj -221 0 obj -<< /S /GoTo /D (subsubsection.5.1.2) >> -endobj -224 0 obj -(Using the Source Code File) -endobj -225 0 obj -<< /S /GoTo /D (subsection.5.2) >> -endobj -228 0 obj -(Applications with Multiple Parsers) -endobj -229 0 obj -<< /S /GoTo /D (subsubsection.5.2.1) >> -endobj -232 0 obj -(Parsers in Separate Assemblies) -endobj -233 0 obj -<< /S /GoTo /D (subsubsection.5.2.2) >> -endobj -236 0 obj -(All Parsers in a Shared Assembly) -endobj -237 0 obj -<< /S /GoTo /D (subsubsection.5.2.3) >> -endobj -240 0 obj -(Single-Assembly Applications) -endobj -241 0 obj -<< /S /GoTo /D (subsection.5.3) >> -endobj -244 0 obj -(Multiple Parser Instances) -endobj -245 0 obj -<< /S /GoTo /D (subsubsection.5.3.1) >> -endobj -248 0 obj -(Sharing Parser Tables) -endobj -249 0 obj -<< /S /GoTo /D (section.6) >> -endobj -252 0 obj -(Notes) -endobj -253 0 obj -<< /S /GoTo /D (subsection.6.1) >> -endobj -256 0 obj -(Copyright) -endobj -257 0 obj -<< /S /GoTo /D (subsection.6.2) >> -endobj -260 0 obj -(Bug Reports) -endobj -261 0 obj -<< /S /GoTo /D (section.7) >> -endobj -264 0 obj -(Examples) -endobj -265 0 obj -<< /S /GoTo /D (subsection.7.1) >> -endobj -268 0 obj -(Integer Calculator) -endobj -269 0 obj -<< /S /GoTo /D (subsubsection.7.1.1) >> -endobj -272 0 obj -(Running the Program) -endobj -273 0 obj -<< /S /GoTo /D (subsection.7.2) >> -endobj -276 0 obj -(Real Number Calculator) -endobj -277 0 obj -<< /S /GoTo /D (subsubsection.7.2.1) >> -endobj -280 0 obj -(Running the Program) -endobj -281 0 obj -<< /S /GoTo /D (section.8) >> -endobj -284 0 obj -(Appendix A: GPPG Special Symbols) -endobj -285 0 obj -<< /S /GoTo /D (subsection.8.1) >> -endobj -288 0 obj -(Keyword Commands) -endobj -289 0 obj -<< /S /GoTo /D (subsection.8.2) >> -endobj -292 0 obj -(Semantic Action Symbols) -endobj -293 0 obj -<< /S /GoTo /D (section.9) >> -endobj -296 0 obj -(Appendix B: Shift-Reduce Parsing Refresher) -endobj -297 0 obj -<< /S /GoTo /D (subsection.9.1) >> -endobj -300 0 obj -(Some Definitions) -endobj -301 0 obj -<< /S /GoTo /D (subsection.9.2) >> -endobj -304 0 obj -(How Shift-Reduce Parsing Works) -endobj -305 0 obj -<< /S /GoTo /D (subsection.9.3) >> -endobj -308 0 obj -(What Can Go Wrong) -endobj -309 0 obj -<< /S /GoTo /D [310 0 R /Fit ] >> -endobj -312 0 obj << -/Length 1664 -/Filter /FlateDecode ->> -stream -xڥXێH}WXG"M_}yE0,^$ࡓxk;k; vL ]!nWu]OUu8HH2E,ϳhhLK& jS-\rs+rxD$Lf 1|;{BHL -Es4nm1_H뛛k ۶+@)ꢵ}?޾"5S:q"%3"s?pqjB5w,̅1 weS{=ijߖ_J.be@'&b S&x2N}l>?C\}C~K*"-XSTL>#sEcL2; d.G)炈L/g)kdfJ%L8~_ތ@GΤJ*ǝW#9#Äv,ç̀n7i#NS0"1ށ]n|sŵJ "T1ݷehۣq]a Kd0O>h&ı ɡT`o=P#9|enqmp @8+%ִ=blKi\&VNI"R~uWhoFMߗG3N*_,v" "^-KMgE"ynIus g@HwNbdP{όP0ˆtТ.bla.5aFIk2c[yb?4˪%Q<9OLѕڳ!z'A -" 8‹}UˇZ1Pd5Xx{)DaZIIZiRp_y6R?M(!b -=yYfZwX$ߍc{wp>{H>,d~7hQak)5$lxF8hqsz@gN]1J? -H E/WR=&:+lp"~}-7M?u"wO ݂>-u$̂-|ڗfPH<Ȋ݃_>fMAyt07J0w0{f9͎nE}* -}[,&L&|&I &aUIlxJII E綧XBvݳsn >3˻ݲh0HhJևqӢ(G7L  -O}^uz2r[1T?no0=RwdR{edީ3˻0_hFx%cH|- &?GF]%3.!exhy&&Z] xPui7uӕ{pC管~H|oZ㜮!\L'֏:G.Ȧf-!i.4דzO -k.(oW0thZeGqB9əI$fP/@N+endstream -endobj -310 0 obj << -/Type /Page -/Contents 312 0 R -/Resources 311 0 R -/MediaBox [0 0 595.276 841.89] -/Parent 319 0 R ->> endobj -313 0 obj << -/D [310 0 R /XYZ 125.858 740.998 null] ->> endobj -314 0 obj << -/D [310 0 R /XYZ 125.858 716.092 null] ->> endobj -311 0 obj << -/Font << /F32 316 0 R /F34 318 0 R >> -/ProcSet [ /PDF /Text ] ->> endobj -322 0 obj << -/Length 2512 -/Filter /FlateDecode ->> -stream -xr$Bg\^VYl\,Eᮕ04 N*>rE7C#U9Y]W3>o~&b4Lg_i1Ymhvup?/߽]L9WJh*政|gg3PԶfMÛ#]q˄Zvm]TJ&d*8wMoTVc},/\k6f -cնk:~PZŸN~>?}xmY3!bL/C׺53U5λB}A=ҩ 4jԄ*.G?n:JG;iIJ2-yFp9j\;ނQfϥ87)'ŒͶl'S?ѰsߠIP>:巎]U4zC#A8d)jTjƫ&"7vsfN2OaFpEH%  %"B[NVݢBW܃nEWvMNTl2M* -JTK5 9FR+fxv - :sfaFmRǎюѴsNBijZJ .*&MwBǕ*(7mF~>Rؕ|mvnnSLqES/P)&WciHRK9nLXyG/+AQ&p8IR-$ԄU ;2Z2UD<KUg׿Wy -k=G݋1"ޅ(9E,řVv}XϦ*LfJ$ZR) R!DtSJO0_M\8.VDqp^ywnÒ@p ')90Q[gT9.kzo0p#l{.2H‰ OB.d".Mt}( _-I{ׄ:6SjɤB&LHĄ&dV@ rȸrMzƗp|>JrjFCt\_ua)9x518l@PZ@ fu.Wf=>اQJ"&p$MJr@E:&IY\NCVfI(,bh9gQ!,`lIv/ڛf"WbUzqvQui)EWO97t=Fʁ{rNKe㆔'6OoW뭟Ay4;XW8pӕK_Wpk&oK|\>۟*Ч&O zցKO %RVT&|>"Ia||gbch#ȞHtwV 9C [GIΤO.w4+̔!)9`gdDTuj҄ .xp-kVٔYU~ż{hSGqsi ZDp#`HR"q!}g<+|^YWYm4d _Y^zY\uq֚XLr0B),/_k=ɚBx-+endstream -endobj -321 0 obj << -/Type /Page -/Contents 322 0 R -/Resources 320 0 R -/MediaBox [0 0 595.276 841.89] -/Parent 319 0 R -/Annots [ 330 0 R 331 0 R 332 0 R 333 0 R 334 0 R 335 0 R 336 0 R 337 0 R 338 0 R 339 0 R 340 0 R 341 0 R 342 0 R 343 0 R 344 0 R 345 0 R 346 0 R 347 0 R 348 0 R 349 0 R 350 0 R 351 0 R 352 0 R 353 0 R 354 0 R 355 0 R 356 0 R 357 0 R 358 0 R 359 0 R 360 0 R 361 0 R 362 0 R 363 0 R 364 0 R 365 0 R 366 0 R 367 0 R 368 0 R 369 0 R 370 0 R 371 0 R 372 0 R 373 0 R 374 0 R 375 0 R ] ->> endobj -330 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [124.862 682.682 182.545 691.723] -/Subtype /Link -/A << /S /GoTo /D (section.1) >> ->> endobj -331 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [139.806 668.754 231.402 679.698] -/Subtype /Link -/A << /S /GoTo /D (subsection.1.1) >> ->> endobj -332 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [139.806 656.799 228.084 667.743] -/Subtype /Link -/A << /S /GoTo /D (subsection.1.2) >> ->> endobj -333 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [139.806 644.844 248.677 655.788] -/Subtype /Link -/A << /S /GoTo /D (subsection.1.3) >> ->> endobj -334 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [139.806 632.889 196.264 643.832] -/Subtype /Link -/A << /S /GoTo /D (subsection.1.4) >> ->> endobj -335 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [139.806 622.951 234.59 631.877] -/Subtype /Link -/A << /S /GoTo /D (subsection.1.5) >> ->> endobj -336 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [139.806 608.978 285.478 619.922] -/Subtype /Link -/A << /S /GoTo /D (subsection.1.6) >> ->> endobj -337 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [139.806 597.023 348.452 607.967] -/Subtype /Link -/A << /S /GoTo /D (subsection.1.7) >> ->> endobj -338 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [124.862 575.235 211.257 586.119] -/Subtype /Link -/A << /S /GoTo /D (section.2) >> ->> endobj -339 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [139.806 563.15 265.424 574.094] -/Subtype /Link -/A << /S /GoTo /D (subsection.2.1) >> ->> endobj -340 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [139.806 553.133 215.063 562.139] -/Subtype /Link -/A << /S /GoTo /D (subsection.2.2) >> ->> endobj -341 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [162.72 539.24 266.799 550.184] -/Subtype /Link -/A << /S /GoTo /D (subsubsection.2.2.1) >> ->> endobj -342 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [162.72 529.327 269.001 538.228] -/Subtype /Link -/A << /S /GoTo /D (subsubsection.2.2.2) >> ->> endobj -343 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [162.72 515.329 354.2 526.273] -/Subtype /Link -/A << /S /GoTo /D (subsubsection.2.2.3) >> ->> endobj -344 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [139.806 505.392 322.977 514.318] -/Subtype /Link -/A << /S /GoTo /D (subsection.2.3) >> ->> endobj -345 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [162.72 491.419 313.085 502.363] -/Subtype /Link -/A << /S /GoTo /D (subsubsection.2.3.1) >> ->> endobj -346 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [162.72 479.464 329.632 490.408] -/Subtype /Link -/A << /S /GoTo /D (subsubsection.2.3.2) >> ->> endobj -347 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [162.72 467.509 310.315 478.453] -/Subtype /Link -/A << /S /GoTo /D (subsubsection.2.3.3) >> ->> endobj -348 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [162.72 455.554 254.734 466.497] -/Subtype /Link -/A << /S /GoTo /D (subsubsection.2.3.4) >> ->> endobj -349 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [162.72 443.598 325.289 454.542] -/Subtype /Link -/A << /S /GoTo /D (subsubsection.2.3.5) >> ->> endobj -350 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [162.72 431.643 375.102 442.587] -/Subtype /Link -/A << /S /GoTo /D (subsubsection.2.3.6) >> ->> endobj -351 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [162.72 419.688 348.263 430.632] -/Subtype /Link -/A << /S /GoTo /D (subsubsection.2.3.7) >> ->> endobj -352 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [162.72 407.733 248.498 418.677] -/Subtype /Link -/A << /S /GoTo /D (subsubsection.2.3.8) >> ->> endobj -353 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [162.72 395.778 285.688 406.722] -/Subtype /Link -/A << /S /GoTo /D (subsubsection.2.3.9) >> ->> endobj -354 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [162.72 383.823 359.311 394.791] -/Subtype /Link -/A << /S /GoTo /D (subsubsection.2.3.10) >> ->> endobj -355 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [162.72 371.867 360.208 382.836] -/Subtype /Link -/A << /S /GoTo /D (subsubsection.2.3.11) >> ->> endobj -356 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [139.806 361.93 233.623 370.856] -/Subtype /Link -/A << /S /GoTo /D (subsection.2.4) >> ->> endobj -357 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [162.72 347.957 293.449 358.901] -/Subtype /Link -/A << /S /GoTo /D (subsubsection.2.4.1) >> ->> endobj -358 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [162.72 336.002 290.39 346.946] -/Subtype /Link -/A << /S /GoTo /D (subsubsection.2.4.2) >> ->> endobj -359 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [162.72 326.064 268.821 334.991] -/Subtype /Link -/A << /S /GoTo /D (subsubsection.2.4.3) >> ->> endobj -360 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [162.72 312.092 294.833 323.035] -/Subtype /Link -/A << /S /GoTo /D (subsubsection.2.4.4) >> ->> endobj -361 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [139.806 302.074 235.277 311.08] -/Subtype /Link -/A << /S /GoTo /D (subsection.2.5) >> ->> endobj -362 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [162.72 290.119 295.55 299.125] -/Subtype /Link -/A << /S /GoTo /D (subsubsection.2.5.1) >> ->> endobj -363 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [139.806 276.226 238.236 287.17] -/Subtype /Link -/A << /S /GoTo /D (subsection.2.6) >> ->> endobj -364 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [162.72 266.288 265.494 275.215] -/Subtype /Link -/A << /S /GoTo /D (subsubsection.2.6.1) >> ->> endobj -365 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [162.72 252.316 286.445 263.26] -/Subtype /Link -/A << /S /GoTo /D (subsubsection.2.6.2) >> ->> endobj -366 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [162.72 240.361 343.301 251.304] -/Subtype /Link -/A << /S /GoTo /D (subsubsection.2.6.3) >> ->> endobj -367 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [162.72 228.405 357.996 239.349] -/Subtype /Link -/A << /S /GoTo /D (subsubsection.2.6.4) >> ->> endobj -368 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [124.862 206.617 286.395 217.501] -/Subtype /Link -/A << /S /GoTo /D (section.3) >> ->> endobj -369 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [139.806 194.532 226.958 205.476] -/Subtype /Link -/A << /S /GoTo /D (subsection.3.1) >> ->> endobj -370 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [162.72 182.577 315.157 193.521] -/Subtype /Link -/A << /S /GoTo /D (subsubsection.3.1.1) >> ->> endobj -371 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [139.806 170.622 239.999 181.566] -/Subtype /Link -/A << /S /GoTo /D (subsection.3.2) >> ->> endobj -372 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [139.806 158.667 278.285 169.611] -/Subtype /Link -/A << /S /GoTo /D (subsection.3.3) >> ->> endobj -373 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [139.806 146.712 265.284 157.656] -/Subtype /Link -/A << /S /GoTo /D (subsection.3.4) >> ->> endobj -374 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [162.72 136.774 297.593 145.7] -/Subtype /Link -/A << /S /GoTo /D (subsubsection.3.4.1) >> ->> endobj -375 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [162.72 124.819 287.092 133.745] -/Subtype /Link -/A << /S /GoTo /D (subsubsection.3.4.2) >> ->> endobj -323 0 obj << -/D [321 0 R /XYZ 125.858 740.998 null] ->> endobj -329 0 obj << -/D [321 0 R /XYZ 125.858 695.552 null] ->> endobj -320 0 obj << -/Font << /F41 326 0 R /F32 316 0 R /F42 328 0 R /F34 318 0 R >> -/ProcSet [ /PDF /Text ] ->> endobj -378 0 obj << -/Length 2446 -/Filter /FlateDecode ->> -stream -xMs6+|OyflǻNfR*hY+*J4HE=$ iKh|%Q&, 2}6_KG58I`~Jгd_4[kt{3'L&OW/wg8u5I9.gʈTf 鄝"e M>oI{ڏeX՛m9ߘ#2$9eN im&_d(=LC$LeT8z?=b]7~QE(iqFc/'ذ&U+'L~ /fLn:2?bYVݧꪂeplUښz,#& $,Mu"G,x -#dRvن)-.]B 2JF6meѐ|!r+ 64?}18)>ֶP|,ڐ-m5\ ;PPox y@{rkSD7&\,y>glTIW<dTL,}mOvrW,vs?z,+3y"I g¼736Dcr9"ISտluEeP!lx{;-Sk_teoGAyC)Gz׸tP/+Hr 2!rCFQ,XP9sӞLu+aqz,\6ۧOfw<X*7# -|i&!r>s"Jam)yo- eYÿeΊ!CÑFq$$Gy$Rb<!ܵyӶ,"@-g'KÎ -iAh`r"iFR'40,I_fK)_4b#pEyFxBR,n3U'7f ;0uIS^z87LsC|P /ub -`TԎ07 -<<=C_)nzR .s_~fܔOD!;owJhpx8Fpp6x8r.09WoaLĆo-lӎ3ӺqEpbr얔$wWƲTs ` r[[A)z13B_ oΤ "ǵ,,PK=?? j;|s> GB`r"-Ut\+ry9O2&N9q㸼MV>.-*3))If&7 <=Cהpm hw3fr^բf? sS -|Nżt:}^KsJG\8TJJiLnnwzʫ|uz:gd~` /gӆ* s˔,.R/M:yqbQXByb{r DO-ƚ]#;^xho'3-SvrS~Z1oIªvΜq JŃڴAA B|@h Хc|UVJ6r~5=r1FqLx*1!r@Vro]lumq4i7b((.trݾi͞P3Hb/iޖ~Gxe î̚")I:c/)誔 R QFC{_Уj=ӖSxܦsmt7\q8p "(|q[ş{~Z'l{8 Wsl5ϖfݶ?lohԮׅ=^\ڗ+3bUT%,[qSb!@SxW/ -^{x\$9O2IG’O]Zz1 *8ӎgb g96402sհn*o\ N.nSOqGFQhAC4LCӜd:Z~8/Gd0̲iEizD݈pQDm@P9O$RFXۀ\Dە@y XLm`z8SL΃A<@G`aC:l$rf 5mx:z풌#heog8EPP9,&Q1y8eHh͡RXƼ -3y2@Z/t{8]LE<]puk;6^:Nsy~U1.f-!҄œY!lo':~y'a $J-o&wCStSXs_}q݆Lu7 <}&"ͮ -5oA9$)endstream -endobj -377 0 obj << -/Type /Page -/Contents 378 0 R -/Resources 376 0 R -/MediaBox [0 0 595.276 841.89] -/Parent 319 0 R -/Annots [ 380 0 R 381 0 R 382 0 R 385 0 R 386 0 R 387 0 R 388 0 R 389 0 R 390 0 R 391 0 R 392 0 R 393 0 R 394 0 R 395 0 R 396 0 R 397 0 R 398 0 R 399 0 R 400 0 R 401 0 R 402 0 R 403 0 R 404 0 R 405 0 R 406 0 R 407 0 R 408 0 R 409 0 R 410 0 R 411 0 R 413 0 R 414 0 R 415 0 R 416 0 R 417 0 R 418 0 R 419 0 R 420 0 R 421 0 R 422 0 R 423 0 R ] ->> endobj -380 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [139.806 702.976 246.355 713.92] -/Subtype /Link -/A << /S /GoTo /D (subsection.3.5) >> ->> endobj -381 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [162.72 691.021 271.86 701.964] -/Subtype /Link -/A << /S /GoTo /D (subsubsection.3.5.1) >> ->> endobj -382 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [124.862 669.232 283.207 680.116] -/Subtype /Link -/A << /S /GoTo /D (section.4) >> ->> endobj -385 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [139.806 659.085 219.068 668.091] -/Subtype /Link -/A << /S /GoTo /D (subsection.4.1) >> ->> endobj -386 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [139.806 645.192 318.295 656.136] -/Subtype /Link -/A << /S /GoTo /D (subsection.4.2) >> ->> endobj -387 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [124.862 623.404 214.126 634.288] -/Subtype /Link -/A << /S /GoTo /D (section.5) >> ->> endobj -388 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [139.806 611.319 284.811 622.263] -/Subtype /Link -/A << /S /GoTo /D (subsection.5.1) >> ->> endobj -389 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [162.72 599.364 292.661 610.308] -/Subtype /Link -/A << /S /GoTo /D (subsubsection.5.1.1) >> ->> endobj -390 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [162.72 587.409 306.729 598.353] -/Subtype /Link -/A << /S /GoTo /D (subsubsection.5.1.2) >> ->> endobj -391 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [139.806 575.454 303.759 586.398] -/Subtype /Link -/A << /S /GoTo /D (subsection.5.2) >> ->> endobj -392 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [162.72 563.499 320.676 574.443] -/Subtype /Link -/A << /S /GoTo /D (subsubsection.5.2.1) >> ->> endobj -393 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [162.72 551.544 330.091 562.487] -/Subtype /Link -/A << /S /GoTo /D (subsubsection.5.2.2) >> ->> endobj -394 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [162.72 539.588 318.634 550.532] -/Subtype /Link -/A << /S /GoTo /D (subsubsection.5.2.3) >> ->> endobj -395 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [139.806 527.633 265.832 538.577] -/Subtype /Link -/A << /S /GoTo /D (subsection.5.3) >> ->> endobj -396 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [162.72 515.678 283.078 526.622] -/Subtype /Link -/A << /S /GoTo /D (subsubsection.5.3.1) >> ->> endobj -397 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [124.862 495.733 165.589 504.774] -/Subtype /Link -/A << /S /GoTo /D (section.6) >> ->> endobj -398 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [139.806 481.805 205.021 492.749] -/Subtype /Link -/A << /S /GoTo /D (subsection.6.1) >> ->> endobj -399 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [139.806 469.85 214.804 480.794] -/Subtype /Link -/A << /S /GoTo /D (subsection.6.2) >> ->> endobj -400 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [124.862 448.062 183.312 458.946] -/Subtype /Link -/A << /S /GoTo /D (section.7) >> ->> endobj -401 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [139.806 435.977 236.771 446.921] -/Subtype /Link -/A << /S /GoTo /D (subsection.7.1) >> ->> endobj -402 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [162.72 424.022 282.38 434.966] -/Subtype /Link -/A << /S /GoTo /D (subsubsection.7.1.1) >> ->> endobj -403 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [139.806 414.084 262.106 423.01] -/Subtype /Link -/A << /S /GoTo /D (subsection.7.2) >> ->> endobj -404 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [162.72 400.112 282.38 411.055] -/Subtype /Link -/A << /S /GoTo /D (subsubsection.7.2.1) >> ->> endobj -405 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [124.862 378.323 296.537 389.207] -/Subtype /Link -/A << /S /GoTo /D (section.8) >> ->> endobj -406 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [139.806 366.239 249.165 377.182] -/Subtype /Link -/A << /S /GoTo /D (subsection.8.1) >> ->> endobj -407 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [139.806 354.283 268.771 365.227] -/Subtype /Link -/A << /S /GoTo /D (subsection.8.2) >> ->> endobj -408 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [124.862 332.495 332.76 343.379] -/Subtype /Link -/A << /S /GoTo /D (section.9) >> ->> endobj -409 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [139.806 322.348 234.181 331.354] -/Subtype /Link -/A << /S /GoTo /D (subsection.9.1) >> ->> endobj -410 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [139.806 308.455 299.376 319.399] -/Subtype /Link -/A << /S /GoTo /D (subsection.9.2) >> ->> endobj -411 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [139.806 296.5 249.653 307.444] -/Subtype /Link -/A << /S /GoTo /D (subsection.9.3) >> ->> endobj -413 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [139.806 240.61 251.854 251.554] -/Subtype /Link -/A << /S /GoTo /D (figure.1) >> ->> endobj -414 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [139.806 230.632 276.921 239.598] -/Subtype /Link -/A << /S /GoTo /D (figure.2) >> ->> endobj -415 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [139.806 216.699 324.461 227.643] -/Subtype /Link -/A << /S /GoTo /D (figure.3) >> ->> endobj -416 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [139.806 206.787 303.789 215.688] -/Subtype /Link -/A << /S /GoTo /D (figure.4) >> ->> endobj -417 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [139.806 194.807 254.784 203.733] -/Subtype /Link -/A << /S /GoTo /D (figure.5) >> ->> endobj -418 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [139.806 182.851 314.409 191.778] -/Subtype /Link -/A << /S /GoTo /D (figure.6) >> ->> endobj -419 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [139.806 170.896 303.909 179.822] -/Subtype /Link -/A << /S /GoTo /D (figure.7) >> ->> endobj -420 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [139.806 156.924 314.798 167.867] -/Subtype /Link -/A << /S /GoTo /D (figure.8) >> ->> endobj -421 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [139.806 144.968 373.467 155.937] -/Subtype /Link -/A << /S /GoTo /D (figure.9) >> ->> endobj -422 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [139.806 133.013 289.234 143.982] -/Subtype /Link -/A << /S /GoTo /D (figure.10) >> ->> endobj -423 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [139.806 123.036 326.025 132.027] -/Subtype /Link -/A << /S /GoTo /D (figure.11) >> ->> endobj -379 0 obj << -/D [377 0 R /XYZ 125.858 740.998 null] ->> endobj -412 0 obj << -/D [377 0 R /XYZ 125.858 252.799 null] ->> endobj -376 0 obj << -/Font << /F41 326 0 R /F32 316 0 R /F42 328 0 R /F45 384 0 R /F34 318 0 R >> -/ProcSet [ /PDF /Text ] ->> endobj -437 0 obj << -/Length 3159 -/Filter /FlateDecode ->> -stream -xڝZ۶fRg?t&vlOZqkNR$aL*I|뻋) v.Nq' Y&wqY&w;w/[k6E^ܿ ]H='=~\FpW߮Cw~y燿޿UZ -g RF"~͔Iy'h%_ւtbK~(=u g+V74j7pW嗓^UfJW5 ڣ]Vt6PuõaFRY1 Dp2=χd6M(@4 őt8Jo9;q|ǣɏnqs;')Ք-IZWkW_W~0a߀(4g8U&*+wনA0k˰ZX$?̨w܂Ҟ/-m710j2| TxU9izWsU=6 Z{3hNBtjUdCԺx SNƌtEBBSƫSFrTìeݫCy `LNylΝT5n^L[Y5C;P3Xt. :}&D /yro_gm#Q՟;a XģvQG%GQWF&oDbo:q,U} -TMLf|uFMLlB%,HB\.Ϯ0H!dt)$,CSW*DބIL|@h[)%\klR7v'X/ Fe.m;1M~v\ybOD)&;CGi^K`>a@B&!y.hg@%R)E`ތ?;,2[`Bخ("qXN>`RyT:oUH%JΨ$2>p`LGKǞ̫)]In/uC,ȗX.ǡGL\fyP - λ T>U*bq:H5ɏYyEubDţ -#.)x4`kс[ yu~ز# P*vW*1‡S+S=4FTfȞjJD<TD'%oA@?mN^)fW%su;hFn!!"ph]I(mĶ%2bQnGyt%|6:N@!v x r0h|Dv *BO&n??,zXP*@2R IaS^6_?[V@ -{AkJnh"^o4:#jw!;tQ5iR">@@ridt'0Sd dtSH' -A9'Onf>DwAFB͒ٞlvg(k -<ȏ@{cLtCܯy e~e -= -;[p:L? q4hKr pےוYJ|5zΌvXC+04hf`Mm=8f-/@gSE$}%<ߟv HͭYrG6$q91Sȸy:}e@| Y'~Gɴ4"0 l݈g(lu]ͺ@' ~i,M1u4+}?<.Hļ|?9?eM&Hy'|4{Rc{ٙf8A")w-hGkRU@+5pcj64[`BUQ'E4jHEw5Z!Tv-fٵuDͻր==dqN&bX@aWMv<{GAљ Do)t Yp\ -ߎNvLv~w&l>t^ٶFwyhVmOksR,X%=zΖEmɭY%j--Q4v{SMb%ȒlsDinYBK]8拺CT9Lhϩ&6Q@(+}[P5/efYK:-/QZPkϳAٕN*nN17~!;X_:_5lөI'Wk՚R♻kܾ[nM Wסn(C_5r 40fy[ lH]u ٙ\dOX>(xE,KmZ'%j^jjiڮ_J#Sl2ɰ^swP%ٴ (@\I:{`W5j)1.}.'qC7L߈dehAC4`((c/ Կendstream -endobj -436 0 obj << -/Type /Page -/Contents 437 0 R -/Resources 435 0 R -/MediaBox [0 0 595.276 841.89] -/Parent 319 0 R -/Annots [ 439 0 R 440 0 R 443 0 R 444 0 R ] ->> endobj -439 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [198.952 573.113 205.926 584.057] -/Subtype /Link -/A << /S /GoTo /D (section.2) >> ->> endobj -440 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [441.72 561.158 448.694 572.101] -/Subtype /Link -/A << /S /GoTo /D (section.9) >> ->> endobj -443 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [260.811 272.59 287.71 283.459] -/Subtype /Link -/A << /S /GoTo /D (subsubsection.2.3.11) >> ->> endobj -444 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [321.443 240.61 335.889 251.554] -/Subtype /Link -/A << /S /GoTo /D (subsection.3.4) >> ->> endobj -438 0 obj << -/D [436 0 R /XYZ 125.858 740.998 null] ->> endobj -6 0 obj << -/D [436 0 R /XYZ 125.858 716.092 null] ->> endobj -10 0 obj << -/D [436 0 R /XYZ 125.858 547.584 null] ->> endobj -14 0 obj << -/D [436 0 R /XYZ 125.858 380.834 null] ->> endobj -435 0 obj << -/Font << /F41 326 0 R /F32 316 0 R /F42 328 0 R /F34 318 0 R /F45 384 0 R /F57 442 0 R >> -/ProcSet [ /PDF /Text ] ->> endobj -447 0 obj << -/Length 3107 -/Filter /FlateDecode ->> -stream -xڭZKW *zgmld@QԈkdHʳC9 QWE A@AR$I]ȇgF1'D?>y|難D$yx:-z:SRz.O~6&vZo= a"0FD6D P:6DD2|p4(џ%R~ 8DhrZ -.khF83>{O -Èo& >~?zہl21"c,(q/ }ַ<$&V8bm|KKSPQy{)Y3.#> VY΂#&t.@Jkިq}emҶq',-NZNnDn ɇj!:GЎEXDg1=džDgQxߑ;&Yv5n<{* - ww -ݝBe]EL'vrx-{)XOd[HpALJ<=- <8PA[Sh.4;[uuީWƅeռKǡ>cL6Ey=چ{.XWکq_0DoQJїxFG;vm+z)ʒ+>d99дtѪ!9y'~W+LPXRRQPdtMNgoꯨH%>8dޫ8G+r1KPs==ӴaBgϱoS |Z0m\6dMo?S)?^{q-0Ia"TJv skVU@k>'pݟA#r8UL Ҵ5AQ+|"I@ ٱюuYg#/V}פ&{-md|Mspe R+xʮ7yV`P&p>;5>7;kM[`FvǏ{K^+gH < P!5*1̚/xǁZƄcҲ~٩.5e(}tsĊjK" x0~!5ɬqA(n^Ȁp}OT#R㪾?+Y%)&r4N!x^Z o@'.G\s?2`$+`cbZn:-kpӱB,'H\AZBes$N(΀DžHсEi})'znsUw+v%!x`@6O ۵JGm,IiZ<īPrJty6"H9{ f_Ts`4=^k6VR7dx^rgEG `So:z @|w`C{)*ּƈB.ᆟ/ ">N tF%A -kSG@jfiv9~HGJyG2HyqIǥoRra61ADq8j#۱{K4e_ aD:O`m/}ԣ]5LpV}z(-vIiٙ6QN lX{?To`9YP!=Gʌc|KۼNؒ9(qzp=`x8Ǩ\cNԤ;Mxc6خ[Qy[w -7I:]+JAAR)!{6WkbQ3e@hf:}@UV][#]V/!JU͈8vj sv5]\24Fd.ʕEX͎V)CӼNK9PlF6YDb!\𓐯 0G&:(c"Gsp POd݅ -* 0Xr8u>2Zi"TʡB(ˆ{Gd8qQXA_}$t/۞ZGp\ WD.'T1|\{`QROkNÑǰwQmVSt2iyzd.w,|{ߚIRx@Wp| &EFEO;9Ľ6MT݈tu8h ;wu hw1VTM!va/l\;nPKpº,m,L87ņwyLE5Yh4Z6½s|~2jO^Ďforsۚ3rI|o﵅2q( N 5R۪iNA].]TuH(ٮTS -XT)Н؀{`(ڌ1v] - df79'9r:_i endstream -endobj -446 0 obj << -/Type /Page -/Contents 447 0 R -/Resources 445 0 R -/MediaBox [0 0 595.276 841.89] -/Parent 319 0 R -/Annots [ 449 0 R 450 0 R 451 0 R ] ->> endobj -449 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [245.239 577.644 259.685 588.588] -/Subtype /Link -/A << /S /GoTo /D (subsection.3.5) >> ->> endobj -450 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [158.258 494.778 172.704 505.722] -/Subtype /Link -/A << /S /GoTo /D (subsection.2.3) >> ->> endobj -451 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [240.191 482.823 254.636 493.767] -/Subtype /Link -/A << /S /GoTo /D (subsection.1.6) >> ->> endobj -448 0 obj << -/D [446 0 R /XYZ 125.858 740.998 null] ->> endobj -18 0 obj << -/D [446 0 R /XYZ 125.858 564.267 null] ->> endobj -22 0 obj << -/D [446 0 R /XYZ 125.858 285.335 null] ->> endobj -445 0 obj << -/Font << /F41 326 0 R /F32 316 0 R /F57 442 0 R /F34 318 0 R /F42 328 0 R /F45 384 0 R /F52 454 0 R >> -/ProcSet [ /PDF /Text ] ->> endobj -457 0 obj << -/Length 3400 -/Filter /FlateDecode ->> -stream -xk -E6'ɴ(N @\H򁢨;aW3;|8p"wgggf3 bo"$7!<Կy蟏_}&aᧀow< _<~շRY$a;\fp@2 &K 6;ř)5,,:ل,͓}3DL"R$Ld\Gh7sas/l39m"->qDρ,(jDĂi딒 - -.dŸJL'!űf-$qOq 'E=>)P^8~+4ܻ8(Z7vhAw}S_<{giU[VѲ}Q`l9 vi:9 E^jdYE "\p {ž€XzwI-WtϽs]+P2zq{Kڔ`a앢>:MJىD1.L0+ -]$aPe]UKq&[;tlex"3W8]YwCn9ޔw+W#Z`Dk13xaՉd$$Iت9 x5z $k.uAF! Mhh>ЦDM2$M1M~}psB&`  ١{->{ܔwjz  -=99* G?eIBV cn 9>KYp; s}^=yHnl&OS0cb8("GD ! hJkRkJ=Hrs 7^ll8-O|cUb5"C|4\t"[dDL(`}CCU" )>7*ߊ m&NnĸM&#O' Y2iVPnVx;eS$cPS!fHK2 ۾+ v#}-oOWl~8Up]cOwT7 [Xp,S *X]%}>c yZU -˻j9:-r\w+}ɤVT^*W%F%'zsJ/ᣱd#ge}N=+8Ѻq,Weƞ+4☫xE8+@,(P] eY޶~ _xEy*=QJvU ~BEѤ;MŜʕ*wAII* &yFځ{k9mQ-:Nwci=d VSq>S1ܵz}hZ禯D qկcDe'x) [2{K(ί\Y;o]-~Iqꗈks%^Uho_O4׏UMby6&4}]?SZ ΍yVY"%E,Gc)m&NJ'ja?Tse$jPIr_|Ux7YW땗Ghl9oV=ıޤCMqp<7;|Ç9>ME;v 6а`KΕFAIeX'+=z=_x$g0YضITdn;< v{_b!м/lsSHc?_B7>eHl+G=Z{Y=+_>{B&eoOM$3 ,6dPb8/zO};&wzH]ǜ'J/vNjcWOOz T/R+' -|;ڷ,m-cz8>|Mw`2.;9XbugxR(=A|&>]%(ĬkHWy~hi{,YHj]7_ntYQjV* ]M -endstream -endobj -456 0 obj << -/Type /Page -/Contents 457 0 R -/Resources 455 0 R -/MediaBox [0 0 595.276 841.89] -/Parent 319 0 R -/Annots [ 459 0 R 460 0 R 461 0 R ] ->> endobj -459 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [441.279 620.45 448.252 631.394] -/Subtype /Link -/A << /S /GoTo /D (figure.1) >> ->> endobj -460 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [303.282 343.703 310.256 354.672] -/Subtype /Link -/A << /S /GoTo /D (section.5) >> ->> endobj -461 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [461.101 200.864 468.075 211.808] -/Subtype /Link -/A << /S /GoTo /D (figure.2) >> ->> endobj -458 0 obj << -/D [456 0 R /XYZ 125.858 740.998 null] ->> endobj -424 0 obj << -/D [456 0 R /XYZ 273.814 513.033 null] ->> endobj -26 0 obj << -/D [456 0 R /XYZ 125.858 246.443 null] ->> endobj -455 0 obj << -/Font << /F41 326 0 R /F32 316 0 R /F57 442 0 R /F34 318 0 R /F52 454 0 R /F42 328 0 R >> -/ProcSet [ /PDF /Text ] ->> endobj -464 0 obj << -/Length 3342 -/Filter /FlateDecode ->> -stream -xZݏ߿6f!RRZHCؖ#wY;V=\p3E 9Ùo>lO-""Hd9^}udh=/>{E*RgO/joVV.{*7o6[mL"bpY^=D.֥BȈX@G"MꄄS('b{}H и4DI@".v*_5TZ%6W4 - ӕOE-,᫷okFDI7=D Fx1)h* '~G00Bxg4h9~>ܽGT - N~hÍZ&kuc䄊:ajo_H]űPִcE&vLhج.KX7UiiszF"NEشVz%bÙ 483s@?,upMxhfy7B~.;\{ûsvB,\4uOǻ^]p8B8p4]LhP?9`H!*qO$R 1` @|`O^?+Ә -y(AF<@3r':էkepByVhcIsFEBS}ۘlz݈dah}vMk`DZaT -9_(<۩8جzgk Ԅu=YJe | 1RiKc=0p`׺ǍuUPk;g ’K>J'O ijK1JMMʼn>/pi1A-h2;˺ g\XU'~Kw~ p>XЛNsbo|C} N&|VNL©3%JD"vc\{; <|[ԛK]~T>dͧp5W-ܼT/9(i<>н@۫{Hxq]g7~/dx%dzvȗ6BN>ЌG8ג _!|WE.A1dةhzZA[aRb VD6&3xA-s^5׀?uޮHgm(⽽IJc1'⁞6&x ث*Hߗ+0ՏA0qd:Ct s\* F,mq¶>.pŎTkDWU^ATJຒ^O-k#_&i4E𙝮ATP`mMFWLkn(IkI}<$)|]bʝ}Il84྅11sjcf!N#pCvhoѰeU>xȯGU\Ȃ寨$+ݻF:쿁̄2<ό ->RutVzWdkKU:ce8 XTs} Mp@IL8942섳%}ǰ2xnu%vSflex]Ұ)ۄN&:n cc0K,M xp q |u]Ёɧ.N׎|YmDB32o7YquCt3ؾV -xб](rbN h8VqH>۝olHPtX pjSrx6IWUA۶8J*at◘_ӎiSiK,?{`&.g`sbt ]xΉTH%z). ȿO_{qpదyQ3ϧ.JhgP~.^P%u\onֺn\]]q -+x &2[Pr#%\P{O˜NU;coN5;Ĵ7փ]ci($Bd"\Kz5Ndhl-YK !A MYhm  |OpἽ6p˦)YZ - DaH -oqxr7OKW] TYLLJv >(endstream -endobj -463 0 obj << -/Type /Page -/Contents 464 0 R -/Resources 462 0 R -/MediaBox [0 0 595.276 841.89] -/Parent 470 0 R -/Annots [ 466 0 R 467 0 R 468 0 R 469 0 R ] ->> endobj -466 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [388.301 488.993 410.218 499.937] -/Subtype /Link -/A << /S /GoTo /D (subsubsection.2.3.5) >> ->> endobj -467 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [373.4 429.218 380.374 440.161] -/Subtype /Link -/A << /S /GoTo /D (figure.4) >> ->> endobj -468 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [236.093 419.28 250.539 428.206] -/Subtype /Link -/A << /S /GoTo /D (subsection.2.6) >> ->> endobj -469 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [223.65 263.888 230.624 272.789] -/Subtype /Link -/A << /S /GoTo /D (section.4) >> ->> endobj -465 0 obj << -/D [463 0 R /XYZ 125.858 740.998 null] ->> endobj -425 0 obj << -/D [463 0 R /XYZ 261.28 711.29 null] ->> endobj -30 0 obj << -/D [463 0 R /XYZ 125.858 202.493 null] ->> endobj -462 0 obj << -/Font << /F41 326 0 R /F32 316 0 R /F34 318 0 R /F57 442 0 R /F52 454 0 R /F42 328 0 R >> -/ProcSet [ /PDF /Text ] ->> endobj -473 0 obj << -/Length 3549 -/Filter /FlateDecode ->> -stream -xڭZm~@?DjDR/lrE.E@V+K$f;o%KkbEp^:Z",V sj{|HlhWw/^~mS.1Bwz0 }ǻFaëo}a?|c2 3MwMcʀMlUhU(bd(kܰ8]e}BA~ n6}f̩(LV21H;á|?x]"KqY85ghxA2ĘUbG M{Ƣ73H 'ͷۼ1S&2ʸxe-W WMZz)Y z$zcuL%zdu9 QOD0!S!]1 u-lgWT[1\oc~{@[&v -,>I7`mxѫ9kb3@; -S--XoSep# -MO Wlkl-%=E-Qұ+l=$ xz^wJ \$ h,s(Ӓ -ZwH r{tE26>zqG/>2Fm+X}~@zt*NU9v>D\ XV2u({R1j}v~ͼn<Z7*#YEWxYϲ.Q$9h;02T0s~I*v+P;5=総fM;l]%s,1$YDu^ѥ>htcn ID9[YJƸw`z490 u8gUQGZz~q%0?s>f.s#nBS$8w ӟ?@V޴m~@kԲ1?3(CnM 嘔NfFBtcc|!YmUb[{CnQZs<ƩtMПVJ>r*KKӫ9έ5 -^50A.p,~iD'̑˔1gv( `ͼt\bP1J fJ옞@.8ӌa 9τ]2z. cH]:u# b{?U &$ "2myɌ;&6G\ wц-*A|bFk'IQ9^c˂e/mM'\swȕ<~yKJΛ邖848;=/[Mᅓ,ARVG3'g>^IЛT8GĴuGF9yiEQuûuj\g.tD-^|@K||hX\pܵ+Of  Xˑ5Rx4 q4`߿]Xhgw19#]K;0H8Pl?/PN@П[ͳ| 1ACGٝۢU~[oa W"z(h`nlL~ -e$3 -ƉI6X'gqҳoE3_y˥K s^҂Cnz&6| -ٔV->IlT{T?QU - ղPr! ZjՓW\89Cy16;iQ{#iqڹt"F9M̬؇t;} ;ۢLX|!QʮzF -Ji7THq,$j,QWr`z@[2TYgWpWO=W/29HtܛU Z@އ֧޶/M~NBD -~%OŲݾK=((%f38L v8Bw%|YDZ}_ְWk_/b7`*|jX;n٩ uPmaa:%UG;~NJ>{$mǜr=z-kL;T31"JPQw&pԓJ{_jA -{TΆmjSp:v;E 9]WM{W,z5ceE/K-.zeMR\xp &&Iee -`ʤ"?P೔!g e@#dAԼ22 n`+?Jm;1[(ܩ E?(Fˈf7@Ϊ? UetEqP(0@@tqxu"geʉAawpOxB;5E/Kyͮ9[5#bΛmS=C "okj _.R@od=1)@`j.^OHuN|ߜ]뀘Rk|oS @i:H JDd-%pڳyl[Sޫ˛ t2</M3#bPi(4Aj=7~O?f_-ND 4Y#r\@ΐ=B5pBI]H\鈆ÅK7jf֓0_H+5`t҂\p$ɬ83,z˕6Qb$_BAw -̢fP{BGFmWMf']!"> endobj -474 0 obj << -/D [472 0 R /XYZ 125.858 740.998 null] ->> endobj -34 0 obj << -/D [472 0 R /XYZ 125.858 421.81 null] ->> endobj -38 0 obj << -/D [472 0 R /XYZ 125.858 315.828 null] ->> endobj -471 0 obj << -/Font << /F41 326 0 R /F32 316 0 R /F57 442 0 R /F52 454 0 R /F34 318 0 R /F42 328 0 R /F45 384 0 R >> -/ProcSet [ /PDF /Text ] ->> endobj -477 0 obj << -/Length 2304 -/Filter /FlateDecode ->> -stream -xYYܸ~h 0iԙ}]p5{Gbw ѱb:Fjgę`b]+ w\, ],M]Vw'xKna|4J]O}?D{>_~)K87śQ JYUӭY9?fTӏ9Mj=ݥs]guU[zQm_dC`KKS}e}O]nU_4v{z@U45硧s+ 9KmQnСןuf0Yuf^tR=]? Xv32W4UtʲA;aohi;q-[MoҘq_,췂|T5]. .̫ԕuŎ2*^"/hiL,3z׊>(wsk {,E?#G3.r{ycn# i@>e7 10P¹-L./0(?a+r_4f=&Au=M5&7?Mvpl-`AidЬ.s}QbPaJ\ JrI'1mؐ$e `"uש&E8Kf$Cvp\#@^SR%\un#JJLȧ0<$e[2[J#Zuhz@ rI-z0%Pk R6y\Dlr Ɖ#xGzLYU]pOQy 5!FZegu_jvl -G3$ sșKPUeL+a+S.]oX9m5@@!D1n)-)6;Y`Brdf͠)7P'½3=M0|ݬ35tz.Q0r.2mT̲/[B`G]n7Phb5 ں*6^(8+Y*cD>qp9;DHc!q`x7'^,q#,OEDIXD{k{T@v13.remqO<'N3wl /)c{HpϢGYTvaz`/" I40.yע*<iCRtz?V,v5M6{vǔ -HjsMrSioBȵ`w/_nHi (1ɼPcSҔq)˙Hå)s%@GJi\)cnVV.߆ys$qkCMbM^[Z0X -w:뙐I#&?Muˆ$GƮ2f4Xd=1qX8CBC$ ZWCK*0|5TܛTcZG~fYT -I# -eCKO4ݒjqGkr]YzB=}\C㊪:U`0 -VP~DPN/ %3= *Dzj|7z(]nbX$5G= lfVEYgN ']E 7wz1<\,&c[$iы -t Yay2@$؇7w +^Jc0ku 6dD:}Da9u/Vko =kڜ+w;- 7]5?rn@.Z^.΋oez@$OkL!cObņ.AںTB"#^DfC.^a;f@\g;܌] X`q/ ~4 x!<ñ9~V]du>~|t~É4<כlQ -,) P ыj"WOo ZyPTY4L}h1ǧFNendstream -endobj -476 0 obj << -/Type /Page -/Contents 477 0 R -/Resources 475 0 R -/MediaBox [0 0 595.276 841.89] -/Parent 470 0 R -/Annots [ 479 0 R 480 0 R 481 0 R ] ->> endobj -479 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [287.281 250.806 301.727 261.75] -/Subtype /Link -/A << /S /GoTo /D (subsection.8.1) >> ->> endobj -480 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [366.142 236.302 386.067 246.283] -/Subtype /Link -/A << /S /GoTo /D (subsubsection.2.3.5) >> ->> endobj -481 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [352.621 225.343 372.546 235.324] -/Subtype /Link -/A << /S /GoTo /D (subsubsection.2.4.2) >> ->> endobj -478 0 obj << -/D [476 0 R /XYZ 125.858 740.998 null] ->> endobj -42 0 obj << -/D [476 0 R /XYZ 125.858 510.074 null] ->> endobj -46 0 obj << -/D [476 0 R /XYZ 125.858 320.295 null] ->> endobj -475 0 obj << -/Font << /F41 326 0 R /F32 316 0 R /F34 318 0 R /F42 328 0 R /F57 442 0 R /F52 454 0 R >> -/ProcSet [ /PDF /Text ] ->> endobj -484 0 obj << -/Length 2603 -/Filter /FlateDecode ->> -stream -xZm~BpaTKmӤN#PEID(R&);*;˗#Spvv?2`Q-,Ez=,}{#ӬD<}"fq݄fRւsYeyJ+1o -77:YƟT ahX2Րfz(Xbq*0 -d&V *=v'M>uz@ z i=d4p|-NI{ 6C֑dpDfۼ*/,W,͜e%2+qERDLpסW\&Ǭ9%i;IP*Cp#pF}ӗJmE48y{ *I6{ɑ}}NB| nVwyE^a{PN]"i͛כ7?cRygΞWH+t>O:{'YV.z^{%?7yB>x+a;>}{S**Oqi ``gE1QqkF#)~ͥl_݁iMZv|Yڿ(b$HkfqL8M`_߬b٨r6={e3 e4`, ѓ)͂q) 0CEWa2,()3 Ƴ)J=4z vY t6fprK# % -qB\! rPVksϊPZ^fa!YIH8(滕 |t$i -"m*|C!GB[_VBm0MJ(V?}x9>+Gv@M\,y6#h*J`oS 1,6.KɘlU)#3:=(۽̛vFX3#yymv8, i8?LYAXzQUC k83z brz48Vx__kc\+L (x¬#ƞ `g-dJLj91 |ҢDXThtj!>ۂ?ÂPD(I!%g0PoAqo: j=L+bp  -@3((ToFbP0wkrw29E!O ؂wB,DC)"E.(VyW9Cx TP!')FHҤ9(쾪̝j_phn O8D#)ޟN3cI־IKbG[mlJ44]94bDo!C, -BIKvP{DX07N݈\H) -T52f>rGQۊ~˪1Y6Ɠ56(s ő۸U u$I?`vUCgQ#(OXӄ{Kwpx ai?y lhK©Bl6}c%\@#W<ⰭZCJ~m 6 K}YVVމ K5-|0]F'?!) -: 4{&8)&0M o[,\mޜ -ʞc8KAr -c8AGr 0gV1,|2k5ǩ#dd]]52 w#}r 29k=rĶsŅ&Yqڝ l<7ɨaZ8S؀u]NNQZ-7HLLQh?}h2zou 6KƐ)* __Nݗ>sog'o_<4>$͸_=` 2}mh 4:F]9_7j  2endstream -endobj -483 0 obj << -/Type /Page -/Contents 484 0 R -/Resources 482 0 R -/MediaBox [0 0 595.276 841.89] -/Parent 470 0 R -/Annots [ 486 0 R 487 0 R ] ->> endobj -486 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [416.345 575.633 430.791 586.577] -/Subtype /Link -/A << /S /GoTo /D (subsection.2.3) >> ->> endobj -487 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [462.097 190.529 468.075 203.049] -/Subtype /Link -/A << /S /GoTo /D (Hfootnote.1) >> ->> endobj -485 0 obj << -/D [483 0 R /XYZ 125.858 740.998 null] ->> endobj -50 0 obj << -/D [483 0 R /XYZ 125.858 562.059 null] ->> endobj -488 0 obj << -/D [483 0 R /XYZ 140.204 137.313 null] ->> endobj -482 0 obj << -/Font << /F41 326 0 R /F32 316 0 R /F57 442 0 R /F34 318 0 R /F42 328 0 R >> -/ProcSet [ /PDF /Text ] ->> endobj -491 0 obj << -/Length 2969 -/Filter /FlateDecode ->> -stream -xڕZ[~8R,;Ɓ5b.=J"L?s[y 灻ݙoYzPaIŁ_Cy~<gJl]g/_4zVAy_6L__˫_7uGQgq+HdzwqZIZ|QQgt!my>dA꫰~hZ|#u`ڲ4"8z+IwWFidY_y܏#ӏ""IH{8NU xW|Tk;GAbOZ 0k(ndZdSM?3*ȡr/Lp9[dg3h'׉#? -J'++E>Imf~~> F6E9'e}ueS=ZrQO^NZvgOX[ ˎ>ug.jW?-Wҝ!&ʶ黶29Eg# `RvŊZX l+iz"X[cصÅ_;&gtvoޝePJy"tuiR[u(ABׅ߶ (, #  -#*X5<"U셈]=*ӛ"*{M ow,O]8jp6ݯ\1s`%E$\/a4kv~^Y` dMcY_"t -8WDhYF<}uéEt -279RqH֜zSUZ KhǶ|blܶ‘KZ$^4,xQX}lЎq%|A)t # -ly}ٸHN+4W $h;8hc/;C? -g &T -JXdQ(SbE.B?{ *$Pŗ{7Ԇ[x \iMwWy1Q9iۏdi(O"dv|l&#{b"'| j)灵9+V'줪pst2Ix mYUu&A(a%q41nbg(9'/R? 2^smlݫgtN7ivJ{~ -=^e[i\ >A|~KVLoWEG1y1{CK全 +aX~;AZzoZ=$ txǝ(K!7ҍ+c"ҵ}-Zc,b UAl k*{v7GJ-J\>(FUA64йָ, uH >< -%"(SH4QsUW(^2K.Ł -Lr%g C&)R)ǔ8-ىq̜CA 9\ 0Ko.!x5>$BAtta4`E<#|!fLC`]IޗVcqCO(,/`ͬMUܒ@ǖH -`E'x N(,z=?Rmػ^ ~9j~/{VP4,t+O1`ݜep'ВNpcqM%\D1{ 5 0(rѵ^l+;d`mfN|I XSo|j}||߆B2ɴ,Wএa@]^h* e'?SmmR.ցTO? ,D!,0qެેKvMEWac?ޕ\qvR7CK%]SEݴg㘖򓤘C(+CS dT -Q40ϸy -Ys4=$ ӞN|6GñZ梊Oo:8{WLdHK(WMR4h!h1}!EKo)ZkNC[K8@V~e+M0wvܯ!;ctxsqP6;}T^^yIi F2B{{`ُt?.ܦ(4Η/͟Yd~\F[?/Ѽ Gklw(EK-&\|_,r/rg^ad. sNn~K&A% .&~SPv]3ʏwhBi>51)K Džo4DQDl"V&F5,ff p A%wީ-Ehu")uQ'0xRf -2ܛAd^uz> endobj -493 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [313.293 418.667 335.211 429.611] -/Subtype /Link -/A << /S /GoTo /D (subsubsection.2.4.2) >> ->> endobj -492 0 obj << -/D [490 0 R /XYZ 125.858 740.998 null] ->> endobj -54 0 obj << -/D [490 0 R /XYZ 125.858 653.536 null] ->> endobj -58 0 obj << -/D [490 0 R /XYZ 125.858 405.093 null] ->> endobj -489 0 obj << -/Font << /F41 326 0 R /F32 316 0 R /F57 442 0 R /F42 328 0 R /F34 318 0 R /F11 496 0 R >> -/ProcSet [ /PDF /Text ] ->> endobj -499 0 obj << -/Length 2309 -/Filter /FlateDecode ->> -stream -xڭYݏHq\P$^}j ܵpr7w3ԇCq"G3Ù|i*r%WYW]zI&̈́ow~JEWۇߑZodvQ&~>~Ygo?i5YRD|S*xv"I a⮢fZI) -cfƩ Mf]Ƒ}˿Kmu,RWNeGWJ&WtH AHA,蟗|ii-heXjxZPoJe&EV"Wfj¥ϙv3!4*=RoI<03^_XdűzzL8A% xѓwv_wvN*t1qP? V\)ٹѴ){GRCE~eTm*~} (qP\mL.  kp t=8Fx>2E|=;ui $Lqߘި2YQv \bOguh+x`$+| s꾃8My{Z7>$X}S2[S/{,aj|F(ќiڞvQski?{}|sݘ3?ꑢs! %َ)ʞ >GOr뇵2у烣NnXNQRLgXH]cׅt`yer}_,M&M,̤}D ;p4A濴>nqc=?@}x@"gӗ5sggzee4?[ƪ<[_sEo\(Jŝ {o\I鍉h ٝ#!tEE.#57PdRjG X!RH [wQ(5N3mRrݺ<Թ9{C(J0|} -.VF&2('k^=i(DGvA; 僓h%Fr9lH"؄B)M$S -,=(8IH%0CG@Wv B y֯ 4u%_AAjdG;@!Qn|wmP29%гVPdPTh? -V䞷W/`lVs:C񋓜h=Y"YgC±b}}?ca ;!L^XH+ .݇{G5ϴI*G*C.Ǟ[# mImpqtR2ȍ)tmry^9B_b{[P iBZ=RܜT -F3Pﺵ8v] -"|SB iM$4,M_hM>MMwXAqyT;wXn'>q ;hjlG{C؃{>ZgOX `ҳ/k]o"10BO] PA4.G>jj3H&BZ Ao8d O17 :L#8[a}G&3lvWMN|RC74Q? 0_5-0=ݛB*|жnA͟/>Tv sʷh [(ө* !pqڅA,C3 G^RẐqxe c'դL9Xǖ|fG ugTfSW Y"!ĠVmxM"N`],[R2"%5\vP# 6];S!gze3T{by%S[B4||-0缟-"̰كzx{P[{>I N_Je?ߠ8=-|SݻWj4nЄog{Z+,~)C"aZdUlS-j9 -a%®! -]7'Ob27xD.(k!X;Qbu^u߸i]1 ڗIk/h{IDD<49ifendstream -endobj -498 0 obj << -/Type /Page -/Contents 499 0 R -/Resources 497 0 R -/MediaBox [0 0 595.276 841.89] -/Parent 470 0 R ->> endobj -500 0 obj << -/D [498 0 R /XYZ 125.858 740.998 null] ->> endobj -62 0 obj << -/D [498 0 R /XYZ 125.858 716.092 null] ->> endobj -66 0 obj << -/D [498 0 R /XYZ 125.858 699.183 null] ->> endobj -70 0 obj << -/D [498 0 R /XYZ 125.858 421.905 null] ->> endobj -74 0 obj << -/D [498 0 R /XYZ 125.858 321.905 null] ->> endobj -501 0 obj << -/D [498 0 R /XYZ 125.858 290.622 null] ->> endobj -78 0 obj << -/D [498 0 R /XYZ 125.858 252.042 null] ->> endobj -497 0 obj << -/Font << /F41 326 0 R /F32 316 0 R /F42 328 0 R /F57 442 0 R /F34 318 0 R >> -/ProcSet [ /PDF /Text ] ->> endobj -504 0 obj << -/Length 3518 -/Filter /FlateDecode ->> -stream -xڭZm b" ͛Ak$hiv{ElkBlɕ%X/  gFԐ3|![!M6a`mr;݄$O}yZFa4\oDoFp͏_k%RA-p7B[)tdEA=H>V0 -?YZ.7lUsX\ Ke8^.aej?NL$@lqj6zEV۴hxwLk&̋I&OlO#UymdE`!27ߍW20&f^oZ Jw2Z( 'ZeVY"`ދ=J%gT\at&yؖ4>~U:x,a-V5 5^"=~H Q>͌ڴ2VN(z^Ȗ 0VY8Qb37Z՗݁h1"8'WM_Xyy<(a~ڀȽ7tuG["h @ Nn#c 1Gw'"Q c7r.lKhg6&X"{Ac7۲EEzKr<>Q9 /55"ƒ*[pvh#C -D;]j=ViW8@6k>8ը(fpCV52AE .G;QxTHQww&H퇒'iyMCۙ57Gܼ;ey1p`Lǫyoc :2cSs@`H5X3BMB$dR`hU&c'ae,~M P ֡/m-u+۝R!b`Cɔ - GDȋGJ?w zV/~դÔE'?ە՞&9!>l\Oݱ󌗑3P?(Q@K8GУ槟᫉`MG+:2J@ʡnb >pJ?DHbsC$nv.EJx *=NiEΌzW2A`+V`QMV{_\S"@ -;i+Ѿl[QiGzp yn -X^4YLV_ $۬{zb *,%!}lW>.)&Wd5&0BgASfiܾUUV߱V1Z$L39GuvAš -]A$Fӓ9o˷ReD!?L8vSe= GOɡ&I_\_ Ov:jki=8#Luė9~5k3]j6l!:(k12r_6NN;6Rpe3$'Dj&CQ7ysi>3kV~ pV7xL[ -YW/٥  -[ -~gq,]l8vFn*}m9\P.hz&* /niM#lٳ* LeҔj:nt ^kE0:Aj"$s7ʋX,$\@.8-@z}3I|6 nz CX:0,Z)bp}IG'G2\Oe{ e'6t P32G5`K_.ܾݑ/izfmtŚ%`I 0K7jL xFP& ׼P 弔&Yf7i*A(^ "^f:<} -L*="뉐 x!& Ջqؑi^>O%A={.p^K,ZGCeŷC9 --ť{E El:ocK#Ŧy2Q_y5p]uiR;xIpыӑi^>O%A~zP롂x_xE5*~n:y0 tgu$MON/OsxA/?vA &+Q!t߉6Qt ̥F -_ -\bo|&;o#^]uAhU'%Vau(<`>((-JNbbcpg ̵em ;:LW|@fxQ+Bd(IP nܧ߭i.:աKI$<+) 87 /z'stU*hVy&FMʨ6)m84)P4AUq35@ߥϝHKMjOVEFE{7ԕ|a_}8m -q$>{ee$~>dr(t BJld@.Z뗺K"Z1e513Ш9@y^81K;J_ -&ա=&LDpVzFArqxTU>X2,q3Jh:-!| -;aV1!e9RRL? t^ p?A~mk8kMh c RvTnv!d!eWo  7)Taj2Nr)x~18Ʃo[F\}s(˺-X-~Dž_{5c%-X}rpRBF#o3! ;Xxxt+ >^ei5okܦ(E> [[~̞Z׳{p&Qbڂ-{|#h +y2)QwlG 驀ȉß%4*ຓt~Лx0Tr9DODL"Te*~ɿn~5wp T6T .I'ǛO|*(x8=‚(TW5jp9FTVd[j2pl#{#Bdt)Sj[ZΝ>Z2pR (!Ǐ QP^\],"[TqXKwy]5־sZCE&7ߓTEMŒ ԓT'Dendstream -endobj -503 0 obj << -/Type /Page -/Contents 504 0 R -/Resources 502 0 R -/MediaBox [0 0 595.276 841.89] -/Parent 511 0 R -/Annots [ 506 0 R 507 0 R ] ->> endobj -506 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [204.689 320.569 210.666 333.09] -/Subtype /Link -/A << /S /GoTo /D (Hfootnote.2) >> ->> endobj -507 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [142.854 310.656 157.3 319.558] -/Subtype /Link -/A << /S /GoTo /D (subsection.7.2) >> ->> endobj -505 0 obj << -/D [503 0 R /XYZ 125.858 740.998 null] ->> endobj -82 0 obj << -/D [503 0 R /XYZ 125.858 571.472 null] ->> endobj -86 0 obj << -/D [503 0 R /XYZ 125.858 212.064 null] ->> endobj -508 0 obj << -/D [503 0 R /XYZ 125.858 180.781 null] ->> endobj -509 0 obj << -/D [503 0 R /XYZ 125.858 168.079 null] ->> endobj -510 0 obj << -/D [503 0 R /XYZ 140.204 139.255 null] ->> endobj -502 0 obj << -/Font << /F41 326 0 R /F32 316 0 R /F34 318 0 R /F57 442 0 R /F42 328 0 R >> -/ProcSet [ /PDF /Text ] ->> endobj -514 0 obj << -/Length 2994 -/Filter /FlateDecode ->> -stream -xڕY[6~?ayэا- MN>Ȗ#D\In %9AԈùCZ),Vi$jw 6FN$dpKc{ Z:6V'0PƱ6}u<%l꣔6\#;ySU]ho0mTvz=WНw_yNr#W6NS0Idq&Z`欐u.G˜fMue,Vtl, -my!& Q+a( VT3I1ؕ{9 [#,FUQ4SgT]`T޷ݑV18pedI^aqy!ڼVCwÝ'rGGKC/{l '>;Nصv7=2BpiGأm -}(P6Oe!Exlވ8RNcS/(&\+1KdܕW̅*7)Z(XjʯኖOo4Bࡽ`#fZW)C*y v[~{?g eJӯgH,6VXlhM:g ,t+ 'd|ÛKaM&ϤPrLAgb5)x!+QYEw\%wt@yŭ`0š z/^N+^*]-I$ӮHd2cZhZr P@KH Sck?syw`z -cÍNuEﱐ-*I$EQ!Y bnvXR5\h[?U3̪}OSaR puǒhrZl*\5QAiIPf2b& 1D: :$'̄ 6ݹH| H567Z$T!9G$c8Gq UιgeIa䥔L1%L/'f32Bz]#1iƨ[_U8u^TᯮEO..,xC?ȅ3Gpu$u,beSBsf[˾e.X4z$uӿ2,n(NqXD۸oYp[h؈44,0}8JL.WێRA7jfL_{j,*Ba6\\i;&e˯E<;umqv-j -+WxYϛ]' KΌWjh,e h,0`JB1 um;}{֛'SNX fZ35KԕH^@օ.Œ[H)G&n$D91Е(-2΅ OJhG_1g@LqvSڀKny]=i7V"V -tO*; ^>M;)(Qy^߽H(iÛJF*f<N+)H!S"SzUF`:xL}\Bs&@'hCrHJRNuȎo~@\e{bڲ7-eisrx^!,~Z 63CQ[?)X3EO+݀h!',{P[%r- cұmTx24.ϛvxh"ၳU0endstream -endobj -513 0 obj << -/Type /Page -/Contents 514 0 R -/Resources 512 0 R -/MediaBox [0 0 595.276 841.89] -/Parent 511 0 R -/Annots [ 517 0 R 519 0 R ] ->> endobj -517 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [157.24 491.668 171.686 500.595] -/Subtype /Link -/A << /S /GoTo /D (subsection.2.6) >> ->> endobj -519 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [255.122 231.121 261.1 243.641] -/Subtype /Link -/A << /S /GoTo /D (Hfootnote.3) >> ->> endobj -515 0 obj << -/D [513 0 R /XYZ 125.858 740.998 null] ->> endobj -90 0 obj << -/D [513 0 R /XYZ 125.858 581.805 null] ->> endobj -516 0 obj << -/D [513 0 R /XYZ 125.858 550.523 null] ->> endobj -94 0 obj << -/D [513 0 R /XYZ 125.858 478.094 null] ->> endobj -98 0 obj << -/D [513 0 R /XYZ 125.858 299.365 null] ->> endobj -518 0 obj << -/D [513 0 R /XYZ 125.858 268.082 null] ->> endobj -520 0 obj << -/D [513 0 R /XYZ 140.204 154.094 null] ->> endobj -512 0 obj << -/Font << /F41 326 0 R /F32 316 0 R /F34 318 0 R /F57 442 0 R /F42 328 0 R >> -/ProcSet [ /PDF /Text ] ->> endobj -523 0 obj << -/Length 3001 -/Filter /FlateDecode ->> -stream -xڥZKܶW%eNJON"Iɥh7!J1Kr‡qǧ p%wص71.4KuzeYz73If;!ًWd,3nHl<n:^͛msRDeWrr7JLƴɞT*؃KiebøFet2QFf,MAP"4KRy3h,I5c=v{TUeSwuQGedRD{BށI~mM)lx$*boы?wLD m]cEп+C^ݤō:0454gYaZT&ћmnk0dSOTQeId?(+@`562z۰rSf(lI]ӹmP=>743N؈8*$3tm7ugji} `쎁ǍБOhqυJQw+"eL%pH U+vDbnڞPBr)NXx&>2m)L$Ưl ځDz#0/DZsAȲ&WM'5zXFB{mY^-q -1:ÚU&z,4Y;yz0R6`* /ǽRfCTVmՅFmg5ں犠 a9`ho랑Ni̤Lf*A$:/ؼB3й3 7>w9pq(nai='?!okf -p2fbnEP$` 3̏HA~e}hZ88 Yph %SiQqMX:^NudsFPlir"^Ǧ~ 6%>uG,O:Em :j6?羵 &`` qUo&L6D֌N x+4;Ի]͂$MЬa $L9B q+C<@0r{ԝ&%FM2mQ4qu 2׫ĐUW,@Lڡ 8gLQf1ӀzM aXo޾/Tb{4&Z#Z=(*ݱOq11L9SC)O,O1IUf:6K0c|u㺒u{W$ 9VR@e -v8^W4O;^._o xd|Y*ɍjtTvxn9ݜή/nߓ(߹kX>H=~wml79Rl6m SP\5FQv#D>b`^s5κ5^&L9N^E /a~S?tJD'x2.endstream -endobj -522 0 obj << -/Type /Page -/Contents 523 0 R -/Resources 521 0 R -/MediaBox [0 0 595.276 841.89] -/Parent 511 0 R ->> endobj -524 0 obj << -/D [522 0 R /XYZ 125.858 740.998 null] ->> endobj -102 0 obj << -/D [522 0 R /XYZ 125.858 669.576 null] ->> endobj -106 0 obj << -/D [522 0 R /XYZ 125.858 492.764 null] ->> endobj -110 0 obj << -/D [522 0 R /XYZ 125.858 328.007 null] ->> endobj -521 0 obj << -/Font << /F41 326 0 R /F32 316 0 R /F57 442 0 R /F34 318 0 R /F42 328 0 R /F45 384 0 R >> -/ProcSet [ /PDF /Text ] ->> endobj -527 0 obj << -/Length 3065 -/Filter /FlateDecode ->> -stream -xZݏ ߿blCv=$i\=z43n1|XN8*)`Eeq(E"͊ -yn/4 -f"[n8u֠E0Z]W汫-w@-ߛ̞K}IZWԵ8 yUóU_Ȱd(,g#hɌYvؿŠH(ҔFd!$8ނI|*-u];̺uLE94 NQ?s{W[rAe| -@԰C~tv"Kbވ$3+<4%MA%`୙V{_I`-G"8QnN @4uJTB 7z]ZO6l`&B?4O6[j>6-TL1^UFI5ЀL ;Dqjpܽ'nz?]CSE`3_1f!2t@ CD9ƉRP%Cc\_"q MT!" aɸkZ)=R~JBԞ~KYv{۠ɳqAp A,^Gih;x鎁+g"q{h3!$+怳9bG$=@(2.G ; Iu 3}3em,Ow_ɍu{`a!vU6k3CU^,KJ~kʯ57b 7i}93tvqz#>a"{(T3MN*wgL, b_GcHnݦɠ&ˋ3M -!71IHn;:ш ^;-|k.=;8x܆Xk^^g53/@q4 |58T$6y(\-n{ם3T.<pAp4h+t E57h!#|4Zo'&lڭRu]-iپp[Q5arܡJBu9ToB|-DT,tyN̈Z-|z$6lY |QPYĐ:mayw3f%5+DX`V-ؓ,EG;M\!ܘ޿!LF/cQc|.8+S>kB )nA/ᩈ}yqm?hk1/o;4an'ya;Vͮ}?QkvW7R"Hs"i so00D9)@SŤrRY!?Qnvd,SN4's+Ou/I&˒$\5I qv.6u<4܇ѨXE^+_ߌ9UqBLz ꥊz. vǮ^#V-rXK1o]"OG8v۰xro^:\93,C -ݲd\9ŲApTkcQWHI;XJw$ʗEId>u4WYC>iU3d1K\!?;6^"{o0Gsӆ#&k .He쉧.=9:{ Xj'l`A7f9mXŌcZ՘..U5gk0a-ś Ϧ`EH!wsׯBٝW2"LE-O틥,qg8mc|DŽO 8 MM- k̔,};~w&bC~ -63@qͱLFM$|W)%pÓ+s! 6ޗlϋƮNK40"y],xi)'V7y@¬=Aq  -?=p|{ ڡbE1_Wx"J Ef@{̈́eQ\U!Ptu\X<˟Ks\AʥBU5>e\K>҃5EQCuDG@?uC^*(%,} -W"1c=^2 $Q{&]댓t_~endstream -endobj -526 0 obj << -/Type /Page -/Contents 527 0 R -/Resources 525 0 R -/MediaBox [0 0 595.276 841.89] -/Parent 511 0 R -/Annots [ 529 0 R 530 0 R 531 0 R 532 0 R ] ->> endobj -529 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [356.983 526.264 362.96 538.784] -/Subtype /Link -/A << /S /GoTo /D (Hfootnote.4) >> ->> endobj -530 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [236.552 454.533 250.998 465.476] -/Subtype /Link -/A << /S /GoTo /D (subsection.8.2) >> ->> endobj -531 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [399.818 454.533 414.264 465.476] -/Subtype /Link -/A << /S /GoTo /D (subsection.2.5) >> ->> endobj -532 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [226.383 349.551 240.829 360.52] -/Subtype /Link -/A << /S /GoTo /D (subsection.7.1) >> ->> endobj -528 0 obj << -/D [526 0 R /XYZ 125.858 740.998 null] ->> endobj -114 0 obj << -/D [526 0 R /XYZ 125.858 569.85 null] ->> endobj -118 0 obj << -/D [526 0 R /XYZ 125.858 440.958 null] ->> endobj -533 0 obj << -/D [526 0 R /XYZ 140.204 142.951 null] ->> endobj -525 0 obj << -/Font << /F41 326 0 R /F32 316 0 R /F34 318 0 R /F42 328 0 R /F57 442 0 R >> -/ProcSet [ /PDF /Text ] ->> endobj -536 0 obj << -/Length 2657 -/Filter /FlateDecode ->> -stream -xZݏ/E6VH]E"٢MhmZ8[r%9 gHS(Aΐ+WJ&&Mʴ"_m>Lq4媈To=%BDMbD|\+L W )BElbqJXz1@d!L̬6i2y=TaS=J2b -UZt:LY\(`ˆVHT&R%q>斉UγY:jS2& "A9mG}az0DYwCںmB"Nm_uþn&$]m_}&aet~ -ؓ}6}0IZF@my+7nsה)m) J4'˘/rˤ^ée&yԿ^P#`ܺ3|:wsKk?xljkO]aqȄ["e5pEUتuW4t jشa@EtA G)vB$["0Ԣ$!@ mn:@Hv|sKAŲ1{)En^)d(fk:b"-LƬa6JV584yl`A<'1xP&*zP}ݘNcLb idf!n!=AY%*%!dB"Lk1'`/AjD)78!ݼ6Ud{. ZH [3|$MjYH TgIUs+)`Yު5Ob9-B\ZD]][ܣ\"ǽ7쵼 ?MQRt~drd"0sth}-T=#(>"& x`+'Etd`݌VϕC ƀI X,w ը8U C7TY6%iP'f 5FK>1kŗ4ԼpHIk+7q4X 9tf=1G}[٭Qc|ٍ3 L2; W(.PJr}KJd ܷ#"Y6QފƢf*oxK#˚zlSZMtA]V< > endobj -538 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [266.509 370.403 288.427 381.347] -/Subtype /Link -/A << /S /GoTo /D (subsubsection.2.2.2) >> ->> endobj -537 0 obj << -/D [535 0 R /XYZ 125.858 740.998 null] ->> endobj -534 0 obj << -/Font << /F41 326 0 R /F32 316 0 R /F42 328 0 R /F57 442 0 R /F34 318 0 R /F52 454 0 R >> -/ProcSet [ /PDF /Text ] ->> endobj -541 0 obj << -/Length 2844 -/Filter /FlateDecode ->> -stream -xڭZݏ۸_}?$J^\""ݢMd^ 'K$ow3%KC׈3q? U"${&y=logduY~xzSMOVkqiVI/>Gk59_ %i¤HUELBq*rzΚLxjھoޑ@(urЉތoD %|ϧ<6".LHm..W eםYmSc]n{,~kݨ/V7]_n;:~{tp_`i"8i\dq:L{x;[$fXfěX4 cJF9}=]_'aPtT/+G 6d׊ǦeS[XK`T~PhJV/_SIcU(36X[]S0˙@ ׍pn|5FF|WۻmW#:>tsr-Dz [Pgus`!yd+a۶&𡍫ܥD<I\X%P ؛yxA"vI&b<kz seH`2agcp00莧wl@l>g=msw^ K1"<#h\7eZD*|A!\Q*!I>`]T] -M΀x%LH_bGRIWo͡ xoŶlmc"ve0K!75C*@ PJ(FVDMW [MoAf3vZ nlۖ9I?z?gfwϒPMSC2B0#1S <iGhY5%VwzRqtP~ 9Jk)sJPDd7Yr -+$d=dlf[)9X ,Z xkx1|4 -+ sP>3>1e_ς%!E#X0c JuT㬷=,='D;Ӥ70SZTR*sYT8(2!dGnOm /{dz,6z7Vh_wD^]g71.-]I+d.Ru畝谐 "@S_s'T8v3TJT>@P,f}#Fm ={O2=:8};7&PvB_0(3e ,f֐+*\v/o*|\3{RyF s(G0WU'֜^@lعQn3~#pPl|X&:ҳ+ioryJ<^{tT/s>FU\pCRSσq~D:GY%H4"v^JOrޒv=,^`c0| dg(LS -I)a>Uhxd%(+( W}[|LE0>J'kaӇ\fJAw lTƣrpM> endobj -542 0 obj << -/D [540 0 R /XYZ 125.858 740.998 null] ->> endobj -122 0 obj << -/D [540 0 R /XYZ 125.858 555.424 null] ->> endobj -539 0 obj << -/Font << /F41 326 0 R /F32 316 0 R /F34 318 0 R /F57 442 0 R /F42 328 0 R /F52 454 0 R /F11 496 0 R /F14 545 0 R >> -/ProcSet [ /PDF /Text ] ->> endobj -548 0 obj << -/Length 2747 -/Filter /FlateDecode ->> -stream -xڥYY~_ mH@dr̦"$<%-,9:Se?,dh}Oi4JWYw{ex3?<)wy#gv{ۛ?~>:?3u8"3ٛu<6J+m>ЙdWk ;{-tw+mz=經csg9fgmEMmΣdSk[Ǚ8^kEmEnPea`xLrrߍ"E>_0)?Lc<|,HEAU ܧ@ق_2]Cv#pF_Ta6?\T[t0qP} {tUisdy NB<\^mƤZY,ƙ?Z1*Jeҹ?Pq/L)= tL]Y!CSlK8]ރ ] n<VǪg -$RN O -l߃Me)Ȣ㕐 ˲S5 lD/[4z{ʛ*H6}{ɖZ ˸Z {c^@hӋ>Wy`x.tnNrMG՝*]I&̔g"L|q6y-(M*KΚd$ pG9>_%c#~ʒTo󙦼B4hr,h<վDj5Vk(c-ؼ(k/I\ Ί Bs Ws!6YhBPrjG =.S!`e!|yEm.ho1Z>LH&M&Vᅍ -U(su8_ /)!U1R -&룘 LA!`_ fŒPTԄ:vUKۢ6 -`0TG -=A!y ڳ$[V}oxAyE1'?$E1vLM‚YY !WVwяT|*҂U$.e&}=6]Y|a1ճuTJ8mv!bV`L;ȹK( +4&̂Rq>Xip15tq@2Y6;,'Gka%f-o)$#p]ƝXރ%.CO4ЛN]F'GLۜ -@?tY'`RhTeӊ`l^t -c#ҡ15C@j-d*qeoDJ;tL)nl$V~:,lx26$%*rE: TIEu,@Y "&fe]!p$hRB!QG\PZsJIETSRqueD/<*+llbөwhʑ G-b),/sI"y׻\qd$=?H/^Y g$uӿ?@B:a I趌 ς1R7?:~0abr&8xv4 -ce*F 8MǵVd4yZNCs*-gZA'*o kcA'6揶!q:|d&́1Y8cC -#: }?u$.o)3L8xto>0|Bp%xg2;RcF0Z@T Fa#Bj+U莑 -$%-˟+-2 hV OO|ծ*[h7IW_;?wZk}F%9H}X7ӠjL}$7-~aITX.y%M`x==Ѐl0R @wϳuǽ:D4fV")#uY:` -WOg*VpA%  -O9#Ѱv6PRs|i:RҨKB>"h\TgEaq/&M}dde9zb< abn}FPl?PAK1 !6'냙|1 -z -{tס5vM* Ċ i!⟖ 8Q&K跷P=4Mg%ҭz}%JѪj%a-k&xK~^iHZ>\ΎC -Z8EyӸ -YDžW :F|N%_to<#j_%eU_:pq|,ȸ@xb4VQ5Urz.!=;M3Cw/En1E@n: )/ܵZi##pਚ7h\PeND~"ɟlrPrw%;9򠲊P0jױ7gendstream -endobj -547 0 obj << -/Type /Page -/Contents 548 0 R -/Resources 546 0 R -/MediaBox [0 0 595.276 841.89] -/Parent 551 0 R -/Annots [ 550 0 R ] ->> endobj -550 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [404.805 159.514 411.779 170.458] -/Subtype /Link -/A << /S /GoTo /D (figure.2) >> ->> endobj -549 0 obj << -/D [547 0 R /XYZ 125.858 740.998 null] ->> endobj -126 0 obj << -/D [547 0 R /XYZ 125.858 569.85 null] ->> endobj -130 0 obj << -/D [547 0 R /XYZ 125.858 476.824 null] ->> endobj -134 0 obj << -/D [547 0 R /XYZ 125.858 322.03 null] ->> endobj -138 0 obj << -/D [547 0 R /XYZ 125.858 193.138 null] ->> endobj -546 0 obj << -/Font << /F41 326 0 R /F32 316 0 R /F34 318 0 R /F57 442 0 R /F42 328 0 R /F11 496 0 R >> -/ProcSet [ /PDF /Text ] ->> endobj -554 0 obj << -/Length 2946 -/Filter /FlateDecode ->> -stream -xZ[6~? ԬHJ7$6E&g:2mkWIyЖ,;npL73PɅT|%6_xWIVYHw_H -k~3~c+q7_TG߽}˟VZk%f=cԸXɅB!ӵXQ?q4L_˕NTtsQñtpZhWpLJ~wv,Op&K"6uEW:~ -ڭl6M}ǽkPSWH'yY]8rWO؆U fEh~.,Ԑر;ʰAPe1TЩem66x<'ҰkaSp( -o,(SB#?\H4F aJAr*8@ -,opKGkvLd#ǙxfBv1ZlwұlR16W xGxOb zB ib1\߽yX(*,,H_ #Q&M0ǒ d|/琅noߎQHLj*hHOp6+LJ*+<T -`?S\T2^LuBM*$BWAS^ SW|7rT!>f6D,N=[ fVR`2ʈ<3a 84#pC#@(|9saF7CL>D -šכ[:zY D/ dӵ{CqoO`!vU 5Ih, bLtpyLDa>'52«26*̣c!74kc=$$A-t^ Ey9:ˢ{ҾuZeUP=#æc!ztzRڇI.-`qjVYjv];A[IF[1 T!H\_L9P8"j\ZwV_SQQ,:o'jtn%Cbzt5OQ_=KQ}^JhTģaIO*[mS?`6[ A΢Cѳa -I`b8Lse|_Ο8>R}vK,BD0et,MU -Fq&vTfBO6Q'?*Ώh`N@[]ų?\/?M]U;j ~P>z}cػaT -j$(E~A5ypw~75fbB'ZdR<~2~ endstream -endobj -553 0 obj << -/Type /Page -/Contents 554 0 R -/Resources 552 0 R -/MediaBox [0 0 595.276 841.89] -/Parent 551 0 R -/Annots [ 556 0 R 557 0 R ] ->> endobj -556 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [295.763 691.021 302.737 701.964] -/Subtype /Link -/A << /S /GoTo /D (figure.3) >> ->> endobj -557 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [153.365 226.229 160.339 237.173] -/Subtype /Link -/A << /S /GoTo /D (figure.4) >> ->> endobj -555 0 obj << -/D [553 0 R /XYZ 125.858 740.998 null] ->> endobj -426 0 obj << -/D [553 0 R /XYZ 237.51 675.26 null] ->> endobj -142 0 obj << -/D [553 0 R /XYZ 125.858 537.188 null] ->> endobj -146 0 obj << -/D [553 0 R /XYZ 125.858 293.726 null] ->> endobj -150 0 obj << -/D [553 0 R /XYZ 125.858 212.655 null] ->> endobj -552 0 obj << -/Font << /F41 326 0 R /F32 316 0 R /F34 318 0 R /F57 442 0 R /F52 454 0 R /F42 328 0 R >> -/ProcSet [ /PDF /Text ] ->> endobj -560 0 obj << -/Length 3593 -/Filter /FlateDecode ->> -stream -xێ}}(jk.@6 6A>I46Jr6sxŒ9E5Eϕ،qE2͌$ϳjCgx ydZnGn?b(/%Wtw|'-~w( !n^޶\H$B.INLƉdĨi,fDQ9[<'BV>( ӟseR0:/8bw\My<,{/W/%&9;c&όqt Q搽':[W7[S|tuxݼGG$aCT~[G!²h>K0cf,X NV{HF2 -!L^e`/ڹG0h/ݮ\-^yN5r3Wb`~g$I^"BQ [>_d98KZ$Mu} Į VO'h,PD hc - 4߮!z2}B}T`De(EP@20fL%Y8$m`)Uyt^|7ĘbTh7DL< -$¹kd2S -bRič.RFںXW6a] ڭuh;;cTِpھŠ@/3cvrB&$a$0M$Ӥm[ Ѷtd@4m]aňu]}u<2XJ9L YyeqNҖ`Dz: Jn-G,Z)Oc֕!#꤂m*ȧo]t5F1ka^eD )81W\ !|7zdLVW`' h㣂@6'Ԫ ؄r:rRhuU XAӠ'<\u>_Sԧ05V)N&Iztz-O>i.M}L&5at%&l(8Dt(v8B?εB_*ϳt^06*};2"DMe*qsrEeIӽ@t|5N|bMۃ1Dc z;|܋2.5B"f d/2$S!lPUg:MNrݏQ( 4+)M* AnU*,rm}w82""VEݢaձ,ژyVBrY?y(axuYuZ-\΄Ke5c`b)FB?׍{k%f(].*^:Y3e2;$zj_;[g8nw~p 濔pm8sx[uy؅׵hE@Xko}sF d9>:@&X:_S~شZP$,SqB*(tڌfpϗӬEMQTl^# \M61P w so .!^T[XOW{5`S ž&d(~$A]1|^I@|x $&oɲq}^f[4FG'rLS?Bf=تhzO]9#-kl' 8*7?mw!!ϹSc'꣟؟W[?h&"b qFEGSȘbx};& ՞LݯlkG?!p+<Y*x,$z0h:r}'}/A/d, 4^7cyX*6t4lDMPga -쁓be:ج{%T"P3>PK-]{%$bi[băq?Y9▸bIxGq5[!{1i_m -X- -O - -g$zKޢ //"6B:N`b$gdY6`YA63>|ll#Xk[IQ1c-Z, -:Ar튻T.1Tw5F pF+.:6b}u{o<^Ci#(yv$2֗b/ pW.`zm c 9'6mUA7&[Wf#J{&5R(LEMA*9aR}OuT4XH9vS -}1_\lm!)Mh9Fc/9o8I5PNX ݾVxuhy@o[*`v8_^'v@vjc>J{D\XNUPGBjiw|`]ؕ6N 0v_<xv{J ǠW}ơ+AQ9tJʅ4 ͮ_Y!TSCxa` H&]QHsOh 3a\&/ i@mmCc5!.l|\9c. -#H/3+]HkyA,kB_'Y2t&ddw% -˒PE;"G.*w)ׅIQqƤz$,SDQ++.`M[ T_fendstream -endobj -559 0 obj << -/Type /Page -/Contents 560 0 R -/Resources 558 0 R -/MediaBox [0 0 595.276 841.89] -/Parent 551 0 R -/Annots [ 562 0 R 563 0 R ] ->> endobj -562 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [342.891 417.377 348.868 429.898] -/Subtype /Link -/A << /S /GoTo /D (Hfootnote.5) >> ->> endobj -563 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [171.905 145.023 177.883 157.544] -/Subtype /Link -/A << /S /GoTo /D (Hfootnote.6) >> ->> endobj -561 0 obj << -/D [559 0 R /XYZ 125.858 740.998 null] ->> endobj -427 0 obj << -/D [559 0 R /XYZ 247.846 711.29 null] ->> endobj -154 0 obj << -/D [559 0 R /XYZ 125.858 320.117 null] ->> endobj -564 0 obj << -/D [559 0 R /XYZ 140.204 139.628 null] ->> endobj -565 0 obj << -/D [559 0 R /XYZ 140.204 129.9 null] ->> endobj -558 0 obj << -/Font << /F41 326 0 R /F32 316 0 R /F57 442 0 R /F34 318 0 R /F52 454 0 R /F42 328 0 R /F11 496 0 R /F14 545 0 R >> -/ProcSet [ /PDF /Text ] ->> endobj -568 0 obj << -/Length 2816 -/Filter /FlateDecode ->> -stream -xڭZY~_`m` ̍LfFag2m+#"dY}$U*AłßX8,IEV}D4뇻X$, a7auVk9_u Wo⫕X~~ƿ?~pTjadiO]]]MSx6&U_&A,04ڟҽqd7Υ 6O@^0+(,L5GRB#<ܼδS $xg"$릣]C2r!\D Le@p XriCti ܢ%+Eg1 ijLf戼1I0_ii/)šŀ@v1$1|y&*$rZduӴYo =Kbg@^֗LiӧbդOm#a^Bh; lJ$[ 1頚[9}k-fO <A -S/$'`&,rFwk -t ku&>\&>k#p'NL$/s0- r<%Bƥf/=(@v*зX]) -aՆ&V`PR`[vw0,Y3! = PW fˮxe[ƍ0*<'h{@ApʊֽP]ntSYgНtY}AS ׁ(q'ծ{]rJ#N -5 Dy`hWEJ<:.l>[S/ Q$E:Y(nj)ȿ.cY u@3Y|c}_6Bp6DTy@lxXo_r9ut9 ?k'J0}XEztYf]f 1.v[4oRs֔d  8Z1˲S#&>;a?o$M%u "D j"kLc/s1n\ڽQATķu4GDKH3zp -$6i8'tڸjɱP>_\]Jg[GgYu{YxT(y'!9\.\Νwsǧԍ,UrcR&FFIa<0#D$aF,jnc#zg`6AČA@4 (OVrgua9՚O9arSRO3tdI: -g9UQAߍph{KF0;Z6|4Z_;bN{j}w|m7 D^M@ػm͂ӠRAg/S[#o/-hR[`Uݝ_ƍ+g:[4ˍ?F,Qbd㈉0-Q ΚZvxrGN771?Pͩ0!s9s(/hԸǃWn˧ٷyy,|GSW;` RWK<_H'?~/@ax1g"Ih@켸}5۶a<@x⿟OAqq@cyTtn!ߵnwc<} 8uӑhm"­ȭ.tbɶ@;,U]#O2EQKco mXD_a) ӡK]}߅hR{YLTףRi"1dendstream -endobj -567 0 obj << -/Type /Page -/Contents 568 0 R -/Resources 566 0 R -/MediaBox [0 0 595.276 841.89] -/Parent 551 0 R ->> endobj -569 0 obj << -/D [567 0 R /XYZ 125.858 740.998 null] ->> endobj -158 0 obj << -/D [567 0 R /XYZ 125.858 716.092 null] ->> endobj -162 0 obj << -/D [567 0 R /XYZ 125.858 595.404 null] ->> endobj -566 0 obj << -/Font << /F41 326 0 R /F32 316 0 R /F42 328 0 R /F34 318 0 R /F57 442 0 R /F14 545 0 R /F45 384 0 R >> -/ProcSet [ /PDF /Text ] ->> endobj -572 0 obj << -/Length 2740 -/Filter /FlateDecode ->> -stream -xڵZݏ۸_/l i @7Zm!J%ߐCJdy}Mqf.?zGYL8KED<+No,}zC-l<?>[oX>ܿ>?= '߯YS3zO?s6~sNR{3k7E8oJEFɀ$BY>JήHni4K%~,{՝ewSكȽQkTF$IÌQG3cK3BE0+c5%L),]k@UgTzM{}_S4 Kiwutݧ(.-eָğUdA!-IcFY}SU͚ūN[4-> 9Tݓ$ #^-zќ~A/^F-R|6;Rm6󕌑$ohfGr - O@1Lt0Jl};c*K2KЩleol(;8mcoЅ* pX]鈍1W;KG %|[v$}AFe4Ou_hqY.Q;#D$ms!g^<;ϡ$$aI%$Jhgin8!dmhAp7GMWΒjwKo{|dIlu_J0!tlk6'НWVP8F piZ;+tiT3/Js1~\8^ M vG=nWeYY^ 'zDhԽnZqw9[Ya/qV T$8Q1rF ,]jU9kwƉ -1ԉ<Eb-Yd)+uGhiGc3G9VSsGLfHaA=4~=sY=1{Q^hHbEgTg *c7hf :k< R'ʲOUErtMU*e/cf+^<-{N!5$L"Zf*w,jx{! 2Y|wG3=Lw.X2 zb(}[3uFd#"NvO{ڠJxL;㕳w`^/[ %^)l|8|,yňѢ~Pw⼽C 0r,nhf2Az"-ȿsM+/M LEQ7wacj,\A&k]nd$2]۞0-{z˜L9=U҆]nL×2"@ݷv43|0g!۞uЄ_s^Džnfe["~V#Ѳ, *1ja)-Hg7Yt43AҀ0!4HĠᐞX\G6 %> - -3wvAa7v}x`h+raiʹE?S- 'bѢ8/%8 @{\\KmC:c$r3 _>=q A{Ip|uh Nq4 l: nb&*ip>g.*uE#5z1LM -qDĤ~bwe ہmF2"#vS -Qn]0lR@˼&yQ'PfP\W͢[`mةqaoPXf8냠O2˿[uk/]ѭZ9ޒM q#rM,J~WeA=u].fjEM@ϸO5<[(c1ۧ@ M*c|_9^=~A+&Gp+y&0?,'Y+A+s Hx y̿eIz>ۿ/`֞ZpL8r曶FPj:d&҅,끃q/•L> endobj -573 0 obj << -/D [571 0 R /XYZ 125.858 740.998 null] ->> endobj -166 0 obj << -/D [571 0 R /XYZ 125.858 220.535 null] ->> endobj -570 0 obj << -/Font << /F41 326 0 R /F32 316 0 R /F42 328 0 R /F57 442 0 R /F34 318 0 R /F14 545 0 R >> -/ProcSet [ /PDF /Text ] ->> endobj -576 0 obj << -/Length 2777 -/Filter /FlateDecode ->> -stream -xڽYY~_1/@zx`mӣ`PaRQd@Z쇬z/AEޯyo5XǬ)hPnAGfg,Y5t.FXwxd2K!u9yL3z=Hkq?k@X8^Ea/J$QL;Cd=Trb6?W3k "Q V8f%.e4:-k9i!*k+qW跰&7tHv& _(&!ag" -vaXdU<~/‹/MW+s>3:8М$vh+Ĺ/& ;0g9[2r'..BɳCXr)#(cԃ{ƒT""P\|E$2}~kJ'q2c뜄;>a"㕬sm -T8/{6 R|`aJp ;Ά! ?U:}"zAnǪ٦ z%ENrZӵ0^張ok|y/e LRB_&5MAn=)a"& : -m3ujjmLc+|r$@ -LˆZ+El$R8Ʉ؞E%m?Ю]W X jP 7G۪鄀hc!²Mfg.hNؾy[BITcqlKr)kd Gc]T(4Z>.C[ZtHs3iK[6\XH-(͹㧵Pv4c Re@C;cVUl~GVB4V]hAtӅ 2SY2[lso.ɷPhp[uSYtd ӑ>Ę{880"0!{ŠJF]q |BҺm'b> S@ 銖{~BEGholíFX```a(Tos?2;W':pYa'v}(3џn6@h- |/p1r|YTbL+( oDh -5tcwu|ƿYz@tjaVնdg{!0mgP2gn;+ Smtu璊`ɩ~iNNs - \_@Bf97N wh6 -Nt -V -[&:(uK5 NX=kےӍ=R{zVRH enWO^]l ;0_rP+[~l -ȌxnMj^*w 1ϕ t!$>D7hPO6`-s.A_*;]ŵHWV\C )Dp4VSZ$Z /NfaNW.PÁKS~ -][{Q`&%+lmmӆ6wR\[hv"tըio:KV !T%zU^wt)0} 14(/hm/JUlankr%w?Z6WTVgR-L/+KjQLc:2k^$mh$y8.q.ӥ;Ѧ+_^q?ͳb.Lן(]r35BoX2:M@hfa[bҌ^`c5|eq QBQ*+wh6FZBE9]0"O>93h#D&'v8س-{"5|j#xhAxՈendstream -endobj -575 0 obj << -/Type /Page -/Contents 576 0 R -/Resources 574 0 R -/MediaBox [0 0 595.276 841.89] -/Parent 551 0 R ->> endobj -577 0 obj << -/D [575 0 R /XYZ 125.858 740.998 null] ->> endobj -170 0 obj << -/D [575 0 R /XYZ 125.858 559.937 null] ->> endobj -574 0 obj << -/Font << /F41 326 0 R /F32 316 0 R /F34 318 0 R /F42 328 0 R /F57 442 0 R /F45 384 0 R >> -/ProcSet [ /PDF /Text ] ->> endobj -580 0 obj << -/Length 2848 -/Filter /FlateDecode ->> -stream -xZ[s6~K&TB/ݧdd麳w`ԒT98/D G _\hdiXo 4?NdeV7g)HY/\xۏ* ~xr%t|5V?/S%Po?z'E?*0Bn*JUyĂsj=ZV1.RZ ;2yyyC_gmV7өτE˕TqpC7,vدmvϖJ -mUUU4lB\vvvn0mvIz_c1 -2z-ʸꚞɚoooMc\GkkpnuVP -4jtOXOuoUus<7 j'3 ª -z7KNHdDmά_PAUIdnàr\;XRD|Uy3޾Qx`Q9Ayep@8[z{[נ#/I$IY18t:9U,M˄Q?g.6 Y$Ct= 88W?*UB'B!E%'}aBc!T I@őMbR5gJ_'- |1'(-p!?a'^=8_;Jp/^\-P-Qw}e~G1oڟv- xV?;$d:I&))mal{-N:JG~vJqr^)q"έVFpZySdi)4TF_IԀLy D|a5@_Cx eF6)~F_*KW+w! c*+܉<*f^HSĤNB+EE4QP|r*Bx -nf(̆*Z1"/ Y~{|Cv$wR\-[IXc׭0(-:u]W[Z[euuxPK^rfU;w~88@o ӫ%` IU1{s}_UavWWCϷ޻B{[W#ZAcnv8r"Bw#D&nʪ%һ)fm}p"U4 D cxjypI@*=s1>*Bc=& +U^.0*/qL&`M;d{^k0;wE§#a'r6% >;=^ްOl=a1tʄlJ*AGXu>1Zp`5ua9M`/BIٙMA y)XFj@]XoY}Fgv1f%f¹1G5d>eFQ'ñk]*taQ &/;vS@ -BYÃGEFƌ'ɣ.Vݦ}ȇ|.wu8N0z)cLqj` -^%gOʩi$w'"gA,gvuvbF; NN+iWe -IJv5;76eevu[L{g,=z/=4)R⫒O?phHq -=ޓ[4:68K'jU t:>TW]U[ -/(irm\r[m{Zy9os656 -3uٴh}of'b]_fO$ު&C-=lKmvor':^A.HK ?i{KO6DC!{L='춀E t&xg6H&G5`Y5Kˋ1#wTP?w0J:7.j%0Ea/ڒd4[iI}2/F YѸ#ov׻{:}2 h} a[Qq#o@ lf WxU# U CkzFX̹XAS.&u1>jYRAy19PKOwQ.&'iM2:6rd".P6Ѵf)}"Ҋva|5:;xk g]>;œ3XH?>u򲫁uBQ|D}+x~BE֨s >}!"@?!;Z><nC~%1kT?z^|z_y5 %T󧊰3]lݙu7]vX(ЫO1@ڬg/$E5A#WSLޟ~F{/<2"-/y2(f0dضD 4{ȫU<;챬Z5SAU pC@'j+Gn0!]AtwF&"BφCRA6}=(/(t$t~5F%s؇v;؊Jd wwH6Tw$=SSfcܰJE B{p*slq02˞Z(oZ^}COݵT?N|2Auanq{L[(4zk S_&!@ͣJ%Yl7Aq}endstream -endobj -579 0 obj << -/Type /Page -/Contents 580 0 R -/Resources 578 0 R -/MediaBox [0 0 595.276 841.89] -/Parent 583 0 R -/Annots [ 582 0 R ] ->> endobj -582 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [236.125 660.386 243.099 671.329] -/Subtype /Link -/A << /S /GoTo /D (figure.5) >> ->> endobj -581 0 obj << -/D [579 0 R /XYZ 125.858 740.998 null] ->> endobj -174 0 obj << -/D [579 0 R /XYZ 125.858 716.092 null] ->> endobj -428 0 obj << -/D [579 0 R /XYZ 272.349 644.625 null] ->> endobj -578 0 obj << -/Font << /F41 326 0 R /F32 316 0 R /F42 328 0 R /F57 442 0 R /F34 318 0 R /F52 454 0 R >> -/ProcSet [ /PDF /Text ] ->> endobj -586 0 obj << -/Length 2467 -/Filter /FlateDecode ->> -stream -xZKs6WrR#x*dJ]U{́ R8ۍHU[>FC>|qfYkfU<{W\]W|fMa}"a18n7qwÜG?Qs./RTYP θSY%ĞU;tWb9Zl+NTԮUBAʷPhe& k P)StIBē{{>V7'u blȥAn H$`V ]Bʔ\]SV=@ E4D_QPO؍uC-56n_`eoGkk@, @I,= JDѳ,N & -oʼ9{zw敚_Oԩ 㠴B)T'\AN"SdFORR;I)$BWТjEUm\fA >?1;9:T{5+.GV\_dX(x6UbV(*R_<3r}tW/(xVutыx06ѾA%sLi5yMPC{=pyWѮ$=oP횬\y]#fΏ/s._v>!)HC9'}á5c.أjbl=2vooȮ*](;ԯXM_|Ϋp5`lvR'55?oX}n#;!lމ c2ʪ|C\.kgpoH&H(@X5r۞7>O_m|+Rgu9'źXͶDUuSx^1ȔZCpxvr -Xe4Y4&Bӎ3Nå9/W> endobj -588 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [191.829 567.359 198.803 578.303] -/Subtype /Link -/A << /S /GoTo /D (figure.6) >> ->> endobj -589 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [461.101 335.071 468.075 346.015] -/Subtype /Link -/A << /S /GoTo /D (figure.7) >> ->> endobj -587 0 obj << -/D [585 0 R /XYZ 125.858 740.998 null] ->> endobj -178 0 obj << -/D [585 0 R /XYZ 125.858 716.092 null] ->> endobj -182 0 obj << -/D [585 0 R /XYZ 125.858 610.946 null] ->> endobj -429 0 obj << -/D [585 0 R /XYZ 242.536 551.599 null] ->> endobj -186 0 obj << -/D [585 0 R /XYZ 125.858 378.657 null] ->> endobj -430 0 obj << -/D [585 0 R /XYZ 247.786 307.355 null] ->> endobj -584 0 obj << -/Font << /F41 326 0 R /F32 316 0 R /F42 328 0 R /F34 318 0 R /F57 442 0 R >> -/ProcSet [ /PDF /Text ] ->> endobj -592 0 obj << -/Length 3051 -/Filter /FlateDecode ->> -stream -xڕZ_ܸ ϧطzbK۷4w9lqv@fȌ==MHٲ;",QD?TEwLDwYӻnCdh_}Gw(Rub\=Pma&/O7[O㗇/O& -~HB/Od.B)=GІ -nw+ %Tv= 綯Y{qMљ7# -S8qR? dX')V:O(kZ<\j;|ײk -Y Q58NzXbOuSu[8zrH &v1,?hΰ=֌3Af2-| awPr=^)@᷿T]\vEk]нap4偻캠q?rrz.m$7d) #5av2p3beVVm\TGލブ)F㫣0<ЂLbziQ,8~c%!RO3([\NҘ]ǮgiW옜d(fpfugnQd#rL#DZZ;7}06.K c]9h>HG=;u3X9#ei ˵7m?ehSH3qJT K=jV*/G8 I^}qљuT$2u-"g'Ŷ>q9dN2qBҨ;!j {jLӧQf\w-I<Џ\)r(48cᎬ ΄&] ,Ĵ{SnxEXNc;QMG "nijp7HAds>T8z\Afʙ?j)6Y `rTu9WG7AĂ͘C"_^:S3z|80rvH,޲B"Um+޴BGs -oJsVf1RYpL{*YeVJNZ0!]~8lC6gaw@JCM8A,ÙwOu #SLd8na{'v5h!Es4D8&4jCgѷەu)h"zۈݒ6BڪyҨ+ 'UUz, -CX802"!$1.jZNh 2Vo:g(s ЄCe0u%.9ƏM)K9]iK2,ySL֍/ݗˊr$ET;Ht8ѯ-3#w3K܇kHe%iƳddӦ[>u/@^BsV,}ϻx,!C`!֡zW:\`șBr2Dl m:+niSu,Jc/=ϗIɕA?`8Io&(,aEMPt47A4KikK{h-xZ:cS*fMM?3l|ӎojnq_M-MKl*6l˂)vR`}`׵'jqyDmV0dl:8Yڥ+rr1ekhnF"`]pޒKbc0 rj+r,/J50Ԋ1&$+.boÇIwc;RGLRT a݊Ff/vXv -H7܆^ k'Ü+!0} p`ٰJeSZEZ\rG^i2%93<1Y{wY#x#[ -4?"dXu1.@zR!pi>1i䥝=OWr6Ŕ ץGU8OV2*p{S5Bj!+n6Ջ IoPEǷ{zEL7.tF0, 7NcEz պמ~0o㛊WYe[9~ -qV'7E?c ~P= (ǒTSrd3[3AWD\*J\M,TGKHC_̮&yͦci2dX[x1qTFl_xSt᫯!ev97 LFd~y endstream -endobj -591 0 obj << -/Type /Page -/Contents 592 0 R -/Resources 590 0 R -/MediaBox [0 0 595.276 841.89] -/Parent 583 0 R -/Annots [ 594 0 R 595 0 R ] ->> endobj -594 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [153.91 224.022 160.883 234.966] -/Subtype /Link -/A << /S /GoTo /D (figure.8) >> ->> endobj -595 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [336.614 212.067 343.588 223.011] -/Subtype /Link -/A << /S /GoTo /D (figure.5) >> ->> endobj -593 0 obj << -/D [591 0 R /XYZ 125.858 740.998 null] ->> endobj -190 0 obj << -/D [591 0 R /XYZ 125.858 593.76 null] ->> endobj -194 0 obj << -/D [591 0 R /XYZ 125.858 486.787 null] ->> endobj -590 0 obj << -/Font << /F41 326 0 R /F32 316 0 R /F34 318 0 R /F42 328 0 R /F57 442 0 R >> -/ProcSet [ /PDF /Text ] ->> endobj -598 0 obj << -/Length 2392 -/Filter /FlateDecode ->> -stream -x[o6_@7}(^]>(g[>Y7MI&na+ gv2!TLd1:<. ^} $mhҀ臻wWL4ҒM{f$lqrys38vR?~o&>|[7$~tL O?}vӻ+FcHq 143w;HH=*ƁHcyF)D8Ha.I*F]BU A({xz -4e'u^Vy(0ueQϽx`mF]5e*)6eUmEa,7s\LSĩ/+ı-.-3 ͙/ ~?#duA50{ni,Vn۬b%m؜Bp2cRʤ+OZO $iQ0E/' ̋S܄{S-T =CvJ`1D,зN“h9"))ɺX.V^Qc7rlSutAʄ]2ϋm}!A,Vźv$ M&{ga&-DFuҿpBԝ&ǣsD NpVd8:)EL_LSnr;_<ߺ37x*͓$u~oR!éN]F[Փ+1d7ޖNGqTc BF0j ywycݵ'+Е྿Rp&wJH:[ =|[aJw]^_U9yX?l O,/&ӁyL49Ҫe.ލxWNMU|5S͹`0#rsݼ\#ft >C<׍pk5f h5_m^\ ܪa#;/\vWlk`gn3 #cq`,ѿ绯]?MMR[6=|7 -NY$})$$ܔcȂ2.w?ԡh> endobj -600 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [385.386 433.203 392.36 444.146] -/Subtype /Link -/A << /S /GoTo /D (figure.9) >> ->> endobj -599 0 obj << -/D [597 0 R /XYZ 125.858 740.998 null] ->> endobj -431 0 obj << -/D [597 0 R /XYZ 242.342 711.29 null] ->> endobj -432 0 obj << -/D [597 0 R /XYZ 213.007 417.417 null] ->> endobj -596 0 obj << -/Font << /F41 326 0 R /F32 316 0 R /F34 318 0 R /F42 328 0 R /F57 442 0 R >> -/ProcSet [ /PDF /Text ] ->> endobj -603 0 obj << -/Length 3150 -/Filter /FlateDecode ->> -stream -xڍ˒6r2 b;JRo=@4"Uק_嚃F -SwJWy[w)kÛ>Qp~y{˻/+B_*"{ӽ)??~}/}_R'TBH|`@]U ~:/@Mwݗ@SwyUwA恾S&/M}Ε.,E`8L<&y`R+\ FmYF6"w?*>ˋV=hJ+y3mty"wef[qE@YN׀}s@)~@k ;!;͗K۞z:x9Jp OGxoɗǚcKE#}~v DSR(ܺLà|2;Mh֟EUxxEO4U,`u8x.I..|o-pH]^WO!2xtLjWdVMB@qf[VxS6ʆ$vEz!Z$A- 3OK Ȁ|EA kVz'.B:g۾ !º{G)F}2#-@c>&<  -0(=|'$ {UenWt^;/n?6#ZBe.P8+M#ƒn2L Q0j6޸.L׻j8O[ɝ7h! gP'|5r| -wn}N8#) -6֬]V%yPlB!415Y_jMO`GnhK@p\ -Jy+g~Ze &OaD^tۺjcXl1>=7Dö^zn8kqi=u㼬,@MynϷrп2(w;J(|-ٙ*(APVf`>:/g|#~XcVKtfZN]FNX !AXEvCĠ޹-.=!:`o8A@P} BAwG&HȯIG;Q$9!"q}'$} U*z#-re T2Mc|̓G̬*^t'kj&a`B>|'TnyIKDyd( -)82:+8&ek\\'~Q.AW4ꊥ7ʳ5 WJ*\Ku7޲ X5Ƽ '/P!_(ަϜkҠD E(_ -U?T2T%3&Jz9F8-ha *qNjn\JіҁS3wB؜u8!TRX_0in6WoAwJx Dԯ RU³e|*xB4jL9!t9q9yVSv]h8О|$:ɇP`E 01A8|0?W/LLwd  Ɛ$`Y҉@=ըDA#ױTDʽQY x,f @Nt;_LhФ03 &㾪2 hL=4E:͎7l46:o <66Y_x| -*)w!R?Q 綹>pcmu;Av{; ;=9+-1Oi0rD<7Em=wjG-=oijǁ :0 -D4!`宨BJGj f&,̸4SN11U?hTh(:.S:Mv-9d4CBu۶rF d 9 .{*$(ľP - oS/$Ѕ:4jtp6kd'Iwd&HrVJ`D>Μܾ:Ek6CR{Z烕ڨL;T+T;+:|{ċ,{ -iT⼊ nU* bD iQR  -;ÆPlڭzcGӔ화:N`4=)C b3:^/LCz$MU೛, MFT< K}^:_G;2/DQLv[(%م$ =}Dr?ׇ䋓P.azB`.dnMXQL"SG5ngIjf>΄ƋDMg&SA.)¿?tEnʛGgm="endstream -endobj -602 0 obj << -/Type /Page -/Contents 603 0 R -/Resources 601 0 R -/MediaBox [0 0 595.276 841.89] -/Parent 583 0 R -/Annots [ 605 0 R ] ->> endobj -605 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [359.634 648.082 366.608 659.025] -/Subtype /Link -/A << /S /GoTo /D (figure.2) >> ->> endobj -604 0 obj << -/D [602 0 R /XYZ 125.858 740.998 null] ->> endobj -198 0 obj << -/D [602 0 R /XYZ 125.858 716.092 null] ->> endobj -202 0 obj << -/D [602 0 R /XYZ 125.858 692.898 null] ->> endobj -206 0 obj << -/D [602 0 R /XYZ 125.858 443.225 null] ->> endobj -601 0 obj << -/Font << /F41 326 0 R /F32 316 0 R /F42 328 0 R /F45 384 0 R /F34 318 0 R >> -/ProcSet [ /PDF /Text ] ->> endobj -608 0 obj << -/Length 2970 -/Filter /FlateDecode ->> -stream -xڭZm۸_- k$zmޚCz&{m^QȒl'K$'%n!"Gp晇TMjd+_i/޾Xdgev^|FT<{z |_meH.Ծ ^~opR'JT$}xa4JEQVfiw *G"ӹm{Y9 R影U"U]DYXk3ThtcY\sy\/%tN:^.ǥZfݱl.h5a]/ڗەy՗Nggn*7y[pК|s m$^K$X*X$; [∌ycU N&pbmʎGMs8eҁ`YbA@_/O#Xw)`gEew i5И| _e>6,k>j guVl#>Z*ؑqN^~!e/HNͷ CU lihoӚ^jg=^i3 Gߨz[5UYÊ\_*94"nQE۲b}io'CidzE[R`ƃ79b`wy{ er-RҀ#aħEA_X& G fTwf2qϖ !>66Ԏ}? sĝ'}hOXJc{&+ -*ZX}Z(h -Om?I d"g7aQa] -pC?Ue!ި:PիY -/lBB7bޡXRArV(xohzY"-␧Cad)q,>ZtO1G A#X{%P#$zª@:O`Z\2xV5C|Ia4@5C}{mFP%Wj ɺn̂Uǔ -7Yլ$"~-{ZhLD(ok -kX,l>HX5H`~N-lVT& c -vk4ٍv#tכ43۴!aXh]6k\p'2z3&N t'gʺr>KwK4UP*HzyVC-x"AL!@ xj\VXf= -:UQb>B\G@ a@6(@ -7C{"^='>FoF#-b'AGEM:LK/+&HA޴+i*$:$@&6$jypc}Na` )mw1D@gfxNn:%<1b=9%2G; KX4WǦQKB¹ -B,"#0d-D0-Fyo&󟀩KՕz -߽~XA0%hјgrNgVY1kÎ@cpHSa ^w+SR1V52 t@J VRCʍnŧ/#jRu4tҧLLOi©b3 -vԈRpR|jff.m]9"d0s[TGCG Ac_LS}|aO,RilOo?|x8)DՐMQa#vLkZ{p]R餗D ŻXjKAETw7 &er;Ua(I1| 2{i`7?_aD(=OךߛDHRKР]ϯc=b**#_%T1AHU Զ}QEݥ%sw!.ohVb'a k-2%f6HVBv@ŷ F FJZl1~{pA1{"WEMm DPbX`k$2; [z2yq ,wF%UBDx[ٱm.Vcsu.Js2(PE6!I<tG|c;G1̘vz <?ÆYL:CW$ gHjpR`>K #N7Tj^ѩ# YQ;{2Mǝ~<)ķdB^!T$~4*en1"Nb}Hf{AkM1y I+ R7̪1\bP|^RtbET᧜Z]$ Ws5.Y2,o)uv +IY=fSV|kqI(v7s?ѹef,Ԇ o"z2x̳l6xog[ ^w6 ^mWpMj'xvWsIio$JNjAd3k CמM?gGDL׌#yBh3įN"GXș`?`ȋ4gi Ip}FO{΂xie/?' -<ͮ.&l}h2 ;(>%RFFY cN -8 A lt$a/03=9{Mw*_!> endobj -610 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [212.725 519.863 219.699 530.806] -/Subtype /Link -/A << /S /GoTo /D (figure.2) >> ->> endobj -611 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [345.235 519.863 352.209 530.806] -/Subtype /Link -/A << /S /GoTo /D (figure.3) >> ->> endobj -612 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [140.075 508.007 147.049 518.876] -/Subtype /Link -/A << /S /GoTo /D (figure.4) >> ->> endobj -609 0 obj << -/D [607 0 R /XYZ 125.858 740.998 null] ->> endobj -210 0 obj << -/D [607 0 R /XYZ 125.858 716.092 null] ->> endobj -214 0 obj << -/D [607 0 R /XYZ 125.858 692.898 null] ->> endobj -218 0 obj << -/D [607 0 R /XYZ 125.858 563.449 null] ->> endobj -222 0 obj << -/D [607 0 R /XYZ 125.858 327.633 null] ->> endobj -606 0 obj << -/Font << /F41 326 0 R /F32 316 0 R /F42 328 0 R /F34 318 0 R /F45 384 0 R /F57 442 0 R /F51 615 0 R >> -/ProcSet [ /PDF /Text ] ->> endobj -618 0 obj << -/Length 2674 -/Filter /FlateDecode ->> -stream -xڅYK۸W̑JY\37gmodXIqɑPN&> \efя?M)<7M{:O bi+AN+wmt|ӏ>~9J_~?Y8)(BwRAa>r0\(ESV;?t׺ʳj538CuK})ɺpRA80.V)lȖ]*h) L*&IcUF9_IbuqZh.e+@ -+14{Ğ3gv^P{m;&768`k`u}Uu3?P\uunk uۅ|_75o#&~ωVi1RaPf\0ӮXi#.N*We \!MV3Yr؜ K NtуP4B;(B L B+m) :>se`$ -Ka9Yl -ciz(}] U)v \>/mȭ.t' b7-d7"Q_7pb?Y~H -jKn7bpG,Dưc 0B祫 q!Fet9RDov_c&4#UC /-Ph#!/%O3sd1C0vxS";zqQV/LnqA4g r\F)V[+O"jZ i霴u Ј]KH zFьX#zY=@ڝLTg=YXgUa6?n9*zv+zES7M2@yS·6:]X o(0͕*1ٙ$$P;TSNIϫRL썖?{^چƩ/B+D??@™.endstream -endobj -617 0 obj << -/Type /Page -/Contents 618 0 R -/Resources 616 0 R -/MediaBox [0 0 595.276 841.89] -/Parent 620 0 R ->> endobj -619 0 obj << -/D [617 0 R /XYZ 125.858 740.998 null] ->> endobj -226 0 obj << -/D [617 0 R /XYZ 125.858 716.092 null] ->> endobj -230 0 obj << -/D [617 0 R /XYZ 125.858 531.245 null] ->> endobj -234 0 obj << -/D [617 0 R /XYZ 125.858 342.577 null] ->> endobj -616 0 obj << -/Font << /F41 326 0 R /F32 316 0 R /F42 328 0 R /F57 442 0 R /F34 318 0 R >> -/ProcSet [ /PDF /Text ] ->> endobj -623 0 obj << -/Length 2546 -/Filter /FlateDecode ->> -stream -xڝYK6W̑|u6g+( -H m(qR.&h4>|ݍQwSwJawyeYW>d֏^ uWe=n=d(Mo?nb}q'%,b#^}O2L1,TPѶl8gλqi4 -[WZw ĸBlɐuEB(]{/DϙQDLe %* -d~/Z4"GE㉕YVfl%JMh#vT)t(Of:vjh/09 ucY( rKH<ː/JNnɴ hӮ*aMtxi15z 0+;Н1h&>:6*L  !w^W|˔QxQȽ3]IlyB8K`V Wy͒|g6,Kb:`ߧ 'd(Wn$LmBt2oVp4qA//SY1i+lt|W yI@rxގ{FLoJPV*әTCEsxDq ,aRz-1$N0X+,'C)3_^'T9|2dz䁾z$ThhsYq.S`zەh -8c"@3Gz`1=3@Sj8P6XaV-(K2.Єxp,¢(k* - -kzVc(O `o|<=c`rAL}N3' -VIruXdj4)ÒP44aW10K;`&J<\tY)JJ#QЊ f a~gղ[ Y tea:OP9HaQ30 ;iBs y6TiZܳfN+>rς(0| >$RVuݝ{`EsZ`'1o8 -pѠ9|_{\xP 0(>K/Yz?Nbo}/5 WľGt\< B+&ӀM8tw!gq🫮̗WY@u\U{u(i| -Q̌~N쪛' -ֹɸ ?}#+KT7"DIa?`zuJINa/+ &ۈHG;߭sy{@t4/"IdJ,O?]8sX#uN?txN -k_,X"ɟ_JHտF l -Hendstream -endobj -622 0 obj << -/Type /Page -/Contents 623 0 R -/Resources 621 0 R -/MediaBox [0 0 595.276 841.89] -/Parent 620 0 R ->> endobj -624 0 obj << -/D [622 0 R /XYZ 125.858 740.998 null] ->> endobj -238 0 obj << -/D [622 0 R /XYZ 125.858 716.092 null] ->> endobj -242 0 obj << -/D [622 0 R /XYZ 125.858 611.708 null] ->> endobj -246 0 obj << -/D [622 0 R /XYZ 125.858 481.586 null] ->> endobj -250 0 obj << -/D [622 0 R /XYZ 125.858 352.336 null] ->> endobj -254 0 obj << -/D [622 0 R /XYZ 125.858 325.983 null] ->> endobj -258 0 obj << -/D [622 0 R /XYZ 125.858 265.701 null] ->> endobj -262 0 obj << -/D [622 0 R /XYZ 125.858 194.234 null] ->> endobj -621 0 obj << -/Font << /F41 326 0 R /F32 316 0 R /F42 328 0 R /F34 318 0 R /F14 545 0 R /F57 442 0 R >> -/ProcSet [ /PDF /Text ] ->> endobj -627 0 obj << -/Length 2221 -/Filter /FlateDecode ->> -stream -xڵ]~*gH3@׻&${H^m %q~}g8,{w?hH=CoB 1lF!lS_#,w(; ū,O t_7H;a?_s7?l׫RvI)YpK/܏gGI$=dOl8gy EN18|v'0xbUߚ%!#c wҰC0vD<ҥN:$ˮK"cTM#?S -WmCvCrxR=ȴq@rDq+Pd(fRovI שS i xA>N4ѷj.CO ज़+[̖gq8&UvjJe)#Gьu3V4 H9LKAg B)lP֢bOmCB֏n`'0 pK/h9+6|BREMu$M0w߾_oPπq|ƶvt9*GA[r; @) -vda+y3Q:狑Ѽ[ 0vol3\;pGΟ!JmAG KڱNrt3옠zr {IYۻҝnlߙHk R+߿eК_"aɆ(ct\@S UUa:ZydyZs<)EbVw9o EsL}dS?cyTy資|fCKWCեvnv]TZBwcи,ZySE1Uzei..Г4iMGs"xߠ˻0FzǶՕ!. -r0fvԵ2y^!:qS73>y,㎧,>5nOp}f]|{é:riwBĊG%#[\آkGr};:{Ë5nm0L^̛Xn"G )Rrɵ<2L/o1U*uk-O\ ICw{=a` - -ZLI_ t8ƶ;^=VF?NƓZh]U @\j -߶^ԕས {,Ce0I-̷[HK#B %YzCv`"~EC&?rN`E^,zEĭG%YW8LP ܂N9-Up`\XL$m1-HX.Md&vI[B|չ.Dg~jVin|Ŏqv]cG&5UC/MFly=&ˌۂU&Xv6)*[,mW}>}+3ƳtzfOlY"蟀> endobj -628 0 obj << -/D [626 0 R /XYZ 125.858 740.998 null] ->> endobj -266 0 obj << -/D [626 0 R /XYZ 125.858 716.092 null] ->> endobj -270 0 obj << -/D [626 0 R /XYZ 125.858 527.26 null] ->> endobj -625 0 obj << -/Font << /F41 326 0 R /F32 316 0 R /F42 328 0 R /F34 318 0 R /F57 442 0 R /F77 630 0 R >> -/ProcSet [ /PDF /Text ] ->> endobj -633 0 obj << -/Length 3313 -/Filter /FlateDecode ->> -stream -xZ[~?@֌Hdli -Aulueɑ䜸E{ᐲdEmԐ3; ?*q/"I/Ã҂zLJ?"IO/Zz|OW/_~|ϵZOO/{~ L`䩅" }^(J>,iZ[~}:l۟ev*Ӯn{K,B>nj[6Z[첎-o6rs+UdܹE~^޴E]X'—t%]n֗NmO҆,CT-p,, ualCZuEƟ^`?vc.@Q,hB}j2J;dXno!_?:0 Yy:*jj#-0hZEZ:G'9T 6BIKEg1 -h6ڴwܶ'XȢ)wU.jǝiҳ[و;-'{($_HyܧkîE#mr3-K#eZ:6E)R db0Ae))É|H &A lَE10PiWSAkĵ~"DiYoBS"C($~LRX_N 3A93Bz2R*1[U 0sƶ#gPGRh ,q#L˶րAu/?* $G JM!}+nbw2jߑJۼ9$^3QBĿŐ$F2OR|3Z1 "ß38)6YsWRCh2R g b>"-_wi{Bk5#ңH::YAzn>䂎:\ ȟ1#! ܣ'<O-3k!dqxо>vAʃH ZZܲz4i[ 6T -:눼 " lw"{6>A܄G OiZf"FNJ"!GbC G' ɚ*B?D #~z!#x^XwЋbQ/Pŀ])+MkϨpQ?^O?"O/~or>D_|||- w ݋3NI8e@vagxxs$c SN$!b+s^1^$DS CwnoWpS%$+R0ڥJ|:P$<>iݭZlT7<W`qۜ; ]`wR OrjS0jj+|x!W3Ҳ䪚߬՞Y7[(iwEE_m Z - bA[Di_S*qٌ?uĖ)b<,!KcS /rT/ 42[G@U9F(rEBP?e44. So~봜Q/$wΪTN"lJACTG{%mV[j+M~ȭ< @̖gNHD8FخIIH}t:I ex=o(㝜 H~,^ j 4ywj*sWŒjJJrHLZS[YK^xuQX J^w߻IMF8+`IzۡBzL(cALCB1AU6FUHzeR7BYrz)SPޫi_vvTLveuAY t{M=^K5'v1]+Xg_^T'jpEζi"Ss6w~oUt|KqD}՚K&I?i=&/uAe87A͉/!u%wKI59I2XCWnͷ#O&6ǼYzh\dy5egnO6锛4Yvҷ-p#}'̓Np8Zp((Uq0nԒc'te4^ۙͤ|5iפJyiGҪr(unI~y_1썽䨮bEUvƁOf~1KhnϷFt{LAS.2'X^s2]+/Exg g]6'Df8VEWHt(gFģQGlEǗ!H~7m *K 18dOM}vV5J'rFߘPs>C]Z g|SePb3G9BĈ8G]7~#+e~Y@[=O'Æ81sƙ_]<ݾ|T# >=l?3)شqYWaZl&8 to .yqεۗ2Ht'd2.0 >'‹IQ٩|%N0r=p}`{蹇cN4DEP x0ߺ];x#f,7~7f?/Lê.Gh_}Jh/> endobj -635 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [196.462 588.655 208.417 599.598] -/Subtype /Link -/A << /S /GoTo /D (figure.10) >> ->> endobj -636 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [315.084 588.655 337.002 599.598] -/Subtype /Link -/A << /S /GoTo /D (subsubsection.2.3.5) >> ->> endobj -637 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [331.398 323.359 343.353 334.303] -/Subtype /Link -/A << /S /GoTo /D (figure.11) >> ->> endobj -634 0 obj << -/D [632 0 R /XYZ 125.858 740.998 null] ->> endobj -274 0 obj << -/D [632 0 R /XYZ 125.858 716.092 null] ->> endobj -433 0 obj << -/D [632 0 R /XYZ 257.615 573.128 null] ->> endobj -278 0 obj << -/D [632 0 R /XYZ 125.858 214.26 null] ->> endobj -631 0 obj << -/Font << /F41 326 0 R /F32 316 0 R /F42 328 0 R /F34 318 0 R /F57 442 0 R /F77 630 0 R >> -/ProcSet [ /PDF /Text ] ->> endobj -640 0 obj << -/Length 1887 -/Filter /FlateDecode ->> -stream -xZ[o6~0a.VtXx$dMP;yT~Cd*z8Fb=iD<$*0Ql6: #xv4[iD0Ɠ? F˧cHqz, ]̎4HH `م))`"ҴH11#l )XxQ'۹GHkiJVJD &-ūuat)Ö b;xj{tT' CzI#.6,/avjojs }bSe67d j̕ lTd57K.Ap, -eno#f^sY ،% -G^#c#+9L`d .!.ÁO)֬'i8K5Z#?qƵȇpBBTT28+@h8 t&(U-H:7qgaG#.ݢJ!! E8 -_i{HKߋaPO0h|qpnnh5!t{̞O(-nmG vyGbG);>חdggj 2eǬcic[Z+[:+5hRr,Ev^axӈ&*qVTBakt PƝi0WD<&G>,b:|ڭv1N#M]Qa=hoj0c_ H\$<[M|1}v0tOk(7ޟ@^6{;($tGۥ=:U~|K{[?_dYn+N%޲ps5wY!`]盥61F qWe/(Lfw> dik<6۾h@V~osJ<8@sg#l:49̳maRJsPʨי;sϟR,ܪG`s3RX W4endstream -endobj -639 0 obj << -/Type /Page -/Contents 640 0 R -/Resources 638 0 R -/MediaBox [0 0 595.276 841.89] -/Parent 620 0 R ->> endobj -641 0 obj << -/D [639 0 R /XYZ 125.858 740.998 null] ->> endobj -434 0 obj << -/D [639 0 R /XYZ 239.219 711.265 null] ->> endobj -638 0 obj << -/Font << /F41 326 0 R /F32 316 0 R /F34 318 0 R /F57 442 0 R /F52 454 0 R /F77 630 0 R >> -/ProcSet [ /PDF /Text ] ->> endobj -644 0 obj << -/Length 3149 -/Filter /FlateDecode ->> -stream -x[YoH~@FcX`sxa?b2ԶI-Iߪ>8h*W]Uݦ2Ib/"$*XC׻+jݘ7ի]$$ nDv2^iﯯ?kfj߭u#(b8;3'"Hi\}r7o܌i2Q"∫-_"L 1cق -E= eIAc!}' =$採f -)ߔC`Κ -I$Z Lj3nO==h,CDXgđġ`?]/d_qi[_\eז9RzPLɎ/֡HH,i2G1Pr"X6P0T[AEl2NI69l"+GHACK8}^\IϢ\e͎U.`]Ƽ&'$0f򛝺 -UjUG7j5`V(yf ?'3BPk=2RiL9|4|o!8 -MZ"Պ%%1cOı*j ,J;5 |KenWCiә)\(WUd%R%emZ2#?֊R76 ޕ/T-( F!Yot>6f8T6+ڞy#4"Yޕi, [lJ8zȬ8j8&2.㈰H{HLCkҝ}&'k>daY{Yul -+>Tm pijQO*aZ :l*ZxHQ?C i]R5هyې(\P˂˷f -V.H Imos}@1g1pN0Em=+U*ը!#ޮ, <3ϱ.x= u™oglϼ%gB O7Νٗ[}:4˰qlϡq48(+ 淛f,SUD,*i,G=XJ S;=Vì&<9$t(;^ -i՗BSҪ.h}HjV;'UyP^HB']`LJlʖծL|RGط(nt`;zl1WM-i>>/:~@c, 5gTsS}E߳qgG.Ė<@ `o qEli;WiQN+܌! -QRW <_&9VUU K)O]/WƯ " `IN7?\`G";do{b - b / Z7Js;4;\ FWjHjgcV#֦e ˘鍲'T 31f +YӨBr}""b -&+9 ]HuZ ⅞mzԮS=#O%oӣsL- e"|G;}]t @Fצi!(9| !,WX}4_n˝2yjoܰ=;iB3Gc ,IʿV?#nP}xXKs/-]>|0Uy$/&'1iqcs M}ŝ ihD8<0oɢf̮W P'ԛDcR롡 :8ZK±:aC)EDb]sXa ;$2Ns(}>(7b=b>@1gK~Ù9f%mTgBm[n” -1^fbib½,cU4ebNĿSW#lZTA,`cuVO% ٕ1jo2{GfA.6;rfBU9wly,Sm_6lf[r!GODŽ?@ME5`ig~ l*/6fU:˶cl*#"Nt,0^d^έ/L@{}2B##1>΂RcO\endstream -endobj -643 0 obj << -/Type /Page -/Contents 644 0 R -/Resources 642 0 R -/MediaBox [0 0 595.276 841.89] -/Parent 620 0 R -/Annots [ 649 0 R 650 0 R ] ->> endobj -649 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [288.398 489.043 302.844 501.417] -/Subtype /Link -/A << /S /GoTo /D (subsection.2.2) >> ->> endobj -650 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [443.551 381.681 465.469 392.625] -/Subtype /Link -/A << /S /GoTo /D (subsubsection.2.4.2) >> ->> endobj -645 0 obj << -/D [643 0 R /XYZ 125.858 740.998 null] ->> endobj -282 0 obj << -/D [643 0 R /XYZ 125.858 716.092 null] ->> endobj -286 0 obj << -/D [643 0 R /XYZ 125.858 692.898 null] ->> endobj -642 0 obj << -/Font << /F41 326 0 R /F32 316 0 R /F42 328 0 R /F45 384 0 R /F57 442 0 R /F34 318 0 R /F11 496 0 R /F14 545 0 R /F8 648 0 R >> -/ProcSet [ /PDF /Text ] ->> endobj -653 0 obj << -/Length 2650 -/Filter /FlateDecode ->> -stream -x͛mo8W= ^ӵlѽlMAX,$I,m -E8 %B.( -[K yKtO2?`ȋA_AxQ?X8jIh(N2x:4m'(484 QzryR$br΂(_j(pV)W_yZ\ڞ۵jкq_i1nPNVBUe76W:Mt\yqvio݈$˸CO -V$k9 ՞ .~(J]Х4C>] YMKV6 p{ WoSEFDǏR7ś&|H%V6\_㝨qb$sKe%@uKP*fiUSo cy[Rdž颮FЬ2Y&Sv/ ? ->i1C!OiO~Q~%FZ6hr PDmhky:g}κв`}C -b=6 ZgH. $XT,l\j@P渣7ݘ]9N`X1L+ohJ:߈V>K{>kL!8 r!?K3v^ʛb -=Ӟr \/D58iv:-9!{):VޫoJ+d~/CO:pF*XHmmr,&#_#M: 8Vh&a:FJ|d e+,(DTأ2x. |>I-4FC2XNA?'qZFoV{ɅDT@g>{rAʽL/!ˆyZ'MVmon{? 7Қ$ #謇ts 8 D:*;$ d|hrh4 xk!;5d (!;9Zg<PN0Fe]W [k -5Qx_ɆmmѢmojv) MiP*>Cg8߬tc>4PHeٜQbsHLJ8ìu!| a{?0::R ;/9}<=kNYUa^hd|vyMVQUC>l zJYU@@a -gks f_F6~qj=v,3Q0᥊IU״>#&hbyt -wJ_鼧>}Nf0i~O}n2{VX ckI2_S|vug2dQ}Z Ӎ>(Oa~6\O.?A>P4aF˷zϼAYh׌= 'Nol.g93A9* CU܉z[l>s),4G08i%`+eBA,W7fkϺ!V]fj]1=}̿g3D~PCQH[ug y L}!1%,KL@bD C6Leb#ϺMc1I]l,H -yv˧ϗ{7őj9EG{M(~Hlo.zuͫQ[g 9˗E ,Ce_{QOdm#V1[>nE m v]!Tb ѭ|1t'iz,w%qrӧhd{LLA&~zJ`aX(ޭy3to6 ?Hݤ -T5k@bނX_~ M82M8BH4Kស=ڤU '}YQ|"j'Y;8{_pCr¥c9o߮ ߔ1jpR뫱:?~=4a˸jk-](#)vL6yAFC?c=endstream -endobj -652 0 obj << -/Type /Page -/Contents 653 0 R -/Resources 651 0 R -/MediaBox [0 0 595.276 841.89] -/Parent 658 0 R -/Annots [ 656 0 R 657 0 R ] ->> endobj -656 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [228.533 646.801 250.451 659.175] -/Subtype /Link -/A << /S /GoTo /D (subsubsection.2.3.5) >> ->> endobj -657 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [316.561 456.308 323.535 467.277] -/Subtype /Link -/A << /S /GoTo /D (figure.2) >> ->> endobj -654 0 obj << -/D [652 0 R /XYZ 125.858 740.998 null] ->> endobj -655 0 obj << -/D [652 0 R /XYZ 125.858 697.377 null] ->> endobj -290 0 obj << -/D [652 0 R /XYZ 125.858 511.285 null] ->> endobj -651 0 obj << -/Font << /F41 326 0 R /F32 316 0 R /F42 328 0 R /F57 442 0 R /F34 318 0 R /F11 496 0 R >> -/ProcSet [ /PDF /Text ] ->> endobj -661 0 obj << -/Length 3578 -/Filter /FlateDecode ->> -stream -xڅZY~ׯ<2á+oYZSb`O_c ~N(H.ae]qyޝ%Cv~n2[uYld۝ -pO?~vpLov?n3>|?a~q[cL Go,1K0 nu^]}|dY݃; -S&o> wnUq]Z7VAEqx6Бl(Ks%tjn)#X@AwVTDxDrJ &2;&LJtvsg{;2ᅢWnM;v۾*nalkdo2|-=8b&Ȟ׻R8OeU8$ 7jڃkdY`7W8Ȝ"9 -3q -^x{^v)dktU}xsz6$l;8 952! )*-nb:-ƛ7Ϲ%ɦuEs>? HQVԤ+ֺZHm0| "%%&﫾gnzţwQ$17Tpm H()v]/s:`г!ԍ * -^(}#PHxpvCN[[n'iNr%-u>%:Vvk ڌҙYW }př[2&&o pL%ʄ"JR6?A̙ZÄEJ)lacB.'hҝ>,UUُ\".Դ՚+H mo>ֲit/WQ 'e7@gns lQ4;8LiHѴM}1$l=f̎7MjxZ4(mĖ T.Fԝpl;F2R6`bI  -dpɅ=.FY, q)0T]WjQ 騗}LU?l39F|ILpp}I&fo/ 2̡V:#9Ĩh3*H[pK o%AF'$ဂ/f |[~wd$s홲0HL:c)ӧN-? I >gτc;bU$Kf|9h/ZxMF?1'j", ؋oKዖ/KADA pkߏ59p1;;HݻB!4U}z?0V3kCEf?V,1cFy( W<2!\ H;ÃAػ#z|D|F?Yأ5Y0 -" !;Ճb2ٌ̱GZ'亵&!!.{E $>))gcO::Y"/"( )t]/v+ZȗSb_1v.?0 }M3a'[{Yp$d$#^9[ęN1M2A@$d4ynji ->{➀{8.yWUBZ`抒h6Kz].]m~-d/StF9I]y\|Ihf:(@##'4F#[ϥ$izpMOAdBn,$DNhefnPD‘U{gߙ/E"S"ap&_V<KfU3 ,tf $ƳufYMYu_a-X@̈́A͝5u{~W -]`NFy`,Ad=_3A$ +Y+a$ӯjK5I=|I |I$RBOu AFcPN5[~ &u ^(oW&+,DzPgT 1t+zz-JF@\fJ Z f(uwhjsǟ3I -Gtv}`My!ObfeEJ>#^|pTWvEYW W]),⮂k'#VF^<#sMAbʏW9]`nZU [CV[$HU:<6$NOM_xxfj0(I-Lr7+q:]+6IOv|w 1Xx$62J+!D+K6{izlJw2L]o]98_B^.&dFM2 dWGn>Kݖh(H^ Xh)x@˙ppE`[X8 -å*6)NJ)~ CxW+<'Ç""i?wLN瀗ӿ:+͊pR?t_;|1U -(~Ev\jIu W4I$QX_Kx\Ht#llzNƌX˖pf]]i+ jِbuAV7 a%p]e8ao'FJ/bf^4Cq;A'7O\Lkw?-*|3, YAB9?{uendstream -endobj -660 0 obj << -/Type /Page -/Contents 661 0 R -/Resources 659 0 R -/MediaBox [0 0 595.276 841.89] -/Parent 658 0 R ->> endobj -662 0 obj << -/D [660 0 R /XYZ 125.858 740.998 null] ->> endobj -294 0 obj << -/D [660 0 R /XYZ 125.858 716.092 null] ->> endobj -298 0 obj << -/D [660 0 R /XYZ 125.858 692.898 null] ->> endobj -659 0 obj << -/Font << /F41 326 0 R /F32 316 0 R /F42 328 0 R /F34 318 0 R /F14 545 0 R /F11 496 0 R >> -/ProcSet [ /PDF /Text ] ->> endobj -665 0 obj << -/Length 2948 -/Filter /FlateDecode ->> -stream -xڅYY~G hgf3 1 =]enm^eM˗}z"_qj:X<_~^>?<ۧGc^f(3\a;0ƙٻskn7=h{d_9ۮgT̋asW߲zq즻VS< 8ͼdsN‚[Vض5]cA$mgހhZ 2 PN[Ody: ZEN@<^@+ȢեUʝ,/  ^O_0i#Mq*)6rdrA::bWsbL#qw&o.;.G0h0w~ r^ݩ\sw#~ekrJ$%vlc6:$ ˞GH<ē R:lDT**DDM+Kq #@DJ?!k3SȻ=1^A"ǥl1n4̠ƈ0렿jlW1a|H[ؒCu8?5TEd\EYvLrwdq \'hJ -@pO]8cœ=mLPRhL>q&X-u`ŐC2M(G1{}*d /̪ҎBѿrL-c>Ipxdy Q`dVRt*d( JiPnvE^ -YLthG*++b("ڝip+ YJCPC>e{IFU~/RG섨oPQpCL)* ,UƠޗp9M"HxiĜ > p8WF0&/y#3mP|܃cGR^1ep^ -q4'Y*H<$a29`dơJQr5f twrQ.fkzJb厣OvMF' 0F{~)zXFy6gRS-;9)jrDnvIu{^Oqk6.uμ4 -o`ȋ$"^As-0䨋 :TFu1)uDC(>m&v^z q*1> endobj -667 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [337.95 321.033 359.868 331.977] -/Subtype /Link -/A << /S /GoTo /D (subsubsection.2.4.2) >> ->> endobj -666 0 obj << -/D [664 0 R /XYZ 125.858 740.998 null] ->> endobj -302 0 obj << -/D [664 0 R /XYZ 125.858 462.254 null] ->> endobj -668 0 obj << -/D [664 0 R /XYZ 125.858 230.976 null] ->> endobj -663 0 obj << -/Font << /F41 326 0 R /F32 316 0 R /F11 496 0 R /F34 318 0 R /F42 328 0 R >> -/ProcSet [ /PDF /Text ] ->> endobj -671 0 obj << -/Length 2753 -/Filter /FlateDecode ->> -stream -xڕY[۸~ϯG)ҾdSi0b 4}ez,]]F5(.] Kmyݕ>dƍx~y~cAB& -puç>cQIguV>pg?} _~zjVkl G{x%h`wvhmg:TOP=m_éh廵2=t[5b3Vq^s`?S; FV8/pgDd󪟔Π,P6'SM;ٞfφTQfZ[HN@#[cX'nz>d^&$TÇN(fnGC:f6TJPvɥ\%:hxZ'68N m!B ށ11aLD:FȽ @>^;t qY3v[mvMO8P[U-ˮS@}YR*e -!p߽z>, Xy@o@#}Xf,B ꅏ7&NĨZ%(@% l=/s:vgL\co1Ua)q)(CS.q), \9󢫲25%kaNtjQup S5ƅBcD0[C.M C]:^1pd ; lCR,gw&A9,.$uIf9g U3ҡGkH1uy ζ2O+?oyb#ǽ[%FX(=ۚւ)ؠjz7H۱K6zeq" 䉉+tز}f -ώ*JzV!,d5-0E_$vo<X4xTg?Jz;WpEW\DW |z);0=q!\;Y\p pq8ϵ8mܹ'$fj"HDNp)ȸeekO*P#w-~!=޾2X#)X+A3_?pz T'8!IhClՄ P/RwQ-BuQ p5H^|h4F<$[2rckw @oN ObWe -+Q?/{^Zۑ89S%GAOZ1ANM -ξxBBM/`==X1x(FT=))'%lkj+A\)JJ9%;Lj|n}gVvtx ֋OM@endstream -endobj -670 0 obj << -/Type /Page -/Contents 671 0 R -/Resources 669 0 R -/MediaBox [0 0 595.276 841.89] -/Parent 658 0 R ->> endobj -672 0 obj << -/D [670 0 R /XYZ 125.858 740.998 null] ->> endobj -673 0 obj << -/D [670 0 R /XYZ 125.858 699.265 null] ->> endobj -674 0 obj << -/D [670 0 R /XYZ 125.858 534.508 null] ->> endobj -675 0 obj << -/D [670 0 R /XYZ 125.858 475.459 null] ->> endobj -306 0 obj << -/D [670 0 R /XYZ 125.858 400.984 null] ->> endobj -669 0 obj << -/Font << /F41 326 0 R /F32 316 0 R /F42 328 0 R /F11 496 0 R /F34 318 0 R >> -/ProcSet [ /PDF /Text ] ->> endobj -678 0 obj << -/Length 432 -/Filter /FlateDecode ->> -stream -x}RM0Wp4'ĽvnzXEJ1`d4*$308@&n6HBlyڠ/hDW|c8P4ȫ;aBpH_ˆp? җS\);_}"KwYz|KgqGYJ)LF ÎIy cV]}]g-"Aba-9Nj0 E'U2 T!FՓV Gʾr~tW?80hFC.ꮷ53D4Lp_16FY:#@g,20(J@ި^Aqe%_2:/ɚ-jrSr6;Ph|xOv2A"v9endstream -endobj -677 0 obj << -/Type /Page -/Contents 678 0 R -/Resources 676 0 R -/MediaBox [0 0 595.276 841.89] -/Parent 658 0 R -/Annots [ 680 0 R 681 0 R ] ->> endobj -680 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [232.547 679.818 246.993 690.009] -/Subtype /Link -/A << /S /GoTo /D (subsection.3.4) >> ->> endobj -681 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [297.572 679.818 312.018 690.009] -/Subtype /Link -/A << /S /GoTo /D (subsection.3.5) >> ->> endobj -679 0 obj << -/D [677 0 R /XYZ 125.858 740.998 null] ->> endobj -676 0 obj << -/Font << /F41 326 0 R /F32 316 0 R /F34 318 0 R >> -/ProcSet [ /PDF /Text ] ->> endobj -684 0 obj << -/Length 2060 -/Filter /FlateDecode ->> -stream -x[[o6~ϯ Do k+`yAG, ~xŦb(81-~<9ΡpQaŋtskևh` -o7}H@c')/ Z@`-{( ~Xoyw? @}SԔ,X"<XCKzI&Ek9 >\i4Rz҇ |Xt+~ro Xʶ-7~WUR7Y!xPP!#"]vx9iY\[?֜Ud+QtUС=se~5OXτ:P@CN4]E` VM4h*+ Guɗe-^D';и] ΅;I\ s[{3B +/SY}]y qtS%$3xQ{""²kΜnqQΫ}q Ai/öJ[O0>n|ɚ!˳EB?q,6K:c :7If1 bw|0@<b#j080$@sʚ*O^4 A4͠%3 k8 -7UbqRa!gA!$Lt=%~߮r26]d>˧C,h(|eEFuiSRrc=Jb"gsh - un\6@ -߱],y"<\r(s`-IM%96emSli'Z>'ak;GmF-̓ [s0qPngץy7H-b~l1QVuR]F\FuX.=cG*W9PZIQS>PuL,@8KA5ce cE7gm&|.Ҍ%#.:Շ?`M͊Dzޘ?@zp#V|mwI -Iid48bLO;nJL4A-ݗ逈iAx]Xژ+h 2;p !c5ʺ݂F44fOl%2Krnik|e 99{hIr+lZ+㍂C1<H. -`bW=u'Z7HtGYV5OVtg{v^(^?_7XN@VяXx梽~GGlF5{aP].+M.מ:.Pxtn2fv6 -try}]j/4ZZ]'źKR0~<څ5Td4y/H0ap|90́mS)緔YFpo^<[3p]$oLzr)5&׿5G BP=D!=/c uendstream -endobj -683 0 obj << -/Type /Page -/Contents 684 0 R -/Resources 682 0 R -/MediaBox [0 0 595.276 841.89] -/Parent 658 0 R -/Annots [ 687 0 R 688 0 R 689 0 R 690 0 R 691 0 R 692 0 R 693 0 R 694 0 R 695 0 R 696 0 R 697 0 R 698 0 R 699 0 R 700 0 R 701 0 R 702 0 R 703 0 R 704 0 R 705 0 R 706 0 R 707 0 R 708 0 R 709 0 R 710 0 R 711 0 R 712 0 R 713 0 R 714 0 R 715 0 R 716 0 R 717 0 R 718 0 R 719 0 R 720 0 R 721 0 R 722 0 R 723 0 R 724 0 R 725 0 R 726 0 R 727 0 R 728 0 R 729 0 R 730 0 R 731 0 R 732 0 R 733 0 R 734 0 R 735 0 R 736 0 R 737 0 R 738 0 R 739 0 R 740 0 R 741 0 R 742 0 R 743 0 R 744 0 R 745 0 R 746 0 R 747 0 R 748 0 R 749 0 R 750 0 R 751 0 R 752 0 R 753 0 R 754 0 R 755 0 R 756 0 R 757 0 R 758 0 R 759 0 R 760 0 R 761 0 R 762 0 R 763 0 R 764 0 R 765 0 R 766 0 R 767 0 R 768 0 R 769 0 R 770 0 R 771 0 R 772 0 R 773 0 R 774 0 R 775 0 R 776 0 R 777 0 R 778 0 R 779 0 R 780 0 R 781 0 R 782 0 R 783 0 R 784 0 R 785 0 R 786 0 R 787 0 R 788 0 R 789 0 R ] ->> endobj -687 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [264.339 667.877 271.313 678.094] -/Subtype /Link -/A << /S /GoTo /D (page.6) >> ->> endobj -688 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [274.301 667.877 281.275 678.094] -/Subtype /Link -/A << /S /GoTo /D (page.7) >> ->> endobj -689 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [269.32 645.207 281.275 656.221] -/Subtype /Link -/A << /S /GoTo /D (page.38) >> ->> endobj -690 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [269.32 623.289 281.275 634.303] -/Subtype /Link -/A << /S /GoTo /D (page.38) >> ->> endobj -691 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [269.32 611.334 281.275 622.278] -/Subtype /Link -/A << /S /GoTo /D (page.16) >> ->> endobj -692 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [269.32 599.379 281.275 610.323] -/Subtype /Link -/A << /S /GoTo /D (page.18) >> ->> endobj -693 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [269.32 587.424 281.275 598.368] -/Subtype /Link -/A << /S /GoTo /D (page.17) >> ->> endobj -694 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [259.357 567.444 266.331 576.45] -/Subtype /Link -/A << /S /GoTo /D (page.9) >> ->> endobj -695 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [269.32 567.444 281.275 576.45] -/Subtype /Link -/A << /S /GoTo /D (page.15) >> ->> endobj -696 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [269.32 553.551 281.275 564.495] -/Subtype /Link -/A << /S /GoTo /D (page.14) >> ->> endobj -697 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [269.32 541.596 281.275 552.539] -/Subtype /Link -/A << /S /GoTo /D (page.12) >> ->> endobj -698 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [269.32 529.64 281.275 540.584] -/Subtype /Link -/A << /S /GoTo /D (page.12) >> ->> endobj -699 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [269.32 517.685 281.275 528.629] -/Subtype /Link -/A << /S /GoTo /D (page.12) >> ->> endobj -700 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [269.32 505.73 281.275 516.674] -/Subtype /Link -/A << /S /GoTo /D (page.12) >> ->> endobj -701 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [269.32 493.775 281.275 504.719] -/Subtype /Link -/A << /S /GoTo /D (page.14) >> ->> endobj -702 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [269.32 481.82 281.275 492.764] -/Subtype /Link -/A << /S /GoTo /D (page.13) >> ->> endobj -703 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [269.32 469.865 281.275 480.808] -/Subtype /Link -/A << /S /GoTo /D (page.14) >> ->> endobj -704 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [259.357 457.909 266.331 468.853] -/Subtype /Link -/A << /S /GoTo /D (page.9) >> ->> endobj -705 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [269.32 457.909 281.275 468.853] -/Subtype /Link -/A << /S /GoTo /D (page.10) >> ->> endobj -706 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [254.376 435.992 266.331 447.005] -/Subtype /Link -/A << /S /GoTo /D (page.16) >> ->> endobj -707 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [269.32 435.992 281.275 447.005] -/Subtype /Link -/A << /S /GoTo /D (page.18) >> ->> endobj -708 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [254.376 424.789 266.331 435.05] -/Subtype /Link -/A << /S /GoTo /D (page.16) >> ->> endobj -709 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [269.32 424.789 281.275 435.05] -/Subtype /Link -/A << /S /GoTo /D (page.27) >> ->> endobj -710 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [259.357 412.834 266.331 423.025] -/Subtype /Link -/A << /S /GoTo /D (page.5) >> ->> endobj -711 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [269.32 412.834 281.275 423.025] -/Subtype /Link -/A << /S /GoTo /D (page.29) >> ->> endobj -712 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [269.32 402.064 281.275 411.07] -/Subtype /Link -/A << /S /GoTo /D (page.29) >> ->> endobj -713 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [269.32 388.171 281.275 399.115] -/Subtype /Link -/A << /S /GoTo /D (page.29) >> ->> endobj -714 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [269.32 364.261 281.275 375.204] -/Subtype /Link -/A << /S /GoTo /D (page.33) >> ->> endobj -715 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [269.32 354.323 281.275 363.249] -/Subtype /Link -/A << /S /GoTo /D (page.34) >> ->> endobj -716 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [269.32 330.388 281.275 341.401] -/Subtype /Link -/A << /S /GoTo /D (page.38) >> ->> endobj -717 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [274.301 320.41 281.275 329.376] -/Subtype /Link -/A << /S /GoTo /D (page.4) >> ->> endobj -718 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [269.32 306.477 281.275 317.421] -/Subtype /Link -/A << /S /GoTo /D (page.26) >> ->> endobj -719 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [269.32 294.522 281.275 305.466] -/Subtype /Link -/A << /S /GoTo /D (page.22) >> ->> endobj -720 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [269.32 270.612 281.275 281.556] -/Subtype /Link -/A << /S /GoTo /D (page.37) >> ->> endobj -721 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [269.32 258.657 281.275 269.6] -/Subtype /Link -/A << /S /GoTo /D (page.36) >> ->> endobj -722 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [269.32 246.702 281.275 257.645] -/Subtype /Link -/A << /S /GoTo /D (page.24) >> ->> endobj -723 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [269.32 234.746 281.275 245.76] -/Subtype /Link -/A << /S /GoTo /D (page.38) >> ->> endobj -724 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [254.376 212.928 266.331 223.842] -/Subtype /Link -/A << /S /GoTo /D (page.20) >> ->> endobj -725 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [269.32 212.928 281.275 223.842] -/Subtype /Link -/A << /S /GoTo /D (page.30) >> ->> endobj -726 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [274.301 190.911 281.275 201.924] -/Subtype /Link -/A << /S /GoTo /D (page.8) >> ->> endobj -727 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [269.32 180.973 281.275 189.899] -/Subtype /Link -/A << /S /GoTo /D (page.10) >> ->> endobj -728 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [269.32 169.043 281.275 177.944] -/Subtype /Link -/A << /S /GoTo /D (page.11) >> ->> endobj -729 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [269.32 157.063 281.275 165.989] -/Subtype /Link -/A << /S /GoTo /D (page.20) >> ->> endobj -730 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [269.32 145.108 281.275 154.034] -/Subtype /Link -/A << /S /GoTo /D (page.20) >> ->> endobj -731 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [269.32 131.135 281.275 142.079] -/Subtype /Link -/A << /S /GoTo /D (page.21) >> ->> endobj -732 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [234.451 119.932 241.425 130.123] -/Subtype /Link -/A << /S /GoTo /D (page.5) >> ->> endobj -733 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [244.413 119.932 251.387 130.123] -/Subtype /Link -/A << /S /GoTo /D (page.7) >> ->> endobj -734 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [254.376 119.932 266.331 130.123] -/Subtype /Link -/A << /S /GoTo /D (page.14) >> ->> endobj -735 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [269.32 119.932 281.275 130.123] -/Subtype /Link -/A << /S /GoTo /D (page.19) >> ->> endobj -736 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [448.648 667.125 455.621 678.069] -/Subtype /Link -/A << /S /GoTo /D (page.7) >> ->> endobj -737 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [458.61 667.125 470.565 678.069] -/Subtype /Link -/A << /S /GoTo /D (page.20) >> ->> endobj -738 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [458.61 655.17 470.565 666.114] -/Subtype /Link -/A << /S /GoTo /D (page.20) >> ->> endobj -739 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [458.61 619.304 470.565 630.318] -/Subtype /Link -/A << /S /GoTo /D (page.39) >> ->> endobj -740 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [428.722 608.101 440.678 618.293] -/Subtype /Link -/A << /S /GoTo /D (page.11) >> ->> endobj -741 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [443.666 608.101 455.621 618.293] -/Subtype /Link -/A << /S /GoTo /D (page.17) >> ->> endobj -742 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [458.61 608.101 470.565 618.293] -/Subtype /Link -/A << /S /GoTo /D (page.26) >> ->> endobj -743 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [458.61 597.436 470.565 606.338] -/Subtype /Link -/A << /S /GoTo /D (page.27) >> ->> endobj -744 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [458.61 573.576 470.565 584.445] -/Subtype /Link -/A << /S /GoTo /D (page.15) >> ->> endobj -745 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [458.61 563.538 470.565 572.465] -/Subtype /Link -/A << /S /GoTo /D (page.15) >> ->> endobj -746 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [458.61 551.583 470.565 560.51] -/Subtype /Link -/A << /S /GoTo /D (page.18) >> ->> endobj -747 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [458.61 537.611 470.565 548.554] -/Subtype /Link -/A << /S /GoTo /D (page.31) >> ->> endobj -748 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [438.685 515.693 445.659 526.706] -/Subtype /Link -/A << /S /GoTo /D (page.8) >> ->> endobj -749 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [448.648 515.693 455.621 526.706] -/Subtype /Link -/A << /S /GoTo /D (page.9) >> ->> endobj -750 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [458.61 515.693 470.565 526.706] -/Subtype /Link -/A << /S /GoTo /D (page.38) >> ->> endobj -751 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [448.648 503.738 455.621 514.751] -/Subtype /Link -/A << /S /GoTo /D (page.9) >> ->> endobj -752 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [458.61 503.738 470.565 514.751] -/Subtype /Link -/A << /S /GoTo /D (page.25) >> ->> endobj -753 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [458.61 491.782 470.565 502.726] -/Subtype /Link -/A << /S /GoTo /D (page.25) >> ->> endobj -754 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [458.61 479.827 470.565 490.841] -/Subtype /Link -/A << /S /GoTo /D (page.24) >> ->> endobj -755 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [463.592 445.954 470.565 456.898] -/Subtype /Link -/A << /S /GoTo /D (page.4) >> ->> endobj -756 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [458.61 433.999 470.565 444.943] -/Subtype /Link -/A << /S /GoTo /D (page.15) >> ->> endobj -757 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [423.741 422.044 430.715 433.058] -/Subtype /Link -/A << /S /GoTo /D (page.7) >> ->> endobj -758 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [433.704 422.044 440.678 433.058] -/Subtype /Link -/A << /S /GoTo /D (page.8) >> ->> endobj -759 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [443.666 422.044 455.621 433.058] -/Subtype /Link -/A << /S /GoTo /D (page.13) >> ->> endobj -760 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [458.61 422.044 470.565 433.058] -/Subtype /Link -/A << /S /GoTo /D (page.15) >> ->> endobj -761 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [448.648 410.089 455.621 421.033] -/Subtype /Link -/A << /S /GoTo /D (page.5) >> ->> endobj -762 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [458.61 410.089 470.565 421.033] -/Subtype /Link -/A << /S /GoTo /D (page.27) >> ->> endobj -763 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [458.61 376.216 470.565 387.16] -/Subtype /Link -/A << /S /GoTo /D (page.27) >> ->> endobj -764 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [458.61 366.278 470.565 375.204] -/Subtype /Link -/A << /S /GoTo /D (page.18) >> ->> endobj -765 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [453.629 352.306 460.603 363.249] -/Subtype /Link -/A << /S /GoTo /D (page.5) >> ->> endobj -766 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [463.592 352.306 470.565 363.249] -/Subtype /Link -/A << /S /GoTo /D (page.7) >> ->> endobj -767 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [443.666 340.35 455.621 351.294] -/Subtype /Link -/A << /S /GoTo /D (page.29) >> ->> endobj -768 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [458.61 340.35 470.565 351.294] -/Subtype /Link -/A << /S /GoTo /D (page.30) >> ->> endobj -769 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [458.61 330.438 470.565 339.339] -/Subtype /Link -/A << /S /GoTo /D (page.22) >> ->> endobj -770 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [458.61 318.378 470.565 327.384] -/Subtype /Link -/A << /S /GoTo /D (page.29) >> ->> endobj -771 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [443.666 305.237 455.621 315.429] -/Subtype /Link -/A << /S /GoTo /D (page.11) >> ->> endobj -772 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [458.61 305.237 470.565 315.429] -/Subtype /Link -/A << /S /GoTo /D (page.13) >> ->> endobj -773 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [458.61 292.53 470.565 303.543] -/Subtype /Link -/A << /S /GoTo /D (page.39) >> ->> endobj -774 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [458.61 282.592 470.565 291.588] -/Subtype /Link -/A << /S /GoTo /D (page.38) >> ->> endobj -775 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [458.61 268.619 470.565 279.633] -/Subtype /Link -/A << /S /GoTo /D (page.38) >> ->> endobj -776 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [443.666 244.709 455.621 255.653] -/Subtype /Link -/A << /S /GoTo /D (page.15) >> ->> endobj -777 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [458.61 244.709 470.565 255.653] -/Subtype /Link -/A << /S /GoTo /D (page.19) >> ->> endobj -778 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [443.666 223.543 455.621 233.805] -/Subtype /Link -/A << /S /GoTo /D (page.17) >> ->> endobj -779 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [458.61 223.543 470.565 233.805] -/Subtype /Link -/A << /S /GoTo /D (page.38) >> ->> endobj -780 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [428.722 211.588 440.678 221.85] -/Subtype /Link -/A << /S /GoTo /D (page.18) >> ->> endobj -781 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [443.666 211.588 455.621 221.85] -/Subtype /Link -/A << /S /GoTo /D (page.26) >> ->> endobj -782 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [458.61 211.588 470.565 221.85] -/Subtype /Link -/A << /S /GoTo /D (page.40) >> ->> endobj -783 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [458.61 198.881 470.565 209.894] -/Subtype /Link -/A << /S /GoTo /D (page.39) >> ->> endobj -784 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [458.61 186.926 470.565 197.869] -/Subtype /Link -/A << /S /GoTo /D (page.32) >> ->> endobj -785 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [453.629 165.76 460.603 175.952] -/Subtype /Link -/A << /S /GoTo /D (page.5) >> ->> endobj -786 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [463.592 165.76 470.565 175.952] -/Subtype /Link -/A << /S /GoTo /D (page.6) >> ->> endobj -787 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [463.592 153.053 470.565 163.996] -/Subtype /Link -/A << /S /GoTo /D (page.8) >> ->> endobj -788 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [458.61 143.035 470.565 152.041] -/Subtype /Link -/A << /S /GoTo /D (page.19) >> ->> endobj -789 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [458.61 131.08 470.565 140.086] -/Subtype /Link -/A << /S /GoTo /D (page.19) >> ->> endobj -685 0 obj << -/D [683 0 R /XYZ 125.858 740.998 null] ->> endobj -686 0 obj << -/D [683 0 R /XYZ 125.858 680.241 null] ->> endobj -682 0 obj << -/Font << /F42 328 0 R /F34 318 0 R /F32 316 0 R >> -/ProcSet [ /PDF /Text ] ->> endobj -792 0 obj << -/Length 1063 -/Filter /FlateDecode ->> -stream -xYKoHWptq7q]Eh36900,~ xȃֳiSt}诪H@@H1: nֻ E^& x@#-YmZǛϫ_e^1װJ\\\j$>a+0a;u٤egQLGTiqgܲiIm[DymZ7m\'XRLi!vb:v[KE1t#GWLOpS^va0r8䋋#K恎{i\m;7U,ߴ`!c.QB\]]V0fyfOƒHO8?p:Jj삾 msg‡(aZGxueɽ&W7{hx%T"THu\@'nUj=tMVuUiL4h'A|&!O;|KńNy-Ү:/owiAHxڶv-tGPY@Nl%c~̣PW\9qs³Y4b)1?FeA4pI,q]gڇ4YÞ61< 9wڡD/Q GBy6>)l؞I3\l*%~utHBPĄۥ҂?c= %b8|z*mOuFE8.+L -UL_Rp;tk)KRM6v}9CՓYELE,2> endobj -794 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [264.339 679.065 271.313 690.009] -/Subtype /Link -/A << /S /GoTo /D (page.5) >> ->> endobj -795 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [274.301 679.065 281.275 690.009] -/Subtype /Link -/A << /S /GoTo /D (page.7) >> ->> endobj -796 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [269.32 669.128 281.275 678.124] -/Subtype /Link -/A << /S /GoTo /D (page.38) >> ->> endobj -797 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [269.32 657.173 281.275 666.169] -/Subtype /Link -/A << /S /GoTo /D (page.38) >> ->> endobj -798 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [254.376 643.952 266.331 654.214] -/Subtype /Link -/A << /S /GoTo /D (page.17) >> ->> endobj -799 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [269.32 643.952 281.275 654.214] -/Subtype /Link -/A << /S /GoTo /D (page.38) >> ->> endobj -800 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [239.432 631.997 251.387 642.258] -/Subtype /Link -/A << /S /GoTo /D (page.18) >> ->> endobj -801 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [254.376 631.997 266.331 642.258] -/Subtype /Link -/A << /S /GoTo /D (page.26) >> ->> endobj -802 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [269.32 631.997 281.275 642.258] -/Subtype /Link -/A << /S /GoTo /D (page.40) >> ->> endobj -803 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [269.32 619.29 281.275 630.303] -/Subtype /Link -/A << /S /GoTo /D (page.38) >> ->> endobj -804 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [249.395 607.434 256.369 618.303] -/Subtype /Link -/A << /S /GoTo /D (page.4) >> ->> endobj -805 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [259.357 607.434 266.331 618.303] -/Subtype /Link -/A << /S /GoTo /D (page.6) >> ->> endobj -806 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [269.32 607.434 281.275 618.303] -/Subtype /Link -/A << /S /GoTo /D (page.33) >> ->> endobj -807 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [269.32 583.424 281.275 594.438] -/Subtype /Link -/A << /S /GoTo /D (page.38) >> ->> endobj -808 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [256.866 559.514 263.84 570.527] -/Subtype /Link -/A << /S /GoTo /D (page.9) >> ->> endobj -809 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [266.828 559.514 278.784 570.527] -/Subtype /Link -/A << /S /GoTo /D (page.38) >> ->> endobj -810 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [259.357 537.596 266.331 548.61] -/Subtype /Link -/A << /S /GoTo /D (page.8) >> ->> endobj -811 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [269.32 537.596 281.275 548.61] -/Subtype /Link -/A << /S /GoTo /D (page.38) >> ->> endobj -812 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [259.357 526.393 266.331 536.585] -/Subtype /Link -/A << /S /GoTo /D (page.9) >> ->> endobj -813 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [269.32 526.393 281.275 536.585] -/Subtype /Link -/A << /S /GoTo /D (page.10) >> ->> endobj -814 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [274.301 515.703 281.275 524.629] -/Subtype /Link -/A << /S /GoTo /D (page.5) >> ->> endobj -815 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [259.357 501.73 266.331 512.674] -/Subtype /Link -/A << /S /GoTo /D (page.9) >> ->> endobj -816 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [269.32 501.73 281.275 512.674] -/Subtype /Link -/A << /S /GoTo /D (page.10) >> ->> endobj -817 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [254.376 489.775 266.331 500.719] -/Subtype /Link -/A << /S /GoTo /D (page.11) >> ->> endobj -818 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [269.32 489.775 281.275 500.719] -/Subtype /Link -/A << /S /GoTo /D (page.16) >> ->> endobj -819 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [239.432 477.82 251.387 488.764] -/Subtype /Link -/A << /S /GoTo /D (page.16) >> ->> endobj -820 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [254.376 477.82 266.331 488.764] -/Subtype /Link -/A << /S /GoTo /D (page.24) >> ->> endobj -821 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [269.32 477.82 281.275 488.764] -/Subtype /Link -/A << /S /GoTo /D (page.33) >> ->> endobj -822 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [274.301 467.882 281.275 476.809] -/Subtype /Link -/A << /S /GoTo /D (page.6) >> ->> endobj -823 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [254.376 453.91 266.331 464.923] -/Subtype /Link -/A << /S /GoTo /D (page.11) >> ->> endobj -824 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [269.32 453.91 281.275 464.923] -/Subtype /Link -/A << /S /GoTo /D (page.38) >> ->> endobj -825 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [244.413 431.992 251.387 442.936] -/Subtype /Link -/A << /S /GoTo /D (page.5) >> ->> endobj -826 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [254.376 431.992 266.331 442.936] -/Subtype /Link -/A << /S /GoTo /D (page.11) >> ->> endobj -827 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [269.32 431.992 281.275 442.936] -/Subtype /Link -/A << /S /GoTo /D (page.24) >> ->> endobj -828 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [239.432 420.789 251.387 431.05] -/Subtype /Link -/A << /S /GoTo /D (page.13) >> ->> endobj -829 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [254.376 420.789 266.331 431.05] -/Subtype /Link -/A << /S /GoTo /D (page.14) >> ->> endobj -830 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [269.32 420.789 281.275 431.05] -/Subtype /Link -/A << /S /GoTo /D (page.34) >> ->> endobj -831 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [259.357 408.082 266.331 419.095] -/Subtype /Link -/A << /S /GoTo /D (page.9) >> ->> endobj -832 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [269.32 408.082 281.275 419.095] -/Subtype /Link -/A << /S /GoTo /D (page.23) >> ->> endobj -833 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [269.32 386.164 281.275 397.177] -/Subtype /Link -/A << /S /GoTo /D (page.39) >> ->> endobj -834 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [239.432 364.998 246.406 375.19] -/Subtype /Link -/A << /S /GoTo /D (page.4) >> ->> endobj -835 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [249.395 364.998 256.369 375.19] -/Subtype /Link -/A << /S /GoTo /D (page.6) >> ->> endobj -836 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [259.357 364.998 266.331 375.19] -/Subtype /Link -/A << /S /GoTo /D (page.8) >> ->> endobj -837 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [269.32 364.998 281.275 375.19] -/Subtype /Link -/A << /S /GoTo /D (page.16) >> ->> endobj -838 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [269.32 352.291 281.275 363.235] -/Subtype /Link -/A << /S /GoTo /D (page.29) >> ->> endobj -839 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [269.32 340.336 281.275 351.279] -/Subtype /Link -/A << /S /GoTo /D (page.29) >> ->> endobj -840 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [244.413 328.381 251.387 339.324] -/Subtype /Link -/A << /S /GoTo /D (page.7) >> ->> endobj -841 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [254.376 328.381 266.331 339.324] -/Subtype /Link -/A << /S /GoTo /D (page.29) >> ->> endobj -842 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [269.32 328.381 281.275 339.324] -/Subtype /Link -/A << /S /GoTo /D (page.34) >> ->> endobj -843 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [259.357 316.425 266.331 327.369] -/Subtype /Link -/A << /S /GoTo /D (page.7) >> ->> endobj -844 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [269.32 316.425 281.275 327.369] -/Subtype /Link -/A << /S /GoTo /D (page.20) >> ->> endobj -845 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [249.395 292.515 256.369 303.459] -/Subtype /Link -/A << /S /GoTo /D (page.6) >> ->> endobj -846 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [259.357 292.515 266.331 303.459] -/Subtype /Link -/A << /S /GoTo /D (page.7) >> ->> endobj -847 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [269.32 292.515 281.275 303.459] -/Subtype /Link -/A << /S /GoTo /D (page.10) >> ->> endobj -793 0 obj << -/D [791 0 R /XYZ 125.858 740.998 null] ->> endobj -790 0 obj << -/Font << /F41 326 0 R /F32 316 0 R /F34 318 0 R /F42 328 0 R >> -/ProcSet [ /PDF /Text ] ->> endobj -647 0 obj << -/Length1 794 -/Length2 1208 -/Length3 532 -/Length 1788 -/Filter /FlateDecode ->> -stream -xRkXW͈Г-%H(P$E\!`0La\JWrTk`KxCa5T"r)uYs>;3y~ywXBq%FMT{ `sxT -S(,,F<4Es;i+KQ8&l"'PXGB8/b a)‰ 4T b`@^D,Iަ!4e\P&x7ߐK&S(KdX`hI²Yo/L$F'xI cX%@8[@g|vK3]q0&KɺPSpRB}X0ht(?Rہ!3kT̙&|ܻD޼*S<4䥜Toc7L=w 8Yc/Us=GϷg1B䢠8x2<=bۙq:v}blLNU|o - xö'{~@;rmNñȻ/nyq'6(CH[1"O""co{PGyQ\+:)kOg&`wۄjVY^1LMU0 KJߤ4E~Lc̥Go1YQeO;%O -Cx.NVk wM̚'IYѦܪ+ 9)e =?O=#Dm*HMq??9vV^kcA:jM\V]e~FC͔}$6V+/W+eĭ yzX2O3& -LA^( q6 *sI^lzwAg~#bJ{fٗljHD+z4㼳YEluOA_F՞)u 9DS̍7M֗}hnm'6a5- /Øk~֝8-ZQщkkr m=h,3;B<ёz|^R-bW/[#ןΆ]3Ŵ*֚=UimBqC%fwT5/r0&-RJ)K+mfVܝ*.Э5&J&^*o|ZVKXV{Qy ܡ:SI~D{gi])- -7e+K2Wov1VF^+b:c6g Z j4'?y AZZ0yL e+G_^;iO;9嗱{=֝j= ?/;lV[ōwEEر=T;W>Oכ㝻~mgơN}{Wnp|PKnn-ڇin6A//i? {vSl$TvRcFӳD?31I37|Mu%!BT)C?@QLGw[endstream -endobj -648 0 obj << -/Type /Font -/Subtype /Type1 -/Encoding 849 0 R -/FirstChar 40 -/LastChar 41 -/Widths 850 0 R -/BaseFont /WOCBLC+CMR10 -/FontDescriptor 646 0 R ->> endobj -646 0 obj << -/Ascent 694 -/CapHeight 683 -/Descent -194 -/FontName /WOCBLC+CMR10 -/ItalicAngle 0 -/StemV 69 -/XHeight 431 -/FontBBox [-251 -250 1009 969] -/Flags 4 -/CharSet (/parenleft/parenright) -/FontFile 647 0 R ->> endobj -850 0 obj -[389 389 ] -endobj -849 0 obj << -/Type /Encoding -/Differences [ 0 /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/parenleft/parenright/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef] ->> endobj -851 0 obj << -/Type /Encoding -/Differences [ 0 /.notdef/dotaccent/fi/fl/fraction/hungarumlaut/Lslash/lslash/ogonek/ring/.notdef/breve/minus/.notdef/Zcaron/zcaron/caron/dotlessi/dotlessj/ff/ffi/ffl/notequal/infinity/lessequal/greaterequal/partialdiff/summation/product/pi/grave/quotesingle/space/exclam/quotedbl/numbersign/dollar/percent/ampersand/quoteright/parenleft/parenright/asterisk/plus/comma/hyphen/period/slash/zero/one/two/three/four/five/six/seven/eight/nine/colon/semicolon/less/equal/greater/question/at/A/B/C/D/E/F/G/H/I/J/K/L/M/N/O/P/Q/R/S/T/U/V/W/X/Y/Z/bracketleft/backslash/bracketright/asciicircum/underscore/quoteleft/a/b/c/d/e/f/g/h/i/j/k/l/m/n/o/p/q/r/s/t/u/v/w/x/y/z/braceleft/bar/braceright/asciitilde/.notdef/Euro/integral/quotesinglbase/florin/quotedblbase/ellipsis/dagger/daggerdbl/circumflex/perthousand/Scaron/guilsinglleft/OE/Omega/radical/approxequal/.notdef/.notdef/.notdef/quotedblleft/quotedblright/bullet/endash/emdash/tilde/trademark/scaron/guilsinglright/oe/Delta/lozenge/Ydieresis/.notdef/exclamdown/cent/sterling/currency/yen/brokenbar/section/dieresis/copyright/ordfeminine/guillemotleft/logicalnot/hyphen/registered/macron/degree/plusminus/twosuperior/threesuperior/acute/mu/paragraph/periodcentered/cedilla/onesuperior/ordmasculine/guillemotright/onequarter/onehalf/threequarters/questiondown/Agrave/Aacute/Acircumflex/Atilde/Adieresis/Aring/AE/Ccedilla/Egrave/Eacute/Ecircumflex/Edieresis/Igrave/Iacute/Icircumflex/Idieresis/Eth/Ntilde/Ograve/Oacute/Ocircumflex/Otilde/Odieresis/multiply/Oslash/Ugrave/Uacute/Ucircumflex/Udieresis/Yacute/Thorn/germandbls/agrave/aacute/acircumflex/atilde/adieresis/aring/ae/ccedilla/egrave/eacute/ecircumflex/edieresis/igrave/iacute/icircumflex/idieresis/eth/ntilde/ograve/oacute/ocircumflex/otilde/odieresis/divide/oslash/ugrave/uacute/ucircumflex/udieresis/yacute/thorn/ydieresis] ->> endobj -630 0 obj << -/Type /Font -/Subtype /Type1 -/Encoding 851 0 R -/BaseFont /Courier-BoldOblique ->> endobj -614 0 obj << -/Length1 768 -/Length2 1162 -/Length3 532 -/Length 1731 -/Filter /FlateDecode ->> -stream -x}8TiӮdPK慆MxɊZsp2s83AY,2ds@; pLdGН;%F" 8g@g2v1;3 ;.H"8r9!P6$C*8EDI@!@`#1H,sHN mX,x?JD - -XcZ$c$#\u: Q/ox; \PC| "lFl4Y`c#0*/z aa<7Qhp*A`Tĉ\'D/&Q7A - rY?b$hk*"HF*zYQ,3DPg0@ -H"QS).Rm`.NnN*6#pI=3T4'pbY b0h6/dU>k.A$9.;\yRZh*-?|ԅ2e]Bv;Y7{HwZO52XnR׽o}0Pc3si{I|%8b@f3bz0Y3+95!VlIRtIo>t0 /,8߾&pZO0܉AG&ы+¾fnt^n?}s׸_aG x1qY8퇡B ov[:Khޣ|.^NMQˉdz梍+Њ`7wǖ\*iz˚^1c-̖j[6y~ᵅn?/$)+^Y&V-ubK_j73?ɶ5gxYS;=koEFy՘b 岡#Ż~u7bjcfhY!`#5e-;,{QTׯTɪ7>]{c_[骮sAI۟錷Ų7naYAp&Ƴ6.yu++y;0Xp?4.hZ/6lvio gHW+};ࢯ֧I93mluͶaQVԗ4_?dC`WH*oWVU:j+ԦKrCޱƂ7}.n:σ$O]ݮk3CsCobelɭ-ѳ_Z~f܏J4\xe?~bVUv5$ѯj_w6PLdePS6^mT½[SeBh:Ө'Dߩ?׳/6w1zq.TWDKæ.^e6a{L/'7/hEK<|EhC€C B!"/endstream -endobj -615 0 obj << -/Type /Font -/Subtype /Type1 -/Encoding 852 0 R -/FirstChar 110 -/LastChar 110 -/Widths 853 0 R -/BaseFont /GGRVTC+CMMI9 -/FontDescriptor 613 0 R ->> endobj -613 0 obj << -/Ascent 694 -/CapHeight 683 -/Descent -194 -/FontName /GGRVTC+CMMI9 -/ItalicAngle -14 -/StemV 74 -/XHeight 431 -/FontBBox [-29 -250 1075 750] -/Flags 4 -/CharSet (/n) -/FontFile 614 0 R ->> endobj -853 0 obj -[620 ] -endobj -852 0 obj << -/Type /Encoding -/Differences [ 0 /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/n/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef] ->> endobj -544 0 obj << -/Length1 867 -/Length2 1216 -/Length3 532 -/Length 1831 -/Filter /FlateDecode ->> -stream -xUkTgP#U,Ҁ ܚ$D$ -r ȪX$&8LbD EYBPYXTVD -X, /GEEtݵ?wٙ?s;gD< ĕ$bA.Z q &1\ &Q<=!૖8.G9\L`D8L<%0VpLD `(r98$Р CH0%=(X)ŁT[V4(DΔH@IJy2R[SPJCrVLtw8B&QP~L]N G%Z1Lr U(`B,?`IDb$< JR(&bbCVu1%"Yd })L 8,KѲ%K0 p Lp2AT)T P-R$uPlRM -D"sCGq pp)*#k{pm - )xx7;1FW,N U}-ŨPT"NYmmnŎҴ3GOmR*&$D-E{:B,sY=klq\WxtUv:7=ygoݜ7C6:v.o67H_x9s=|=vO66y!~IO -9uHg% #4Tuk7XI#i0vg:>$:}KIʄ~uPVԈ:_cO{ö~aͷy7 ΓqzyFgTYv 2(sGu+sl\E =k+"ocCMìKZ?q#[;ۗn+YIWҲ"3~ݨu魱-⸜'Fwyz c8EeKGKt vuc#Kܺq<]IG0^ǁ׾V2 CkeBOdmLk?u/Ƚoƀ~l~|oz윘+u7O9|Ms7 +{m*>1gSgx -f.m h%~vdܒQۜv=q!GyH߽$ww._? +beg}9{OO]*P_O`plP靎i*yͪRەGLF͋~i -|AK//7 Xv[f;rq CTa4F?XAst^RT2r+^WExKxi US+VD!VaD4Vb#׸yɝWzL/+~yn"Z#\_'gTt[ %.]$dGW;x :kj{i+/.g̲k6Z֢ OQ(m5zz޲؇[KfcšREӟIjFݒcc=t|`32S{W3^>&swA"4vKkBYbw̐QQ}xkgy"z0׬M×L5׮jzT~b-x"?l|`n1_}T+rvmXf;|]Z FIc\/0BI;'fOltn@|rh///{1mU2ug9C&H\h <1endstream -endobj -545 0 obj << -/Type /Font -/Subtype /Type1 -/Encoding 854 0 R -/FirstChar 13 -/LastChar 103 -/Widths 855 0 R -/BaseFont /LUEZJT+CMSY10 -/FontDescriptor 543 0 R ->> endobj -543 0 obj << -/Ascent 750 -/CapHeight 683 -/Descent -194 -/FontName /LUEZJT+CMSY10 -/ItalicAngle -14 -/StemV 85 -/XHeight 431 -/FontBBox [-29 -960 1116 775] -/Flags 4 -/CharSet (/circlecopyrt/bullet/arrowright/braceleft/braceright) -/FontFile 544 0 R ->> endobj -855 0 obj -[1000 0 500 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1000 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 500 500 ] -endobj -854 0 obj << -/Type /Encoding -/Differences [ 0 /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/circlecopyrt/.notdef/bullet/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/arrowright/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/braceleft/braceright/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef] ->> endobj -495 0 obj << -/Length1 898 -/Length2 2892 -/Length3 532 -/Length 3528 -/Filter /FlateDecode ->> -stream -xyP,rX~+ !X>ȿPmw-,(X-]@K'>}߅ndbp}>r;S zY CF)xĐ;%Ϙj{&>iN34fsZ[M !V_oubaIâBԊ.`y}9:  埞 Ә&GXz.|hpk|豞# JS9٠7fm)%NI b#iy?jbec߷Ҥ[ -lRU4/Fj|R{~ҡ >7M37?&`(tj>zks$M5eٳ7Z{K#舉ά+h'5EȪЋ~/3BP>}cťj^i$Ēo\ԗQQs=ᦲkFҩ >9> -)媓aAF%gȾs&ݽknJ$yw)Qiف# -ФM'Ahf[i#YfU4-%Fqf{voEHm(? I':8!jn]ՠG;^ўezؗ5wbg=Oi -o Y5j?ˊN*?~㣴~h'RCc3 e\xðNNKܠгG} \۳h=]U!7SKoYqrNMC\\9d%,25Ip!Gm0 cYQOjJ[QB!R1 -M1*90= V`x]Uh|ubP/$Y-(RRg]]GJ\Dɞ3KLC-,Xqef څFnMy}/z ׺SpwCCsRAY`lWWVKzhBRU -1.vƴۜs(xQ^#;H[Xʔ -s ~޾٢7]gO|QIZ -}vq')bjuw} t/ZB1T2^K®,RkxQy0mGs9HuR -kȇf.̱{L`n@A7M; -9;9pKW~H;j&ց'ZJz_BsF H$ za=x}BoFEEX ZU(??{_ؐFך)$fvCcczW7R%e -ZD' .]%,,eŸw(^k6>]i :P–bԤ!*mK;{'eI]#O'].2a;hx/PDZՁMc`jsNJ (7#ǭ¦0q5WS2BK9x?Wn.k+'KfڷBI;է6>)}~:؛dicM[AAҋxG~[Ebܜ^'ryp'IMO8.jIz;f{g4+ ̙н EDNJiTlk!&eĵV{Qc%Pa1Kgt,@dwYiάː%glU7JNre( ~'y5uDjhUHi=!3='m. UsёGkz݉CҳW6 ߬=oWSRf2'~۽|frC荁4A/u4=Rb^ճ$ܖ -LAQy>p9 W3w⊃mIOm;/aUwl(n'`[e1hރ_~*lbP>V^*z&r_0}Vi~;'yE<1qVˢ2a~)8};y+_?qz*[)iM7NUТS:sCeOՉ9ox(a8j(HKuendstream -endobj -496 0 obj << -/Type /Font -/Subtype /Type1 -/Encoding 856 0 R -/FirstChar 65 -/LastChar 120 -/Widths 857 0 R -/BaseFont /MCKLGE+CMMI10 -/FontDescriptor 494 0 R ->> endobj -494 0 obj << -/Ascent 694 -/CapHeight 683 -/Descent -194 -/FontName /MCKLGE+CMMI10 -/ItalicAngle -14 -/StemV 72 -/XHeight 431 -/FontBBox [-32 -250 1048 750] -/Flags 4 -/CharSet (/A/B/C/D/N/a/b/c/n/x) -/FontFile 495 0 R ->> endobj -857 0 obj -[750 758 715 828 0 0 0 0 0 0 0 0 0 803 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 529 429 433 0 0 0 0 0 0 0 0 0 0 600 0 0 0 0 0 0 0 0 0 572 ] -endobj -856 0 obj << -/Type /Encoding -/Differences [ 0 /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/A/B/C/D/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/N/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/a/b/c/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/n/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/x/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef] ->> endobj -453 0 obj << -/Length1 816 -/Length2 988 -/Length3 532 -/Length 1571 -/Filter /FlateDecode ->> -stream -xR{XLidEZ_91YzD4!y\NssȨ6D[`ZRyȺD-EZjnf^{*s};|~Ip*Q$P7(Y -P±!9c@]]Qॊ "7M JHLq#҄#A DB!@BI ȨyK.}'b@0J8( -pBʀpA~!RFZ+!ÚYS\ p({dr1 6 JT1ir0u!qBg09!"#8SxpA"i$a؏ClM7xN@;0^FLZ _k6#,> ˗R8AFp*hSsVJ 8$ce y$ŰG(7T1`!Ӈ@hL -PW=<0>b]*PtT 4''h LChLsc#Pv B)]Ck|Uvf؅5D06YTlwq4qҮ}'Rݜ ,*1S'l7?`u͖ntKF[.Y_4T0r 8a&gXX3uO wzJ 2KMޅurVqy*suH -xyQ/+Lw.u^c˜I[ep;h"^d[DͻȲ5A]mJUIlkE*0*U b}kk&״0jEzȕsJsI+çpeϖ/ &>xQ{zwcYsmq%&5V[5bn+ת𹋣qgw65J[ԛf+BW-mz&%ďz6,lHgVi9Qoujʆ-%[ܔS!ϒFSZzw"ufIF/ ::RjVE֯PśTtT$Y=xɣRxޜ:%#v][ZW_5 [鲏wlDXi0fmbɌƹf-I$*1GS(H[=IbQ]6b'ﳍ>˞QsŰ - -> endobj -452 0 obj << -/Ascent 750 -/CapHeight 683 -/Descent -194 -/FontName /ERKLRN+CMSY9 -/ItalicAngle -14 -/StemV 87 -/XHeight 431 -/FontBBox [-30 -958 1146 777] -/Flags 4 -/CharSet (/bullet/braceleft/braceright) -/FontFile 453 0 R ->> endobj -859 0 obj -[514 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 514 514 ] -endobj -858 0 obj << -/Type /Encoding -/Differences [ 0 /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/bullet/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/braceleft/braceright/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef] ->> endobj -442 0 obj << -/Type /Font -/Subtype /Type1 -/Encoding 851 0 R -/BaseFont /Courier ->> endobj -384 0 obj << -/Type /Font -/Subtype /Type1 -/Encoding 851 0 R -/BaseFont /Times-BoldItalic ->> endobj -328 0 obj << -/Type /Font -/Subtype /Type1 -/Encoding 851 0 R -/BaseFont /Times-Bold ->> endobj -325 0 obj << -/Length1 1663 -/Length2 11249 -/Length3 532 -/Length 12149 -/Filter /FlateDecode ->> -stream -xzUT\[&5h- ]wwnBp wwk9Wz>M暣LIQ d;32L\T@v - ^9F ]ΉDE%;[ō|M@h -`c"Q@`+ Kg&==J2x@ -9!U@%`ne (ɈhEl̬w)@hS_91c8N@S+c[Y99`c{8V.f%.7na{S99;Q%NVj dWIa޵VNg_L3+'[c``pq `1WwNTޠ#+g'9+{LSVH͊9u@ kfޓ06z̀H - ;Hozk+G%tU0{v } @ע5/>vV'L-"02q#rr)Y9Z̍mߛ\ w_,,S2T@{-ᝯ `VVUT_7,rq>j@Ӕ/@QQ;~Se?`+w.  ;_ob/0 H}Cortʈ7X.`!޻/4EZ[f9 B|u(W+umV=01{-igז;xGCA#c~'٠%H3lFnFEcgsTYŠxpvGOMykRӁYSpxDwK?kgmBD*~WHlB! -hO;"2};_T)-!5ͷ/Å?v$V?(bIW}c!;/raDr֍ KIQ흏NZiIdDn|kW~|j`dܙ9 .鑭AXlB彛´iPR&9B]0r&CGb=8J6!ee#i*B" I] )q?xR _yo |s2N OVhNYF.S#yTl6\X@ukUR6m>f@rɒT³Ia-FM ?زIb ? 6t{FM hXȩsi0Q1\8(S7Oq`UuOLqB3f-2fqF.Egx3BJ6%*v R?hn!wwC3C3szNAmݝO,ޓ iA*l Y2ۆOϲ:?zqc]+ OTldN'';={y3 - {TzJtĪW'NGz %ax oM-f2XU}}>FmA;PPrT -iʖanKS[LOtL޺OޫK]*|} -z >gzVxV*),mwzKm>BN\S[6i>x9q->Dz/0:eq @W :zU=fߞE=`K.(Jƭڮwg4cɆ1gUꥠ-o)Ipsn"got|vP-{QlЧX6lP"ˣޖe$}J7恽pxuKSbtnBzW -`*GUZoUf -Rɔ r1\w!M‡ -18hP[cJyj5_;py ȩAin>L&le9&VdkU?G'gj[=9#b~H1H -͚U,N]2?mmj.) Ap-ՒAt6 +sӗj*QdGZ>,8ӏ]i ]IMfO0a¹/Ֆkj[>LjJ^bhCp(IW Ȯ`-]/s0Kjɣ_bsKOXJ* z6ab1ا)͝BfHUB\R|n6Me]GZi"xqU‡pE,0wfЛ~NMh(r32bK؇1MK99D{6 eMI.2.OtpVvVߵMv/ĭ$~zѸbD%4gxr8X(3>Rvdy\ptY݉w}Z"dCY|ʸov1 nM;1v7-WТy  { '/zDN"f%q{J34E~y=˛~[IZ Ao hZ)HiYd;MD\RoԮ?ի]LfPA뺩V(:oyMTZ\n^H`"+qbZ0`eGnj3(wFnXfTeP5p|>cb"%:nP/A̵Jb XA='Rh-J9RQ?89.y}M?Lֹ x84RdR*hgg:j3 uPJvٲ'.`ĝSUVU -rQ*b. -Mkb"k@u^H,A-kqڌN[-?q?}^4蕅~6 `@&rq\OCsKP= -YfK+h+ԔӫMT/ -5^YQhW0Tw=\a-wŌRitW;P=RBL9 D8AW7y>Z*M)Ry1gcuXKr)7@"65^}&c -7q6CT*b9wq6eB?m^C__0C] Mŗ^yAG?4ѩY> ~QνlJq9+InUEĭ#=n^+p׺888Y -e,Djo9sopg1RRm/Dycc7r?b>T:`?sQ",}&GpV]+}:6!="< ,'29#Qs~)WpID4pLlpji:m0OL_ 7mxdj`A~;K&c9AP يg[E)4芏He.K1A|rRH9͏+-bXG ׂa3< -dM #p:h>5;r3VjFb(肺FFJiHޒX\dVZ5Y8Iz?ЋFZ&חE[ [8A&_yj!W(?g@[l?#o'RMme~ﰑ'WnƁD'Aa'L0Jml#S71/Fu\Z'oz%f4~g[98+X6#w-J=iaw-RߟzKHl0Gz`)x :OJLJًmqrC_#sk j B*J:ܕCH04" I/83NaKb(aXijJqw(h߻v߈,aU]]Q+f)*wqNτu,^2n&P |UAg]]dd@mFC*д0 ג*#ƂBp)}D}Vts -Ef"PXWSgf1ʦ qay]ME+A"cR8=?zcކ4  Î3WH%pfGԉf~&XC}B`, -9'[ReGhGo^}΅N\MT)Cǻ9нl-l?3m ss~oz2zr"+MӑМl! -I -3NµUVgqR%y5S׼16CK nl__Ӈ_fws lt# -Y9hQt -fU"}nE+ &[HтO5)>@՗8@?QTb8m+HU ~.| l)p{Y-w,M4dGnjU'ֵt - #vMDoH_v |k-W6Q`CWdP?+PlRǟ C"ܔm͜9]pHÇuk/i-Ú##{m柢3u &Ƙ&pTPO_jn>C^2 ֬beY1`~P:^6d@.r^ҋהE?dNj~[@^py%'Rǹp%Zrub -_,ZȳfMu6<XVAMghwK(R:1/&_tFOPjZD"96{&Zv4PufLB3r0<%dH-״U=8'CgbZԽiCN&"}X!&Os&3 XȒ$&wnz -7b!ў?G -E'ѢOI53ad7\UB'5ҖMoJӔb@_hM Q&Xڂc;(!m΀?j8!e{{:a'3ҭSYR9.up\t,vm\piǙe9+SI>Cq AEC8X#XxIMݧs fn4t5JH^W֞7jݤA|YmD f? NwhZbO̪cB|ORްgc٦Jb(AQ $Sx숄ApY1E?J8rmnԷ i UA1%bZ}K]c8R4LW9ݺ]V6ٴU#ȿ&JI5 l \K~2*QEǟ祈9 sV>c\Cfv9gee? +*>nnsj}KJ7 ٧dRHE/ظ|zn.[&>/?cmGm &fz]ki#`~W󅘶vďd-p,"{ [ÿUNJZbS3YH~7Q\#[^QaY>wAR:b_OX+[`Sf=;&=P@[2,4مTvkHv  eHdۜ>Ѱ|->Jkhb> ޭ% qSڟa67 AmUydNi8X~qɛ.7&Fu$ -}!}CĘNS~\u[ɤEA +~=^t.DϩB(JHyї@#z1 ڭ4~$Db" -&#3Lr$Bz31HEɊ5 YPpյ,L%O`T@n$WSkBhxӓ>JfϬQ:6|7Gr@50{sc71;^}80c;6~UaHPe#b<,da7ISǻ jMr ƌ;q2VI|z{r,9Ns:~dFC_1iVhBPNsTFM#p&ǤL|l]>ړ/=rFd~qoْW_;c^eN=&AϨc͗M;ȃ&}ldN WrڅTQAu_v_dؕ5$voS`g*Dh̑U!GX_/wDb=$Mܬ,6/RJS?E=HI|fEESՋPc*{vM~=!zɋ õ9䞇.aB&&tjj(EL2+;w/6h_{ՃѥiZnL*'/dp͍qC> 'LJ^JZ=6ݸG͸uʅOǧocym7!pҴ0Ђ2ըXJ-B7ɂ׆F{tERqs;A_nVw_uO)[M~_$X /E.R:oik~9%ixcOb-E#_VV}?ݶ Lf4A︁ ERZ@uKȺ?){uR3[kvp dR=^[-Wp-~zw*/0(*P0, T&XNٙ*?KnSb,S#yB??P_6sÎ܎l[9HMȘt\JY,}t(?1LS-1VX=k2(@OE>y"[E>n>7,ϙYi"Kί;L 3Qϙo'4&ܑI(Ӄ[" Qļ+KiMR.*.}/ wkX;Dվ -רr?~s崜ϳ8O ;;c󻊮,yASrm|ˈR$*悭]2c$`W5gsޣ8eO,=\(8b|G]E s}=2w%/aȫů#d,7[{n:5≊B]*O_k x3Nק|szUNUMLV*NizD'YKUU1'x$ikU,$Zk%HzR^#."̆S u}.,V:Z[+~70$T:"*_lg3v0os_ݝFHW]+368^/۳|r! ̀JB?jχDҺME[+jťw1џ.K,ǹRsR<JNXc6:&~{q~IOLẍ̭~} O"73i*NJvB־{wAku|\dsUipA<]r.: (OTbǡr`E%0M6]:j{zƑ"e`gȑW,!^ɗ"' T? ~ -Jd[Ż]Ң8TsrqF3 8W+w:/T8QZURQl!dڥhãOqn܈ѭn| )N/(ӌZ騪nITd|<~G\FS̪!079SYsQ 4Z.Y6fJ|Uۼx>9;`4xZPL pq;IxYS+ay6cZ-d }ܔKӧVZ+ԋT>>rav8ǴO4g"ž>ta9Uy٬y'xr4'3&d5tY`,Jjh~⚞LX -<ʕ.EKrm7N-y@@ -J9F:P-6ӘΑ&]W_A9fD2Bo" "ޝuO/ z_v+,IOC41z'A7*:gliq@c?/uv1iAKS|?IL4Qa|U8S{(_1fi+ (-5sa Id+rZ gz;l?9{SөMOެf^4|oDehB 1!pV2HHOw洔sg]BS/E4t\h7}![sLAK9g ߦ`-x Zzu\a<+0c(ZRO뼞_ $""Ktuo4^n8+a#../g#hxV^:?`j 4;6H1xendstream -endobj -326 0 obj << -/Type /Font -/Subtype /Type1 -/Encoding 851 0 R -/FirstChar 44 -/LastChar 89 -/Widths 860 0 R -/BaseFont /QSNEWT+NimbusRomNo9L-Regu-Slant_167 -/FontDescriptor 324 0 R ->> endobj -324 0 obj << -/Ascent 678 -/CapHeight 651 -/Descent -216 -/FontName /QSNEWT+NimbusRomNo9L-Regu-Slant_167 -/ItalicAngle -9 -/StemV 85 -/XHeight 450 -/FontBBox [-168 -281 1000 924] -/Flags 4 -/CharSet (/comma/hyphen/one/two/three/four/five/six/seven/eight/nine/colon/A/B/C/D/E/F/G/H/I/L/M/N/O/P/R/S/T/U/V/W/X/Y) -/FontFile 325 0 R ->> endobj -860 0 obj -[250 333 0 0 0 500 500 500 500 500 500 500 500 500 278 0 0 0 0 0 0 722 667 667 722 611 556 722 722 333 0 0 611 889 722 722 556 0 667 556 611 722 722 944 722 722 ] -endobj -318 0 obj << -/Type /Font -/Subtype /Type1 -/Encoding 851 0 R -/BaseFont /Times-Italic ->> endobj -316 0 obj << -/Type /Font -/Subtype /Type1 -/Encoding 851 0 R -/BaseFont /Times-Roman ->> endobj -319 0 obj << -/Type /Pages -/Count 6 -/Parent 861 0 R -/Kids [310 0 R 321 0 R 377 0 R 436 0 R 446 0 R 456 0 R] ->> endobj -470 0 obj << -/Type /Pages -/Count 6 -/Parent 861 0 R -/Kids [463 0 R 472 0 R 476 0 R 483 0 R 490 0 R 498 0 R] ->> endobj -511 0 obj << -/Type /Pages -/Count 6 -/Parent 861 0 R -/Kids [503 0 R 513 0 R 522 0 R 526 0 R 535 0 R 540 0 R] ->> endobj -551 0 obj << -/Type /Pages -/Count 6 -/Parent 861 0 R -/Kids [547 0 R 553 0 R 559 0 R 567 0 R 571 0 R 575 0 R] ->> endobj -583 0 obj << -/Type /Pages -/Count 6 -/Parent 861 0 R -/Kids [579 0 R 585 0 R 591 0 R 597 0 R 602 0 R 607 0 R] ->> endobj -620 0 obj << -/Type /Pages -/Count 6 -/Parent 861 0 R -/Kids [617 0 R 622 0 R 626 0 R 632 0 R 639 0 R 643 0 R] ->> endobj -658 0 obj << -/Type /Pages -/Count 6 -/Parent 862 0 R -/Kids [652 0 R 660 0 R 664 0 R 670 0 R 677 0 R 683 0 R] ->> endobj -848 0 obj << -/Type /Pages -/Count 1 -/Parent 862 0 R -/Kids [791 0 R] ->> endobj -861 0 obj << -/Type /Pages -/Count 36 -/Parent 863 0 R -/Kids [319 0 R 470 0 R 511 0 R 551 0 R 583 0 R 620 0 R] ->> endobj -862 0 obj << -/Type /Pages -/Count 7 -/Parent 863 0 R -/Kids [658 0 R 848 0 R] ->> endobj -863 0 obj << -/Type /Pages -/Count 43 -/Kids [861 0 R 862 0 R] ->> endobj -864 0 obj << -/Type /Outlines -/First 7 0 R -/Last 295 0 R -/Count 9 ->> endobj -307 0 obj << -/Title 308 0 R -/A 305 0 R -/Parent 295 0 R -/Prev 303 0 R ->> endobj -303 0 obj << -/Title 304 0 R -/A 301 0 R -/Parent 295 0 R -/Prev 299 0 R -/Next 307 0 R ->> endobj -299 0 obj << -/Title 300 0 R -/A 297 0 R -/Parent 295 0 R -/Next 303 0 R ->> endobj -295 0 obj << -/Title 296 0 R -/A 293 0 R -/Parent 864 0 R -/Prev 283 0 R -/First 299 0 R -/Last 307 0 R -/Count -3 ->> endobj -291 0 obj << -/Title 292 0 R -/A 289 0 R -/Parent 283 0 R -/Prev 287 0 R ->> endobj -287 0 obj << -/Title 288 0 R -/A 285 0 R -/Parent 283 0 R -/Next 291 0 R ->> endobj -283 0 obj << -/Title 284 0 R -/A 281 0 R -/Parent 864 0 R -/Prev 263 0 R -/Next 295 0 R -/First 287 0 R -/Last 291 0 R -/Count -2 ->> endobj -279 0 obj << -/Title 280 0 R -/A 277 0 R -/Parent 275 0 R ->> endobj -275 0 obj << -/Title 276 0 R -/A 273 0 R -/Parent 263 0 R -/Prev 267 0 R -/First 279 0 R -/Last 279 0 R -/Count -1 ->> endobj -271 0 obj << -/Title 272 0 R -/A 269 0 R -/Parent 267 0 R ->> endobj -267 0 obj << -/Title 268 0 R -/A 265 0 R -/Parent 263 0 R -/Next 275 0 R -/First 271 0 R -/Last 271 0 R -/Count -1 ->> endobj -263 0 obj << -/Title 264 0 R -/A 261 0 R -/Parent 864 0 R -/Prev 251 0 R -/Next 283 0 R -/First 267 0 R -/Last 275 0 R -/Count -2 ->> endobj -259 0 obj << -/Title 260 0 R -/A 257 0 R -/Parent 251 0 R -/Prev 255 0 R ->> endobj -255 0 obj << -/Title 256 0 R -/A 253 0 R -/Parent 251 0 R -/Next 259 0 R ->> endobj -251 0 obj << -/Title 252 0 R -/A 249 0 R -/Parent 864 0 R -/Prev 211 0 R -/Next 263 0 R -/First 255 0 R -/Last 259 0 R -/Count -2 ->> endobj -247 0 obj << -/Title 248 0 R -/A 245 0 R -/Parent 243 0 R ->> endobj -243 0 obj << -/Title 244 0 R -/A 241 0 R -/Parent 211 0 R -/Prev 227 0 R -/First 247 0 R -/Last 247 0 R -/Count -1 ->> endobj -239 0 obj << -/Title 240 0 R -/A 237 0 R -/Parent 227 0 R -/Prev 235 0 R ->> endobj -235 0 obj << -/Title 236 0 R -/A 233 0 R -/Parent 227 0 R -/Prev 231 0 R -/Next 239 0 R ->> endobj -231 0 obj << -/Title 232 0 R -/A 229 0 R -/Parent 227 0 R -/Next 235 0 R ->> endobj -227 0 obj << -/Title 228 0 R -/A 225 0 R -/Parent 211 0 R -/Prev 215 0 R -/Next 243 0 R -/First 231 0 R -/Last 239 0 R -/Count -3 ->> endobj -223 0 obj << -/Title 224 0 R -/A 221 0 R -/Parent 215 0 R -/Prev 219 0 R ->> endobj -219 0 obj << -/Title 220 0 R -/A 217 0 R -/Parent 215 0 R -/Next 223 0 R ->> endobj -215 0 obj << -/Title 216 0 R -/A 213 0 R -/Parent 211 0 R -/Next 227 0 R -/First 219 0 R -/Last 223 0 R -/Count -2 ->> endobj -211 0 obj << -/Title 212 0 R -/A 209 0 R -/Parent 864 0 R -/Prev 199 0 R -/Next 251 0 R -/First 215 0 R -/Last 243 0 R -/Count -3 ->> endobj -207 0 obj << -/Title 208 0 R -/A 205 0 R -/Parent 199 0 R -/Prev 203 0 R ->> endobj -203 0 obj << -/Title 204 0 R -/A 201 0 R -/Parent 199 0 R -/Next 207 0 R ->> endobj -199 0 obj << -/Title 200 0 R -/A 197 0 R -/Parent 864 0 R -/Prev 159 0 R -/Next 211 0 R -/First 203 0 R -/Last 207 0 R -/Count -2 ->> endobj -195 0 obj << -/Title 196 0 R -/A 193 0 R -/Parent 191 0 R ->> endobj -191 0 obj << -/Title 192 0 R -/A 189 0 R -/Parent 159 0 R -/Prev 179 0 R -/First 195 0 R -/Last 195 0 R -/Count -1 ->> endobj -187 0 obj << -/Title 188 0 R -/A 185 0 R -/Parent 179 0 R -/Prev 183 0 R ->> endobj -183 0 obj << -/Title 184 0 R -/A 181 0 R -/Parent 179 0 R -/Next 187 0 R ->> endobj -179 0 obj << -/Title 180 0 R -/A 177 0 R -/Parent 159 0 R -/Prev 175 0 R -/Next 191 0 R -/First 183 0 R -/Last 187 0 R -/Count -2 ->> endobj -175 0 obj << -/Title 176 0 R -/A 173 0 R -/Parent 159 0 R -/Prev 171 0 R -/Next 179 0 R ->> endobj -171 0 obj << -/Title 172 0 R -/A 169 0 R -/Parent 159 0 R -/Prev 163 0 R -/Next 175 0 R ->> endobj -167 0 obj << -/Title 168 0 R -/A 165 0 R -/Parent 163 0 R ->> endobj -163 0 obj << -/Title 164 0 R -/A 161 0 R -/Parent 159 0 R -/Next 171 0 R -/First 167 0 R -/Last 167 0 R -/Count -1 ->> endobj -159 0 obj << -/Title 160 0 R -/A 157 0 R -/Parent 864 0 R -/Prev 39 0 R -/Next 199 0 R -/First 163 0 R -/Last 191 0 R -/Count -5 ->> endobj -155 0 obj << -/Title 156 0 R -/A 153 0 R -/Parent 139 0 R -/Prev 151 0 R ->> endobj -151 0 obj << -/Title 152 0 R -/A 149 0 R -/Parent 139 0 R -/Prev 147 0 R -/Next 155 0 R ->> endobj -147 0 obj << -/Title 148 0 R -/A 145 0 R -/Parent 139 0 R -/Prev 143 0 R -/Next 151 0 R ->> endobj -143 0 obj << -/Title 144 0 R -/A 141 0 R -/Parent 139 0 R -/Next 147 0 R ->> endobj -139 0 obj << -/Title 140 0 R -/A 137 0 R -/Parent 39 0 R -/Prev 131 0 R -/First 143 0 R -/Last 155 0 R -/Count -4 ->> endobj -135 0 obj << -/Title 136 0 R -/A 133 0 R -/Parent 131 0 R ->> endobj -131 0 obj << -/Title 132 0 R -/A 129 0 R -/Parent 39 0 R -/Prev 111 0 R -/Next 139 0 R -/First 135 0 R -/Last 135 0 R -/Count -1 ->> endobj -127 0 obj << -/Title 128 0 R -/A 125 0 R -/Parent 111 0 R -/Prev 123 0 R ->> endobj -123 0 obj << -/Title 124 0 R -/A 121 0 R -/Parent 111 0 R -/Prev 119 0 R -/Next 127 0 R ->> endobj -119 0 obj << -/Title 120 0 R -/A 117 0 R -/Parent 111 0 R -/Prev 115 0 R -/Next 123 0 R ->> endobj -115 0 obj << -/Title 116 0 R -/A 113 0 R -/Parent 111 0 R -/Next 119 0 R ->> endobj -111 0 obj << -/Title 112 0 R -/A 109 0 R -/Parent 39 0 R -/Prev 63 0 R -/Next 131 0 R -/First 115 0 R -/Last 127 0 R -/Count -4 ->> endobj -107 0 obj << -/Title 108 0 R -/A 105 0 R -/Parent 63 0 R -/Prev 103 0 R ->> endobj -103 0 obj << -/Title 104 0 R -/A 101 0 R -/Parent 63 0 R -/Prev 99 0 R -/Next 107 0 R ->> endobj -99 0 obj << -/Title 100 0 R -/A 97 0 R -/Parent 63 0 R -/Prev 95 0 R -/Next 103 0 R ->> endobj -95 0 obj << -/Title 96 0 R -/A 93 0 R -/Parent 63 0 R -/Prev 91 0 R -/Next 99 0 R ->> endobj -91 0 obj << -/Title 92 0 R -/A 89 0 R -/Parent 63 0 R -/Prev 87 0 R -/Next 95 0 R ->> endobj -87 0 obj << -/Title 88 0 R -/A 85 0 R -/Parent 63 0 R -/Prev 83 0 R -/Next 91 0 R ->> endobj -83 0 obj << -/Title 84 0 R -/A 81 0 R -/Parent 63 0 R -/Prev 79 0 R -/Next 87 0 R ->> endobj -79 0 obj << -/Title 80 0 R -/A 77 0 R -/Parent 63 0 R -/Prev 75 0 R -/Next 83 0 R ->> endobj -75 0 obj << -/Title 76 0 R -/A 73 0 R -/Parent 63 0 R -/Prev 71 0 R -/Next 79 0 R ->> endobj -71 0 obj << -/Title 72 0 R -/A 69 0 R -/Parent 63 0 R -/Prev 67 0 R -/Next 75 0 R ->> endobj -67 0 obj << -/Title 68 0 R -/A 65 0 R -/Parent 63 0 R -/Next 71 0 R ->> endobj -63 0 obj << -/Title 64 0 R -/A 61 0 R -/Parent 39 0 R -/Prev 47 0 R -/Next 111 0 R -/First 67 0 R -/Last 107 0 R -/Count -11 ->> endobj -59 0 obj << -/Title 60 0 R -/A 57 0 R -/Parent 47 0 R -/Prev 55 0 R ->> endobj -55 0 obj << -/Title 56 0 R -/A 53 0 R -/Parent 47 0 R -/Prev 51 0 R -/Next 59 0 R ->> endobj -51 0 obj << -/Title 52 0 R -/A 49 0 R -/Parent 47 0 R -/Next 55 0 R ->> endobj -47 0 obj << -/Title 48 0 R -/A 45 0 R -/Parent 39 0 R -/Prev 43 0 R -/Next 63 0 R -/First 51 0 R -/Last 59 0 R -/Count -3 ->> endobj -43 0 obj << -/Title 44 0 R -/A 41 0 R -/Parent 39 0 R -/Next 47 0 R ->> endobj -39 0 obj << -/Title 40 0 R -/A 37 0 R -/Parent 864 0 R -/Prev 7 0 R -/Next 159 0 R -/First 43 0 R -/Last 139 0 R -/Count -6 ->> endobj -35 0 obj << -/Title 36 0 R -/A 33 0 R -/Parent 7 0 R -/Prev 31 0 R ->> endobj -31 0 obj << -/Title 32 0 R -/A 29 0 R -/Parent 7 0 R -/Prev 27 0 R -/Next 35 0 R ->> endobj -27 0 obj << -/Title 28 0 R -/A 25 0 R -/Parent 7 0 R -/Prev 23 0 R -/Next 31 0 R ->> endobj -23 0 obj << -/Title 24 0 R -/A 21 0 R -/Parent 7 0 R -/Prev 19 0 R -/Next 27 0 R ->> endobj -19 0 obj << -/Title 20 0 R -/A 17 0 R -/Parent 7 0 R -/Prev 15 0 R -/Next 23 0 R ->> endobj -15 0 obj << -/Title 16 0 R -/A 13 0 R -/Parent 7 0 R -/Prev 11 0 R -/Next 19 0 R ->> endobj -11 0 obj << -/Title 12 0 R -/A 9 0 R -/Parent 7 0 R -/Next 15 0 R ->> endobj -7 0 obj << -/Title 8 0 R -/A 5 0 R -/Parent 864 0 R -/Next 39 0 R -/First 11 0 R -/Last 35 0 R -/Count -7 ->> endobj -865 0 obj << -/Names [(Doc-Start) 314 0 R (Hfootnote.1) 488 0 R (Hfootnote.2) 510 0 R (Hfootnote.3) 520 0 R (Hfootnote.4) 533 0 R (Hfootnote.5) 564 0 R (Hfootnote.6) 565 0 R (figure.1) 424 0 R (figure.10) 433 0 R (figure.11) 434 0 R (figure.2) 425 0 R (figure.3) 426 0 R (figure.4) 427 0 R (figure.5) 428 0 R (figure.6) 429 0 R (figure.7) 430 0 R (figure.8) 431 0 R (figure.9) 432 0 R (page.1) 313 0 R (page.10) 485 0 R (page.11) 492 0 R (page.12) 500 0 R (page.13) 505 0 R (page.14) 515 0 R (page.15) 524 0 R (page.16) 528 0 R (page.17) 537 0 R (page.18) 542 0 R (page.19) 549 0 R (page.2) 323 0 R (page.20) 555 0 R (page.21) 561 0 R (page.22) 569 0 R (page.23) 573 0 R (page.24) 577 0 R (page.25) 581 0 R (page.26) 587 0 R (page.27) 593 0 R (page.28) 599 0 R (page.29) 604 0 R (page.3) 379 0 R (page.30) 609 0 R (page.31) 619 0 R (page.32) 624 0 R (page.33) 628 0 R (page.34) 634 0 R (page.35) 641 0 R (page.36) 645 0 R (page.37) 654 0 R (page.38) 662 0 R (page.39) 666 0 R (page.4) 438 0 R (page.40) 672 0 R (page.41) 679 0 R (page.42) 685 0 R (page.43) 793 0 R (page.5) 448 0 R (page.6) 458 0 R (page.7) 465 0 R (page.8) 474 0 R (page.9) 478 0 R (section*.1) 329 0 R (section*.10) 673 0 R (section*.11) 674 0 R (section*.12) 675 0 R (section*.13) 686 0 R (section*.2) 412 0 R (section*.3) 501 0 R (section*.4) 508 0 R (section*.5) 509 0 R (section*.6) 516 0 R (section*.7) 518 0 R (section*.8) 655 0 R (section*.9) 668 0 R (section.1) 6 0 R (section.2) 38 0 R (section.3) 158 0 R (section.4) 198 0 R (section.5) 210 0 R (section.6) 250 0 R (section.7) 262 0 R (section.8) 282 0 R (section.9) 294 0 R (subsection.1.1) 10 0 R (subsection.1.2) 14 0 R (subsection.1.3) 18 0 R (subsection.1.4) 22 0 R (subsection.1.5) 26 0 R (subsection.1.6) 30 0 R (subsection.1.7) 34 0 R (subsection.2.1) 42 0 R (subsection.2.2) 46 0 R (subsection.2.3) 62 0 R (subsection.2.4) 110 0 R (subsection.2.5) 130 0 R (subsection.2.6) 138 0 R (subsection.3.1) 162 0 R (subsection.3.2) 170 0 R (subsection.3.3) 174 0 R (subsection.3.4) 178 0 R (subsection.3.5) 190 0 R (subsection.4.1) 202 0 R (subsection.4.2) 206 0 R (subsection.5.1) 214 0 R (subsection.5.2) 226 0 R (subsection.5.3) 242 0 R (subsection.6.1) 254 0 R (subsection.6.2) 258 0 R (subsection.7.1) 266 0 R (subsection.7.2) 274 0 R (subsection.8.1) 286 0 R (subsection.8.2) 290 0 R (subsection.9.1) 298 0 R (subsection.9.2) 302 0 R (subsection.9.3) 306 0 R (subsubsection.2.2.1) 50 0 R (subsubsection.2.2.2) 54 0 R (subsubsection.2.2.3) 58 0 R (subsubsection.2.3.1) 66 0 R (subsubsection.2.3.10) 102 0 R (subsubsection.2.3.11) 106 0 R (subsubsection.2.3.2) 70 0 R (subsubsection.2.3.3) 74 0 R (subsubsection.2.3.4) 78 0 R (subsubsection.2.3.5) 82 0 R (subsubsection.2.3.6) 86 0 R (subsubsection.2.3.7) 90 0 R (subsubsection.2.3.8) 94 0 R (subsubsection.2.3.9) 98 0 R (subsubsection.2.4.1) 114 0 R (subsubsection.2.4.2) 118 0 R (subsubsection.2.4.3) 122 0 R (subsubsection.2.4.4) 126 0 R (subsubsection.2.5.1) 134 0 R (subsubsection.2.6.1) 142 0 R (subsubsection.2.6.2) 146 0 R (subsubsection.2.6.3) 150 0 R (subsubsection.2.6.4) 154 0 R (subsubsection.3.1.1) 166 0 R (subsubsection.3.4.1) 182 0 R (subsubsection.3.4.2) 186 0 R (subsubsection.3.5.1) 194 0 R (subsubsection.5.1.1) 218 0 R (subsubsection.5.1.2) 222 0 R (subsubsection.5.2.1) 230 0 R (subsubsection.5.2.2) 234 0 R (subsubsection.5.2.3) 238 0 R (subsubsection.5.3.1) 246 0 R (subsubsection.7.1.1) 270 0 R (subsubsection.7.2.1) 278 0 R] -/Limits [(Doc-Start) (subsubsection.7.2.1)] ->> endobj -866 0 obj << -/Kids [865 0 R] ->> endobj -867 0 obj << -/Dests 866 0 R ->> endobj -868 0 obj << -/Type /Catalog -/Pages 863 0 R -/Outlines 864 0 R -/Names 867 0 R -/PageMode /UseOutlines -/OpenAction 309 0 R -/PTEX.Fullbanner (This is pdfTeX, Version 3.141592-1.11b) ->> endobj -869 0 obj << -/Author()/Title()/Subject()/Creator(LaTeX with hyperref package)/Producer(pdfeTeX-1.11b)/Keywords() -/CreationDate (D:20100418122440+10'00') ->> endobj -xref -0 870 -0000000001 65535 f -0000000002 00000 f -0000000003 00000 f -0000000004 00000 f -0000000315 00000 f -0000000009 00000 n -0000033722 00000 n -0000243907 00000 n -0000000054 00000 n -0000000080 00000 n -0000033782 00000 n -0000243835 00000 n -0000000130 00000 n -0000000164 00000 n -0000033843 00000 n -0000243749 00000 n -0000000215 00000 n -0000000246 00000 n -0000037916 00000 n -0000243663 00000 n -0000000297 00000 n -0000000334 00000 n -0000037977 00000 n -0000243577 00000 n -0000000385 00000 n -0000000411 00000 n -0000042400 00000 n -0000243491 00000 n -0000000462 00000 n -0000000498 00000 n -0000046923 00000 n -0000243405 00000 n -0000000549 00000 n -0000000599 00000 n -0000050931 00000 n -0000243332 00000 n -0000000650 00000 n -0000000709 00000 n -0000050991 00000 n -0000243206 00000 n -0000000755 00000 n -0000000787 00000 n -0000054283 00000 n -0000243132 00000 n -0000000838 00000 n -0000000880 00000 n -0000054344 00000 n -0000243008 00000 n -0000000931 00000 n -0000000962 00000 n -0000057745 00000 n -0000242934 00000 n -0000001018 00000 n -0000001053 00000 n -0000061404 00000 n -0000242847 00000 n -0000001109 00000 n -0000001144 00000 n -0000061465 00000 n -0000242773 00000 n -0000001200 00000 n -0000001254 00000 n -0000064233 00000 n -0000242646 00000 n -0000001305 00000 n -0000001361 00000 n -0000064294 00000 n -0000242572 00000 n -0000001417 00000 n -0000001464 00000 n -0000064355 00000 n -0000242485 00000 n -0000001520 00000 n -0000001572 00000 n -0000064416 00000 n -0000242398 00000 n -0000001628 00000 n -0000001673 00000 n -0000064539 00000 n -0000242311 00000 n -0000001729 00000 n -0000001760 00000 n -0000068839 00000 n -0000242224 00000 n -0000001816 00000 n -0000001865 00000 n -0000068900 00000 n -0000242137 00000 n -0000001921 00000 n -0000001981 00000 n -0000072862 00000 n -0000242050 00000 n -0000002037 00000 n -0000002091 00000 n -0000072985 00000 n -0000241963 00000 n -0000002147 00000 n -0000002179 00000 n -0000073046 00000 n -0000241874 00000 n -0000002235 00000 n -0000002277 00000 n -0000076617 00000 n -0000241783 00000 n -0000002335 00000 n -0000002392 00000 n -0000076679 00000 n -0000241705 00000 n -0000002450 00000 n -0000002507 00000 n -0000076741 00000 n -0000241575 00000 n -0000002559 00000 n -0000002595 00000 n -0000080933 00000 n -0000241496 00000 n -0000002652 00000 n -0000002694 00000 n -0000080994 00000 n -0000241403 00000 n -0000002751 00000 n -0000002793 00000 n -0000087584 00000 n -0000241310 00000 n -0000002850 00000 n -0000002886 00000 n -0000090988 00000 n -0000241231 00000 n -0000002943 00000 n -0000002985 00000 n -0000091049 00000 n -0000241100 00000 n -0000003037 00000 n -0000003073 00000 n -0000091111 00000 n -0000241035 00000 n -0000003130 00000 n -0000003173 00000 n -0000091172 00000 n -0000240918 00000 n -0000003225 00000 n -0000003262 00000 n -0000094968 00000 n -0000240839 00000 n -0000003319 00000 n -0000003355 00000 n -0000095030 00000 n -0000240746 00000 n -0000003412 00000 n -0000003453 00000 n -0000095092 00000 n -0000240653 00000 n -0000003510 00000 n -0000003565 00000 n -0000099542 00000 n -0000240574 00000 n -0000003622 00000 n -0000003680 00000 n -0000102966 00000 n -0000240443 00000 n -0000003727 00000 n -0000003779 00000 n -0000103028 00000 n -0000240325 00000 n -0000003831 00000 n -0000003865 00000 n -0000106241 00000 n -0000240260 00000 n -0000003922 00000 n -0000003969 00000 n -0000109478 00000 n -0000240167 00000 n -0000004021 00000 n -0000004057 00000 n -0000112957 00000 n -0000240074 00000 n -0000004109 00000 n -0000004153 00000 n -0000116276 00000 n -0000239942 00000 n -0000004205 00000 n -0000004249 00000 n -0000116338 00000 n -0000239863 00000 n -0000004306 00000 n -0000004349 00000 n -0000116462 00000 n -0000239784 00000 n -0000004406 00000 n -0000004448 00000 n -0000120351 00000 n -0000239666 00000 n -0000004500 00000 n -0000004540 00000 n -0000120412 00000 n -0000239601 00000 n -0000004597 00000 n -0000004634 00000 n -0000127250 00000 n -0000239469 00000 n -0000004681 00000 n -0000004731 00000 n -0000127312 00000 n -0000239390 00000 n -0000004783 00000 n -0000004816 00000 n -0000127374 00000 n -0000239311 00000 n -0000004868 00000 n -0000004925 00000 n -0000131280 00000 n -0000239179 00000 n -0000004972 00000 n -0000005007 00000 n -0000131342 00000 n -0000239061 00000 n -0000005059 00000 n -0000005106 00000 n -0000131404 00000 n -0000238982 00000 n -0000005163 00000 n -0000005204 00000 n -0000131466 00000 n -0000238903 00000 n -0000005261 00000 n -0000005307 00000 n -0000134613 00000 n -0000238771 00000 n -0000005359 00000 n -0000005413 00000 n -0000134675 00000 n -0000238692 00000 n -0000005470 00000 n -0000005520 00000 n -0000134737 00000 n -0000238599 00000 n -0000005577 00000 n -0000005629 00000 n -0000137730 00000 n -0000238520 00000 n -0000005686 00000 n -0000005734 00000 n -0000137792 00000 n -0000238402 00000 n -0000005786 00000 n -0000005831 00000 n -0000137854 00000 n -0000238337 00000 n -0000005888 00000 n -0000005929 00000 n -0000137916 00000 n -0000238205 00000 n -0000005976 00000 n -0000006001 00000 n -0000137978 00000 n -0000238126 00000 n -0000006053 00000 n -0000006082 00000 n -0000138040 00000 n -0000238047 00000 n -0000006134 00000 n -0000006165 00000 n -0000138102 00000 n -0000237915 00000 n -0000006212 00000 n -0000006240 00000 n -0000140783 00000 n -0000237797 00000 n -0000006292 00000 n -0000006330 00000 n -0000140845 00000 n -0000237732 00000 n -0000006387 00000 n -0000006426 00000 n -0000145119 00000 n -0000237614 00000 n -0000006478 00000 n -0000006520 00000 n -0000145243 00000 n -0000237549 00000 n -0000006577 00000 n -0000006616 00000 n -0000151545 00000 n -0000237417 00000 n -0000006663 00000 n -0000006715 00000 n -0000151607 00000 n -0000237338 00000 n -0000006767 00000 n -0000006803 00000 n -0000155158 00000 n -0000237259 00000 n -0000006855 00000 n -0000006898 00000 n -0000159196 00000 n -0000237141 00000 n -0000006945 00000 n -0000007007 00000 n -0000159258 00000 n -0000237062 00000 n -0000007059 00000 n -0000007095 00000 n -0000162847 00000 n -0000236969 00000 n -0000007147 00000 n -0000007197 00000 n -0000166295 00000 n -0000236890 00000 n -0000007249 00000 n -0000007286 00000 n -0000009082 00000 n -0000009325 00000 n -0000007338 00000 n -0000009201 00000 n -0000009263 00000 n -0000000317 00000 f -0000235554 00000 n -0000000327 00000 f -0000235461 00000 n -0000235646 00000 n -0000019925 00000 n -0000012002 00000 n -0000009410 00000 n -0000019801 00000 n -0000234953 00000 n -0000222499 00000 n -0000234770 00000 n -0000000383 00000 f -0000222408 00000 n -0000019863 00000 n -0000012501 00000 n -0000012653 00000 n -0000012810 00000 n -0000012967 00000 n -0000013124 00000 n -0000013281 00000 n -0000013437 00000 n -0000013594 00000 n -0000013751 00000 n -0000013903 00000 n -0000014059 00000 n -0000014216 00000 n -0000014376 00000 n -0000014537 00000 n -0000014696 00000 n -0000014853 00000 n -0000015014 00000 n -0000015175 00000 n -0000015336 00000 n -0000015497 00000 n -0000015658 00000 n -0000015819 00000 n -0000015980 00000 n -0000016141 00000 n -0000016302 00000 n -0000016464 00000 n -0000016626 00000 n -0000016782 00000 n -0000016943 00000 n -0000017103 00000 n -0000017264 00000 n -0000017425 00000 n -0000017581 00000 n -0000017741 00000 n -0000017897 00000 n -0000018058 00000 n -0000018218 00000 n -0000018379 00000 n -0000018540 00000 n -0000018692 00000 n -0000018849 00000 n -0000019010 00000 n -0000019167 00000 n -0000019324 00000 n -0000019481 00000 n -0000019640 00000 n -0000029514 00000 n -0000022562 00000 n -0000020036 00000 n -0000029390 00000 n -0000023021 00000 n -0000023177 00000 n -0000023337 00000 n -0000000441 00000 f -0000222311 00000 n -0000023489 00000 n -0000023646 00000 n -0000023803 00000 n -0000023955 00000 n -0000024112 00000 n -0000024273 00000 n -0000024434 00000 n -0000024591 00000 n -0000024752 00000 n -0000024913 00000 n -0000025074 00000 n -0000025231 00000 n -0000025392 00000 n -0000025544 00000 n -0000025701 00000 n -0000025857 00000 n -0000026009 00000 n -0000026166 00000 n -0000026326 00000 n -0000026482 00000 n -0000026642 00000 n -0000026794 00000 n -0000026951 00000 n -0000027108 00000 n -0000027259 00000 n -0000027416 00000 n -0000027573 00000 n -0000029452 00000 n -0000027728 00000 n -0000027878 00000 n -0000028029 00000 n -0000028180 00000 n -0000028331 00000 n -0000028482 00000 n -0000028633 00000 n -0000028784 00000 n -0000028935 00000 n -0000029086 00000 n -0000029238 00000 n -0000042338 00000 n -0000046863 00000 n -0000094908 00000 n -0000099481 00000 n -0000113019 00000 n -0000116400 00000 n -0000116524 00000 n -0000123421 00000 n -0000123482 00000 n -0000145181 00000 n -0000147589 00000 n -0000033904 00000 n -0000032877 00000 n -0000029638 00000 n -0000033660 00000 n -0000033040 00000 n -0000033192 00000 n -0000000629 00000 f -0000222223 00000 n -0000033343 00000 n -0000033504 00000 n -0000038038 00000 n -0000037228 00000 n -0000034041 00000 n -0000037854 00000 n -0000037383 00000 n -0000037540 00000 n -0000037697 00000 n -0000219684 00000 n -0000217833 00000 n -0000219523 00000 n -0000042461 00000 n -0000041668 00000 n -0000038188 00000 n -0000042276 00000 n -0000041823 00000 n -0000041973 00000 n -0000042125 00000 n -0000046984 00000 n -0000046020 00000 n -0000042598 00000 n -0000046801 00000 n -0000046183 00000 n -0000046345 00000 n -0000046494 00000 n -0000046650 00000 n -0000235763 00000 n -0000051052 00000 n -0000050750 00000 n -0000047121 00000 n -0000050869 00000 n -0000054405 00000 n -0000053586 00000 n -0000051202 00000 n -0000054221 00000 n -0000053741 00000 n -0000053897 00000 n -0000054059 00000 n -0000057868 00000 n -0000057225 00000 n -0000054542 00000 n -0000057683 00000 n -0000057372 00000 n -0000057529 00000 n -0000057806 00000 n -0000061526 00000 n -0000061041 00000 n -0000057992 00000 n -0000061342 00000 n -0000061180 00000 n -0000215417 00000 n -0000211607 00000 n -0000215255 00000 n -0000064600 00000 n -0000064052 00000 n -0000061663 00000 n -0000064171 00000 n -0000064477 00000 n -0000069147 00000 n -0000068322 00000 n -0000064724 00000 n -0000068777 00000 n -0000068469 00000 n -0000068622 00000 n -0000068961 00000 n -0000069023 00000 n -0000069085 00000 n -0000235880 00000 n -0000073231 00000 n -0000072345 00000 n -0000069271 00000 n -0000072800 00000 n -0000072923 00000 n -0000072492 00000 n -0000073107 00000 n -0000072648 00000 n -0000073169 00000 n -0000076803 00000 n -0000076436 00000 n -0000073355 00000 n -0000076555 00000 n -0000081118 00000 n -0000080085 00000 n -0000076940 00000 n -0000080871 00000 n -0000080248 00000 n -0000080401 00000 n -0000080558 00000 n -0000080715 00000 n -0000081056 00000 n -0000084342 00000 n -0000083979 00000 n -0000081242 00000 n -0000084280 00000 n -0000084118 00000 n -0000087646 00000 n -0000087403 00000 n -0000084479 00000 n -0000087522 00000 n -0000209025 00000 n -0000206912 00000 n -0000208863 00000 n -0000091234 00000 n -0000090636 00000 n -0000087809 00000 n -0000090926 00000 n -0000090775 00000 n -0000235997 00000 n -0000095154 00000 n -0000094397 00000 n -0000091371 00000 n -0000094846 00000 n -0000094544 00000 n -0000094695 00000 n -0000099726 00000 n -0000098964 00000 n -0000095291 00000 n -0000099419 00000 n -0000099111 00000 n -0000099265 00000 n -0000099604 00000 n -0000099666 00000 n -0000103090 00000 n -0000102785 00000 n -0000099889 00000 n -0000102904 00000 n -0000106303 00000 n -0000106060 00000 n -0000103240 00000 n -0000106179 00000 n -0000109540 00000 n -0000109297 00000 n -0000106440 00000 n -0000109416 00000 n -0000113081 00000 n -0000112605 00000 n -0000109677 00000 n -0000112895 00000 n -0000112744 00000 n -0000236114 00000 n -0000116586 00000 n -0000115765 00000 n -0000113218 00000 n -0000116214 00000 n -0000115912 00000 n -0000116063 00000 n -0000120474 00000 n -0000119841 00000 n -0000116710 00000 n -0000120289 00000 n -0000119988 00000 n -0000120138 00000 n -0000123544 00000 n -0000123070 00000 n -0000120598 00000 n -0000123359 00000 n -0000123209 00000 n -0000127436 00000 n -0000126898 00000 n -0000123668 00000 n -0000127188 00000 n -0000127037 00000 n -0000131528 00000 n -0000130610 00000 n -0000127560 00000 n -0000131218 00000 n -0000130765 00000 n -0000130916 00000 n -0000131067 00000 n -0000204589 00000 n -0000202576 00000 n -0000204427 00000 n -0000134799 00000 n -0000134432 00000 n -0000131678 00000 n -0000134551 00000 n -0000236231 00000 n -0000138164 00000 n -0000137549 00000 n -0000134923 00000 n -0000137668 00000 n -0000140906 00000 n -0000140602 00000 n -0000138301 00000 n -0000140721 00000 n -0000000000 00000 f -0000202476 00000 n -0000145304 00000 n -0000144436 00000 n -0000141043 00000 n -0000145057 00000 n -0000144591 00000 n -0000144743 00000 n -0000144905 00000 n -0000147651 00000 n -0000147408 00000 n -0000145441 00000 n -0000147527 00000 n -0000151669 00000 n -0000151017 00000 n -0000147788 00000 n -0000151483 00000 n -0000198254 00000 n -0000196186 00000 n -0000198094 00000 n -0000151164 00000 n -0000151321 00000 n -0000155220 00000 n -0000154574 00000 n -0000151844 00000 n -0000155034 00000 n -0000155096 00000 n -0000154721 00000 n -0000154883 00000 n -0000236348 00000 n -0000159320 00000 n -0000159015 00000 n -0000155357 00000 n -0000159134 00000 n -0000162971 00000 n -0000162485 00000 n -0000159457 00000 n -0000162785 00000 n -0000162624 00000 n -0000162909 00000 n -0000166357 00000 n -0000165928 00000 n -0000163095 00000 n -0000166047 00000 n -0000166109 00000 n -0000166171 00000 n -0000166233 00000 n -0000167516 00000 n -0000166993 00000 n -0000166481 00000 n -0000167454 00000 n -0000167140 00000 n -0000167297 00000 n -0000186169 00000 n -0000169754 00000 n -0000167614 00000 n -0000186045 00000 n -0000186107 00000 n -0000170709 00000 n -0000170858 00000 n -0000171007 00000 n -0000171156 00000 n -0000171305 00000 n -0000171454 00000 n -0000171603 00000 n -0000171752 00000 n -0000171900 00000 n -0000172048 00000 n -0000172197 00000 n -0000172346 00000 n -0000172494 00000 n -0000172643 00000 n -0000172791 00000 n -0000172940 00000 n -0000173088 00000 n -0000173237 00000 n -0000173386 00000 n -0000173535 00000 n -0000173685 00000 n -0000173834 00000 n -0000173983 00000 n -0000174131 00000 n -0000174280 00000 n -0000174429 00000 n -0000174577 00000 n -0000174726 00000 n -0000174875 00000 n -0000175024 00000 n -0000175173 00000 n -0000175321 00000 n -0000175470 00000 n -0000175619 00000 n -0000175768 00000 n -0000175915 00000 n -0000176064 00000 n -0000176212 00000 n -0000176362 00000 n -0000176511 00000 n -0000176660 00000 n -0000176809 00000 n -0000176958 00000 n -0000177107 00000 n -0000177256 00000 n -0000177405 00000 n -0000177554 00000 n -0000177703 00000 n -0000177853 00000 n -0000178002 00000 n -0000178151 00000 n -0000178300 00000 n -0000178448 00000 n -0000178597 00000 n -0000178747 00000 n -0000178897 00000 n -0000179046 00000 n -0000179195 00000 n -0000179344 00000 n -0000179493 00000 n -0000179641 00000 n -0000179790 00000 n -0000179939 00000 n -0000180088 00000 n -0000180237 00000 n -0000180386 00000 n -0000180535 00000 n -0000180684 00000 n -0000180833 00000 n -0000180982 00000 n -0000181131 00000 n -0000181280 00000 n -0000181429 00000 n -0000181579 00000 n -0000181728 00000 n -0000181877 00000 n -0000182026 00000 n -0000182174 00000 n -0000182323 00000 n -0000182472 00000 n -0000182621 00000 n -0000182770 00000 n -0000182918 00000 n -0000183067 00000 n -0000183216 00000 n -0000183366 00000 n -0000183515 00000 n -0000183663 00000 n -0000183812 00000 n -0000183961 00000 n -0000184111 00000 n -0000184260 00000 n -0000184410 00000 n -0000184559 00000 n -0000184708 00000 n -0000184857 00000 n -0000185005 00000 n -0000185154 00000 n -0000185303 00000 n -0000185451 00000 n -0000185599 00000 n -0000185748 00000 n -0000185897 00000 n -0000196075 00000 n -0000187410 00000 n -0000186267 00000 n -0000196013 00000 n -0000187973 00000 n -0000188122 00000 n -0000188271 00000 n -0000188420 00000 n -0000188569 00000 n -0000188719 00000 n -0000188868 00000 n -0000189018 00000 n -0000189168 00000 n -0000189317 00000 n -0000189465 00000 n -0000189614 00000 n -0000189763 00000 n -0000189912 00000 n -0000190061 00000 n -0000190209 00000 n -0000190359 00000 n -0000190507 00000 n -0000190655 00000 n -0000190804 00000 n -0000190953 00000 n -0000191102 00000 n -0000191250 00000 n -0000191398 00000 n -0000191548 00000 n -0000191697 00000 n -0000191846 00000 n -0000191995 00000 n -0000192143 00000 n -0000192292 00000 n -0000192441 00000 n -0000192589 00000 n -0000192738 00000 n -0000192888 00000 n -0000193037 00000 n -0000193186 00000 n -0000193335 00000 n -0000193483 00000 n -0000193632 00000 n -0000193781 00000 n -0000193930 00000 n -0000194078 00000 n -0000194226 00000 n -0000194374 00000 n -0000194522 00000 n -0000194671 00000 n -0000194820 00000 n -0000194969 00000 n -0000195119 00000 n -0000195268 00000 n -0000195417 00000 n -0000195566 00000 n -0000195715 00000 n -0000195864 00000 n -0000236465 00000 n -0000198499 00000 n -0000198471 00000 n -0000200610 00000 n -0000204812 00000 n -0000204788 00000 n -0000209489 00000 n -0000209275 00000 n -0000215787 00000 n -0000215635 00000 n -0000220113 00000 n -0000219909 00000 n -0000235281 00000 n -0000236542 00000 n -0000236660 00000 n -0000236745 00000 n -0000236815 00000 n -0000244016 00000 n -0000247504 00000 n -0000247543 00000 n -0000247581 00000 n -0000247769 00000 n -trailer -<< -/Size 870 -/Root 868 0 R -/Info 869 0 R -/ID [<72D7838B14B6618DC37BE082EA2234A6> <72D7838B14B6618DC37BE082EA2234A6>] ->> -startxref -247932 -%%EOF diff --git a/Grammars/Oberon10Independent (by Juliet)/GPLex_GPPG/Gplex.exe b/Grammars/Oberon10Independent (by Juliet)/GPLex_GPPG/Gplex.exe deleted file mode 100644 index 51a522e221f5ca52cc934933e08745f1653a98b5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 240640 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
)dSj_j?LPEm0 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 diff --git a/Grammars/Oberon10Independent (by Juliet)/GPLex_GPPG/Gppg.exe b/Grammars/Oberon10Independent (by Juliet)/GPLex_GPPG/Gppg.exe deleted file mode 100644 index edca401986741541f14b7d4bd89adc57802327a2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 152064 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